You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

48 lines
2.9 MiB

!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){"use strict";function n(e,t,n){t=t||ae;var r,i=t.createElement("script");if(i.text=e,n)for(r in be)n[r]&&(i[r]=n[r]);t.head.appendChild(i).parentNode.removeChild(i)}function r(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?pe[de.call(e)]||"object":typeof e}function i(e){var t=!!e&&"length"in e&&e.length,n=r(e);return!me(e)&&!xe(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}function o(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}function a(e,t,n){return me(t)?we.grep(e,function(e,r){return!!t.call(e,r,e)!==n}):t.nodeType?we.grep(e,function(e){return e===t!==n}):"string"!=typeof t?we.grep(e,function(e){return fe.call(t,e)>-1!==n}):we.filter(t,e,n)}function s(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}function u(e){var t={};return we.each(e.match(Le)||[],function(e,n){t[n]=!0}),t}function l(e){return e}function c(e){throw e}function f(e,t,n,r){var i;try{e&&me(i=e.promise)?i.call(e).done(t).fail(n):e&&me(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}function p(){ae.removeEventListener("DOMContentLoaded",p),e.removeEventListener("load",p),we.ready()}function d(e,t){return t.toUpperCase()}function h(e){return e.replace(Me,"ms-").replace(Re,d)}function g(){this.expando=we.expando+g.uid++}function v(e){return"true"===e||"false"!==e&&("null"===e?null:e===+e+""?+e:Be.test(e)?JSON.parse(e):e)}function y(e,t,n){var r;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(Fe,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n=v(n)}catch(e){}$e.set(e,t,n)}else n=void 0;return n}function m(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return we.css(e,t,"")},u=s(),l=n&&n[3]||(we.cssNumber[t]?"":"px"),c=(we.cssNumber[t]||"px"!==l&&+u)&&ze.exec(we.css(e,t));if(c&&c[3]!==l){for(u/=2,l=l||c[3],c=+u||1;a--;)we.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,we.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function x(e){var t,n=e.ownerDocument,r=e.nodeName,i=Ge[r];return i||(t=n.body.appendChild(n.createElement(r)),i=we.css(t,"display"),t.parentNode.removeChild(t),"none"===i&&(i="block"),Ge[r]=i,i)}function b(e,t){for(var n,r,i=[],o=0,a=e.length;o<a;o++)r=e[o],r.style&&(n=r.style.display,t?("none"===n&&(i[o]=We.get(r,"display")||null,i[o]||(r.style.display="")),""===r.style.display&&Ue(r)&&(i[o]=x(r))):"none"!==n&&(i[o]="none",We.set(r,"display",n)));for(o=0;o<a;o++)null!=i[o]&&(e[o].style.display=i[o]);return e}function w(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&o(e,t)?we.merge([e],n):n}function T(e,t){for(var n=0,r=e.length;n<r;n++)We.set(e[n],"globalEval",!t||We.get(t[n],"globalEval"))}function C(e,t,n,i,o){for(var a,s,u,l,c,f,p=t.createDocumentFragment(),d=[],h=0,g=e.length;h<g;h++)if((a=e[h])||0===a)if("object"===r(a))we.merge(d,a.nodeType?[a]:a);else if(Ze.test(a)){for(s=s||p.appendChild(t.createElement("div")),u=(Qe.exec(a)||["",""])[1].toLowerCase(),l=Ke[u]||Ke._default,s.innerHTML=l[1]+we.htmlPrefilter(a)+l[2],f=l[0];f--;)s=s.lastChild;we.merge(d,s.childNodes),s=p.firstChild,s.textContent=""}else d.push(t.createTextNode(a));for(p.textContent="",h=0;a=d[h++];)if(i&&we.inArray(a,i)>-1)o&&o.push(a);else if(c=we.contains(a.ownerDocument,a),s=w(p.appendChild(a),"script"),c&&T(s),n)for(f=0;a=s[f++];)Je.test(a.type||"")&&n.push(a);return p}function E(){return!0}function k(){return!1}function S(){try{return ae.activeElement}catch(e){}}function D(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)D(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=k;else if(!i)return e;return 1===o&&(a=i,i=function(e){return we().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=we.guid++)),e.each(function(){we.event.add(this,t,i,r,n)})}function N(e,t){return o(e,"table")&&o(11!==t.nodeType?t:t.firstChild,"tr")?we(e).children("tbody")[0]||e:e}function A(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function j(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function q(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(We.hasData(e)&&(o=We.access(e),a=We.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n<r;n++)we.event.add(t,i,l[i][n])}$e.hasData(e)&&(s=$e.access(e),u=we.extend({},s),$e.set(t,u))}}function L(e,t){var n=t.nodeName.toLowerCase();"input"===n&&Ye.test(e.type)?t.checked=e.checked:"input"!==n&&"textarea"!==n||(t.defaultValue=e.defaultValue)}function H(e,t,r,i){t=le.apply([],t);var o,a,s,u,l,c,f=0,p=e.length,d=p-1,h=t[0],g=me(h);if(g||p>1&&"string"==typeof h&&!ye.checkClone&&at.test(h))return e.each(function(n){var o=e.eq(n);g&&(t[0]=h.call(this,n,o.html())),H(o,t,r,i)});if(p&&(o=C(t,e[0].ownerDocument,!1,e,i),a=o.firstChild,1===o.childNodes.length&&(o=a),a||i)){for(s=we.map(w(o,"script"),A),u=s.length;f<p;f++)l=o,f!==d&&(l=we.clone(l,!0,!0),u&&we.merge(s,w(l,"script"))),r.call(e[f],l,f);if(u)for(c=s[s.length-1].ownerDocument,we.map(s,j),f=0;f<u;f++)l=s[f],Je.test(l.type||"")&&!We.access(l,"globalEval")&&we.contains(c,l)&&(l.src&&"module"!==(l.type||"").toLowerCase()?we._evalUrl&&we._evalUrl(l.src):n(l.textContent.replace(st,""),c,l))}return e}function O(e,t,n){for(var r,i=t?we.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||we.cleanData(w(r)),r.parentNode&&(n&&we.contains(r.ownerDocument,r)&&T(w(r,"script")),r.parentNode.removeChild(r));return e}function P(e,t,n){var r,i,o,a,s=e.style;return n=n||lt(e),n&&(a=n.getPropertyValue(t)||n[t],""!==a||we.contains(e.ownerDocument,e)||(a=we.style(e,t)),!ye.pixelBoxStyles()&&ut.test(a)&&ct.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function M(e,t){return{get:function(){return e()?void delete this.get:(this.get=t).apply(this,arguments)}}}function R(e){if(e in vt)return e;for(var t=e[0].toUpperCase()+e.slice(1),n=gt.length;n--;)if((e=gt[n]+t)in vt)return e}function I(e){var t=we.cssProps[e];return t||(t=we.cssProps[e]=R(e)||e),t}function W(e,t,n){var r=ze.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function $(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=we.css(e,n+Xe[a],!0,i)),r?("content"===n&&(u-=we.css(e,"padding"+Xe[a],!0,i)),"margin"!==n&&(u-=we.css(e,"border"+Xe[a]+"Width",!0,i))):(u+=we.css(e,"padding"+Xe[a],!0,i),"padding"!==n?u+=we.css(e,"border"+Xe[a]+"Width",!0,i):s+=we.css(e,"border"+Xe[a]+"Width",!0,i));return!r&&o>=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function B(e,t,n){var r=lt(e),i=P(e,t,r),o="border-box"===we.css(e,"boxSizing",!1,r),a=o;if(ut.test(i)){if(!n)return i;i="auto"}return a=a&&(ye.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===we.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+$(e,t,n||(o?"border":"content"),a,r,i)+"px"}function F(e,t,n,r,i){return new F.prototype.init(e,t,n,r,i)}function _(){mt&&(!1===ae.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(_):e.setTimeout(_,we.fx.interval),we.fx.tick())}function z(){return e.setTimeout(function(){yt=void 0}),yt=Date.now()}function X(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)n=Xe[r],i["margin"+n]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function U(e,t,n){for(var r,i=(Y.tweeners[t]||[]).concat(Y.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function V(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&Ue(e),v=We.get(e,"fxshow");n.queue||(a=we._queueHooks(e,"fx"),null==a.unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,we.queue(e,"fx").length||a.empty.fire()})}));for(r in t)if(i=t[r],xt.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||we.style(e,r)}if((u=!we.isEmptyObject(t))||!we.isEmptyObject(d)){f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],l=v&&v.display,null==l&&(l=We.get(e,"display")),c=we.css(e,"display"),"none"===c&&(l?c=l:(b([e],!0),l=e.style.display||l,c=we.css(e,"display"),b([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===we.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(v?"hidden"in v&&(g=v.hidden):v=We.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&b([e],!0),p.done(function(){g||b([e]),We.remove(e,"fxshow");for(r in d)we.style(e,r,d[r])})),u=U(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}}function G(e,t){var n,r,i,o,a;for(n in e)if(r=h(n),i=t[r],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=we.cssHooks[r])&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function Y(e,t,n){var r,i,o=0,a=Y.prefilters.length,s=we.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=yt||z(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;a<u;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),o<1&&u?n:(u||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:we.extend({},t),opts:we.extend(!0,{specialEasing:{},easing:we.easing._default},n),originalProperties:t,originalOptions:n,startTime:yt||z(),duration:n.duration,tweens:[],createTween:function(t,n){var r=we.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c=l.props;for(G(c,l.opts.specialEasing);o<a;o++)if(r=Y.prefilters[o].call(l,e,c,l.opts))return me(r.stop)&&(we._queueHooks(l.elem,l.opts.queue).stop=r.stop.bind(r)),r;return we.map(c,U,l),me(l.opts.start)&&l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),we.fx.timer(we.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}function Q(e){return(e.match(Le)||[]).join(" ")}function J(e){return e.getAttribute&&e.getAttribute("class")||""}function K(e){return Array.isArray(e)?e:"string"==typeof e?e.match(Le)||[]:[]}function Z(e,t,n,i){var o;if(Array.isArray(t))we.each(t,function(t,r){n||qt.test(e)?i(e,r):Z(e+"["+("object"==typeof r&&null!=r?t:"")+"]",r,n,i)});else if(n||"object"!==r(t))i(e,t);else for(o in t)Z(e+"["+o+"]",t[o],n,i)}function ee(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(Le)||[];if(me(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function te(e,t,n,r){function i(s){var u;return o[s]=!0,we.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||a||o[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),i(l),!1)}),u}var o={},a=e===_t;return i(t.dataTypes[0])||!o["*"]&&i("*")}function ne(e,t){var n,r,i=we.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&we.extend(!0,e,r),e}function re(e,t,n){for(var r,i,o,a,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function ie(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=c.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if(s=i.split(" "),s[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}var oe=[],ae=e.document,se=Object.getPrototypeOf,ue=oe.slice,le=oe.concat,ce=oe.push,fe=oe.indexOf,pe={},de=pe.toString,he=pe.hasOwnProperty,ge=he.toString,ve=ge.call(Object),ye={},me=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},xe=function(e){return null!=e&&e===e.window},be={type:!0,src:!0,noModule:!0},we=function(e,t){return new we.fn.init(e,t)},Te=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;we.fn=we.prototype={jquery:"3.3.1",constructor:we,length:0,toArray:function(){return ue.call(this)},get:function(e){return null==e?ue.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=we.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return we.each(this,e)},map:function(e){return this.pushStack(we.map(this,function(t,n){return e.call(t,n,t)}))},slice:function(){return this.pushStack(ue.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:ce,sort:oe.sort,splice:oe.splice},we.extend=we.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||me(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)n=a[t],r=e[t],a!==r&&(l&&r&&(we.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&we.isPlainObject(n)?n:{},a[t]=we.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},we.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==de.call(e))&&(!(t=se(e))||"function"==typeof(n=he.call(t,"constructor")&&t.constructor)&&ge.call(n)===ve)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e){n(e)},each:function(e,t){var n,r=0;if(i(e))for(n=e.length;r<n&&!1!==t.call(e[r],r,e[r]);r++);else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?"":(e+"").replace(Te,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(i(Object(e))?we.merge(n,"string"==typeof e?[e]:e):ce.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:fe.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,o,a=0,s=[];if(i(e))for(r=e.length;a<r;a++)null!=(o=t(e[a],a,n))&&s.push(o);else for(a in e)null!=(o=t(e[a],a,n))&&s.push(o);return le.apply([],s)},guid:1,support:ye}),"function"==typeof Symbol&&(we.fn[Symbol.iterator]=oe[Symbol.iterator]),we.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){pe["[object "+t+"]"]=t.toLowerCase()});var Ce=function(e){function t(e,t,n,r){var i,o,a,s,u,c,p,d=t&&t.ownerDocument,h=t?t.nodeType:9;if(n=n||[],"string"!=typeof e||!e||1!==h&&9!==h&&11!==h)return n;if(!r&&((t?t.ownerDocument||t:W)!==q&&j(t),t=t||q,H)){if(11!==h&&(u=ge.exec(e)))if(i=u[1]){if(9===h){if(!(a=t.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(d&&(a=d.getElementById(i))&&R(t,a)&&a.id===i)return n.push(a),n}else{if(u[2])return Q.apply(n,t.getElementsByTagName(e)),n;if((i=u[3])&&b.getElementsByClassName&&t.getElementsByClassName)return Q.apply(n,t.getElementsByClassName(i)),n}if(b.qsa&&!z[e+" "]&&(!O||!O.test(e))){if(1!==h)d=t,p=e;else if("object"!==t.nodeName.toLowerCase()){for((s=t.getAttribute("id"))?s=s.replace(xe,be):t.setAttribute("id",s=I),c=E(e),o=c.length;o--;)c[o]="#"+s+" "+f(c[o]);p=c.join(","),d=ve.test(e)&&l(t.parentNode)||t}if(p)try{return Q.apply(n,d.querySelectorAll(p)),n}catch(e){}finally{s===I&&t.removeAttribute("id")}}}return S(e.replace(oe,"$1"),t,n,r)}function n(){function e(n,r){return t.push(n+" ")>w.cacheLength&&delete e[t.shift()],e[n+" "]=r}var t=[];return e}function r(e){return e[I]=!0,e}function i(e){var t=q.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function o(e,t){for(var n=e.split("|"),r=n.length;r--;)w.attrHandle[n[r]]=t}function a(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function s(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&Te(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function u(e){return r(function(t){return t=+t,r(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function l(e){return e&&void 0!==e.getElementsByTagName&&e}function c(){}function f(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function p(e,t,n){var r=t.dir,i=t.next,o=i||r,a=n&&"parentNode"===o,s=B++;return t.first?function(t,n,i){for(;t=t[r];)if(1===t.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p=[$,s];if(u){for(;t=t[r];)if((1===t.nodeType||a)&&e(t,n,u))return!0}else for(;t=t[r];)if(1===t.nodeType||a)if(f=t[I]||(t[I]={}),c=f[t.uniqueID]||(f[t.uniqueID]={}),i&&i===t.nodeName.toLowerCase())t=t[r]||t;else{if((l=c[o])&&l[0]===$&&l[1]===s)return p[2]=l[2];if(c[o]=p,p[2]=e(t,n,u))return!0}return!1}}function d(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function h(e,n,r){for(var i=0,o=n.length;i<o;i++)t(e,n[i],r);return r}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function v(e,t,n,i,o,a){return i&&!i[I]&&(i=v(i)),o&&!o[I]&&(o=v(o,a)),r(function(r,a,s,u){var l,c,f,p=[],d=[],v=a.length,y=r||h(t||"*",s.nodeType?[s]:s,[]),m=!e||!r&&t?y:g(y,p,e,s,u),x=n?o||(r?e:v||i)?[]:a:m;if(n&&n(m,x,s,u),i)for(l=g(x,d),i(l,[],s,u),c=l.length;c--;)(f=l[c])&&(x[d[c]]=!(m[d[c]]=f));if(r){if(o||e){if(o){for(l=[],c=x.length;c--;)(f=x[c])&&l.push(m[c]=f);o(null,x=[],l,u)}for(c=x.length;c--;)(f=x[c])&&(l=o?K(r,f):p[c])>-1&&(r[l]=!(a[l]=f))}}else x=g(x===a?x.splice(v,x.length):x),o?o(null,a,x,u):Q.apply(a,x)})}function y(e){for(var t,n,r,i=e.length,o=w.relative[e[0].type],a=o||w.relative[" "],s=o?1:0,u=p(function(e){return e===t},a,!0),l=p(function(e){return K(t,e)>-1},a,!0),c=[function(e,n,r){var i=!o&&(r||n!==D)||((t=n).nodeType?u(e,n,r):l(e,n,r));return t=null,i}];s<i;s++)if(n=w.relative[e[s].type])c=[p(d(c),n)];else{if(n=w.filter[e[s].type].apply(null,e[s].matches),n[I]){for(r=++s;r<i&&!w.relative[e[r].type];r++);return v(s>1&&d(c),s>1&&f(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(oe,"$1"),n,s<r&&y(e.slice(s,r)),r<i&&y(e=e.slice(r)),r<i&&f(e))}c.push(n)}return d(c)}function m(e,n){var i=n.length>0,o=e.length>0,a=function(r,a,s,u,l){var c,f,p,d=0,h="0",v=r&&[],y=[],m=D,x=r||o&&w.find.TAG("*",l),b=$+=null==m?1:Math.random()||.1,T=x.length;for(l&&(D=a===q||a||l);h!==T&&null!=(c=x[h]);h++){if(o&&c){for(f=0,a||c.ownerDocument===q||(j(c),s=!H);p=e[f++];)if(p(c,a||q,s)){u.push(c);break}l&&($=b)}i&&((c=!p&&c)&&d--,r&&v.push(c))}if(d+=h,i&&h!==d){for(f=0;p=n[f++];)p(v,y,a,s);if(r){if(d>0)for(;h--;)v[h]||y[h]||(y[h]=G.call(u));y=g(y)}Q.apply(u,y),l&&!r&&y.length>0&&d+n.length>1&&t.uniqueSort(u)}return l&&($=b,D=m),v};return i?r(a):a}var x,b,w,T,C,E,k,S,D,N,A,j,q,L,H,O,P,M,R,I="sizzle"+1*new Date,W=e.document,$=0,B=0,F=n(),_=n(),z=n(),X=function(e,t){return e===t&&(A=!0),0},U={}.hasOwnProperty,V=[],G=V.pop,Y=V.push,Q=V.push,J=V.slice,K=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},Z="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ee="[\\x20\\t\\r\\n\\f]",te="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",ne="\\["+ee+"*("+te+")(?:"+ee+"*([*^$|!~]?=)"+ee+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+te+"))|)"+ee+"*\\]",re=":("+te+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+ne+")*)|.*)\\)|)",ie=new RegExp(ee+"+","g"),oe=new RegExp("^"+ee+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ee+"+$","g"),ae=new RegExp("^"+ee+"*,"+ee+"*"),se=new RegExp("^"+ee+"*([>+~]|"+ee+")"+ee+"*"),ue=new RegExp("="+ee+"*([^\\]'\"]*?)"+ee+"*\\]","g"),le=new RegExp(re),ce=new RegExp("^"+te+"$"),fe={ID:new RegExp("^#("+te+")"),CLASS:new RegExp("^\\.("+te+")"),TAG:new RegExp("^("+te+"|[*])"),ATTR:new RegExp("^"+ne),PSEUDO:new RegExp("^"+re),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ee+"*(even|odd|(([+-]|)(\\d*)n|)"+ee+"*(?:([+-]|)"+ee+"*(\\d+)|))"+ee+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+ee+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ee+"*((?:-\\d)?\\d*)"+ee+"*\\)|)(?=[^-]|$)","i")},pe=/^(?:input|select|textarea|button)$/i,de=/^h\d$/i,he=/^[^{]+\{\s*\[native \w/,ge=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ve=/[+~]/,ye=new RegExp("\\\\([\\da-f]{1,6}"+ee+"?|("+ee+")|.)","ig"),me=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},xe=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,be=function(e,t){return t?"\0"===e?"<EFBFBD>":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},we=function(){j()},Te=p(function(e){return!0===e.disabled&&("form"in e||"label"in e)},{dir:"parentNode",next:"legend"});try{Q.apply(V=J.call(W.childNodes),W.childNodes),V[W.childNodes.length].nodeType}catch(e){Q={apply:V.length?function(e,t){Y.apply(e,J.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}b=t.support={},C=t.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return!!t&&"HTML"!==t.nodeName},j=t.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:W;return r!==q&&9===r.nodeType&&r.documentElement?(q=r,L=q.documentElement,H=!C(q),W!==q&&(n=q.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",we,!1):n.attachEvent&&n.attachEvent("onunload",we)),b.attributes=i(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByTagName=i(function(e){return e.appendChild(q.createComment("")),!e.getElementsByTagName("*").length}),b.getElementsByClassName=he.test(q.getElementsByClassName),b.getById=i(function(e){return L.appendChild(e).id=I,!q.getElementsByName||!q.getElementsByName(I).length}),b.getById?(w.filter.ID=function(e){var t=e.replace(ye,me);return function(e){return e.getAttribute("id")===t}},w.find.ID=function(e,t){if(void 0!==t.getElementById&&H){var n=t.getElementById(e);return n?[n]:[]}}):(w.filter.ID=function(e){var t=e.replace(ye,me);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},w.find.ID=function(e,t){if(void 0!==t.getElementById&&H){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),w.find.TAG=b.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):b.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=b.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&H)return t.getElementsByClassName(e)},P=[],O=[],(b.qsa=he.test(q.querySelectorAll))&&(i(function(e){L.appendChild(e).innerHTML="<a id='"+I+"'></a><select id='"+I+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&O.push("[*^$]="+ee+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||O.push("\\["+ee+"*(?:value|"+Z+")"),e.querySelectorAll("[id~="+I+"-]").length||O.push("~="),e.querySelectorAll(":checked").length||O.push(":checked"),e.querySelectorAll("a#"+I+"+*").length||O.push(".#.+[+~]")}),i(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=q.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&O.push("name"+ee+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&O.push(":enabled",":disabled"),L.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&O.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),O.push(",.*:")})),(b.matchesSelector=he.test(M=L.matches||L.webkitMatchesSelector||L.mozMatchesSelector||L.oMatchesSelector||L.msMatchesSelector))&&i(function(e){b.disconnectedMatch=M.call(e,"*"),M.call(e,"[s!='']:x"),P.push("!=",re)}),O=O.length&&new RegExp(O.join("|")),P=P.length&&new RegExp(P.join("|")),t=he.test(L.compareDocumentPosition),R=t||he.test(L.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},X=t?function(e,t){if(e===t)return A=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,1&n||!b.sortDetached&&t.compareDocumentPosition(e)===n?e===q||e.ownerDocument===W&&R(W,e)?-1:t===q||t.ownerDocument===W&&R(W,t)?1:N?K(N,e)-K(N,t):0:4&n?-1:1)}:function(e,t){if(e===t)return A=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,s=[e],u=[t];if(!i||!o)return e===q?-1:t===q?1:i?-1:o?1:N?K(N,e)-K(N,t):0;if(i===o)return a(e,t);for(n=e;n=n.parentNode;)s.unshift(n);for(n=t;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===W?-1:u[r]===W?1:0},q):q},t.matches=function(e,n){return t(e,null,null,n)},t.matchesSelector=function(e,n){if((e.ownerDocument||e)!==q&&j(e),n=n.replace(ue,"='$1']"),b.matchesSelector&&H&&!z[n+" "]&&(!P||!P.test(n))&&(!O||!O.test(n)))try{var r=M.call(e,n);if(r||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){}return t(n,q,null,[e]).length>0},t.contains=function(e,t){return(e.ownerDocument||e)!==q&&j(e),R(e,t)},t.attr=function(e,t){(e.ownerDocument||e)!==q&&j(e);var n=w.attrHandle[t.toLowerCase()],r=n&&U.call(w.attrHandle,t.toLowerCase())?n(e,t,!H):void 0;return void 0!==r?r:b.attributes||!H?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},t.escape=function(e){return(e+"").replace(xe,be)},t.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},t.uniqueSort=function(e){var t,n=[],r=0,i=0;if(A=!b.detectDuplicates,N=!b.sortStable&&e.slice(0),e.sort(X),A){for(;t=e[i++];)t===e[i]&&(r=n.push(i));for(;r--;)e.splice(n[r],1)}return N=null,e},T=t.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=T(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r++];)n+=T(t);return n},w=t.selectors={cacheLength:50,createPseudo:r,match:fe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(ye,me),e[3]=(e[3]||e[4]||e[5]||"").replace(ye,me),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||t.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&t.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return fe.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&le.test(n)&&(t=E(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(ye,me).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=F[e+" "];return t||(t=new RegExp("(^|"+ee+")"+e+"("+ee+"|$)"))&&F(e,function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(e,n,r){return function(i){var o=t.attr(i,e);return null==o?"!="===n:!n||(o+="","="===n?o===r:"!="===n?o!==r:"^="===n?r&&0===o.indexOf(r):"*="===n?r&&o.indexOf(r)>-1:"$="===n?r&&o.slice(-r.length)===r:"~="===n?(" "+o.replace(ie," ")+" ").indexOf(r)>-1:"|="===n&&(o===r||o.slice(0,r.length+1)===r+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",v=t.parentNode,y=s&&t.nodeName.toLowerCase(),m=!u&&!s,x=!1;if(v){if(o){for(;g;){for(p=t;p=p[g];)if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?v.firstChild:v.lastChild],a&&m){for(p=v,f=p[I]||(p[I]={}),c=f[p.uniqueID]||(f[p.uniqueID]={}),l=c[e]||[],d=l[0]===$&&l[1],x=d&&l[2],p=d&&v.childNodes[d];p=++d&&p&&p[g]||(x=d=0)||h.pop();)if(1===p.nodeType&&++x&&p===t){c[e]=[$,d,x];break}}else if(m&&(p=t,f=p[I]||(p[I]={}),c=f[p.uniqueID]||(f[p.uniqueID]={}),l=c[e]||[],d=l[0]===$&&l[1],x=d),!1===x)for(;(p=++d&&p&&p[g]||(x=d=0)||h.pop())&&((s?p.nodeName.toLowerCase()!==y:1!==p.nodeType)||!++x||(m&&(f=p[I]||(p[I]={}),c=f[p.uniqueID]||(f[p.uniqueID]={}),c[e]=[$,x]),p!==t)););return(x-=i)===r||x%r==0&&x/r>=0}}},PSEUDO:function(e,n){var i,o=w.pseudos[e]||w.setFilters[e.toLowerCase()]||t.error("unsupported pseudo: "+e);return o[I]?o(n):o.length>1?(i=[e,e,"",n],w.setFilters.hasOwnProperty(e.toLowerCase())?r(function(e,t){for(var r,i=o(e,n),a=i.length;a--;)r=K(e,i[a]),e[r]=!(t[r]=i[a])}):function(e){return o(e,0,i)}):o}},pseudos:{not:r(function(e){var t=[],n=[],i=k(e.replace(oe,"$1"));return i[I]?r(function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}}),has:r(function(e){return function(n){return t(e,n).length>0}}),contains:r(function(e){return e=e.replace(ye,me),function(t){return(t.textContent||t.innerText||T(t)).indexOf(e)>-1}}),lang:r(function(e){return ce.test(e||"")||t.error("unsupported lang: "+e),e=e.replace(ye,me).toLowerCase(),function(t){var n;do{if(n=H?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===L},focus:function(e){return e===q.activeElement&&(!q.hasFocus||q.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:s(!1),disabled:s(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},
empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!w.pseudos.empty(e)},header:function(e){return de.test(e.nodeName)},input:function(e){return pe.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:u(function(){return[0]}),last:u(function(e,t){return[t-1]}),eq:u(function(e,t,n){return[n<0?n+t:n]}),even:u(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:u(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:u(function(e,t,n){for(var r=n<0?n+t:n;--r>=0;)e.push(r);return e}),gt:u(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}},w.pseudos.nth=w.pseudos.eq;for(x in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[x]=function(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}(x);for(x in{submit:!0,reset:!0})w.pseudos[x]=function(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}(x);return c.prototype=w.filters=w.pseudos,w.setFilters=new c,E=t.tokenize=function(e,n){var r,i,o,a,s,u,l,c=_[e+" "];if(c)return n?0:c.slice(0);for(s=e,u=[],l=w.preFilter;s;){r&&!(i=ae.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),r=!1,(i=se.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(oe," ")}),s=s.slice(r.length));for(a in w.filter)!(i=fe[a].exec(s))||l[a]&&!(i=l[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?t.error(e):_(e,u).slice(0)},k=t.compile=function(e,t){var n,r=[],i=[],o=z[e+" "];if(!o){for(t||(t=E(e)),n=t.length;n--;)o=y(t[n]),o[I]?r.push(o):i.push(o);o=z(e,m(i,r)),o.selector=e}return o},S=t.select=function(e,t,n,r){var i,o,a,s,u,c="function"==typeof e&&e,p=!r&&E(e=c.selector||e);if(n=n||[],1===p.length){if(o=p[0]=p[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&H&&w.relative[o[1].type]){if(!(t=(w.find.ID(a.matches[0].replace(ye,me),t)||[])[0]))return n;c&&(t=t.parentNode),e=e.slice(o.shift().value.length)}for(i=fe.needsContext.test(e)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((u=w.find[s])&&(r=u(a.matches[0].replace(ye,me),ve.test(o[0].type)&&l(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&f(o)))return Q.apply(n,r),n;break}}return(c||k(e,p))(r,t,!H,n,!t||ve.test(e)&&l(t.parentNode)||t),n},b.sortStable=I.split("").sort(X).join("")===I,b.detectDuplicates=!!A,j(),b.sortDetached=i(function(e){return 1&e.compareDocumentPosition(q.createElement("fieldset"))}),i(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||o("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),b.attributes&&i(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||o("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),i(function(e){return null==e.getAttribute("disabled")})||o(Z,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),t}(e);we.find=Ce,we.expr=Ce.selectors,we.expr[":"]=we.expr.pseudos,we.uniqueSort=we.unique=Ce.uniqueSort,we.text=Ce.getText,we.isXMLDoc=Ce.isXML,we.contains=Ce.contains,we.escapeSelector=Ce.escape;var Ee=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&we(e).is(n))break;r.push(e)}return r},ke=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},Se=we.expr.match.needsContext,De=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;we.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?we.find.matchesSelector(r,e)?[r]:[]:we.find.matches(e,we.grep(t,function(e){return 1===e.nodeType}))},we.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(we(e).filter(function(){for(t=0;t<r;t++)if(we.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)we.find(e,i[t],n);return r>1?we.uniqueSort(n):n},filter:function(e){return this.pushStack(a(this,e||[],!1))},not:function(e){return this.pushStack(a(this,e||[],!0))},is:function(e){return!!a(this,"string"==typeof e&&Se.test(e)?we(e):e||[],!1).length}});var Ne,Ae=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(we.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||Ne,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:Ae.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof we?t[0]:t,we.merge(this,we.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:ae,!0)),De.test(r[1])&&we.isPlainObject(t))for(r in t)me(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=ae.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):me(e)?void 0!==n.ready?n.ready(e):e(we):we.makeArray(e,this)}).prototype=we.fn,Ne=we(ae);var je=/^(?:parents|prev(?:Until|All))/,qe={children:!0,contents:!0,next:!0,prev:!0};we.fn.extend({has:function(e){var t=we(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(we.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&we(e);if(!Se.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&we.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?we.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?fe.call(we(e),this[0]):fe.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(we.uniqueSort(we.merge(this.get(),we(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),we.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return Ee(e,"parentNode")},parentsUntil:function(e,t,n){return Ee(e,"parentNode",n)},next:function(e){return s(e,"nextSibling")},prev:function(e){return s(e,"previousSibling")},nextAll:function(e){return Ee(e,"nextSibling")},prevAll:function(e){return Ee(e,"previousSibling")},nextUntil:function(e,t,n){return Ee(e,"nextSibling",n)},prevUntil:function(e,t,n){return Ee(e,"previousSibling",n)},siblings:function(e){return ke((e.parentNode||{}).firstChild,e)},children:function(e){return ke(e.firstChild)},contents:function(e){return o(e,"iframe")?e.contentDocument:(o(e,"template")&&(e=e.content||e),we.merge([],e.childNodes))}},function(e,t){we.fn[e]=function(n,r){var i=we.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=we.filter(r,i)),this.length>1&&(qe[e]||we.uniqueSort(i),je.test(e)&&i.reverse()),this.pushStack(i)}});var Le=/[^\x20\t\r\n\f]+/g;we.Callbacks=function(e){e="string"==typeof e?u(e):we.extend({},e);var t,n,i,o,a=[],s=[],l=-1,c=function(){for(o=o||e.once,i=t=!0;s.length;l=-1)for(n=s.shift();++l<a.length;)!1===a[l].apply(n[0],n[1])&&e.stopOnFalse&&(l=a.length,n=!1);e.memory||(n=!1),t=!1,o&&(a=n?[]:"")},f={add:function(){return a&&(n&&!t&&(l=a.length-1,s.push(n)),function t(n){we.each(n,function(n,i){me(i)?e.unique&&f.has(i)||a.push(i):i&&i.length&&"string"!==r(i)&&t(i)})}(arguments),n&&!t&&c()),this},remove:function(){return we.each(arguments,function(e,t){for(var n;(n=we.inArray(t,a,n))>-1;)a.splice(n,1),n<=l&&l--}),this},has:function(e){return e?we.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=s=[],a=n="",this},disabled:function(){return!a},lock:function(){return o=s=[],n||t||(a=n=""),this},locked:function(){return!!o},fireWith:function(e,n){return o||(n=n||[],n=[e,n.slice?n.slice():n],s.push(n),t||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!i}};return f},we.extend({Deferred:function(t){var n=[["notify","progress",we.Callbacks("memory"),we.Callbacks("memory"),2],["resolve","done",we.Callbacks("once memory"),we.Callbacks("once memory"),0,"resolved"],["reject","fail",we.Callbacks("once memory"),we.Callbacks("once memory"),1,"rejected"]],r="pending",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return we.Deferred(function(t){we.each(n,function(n,r){var i=me(e[r[4]])&&e[r[4]];o[r[1]](function(){var e=i&&i.apply(this,arguments);e&&me(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+"With"](this,i?[e]:arguments)})}),e=null}).promise()},then:function(t,r,i){function o(t,n,r,i){return function(){var s=this,u=arguments,f=function(){var e,f;if(!(t<a)){if((e=r.apply(s,u))===n.promise())throw new TypeError("Thenable self-resolution");f=e&&("object"==typeof e||"function"==typeof e)&&e.then,me(f)?i?f.call(e,o(a,n,l,i),o(a,n,c,i)):(a++,f.call(e,o(a,n,l,i),o(a,n,c,i),o(a,n,l,n.notifyWith))):(r!==l&&(s=void 0,u=[e]),(i||n.resolveWith)(s,u))}},p=i?f:function(){try{f()}catch(e){we.Deferred.exceptionHook&&we.Deferred.exceptionHook(e,p.stackTrace),t+1>=a&&(r!==c&&(s=void 0,u=[e]),n.rejectWith(s,u))}};t?p():(we.Deferred.getStackHook&&(p.stackTrace=we.Deferred.getStackHook()),e.setTimeout(p))}}var a=0;return we.Deferred(function(e){n[0][3].add(o(0,e,me(i)?i:l,e.notifyWith)),n[1][3].add(o(0,e,me(t)?t:l)),n[2][3].add(o(0,e,me(r)?r:c))}).promise()},promise:function(e){return null!=e?we.extend(e,i):i}},o={};return we.each(n,function(e,t){var a=t[2],s=t[5];i[t[1]]=a.add,s&&a.add(function(){r=s},n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=ue.call(arguments),o=we.Deferred(),a=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?ue.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(f(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||me(i[n]&&i[n].then)))return o.then();for(;n--;)f(i[n],a(n),o.reject);return o.promise()}});var He=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;we.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&He.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},we.readyException=function(t){e.setTimeout(function(){throw t})};var Oe=we.Deferred();we.fn.ready=function(e){return Oe.then(e).catch(function(e){we.readyException(e)}),this},we.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--we.readyWait:we.isReady)||(we.isReady=!0,!0!==e&&--we.readyWait>0||Oe.resolveWith(ae,[we]))}}),we.ready.then=Oe.then,"complete"===ae.readyState||"loading"!==ae.readyState&&!ae.documentElement.doScroll?e.setTimeout(we.ready):(ae.addEventListener("DOMContentLoaded",p),e.addEventListener("load",p));var Pe=function(e,t,n,i,o,a,s){var u=0,l=e.length,c=null==n;if("object"===r(n)){o=!0;for(u in n)Pe(e,t,u,n[u],!0,a,s)}else if(void 0!==i&&(o=!0,me(i)||(s=!0),c&&(s?(t.call(e,i),t=null):(c=t,t=function(e,t,n){return c.call(we(e),n)})),t))for(;u<l;u++)t(e[u],n,s?i:i.call(e[u],u,t(e[u],n)));return o?e:c?t.call(e):l?t(e[0],n):a},Me=/^-ms-/,Re=/-([a-z])/g,Ie=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};g.uid=1,g.prototype={cache:function(e){var t=e[this.expando];return t||(t={},Ie(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[h(t)]=n;else for(r in t)i[h(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][h(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){Array.isArray(t)?t=t.map(h):(t=h(t),t=t in r?[t]:t.match(Le)||[]),n=t.length;for(;n--;)delete r[t[n]]}(void 0===t||we.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!we.isEmptyObject(t)}};var We=new g,$e=new g,Be=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Fe=/[A-Z]/g;we.extend({hasData:function(e){return $e.hasData(e)||We.hasData(e)},data:function(e,t,n){return $e.access(e,t,n)},removeData:function(e,t){$e.remove(e,t)},_data:function(e,t,n){return We.access(e,t,n)},_removeData:function(e,t){We.remove(e,t)}}),we.fn.extend({data:function(e,t){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===e){if(this.length&&(i=$e.get(o),1===o.nodeType&&!We.get(o,"hasDataAttrs"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf("data-")&&(r=h(r.slice(5)),y(o,r,i[r])));We.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof e?this.each(function(){$e.set(this,e)}):Pe(this,function(t){var n;if(o&&void 0===t){if(void 0!==(n=$e.get(o,e)))return n;if(void 0!==(n=y(o,e)))return n}else this.each(function(){$e.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){$e.remove(this,e)})}}),we.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=We.get(e,t),n&&(!r||Array.isArray(n)?r=We.access(e,t,we.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=we.queue(e,t),r=n.length,i=n.shift(),o=we._queueHooks(e,t),a=function(){we.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return We.get(e,n)||We.access(e,n,{empty:we.Callbacks("once memory").add(function(){We.remove(e,[t+"queue",n])})})}}),we.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length<n?we.queue(this[0],e):void 0===t?this:this.each(function(){var n=we.queue(this,e,t);we._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&we.dequeue(this,e)})},dequeue:function(e){return this.each(function(){we.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=we.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};for("string"!=typeof e&&(t=e,e=void 0),e=e||"fx";a--;)(n=We.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var _e=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ze=new RegExp("^(?:([+-])=|)("+_e+")([a-z%]*)$","i"),Xe=["Top","Right","Bottom","Left"],Ue=function(e,t){return e=t||e,"none"===e.style.display||""===e.style.display&&we.contains(e.ownerDocument,e)&&"none"===we.css(e,"display")},Ve=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i},Ge={};we.fn.extend({show:function(){return b(this,!0)},hide:function(){return b(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){Ue(this)?we(this).show():we(this).hide()})}});var Ye=/^(?:checkbox|radio)$/i,Qe=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,Je=/^$|^module$|\/(?:java|ecma)script/i,Ke={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ke.optgroup=Ke.option,Ke.tbody=Ke.tfoot=Ke.colgroup=Ke.caption=Ke.thead,Ke.th=Ke.td;var Ze=/<|&#?\w+;/;!function(){var e=ae.createDocumentFragment(),t=e.appendChild(ae.createElement("div")),n=ae.createElement("input");n.setAttribute("type","radio"),n.setAttribute("checked","checked"),n.setAttribute("name","t"),t.appendChild(n),ye.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",ye.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var et=ae.documentElement,tt=/^key/,nt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rt=/^([^.]*)(?:\.(.+)|)/;we.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=We.get(e);if(v)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&we.find.matchesSelector(et,i),n.guid||(n.guid=we.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(t){return void 0!==we&&we.event.triggered!==t.type?we.event.dispatch.apply(e,arguments):void 0}),t=(t||"").match(Le)||[""],l=t.length;l--;)s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d&&(f=we.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=we.event.special[d]||{},c=we.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&we.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||(p=u[d]=[],p.delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),we.event.global[d]=!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=We.hasData(e)&&We.get(e);if(v&&(u=v.events)){for(t=(t||"").match(Le)||[""],l=t.length;l--;)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=we.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||we.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)we.event.remove(e,d+t[l],n,r,!0);we.isEmptyObject(u)&&We.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=we.event.fix(e),u=new Array(arguments.length),l=(We.get(this,"events")||{})[s.type]||[],c=we.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){for(a=we.event.handlers.call(this,s,l),t=0;(i=a[t++])&&!s.isPropagationStopped();)for(s.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((we.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&e.button>=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)r=t[n],i=r.selector+" ",void 0===a[i]&&(a[i]=r.needsContext?we(i,this).index(l)>-1:we.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(we.Event.prototype,e,{enumerable:!0,configurable:!0,get:me(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[we.expando]?e:new we.Event(e)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==S()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===S()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&o(this,"input"))return this.click(),!1},_default:function(e){return o(e.target,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},we.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},we.Event=function(e,t){if(!(this instanceof we.Event))return new we.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?E:k,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&we.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[we.expando]=!0},we.Event.prototype={constructor:we.Event,isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=E,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=E,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=E,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},we.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&tt.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&nt.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},we.event.addProp),we.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,t){we.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return i&&(i===r||we.contains(r,i))||(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),we.fn.extend({on:function(e,t,n,r){return D(this,e,t,n,r)},one:function(e,t,n,r){return D(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,we(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=k),this.each(function(){we.event.remove(this,e,n,t)})}});var it=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,ot=/<script|<style|<link/i,at=/checked\s*(?:[^=]|=\s*.checked.)/i,st=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;we.extend({htmlPrefilter:function(e){return e.replace(it,"<$1></$2>")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=we.contains(e.ownerDocument,e);if(!(ye.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||we.isXMLDoc(e)))for(a=w(s),o=w(e),r=0,i=o.length;r<i;r++)L(o[r],a[r]);if(t)if(n)for(o=o||w(e),a=a||w(s),r=0,i=o.length;r<i;r++)q(o[r],a[r]);else q(e,s);return a=w(s,"script"),a.length>0&&T(a,!u&&w(e,"script")),s},cleanData:function(e){for(var t,n,r,i=we.event.special,o=0;void 0!==(n=e[o]);o++)if(Ie(n)){if(t=n[We.expando]){if(t.events)for(r in t.events)i[r]?we.event.remove(n,r):we.removeEvent(n,r,t.handle);n[We.expando]=void 0}n[$e.expando]&&(n[$e.expando]=void 0)}}}),we.fn.extend({detach:function(e){return O(this,e,!0)},remove:function(e){return O(this,e)},text:function(e){return Pe(this,function(e){return void 0===e?we.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return H(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){N(this,e).appendChild(e)}})},prepend:function(){return H(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=N(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return H(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return H(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(we.cleanData(w(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return we.clone(this,e,t)})},html:function(e){return Pe(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ot.test(e)&&!Ke[(Qe.exec(e)||["",""])[1].toLowerCase()]){e=we.htmlPrefilter(e);try{for(;n<r;n++)t=this[n]||{},1===t.nodeType&&(we.cleanData(w(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=[];return H(this,arguments,function(t){var n=this.parentNode;we.inArray(this,e)<0&&(we.cleanData(w(this)),n&&n.replaceChild(t,this))},e)}}),we.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){we.fn[e]=function(e){for(var n,r=[],i=we(e),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),we(i[a])[t](n),ce.apply(r,n.get());return this.pushStack(r)}});var ut=new RegExp("^("+_e+")(?!px)[a-z%]+$","i"),lt=function(t){var n=t.ownerDocument.defaultView;return n&&n.opener||(n=e),n.getComputedStyle(t)},ct=new RegExp(Xe.join("|"),"i");!function(){function t(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",et.appendChild(u).appendChild(l);var t=e.getComputedStyle(l);r="1%"!==t.top,s=12===n(t.marginLeft),l.style.right="60%",a=36===n(t.right),i=36===n(t.width),l.style.position="absolute",o=36===l.offsetWidth||"absolute",et.removeChild(u),l=null}}function n(e){return Math.round(parseFloat(e))}var r,i,o,a,s,u=ae.createElement("div"),l=ae.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",ye.clearCloneStyle="content-box"===l.style.backgroundClip,we.extend(ye,{boxSizingReliable:function(){return t(),i},pixelBoxStyles:function(){return t(),a},pixelPosition:function(){return t(),r},reliableMarginLeft:function(){return t(),s},scrollboxSize:function(){return t(),o}}))}();var ft=/^(none|table(?!-c[ea]).+)/,pt=/^--/,dt={position:"absolute",visibility:"hidden",display:"block"},ht={letterSpacing:"0",fontWeight:"400"},gt=["Webkit","Moz","ms"],vt=ae.createElement("div").style;we.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=P(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=h(t),u=pt.test(t),l=e.style;if(u||(t=I(s)),a=we.cssHooks[t]||we.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];o=typeof n,"string"===o&&(i=ze.exec(n))&&i[1]&&(n=m(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(we.cssNumber[s]?"":"px")),ye.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=h(t);return pt.test(t)||(t=I(s)),a=we.cssHooks[t]||we.cssHooks[s],a&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=P(e,t,r)),"normal"===i&&t in ht&&(i=ht[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),we.each(["height","width"],function(e,t){we.cssHooks[t]={get:function(e,n,r){if(n)return!ft.test(we.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?B(e,t,r):Ve(e,dt,function(){return B(e,t,r)})},set:function(e,n,r){var i,o=lt(e),a="border-box"===we.css(e,"boxSizing",!1,o),s=r&&$(e,t,r,a,o);return a&&ye.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-$(e,t,"border",!1,o)-.5)),s&&(i=ze.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=we.css(e,t)),W(e,n,s)}}}),we.cssHooks.marginLeft=M(ye.reliableMarginLeft,function(e,t){if(t)return(parseFloat(P(e,"marginLeft"))||e.getBoundingClientRect().left-Ve(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),we.each({margin:"",padding:"",border:"Width"},function(e,t){we.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+Xe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(we.cssHooks[e+t].set=W)}),we.fn.extend({css:function(e,t){return Pe(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=lt(e),i=t.length;a<i;a++)o[t[a]]=we.css(e,t[a],!1,r);return o}return void 0!==n?we.style(e,t,n):we.css(e,t)},e,t,arguments.length>1)}}),we.Tween=F,F.prototype={constructor:F,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||we.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(we.cssNumber[n]?"":"px")},cur:function(){var e=F.propHooks[this.prop];return e&&e.get?e.get(this):F.propHooks._default.get(this)},run:function(e){var t,n=F.propHooks[this.prop];return this.options.duration?this.pos=t=we.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):F.propHooks._default.set(this),this}},F.prototype.init.prototype=F.prototype,F.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=we.css(e.elem,e.prop,""),t&&"auto"!==t?t:0)},set:function(e){we.fx.step[e.prop]?we.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[we.cssProps[e.prop]]&&!we.cssHooks[e.prop]?e.elem[e.prop]=e.now:we.style(e.elem,e.prop,e.now+e.unit)}}},F.propHooks.scrollTop=F.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},we.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},we.fx=F.prototype.init,we.fx.step={};var yt,mt,xt=/^(?:toggle|show|hide)$/,bt=/queueHooks$/;we.Animation=we.extend(Y,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return m(n.elem,e,ze.exec(t),n),n}]},tweener:function(e,t){me(e)?(t=e,e=["*"]):e=e.match(Le);for(var n,r=0,i=e.length;r<i;r++)n=e[r],Y.tweeners[n]=Y.tweeners[n]||[],Y.tweeners[n].unshift(t)},prefilters:[V],prefilter:function(e,t){t?Y.prefilters.unshift(e):Y.prefilters.push(e)}}),we.speed=function(e,t,n){var r=e&&"object"==typeof e?we.extend({},e):{complete:n||!n&&t||me(e)&&e,duration:e,easing:n&&t||t&&!me(t)&&t};return we.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in we.fx.speeds?r.duration=we.fx.speeds[r.duration]:r.duration=we.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){me(r.old)&&r.old.call(this),r.queue&&we.dequeue(this,r.queue)},r},we.fn.extend({fadeTo:function(e,t,n,r){return this.filter(Ue).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=we.isEmptyObject(e),o=we.speed(t,n,r),a=function(){var t=Y(this,we.extend({},e),o);(i||We.get(this,"finish"))&&t.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r=function(e){var t=e.stop;delete e.stop,t(n)};return"string"!=typeof e&&(n=t,t=e,e=void 0),t&&!1!==e&&this.queue(e||"fx",[]),this.each(function(){var t=!0,i=null!=e&&e+"queueHooks",o=we.timers,a=We.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&bt.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=e&&o[i].queue!==e||(o[i].anim.stop(n),t=!1,o.splice(i,1));!t&&n||we.dequeue(this,e)})},finish:function(e){return!1!==e&&(e=e||"fx"),this.each(function(){
var t,n=We.get(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=we.timers,a=r?r.length:0;for(n.finish=!0,we.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;t<a;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),we.each(["toggle","show","hide"],function(e,t){var n=we.fn[t];we.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(X(t,!0),e,r,i)}}),we.each({slideDown:X("show"),slideUp:X("hide"),slideToggle:X("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){we.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),we.timers=[],we.fx.tick=function(){var e,t=0,n=we.timers;for(yt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||we.fx.stop(),yt=void 0},we.fx.timer=function(e){we.timers.push(e),we.fx.start()},we.fx.interval=13,we.fx.start=function(){mt||(mt=!0,_())},we.fx.stop=function(){mt=null},we.fx.speeds={slow:600,fast:200,_default:400},we.fn.delay=function(t,n){return t=we.fx?we.fx.speeds[t]||t:t,n=n||"fx",this.queue(n,function(n,r){var i=e.setTimeout(n,t);r.stop=function(){e.clearTimeout(i)}})},function(){var e=ae.createElement("input"),t=ae.createElement("select"),n=t.appendChild(ae.createElement("option"));e.type="checkbox",ye.checkOn=""!==e.value,ye.optSelected=n.selected,e=ae.createElement("input"),e.value="t",e.type="radio",ye.radioValue="t"===e.value}();var wt,Tt=we.expr.attrHandle;we.fn.extend({attr:function(e,t){return Pe(this,we.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){we.removeAttr(this,e)})}}),we.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?we.prop(e,t,n):(1===o&&we.isXMLDoc(e)||(i=we.attrHooks[t.toLowerCase()]||(we.expr.match.bool.test(t)?wt:void 0)),void 0!==n?null===n?void we.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:(r=we.find.attr(e,t),null==r?void 0:r))},attrHooks:{type:{set:function(e,t){if(!ye.radioValue&&"radio"===t&&o(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(Le);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),wt={set:function(e,t,n){return!1===t?we.removeAttr(e,n):e.setAttribute(n,n),n}},we.each(we.expr.match.bool.source.match(/\w+/g),function(e,t){var n=Tt[t]||we.find.attr;Tt[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=Tt[a],Tt[a]=i,i=null!=n(e,t,r)?a:null,Tt[a]=o),i}});var Ct=/^(?:input|select|textarea|button)$/i,Et=/^(?:a|area)$/i;we.fn.extend({prop:function(e,t){return Pe(this,we.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[we.propFix[e]||e]})}}),we.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&we.isXMLDoc(e)||(t=we.propFix[t]||t,i=we.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=we.find.attr(e,"tabindex");return t?parseInt(t,10):Ct.test(e.nodeName)||Et.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ye.optSelected||(we.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),we.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){we.propFix[this.toLowerCase()]=this}),we.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(me(e))return this.each(function(t){we(this).addClass(e.call(this,t,J(this)))});if(t=K(e),t.length)for(;n=this[u++];)if(i=J(n),r=1===n.nodeType&&" "+Q(i)+" "){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");s=Q(r),i!==s&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(me(e))return this.each(function(t){we(this).removeClass(e.call(this,t,J(this)))});if(!arguments.length)return this.attr("class","");if(t=K(e),t.length)for(;n=this[u++];)if(i=J(n),r=1===n.nodeType&&" "+Q(i)+" "){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");s=Q(r),i!==s&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):me(e)?this.each(function(n){we(this).toggleClass(e.call(this,n,J(this),t),t)}):this.each(function(){var t,i,o,a;if(r)for(i=0,o=we(this),a=K(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||(t=J(this),t&&We.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":We.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+Q(J(n))+" ").indexOf(t)>-1)return!0;return!1}});var kt=/\r/g;we.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=me(e),this.each(function(n){var i;1===this.nodeType&&(i=r?e.call(this,n,we(this).val()):e,null==i?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=we.map(i,function(e){return null==e?"":e+""})),(t=we.valHooks[this.type]||we.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=we.valHooks[i.type]||we.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:(n=i.value,"string"==typeof n?n.replace(kt,""):null==n?"":n)}}}),we.extend({valHooks:{option:{get:function(e){var t=we.find.attr(e,"value");return null!=t?t:Q(we.text(e))}},select:{get:function(e){var t,n,r,i=e.options,a=e.selectedIndex,s="select-one"===e.type,u=s?null:[],l=s?a+1:i.length;for(r=a<0?l:s?a:0;r<l;r++)if(n=i[r],(n.selected||r===a)&&!n.disabled&&(!n.parentNode.disabled||!o(n.parentNode,"optgroup"))){if(t=we(n).val(),s)return t;u.push(t)}return u},set:function(e,t){for(var n,r,i=e.options,o=we.makeArray(t),a=i.length;a--;)r=i[a],(r.selected=we.inArray(we.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),we.each(["radio","checkbox"],function(){we.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=we.inArray(we(e).val(),t)>-1}},ye.checkOn||(we.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),ye.focusin="onfocusin"in e;var St=/^(?:focusinfocus|focusoutblur)$/,Dt=function(e){e.stopPropagation()};we.extend(we.event,{trigger:function(t,n,r,i){var o,a,s,u,l,c,f,p,d=[r||ae],h=he.call(t,"type")?t.type:t,g=he.call(t,"namespace")?t.namespace.split("."):[];if(a=p=s=r=r||ae,3!==r.nodeType&&8!==r.nodeType&&!St.test(h+we.event.triggered)&&(h.indexOf(".")>-1&&(g=h.split("."),h=g.shift(),g.sort()),l=h.indexOf(":")<0&&"on"+h,t=t[we.expando]?t:new we.Event(h,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=r),n=null==n?[t]:we.makeArray(n,[t]),f=we.event.special[h]||{},i||!f.trigger||!1!==f.trigger.apply(r,n))){if(!i&&!f.noBubble&&!xe(r)){for(u=f.delegateType||h,St.test(u+h)||(a=a.parentNode);a;a=a.parentNode)d.push(a),s=a;s===(r.ownerDocument||ae)&&d.push(s.defaultView||s.parentWindow||e)}for(o=0;(a=d[o++])&&!t.isPropagationStopped();)p=a,t.type=o>1?u:f.bindType||h,c=(We.get(a,"events")||{})[t.type]&&We.get(a,"handle"),c&&c.apply(a,n),(c=l&&a[l])&&c.apply&&Ie(a)&&(t.result=c.apply(a,n),!1===t.result&&t.preventDefault());return t.type=h,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(d.pop(),n)||!Ie(r)||l&&me(r[h])&&!xe(r)&&(s=r[l],s&&(r[l]=null),we.event.triggered=h,t.isPropagationStopped()&&p.addEventListener(h,Dt),r[h](),t.isPropagationStopped()&&p.removeEventListener(h,Dt),we.event.triggered=void 0,s&&(r[l]=s)),t.result}},simulate:function(e,t,n){var r=we.extend(new we.Event,n,{type:e,isSimulated:!0});we.event.trigger(r,null,t)}}),we.fn.extend({trigger:function(e,t){return this.each(function(){we.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return we.event.trigger(e,t,n,!0)}}),ye.focusin||we.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){we.event.simulate(t,e.target,we.event.fix(e))};we.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=We.access(r,t);i||r.addEventListener(e,n,!0),We.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=We.access(r,t)-1;i?We.access(r,t,i):(r.removeEventListener(e,n,!0),We.remove(r,t))}}});var Nt=e.location,At=Date.now(),jt=/\?/;we.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||we.error("Invalid XML: "+t),n};var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;we.param=function(e,t){var n,r=[],i=function(e,t){var n=me(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!we.isPlainObject(e))we.each(e,function(){i(this.name,this.value)});else for(n in e)Z(n,e[n],t,i);return r.join("&")},we.fn.extend({serialize:function(){return we.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=we.prop(this,"elements");return e?we.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!we(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!Ye.test(e))}).map(function(e,t){var n=we(this).val();return null==n?null:Array.isArray(n)?we.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Pt=/%20/g,Mt=/#.*$/,Rt=/([?&])_=[^&]*/,It=/^(.*?):[ \t]*([^\r\n]*)$/gm,Wt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,$t=/^(?:GET|HEAD)$/,Bt=/^\/\//,Ft={},_t={},zt="*/".concat("*"),Xt=ae.createElement("a");Xt.href=Nt.href,we.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Nt.href,type:"GET",isLocal:Wt.test(Nt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":we.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?ne(ne(e,we.ajaxSettings),t):ne(we.ajaxSettings,e)},ajaxPrefilter:ee(Ft),ajaxTransport:ee(_t),ajax:function(t,n){function r(t,n,r,s){var l,p,d,b,w,T=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",C.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=re(h,C,r)),b=ie(h,b,C,l),l?(h.ifModified&&(w=C.getResponseHeader("Last-Modified"),w&&(we.lastModified[o]=w),(w=C.getResponseHeader("etag"))&&(we.etag[o]=w)),204===t||"HEAD"===h.type?T="nocontent":304===t?T="notmodified":(T=b.state,p=b.data,d=b.error,l=!d)):(d=T,!t&&T||(T="error",t<0&&(t=0))),C.status=t,C.statusText=(n||T)+"",l?y.resolveWith(g,[p,T,C]):y.rejectWith(g,[C,T,d]),C.statusCode(x),x=void 0,f&&v.trigger(l?"ajaxSuccess":"ajaxError",[C,h,l?p:d]),m.fireWith(g,[C,T]),f&&(v.trigger("ajaxComplete",[C,h]),--we.active||we.event.trigger("ajaxStop")))}"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=we.ajaxSetup({},n),g=h.context||h,v=h.context&&(g.nodeType||g.jquery)?we(g):we.event,y=we.Deferred(),m=we.Callbacks("once memory"),x=h.statusCode||{},b={},w={},T="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s)for(s={};t=It.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)C.always(e[C.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(y.promise(C),h.url=((t||h.url||Nt.href)+"").replace(Bt,Nt.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(Le)||[""],null==h.crossDomain){l=ae.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Xt.protocol+"//"+Xt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=we.param(h.data,h.traditional)),te(Ft,h,n,C),c)return C;f=we.event&&h.global,f&&0==we.active++&&we.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!$t.test(h.type),o=h.url.replace(Mt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Pt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(jt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Rt,"$1"),d=(jt.test(o)?"&":"?")+"_="+At+++d),h.url=o+d),h.ifModified&&(we.lastModified[o]&&C.setRequestHeader("If-Modified-Since",we.lastModified[o]),we.etag[o]&&C.setRequestHeader("If-None-Match",we.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&C.setRequestHeader("Content-Type",h.contentType),C.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+zt+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)C.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,C,h)||c))return C.abort();if(T="abort",m.add(h.complete),C.done(h.success),C.fail(h.error),i=te(_t,h,n,C)){if(C.readyState=1,f&&v.trigger("ajaxSend",[C,h]),c)return C;h.async&&h.timeout>0&&(u=e.setTimeout(function(){C.abort("timeout")},h.timeout));try{c=!1,i.send(b,r)}catch(e){if(c)throw e;r(-1,e)}}else r(-1,"No Transport");return C},getJSON:function(e,t,n){return we.get(e,t,n,"json")},getScript:function(e,t){return we.get(e,void 0,t,"script")}}),we.each(["get","post"],function(e,t){we[t]=function(e,n,r,i){return me(n)&&(i=i||r,r=n,n=void 0),we.ajax(we.extend({url:e,type:t,dataType:i,data:n,success:r},we.isPlainObject(e)&&e))}}),we._evalUrl=function(e){return we.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},we.fn.extend({wrapAll:function(e){var t;return this[0]&&(me(e)&&(e=e.call(this[0])),t=we(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return me(e)?this.each(function(t){we(this).wrapInner(e.call(this,t))}):this.each(function(){var t=we(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=me(e);return this.each(function(n){we(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){we(this).replaceWith(this.childNodes)}),this}}),we.expr.pseudos.hidden=function(e){return!we.expr.pseudos.visible(e)},we.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},we.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Vt=we.ajaxSettings.xhr();ye.cors=!!Vt&&"withCredentials"in Vt,ye.ajax=Vt=!!Vt,we.ajaxTransport(function(t){var n,r;if(ye.cors||Vt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Ut[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),we.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),we.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return we.globalEval(e),e}}}),we.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),we.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(r,i){t=we("<script>").prop({charset:e.scriptCharset,src:e.url}).on("load error",n=function(e){t.remove(),n=null,e&&i("error"===e.type?404:200,e.type)}),ae.head.appendChild(t[0])},abort:function(){n&&n()}}}});var Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;we.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||we.expando+"_"+At++;return this[e]=!0,e}}),we.ajaxPrefilter("json jsonp",function(t,n,r){var i,o,a,s=!1!==t.jsonp&&(Yt.test(t.url)?"url":"string"==typeof t.data&&0===(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(t.data)&&"data");if(s||"jsonp"===t.dataTypes[0])return i=t.jsonpCallback=me(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Yt,"$1"+i):!1!==t.jsonp&&(t.url+=(jt.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return a||we.error(i+" was not called"),a[0]},t.dataTypes[0]="json",o=e[i],e[i]=function(){a=arguments},r.always(function(){void 0===o?we(e).removeProp(i):e[i]=o,t[i]&&(t.jsonpCallback=n.jsonpCallback,Gt.push(i)),a&&me(o)&&o(a[0]),a=o=void 0}),"script"}),ye.createHTMLDocument=function(){var e=ae.implementation.createHTMLDocument("").body;return e.innerHTML="<form></form><form></form>",2===e.childNodes.length}(),we.parseHTML=function(e,t,n){if("string"!=typeof e)return[];"boolean"==typeof t&&(n=t,t=!1);var r,i,o;return t||(ye.createHTMLDocument?(t=ae.implementation.createHTMLDocument(""),r=t.createElement("base"),r.href=ae.location.href,t.head.appendChild(r)):t=ae),i=De.exec(e),o=!n&&[],i?[t.createElement(i[1])]:(i=C([e],t,o),o&&o.length&&we(o).remove(),we.merge([],i.childNodes))},we.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return s>-1&&(r=Q(e.slice(s)),e=e.slice(0,s)),me(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),a.length>0&&we.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?we("<div>").append(we.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},we.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){we.fn[t]=function(e){return this.on(t,e)}}),we.expr.pseudos.animated=function(e){return we.grep(we.timers,function(t){return e===t.elem}).length},we.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l,c=we.css(e,"position"),f=we(e),p={};"static"===c&&(e.style.position="relative"),s=f.offset(),o=we.css(e,"top"),u=we.css(e,"left"),l=("absolute"===c||"fixed"===c)&&(o+u).indexOf("auto")>-1,l?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),me(t)&&(t=t.call(e,n,we.extend({},s))),null!=t.top&&(p.top=t.top-s.top+a),null!=t.left&&(p.left=t.left-s.left+i),"using"in t?t.using.call(e,p):f.css(p)}},we.fn.extend({offset:function(e){if(arguments.length)return void 0===e?this:this.each(function(t){we.offset.setOffset(this,e,t)});var t,n,r=this[0];if(r)return r.getClientRects().length?(t=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===we.css(r,"position"))t=r.getBoundingClientRect();else{for(t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;e&&(e===n.body||e===n.documentElement)&&"static"===we.css(e,"position");)e=e.parentNode;e&&e!==r&&1===e.nodeType&&(i=we(e).offset(),i.top+=we.css(e,"borderTopWidth",!0),i.left+=we.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-we.css(r,"marginTop",!0),left:t.left-i.left-we.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent;e&&"static"===we.css(e,"position");)e=e.offsetParent;return e||et})}}),we.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n="pageYOffset"===t;we.fn[e]=function(r){return Pe(this,function(e,r,i){var o;if(xe(e)?o=e:9===e.nodeType&&(o=e.defaultView),void 0===i)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]=i},e,r,arguments.length)}}),we.each(["top","left"],function(e,t){we.cssHooks[t]=M(ye.pixelPosition,function(e,n){if(n)return n=P(e,t),ut.test(n)?we(e).position()[t]+"px":n})}),we.each({Height:"height",Width:"width"},function(e,t){we.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){we.fn[r]=function(i,o){var a=arguments.length&&(n||"boolean"!=typeof i),s=n||(!0===i||!0===o?"margin":"border");return Pe(this,function(t,n,i){var o;return xe(t)?0===r.indexOf("outer")?t["inner"+e]:t.document.documentElement["client"+e]:9===t.nodeType?(o=t.documentElement,Math.max(t.body["scroll"+e],o["scroll"+e],t.body["offset"+e],o["offset"+e],o["client"+e])):void 0===i?we.css(t,n,s):we.style(t,n,i,s)},t,a?i:void 0,a)}})}),we.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,t){we.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),we.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),we.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)}}),we.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),me(e))return r=ue.call(arguments,2),i=function(){return e.apply(t||this,r.concat(ue.call(arguments)))},i.guid=e.guid=e.guid||we.guid++,i},we.holdReady=function(e){e?we.readyWait++:we.ready(!0)},we.isArray=Array.isArray,we.parseJSON=JSON.parse,we.nodeName=o,we.isFunction=me,we.isWindow=xe,we.camelCase=h,we.type=r,we.now=Date.now,we.isNumeric=function(e){var t=we.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return we});var Qt=e.jQuery,Jt=e.$;return we.noConflict=function(t){return e.$===we&&(e.$=Jt),t&&e.jQuery===we&&(e.jQuery=Qt),we},t||(e.jQuery=e.$=we),we});
!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(p.inline?p.dpDiv.parent()[0]:p.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{};var h=(t.ui.version="1.12.1",0),l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(t){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){if(!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){if(!t.isFunction(s))return void(r[e]=s);r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}()}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;o<a;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(t.isPlainObject(s)?e[i]=t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):e[i]=s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;o<s.length-1;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;r<i.length;r++)a=n.classesElementLookup[i[r]]||t(),a=t(e.add?t.unique(a.get().concat(e.element.get())):a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){if(e||!0!==o.options.disabled&&!t(this).hasClass("ui-state-disabled"))return("string"==typeof a?o[a]:a).apply(o,arguments)}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&!1===a.apply(this.element[0],[i].concat(s))||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?!0===n||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}});t.widget;!function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth;return{width:"scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:s,isDocument:n,offset:s||n?{left:0,top:0}:t(e).offset(),scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:i<0?"left":e>0?"right":"center",vertical:r<0?"top":s>0?"bottom":"middle"};p<l&&a(e+i)<p&&(u.horizontal="center"),f<c&&a(s+r)<f&&(u.vertical="middle"),o(a(e),a(i))>o(a(s),a(r))?u.important="horizontal":u.important="vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&l<=0?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&h<=0?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&l<=0?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&h<=0?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];c<0?((i=t.left+d+p+f+e.collisionWidth-r-o)<0||i<a(c))&&(t.left+=d+p+f):u>0&&((s=t.left-e.collisionPosition.marginLeft+d+p+f-h)>0||a(s)<u)&&(t.left+=d+p+f)},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];c<0?((s=t.top+p+f+g+e.collisionHeight-r-o)<0||s<a(c))&&(t.top+=p+f+g):u>0&&((i=t.top-e.collisionPosition.marginTop+p+f+g-h)>0||a(i)<u)&&(t.top+=p+f+g)}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}();var c=(t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),"ui-effects-animated"),u=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=c[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:s.max<t?s.max:t)}function s(e){var i=h(),s=i._rgba=[];return e=e.toLowerCase(),p(r,function(t,n){var o,a=n.re.exec(e),r=a&&n.parse(a),h=n.space||"rgba";if(r)return o=i[h](r),i[l[h].cache]=o[l[h].cache],s=i._rgba=o._rgba,!1}),s.length?("0,0,0,0"===s.join()&&t.extend(s,o.transparent),i):o[e]}function n(t,e,i){return i=(i+1)%1,6*i<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}var o,a=/^([\-+])=\s*(\d+\.?\d*)/,r=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],h=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},l={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},c={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},u=h.support={},d=t("<p>")[0],p=t.each;d.style.cssText="background-color:rgba(1,1,1,.5)",u.rgba=d.style.backgroundColor.indexOf("rgba")>-1,p(l,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),h.fn=t.extend(h.prototype,{parse:function(e,n,a,r){if(void 0===e)return this._rgba=[null,null,null,null],this;(e.jquery||e.nodeType)&&(e=t(e).css(n),n=void 0);var c=this,u=t.type(e),d=this._rgba=[];return void 0!==n&&(e=[e,n,a,r],u="array"),"string"===u?this.parse(s(e)||o._default):"array"===u?(p(l.rgba.props,function(t,s){d[s.idx]=i(e[s.idx],s)}),this):"object"===u?(e instanceof h?p(l,function(t,i){e[i.cache]&&(c[i.cache]=e[i.cache].slice())}):p(l,function(s,n){var o=n.cache;p(n.props,function(t,s){if(!c[o]&&n.to){if("alpha"===t||null==e[t])return;c[o]=n.to(c._rgba)}c[o][s.idx]=i(e[t],s,!0)}),c[o]&&t.inArray(null,c[o].slice(0,3))<0&&(c[o][3]=1,n.from&&(c._rgba=n.from(c[o])))}),this):void 0},is:function(t){var e=h(t),i=!0,s=this;return p(l,function(t,n){var o,a=e[n.cache];return a&&(o=s[n.cache]||n.to&&n.to(s._rgba)||[],p(n.props,function(t,e){if(null!=a[e.idx])return i=a[e.idx]===o[e.idx]})),i}),i},_space:function(){var t=[],e=this;return p(l,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=h(t),n=s._space(),o=l[n],a=0===this.alpha()?h("transparent"):this,r=a[o.cache]||o.to(a._rgba),u=r.slice();return s=s[o.cache],p(o.props,function(t,n){var o=n.idx,a=r[o],h=s[o],l=c[n.type]||{};null!==h&&(null===a?u[o]=h:(l.mod&&(h-a>l.mod/2?a+=l.mod:a-h>l.mod/2&&(a-=l.mod)),u[o]=i((h-a)*e+a,n)))}),this[n](u)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=h(e)._rgba;return h(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&e<3&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),h.fn.parse.prototype=h.fn,l.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:u<=.5?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},l.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=s<=.5?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},p(l,function(e,s){var n=s.props,o=s.cache,r=s.to,l=s.from;h.fn[e]=function(e){if(r&&!this[o]&&(this[o]=r(this._rgba)),void 0===e)return this[o].slice();var s,a=t.type(e),c="array"===a||"object"===a?e:arguments,u=this[o].slice();return p(n,function(t,e){var s=c["object"===a?t:e.idx];null==s&&(s=u[e.idx]),u[e.idx]=i(s,e)}),l?(s=h(l(u)),s[o]=u,s):h(u)},p(n,function(i,s){h.fn[i]||(h.fn[i]=function(n){var o,r=t.type(n),h="alpha"===i?this._hsla?"hsla":"rgba":e,l=this[h](),c=l[s.idx];return"undefined"===r?c:("function"===r&&(n=n.call(this,c),r=t.type(n)),null==n&&s.empty?this:("string"===r&&(o=a.exec(n))&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1)),l[s.idx]=n,this[h](l)))})})}),h.hook=function(e){var i=e.split(" ");p(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=h(o||n),!u.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(t){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(t){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=h(e.elem,i),e.end=h(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},h.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),t.cssHooks.borderColor={expand:function(t){var e={};return p(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(u),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||!t.fx.step[s]&&isNaN(parseFloat(o))||(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(u.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){return{el:t(this),start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!(e&&"number"!=typeof e&&!t.fx.speeds[e])||("string"==typeof e&&!t.effects.effect[e]||(!!t.isFunction(e)||"object"==typeof e&&!e.effect))}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(c)||e(i)}}(t.expr.filters.animated)),!1!==t.uiBackCompat&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;i<s;i++)null!==e[i]&&t.data("ui-effects-"+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;s<n;s++)null!==e[s]&&(i=t.data("ui-effects-"+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),float:e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(t){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data("ui-effects-style",t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data("ui-effects-style")||"",t.removeData("ui-effects-style")},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),float:e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data("ui-effects-placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e="ui-effects-placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(c),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=u.shift(),!1===t.uiBackCompat||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,u=[],d=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(c,!0),u.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):!1===a?this.each(d).each(i):this.queue(r,d).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments)
;return n.mode="show",this.effect.call(this,n)}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return t<.5?i(2*t)/2:1-i(-2*t+2)/2}})}();t.effects,t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;v<d;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;o<u;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;a<d;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},"box"!==d&&"both"!==d||(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),"content"!==d&&"both"!==d||n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),"content"!==d&&"both"!==d||(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for(!o&&s.is(":visible")||(s.css("opacity",0).show(),c=1);u<h;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);s<r;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});!1!==t.uiBackCompat&&t.effects.define("transfer",function(e,i){t(this).transfer(e,i)});t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,!(!i.href||!o||"map"!==n.nodeName.toLowerCase())&&(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible"))):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled)&&(h=t(i).closest("fieldset")[0])&&(r=!h.disabled):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}});t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}};"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))});t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return(!s||"static"!==e.css("position"))&&n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){if("active"===t)return void this._activate(e);"event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=t()):!1===e.active?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||!1===this._trigger("beforeActivate",e,u)||(n.active=!h&&this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}})):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]))&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&e.keyCode<=105?(e.keyCode-96).toString():String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),n<0?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;if(!this.active)return void this.next(e);this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s-n<0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]()))},previousPage:function(e){var i,s,n;if(!this.active)return void this.next(e);this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first()))},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=new RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}});t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){
var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,void(i=!0);e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||s.preventDefault());if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){if(s)return s=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){if(this.cancelBlur)return void delete this.cancelBlur;clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)});n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),(s=i.item.attr("aria-label")||n.value)&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion))},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;e&&(!e||i||s)||(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),--this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e):void this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=new RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}});var d=(t.ui.autocomplete,/ui-corner-([a-z]){2,6}/g);t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};if(n)return"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),void(i=i.concat(o.get()))):void(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o||n[s]("instance")),i.push(h[0])}})))}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,i)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:!!e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(d,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){if("direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t)return void this._callChildMethod(e?"disable":"enable");this.refresh()},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}});t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]);t.ui.checkboxradio;t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==t.uiBackCompat&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){if("text"===t)return void this._super("showLabel",e);"showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))});t.ui.button;t.extend(t.ui,{datepicker:{version:"1.12.1"}});var p;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){return{id:e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),"focus"!==s&&"both"!==s||e.on("focus",this._showDatepicker),"button"!==s&&"both"!==s||(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;n<t.length;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==i&&"span"!==i||s.removeClass(this.markerClassName).empty(),p===n&&(p=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==i&&"span"!==i||(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==i&&"span"!==i||(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);if(2===arguments.length&&"string"==typeof i)return"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null;n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);if(t.datepicker._get(n,"constrainInput"))return i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||s<" "||!i||i.indexOf(s)>-1},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(t){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},!1!==o&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return!(r|="fixed"===t(this).css("position"))}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),
t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))}},_updateDatepicker:function(e){this.maxRows=4,p=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=e.dpDiv.find("."+this._dayOverClass+" a");a.length>0&&o.apply(a.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",17*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id===t.datepicker._mainDivId||0!==i.parents("#"+t.datepicker._mainDivId).length||i.hasClass(t.datepicker.markerClassName)||i.closest("."+t.datepicker._triggerClass).length||!t.datepicker._datepickerShowing||t.datepicker._inDialog&&t.blockUI)&&(!i.hasClass(t.datepicker.markerClassName)||t.datepicker._curInst===s)||t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&e<6,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(""===(i="object"==typeof i?i.toString():i+""))return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=n+1<e.length&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=new RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];if(i.substr(h,s.length).toLowerCase()===s.toLowerCase())return o=e[0],h+=s.length,!1}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;n<e.length;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(h<i.length&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():g<100&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(g<=c?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),_<=o)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=s+1<t.length&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;s.length<i;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;s<t.length;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(e.getFullYear()%100<10?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=e+1<t.length&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;e<t.length;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(t){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=null==i||""===i?s:"string"==typeof i?function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(t){}for(var s=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,n=s.getFullYear(),o=s.getMonth(),a=s.getDate(),r=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,h=r.exec(i);h;){switch(h[2]||"d"){case"d":case"D":a+=parseInt(h[1],10);break;case"w":case"W":a+=7*parseInt(h[1],10);break;case"m":case"M":o+=parseInt(h[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(n,o));break;case"y":case"Y":n+=parseInt(h[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(n,o))}h=r.exec(i)}return new Date(n,o,a)}(i):"number"==typeof i?isNaN(i)?s:function(t){var e=new Date;return e.setDate(e.getDate()+t),e}(i):new Date(i.getTime());return n=n&&"Invalid Date"===n.toString()?s:n,n&&(n.setHours(0),n.setMinutes(0),n.setSeconds(0),n.setMilliseconds(0)),this._daylightSavingAdjust(n)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,tt=t.drawYear;if(Z<0&&(Z+=12,tt--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&e<Q?Q:e;this._daylightSavingAdjust(new Date(tt,Z,1))>e;)--Z<0&&(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,tt,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(tt,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,tt,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;k<U[0];k++){for(x="",this.maxRows=4,C=0;C<U[1];C++){if(D=this._daylightSavingAdjust(new Date(tt,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,tt,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead><tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;w<7;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+"><span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(tt,Z),tt===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(tt,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X&&this.maxRows>z?this.maxRows:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(tt,Z,1-H)),N=0;N<O;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;w<7;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&A<Q||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,tt++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!h||c>=s.getMonth())&&(!l||c<=n.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";f<=g;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&e<i?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(e<0?e:n[0]*n[1]),1));return e<0&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||e.getFullYear()<=r)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1";var f=(t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),!1);t(document).on("mouseup",function(){f=!1});t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){if(!0===t.data(i.target,e.widgetName+".preventClickEvent"))return t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!f){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n=!("string"!=typeof this.options.cancel||!e.target.nodeName)&&t(e.target).closest(this.options.cancel).length;return!(s&&!n&&this._mouseCapture(e))||(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(e),!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),f=!0,!0))}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||document.documentMode<9)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,e),this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,f=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n<o.length;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")};t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){if((this.helper||this.element).is(".ui-draggable-dragging"))return void(this.destroyOnClear=!0);this._removeHandleClassName(),this._mouseDestroy()},_mouseCapture:function(e){var i=this.options;return!(this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0)&&(this.handle=this._getHandle(e),!!this.handle&&(this._blurActiveElement(e),this._blockFrames(!0===i.iframeFix?"iframe":i.iframeFix),!0))},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]);t(e.target).closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),!1===this._trigger("start",e)?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(!1===this._trigger("drag",e,s))return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||!0===this.options.revert||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==i._trigger("stop",e)&&i._clear()}):!1!==this._trigger("stop",e)&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return!this.options.handle||!!t(e.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),
e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?void(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):"document"===n.containment?void(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):n.containment.constructor===Array?void(this.containment=n.containment):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),void((s=i[0])&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i))):void(this.containment=null)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),!1!==o&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,_<h-g||m>l+g||b<c-g||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=Math.abs(c-b)<=g,o=Math.abs(u-v)<=g,a=Math.abs(h-_)<=g,r=Math.abs(l-m)<=g,n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=Math.abs(c-v)<=g,o=Math.abs(u-b)<=g,a=Math.abs(h-m)<=g,r=Math.abs(l-_)<=g,n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}});t.ui.draggable;t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0||(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles()}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;i<s.length;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)((s=t(this.handles[i])[0])===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),!!h&&(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1)},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),i<o.maxWidth&&(o.maxWidth=i),n<o.maxHeight&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),!1!==t.uiBackCompat&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&s.maxWidth<p,m=s.maxHeight&&s.maxHeight<f,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((f-c<=0||p-l<=0)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}});t.ui.resizable;t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;i<0&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},
_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&!1!==this._trigger("beforeClose",e)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;if(this._isOpen)return void(this._moveToTop()&&this._focusTabbable());this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open")},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===e||t.contains(this.uiDialog[0],e)||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),void this.close(e);if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;if(this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length)return void this._removeClass(this.uiDialog,"ui-dialog-buttons");t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||!1===i||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return!!t(e.target).closest(".ui-dialog").length||!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),!1!==t.uiBackCompat&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}});t.ui.dialog;t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){if(!arguments.length)return e||(e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight});e=arguments[0]},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return!(!s||(s.currentItem||s.element)[0]===this.element[0])&&(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");if(i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&g(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e))return n=!0,!1}),!n&&(!!this.accept.call(this.element[0],s.currentItem||s.element)&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element)))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var g=t.ui.intersect=function(){function t(t,e,i){return t>=e&&t<e+i}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return l<=o&&r<=u&&c<=a&&h<=d;case"intersect":return l<o+e.helperProportions.width/2&&r-e.helperProportions.width/2<u&&c<a+e.helperProportions.height/2&&h-e.helperProportions.height/2<d;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&a<=d||h>=c&&h<=d||a<c&&h>d)&&(o>=l&&o<=u||r>=l&&r<=u||o<l&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;s<o.length;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;n<r.length;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&g(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=g(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},!1!==t.uiBackCompat&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}});t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");if(n)return s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||c.right<o||c.top>h||c.bottom<a):"fit"===n.tolerance&&(l=c.left>o&&c.right<r&&c.top>a&&c.bottom<h),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;if(!1===t)return void this.button.css("width","");null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},
_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;e<i;e++)o.push("<span tabindex='0'></span>");this.handles=n.add(t(o.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(!0===e.range&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==e.range&&"max"!==e.range||this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l=this,c=this.options;return!c.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-l.values(e));(n>i||n===i&&(e===l._lastChangedValue||l.values(e)===c.min))&&(n=i,o=t(this),a=e)}),!1!==this._start(e,a)&&(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),r=o.offset(),h=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=h?{left:0,top:0}:{left:e.pageX-r.left-o.width()/2,top:e.pageY-r.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),s<0&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n=this.value(),o=this.values();this._hasMultipleValues()&&(s=this.values(e?0:1),n=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(s,i):Math.max(s,i)),o[e]=i),i!==n&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),void this._change(null,e);if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;o<s.length;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&!0===this.options.range&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;s<i.length;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(t<=this._valueMin())return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;t=Math.round((t-e)/i)*i+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=!this._animateOff&&r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=(h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())*100,c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),!0===h.options.range&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?(s-n)/(o-n)*100:0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),!1===this._start(e,o)))return}switch(n=this.options.step,i=s=this._hasMultipleValues()?this.values(o):this.value(),e.keyCode){case t.ui.keyCode.HOME:s=this._valueMin();break;case t.ui.keyCode.END:s=this._valueMax();break;case t.ui.keyCode.PAGE_UP:s=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:s=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(i===this._valueMax())return;s=this._trimAlignValue(i+n);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i===this._valueMin())return;s=this._trimAlignValue(i-n)}this._slide(e,o,s)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return!this.reverting&&(!this.options.disabled&&"static"!==this.options.type&&(this._refreshItems(e),t(e.target).parents().each(function(){if(t.data(this,o.widgetName+"-item")===o)return s=t(this),!1}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),!!s&&(!(this.options.handle&&!i&&(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),!n))&&(this.currentItem=s,this._removeCurrentsFromItems(),!0))))},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),!1!==r&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],(o=this._intersectsWithPointer(s))&&s.instance===this.currentContainer&&!(n===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===n||t.contains(this.placeholder[0],n)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],n))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&s+l<h,d="y"===this.options.axis||e+c>o&&e+c<a,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<s+this.helperProportions.height/2&&n-this.helperProportions.height/2<h},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!s||!n)&&(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)(a=t.data(o[n],this.widgetFullName))&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;i<e.length;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)(o=t.data(n[s],this.widgetFullName))&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;s<l;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){i&&!s.forcePlaceholderSize||(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),Math.abs(e[u]-h)<n&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return void(this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1));o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),s[0].style.width&&!i.forceHelperSize||s.width(this.currentItem.width()),s[0].style.height&&!i.forceHelperSize||s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),"document"!==n.containment&&"window"!==n.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),
e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)"auto"!==this._storedCSS[s]&&"static"!==this._storedCSS[s]||(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;s<n.length;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===t.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}});t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){if(this.cancelBlur)return void delete this.cancelBlur;this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){this.element[0]===t.ui.safeActiveElement(this.document[0])||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(e)&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){if(t(e.currentTarget).hasClass("ui-state-active"))return!1!==this._start(e)&&void this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t))&&(this.counter||(this.counter=1),this.spinning=!0,!0)},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&t<s.min?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;if("culture"===t||"numberFormat"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));"max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());r(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==t.uiBackCompat&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}});t.ui.spinner;t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(t){}try{s=decodeURIComponent(s)}catch(t){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(i.active):this.active=t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){if(t(n).attr("aria-controls")===s)return e=i,!1}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),null!==e&&-1!==e||(e=!!this.tabs.length&&0)),!1!==e&&-1===(e=this.tabs.index(this.tabs.eq(e)))&&(e=!i&&0),!i&&!1===e&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),void this._activate(s);case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),void this._activate(s!==this.options.active&&s);default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){for(var s=this.tabs.length-1;-1!==t.inArray(function(){return e>s&&(e=0),e<0&&(e=s),e}(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){if("active"===t)return void this._activate(e);this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),!1!==e.active&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),!0===e||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===e)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||!1===this._trigger("beforeActivate",e,c)||(i.active=!r&&this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return!1===e?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;!1!==i&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(!0!==i){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),!1!==t.uiBackCompat&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}});t.ui.tabs;t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);if(e.is("[title]"))return e.data("ui-tooltip-title",e.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;if("string"==typeof s||s.nodeType||s.jquery)return this._open(e,t,s);(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}))&&this._open(e,t,i)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return void o.tooltip.find(".ui-tooltip-content").html(s);i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);if(!o)return void n.removeData("ui-tooltip-open");i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1))},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==t.uiBackCompat&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}});t.ui.tooltip});
!function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(e){var t,n,i,o,r,a,s=function(){},l=!!window.jQuery,c=e(window),d=function(e,n){t.ev.on("mfp"+e+".mfp",n)},p=function(t,n,i,o){var r=document.createElement("div");return r.className="mfp-"+t,i&&(r.innerHTML=i),o?n&&n.appendChild(r):(r=e(r),n&&r.appendTo(n)),r},u=function(n,i){t.ev.triggerHandler("mfp"+n,i),t.st.callbacks&&(n=n.charAt(0).toLowerCase()+n.slice(1),t.st.callbacks[n]&&t.st.callbacks[n].apply(t,e.isArray(i)?i:[i]))},f=function(n){return n===a&&t.currTemplate.closeBtn||(t.currTemplate.closeBtn=e(t.st.closeMarkup.replace("%title%",t.st.tClose)),a=n),t.currTemplate.closeBtn},m=function(){e.magnificPopup.instance||(t=new s,t.init(),e.magnificPopup.instance=t)},g=function(){var e=document.createElement("p").style,t=["ms","O","Moz","Webkit"];if(void 0!==e.transition)return!0;for(;t.length;)if(t.pop()+"Transition"in e)return!0;return!1};s.prototype={constructor:s,init:function(){var n=navigator.appVersion;t.isLowIE=t.isIE8=document.all&&!document.addEventListener,t.isAndroid=/android/gi.test(n),t.isIOS=/iphone|ipad|ipod/gi.test(n),t.supportsTransition=g(),t.probablyMobile=t.isAndroid||t.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),i=e(document),t.popupsCache={}},open:function(n){var o;if(!1===n.isObj){t.items=n.items.toArray(),t.index=0;var a,s=n.items;for(o=0;o<s.length;o++)if(a=s[o],a.parsed&&(a=a.el[0]),a===n.el[0]){t.index=o;break}}else t.items=e.isArray(n.items)?n.items:[n.items],t.index=n.index||0;if(t.isOpen)return void t.updateItemHTML();t.types=[],r="",n.mainEl&&n.mainEl.length?t.ev=n.mainEl.eq(0):t.ev=i,n.key?(t.popupsCache[n.key]||(t.popupsCache[n.key]={}),t.currTemplate=t.popupsCache[n.key]):t.currTemplate={},t.st=e.extend(!0,{},e.magnificPopup.defaults,n),t.fixedContentPos="auto"===t.st.fixedContentPos?!t.probablyMobile:t.st.fixedContentPos,t.st.modal&&(t.st.closeOnContentClick=!1,t.st.closeOnBgClick=!1,t.st.showCloseBtn=!1,t.st.enableEscapeKey=!1),t.bgOverlay||(t.bgOverlay=p("bg").on("click.mfp",function(){t.close()}),t.wrap=p("wrap").attr("tabindex",-1).on("click.mfp",function(e){t._checkIfClose(e.target)&&t.close()}),t.container=p("container",t.wrap)),t.contentContainer=p("content"),t.st.preloader&&(t.preloader=p("preloader",t.container,t.st.tLoading));var l=e.magnificPopup.modules;for(o=0;o<l.length;o++){var m=l[o];m=m.charAt(0).toUpperCase()+m.slice(1),t["init"+m].call(t)}u("BeforeOpen"),t.st.showCloseBtn&&(t.st.closeBtnInside?(d("MarkupParse",function(e,t,n,i){n.close_replaceWith=f(i.type)}),r+=" mfp-close-btn-in"):t.wrap.append(f())),t.st.alignTop&&(r+=" mfp-align-top"),t.fixedContentPos?t.wrap.css({overflow:t.st.overflowY,overflowX:"hidden",overflowY:t.st.overflowY}):t.wrap.css({top:c.scrollTop(),position:"absolute"}),(!1===t.st.fixedBgPos||"auto"===t.st.fixedBgPos&&!t.fixedContentPos)&&t.bgOverlay.css({height:i.height(),position:"absolute"}),t.st.enableEscapeKey&&i.on("keyup.mfp",function(e){27===e.keyCode&&t.close()}),c.on("resize.mfp",function(){t.updateSize()}),t.st.closeOnContentClick||(r+=" mfp-auto-cursor"),r&&t.wrap.addClass(r);var g=t.wH=c.height(),v={};if(t.fixedContentPos&&t._hasScrollBar(g)){var h=t._getScrollbarSize();h&&(v.marginRight=h)}t.fixedContentPos&&(t.isIE7?e("body, html").css("overflow","hidden"):v.overflow="hidden");var C=t.st.mainClass;return t.isIE7&&(C+=" mfp-ie7"),C&&t._addClassToMFP(C),t.updateItemHTML(),u("BuildControls"),e("html").css(v),t.bgOverlay.add(t.wrap).prependTo(t.st.prependTo||e(document.body)),t._lastFocusedEl=document.activeElement,setTimeout(function(){t.content?(t._addClassToMFP("mfp-ready"),t._setFocus()):t.bgOverlay.addClass("mfp-ready"),i.on("focusin.mfp",t._onFocusIn)},16),t.isOpen=!0,t.updateSize(g),u("Open"),n},close:function(){t.isOpen&&(u("BeforeClose"),t.isOpen=!1,t.st.removalDelay&&!t.isLowIE&&t.supportsTransition?(t._addClassToMFP("mfp-removing"),setTimeout(function(){t._close()},t.st.removalDelay)):t._close())},_close:function(){u("Close");var n="mfp-removing mfp-ready ";if(t.bgOverlay.detach(),t.wrap.detach(),t.container.empty(),t.st.mainClass&&(n+=t.st.mainClass+" "),t._removeClassFromMFP(n),t.fixedContentPos){var o={marginRight:""};t.isIE7?e("body, html").css("overflow",""):o.overflow="",e("html").css(o)}i.off("keyup.mfp focusin.mfp"),t.ev.off(".mfp"),t.wrap.attr("class","mfp-wrap").removeAttr("style"),t.bgOverlay.attr("class","mfp-bg"),t.container.attr("class","mfp-container"),!t.st.showCloseBtn||t.st.closeBtnInside&&!0!==t.currTemplate[t.currItem.type]||t.currTemplate.closeBtn&&t.currTemplate.closeBtn.detach(),t.st.autoFocusLast&&t._lastFocusedEl&&e(t._lastFocusedEl).focus(),t.currItem=null,t.content=null,t.currTemplate=null,t.prevHeight=0,u("AfterClose")},updateSize:function(e){if(t.isIOS){var n=document.documentElement.clientWidth/window.innerWidth,i=window.innerHeight*n;t.wrap.css("height",i),t.wH=i}else t.wH=e||c.height();t.fixedContentPos||t.wrap.css("height",t.wH),u("Resize")},updateItemHTML:function(){var n=t.items[t.index];t.contentContainer.detach(),t.content&&t.content.detach(),n.parsed||(n=t.parseEl(t.index));var i=n.type;if(u("BeforeChange",[t.currItem?t.currItem.type:"",i]),t.currItem=n,!t.currTemplate[i]){var r=!!t.st[i]&&t.st[i].markup;u("FirstMarkupParse",r),t.currTemplate[i]=!r||e(r)}o&&o!==n.type&&t.container.removeClass("mfp-"+o+"-holder");var a=t["get"+i.charAt(0).toUpperCase()+i.slice(1)](n,t.currTemplate[i]);t.appendContent(a,i),n.preloaded=!0,u("Change",n),o=n.type,t.container.prepend(t.contentContainer),u("AfterChange")},appendContent:function(e,n){t.content=e,e?t.st.showCloseBtn&&t.st.closeBtnInside&&!0===t.currTemplate[n]?t.content.find(".mfp-close").length||t.content.append(f()):t.content=e:t.content="",u("BeforeAppend"),t.container.addClass("mfp-"+n+"-holder"),t.contentContainer.append(t.content)},parseEl:function(n){var i,o=t.items[n];if(o.tagName?o={el:e(o)}:(i=o.type,o={data:o,src:o.src}),o.el){for(var r=t.types,a=0;a<r.length;a++)if(o.el.hasClass("mfp-"+r[a])){i=r[a];break}o.src=o.el.attr("data-mfp-src"),o.src||(o.src=o.el.attr("href"))}return o.type=i||t.st.type||"inline",o.index=n,o.parsed=!0,t.items[n]=o,u("ElementParse",o),t.items[n]},addGroup:function(e,n){var i=function(i){i.mfpEl=this,t._openClick(i,e,n)};n||(n={});var o="click.magnificPopup";n.mainEl=e,n.items?(n.isObj=!0,e.off(o).on(o,i)):(n.isObj=!1,n.delegate?e.off(o).on(o,n.delegate,i):(n.items=e,e.off(o).on(o,i)))},_openClick:function(n,i,o){if((void 0!==o.midClick?o.midClick:e.magnificPopup.defaults.midClick)||!(2===n.which||n.ctrlKey||n.metaKey||n.altKey||n.shiftKey)){var r=void 0!==o.disableOn?o.disableOn:e.magnificPopup.defaults.disableOn;if(r)if(e.isFunction(r)){if(!r.call(t))return!0}else if(c.width()<r)return!0;n.type&&(n.preventDefault(),t.isOpen&&n.stopPropagation()),o.el=e(n.mfpEl),o.delegate&&(o.items=i.find(o.delegate)),t.open(o)}},updateStatus:function(e,i){if(t.preloader){n!==e&&t.container.removeClass("mfp-s-"+n),i||"loading"!==e||(i=t.st.tLoading);var o={status:e,text:i};u("UpdateStatus",o),e=o.status,i=o.text,t.preloader.html(i),t.preloader.find("a").on("click",function(e){e.stopImmediatePropagation()}),t.container.addClass("mfp-s-"+e),n=e}},_checkIfClose:function(n){if(!e(n).hasClass("mfp-prevent-close")){var i=t.st.closeOnContentClick,o=t.st.closeOnBgClick;if(i&&o)return!0;if(!t.content||e(n).hasClass("mfp-close")||t.preloader&&n===t.preloader[0])return!0;if(n===t.content[0]||e.contains(t.content[0],n)){if(i)return!0}else if(o&&e.contains(document,n))return!0;return!1}},_addClassToMFP:function(e){t.bgOverlay.addClass(e),t.wrap.addClass(e)},_removeClassFromMFP:function(e){this.bgOverlay.removeClass(e),t.wrap.removeClass(e)},_hasScrollBar:function(e){return(t.isIE7?i.height():document.body.scrollHeight)>(e||c.height())},_setFocus:function(){(t.st.focus?t.content.find(t.st.focus).eq(0):t.wrap).focus()},_onFocusIn:function(n){if(n.target!==t.wrap[0]&&!e.contains(t.wrap[0],n.target))return t._setFocus(),!1},_parseMarkup:function(t,n,i){var o;i.data&&(n=e.extend(i.data,n)),u("MarkupParse",[t,n,i]),e.each(n,function(n,i){if(void 0===i||!1===i)return!0;if(o=n.split("_"),o.length>1){var r=t.find(".mfp-"+o[0]);if(r.length>0){var a=o[1];"replaceWith"===a?r[0]!==i[0]&&r.replaceWith(i):"img"===a?r.is("img")?r.attr("src",i):r.replaceWith(e("<img>").attr("src",i).attr("class",r.attr("class"))):r.attr(o[1],i)}}else t.find(".mfp-"+n).html(i)})},_getScrollbarSize:function(){if(void 0===t.scrollbarSize){var e=document.createElement("div");e.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(e),t.scrollbarSize=e.offsetWidth-e.clientWidth,document.body.removeChild(e)}return t.scrollbarSize}},e.magnificPopup={instance:null,proto:s.prototype,modules:[],open:function(t,n){return m(),t=t?e.extend(!0,{},t):{},t.isObj=!0,t.index=n||0,this.instance.open(t)},close:function(){return e.magnificPopup.instance&&e.magnificPopup.instance.close()},registerModule:function(t,n){n.options&&(e.magnificPopup.defaults[t]=n.options),e.extend(this.proto,n.proto),this.modules.push(t)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},e.fn.magnificPopup=function(n){m();var i=e(this);if("string"==typeof n)if("open"===n){var o,r=l?i.data("magnificPopup"):i[0].magnificPopup,a=parseInt(arguments[1],10)||0;r.items?o=r.items[a]:(o=i,r.delegate&&(o=o.find(r.delegate)),o=o.eq(a)),t._openClick({mfpEl:o},i,r)}else t.isOpen&&t[n].apply(t,Array.prototype.slice.call(arguments,1));else n=e.extend(!0,{},n),l?i.data("magnificPopup",n):i[0].magnificPopup=n,t.addGroup(i,n);return i};var v,h,C,y=function(){C&&(h.after(C.addClass(v)).detach(),C=null)};e.magnificPopup.registerModule("inline",{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){t.types.push("inline"),d("Close.inline",function(){y()})},getInline:function(n,i){if(y(),n.src){var o=t.st.inline,r=e(n.src);if(r.length){var a=r[0].parentNode;a&&a.tagName&&(h||(v=o.hiddenClass,h=p(v),v="mfp-"+v),C=r.after(h).detach().removeClass(v)),t.updateStatus("ready")}else t.updateStatus("error",o.tNotFound),r=e("<div>");return n.inlineElement=r,r}return t.updateStatus("ready"),t._parseMarkup(i,{},n),i}}});var w,b=function(){w&&e(document.body).removeClass(w)},I=function(){b(),t.req&&t.req.abort()};e.magnificPopup.registerModule("ajax",{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){t.types.push("ajax"),w=t.st.ajax.cursor,d("Close.ajax",I),d("BeforeChange.ajax",I)},getAjax:function(n){w&&e(document.body).addClass(w),t.updateStatus("loading");var i=e.extend({url:n.src,success:function(i,o,r){var a={data:i,xhr:r};u("ParseAjax",a),t.appendContent(e(a.data),"ajax"),n.finished=!0,b(),t._setFocus(),setTimeout(function(){t.wrap.addClass("mfp-ready")},16),t.updateStatus("ready"),u("AjaxContentAdded")},error:function(){b(),n.finished=n.loadError=!0,t.updateStatus("error",t.st.ajax.tError.replace("%url%",n.src))}},t.st.ajax.settings);return t.req=e.ajax(i),""}}});var x,k=function(n){if(n.data&&void 0!==n.data.title)return n.data.title;var i=t.st.image.titleSrc;if(i){if(e.isFunction(i))return i.call(t,n);if(n.el)return n.el.attr(i)||""}return""};e.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var n=t.st.image,i=".image";t.types.push("image"),d("Open"+i,function(){"image"===t.currItem.type&&n.cursor&&e(document.body).addClass(n.cursor)}),d("Close"+i,function(){n.cursor&&e(document.body).removeClass(n.cursor),c.off("resize.mfp")}),d("Resize"+i,t.resizeImage),t.isLowIE&&d("AfterChange",t.resizeImage)},resizeImage:function(){var e=t.currItem;if(e&&e.img&&t.st.image.verticalFit){var n=0;t.isLowIE&&(n=parseInt(e.img.css("padding-top"),10)+parseInt(e.img.css("padding-bottom"),10)),e.img.css("max-height",t.wH-n)}},_onImageHasSize:function(e){e.img&&(e.hasSize=!0,x&&clearInterval(x),e.isCheckingImgSize=!1,u("ImageHasSize",e),e.imgHidden&&(t.content&&t.content.removeClass("mfp-loading"),e.imgHidden=!1))},findImageSize:function(e){var n=0,i=e.img[0],o=function(r){x&&clearInterval(x),x=setInterval(function(){if(i.naturalWidth>0)return void t._onImageHasSize(e);n>200&&clearInterval(x),n++,3===n?o(10):40===n?o(50):100===n&&o(500)},r)};o(1)},getImage:function(n,i){var o=0,r=function(){n&&(n.img[0].complete?(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("ready")),n.hasSize=!0,n.loaded=!0,u("ImageLoadComplete")):(o++,o<200?setTimeout(r,100):a()))},a=function(){n&&(n.img.off(".mfploader"),n===t.currItem&&(t._onImageHasSize(n),t.updateStatus("error",s.tError.replace("%url%",n.src))),n.hasSize=!0,n.loaded=!0,n.loadError=!0)},s=t.st.image,l=i.find(".mfp-img");if(l.length){var c=document.createElement("img");c.className="mfp-img",n.el&&n.el.find("img").length&&(c.alt=n.el.find("img").attr("alt")),n.img=e(c).on("load.mfploader",r).on("error.mfploader",a),c.src=n.src,l.is("img")&&(n.img=n.img.clone()),c=n.img[0],c.naturalWidth>0?n.hasSize=!0:c.width||(n.hasSize=!1)}return t._parseMarkup(i,{title:k(n),img_replaceWith:n.img},n),t.resizeImage(),n.hasSize?(x&&clearInterval(x),n.loadError?(i.addClass("mfp-loading"),t.updateStatus("error",s.tError.replace("%url%",n.src))):(i.removeClass("mfp-loading"),t.updateStatus("ready")),i):(t.updateStatus("loading"),n.loading=!0,n.hasSize||(n.imgHidden=!0,i.addClass("mfp-loading"),t.findImageSize(n)),i)}}});var T,_=function(){return void 0===T&&(T=void 0!==document.createElement("p").style.MozTransform),T};e.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(e){return e.is("img")?e:e.find("img")}},proto:{initZoom:function(){var e,n=t.st.zoom,i=".zoom";if(n.enabled&&t.supportsTransition){var o,r,a=n.duration,s=function(e){var t=e.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),i="all "+n.duration/1e3+"s "+n.easing,o={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},r="transition";return o["-webkit-"+r]=o["-moz-"+r]=o["-o-"+r]=o[r]=i,t.css(o),t},l=function(){t.content.css("visibility","visible")};d("BuildControls"+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.content.css("visibility","hidden"),!(e=t._getItemToZoom()))return void l();r=s(e),r.css(t._getOffset()),t.wrap.append(r),o=setTimeout(function(){r.css(t._getOffset(!0)),o=setTimeout(function(){l(),setTimeout(function(){r.remove(),e=r=null,u("ZoomAnimationEnded")},16)},a)},16)}}),d("BeforeClose"+i,function(){if(t._allowZoom()){if(clearTimeout(o),t.st.removalDelay=a,!e){if(!(e=t._getItemToZoom()))return;r=s(e)}r.css(t._getOffset(!0)),t.wrap.append(r),t.content.css("visibility","hidden"),setTimeout(function(){r.css(t._getOffset())},16)}}),d("Close"+i,function(){t._allowZoom()&&(l(),r&&r.remove(),e=null)})}},_allowZoom:function(){return"image"===t.currItem.type},_getItemToZoom:function(){return!!t.currItem.hasSize&&t.currItem.img},_getOffset:function(n){var i;i=n?t.currItem.img:t.st.zoom.opener(t.currItem.el||t.currItem);var o=i.offset(),r=parseInt(i.css("padding-top"),10),a=parseInt(i.css("padding-bottom"),10);o.top-=e(window).scrollTop()-r;var s={width:i.width(),height:(l?i.innerHeight():i[0].offsetHeight)-a-r};return _()?s["-moz-transform"]=s.transform="translate("+o.left+"px,"+o.top+"px)":(s.left=o.left,s.top=o.top),s}}});var P=function(e){if(t.currTemplate.iframe){var n=t.currTemplate.iframe.find("iframe");n.length&&(e||(n[0].src="//about:blank"),t.isIE8&&n.css("display",e?"block":"none"))}};e.magnificPopup.registerModule("iframe",{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){t.types.push("iframe"),d("BeforeChange",function(e,t,n){t!==n&&("iframe"===t?P():"iframe"===n&&P(!0))}),d("Close.iframe",function(){P()})},getIframe:function(n,i){var o=n.src,r=t.st.iframe;e.each(r.patterns,function(){if(o.indexOf(this.index)>-1)return this.id&&(o="string"==typeof this.id?o.substr(o.lastIndexOf(this.id)+this.id.length,o.length):this.id.call(this,o)),o=this.src.replace("%id%",o),!1});var a={};return r.srcAction&&(a[r.srcAction]=o),t._parseMarkup(i,a,n),t.updateStatus("ready"),i}}});var S=function(e){var n=t.items.length;return e>n-1?e-n:e<0?n+e:e},E=function(e,t,n){return e.replace(/%curr%/gi,t+1).replace(/%total%/gi,n)};e.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var n=t.st.gallery,o=".mfp-gallery";if(t.direction=!0,!n||!n.enabled)return!1;r+=" mfp-gallery",d("Open"+o,function(){n.navigateByImgClick&&t.wrap.on("click"+o,".mfp-img",function(){if(t.items.length>1)return t.next(),!1}),i.on("keydown"+o,function(e){37===e.keyCode?t.prev():39===e.keyCode&&t.next()})}),d("UpdateStatus"+o,function(e,n){n.text&&(n.text=E(n.text,t.currItem.index,t.items.length))}),d("MarkupParse"+o,function(e,i,o,r){var a=t.items.length;o.counter=a>1?E(n.tCounter,r.index,a):""}),d("BuildControls"+o,function(){if(t.items.length>1&&n.arrows&&!t.arrowLeft){var i=n.arrowMarkup,o=t.arrowLeft=e(i.replace(/%title%/gi,n.tPrev).replace(/%dir%/gi,"left")).addClass("mfp-prevent-close"),r=t.arrowRight=e(i.replace(/%title%/gi,n.tNext).replace(/%dir%/gi,"right")).addClass("mfp-prevent-close");o.click(function(){t.prev()}),r.click(function(){t.next()}),t.container.append(o.add(r))}}),d("Change"+o,function(){t._preloadTimeout&&clearTimeout(t._preloadTimeout),t._preloadTimeout=setTimeout(function(){t.preloadNearbyImages(),t._preloadTimeout=null},16)}),d("Close"+o,function(){i.off(o),t.wrap.off("click"+o),t.arrowRight=t.arrowLeft=null})},next:function(){t.direction=!0,t.index=S(t.index+1),t.updateItemHTML()},prev:function(){t.direction=!1,t.index=S(t.index-1),t.updateItemHTML()},goTo:function(e){t.direction=e>=t.index,t.index=e,t.updateItemHTML()},preloadNearbyImages:function(){var e,n=t.st.gallery.preload,i=Math.min(n[0],t.items.length),o=Math.min(n[1],t.items.length);for(e=1;e<=(t.direction?o:i);e++)t._preloadItem(t.index+e);for(e=1;e<=(t.direction?i:o);e++)t._preloadItem(t.index-e)},_preloadItem:function(n){if(n=S(n),!t.items[n].preloaded){var i=t.items[n];i.parsed||(i=t.parseEl(n)),u("LazyLoad",i),"image"===i.type&&(i.img=e('<img class="mfp-img" />').on("load.mfploader",function(){i.hasSize=!0}).on("error.mfploader",function(){i.hasSize=!0,i.loadError=!0,u("LazyLoadError",i)}).attr("src",i.src)),i.preloaded=!0}}}});e.magnificPopup.registerModule("retina",{options:{replaceSrc:function(e){return e.src.replace(/\.\w+$/,function(e){return"@2x"+e})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var e=t.st.retina,n=e.ratio;n=isNaN(n)?n():n,n>1&&(d("ImageHasSize.retina",function(e,t){t.img.css({"max-width":t.img[0].naturalWidth/n,width:"100%"})}),d("ElementParse.retina",function(t,i){i.src=e.replaceSrc(i,n)}))}}}}),m()});
!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=function(){function e(){var e=this,n=function(){var n=["br-wrapper"];""!==e.options.theme&&n.push("br-theme-"+e.options.theme),e.$elem.wrap(t("<div />",{class:n.join(" ")}))},i=function(){e.$elem.unwrap()},a=function(n){return t.isNumeric(n)&&(n=Math.floor(n)),t('option[value="'+n+'"]',e.$elem)},r=function(){var n=e.options.initialRating;return n?a(n):t("option:selected",e.$elem)},o=function(){var n=e.$elem.find('option[value="'+e.options.emptyValue+'"]');return!n.length&&e.options.allowEmpty?(n=t("<option />",{value:e.options.emptyValue}),n.prependTo(e.$elem)):n},l=function(t){var n=e.$elem.data("barrating");return void 0!==t?n[t]:n},s=function(t,n){null!==n&&"object"==typeof n?e.$elem.data("barrating",n):e.$elem.data("barrating")[t]=n},u=function(){var t=r(),n=o(),i=t.val(),a=t.data("html")?t.data("html"):t.text(),l=null!==e.options.allowEmpty?e.options.allowEmpty:!!n.length,u=n.length?n.val():null,d=n.length?n.text():null;s(null,{userOptions:e.options,ratingValue:i,ratingText:a,originalRatingValue:i,originalRatingText:a,allowEmpty:l,emptyRatingValue:u,emptyRatingText:d,readOnly:e.options.readonly,ratingMade:!1})},d=function(){e.$elem.removeData("barrating")},c=function(){return l("ratingText")},f=function(){return l("ratingValue")},g=function(){var n=t("<div />",{class:"br-widget"});return e.$elem.find("option").each(function(){var i,a,r,o;(i=t(this).val())!==l("emptyRatingValue")&&(a=t(this).text(),r=t(this).data("html"),r&&(a=r),o=t("<a />",{href:"#","data-rating-value":i,"data-rating-text":a,html:e.options.showValues?a:""}),n.append(o))}),e.options.showSelectedRating&&n.append(t("<div />",{text:"",class:"br-current-rating"})),e.options.reverse&&n.addClass("br-reverse"),e.options.readonly&&n.addClass("br-readonly"),n},p=function(){return l("userOptions").reverse?"nextAll":"prevAll"},h=function(t){a(t).prop("selected",!0),e.$elem.change()},m=function(){t("option",e.$elem).prop("selected",function(){return this.defaultSelected}),e.$elem.change()},v=function(t){t=t||c(),t==l("emptyRatingText")&&(t=""),e.options.showSelectedRating&&e.$elem.parent().find(".br-current-rating").text(t)},b=function(t){return Math.round(Math.floor(10*t)/10%1*100)},y=function(){e.$widget.find("a").removeClass(function(t,e){return(e.match(/(^|\s)br-\S+/g)||[]).join(" ")})},w=function(){var n,i,a=e.$widget.find('a[data-rating-value="'+f()+'"]'),r=l("userOptions").initialRating,o=t.isNumeric(f())?f():0,s=b(r);if(y(),a.addClass("br-selected br-current")[p()]().addClass("br-selected"),!l("ratingMade")&&t.isNumeric(r)){if(o>=r||!s)return;n=e.$widget.find("a"),i=a.length?a[l("userOptions").reverse?"prev":"next"]():n[l("userOptions").reverse?"last":"first"](),i.addClass("br-fractional"),i.addClass("br-fractional-"+s)}},$=function(t){return!(!l("allowEmpty")||!l("userOptions").deselectable)&&f()==t.attr("data-rating-value")},x=function(n){n.on("click.barrating",function(n){var i,a,r=t(this),o=l("userOptions");return n.preventDefault(),i=r.attr("data-rating-value"),a=r.attr("data-rating-text"),$(r)&&(i=l("emptyRatingValue"),a=l("emptyRatingText")),s("ratingValue",i),s("ratingText",a),s("ratingMade",!0),h(i),v(a),w(),o.onSelect.call(e,f(),c(),n),!1})},R=function(e){e.on("mouseenter.barrating",function(){var e=t(this);y(),e.addClass("br-active")[p()]().addClass("br-active"),v(e.attr("data-rating-text"))})},V=function(t){e.$widget.on("mouseleave.barrating blur.barrating",function(){v(),w()})},O=function(e){e.on("touchstart.barrating",function(e){e.preventDefault(),e.stopPropagation(),t(this).click()})},C=function(t){t.on("click.barrating",function(t){t.preventDefault()})},S=function(t){x(t),e.options.hoverState&&(R(t),V())},T=function(t){t.off(".barrating")},j=function(t){var n=e.$widget.find("a");O&&O(n),t?(T(n),C(n)):S(n)};this.show=function(){l()||(n(),u(),e.$widget=g(),e.$widget.insertAfter(e.$elem),w(),v(),j(e.options.readonly),e.$elem.hide())},this.readonly=function(t){"boolean"==typeof t&&l("readOnly")!=t&&(j(t),s("readOnly",t),e.$widget.toggleClass("br-readonly"))},this.set=function(t){var n=l("userOptions");0!==e.$elem.find('option[value="'+t+'"]').length&&(s("ratingValue",t),s("ratingText",e.$elem.find('option[value="'+t+'"]').text()),s("ratingMade",!0),h(f()),v(c()),w(),n.silent||n.onSelect.call(this,f(),c()))},this.clear=function(){var t=l("userOptions");s("ratingValue",l("originalRatingValue")),s("ratingText",l("originalRatingText")),s("ratingMade",!1),m(),v(c()),w(),t.onClear.call(this,f(),c())},this.destroy=function(){var t=f(),n=c(),a=l("userOptions");T(e.$widget.find("a")),e.$widget.remove(),d(),i(),e.$elem.show(),a.onDestroy.call(this,t,n)}}return e.prototype.init=function(e,n){return this.$elem=t(n),this.options=t.extend({},t.fn.barrating.defaults,e),this.options},e}();t.fn.barrating=function(n,i){return this.each(function(){var a=new e;if(t(this).is("select")||t.error("Sorry, this plugin only works with select fields."),a.hasOwnProperty(n)){if(a.init(i,this),"show"===n)return a.show(i);if(a.$elem.data("barrating"))return a.$widget=t(this).next(".br-widget"),a[n](i)}else{if("object"==typeof n||!n)return i=n,a.init(i,this),a.show();t.error("Method "+n+" does not exist on jQuery.barrating")}})},t.fn.barrating.defaults={theme:"",initialRating:null,allowEmpty:null,emptyValue:"",showValues:!1,showSelectedRating:!0,deselectable:!0,reverse:!1,readonly:!1,fastClicks:!0,hoverState:!0,silent:!1,onSelect:function(t,e,n){},onClear:function(t,e){},onDestroy:function(t,e){}},t.fn.barrating.BarRating=e});
if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(t){"use strict";var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}t.fn.emulateTransitionEnd=function(e){var i=!1,o=this;t(this).one("bsTransitionEnd",function(){i=!0});var n=function(){i||t(o).trigger(t.support.transition.end)};return setTimeout(n,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var i=t(this),n=i.data("bs.alert");n||i.data("bs.alert",n=new o(this)),"string"==typeof e&&n[e].call(i)})}var i='[data-dismiss="alert"]',o=function(e){t(e).on("click",i,this.close)};o.VERSION="3.3.7",o.TRANSITION_DURATION=150,o.prototype.close=function(e){function i(){a.detach().trigger("closed.bs.alert").remove()}var n=t(this),s=n.attr("data-target");s||(s=n.attr("href"),s=s&&s.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===s?[]:s);e&&e.preventDefault(),a.length||(a=n.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",i).emulateTransitionEnd(o.TRANSITION_DURATION):i())};var n=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=o,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",i,o.prototype.close)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.button"),s="object"==typeof e&&e;n||o.data("bs.button",n=new i(this,s)),"toggle"==e?n.toggle():e&&n.setState(e)})}var i=function(e,o){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,o),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",o=this.$element,n=o.is("input")?"val":"html",s=o.data();e+="Text",null==s.resetText&&o.data("resetText",o[n]()),setTimeout(t.proxy(function(){o[n](null==s[e]?this.options[e]:s[e]),"loadingText"==e?(this.isLoading=!0,o.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,o.removeClass(i).removeAttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var o=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=o,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var o=t(i.target).closest(".btn");e.call(o,"toggle"),t(i.target).is('input[type="radio"], input[type="checkbox"]')||(i.preventDefault(),o.is("input,button")?o.trigger("focus"):o.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},i.DEFAULTS,o.data(),"object"==typeof e&&e),a="string"==typeof e?e:s.slide;n||o.data("bs.carousel",n=new i(this,s)),"number"==typeof e?n.to(e):a?n[a]():s.interval&&n.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var o="prev"==t?-1:1,n=(i+o)%this.$items.length;return this.$items.eq(n)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){if(!this.sliding)return this.slide("next")},i.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},i.prototype.slide=function(e,o){var n=this.$element.find(".item.active"),s=o||this.getItemForDirection(e,n),a=this.interval,r="next"==e?"left":"right",l=this;if(s.hasClass("active"))return this.sliding=!1;var h=s[0],d=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(d),!d.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var p=t(this.$indicators.children()[this.getItemIndex(s)]);p&&p.addClass("active")}var c=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(s.addClass(e),s[0].offsetWidth,n.addClass(r),s.addClass(r),n.one("bsTransitionEnd",function(){s.removeClass([e,r].join(" ")).addClass("active"),n.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(c)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(n.removeClass("active"),s.addClass("active"),this.sliding=!1,this.$element.trigger(c)),a&&this.cycle(),this}};var o=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=o,this};var n=function(i){var o,n=t(this),s=t(n.attr("data-target")||(o=n.attr("href"))&&o.replace(/.*(?=#[^\s]+$)/,""));if(s.hasClass("carousel")){var a=t.extend({},s.data(),n.data()),r=n.attr("data-slide-to");r&&(a.interval=!1),e.call(s,a),r&&s.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",n).on("click.bs.carousel.data-api","[data-slide-to]",n),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),function(t){"use strict";function e(e){var i,o=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(o)}function i(e){return this.each(function(){var i=t(this),n=i.data("bs.collapse"),s=t.extend({},o.DEFAULTS,i.data(),"object"==typeof e&&e);!n&&s.toggle&&/show|hide/.test(e)&&(s.toggle=!1),n||i.data("bs.collapse",n=new o(this,s)),"string"==typeof e&&n[e]()})}var o=function(e,i){this.$element=t(e),this.options=t.extend({},o.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};o.VERSION="3.3.7",o.TRANSITION_DURATION=350,o.DEFAULTS={toggle:!0},o.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},o.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,n=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(n&&n.length&&(e=n.data("bs.collapse"))&&e.transitioning)){var s=t.Event("show.bs.collapse");if(this.$element.trigger(s),!s.isDefaultPrevented()){n&&n.length&&(i.call(n,"hide"),e||n.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(o.TRANSITION_DURATION)[a](this.$element[0][l])}}}},o.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var n=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return n.call(this);this.$element[i](0).one("bsTransitionEnd",t.proxy(n,this)).emulateTransitionEnd(o.TRANSITION_DURATION)}}},o.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},o.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,o){var n=t(o);this.addAriaAndCollapsedClass(e(n),n)},this)).end()},o.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var n=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=o,t.fn.collapse.noConflict=function(){return t.fn.collapse=n,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(o){var n=t(this);n.attr("data-target")||o.preventDefault();var s=e(n),a=s.data("bs.collapse"),r=a?"toggle":n.data();i.call(s,r)})}(jQuery),function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var o=t(this),n=e(o),s={relatedTarget:this};n.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(n[0],i.target)||(n.trigger(i=t.Event("hide.bs.dropdown",s)),i.isDefaultPrevented()||(o.attr("aria-expanded","false"),n.removeClass("open").trigger(t.Event("hidden.bs.dropdown",s)))))}))}function o(e){return this.each(function(){var i=t(this),o=i.data("bs.dropdown");o||i.data("bs.dropdown",o=new a(this)),"string"==typeof e&&o[e].call(i)})}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',a=function(e){t(e).on("click.bs.dropdown",this.toggle)};a.VERSION="3.3.7",a.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=e(n),a=s.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!s.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(s.trigger(o=t.Event("show.bs.dropdown",r)),o.isDefaultPrevented())return;n.trigger("focus").attr("aria-expanded","true"),s.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},a.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var o=t(this);if(i.preventDefault(),i.stopPropagation(),!o.is(".disabled, :disabled")){var n=e(o),a=n.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&n.find(s).trigger("focus"),o.trigger("click");var r=n.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&l<r.length-1&&l++,~l||(l=0),r.eq(l).trigger("focus")}}}};var r=t.fn.dropdown;t.fn.dropdown=o,t.fn.dropdown.Constructor=a,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=r,this},t(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",s,a.prototype.toggle).on("keydown.bs.dropdown.data-api",s,a.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",a.prototype.keydown)}(jQuery),function(t){"use strict";function e(e,o){return this.each(function(){var n=t(this),s=n.data("bs.modal"),a=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e);s||n.data("bs.modal",s=new i(this,a)),"string"==typeof e?s[e](o):a.show&&s.show(o)})}var i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var o=this,n=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(n),this.isShown||n.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){o.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(o.$element)&&(o.ignoreBackdropClick=!0)})}),this.backdrop(function(){var n=t.support.transition&&o.$element.hasClass("fade");o.$element.parent().length||o.$element.appendTo(o.$body),o.$element.show().scrollTop(0),o.adjustDialog(),n&&o.$element[0].offsetWidth,o.$element.addClass("in"),o.enforceFocus();var s=t.Event("shown.bs.modal",{relatedTarget:e});n?o.$dialog.one("bsTransitionEnd",function(){o.$element.trigger("focus").trigger(s)}).emulateTransitionEnd(i.TRANSITION_DURATION):o.$element.trigger("focus").trigger(s)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=function(e){var o=this,n=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var s=t.support.transition&&n;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+n).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){if(this.ignoreBackdropClick)return void(this.ignoreBackdropClick=!1);t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),s&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;s?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){o.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},i.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var o=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return t.fn.modal=o,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var o=t(this),n=o.attr("href"),s=t(o.attr("data-target")||n&&n.replace(/.*(?=#[^\s]+$)/,"")),a=s.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(n)&&n},s.data(),o.data());o.is("a")&&i.preventDefault(),s.one("show.bs.modal",function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",function(){o.is(":visible")&&o.trigger("focus")})}),e.call(s,a,this)})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tooltip"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.tooltip",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},i.prototype.init=function(e,i,o){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},i.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,o){i[t]!=o&&(e[t]=o)}),e},i.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},i.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},i.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)}},i.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var o=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!o)return;var n=this,s=this.tip(),a=this.getUID(this.type);this.setContent(),s.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&s.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,s[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),s.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?s.appendTo(this.options.container):s.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var d=this.getPosition(),p=s[0].offsetWidth,c=s[0].offsetHeight;if(h){var f=r,u=this.getPosition(this.$viewport);r="bottom"==r&&d.bottom+c>u.bottom?"top":"top"==r&&d.top-c<u.top?"bottom":"right"==r&&d.right+p>u.width?"left":"left"==r&&d.left-p<u.left?"right":r,s.removeClass(f).addClass(r)}var g=this.getCalculatedOffset(r,d,p,c);this.applyPlacement(g,r);var m=function(){var t=n.hoverState;n.$element.trigger("shown.bs."+n.type),n.hoverState=null,"out"==t&&n.leave(n)};t.support.transition&&this.$tip.hasClass("fade")?s.one("bsTransitionEnd",m).emulateTransitionEnd(i.TRANSITION_DURATION):m()}},i.prototype.applyPlacement=function(e,i){var o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight,a=parseInt(o.css("margin-top"),10),r=parseInt(o.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top+=a,e.left+=r,t.offset.setOffset(o[0],t.extend({using:function(t){o.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),o.addClass("in");var l=o[0].offsetWidth,h=o[0].offsetHeight;"top"==i&&h!=s&&(e.top=e.top+s-h);var d=this.getViewportAdjustedDelta(i,e,l,h);d.left?e.left+=d.left:e.top+=d.top;var p=/top|bottom/.test(i),c=p?2*d.left-n+l:2*d.top-s+h,f=p?"offsetWidth":"offsetHeight";o.offset(e),this.replaceArrow(c,o[0][f],p)},i.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},i.prototype.hide=function(e){function o(){"in"!=n.hoverState&&s.detach(),n.$element&&n.$element.removeAttr("aria-describedby").trigger("hidden.bs."+n.type),e&&e()}var n=this,s=t(this.$tip),a=t.Event("hide.bs."+this.type);if(this.$element.trigger(a),!a.isDefaultPrevented())return s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),this.hoverState=null,this},i.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},i.prototype.hasContent=function(){return this.getTitle()},i.prototype.getPosition=function(e){e=e||this.$element;var i=e[0],o="BODY"==i.tagName,n=i.getBoundingClientRect();null==n.width&&(n=t.extend({},n,{width:n.right-n.left,height:n.bottom-n.top}));var s=window.SVGElement&&i instanceof window.SVGElement,a=o?{top:0,left:0}:s?null:e.offset(),r={scroll:o?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=o?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},n,r,l,a)},i.prototype.getCalculatedOffset=function(t,e,i,o){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-o,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-o/2,left:e.left-i}:{top:e.top+e.height/2-o/2,left:e.left+e.width}},i.prototype.getViewportAdjustedDelta=function(t,e,i,o){var n={top:0,left:0};if(!this.$viewport)return n;var s=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-s-a.scroll,l=e.top+s-a.scroll+o;r<a.top?n.top=a.top-r:l>a.top+a.height&&(n.top=a.top+a.height-l)}else{var h=e.left-s,d=e.left+s+i;h<a.left?n.left=a.left-h:d>a.right&&(n.left=a.left+a.width-d)}return n},i.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},i.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},i.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},i.prototype.enable=function(){this.enabled=!0},i.prototype.disable=function(){this.enabled=!1},i.prototype.toggleEnabled=function(){this.enabled=!this.enabled},i.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},i.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var o=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=i,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=o,this}}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof e&&e;!n&&/destroy|hide/.test(e)||(n||o.data("bs.popover",n=new i(this,s)),"string"==typeof e&&n[e]())})}var i=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");i.VERSION="3.3.7",i.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),i.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),i.prototype.constructor=i,i.prototype.getDefaults=function(){return i.DEFAULTS},i.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},i.prototype.hasContent=function(){return this.getTitle()||this.getContent()},i.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},i.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var o=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=i,t.fn.popover.noConflict=function(){return t.fn.popover=o,this}}(jQuery),function(t){"use strict";function e(i,o){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",o=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",o=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),n=e.data("target")||e.attr("href"),s=/^#./.test(n)&&t(n);return s&&s.length&&s.is(":visible")&&[[s[i]().top+o,n]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),o=this.options.offset+i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=o)return a!=(t=s[s.length-1])&&this.activate(t);if(a&&e<n[0])return this.activeTarget=null,this.clear();for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(void 0===n[t+1]||e<n[t+1])&&this.activate(s[t])},e.prototype.activate=function(e){
this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var o=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=o,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new i(this)),"string"==typeof e&&n[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.data("target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a"),s=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:n[0]});if(n.trigger(s),e.trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){var r=t(o);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){n.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:n[0]})})}}},i.prototype.activate=function(e,o,n){function s(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),n&&n()}var a=o.find("> .active"),r=n&&t.support.transition&&(a.length&&a.hasClass("fade")||!!o.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",s).emulateTransitionEnd(i.TRANSITION_DURATION):s(),a.removeClass("in")};var o=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=o,this};var n=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',n).on("click.bs.tab.data-api",'[data-toggle="pill"]',n)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof e&&e;n||o.data("bs.affix",n=new i(this,s)),"string"==typeof e&&n[e]()})}var i=function(e,o){this.options=t.extend({},i.DEFAULTS,o),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,o){var n=this.$target.scrollTop(),s=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return n<i&&"top";if("bottom"==this.affixed)return null!=i?!(n+this.unpin<=s.top)&&"bottom":!(n+a<=t-o)&&"bottom";var r=null==this.affixed,l=r?n:s.top,h=r?a:e;return null!=i&&n<=i?"top":null!=o&&l+h>=t-o&&"bottom"},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),o=this.options.offset,n=o.top,s=o.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof o&&(s=n=o),"function"==typeof n&&(n=o.top(this.$element)),"function"==typeof s&&(s=o.bottom(this.$element));var r=this.getState(a,e,n,s);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-s})}};var o=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=o,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),o=i.data();o.offset=o.offset||{},null!=o.offsetBottom&&(o.offset.bottom=o.offsetBottom),null!=o.offsetTop&&(o.offset.top=o.offsetTop),e.call(i,o)})})}(jQuery);
!function(t){"use strict";function e(t){if(!t)return"";var e,o="";for(e=0;e<t.length;e+=1)o+=F[t.charAt(e)]||t.charAt(e);return o}function o(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function i(t){if(t){if(t.selectionStart)return t.selectionStart;if(document.selection){t.focus();var e=document.selection.createRange(),o=document.selection.createRange().text.length;return e.moveStart("character",-t.value.length),e.text.length-o}}}function n(t,e){if(t.setSelectionRange)t.focus(),t.setSelectionRange(e,e);else if(t.createTextRange){var o=t.createTextRange();o.collapse(!0),o.moveEnd("character",e),o.moveStart("character",e),o.select()}}function a(t){return void 0!==t}function r(e,o,i,n){return a(e)&&!t.isArray(e)?t.isFunction(e)?e.apply(this,o):n:a(i)?r.call(this,i,o):n}function s(t,e,o,i){return r.call(this,a(this.source[e])&&Object.prototype.hasOwnProperty.call(this.source[e],t)?this.source[e][t]:void 0,o,function(){return r.call(this,a(this[t][e])?this[t][e]:a(this[t][0])?this[t][0]:Object.prototype.hasOwnProperty.call(this,t)?this[t]:void 0,o,P[t][e]||P[t][0]||P[t],i)},i)}function l(e,o){return a(o)||(o=0),t.isArray(this.source)&&a(this.source[o])&&a(this.source[o][e])?this.source[o][e]:a(this[e])?t.isArray(this[e])?a(this[e][o])?this[e][o]:a(this[e][0])?this[e][0]:null:this[e]:null}function c(e,o,i,n){o.xhr&&o.xhr.abort(),o.xhr=t.ajax(t.extend(!0,{url:e,type:"GET",async:!0,cache:!1,dataType:"json"},o.ajax)).done(function(e){i&&i.apply(this,t.makeArray(arguments))}).fail(function(t,e){n&&console.log("Request failed: "+e)})}function u(t,e){var o,i=!1;for(o=0;o<t.length;o+=1)if(i=s.call(this,"findRight",o,[t[o],e,o]))return{right:i,source:o};return!1}function d(t,e){var o;for(h.call(this,t,e),o=0;o<t.length;o+=1)t[o]=s.call(this,"filter",o,[t[o],e,o],t[o])}function f(e,o,i){var n,l=this;if(t.isFunction(l.source))l.source.apply(l,[e,function(t){o=[t],r.call(l,i,[e])},o,0]);else for(n=0;n<l.source.length;n+=1)if(t.isArray(l.source[n]))o[n]=l.source[n];else if(t.isFunction(l.source[n]))!function(n){l.source[n].apply(l,[e,function(a){if(o[n]||(o[n]=[]),a&&t.isArray(a))switch(l.appendMethod){case"replace":o[n]=a;break;default:o[n]=o[n].concat(a)}r.call(l,i,[e])},o,n])}(n);else switch(l.source[n].type){case"remote":if(a(l.source[n].url)&&(!a(l.source[n].minLength)||e.length>=l.source[n].minLength)){var u=s.call(l,"replace",n,[l.source[n].url,e],"");o[n]||(o[n]=[]),function(t){c(u,l.source[t],function(n){o[t]=n,r.call(l,i,[e])},l.debug)}(n)}break;default:a(l.source[n].data)?o[n]=l.source[n].data:o[n]=l.source[n]}r.call(l,i,[e])}function h(t,e){for(var o=0;o<t.length;o++)t[o]=s.call(this,"preparse",o,[t[o],e],t[o])}function g(e,o){var i,n,a,r=[];for(i=0;i<e.length;i+=1)for(n=0;n<e[i].length&&!(r.length>=this.limit);n+=1)a=t(s.call(this,"render",i,[e[i][n],i,n,o],"")),a.data("source",i),a.data("pid",n),a.data("item",e[i][n]),r.push(a);return r}function p(t,e){return!!(a(t.data("source"))&&a(t.data("pid"))&&a(e[t.data("source")])&&a(e[t.data("source")][t.data("pid")]))&&e[t.data("source")][t.data("pid")]}function v(t,e){var o=p(t,e);return o?s.call(this,"getValue",t.data("source"),[o,t.data("source")]):a(t.data("value"))?decodeURIComponent(t.data("value")):t.html()}function m(e,o){function r(){if(O.val()!=I){if(I=O.val(),I.length<o.minLength)return void O.trigger("close.xdsoft");f.call(o,I,F,function(t){if(t==I){var e;if(d.call(o,F,t),O.trigger("updateContent.xdsoft"),o.showHint&&I.length&&I.length<=O.prop("size")&&(e=u.call(o,F,I))){var i=s.call(o,"getTitle",e.source,[e.right,e.source]);i=t+i.substr(t.length),P.val(i)}else P.val("")}})}}function l(t){var e,n=t.keyCode;switch(n){case H:case T:case j:case W:case L:if(t.shiftKey||t.ctrlKey)return!0;break;case S:case C:return!0;case x:case y:return!!(_||A||t.shiftKey||t.ctrlKey)||(K=O.val(),q=i(O[0]),n!==x||q!==K.length||((e=u.call(o,F,K))?O.trigger("pick.xdsoft",[s.call(o,"getValue",e.source,[e.right,e.source])]):O.trigger("pick.xdsoft"),t.preventDefault(),!1));case k:return!0;case z:return!E||(O.trigger("pick.xdsoft"),t.preventDefault(),!1);case R:return O.val(I).trigger("close.xdsoft"),t.preventDefault(),!1;case w:case b:if(!E)return O.trigger("open.xdsoft"),O.trigger("updateContent.xdsoft"),t.preventDefault(),!1;B=m.find("div.active");var a=n==w?"next":"prev",r=!0;return B.length?(B.removeClass("active"),B[a]().length?B[a]().addClass("active"):(O.val(I),r=!1)):m.children().eq(n==w?0:-1).addClass("active"),r&&O.trigger("timepick.xdsoft"),m.trigger("updatescroll.xdsoft"),t.preventDefault(),!1}}if(!t(e).hasClass("xdsoft_input")){var c,h=t('<div class="xdsoft_autocomplete"></div>'),m=t('<div class="xdsoft_autocomplete_dropdown"></div>'),P=t('<input readonly class="xdsoft_autocomplete_hint"/>'),O=t(e),F=[],E=!1,K="",I="",V="",B=null,q=0;O.data("autocomplete_options",o),m.on("mousedown",function(t){t.preventDefault(),t.stopPropagation()}).on("updatescroll.xdsoft",function(){var t=m.find(".active");if(t.length){var e=t.position().top,o=t.outerHeight(!0),i=m.scrollTop(),n=m.height();e<0?m.scrollTop(i-Math.abs(e)):e+o>n&&m.scrollTop(i+e+o-n)}}),h.css({display:O.css("display"),width:O.css("width")}),o.style&&h.css(o.style),O.addClass("xdsoft_input").attr("autocomplete","off");var D=null,U=null,M=!1;m.on("mousemove","div",function(){if(t(this).hasClass("active"))return!0;m.find("div").removeClass("active"),t(this).addClass("active")}).on("mousedown","div",function(e){m.find("div").removeClass("active"),t(this).addClass("active"),O.trigger("pick.xdsoft")}).on("touchstart","div",function(t){D=t.originalEvent.touches[0].clientX,U=t.originalEvent.touches[0].clientY}).on("touchend","div",function(e){!1===M&&(m.find("div").removeClass("active"),t(this).addClass("active"),O.trigger("pick.xdsoft")),M=!1}).on("touchmove","div",function(t){if(D&&U){var e=t.originalEvent.touches[0].clientX,o=t.originalEvent.touches[0].clientY,i=D-e,n=U-o;M=Math.abs(i)>Math.abs(n)?i>0?"left":"right":n>0?"top":"bottm",D=null,U=null}}),O.data("xdsoft_autocomplete",F).after(h).on("pick.xdsoft",function(t,e){O.trigger("timepick.xdsoft",e),V=I=O.val(),O.trigger("close.xdsoft"),B=m.find("div.active").eq(0),B.length||(B=m.children().first()),O.trigger("selected.xdsoft",[p(B,F)]),o.afterSelected&&o.afterSelected()}).on("timepick.xdsoft",function(t,e){B=m.find("div.active"),B.length||(B=m.children().first()),B.length&&(a(e)?O.val(e):O.val(v.call(o,B,F)),O.trigger("autocompleted.xdsoft",[p(B,F)]),P.val(""),n(O[0],O.val().length))}).on("keydown.xdsoft input.xdsoft cut.xdsoft paste.xdsoft",function(t){var e=l(t);if(!1===e||!0===e)return e;setTimeout(function(){r()},1),r()}).on("change.xdsoft",function(t){I=O.val()}),I=O.val(),f.call(o,O.val(),F,function(t){d.call(o,F,t)}),o.openOnFocus&&O.on("focusin.xdsoft",function(){O.trigger("open.xdsoft"),O.trigger("updateContent.xdsoft")}),o.closeOnBlur&&O.on("focusout.xdsoft",function(){O.trigger("close.xdsoft")}),h.append(O).append(m);var N=!1,Y=0;O.on("updateHelperPosition.xdsoft",function(){clearTimeout(Y),Y=setTimeout(function(){if(h.css({display:O.css("display"),width:O.css("width")}),m.css(t.extend(!0,{left:O.position().left,top:O.position().top+parseInt(O.css("marginTop"))+parseInt(O[0].offsetHeight),marginLeft:O.css("marginLeft"),marginRight:O.css("marginRight"),width:"100%"==o.dropdownWidth?O[0].offsetWidth:o.dropdownWidth},o.dropdownStyle)),o.showHint){var e=getComputedStyle(O[0],"");P[0].style.cssText=e.cssText,P.css({"box-sizing":e.boxSizing,borderStyle:"solid",borderCollapse:e.borderCollapse,borderLeftWidth:e.borderLeftWidth,borderRightWidth:e.borderRightWidth,borderTopWidth:e.borderTopWidth,borderBottomWidth:e.borderBottomWidth,paddingBottom:e.paddingBottom,marginBottom:e.marginBottom,paddingTop:e.paddingTop,marginTop:e.marginTop,paddingLeft:e.paddingLeft,marginLeft:e.marginLeft,paddingRight:e.paddingRight,marginRight:e.marginRight,maxHeight:e.maxHeight,minHeight:e.minHeight,maxWidth:e.maxWidth,minWidth:e.minWidth,width:e.width,letterSpacing:e.letterSpacing,lineHeight:e.lineHeight,outlineWidth:e.outlineWidth,fontFamily:e.fontFamily,fontVariant:e.fontVariant,fontStyle:O.css("fontStyle"),fontSize:O.css("fontSize"),fontWeight:O.css("fontWeight"),flex:e.flex,justifyContent:e.justifyContent,borderRadius:e.borderRadius,"-webkit-box-shadow":"none","box-shadow":"none"}),O.css("font-size",O.css("fontSize")),P.innerHeight(O.innerHeight()),P.css(t.extend(!0,{position:"absolute",zIndex:"1",borderColor:"transparent",outlineColor:"transparent",left:O.position().left,top:O.position().top,background:O.css("background")},o.hintStyle)),!1!==N?P.css("background",N):N=O.css("background");try{O[0].style.setProperty("background","transparent","important")}catch(t){O.css("background","transparent")}h.append(P)}},o.timeoutUpdate||1)}),O.is(":visible")?O.trigger("updateHelperPosition.xdsoft"):c=setInterval(function(){O.is(":visible")&&(O.trigger("updateHelperPosition.xdsoft"),clearInterval(c))},100),t(window).on("resize",function(){h.css({width:"auto"}),O.trigger("updateHelperPosition.xdsoft")}),O.on("close.xdsoft",function(){E&&(m.hide(),P.val(""),o.autoselect||O.val(I),E=!1)}).on("updateContent.xdsoft",function(){var e=g.call(o,F,O.val()),i=10;if(!e.length)return void O.trigger("close.xdsoft");O.trigger("open.xdsoft"),t(e).each(function(){this.css(t.extend(!0,{paddingLeft:O.css("paddingLeft"),paddingRight:O.css("paddingRight")},o.itemStyle))}),m.html(e),i=o.visibleHeight?o.visibleHeight:o.visibleLimit*((e[0]?e[0].outerHeight(!0):0)||o.defaultHeightItem)+5,m.css("maxHeight",i+"px")}).on("open.xdsoft",function(){E||(m.show(),E=!0)}).on("destroy.xdsoft",function(){O.removeClass("xdsoft"),h.after(O),h.remove(),clearTimeout(0),clearTimeout(c),O.data("xdsoft_autocomplete",null),O.off(".xdsoft")})}}var y=37,x=39,b=38,w=40,k=9,C=17,S=16,z=13,R=27,H=65,T=67,j=86,W=90,L=89,P={},_=!1,A=!1,O={},F={"ẚ":"a","Á":"a","á":"a","À":"a","à":"a","Ă":"a","ă":"a","Ắ":"a","ắ":"a","Ằ":"a","ằ":"a","Ẵ":"a","ẵ":"a","Ẳ":"a","Ẫ":"a","ẫ":"a","Ẩ":"a","ẩ":"a","Ǎ":"a","ǎ":"a","Å":"a","å":"a","Ǻ":"a","ǻ":"a","Ä":"a","ä":"a","Ǟ":"a","ǟ":"a","Ã":"a","ã":"a","Ȧ":"a","ȧ":"a","Ǡ":"a","ǡ":"a","Ą":"a","ą":"a","Ā":"a","ā":"a","Ả":"a","ả":"a","Ȁ":"a","ȁ":"a","Ȃ":"a","ȃ":"a","Ạ":"a","ạ":"a","Ặ":"a","ặ":"a","Ậ":"a","ậ":"a","Ḁ":"a","ḁ":"a","Ⱥ":"a","ⱥ":"a","Ǽ":"a","ǽ":"a","Ǣ":"a","ǣ":"a","Ḃ":"b","ḃ":"b","Ḅ":"b","ḅ":"b","Ḇ":"b","ḇ":"b","Ƀ":"b","ƀ":"b","ᵬ":"b","Ɓ":"b","ɓ":"b","Ƃ":"b","ƃ":"b","Ć":"c","ć":"c","Ĉ":"c","ĉ":"c","Č":"c","č":"c","Ċ":"c","ċ":"c","Ç":"c","ç":"c","Ḉ":"c","ḉ":"c","Ȼ":"c","ȼ":"c","Ƈ":"c","ƈ":"c","ɕ":"c","Ď":"d","ď":"d","Ḋ":"d","ḋ":"d","Ḑ":"d","ḑ":"d","Ḍ":"d","ḍ":"d","Ḓ":"d","ḓ":"d","Ḏ":"d","ḏ":"d","Đ":"d","đ":"d","ᵭ":"d","Ɖ":"d","ɖ":"d","Ɗ":"d","ɗ":"d","Ƌ":"d","ƌ":"d","ȡ":"d","ð":"d","É":"e","Ə":"e","Ǝ":"e","ǝ":"e","é":"e","È":"e","è":"e","Ĕ":"e","ĕ":"e","Ê":"e","ê":"e","Ế":"e","ế":"e","Ề":"e","ề":"e","Ễ":"e","ễ":"e","Ể":"e","ể":"e","Ě":"e","ě":"e","Ë":"e","ë":"e","Ẽ":"e","ẽ":"e","Ė":"e","ė":"e","Ȩ":"e","ȩ":"e","Ḝ":"e","ḝ":"e","Ę":"e","ę":"e","Ē":"e","ē":"e","Ḗ":"e","ḗ":"e","Ḕ":"e","ḕ":"e","Ẻ":"e","ẻ":"e","Ȅ":"e","ȅ":"e","Ȇ":"e","ȇ":"e","Ẹ":"e","ẹ":"e","Ệ":"e","ệ":"e","Ḙ":"e","ḙ":"e","Ḛ":"e","ḛ":"e","Ɇ":"e","ɇ":"e","ɚ":"e","ɝ":"e","Ḟ":"f","ḟ":"f","ᵮ":"f","Ƒ":"f","ƒ":"f","Ǵ":"g","ǵ":"g","Ğ":"g","ğ":"g","Ĝ":"g","ĝ":"g","Ǧ":"g","ǧ":"g","Ġ":"g","ġ":"g","Ģ":"g","ģ":"g","Ḡ":"g","ḡ":"g","Ǥ":"g","ǥ":"g","Ɠ":"g","ɠ":"g","Ĥ":"h","ĥ":"h","Ȟ":"h","ȟ":"h","Ḧ":"h","ḧ":"h","Ḣ":"h","ḣ":"h","Ḩ":"h","ḩ":"h","Ḥ":"h","ḥ":"h","Ḫ":"h","ḫ":"h",H:"h","̱":"h","ẖ":"h","Ħ":"h","ħ":"h","Ⱨ":"h","ⱨ":"h","Í":"i","í":"i","Ì":"i","ì":"i","Ĭ":"i","ĭ":"i","Î":"i","î":"i","Ǐ":"i","ǐ":"i","Ï":"i","ï":"i","Ḯ":"i","ḯ":"i","Ĩ":"i","ĩ":"i","İ":"i",i:"i","Į":"i","į":"i","Ī":"i","ī":"i","Ỉ":"i","ỉ":"i","Ȉ":"i","ȉ":"i","Ȋ":"i","ȋ":"i","Ị":"i","ị":"i","Ḭ":"i","ḭ":"i",I:"i","ı":"i","Ɨ":"i","ɨ":"i","Ĵ":"j","ĵ":"j",J:"j","̌":"j","ǰ":"j","ȷ":"j","Ɉ":"j","ɉ":"j","ʝ":"j","ɟ":"j","ʄ":"j","Ḱ":"k","ḱ":"k","Ǩ":"k","ǩ":"k","Ķ":"k","ķ":"k","Ḳ":"k","ḳ":"k","Ḵ":"k","ḵ":"k","Ƙ":"k","ƙ":"k","Ⱪ":"k","ⱪ":"k","Ĺ":"a","ĺ":"l","Ľ":"l","ľ":"l","Ļ":"l","ļ":"l","Ḷ":"l","ḷ":"l","Ḹ":"l","ḹ":"l","Ḽ":"l","ḽ":"l","Ḻ":"l","ḻ":"l","Ł":"l","ł":"l","̣":"l","Ŀ":"l","ŀ":"l","Ƚ":"l","ƚ":"l","Ⱡ":"l","ⱡ":"l","Ɫ":"l","ɫ":"l","ɬ":"l","ɭ":"l","ȴ":"l","Ḿ":"m","ḿ":"m","Ṁ":"m","ṁ":"m","Ṃ":"m","ṃ":"m","ɱ":"m","Ń":"n","ń":"n","Ǹ":"n","ǹ":"n","Ň":"n","ň":"n","Ñ":"n","ñ":"n","Ṅ":"n","ṅ":"n","Ņ":"n","ņ":"n","Ṇ":"n","ṇ":"n","Ṋ":"n","ṋ":"n","Ṉ":"n","ṉ":"n","Ɲ":"n","ɲ":"n","Ƞ":"n","ƞ":"n","ɳ":"n","ȵ":"n",N:"n","̈":"n",n:"n","Ó":"o","ó":"o","Ò":"o","ò":"o","Ŏ":"o","ŏ":"o","Ô":"o","ô":"o","Ố":"o","ố":"o","Ồ":"o","ồ":"o","Ỗ":"o","ỗ":"o","Ổ":"o","ổ":"o","Ǒ":"o","ǒ":"o","Ö":"o","ö":"o","Ȫ":"o","ȫ":"o","Ő":"o","ő":"o","Õ":"o","õ":"o","Ṍ":"o","ṍ":"o","Ṏ":"o","ṏ":"o","Ȭ":"o","ȭ":"o","Ȯ":"o","ȯ":"o","Ȱ":"o","ȱ":"o","Ø":"o","ø":"o","Ǿ":"o","ǿ":"o","Ǫ":"o","ǫ":"o","Ǭ":"o","ǭ":"o","Ō":"o","ō":"o","Ṓ":"o","ṓ":"o","Ṑ":"o","ṑ":"o","Ỏ":"o","ỏ":"o","Ȍ":"o","ȍ":"o","Ȏ":"o","ȏ":"o","Ơ":"o","ơ":"o","Ớ":"o","ớ":"o","Ờ":"o","ờ":"o","Ỡ":"o","ỡ":"o","Ở":"o","ở":"o","Ợ":"o","ợ":"o","Ọ":"o","ọ":"o","Ộ":"o","ộ":"o","Ɵ":"o","ɵ":"o","Ṕ":"p","ṕ":"p","Ṗ":"p","ṗ":"p","Ᵽ":"p","Ƥ":"p","ƥ":"p",P:"p","̃":"p",p:"p","ʠ":"q","Ɋ":"q","ɋ":"q","Ŕ":"r","ŕ":"r","Ř":"r","ř":"r","Ṙ":"r","ṙ":"r","Ŗ":"r","ŗ":"r","Ȑ":"r","ȑ":"r","Ȓ":"r","ȓ":"r","Ṛ":"r","ṛ":"r","Ṝ":"r","ṝ":"r","Ṟ":"r","ṟ":"r","Ɍ":"r","ɍ":"r","ᵲ":"r","ɼ":"r","Ɽ":"r","ɽ":"r","ɾ":"r","ᵳ":"r","ß":"s","Ś":"s","ś":"s","Ṥ":"s","ṥ":"s","Ŝ":"s","ŝ":"s","Š":"s","š":"s","Ṧ":"s","ṧ":"s","Ṡ":"s","ṡ":"s","ẛ":"s","Ş":"s","ş":"s","Ṣ":"s","ṣ":"s","Ṩ":"s","ṩ":"s","Ș":"s","ș":"s","ʂ":"s",S:"s","̩":"s",s:"s","Þ":"t","þ":"t","Ť":"t","ť":"t",T:"t","ẗ":"t","Ṫ":"t","ṫ":"t","Ţ":"t","ţ":"t","Ṭ":"t","ṭ":"t","Ț":"t","ț":"t","Ṱ":"t","ṱ":"t","Ṯ":"t","ṯ":"t","Ŧ":"t","ŧ":"t","Ⱦ":"t","ⱦ":"t","ᵵ":"t","ƫ":"t","Ƭ":"t","ƭ":"t","Ʈ":"t","ʈ":"t","ȶ":"t","Ú":"u","ú":"u","Ù":"u","ù":"u","Ŭ":"u","ŭ":"u","Û":"u","û":"u","Ǔ":"u","ǔ":"u","Ů":"u","ů":"u","Ü":"u","ü":"u","Ǘ":"u","ǘ":"u","Ǜ":"u","ǜ":"u","Ǚ":"u","ǚ":"u","Ǖ":"u","ǖ":"u","Ű":"u","ű":"u","Ũ":"u","ũ":"u","Ṹ":"u","ṹ":"u","Ų":"u","ų":"u","Ū":"u","ū":"u","Ṻ":"u","ṻ":"u","Ủ":"u","ủ":"u","Ȕ":"u","ȕ":"u","Ȗ":"u","ȗ":"u","Ư":"u","ư":"u","Ứ":"u","ứ":"u","Ừ":"u","ừ":"u","Ữ":"u","ữ":"u","Ử":"u","ử":"u","Ự":"u","ự":"u","Ụ":"u","ụ":"u","Ṳ":"u","ṳ":"u","Ṷ":"u","ṷ":"u","Ṵ":"u","ṵ":"u","Ʉ":"u","ʉ":"u","Ṽ":"v","ṽ":"v","Ṿ":"v","ṿ":"v","Ʋ":"v","ʋ":"v","Ẃ":"w","ẃ":"w","Ẁ":"w","ẁ":"w","Ŵ":"w","ŵ":"w",W:"w","̊":"w","ẘ":"w","Ẅ":"w","ẅ":"w","Ẇ":"w","ẇ":"w","Ẉ":"w","ẉ":"w","Ẍ":"x","ẍ":"x","Ẋ":"x","ẋ":"x","Ý":"y","ý":"y","Ỳ":"y","ỳ":"y","Ŷ":"y","ŷ":"y",Y:"y","ẙ":"y","Ÿ":"y","ÿ":"y","Ỹ":"y","ỹ":"y","Ẏ":"y","ẏ":"y","Ȳ":"y","ȳ":"y","Ỷ":"y","ỷ":"y","Ỵ":"y","ỵ":"y","ʏ":"y","Ɏ":"y","ɏ":"y","Ƴ":"y","ƴ":"y","Ź":"z","ź":"z","Ẑ":"z","ẑ":"z","Ž":"z","ž":"z","Ż":"z","ż":"z","Ẓ":"z","ẓ":"z","Ẕ":"z","ẕ":"z","Ƶ":"z","ƶ":"z","Ȥ":"z","ȥ":"z","ʐ":"z","ʑ":"z","Ⱬ":"z","ⱬ":"z","Ǯ":"z","ǯ":"z","ƺ":"z","2":"2","6":"6","B":"B","F":"F","J":"J","N":"N","R":"R","V":"V","Z":"Z","b":"b","f":"f","j":"j","n":"n","r":"r","v":"v","z":"z","1":"1","5":"5","9":"9","A":"A","E":"E","I":"I","M":"M","Q":"Q","U":"U","Y":"Y","a":"a","e":"e","i":"i","m":"m","q":"q","u":"u","y":"y","0":"0","4":"4","8":"8","D":"D","H":"H","L":"L","P":"P","T":"T","X":"X","d":"d","h":"h","l":"l","p":"p","t":"t","x":"x","3":"3","7":"7","C":"C","G":"G","K":"K","O":"O","S":"S","W":"W","c":"c","g":"g","k":"k","o":"o","s":"s","w":"w","ẳ":"a","Â":"a","â":"a","Ấ":"a","ấ":"a","Ầ":"a","ầ":"a"};void 0===window.getComputedStyle&&(window.getComputedStyle=function(){function t(e,o,i,n){var a,r=o[i],s=parseFloat(r),l=r.split(/\d/)[0];return n=null!==n?n:/%|em/.test(l)&&e.parentElement?t(e.parentElement,e.parentElement.currentStyle,"fontSize",null):16,a="fontSize"===i?n:/width/i.test(i)?e.clientWidth:e.clientHeight,"em"===l?s*n:"in"===l?96*s:"pt"===l?96*s/72:"%"===l?s/100*a:s}function e(t,e){var o="border"===e?"Width":"",i=e+"Top"+o,n=e+"Right"+o,a=e+"Bottom"+o,r=e+"Left"+o;t[e]=(t[i]===t[n]===t[a]===t[r]?[t[i]]:t[i]===t[a]&&t[r]===t[n]?[t[i],t[n]]:t[r]===t[n]?[t[i],t[n],t[a]]:[t[i],t[n],t[a],t[r]]).join(" ")}function o(o){var i,n=o.currentStyle,a=this,r=t(o,n,"fontSize",null);for(i in n)Object.prototype.hasOwnProperty.call(n,i)&&(/width|height|margin.|padding.|border.+W/.test(i)&&"auto"!==a[i]?a[i]=t(o,n,i,r)+"px":"styleFloat"===i?a.float=n[i]:a[i]=n[i]);return e(a,"margin"),e(a,"padding"),e(a,"border"),a.fontSize=r+"px",a}function i(t){return new o(t)}return o.prototype={constructor:o,getPropertyPriority:function(){},getPropertyValue:function(t){return this[t]||""},item:function(){},removeProperty:function(){},setProperty:function(){},getPropertyCSSValue:function(){}},i}()),t(document).on("keydown.xdsoftctrl",function(t){t.keyCode===C&&(_=!0),t.keyCode===S&&(_=!0)}).on("keyup.xdsoftctrl",function(t){t.keyCode===C&&(_=!1),t.keyCode===S&&(_=!1)}),P={minLength:0,valueKey:"value",titleKey:"title",highlight:!0,showHint:!0,dropdownWidth:"100%",dropdownStyle:{},itemStyle:{},hintStyle:!1,style:!1,debug:!0,openOnFocus:!1,closeOnBlur:!0,autoselect:!1,accents:!0,replaceAccentsForRemote:!0,limit:20,visibleLimit:20,visibleHeight:0,defaultHeightItem:30,timeoutUpdate:10,get:function(t,e){return l.call(this,t,e)},replace:[function(t,o){return this.replaceAccentsForRemote&&(o=e(o)),t.replace("%QUERY%",encodeURIComponent(o))}],equal:function(t,e){return e.toLowerCase()==t.substr(0,e.length).toLowerCase()},findRight:[function(t,e,o){var i,n="";if(t)for(i=0;i<t.length;i+=1)if(n=s.call(this,"getValue",o,[t[i],o]),s.call(this,"equal",o,[n,e,o],!1))return t[i];return!1}],valid:[function(t,o){return this.accents&&(t=e(t),o=e(o)),-1!=t.toLowerCase().indexOf(o.toLowerCase())}],filter:[function(t,e,o){var i,n=[],r="";if(t)for(i=0;i<t.length;i+=1)r=a(t[i][this.get("valueKey",o)])?t[i][this.get("valueKey",o)]:t[i].toString(),s.call(this,"valid",o,[r,e])&&n.push(t[i]);return n}],preparse:function(t){return t},getValue:[function(t,e){return a(t[this.get("valueKey",e)])?t[this.get("valueKey",e)]:t.toString()}],getTitle:[function(t,e){return a(t[this.get("titleKey",e)])?t[this.get("titleKey",e)]:t.toString()}],render:[function(t,i,n,a){var r,l,c,u=s.call(this,"getValue",i,[t,i],P.getValue[0].call(this,t,i)),d=s.call(this,"getTitle",i,[t,i],P.getTitle[0].call(this,t,i)),f="",h="",g="",p="",v=0;if(this.highlight)if(this.accents){for(h=e(d).toLowerCase().replace(/[<>]+/g,""),f=e(a).toLowerCase().replace(/[<>]+/g,""),g=h.replace(new RegExp(o(f),"g"),"<"+f+">"),c=0;c<g.length;c+=1)r=d.charAt(v),l=g.charAt(c),"<"===l?p+="<b>":">"===l?p+="</b>":(v+=1,p+=r);d=p}else d=d.replace(new RegExp("("+o(a)+")","i"),"<b>$1</b>");return"<div "+(u==a?'class="active"':"")+' data-value="'+encodeURIComponent(u)+'">'+d+"</div>"}],appendMethod:"concat",source:[],afterSelected:function(){}},O={destroy:function(){return this.trigger("destroy.xdsoft")},update:function(){return this.trigger("updateHelperPosition.xdsoft")},options:function(e){return this.data("autocomplete_options")&&t.isPlainObject(e)&&this.data("autocomplete_options",t.extend(!0,this.data("autocomplete_options"),e)),this},setSource:function(e,o){if(this.data("autocomplete_options")&&(t.isPlainObject(e)||t.isFunction(e)||t.isArray(e))){var i=this.data("autocomplete_options"),n=this.data("xdsoft_autocomplete"),a=i.source;void 0===o||isNaN(o)?t.isFunction(e)?this.data("autocomplete_options").source=e:t.extend(!0,a,e):t.isPlainObject(e)||t.isArray(e)?a[o]=t.extend(!0,t.isArray(e)?[]:{},e):a[o]=e,f.call(i,this.val(),n,function(t){d.call(i,n,t)})}return this},getSource:function(t){if(this.data("autocomplete_options")){var e=this.data("autocomplete_options").source;return void 0!==t&&!isNaN(t)&&e[t]?e[t]:e}return null}},t.fn.autocomplete=function(e,o,i){return"string"===t.type(e)&&O[e]?O[e].call(this,o,i):this.each(function(){m(this,t.extend(!0,{},P,e))})}}(jQuery);
function searchSuccess(e,a,c){$("#search-results").html(e)}!function(e){e("#search").keyup(function(){e.ajax({type:"POST",url:"/search/",data:{search_text:e("#search").val(),csrfmiddlewaretoken:e("input[name=csrfmiddlewaretoken]").val()},success:searchSuccess,dataType:"html"})})}($);
function showOrHide(e,t){e=document.getElementById(e),t=document.getElementById(t),e.checked?t.style.display="block":t.style.display="none"}function _discount(e,t){if("{}"==JSON.stringify(t))return 1;for(var n=Object.keys(t),a=0,r=n.length;a<r;a++){var u=n[a].split("-");if(parseInt(u[0])<=e&&e<parseFloat(u[1]))return parseFloat(t[n[a]])}}function calculate(){var e=document.getElementById("variant_length").value,t=document.getElementById("quantity")&&document.getElementById("quantity").value,n=document.getElementById("result"),a=document.getElementById("price_per_itom"),r=document.getElementById("erw"),u=document.getElementById("variants")&&JSON.parse(document.getElementById("variants").value.replace(/'/g,'"')),o=JSON.parse(document.getElementById("discount_policy").value.replace(/'/g,'"')),l=document.getElementById("product_slug"),c=document.getElementById("result_itog"),d=0;if(0==e&&(d=Math.round(u[0].price*_discount(t,o)),n.innerHTML=d,a.value=d,d*=t,c.innerHTML=d,r.innerHTML=Math.round(.05*d),l.value=u[0].slug),e>1)for(var i=document.getElementById("id_0"),m=document.getElementById("id_1"),s=JSON.parse(i.value.replace(/'/g,'"')),p=JSON.parse(m.value.replace(/'/g,'"')),g=0,v=u.length;g<v;g++)u[g].attributes[i.name]==s.name&&u[g].attributes[m.name]==p.name&&(d=Math.round(u[g].price*_discount(t,o)),n.innerHTML=d,a.value=d,d*=t,c.innerHTML=d,r.innerHTML=Math.round(.05*d),l.value=u[g].slug);else for(var i=document.getElementById("id_0"),s=JSON.parse(i.value.replace(/'/g,'"')),g=0,v=u.length;g<v;g++)u[g].attributes[i.name]==s.name&&(d=Math.round(u[g].price*_discount(t,o)),n.innerHTML=d,a.value=d,d*=t,c.innerHTML=d,r.innerHTML=Math.round(.05*d),l.value=u[g].slug)}$(document).ready(function(){function e(){$(".basket-items").removeClass("hidden")}var t=$("#form-buying-products");t.on("submit",function(e){e.preventDefault(),$("#number").val();var n=$("#number").val(),a=$("#submit-btn"),r=a.data("products-id"),u=(a.data("products-name"),a.data("products-price"),{});u.product_id=r,u.nmb=n;var o=$('#form-buying-products [name="csrfmiddlewaretoken"]').val();u.csrfmiddlewaretoken=o;var l=t.attr("action");$.ajax({url:l,type:"POST",data:u,cache:!0,success:function(e){e.products_total_nmb&&($("#basket_total_nmb").text("("+e.products_total_nmb+")"),$(".basket-items ul").html(""),$.each(e.products,function(e,t){$(".basket-items ul").append("<li>"+t.name+", "+t.nmb+"pc. for "+t.price_per_item+"rub. </li>")}))},error:function(){console.log("error")}})}),$(".basket-container").mouseover(function(){e()}),$(".basket-container").mouseout(function(){e()}),$(document).on("click",".delete-item",function(e){e.preventDefault(),$(this).closest("li").remove()})});
function searchSuccess(t,e,i){$("#search-results").html(t)}function showOrHide(t,e){t=document.getElementById(t),e=document.getElementById(e),t.checked?e.style.display="block":e.style.display="none"}function _discount(t,e){if("{}"==JSON.stringify(e))return 1;for(var i=Object.keys(e),n=0,s=i.length;n<s;n++){var o=i[n].split("-");if(parseInt(o[0])<=t&&t<parseFloat(o[1]))return parseFloat(e[i[n]])}}function calculate(){var t=document.getElementById("variant_length").value,e=document.getElementById("quantity")&&document.getElementById("quantity").value,i=document.getElementById("result"),n=document.getElementById("price_per_itom"),s=document.getElementById("erw"),o=document.getElementById("variants")&&JSON.parse(document.getElementById("variants").value.replace(/'/g,'"')),a=JSON.parse(document.getElementById("discount_policy").value.replace(/'/g,'"')),r=document.getElementById("product_slug"),l=document.getElementById("result_itog"),h=0;if(0==t&&(h=Math.round(o[0].price*_discount(e,a)),i.innerHTML=h,n.value=h,h*=e,l.innerHTML=h,s.innerHTML=Math.round(.05*h),r.value=o[0].slug),t>1)for(var c=document.getElementById("id_0"),u=document.getElementById("id_1"),d=JSON.parse(c.value.replace(/'/g,'"')),p=JSON.parse(u.value.replace(/'/g,'"')),f=0,g=o.length;f<g;f++)o[f].attributes[c.name]==d.name&&o[f].attributes[u.name]==p.name&&(h=Math.round(o[f].price*_discount(e,a)),i.innerHTML=h,n.value=h,h*=e,l.innerHTML=h,s.innerHTML=Math.round(.05*h),r.value=o[f].slug);else for(c=document.getElementById("id_0"),d=JSON.parse(c.value.replace(/'/g,'"')),f=0,g=o.length;f<g;f++)o[f].attributes[c.name]==d.name&&(h=Math.round(o[f].price*_discount(e,a)),i.innerHTML=h,n.value=h,h*=e,l.innerHTML=h,s.innerHTML=Math.round(.05*h),r.value=o[f].slug)}function searchSuccess(t,e,i){$("#search-results").html(t)}function showOrHide(t,e){t=document.getElementById(t),e=document.getElementById(e),t.checked?e.style.display="block":e.style.display="none"}function _discount(t,e){if("{}"==JSON.stringify(e))return 1;for(var i=Object.keys(e),n=0,s=i.length;n<s;n++){var o=i[n].split("-");if(parseInt(o[0])<=t&&t<parseFloat(o[1]))return parseFloat(e[i[n]])}}function calculate(){var t=document.getElementById("variant_length").value,e=document.getElementById("quantity")&&document.getElementById("quantity").value,i=document.getElementById("result"),n=document.getElementById("price_per_itom"),s=document.getElementById("erw"),o=document.getElementById("variants")&&JSON.parse(document.getElementById("variants").value.replace(/'/g,'"')),a=JSON.parse(document.getElementById("discount_policy").value.replace(/'/g,'"')),r=document.getElementById("product_slug"),l=document.getElementById("result_itog"),h=0;if(0==t&&(h=Math.round(o[0].price*_discount(e,a)),i.innerHTML=h,n.value=h,h*=e,l.innerHTML=h,s.innerHTML=Math.round(.05*h),r.value=o[0].slug),t>1)for(var c=document.getElementById("id_0"),u=document.getElementById("id_1"),d=JSON.parse(c.value.replace(/'/g,'"')),p=JSON.parse(u.value.replace(/'/g,'"')),f=0,g=o.length;f<g;f++)o[f].attributes[c.name]==d.name&&o[f].attributes[u.name]==p.name&&(h=Math.round(o[f].price*_discount(e,a)),i.innerHTML=h,n.value=h,h*=e,l.innerHTML=h,s.innerHTML=Math.round(.05*h),r.value=o[f].slug);else for(c=document.getElementById("id_0"),d=JSON.parse(c.value.replace(/'/g,'"')),f=0,g=o.length;f<g;f++)o[f].attributes[c.name]==d.name&&(h=Math.round(o[f].price*_discount(e,a)),i.innerHTML=h,n.value=h,h*=e,l.innerHTML=h,s.innerHTML=Math.round(.05*h),r.value=o[f].slug)}function getParameterByName(t,e){e||(e=window.location.href),t=t.replace(/[\[\]]/g,"\\$&");var i=new RegExp("[?&]"+t+"(=([^&#]*)|&|#|$)").exec(e);return i?i[2]?decodeURIComponent(i[2].replace(/\+/g," ")):"":null}function onFacetChangeApplied(){var t=window.location.href.split("?")[0]+"?q="+getParameterByName("q");return $("input:checkbox.facet").each(function(){var e=this.checked?$(this).val():null,i=this.checked?$(this).attr("name"):null;null!==e&&(t+="&"+encodeURIComponent(i)+"="+encodeURIComponent(e))}),location.href=t,!0}function getQueryParams(){for(var t,e={},i=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),n=0;n<i.length;n++)e[(t=i[n].split("="))[1]]=t[0];return e}function getParameterByName(t,e){e||(e=window.location.href),t=t.replace(/[\[\]]/g,"\\$&");var i=new RegExp("[?&]"+t+"(=([^&#]*)|&|#|$)").exec(e);return i?i[2]?decodeURIComponent(i[2].replace(/\+/g," ")):"":null}function onFacetChangeApplied(){var t=window.location.href.split("?")[0]+"?q="+getParameterByName("q");return $("input:checkbox.facet").each(function(){var e=this.checked?$(this).val():null,i=this.checked?$(this).attr("name"):null;null!==e&&(t+="&"+encodeURIComponent(i)+"="+encodeURIComponent(e))}),location.href=t,!0}function getQueryParams(){for(var t,e={},i=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),n=0;n<i.length;n++)e[(t=i[n].split("="))[1]]=t[0];return e}if(function(t,e){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){"use strict";function i(t,e,i){var n,s=(e=e||Z).createElement("script");if(s.text=t,i)for(n in pt)i[n]&&(s[n]=i[n]);e.head.appendChild(s).parentNode.removeChild(s)}function n(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?ot[at.call(t)]||"object":typeof t}function s(t){var e=!!t&&"length"in t&&t.length,i=n(t);return!ut(t)&&!dt(t)&&("array"===i||0===e||"number"==typeof e&&e>0&&e-1 in t)}function o(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function a(t,e,i){return ut(e)?ft.grep(t,function(t,n){return!!e.call(t,n,t)!==i}):e.nodeType?ft.grep(t,function(t){return t===e!==i}):"string"!=typeof e?ft.grep(t,function(t){return st.call(e,t)>-1!==i}):ft.filter(e,t,i)}function r(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function l(t){return t}function h(t){throw t}function c(t,e,i,n){var s;try{t&&ut(s=t.promise)?s.call(t).done(e).fail(i):t&&ut(s=t.then)?s.call(t,e,i):e.apply(void 0,[t].slice(n))}catch(t){i.apply(void 0,[t])}}function u(){Z.removeEventListener("DOMContentLoaded",u),t.removeEventListener("load",u),ft.ready()}function d(t,e){return e.toUpperCase()}function p(t){return t.replace(Pt,"ms-").replace(Et,d)}function f(){this.expando=ft.expando+f.uid++}function g(t,e,i){var n;if(void 0===i&&1===t.nodeType)if(n="data-"+e.replace(Ht,"-$&").toLowerCase(),"string"==typeof(i=t.getAttribute(n))){try{i=function(t){return"true"===t||"false"!==t&&("null"===t?null:t===+t+""?+t:Nt.test(t)?JSON.parse(t):t)}(i)}catch(t){}Ot.set(t,e,i)}else i=void 0;return i}function m(t,e,i,n){var s,o,a=20,r=n?function(){return n.cur()}:function(){return ft.css(t,e,"")},l=r(),h=i&&i[3]||(ft.cssNumber[e]?"":"px"),c=(ft.cssNumber[e]||"px"!==h&&+l)&&Lt.exec(ft.css(t,e));if(c&&c[3]!==h){for(l/=2,h=h||c[3],c=+l||1;a--;)ft.style(t,e,c+h),(1-o)*(1-(o=r()/l||.5))<=0&&(a=0),c/=o;c*=2,ft.style(t,e,c+h),i=i||[]}return i&&(c=+c||+l||0,s=i[1]?c+(i[1]+1)*i[2]:+i[2],n&&(n.unit=h,n.start=c,n.end=s)),s}function v(t){var e,i=t.ownerDocument,n=t.nodeName,s=jt[n];return s||(e=i.body.appendChild(i.createElement(n)),s=ft.css(e,"display"),e.parentNode.removeChild(e),"none"===s&&(s="block"),jt[n]=s,s)}function b(t,e){for(var i,n,s=[],o=0,a=t.length;o<a;o++)(n=t[o]).style&&(i=n.style.display,e?("none"===i&&(s[o]=At.get(n,"display")||null,s[o]||(n.style.display="")),""===n.style.display&&Rt(n)&&(s[o]=v(n))):"none"!==i&&(s[o]="none",At.set(n,"display",i)));for(o=0;o<a;o++)null!=s[o]&&(t[o].style.display=s[o]);return t}function _(t,e){var i;return i=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&o(t,e)?ft.merge([t],i):i}function y(t,e){for(var i=0,n=t.length;i<n;i++)At.set(t[i],"globalEval",!e||At.get(e[i],"globalEval"))}function w(t,e,i,s,o){for(var a,r,l,h,c,u,d=e.createDocumentFragment(),p=[],f=0,g=t.length;f<g;f++)if((a=t[f])||0===a)if("object"===n(a))ft.merge(p,a.nodeType?[a]:a);else if(Yt.test(a)){for(r=r||d.appendChild(e.createElement("div")),l=(Bt.exec(a)||["",""])[1].toLowerCase(),h=Ut[l]||Ut._default,r.innerHTML=h[1]+ft.htmlPrefilter(a)+h[2],u=h[0];u--;)r=r.lastChild;ft.merge(p,r.childNodes),(r=d.firstChild).textContent=""}else p.push(e.createTextNode(a));for(d.textContent="",f=0;a=p[f++];)if(s&&ft.inArray(a,s)>-1)o&&o.push(a);else if(c=ft.contains(a.ownerDocument,a),r=_(d.appendChild(a),"script"),c&&y(r),i)for(u=0;a=r[u++];)qt.test(a.type||"")&&i.push(a);return d}function x(){return!0}function C(){return!1}function k(){try{return Z.activeElement}catch(t){}}function T(t,e,i,n,s,o){var a,r;if("object"==typeof e){for(r in"string"!=typeof i&&(n=n||i,i=void 0),e)T(t,r,i,n,e[r],o);return t}if(null==n&&null==s?(s=i,n=i=void 0):null==s&&("string"==typeof i?(s=n,n=void 0):(s=n,n=i,i=void 0)),!1===s)s=C;else if(!s)return t;return 1===o&&(a=s,(s=function(t){return ft().off(t),a.apply(this,arguments)}).guid=a.guid||(a.guid=ft.guid++)),t.each(function(){ft.event.add(this,e,s,n,i)})}function D(t,e){return o(t,"table")&&o(11!==e.nodeType?e:e.firstChild,"tr")&&ft(t).children("tbody")[0]||t}function S(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function I(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function P(t,e){var i,n,s,o,a,r,l,h;if(1===e.nodeType){if(At.hasData(t)&&(o=At.access(t),a=At.set(e,o),h=o.events))for(s in delete a.handle,a.events={},h)for(i=0,n=h[s].length;i<n;i++)ft.event.add(e,s,h[s][i]);Ot.hasData(t)&&(r=Ot.access(t),l=ft.extend({},r),Ot.set(e,l))}}function E(t,e){var i=e.nodeName.toLowerCase();"input"===i&&Ft.test(t.type)?e.checked=t.checked:"input"!==i&&"textarea"!==i||(e.defaultValue=t.defaultValue)}function M(t,e,n,s){e=it.apply([],e);var o,a,r,l,h,c,u=0,d=t.length,p=d-1,f=e[0],g=ut(f);if(g||d>1&&"string"==typeof f&&!ct.checkClone&&Zt.test(f))return t.each(function(i){var o=t.eq(i);g&&(e[0]=f.call(this,i,o.html())),M(o,e,n,s)});if(d&&(a=(o=w(e,t[0].ownerDocument,!1,t,s)).firstChild,1===o.childNodes.length&&(o=a),a||s)){for(l=(r=ft.map(_(o,"script"),S)).length;u<d;u++)h=o,u!==p&&(h=ft.clone(h,!0,!0),l&&ft.merge(r,_(h,"script"))),n.call(t[u],h,u);if(l)for(c=r[r.length-1].ownerDocument,ft.map(r,I),u=0;u<l;u++)h=r[u],qt.test(h.type||"")&&!At.access(h,"globalEval")&&ft.contains(c,h)&&(h.src&&"module"!==(h.type||"").toLowerCase()?ft._evalUrl&&ft._evalUrl(h.src):i(h.textContent.replace(te,""),c,h))}return t}function A(t,e,i){for(var n,s=e?ft.filter(e,t):t,o=0;null!=(n=s[o]);o++)i||1!==n.nodeType||ft.cleanData(_(n)),n.parentNode&&(i&&ft.contains(n.ownerDocument,n)&&y(_(n,"script")),n.parentNode.removeChild(n));return t}function O(t,e,i){var n,s,o,a,r=t.style;return(i=i||ie(t))&&(""!==(a=i.getPropertyValue(e)||i[e])||ft.contains(t.ownerDocument,t)||(a=ft.style(t,e)),!ct.pixelBoxStyles()&&ee.test(a)&&ne.test(e)&&(n=r.width,s=r.minWidth,o=r.maxWidth,r.minWidth=r.maxWidth=r.width=a,a=i.width,r.width=n,r.minWidth=s,r.maxWidth=o)),void 0!==a?a+"":a}function N(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}function H(t){var e=ft.cssProps[t];return e||(e=ft.cssProps[t]=function(t){if(t in he)return t;for(var e=t[0].toUpperCase()+t.slice(1),i=le.length;i--;)if((t=le[i]+e)in he)return t}(t)||t),e}function z(t,e,i){var n=Lt.exec(e);return n?Math.max(0,n[2]-(i||0))+(n[3]||"px"):e}function L(t,e,i,n,s,o){var a="width"===e?1:0,r=0,l=0;if(i===(n?"border":"content"))return 0;for(;a<4;a+=2)"margin"===i&&(l+=ft.css(t,i+Wt[a],!0,s)),n?("content"===i&&(l-=ft.css(t,"padding"+Wt[a],!0,s)),"margin"!==i&&(l-=ft.css(t,"border"+Wt[a]+"Width",!0,s))):(l+=ft.css(t,"padding"+Wt[a],!0,s),"padding"!==i?l+=ft.css(t,"border"+Wt[a]+"Width",!0,s):r+=ft.css(t,"border"+Wt[a]+"Width",!0,s));return!n&&o>=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-o-l-r-.5))),l}function W(t,e,i){var n=ie(t),s=O(t,e,n),o="border-box"===ft.css(t,"boxSizing",!1,n),a=o;if(ee.test(s)){if(!i)return s;s="auto"}return a=a&&(ct.boxSizingReliable()||s===t.style[e]),("auto"===s||!parseFloat(s)&&"inline"===ft.css(t,"display",!1,n))&&(s=t["offset"+e[0].toUpperCase()+e.slice(1)],a=!0),(s=parseFloat(s)||0)+L(t,e,i||(o?"border":"content"),a,n,s)+"px"}function R(t,e,i,n,s){return new R.prototype.init(t,e,i,n,s)}function $(){ue&&(!1===Z.hidden&&t.requestAnimationFrame?t.requestAnimationFrame($):t.setTimeout($,ft.fx.interval),ft.fx.tick())}function j(){return t.setTimeout(function(){ce=void 0}),ce=Date.now()}function F(t,e){var i,n=0,s={height:t};for(e=e?1:0;n<4;n+=2-e)s["margin"+(i=Wt[n])]=s["padding"+i]=t;return e&&(s.opacity=s.width=t),s}function B(t,e,i){for(var n,s=(q.tweeners[e]||[]).concat(q.tweeners["*"]),o=0,a=s.length;o<a;o++)if(n=s[o].call(i,e,t))return n}function q(t,e,i){var n,s,o=0,a=q.prefilters.length,r=ft.Deferred().always(function(){delete l.elem}),l=function(){if(s)return!1;for(var e=ce||j(),i=Math.max(0,h.startTime+h.duration-e),n=1-(i/h.duration||0),o=0,a=h.tweens.length;o<a;o++)h.tweens[o].run(n);return r.notifyWith(t,[h,n,i]),n<1&&a?i:(a||r.notifyWith(t,[h,1,0]),r.resolveWith(t,[h]),!1)},h=r.promise({elem:t,props:ft.extend({},e),opts:ft.extend(!0,{specialEasing:{},easing:ft.easing._default},i),originalProperties:e,originalOptions:i,startTime:ce||j(),duration:i.duration,tweens:[],createTween:function(e,i){var n=ft.Tween(t,h.opts,e,i,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(n),n},stop:function(e){var i=0,n=e?h.tweens.length:0;if(s)return this;for(s=!0;i<n;i++)h.tweens[i].run(1);return e?(r.notifyWith(t,[h,1,0]),r.resolveWith(t,[h,e])):r.rejectWith(t,[h,e]),this}}),c=h.props;for((function(t,e){var i,n,s,o,a;for(i in t)if(s=e[n=p(i)],o=t[i],Array.isArray(o)&&(s=o[1],o=t[i]=o[0]),i!==n&&(t[n]=o,delete t[i]),(a=ft.cssHooks[n])&&"expand"in a)for(i in o=a.expand(o),delete t[n],o)i in t||(t[i]=o[i],e[i]=s);else e[n]=s}(c,h.opts.specialEasing));o<a;o++)if(n=q.prefilters[o].call(h,t,c,h.opts))return ut(n.stop)&&(ft._queueHooks(h.elem,h.opts.queue).stop=n.stop.bind(n)),n;return ft.map(c,B,h),ut(h.opts.start)&&h.opts.start.call(t,h),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always),ft.fx.timer(ft.extend(l,{elem:t,anim:h,queue:h.opts.queue})),h}function U(t){return(t.match(Tt)||[]).join(" ")}function Y(t){return t.getAttribute&&t.getAttribute("class")||""}function V(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(Tt)||[]}function K(t,e,i,s){var o;if(Array.isArray(e))ft.each(e,function(e,n){i||ke.test(t)?s(t,n):K(t+"["+("object"==typeof n&&null!=n?e:"")+"]",n,i,s)});else if(i||"object"!==n(e))s(t,e);else for(o in e)K(t+"["+o+"]",e[o],i,s)}function X(t){return function(e,i){"string"!=typeof e&&(i=e,e="*");var n,s=0,o=e.toLowerCase().match(Tt)||[];if(ut(i))for(;n=o[s++];)"+"===n[0]?(n=n.slice(1)||"*",(t[n]=t[n]||[]).unshift(i)):(t[n]=t[n]||[]).push(i)}}function G(t,e,i,n){function s(r){var l;return o[r]=!0,ft.each(t[r]||[],function(t,r){var h=r(e,i,n);return"string"!=typeof h||a||o[h]?a?!(l=h):void 0:(e.dataTypes.unshift(h),s(h),!1)}),l}var o={},a=t===He;return s(e.dataTypes[0])||!o["*"]&&s("*")}function Q(t,e){var i,n,s=ft.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((s[i]?t:n||(n={}))[i]=e[i]);return n&&ft.extend(!0,t,n),t}var J=[],Z=t.document,tt=Object.getPrototypeOf,et=J.slice,it=J.concat,nt=J.push,st=J.indexOf,ot={},at=ot.toString,rt=ot.hasOwnProperty,lt=rt.toString,ht=lt.call(Object),ct={},ut=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType},dt=function(t){return null!=t&&t===t.window},pt={type:!0,src:!0,noModule:!0},ft=function(t,e){return new ft.fn.init(t,e)},gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;ft.fn=ft.prototype={jquery:"3.3.1",constructor:ft,length:0,toArray:function(){return et.call(this)},get:function(t){return null==t?et.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=ft.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return ft.each(this,t)},map:function(t){return this.pushStack(ft.map(this,function(e,i){return t.call(e,i,e)}))},slice:function(){return this.pushStack(et.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,i=+t+(t<0?e:0);return this.pushStack(i>=0&&i<e?[this[i]]:[])},end:function(){return this.prevObject||this.constructor()},push:nt,sort:J.sort,splice:J.splice},ft.extend=ft.fn.extend=function(){var t,e,i,n,s,o,a=arguments[0]||{},r=1,l=arguments.length,h=!1;for("boolean"==typeof a&&(h=a,a=arguments[r]||{},r++),"object"==typeof a||ut(a)||(a={}),r===l&&(a=this,r--);r<l;r++)if(null!=(t=arguments[r]))for(e in t)i=a[e],a!==(n=t[e])&&(h&&n&&(ft.isPlainObject(n)||(s=Array.isArray(n)))?(s?(s=!1,o=i&&Array.isArray(i)?i:[]):o=i&&ft.isPlainObject(i)?i:{},a[e]=ft.extend(h,o,n)):void 0!==n&&(a[e]=n));return a},ft.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){var e,i;return!(!t||"[object Object]"!==at.call(t)||(e=tt(t))&&("function"!=typeof(i=rt.call(e,"constructor")&&e.constructor)||lt.call(i)!==ht))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},globalEval:function(t){i(t)},each:function(t,e){var i,n=0;if(s(t))for(i=t.length;n<i&&!1!==e.call(t[n],n,t[n]);n++);else for(n in t)if(!1===e.call(t[n],n,t[n]))break;return t},trim:function(t){return null==t?"":(t+"").replace(gt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(s(Object(t))?ft.merge(i,"string"==typeof t?[t]:t):nt.call(i,t)),i},inArray:function(t,e,i){return null==e?-1:st.call(e,t,i)},merge:function(t,e){for(var i=+e.length,n=0,s=t.length;n<i;n++)t[s++]=e[n];return t.length=s,t},grep:function(t,e,i){for(var n=[],s=0,o=t.length,a=!i;s<o;s++)!e(t[s],s)!==a&&n.push(t[s]);return n},map:function(t,e,i){var n,o,a=0,r=[];if(s(t))for(n=t.length;a<n;a++)null!=(o=e(t[a],a,i))&&r.push(o);else for(a in t)null!=(o=e(t[a],a,i))&&r.push(o);return it.apply([],r)},guid:1,support:ct}),"function"==typeof Symbol&&(ft.fn[Symbol.iterator]=J[Symbol.iterator]),ft.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){ot["[object "+e+"]"]=e.toLowerCase()});var mt=function(t){function e(t,e,i,n){var s,o,a,r,l,c,d,p=e&&e.ownerDocument,f=e?e.nodeType:9;if(i=i||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return i;if(!n&&((e?e.ownerDocument||e:R)!==M&&E(e),e=e||M,O)){if(11!==f&&(l=gt.exec(t)))if(s=l[1]){if(9===f){if(!(a=e.getElementById(s)))return i;if(a.id===s)return i.push(a),i}else if(p&&(a=p.getElementById(s))&&L(e,a)&&a.id===s)return i.push(a),i}else{if(l[2])return G.apply(i,e.getElementsByTagName(t)),i;if((s=l[3])&&y.getElementsByClassName&&e.getElementsByClassName)return G.apply(i,e.getElementsByClassName(s)),i}if(y.qsa&&!q[t+" "]&&(!N||!N.test(t))){if(1!==f)p=e,d=t;else if("object"!==e.nodeName.toLowerCase()){for((r=e.getAttribute("id"))?r=r.replace(_t,yt):e.setAttribute("id",r=W),o=(c=k(t)).length;o--;)c[o]="#"+r+" "+u(c[o]);d=c.join(","),p=mt.test(t)&&h(e.parentNode)||e}if(d)try{return G.apply(i,p.querySelectorAll(d)),i}catch(t){}finally{r===W&&e.removeAttribute("id")}}}return D(t.replace(ot,"$1"),e,i,n)}function i(){var t=[];return function e(i,n){return t.push(i+" ")>w.cacheLength&&delete e[t.shift()],e[i+" "]=n}}function n(t){return t[W]=!0,t}function s(t){var e=M.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function o(t,e){for(var i=t.split("|"),n=i.length;n--;)w.attrHandle[i[n]]=e}function a(t,e){var i=e&&t,n=i&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function r(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&xt(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function l(t){return n(function(e){return e=+e,n(function(i,n){for(var s,o=t([],i.length,e),a=o.length;a--;)i[s=o[a]]&&(i[s]=!(n[s]=i[s]))})})}function h(t){return t&&void 0!==t.getElementsByTagName&&t}function c(){}function u(t){for(var e=0,i=t.length,n="";e<i;e++)n+=t[e].value;return n}function d(t,e,i){var n=e.dir,s=e.next,o=s||n,a=i&&"parentNode"===o,r=j++;return e.first?function(e,i,s){for(;e=e[n];)if(1===e.nodeType||a)return t(e,i,s);return!1}:function(e,i,l){var h,c,u,d=[$,r];if(l){for(;e=e[n];)if((1===e.nodeType||a)&&t(e,i,l))return!0}else for(;e=e[n];)if(1===e.nodeType||a)if(c=(u=e[W]||(e[W]={}))[e.uniqueID]||(u[e.uniqueID]={}),s&&s===e.nodeName.toLowerCase())e=e[n]||e;else{if((h=c[o])&&h[0]===$&&h[1]===r)return d[2]=h[2];if(c[o]=d,d[2]=t(e,i,l))return!0}return!1}}function p(t){return t.length>1?function(e,i,n){for(var s=t.length;s--;)if(!t[s](e,i,n))return!1;return!0}:t[0]}function f(t,i,n){for(var s=0,o=i.length;s<o;s++)e(t,i[s],n);return n}function g(t,e,i,n,s){for(var o,a=[],r=0,l=t.length,h=null!=e;r<l;r++)(o=t[r])&&(i&&!i(o,n,s)||(a.push(o),h&&e.push(r)));return a}function m(t,e,i,s,o,a){return s&&!s[W]&&(s=m(s)),o&&!o[W]&&(o=m(o,a)),n(function(n,a,r,l){var h,c,u,d=[],p=[],m=a.length,v=n||f(e||"*",r.nodeType?[r]:r,[]),b=!t||!n&&e?v:g(v,d,t,r,l),_=i?o||(n?t:m||s)?[]:a:b;if(i&&i(b,_,r,l),s)for(h=g(_,p),s(h,[],r,l),c=h.length;c--;)(u=h[c])&&(_[p[c]]=!(b[p[c]]=u));if(n){if(o||t){if(o){for(h=[],c=_.length;c--;)(u=_[c])&&h.push(b[c]=u);o(null,_=[],h,l)}for(c=_.length;c--;)(u=_[c])&&(h=o?J(n,u):d[c])>-1&&(n[h]=!(a[h]=u))}}else _=g(_===a?_.splice(m,_.length):_),o?o(null,a,_,l):G.apply(a,_)})}function v(t){for(var e,i,n,s=t.length,o=w.relative[t[0].type],a=o||w.relative[" "],r=o?1:0,l=d(function(t){return t===e},a,!0),h=d(function(t){return J(e,t)>-1},a,!0),c=[function(t,i,n){var s=!o&&(n||i!==S)||((e=i).nodeType?l(t,i,n):h(t,i,n));return e=null,s}];r<s;r++)if(i=w.relative[t[r].type])c=[d(p(c),i)];else{if((i=w.filter[t[r].type].apply(null,t[r].matches))[W]){for(n=++r;n<s&&!w.relative[t[n].type];n++);return m(r>1&&p(c),r>1&&u(t.slice(0,r-1).concat({value:" "===t[r-2].type?"*":""})).replace(ot,"$1"),i,r<n&&v(t.slice(r,n)),n<s&&v(t=t.slice(n)),n<s&&u(t))}c.push(i)}return p(c)}function b(t,i){var s=i.length>0,o=t.length>0,a=function(n,a,r,l,h){var c,u,d,p=0,f="0",m=n&&[],v=[],b=S,_=n||o&&w.find.TAG("*",h),y=$+=null==b?1:Math.random()||.1,x=_.length;for(h&&(S=a===M||a||h);f!==x&&null!=(c=_[f]);f++){if(o&&c){for(u=0,a||c.ownerDocument===M||(E(c),r=!O);d=t[u++];)if(d(c,a||M,r)){l.push(c);break}h&&($=y)}s&&((c=!d&&c)&&p--,n&&m.push(c))}if(p+=f,s&&f!==p){for(u=0;d=i[u++];)d(m,v,a,r);if(n){if(p>0)for(;f--;)m[f]||v[f]||(v[f]=K.call(l));v=g(v)}G.apply(l,v),h&&!n&&v.length>0&&p+i.length>1&&e.uniqueSort(l)}return h&&($=y,S=b),m};return s?n(a):a}var _,y,w,x,C,k,T,D,S,I,P,E,M,A,O,N,H,z,L,W="sizzle"+1*new Date,R=t.document,$=0,j=0,F=i(),B=i(),q=i(),U=function(t,e){return t===e&&(P=!0),0},Y={}.hasOwnProperty,V=[],K=V.pop,X=V.push,G=V.push,Q=V.slice,J=function(t,e){for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i;return-1},Z="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",tt="[\\x20\\t\\r\\n\\f]",et="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",it="\\["+tt+"*("+et+")(?:"+tt+"*([*^$|!~]?=)"+tt+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+et+"))|)"+tt+"*\\]",nt=":("+et+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+it+")*)|.*)\\)|)",st=new RegExp(tt+"+","g"),ot=new RegExp("^"+tt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+tt+"+$","g"),at=new RegExp("^"+tt+"*,"+tt+"*"),rt=new RegExp("^"+tt+"*([>+~]|"+tt+")"+tt+"*"),lt=new RegExp("="+tt+"*([^\\]'\"]*?)"+tt+"*\\]","g"),ht=new RegExp(nt),ct=new RegExp("^"+et+"$"),ut={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),TAG:new RegExp("^("+et+"|[*])"),ATTR:new RegExp("^"+it),PSEUDO:new RegExp("^"+nt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,pt=/^h\d$/i,ft=/^[^{]+\{\s*\[native \w/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/[+~]/,vt=new RegExp("\\\\([\\da-f]{1,6}"+tt+"?|("+tt+")|.)","ig"),bt=function(t,e,i){var n="0x"+e-65536;return n!=n||i?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},_t=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,yt=function(t,e){return e?"\0"===t?"<EFBFBD>":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},wt=function(){E()},xt=d(function(t){return!0===t.disabled&&("form"in t||"label"in t)},{dir:"parentNode",next:"legend"});try{G.apply(V=Q.call(R.childNodes),R.childNodes),V[R.childNodes.length].nodeType}catch(t){G={apply:V.length?function(t,e){X.apply(t,Q.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}for(_ in y=e.support={},C=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},E=e.setDocument=function(t){var e,i,n=t?t.ownerDocument||t:R;return n!==M&&9===n.nodeType&&n.documentElement?(A=(M=n).documentElement,O=!C(M),R!==M&&(i=M.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",wt,!1):i.attachEvent&&i.attachEvent("onunload",wt)),y.attributes=s(function(t){return t.className="i",!t.getAttribute("className")}),y.getElementsByTagName=s(function(t){return t.appendChild(M.createComment("")),!t.getElementsByTagName("*").length}),y.getElementsByClassName=ft.test(M.getElementsByClassName),y.getById=s(function(t){return A.appendChild(t).id=W,!M.getElementsByName||!M.getElementsByName(W).length}),y.getById?(w.filter.ID=function(t){var e=t.replace(vt,bt);return function(t){return t.getAttribute("id")===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&O){var i=e.getElementById(t);return i?[i]:[]}}):(w.filter.ID=function(t){var e=t.replace(vt,bt);return function(t){var i=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return i&&i.value===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&O){var i,n,s,o=e.getElementById(t);if(o){if((i=o.getAttributeNode("id"))&&i.value===t)return[o];for(s=e.getElementsByName(t),n=0;o=s[n++];)if((i=o.getAttributeNode("id"))&&i.value===t)return[o]}return[]}}),w.find.TAG=y.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):y.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],s=0,o=e.getElementsByTagName(t);if("*"===t){for(;i=o[s++];)1===i.nodeType&&n.push(i);return n}return o},w.find.CLASS=y.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&O)return e.getElementsByClassName(t)},H=[],N=[],(y.qsa=ft.test(M.querySelectorAll))&&(s(function(t){A.appendChild(t).innerHTML="<a id='"+W+"'></a><select id='"+W+"-\r\\' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&N.push("[*^$]="+tt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||N.push("\\["+tt+"*(?:value|"+Z+")"),t.querySelectorAll("[id~="+W+"-]").length||N.push("~="),t.querySelectorAll(":checked").length||N.push(":checked"),t.querySelectorAll("a#"+W+"+*").length||N.push(".#.+[+~]")}),s(function(t){t.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var e=M.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&N.push("name"+tt+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&N.push(":enabled",":disabled"),A.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&N.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),N.push(",.*:")})),(y.matchesSelector=ft.test(z=A.matches||A.webkitMatchesSelector||A.mozMatchesSelector||A.oMatchesSelector||A.msMatchesSelector))&&s(function(t){y.disconnectedMatch=z.call(t,"*"),z.call(t,"[s!='']:x"),H.push("!=",nt)}),N=N.length&&new RegExp(N.join("|")),H=H.length&&new RegExp(H.join("|")),e=ft.test(A.compareDocumentPosition),L=e||ft.test(A.contains)?function(t,e){var i=9===t.nodeType?t.documentElement:t,n=e&&e.parentNode;return t===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):t.compareDocumentPosition&&16&t.compareDocumentPosition(n)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},U=e?function(t,e){if(t===e)return P=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(1&(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!y.sortDetached&&e.compareDocumentPosition(t)===i?t===M||t.ownerDocument===R&&L(R,t)?-1:e===M||e.ownerDocument===R&&L(R,e)?1:I?J(I,t)-J(I,e):0:4&i?-1:1)}:function(t,e){if(t===e)return P=!0,0;var i,n=0,s=t.parentNode,o=e.parentNode,r=[t],l=[e];if(!s||!o)return t===M?-1:e===M?1:s?-1:o?1:I?J(I,t)-J(I,e):0;if(s===o)return a(t,e);for(i=t;i=i.parentNode;)r.unshift(i);for(i=e;i=i.parentNode;)l.unshift(i);for(;r[n]===l[n];)n++;return n?a(r[n],l[n]):r[n]===R?-1:l[n]===R?1:0},M):M},e.matches=function(t,i){return e(t,null,null,i)},e.matchesSelector=function(t,i){if((t.ownerDocument||t)!==M&&E(t),i=i.replace(lt,"='$1']"),y.matchesSelector&&O&&!q[i+" "]&&(!H||!H.test(i))&&(!N||!N.test(i)))try{var n=z.call(t,i);if(n||y.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){}return e(i,M,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==M&&E(t),L(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==M&&E(t);var i=w.attrHandle[e.toLowerCase()],n=i&&Y.call(w.attrHandle,e.toLowerCase())?i(t,e,!O):void 0;return void 0!==n?n:y.attributes||!O?t.getAttribute(e):(n=t.getAttributeNode(e))&&n.specified?n.value:null},e.escape=function(t){return(t+"").replace(_t,yt)},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,i=[],n=0,s=0;if(P=!y.detectDuplicates,I=!y.sortStable&&t.slice(0),t.sort(U),P){for(;e=t[s++];)e===t[s]&&(n=i.push(s));for(;n--;)t.splice(i[n],1)}return I=null,t},x=e.getText=function(t){var e,i="",n=0,s=t.nodeType;if(s){if(1===s||9===s||11===s){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=x(t)}else if(3===s||4===s)return t.nodeValue}else for(;e=t[n++];)i+=x(e);return i},(w=e.selectors={cacheLength:50,createPseudo:n,match:ut,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(vt,bt),t[3]=(t[3]||t[4]||t[5]||"").replace(vt,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&&t[2];return ut.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&&ht.test(i)&&(e=k(i,!0))&&(e=i.indexOf(")",i.length-e)-i.length)&&(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(vt,bt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=F[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&F(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,i,n){return function(s){var o=e.attr(s,t);return null==o?"!="===i:!i||(o+="","="===i?o===n:"!="===i?o!==n:"^="===i?n&&0===o.indexOf(n):"*="===i?n&&o.indexOf(n)>-1:"$="===i?n&&o.slice(-n.length)===n:"~="===i?(" "+o.replace(st," ")+" ").indexOf(n)>-1:"|="===i&&(o===n||o.slice(0,n.length+1)===n+"-"))}},
CHILD:function(t,e,i,n,s){var o="nth"!==t.slice(0,3),a="last"!==t.slice(-4),r="of-type"===e;return 1===n&&0===s?function(t){return!!t.parentNode}:function(e,i,l){var h,c,u,d,p,f,g=o!==a?"nextSibling":"previousSibling",m=e.parentNode,v=r&&e.nodeName.toLowerCase(),b=!l&&!r,_=!1;if(m){if(o){for(;g;){for(d=e;d=d[g];)if(r?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;f=g="only"===t&&!f&&"nextSibling"}return!0}if(f=[a?m.firstChild:m.lastChild],a&&b){for(_=(p=(h=(c=(u=(d=m)[W]||(d[W]={}))[d.uniqueID]||(u[d.uniqueID]={}))[t]||[])[0]===$&&h[1])&&h[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(_=p=0)||f.pop();)if(1===d.nodeType&&++_&&d===e){c[t]=[$,p,_];break}}else if(b&&(_=p=(h=(c=(u=(d=e)[W]||(d[W]={}))[d.uniqueID]||(u[d.uniqueID]={}))[t]||[])[0]===$&&h[1]),!1===_)for(;(d=++p&&d&&d[g]||(_=p=0)||f.pop())&&((r?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++_||(b&&((c=(u=d[W]||(d[W]={}))[d.uniqueID]||(u[d.uniqueID]={}))[t]=[$,_]),d!==e)););return(_-=s)===n||_%n==0&&_/n>=0}}},PSEUDO:function(t,i){var s,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[W]?o(i):o.length>1?(s=[t,t,"",i],w.setFilters.hasOwnProperty(t.toLowerCase())?n(function(t,e){for(var n,s=o(t,i),a=s.length;a--;)t[n=J(t,s[a])]=!(e[n]=s[a])}):function(t){return o(t,0,s)}):o}},pseudos:{not:n(function(t){var e=[],i=[],s=T(t.replace(ot,"$1"));return s[W]?n(function(t,e,i,n){for(var o,a=s(t,null,n,[]),r=t.length;r--;)(o=a[r])&&(t[r]=!(e[r]=o))}):function(t,n,o){return e[0]=t,s(e,null,o,i),e[0]=null,!i.pop()}}),has:n(function(t){return function(i){return e(t,i).length>0}}),contains:n(function(t){return t=t.replace(vt,bt),function(e){return(e.textContent||e.innerText||x(e)).indexOf(t)>-1}}),lang:n(function(t){return ct.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(vt,bt).toLowerCase(),function(e){var i;do{if(i=O?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(i=i.toLowerCase())===t||0===i.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var i=t.location&&t.location.hash;return i&&i.slice(1)===e.id},root:function(t){return t===A},focus:function(t){return t===M.activeElement&&(!M.hasFocus||M.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:r(!1),disabled:r(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return pt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,i){return[i<0?i+e:i]}),even:l(function(t,e){for(var i=0;i<e;i+=2)t.push(i);return t}),odd:l(function(t,e){for(var i=1;i<e;i+=2)t.push(i);return t}),lt:l(function(t,e,i){for(var n=i<0?i+e:i;--n>=0;)t.push(n);return t}),gt:l(function(t,e,i){for(var n=i<0?i+e:i;++n<e;)t.push(n);return t})}}).pseudos.nth=w.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[_]=function(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}(_);for(_ in{submit:!0,reset:!0})w.pseudos[_]=function(t){return function(e){var i=e.nodeName.toLowerCase();return("input"===i||"button"===i)&&e.type===t}}(_);return c.prototype=w.filters=w.pseudos,w.setFilters=new c,k=e.tokenize=function(t,i){var n,s,o,a,r,l,h,c=B[t+" "];if(c)return i?0:c.slice(0);for(r=t,l=[],h=w.preFilter;r;){for(a in n&&!(s=at.exec(r))||(s&&(r=r.slice(s[0].length)||r),l.push(o=[])),n=!1,(s=rt.exec(r))&&(n=s.shift(),o.push({value:n,type:s[0].replace(ot," ")}),r=r.slice(n.length)),w.filter)!(s=ut[a].exec(r))||h[a]&&!(s=h[a](s))||(n=s.shift(),o.push({value:n,type:a,matches:s}),r=r.slice(n.length));if(!n)break}return i?r.length:r?e.error(t):B(t,l).slice(0)},T=e.compile=function(t,e){var i,n=[],s=[],o=q[t+" "];if(!o){for(e||(e=k(t)),i=e.length;i--;)(o=v(e[i]))[W]?n.push(o):s.push(o);(o=q(t,b(s,n))).selector=t}return o},D=e.select=function(t,e,i,n){var s,o,a,r,l,c="function"==typeof t&&t,d=!n&&k(t=c.selector||t);if(i=i||[],1===d.length){if((o=d[0]=d[0].slice(0)).length>2&&"ID"===(a=o[0]).type&&9===e.nodeType&&O&&w.relative[o[1].type]){if(!(e=(w.find.ID(a.matches[0].replace(vt,bt),e)||[])[0]))return i;c&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(s=ut.needsContext.test(t)?0:o.length;s--&&(a=o[s],!w.relative[r=a.type]);)if((l=w.find[r])&&(n=l(a.matches[0].replace(vt,bt),mt.test(o[0].type)&&h(e.parentNode)||e))){if(o.splice(s,1),!(t=n.length&&u(o)))return G.apply(i,n),i;break}}return(c||T(t,d))(n,e,!O,i,!e||mt.test(t)&&h(e.parentNode)||e),i},y.sortStable=W.split("").sort(U).join("")===W,y.detectDuplicates=!!P,E(),y.sortDetached=s(function(t){return 1&t.compareDocumentPosition(M.createElement("fieldset"))}),s(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||o("type|href|height|width",function(t,e,i){if(!i)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),y.attributes&&s(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||o("value",function(t,e,i){if(!i&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),s(function(t){return null==t.getAttribute("disabled")})||o(Z,function(t,e,i){var n;if(!i)return!0===t[e]?e.toLowerCase():(n=t.getAttributeNode(e))&&n.specified?n.value:null}),e}(t);ft.find=mt,ft.expr=mt.selectors,ft.expr[":"]=ft.expr.pseudos,ft.uniqueSort=ft.unique=mt.uniqueSort,ft.text=mt.getText,ft.isXMLDoc=mt.isXML,ft.contains=mt.contains,ft.escapeSelector=mt.escape;var vt=function(t,e,i){for(var n=[],s=void 0!==i;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(s&&ft(t).is(i))break;n.push(t)}return n},bt=function(t,e){for(var i=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&i.push(t);return i},_t=ft.expr.match.needsContext,yt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;ft.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?ft.find.matchesSelector(n,t)?[n]:[]:ft.find.matches(t,ft.grep(e,function(t){return 1===t.nodeType}))},ft.fn.extend({find:function(t){var e,i,n=this.length,s=this;if("string"!=typeof t)return this.pushStack(ft(t).filter(function(){for(e=0;e<n;e++)if(ft.contains(s[e],this))return!0}));for(i=this.pushStack([]),e=0;e<n;e++)ft.find(t,s[e],i);return n>1?ft.uniqueSort(i):i},filter:function(t){return this.pushStack(a(this,t||[],!1))},not:function(t){return this.pushStack(a(this,t||[],!0))},is:function(t){return!!a(this,"string"==typeof t&&_t.test(t)?ft(t):t||[],!1).length}});var wt,xt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ft.fn.init=function(t,e,i){var n,s;if(!t)return this;if(i=i||wt,"string"==typeof t){if(!(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:xt.exec(t))||!n[1]&&e)return!e||e.jquery?(e||i).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof ft?e[0]:e,ft.merge(this,ft.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:Z,!0)),yt.test(n[1])&&ft.isPlainObject(e))for(n in e)ut(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return(s=Z.getElementById(n[2]))&&(this[0]=s,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):ut(t)?void 0!==i.ready?i.ready(t):t(ft):ft.makeArray(t,this)}).prototype=ft.fn,wt=ft(Z);var Ct=/^(?:parents|prev(?:Until|All))/,kt={children:!0,contents:!0,next:!0,prev:!0};ft.fn.extend({has:function(t){var e=ft(t,this),i=e.length;return this.filter(function(){for(var t=0;t<i;t++)if(ft.contains(this,e[t]))return!0})},closest:function(t,e){var i,n=0,s=this.length,o=[],a="string"!=typeof t&&ft(t);if(!_t.test(t))for(;n<s;n++)for(i=this[n];i&&i!==e;i=i.parentNode)if(i.nodeType<11&&(a?a.index(i)>-1:1===i.nodeType&&ft.find.matchesSelector(i,t))){o.push(i);break}return this.pushStack(o.length>1?ft.uniqueSort(o):o)},index:function(t){return t?"string"==typeof t?st.call(ft(t),this[0]):st.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(ft.uniqueSort(ft.merge(this.get(),ft(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),ft.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return vt(t,"parentNode")},parentsUntil:function(t,e,i){return vt(t,"parentNode",i)},next:function(t){return r(t,"nextSibling")},prev:function(t){return r(t,"previousSibling")},nextAll:function(t){return vt(t,"nextSibling")},prevAll:function(t){return vt(t,"previousSibling")},nextUntil:function(t,e,i){return vt(t,"nextSibling",i)},prevUntil:function(t,e,i){return vt(t,"previousSibling",i)},siblings:function(t){return bt((t.parentNode||{}).firstChild,t)},children:function(t){return bt(t.firstChild)},contents:function(t){return o(t,"iframe")?t.contentDocument:(o(t,"template")&&(t=t.content||t),ft.merge([],t.childNodes))}},function(t,e){ft.fn[t]=function(i,n){var s=ft.map(this,e,i);return"Until"!==t.slice(-5)&&(n=i),n&&"string"==typeof n&&(s=ft.filter(n,s)),this.length>1&&(kt[t]||ft.uniqueSort(s),Ct.test(t)&&s.reverse()),this.pushStack(s)}});var Tt=/[^\x20\t\r\n\f]+/g;ft.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return ft.each(t.match(Tt)||[],function(t,i){e[i]=!0}),e}(t):ft.extend({},t);var e,i,s,o,a=[],r=[],l=-1,h=function(){for(o=o||t.once,s=e=!0;r.length;l=-1)for(i=r.shift();++l<a.length;)!1===a[l].apply(i[0],i[1])&&t.stopOnFalse&&(l=a.length,i=!1);t.memory||(i=!1),e=!1,o&&(a=i?[]:"")},c={add:function(){return a&&(i&&!e&&(l=a.length-1,r.push(i)),function e(i){ft.each(i,function(i,s){ut(s)?t.unique&&c.has(s)||a.push(s):s&&s.length&&"string"!==n(s)&&e(s)})}(arguments),i&&!e&&h()),this},remove:function(){return ft.each(arguments,function(t,e){for(var i;(i=ft.inArray(e,a,i))>-1;)a.splice(i,1),i<=l&&l--}),this},has:function(t){return t?ft.inArray(t,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=r=[],a=i="",this},disabled:function(){return!a},lock:function(){return o=r=[],i||e||(a=i=""),this},locked:function(){return!!o},fireWith:function(t,i){return o||(i=[t,(i=i||[]).slice?i.slice():i],r.push(i),e||h()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!s}};return c},ft.extend({Deferred:function(e){var i=[["notify","progress",ft.Callbacks("memory"),ft.Callbacks("memory"),2],["resolve","done",ft.Callbacks("once memory"),ft.Callbacks("once memory"),0,"resolved"],["reject","fail",ft.Callbacks("once memory"),ft.Callbacks("once memory"),1,"rejected"]],n="pending",s={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return s.then(null,t)},pipe:function(){var t=arguments;return ft.Deferred(function(e){ft.each(i,function(i,n){var s=ut(t[n[4]])&&t[n[4]];o[n[1]](function(){var t=s&&s.apply(this,arguments);t&&ut(t.promise)?t.promise().progress(e.notify).done(e.resolve).fail(e.reject):e[n[0]+"With"](this,s?[t]:arguments)})}),t=null}).promise()},then:function(e,n,s){function o(e,i,n,s){return function(){var r=this,c=arguments,u=function(){var t,u;if(!(e<a)){if((t=n.apply(r,c))===i.promise())throw new TypeError("Thenable self-resolution");u=t&&("object"==typeof t||"function"==typeof t)&&t.then,ut(u)?s?u.call(t,o(a,i,l,s),o(a,i,h,s)):(a++,u.call(t,o(a,i,l,s),o(a,i,h,s),o(a,i,l,i.notifyWith))):(n!==l&&(r=void 0,c=[t]),(s||i.resolveWith)(r,c))}},d=s?u:function(){try{u()}catch(t){ft.Deferred.exceptionHook&&ft.Deferred.exceptionHook(t,d.stackTrace),e+1>=a&&(n!==h&&(r=void 0,c=[t]),i.rejectWith(r,c))}};e?d():(ft.Deferred.getStackHook&&(d.stackTrace=ft.Deferred.getStackHook()),t.setTimeout(d))}}var a=0;return ft.Deferred(function(t){i[0][3].add(o(0,t,ut(s)?s:l,t.notifyWith)),i[1][3].add(o(0,t,ut(e)?e:l)),i[2][3].add(o(0,t,ut(n)?n:h))}).promise()},promise:function(t){return null!=t?ft.extend(t,s):s}},o={};return ft.each(i,function(t,e){var a=e[2],r=e[5];s[e[1]]=a.add,r&&a.add(function(){n=r},i[3-t][2].disable,i[3-t][3].disable,i[0][2].lock,i[0][3].lock),a.add(e[3].fire),o[e[0]]=function(){return o[e[0]+"With"](this===o?void 0:this,arguments),this},o[e[0]+"With"]=a.fireWith}),s.promise(o),e&&e.call(o,o),o},when:function(t){var e=arguments.length,i=e,n=Array(i),s=et.call(arguments),o=ft.Deferred(),a=function(t){return function(i){n[t]=this,s[t]=arguments.length>1?et.call(arguments):i,--e||o.resolveWith(n,s)}};if(e<=1&&(c(t,o.done(a(i)).resolve,o.reject,!e),"pending"===o.state()||ut(s[i]&&s[i].then)))return o.then();for(;i--;)c(s[i],a(i),o.reject);return o.promise()}});var Dt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ft.Deferred.exceptionHook=function(e,i){t.console&&t.console.warn&&e&&Dt.test(e.name)&&t.console.warn("jQuery.Deferred exception: "+e.message,e.stack,i)},ft.readyException=function(e){t.setTimeout(function(){throw e})};var St=ft.Deferred();ft.fn.ready=function(t){return St.then(t).catch(function(t){ft.readyException(t)}),this},ft.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--ft.readyWait:ft.isReady)||(ft.isReady=!0,!0!==t&&--ft.readyWait>0||St.resolveWith(Z,[ft]))}}),ft.ready.then=St.then,"complete"===Z.readyState||"loading"!==Z.readyState&&!Z.documentElement.doScroll?t.setTimeout(ft.ready):(Z.addEventListener("DOMContentLoaded",u),t.addEventListener("load",u));var It=function(t,e,i,s,o,a,r){var l=0,h=t.length,c=null==i;if("object"===n(i))for(l in o=!0,i)It(t,e,l,i[l],!0,a,r);else if(void 0!==s&&(o=!0,ut(s)||(r=!0),c&&(r?(e.call(t,s),e=null):(c=e,e=function(t,e,i){return c.call(ft(t),i)})),e))for(;l<h;l++)e(t[l],i,r?s:s.call(t[l],l,e(t[l],i)));return o?t:c?e.call(t):h?e(t[0],i):a},Pt=/^-ms-/,Et=/-([a-z])/g,Mt=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};f.uid=1,f.prototype={cache:function(t){var e=t[this.expando];return e||(e={},Mt(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,i){var n,s=this.cache(t);if("string"==typeof e)s[p(e)]=i;else for(n in e)s[p(n)]=e[n];return s},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][p(e)]},access:function(t,e,i){return void 0===e||e&&"string"==typeof e&&void 0===i?this.get(t,e):(this.set(t,e,i),void 0!==i?i:e)},remove:function(t,e){var i,n=t[this.expando];if(void 0!==n){if(void 0!==e){e=Array.isArray(e)?e.map(p):(e=p(e))in n?[e]:e.match(Tt)||[],i=e.length;for(;i--;)delete n[e[i]]}(void 0===e||ft.isEmptyObject(n))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!ft.isEmptyObject(e)}};var At=new f,Ot=new f,Nt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Ht=/[A-Z]/g;ft.extend({hasData:function(t){return Ot.hasData(t)||At.hasData(t)},data:function(t,e,i){return Ot.access(t,e,i)},removeData:function(t,e){Ot.remove(t,e)},_data:function(t,e,i){return At.access(t,e,i)},_removeData:function(t,e){At.remove(t,e)}}),ft.fn.extend({data:function(t,e){var i,n,s,o=this[0],a=o&&o.attributes;if(void 0===t){if(this.length&&(s=Ot.get(o),1===o.nodeType&&!At.get(o,"hasDataAttrs"))){for(i=a.length;i--;)a[i]&&0===(n=a[i].name).indexOf("data-")&&(n=p(n.slice(5)),g(o,n,s[n]));At.set(o,"hasDataAttrs",!0)}return s}return"object"==typeof t?this.each(function(){Ot.set(this,t)}):It(this,function(e){var i;if(o&&void 0===e){if(void 0!==(i=Ot.get(o,t)))return i;if(void 0!==(i=g(o,t)))return i}else this.each(function(){Ot.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){Ot.remove(this,t)})}}),ft.extend({queue:function(t,e,i){var n;if(t)return e=(e||"fx")+"queue",n=At.get(t,e),i&&(!n||Array.isArray(i)?n=At.access(t,e,ft.makeArray(i)):n.push(i)),n||[]},dequeue:function(t,e){e=e||"fx";var i=ft.queue(t,e),n=i.length,s=i.shift(),o=ft._queueHooks(t,e);"inprogress"===s&&(s=i.shift(),n--),s&&("fx"===e&&i.unshift("inprogress"),delete o.stop,s.call(t,function(){ft.dequeue(t,e)},o)),!n&&o&&o.empty.fire()},_queueHooks:function(t,e){var i=e+"queueHooks";return At.get(t,i)||At.access(t,i,{empty:ft.Callbacks("once memory").add(function(){At.remove(t,[e+"queue",i])})})}}),ft.fn.extend({queue:function(t,e){var i=2;return"string"!=typeof t&&(e=t,t="fx",i--),arguments.length<i?ft.queue(this[0],t):void 0===e?this:this.each(function(){var i=ft.queue(this,t,e);ft._queueHooks(this,t),"fx"===t&&"inprogress"!==i[0]&&ft.dequeue(this,t)})},dequeue:function(t){return this.each(function(){ft.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var i,n=1,s=ft.Deferred(),o=this,a=this.length,r=function(){--n||s.resolveWith(o,[o])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";a--;)(i=At.get(o[a],t+"queueHooks"))&&i.empty&&(n++,i.empty.add(r));return r(),s.promise(e)}});var zt=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Lt=new RegExp("^(?:([+-])=|)("+zt+")([a-z%]*)$","i"),Wt=["Top","Right","Bottom","Left"],Rt=function(t,e){return"none"===(t=e||t).style.display||""===t.style.display&&ft.contains(t.ownerDocument,t)&&"none"===ft.css(t,"display")},$t=function(t,e,i,n){var s,o,a={};for(o in e)a[o]=t.style[o],t.style[o]=e[o];for(o in s=i.apply(t,n||[]),e)t.style[o]=a[o];return s},jt={};ft.fn.extend({show:function(){return b(this,!0)},hide:function(){return b(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Rt(this)?ft(this).show():ft(this).hide()})}});var Ft=/^(?:checkbox|radio)$/i,Bt=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,qt=/^$|^module$|\/(?:java|ecma)script/i,Ut={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ut.optgroup=Ut.option,Ut.tbody=Ut.tfoot=Ut.colgroup=Ut.caption=Ut.thead,Ut.th=Ut.td;var Yt=/<|&#?\w+;/;!function(){var t=Z.createDocumentFragment().appendChild(Z.createElement("div")),e=Z.createElement("input");e.setAttribute("type","radio"),e.setAttribute("checked","checked"),e.setAttribute("name","t"),t.appendChild(e),ct.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",ct.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Vt=Z.documentElement,Kt=/^key/,Xt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Gt=/^([^.]*)(?:\.(.+)|)/;ft.event={global:{},add:function(t,e,i,n,s){var o,a,r,l,h,c,u,d,p,f,g,m=At.get(t);if(m)for(i.handler&&(i=(o=i).handler,s=o.selector),s&&ft.find.matchesSelector(Vt,s),i.guid||(i.guid=ft.guid++),(l=m.events)||(l=m.events={}),(a=m.handle)||(a=m.handle=function(e){return void 0!==ft&&ft.event.triggered!==e.type?ft.event.dispatch.apply(t,arguments):void 0}),h=(e=(e||"").match(Tt)||[""]).length;h--;)p=g=(r=Gt.exec(e[h])||[])[1],f=(r[2]||"").split(".").sort(),p&&(u=ft.event.special[p]||{},p=(s?u.delegateType:u.bindType)||p,u=ft.event.special[p]||{},c=ft.extend({type:p,origType:g,data:n,handler:i,guid:i.guid,selector:s,needsContext:s&&ft.expr.match.needsContext.test(s),namespace:f.join(".")},o),(d=l[p])||((d=l[p]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,n,f,a)||t.addEventListener&&t.addEventListener(p,a)),u.add&&(u.add.call(t,c),c.handler.guid||(c.handler.guid=i.guid)),s?d.splice(d.delegateCount++,0,c):d.push(c),ft.event.global[p]=!0)},remove:function(t,e,i,n,s){var o,a,r,l,h,c,u,d,p,f,g,m=At.hasData(t)&&At.get(t);if(m&&(l=m.events)){for(h=(e=(e||"").match(Tt)||[""]).length;h--;)if(p=g=(r=Gt.exec(e[h])||[])[1],f=(r[2]||"").split(".").sort(),p){for(u=ft.event.special[p]||{},d=l[p=(n?u.delegateType:u.bindType)||p]||[],r=r[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)c=d[o],!s&&g!==c.origType||i&&i.guid!==c.guid||r&&!r.test(c.namespace)||n&&n!==c.selector&&("**"!==n||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,u.remove&&u.remove.call(t,c));a&&!d.length&&(u.teardown&&!1!==u.teardown.call(t,f,m.handle)||ft.removeEvent(t,p,m.handle),delete l[p])}else for(p in l)ft.event.remove(t,p+e[h],i,n,!0);ft.isEmptyObject(l)&&At.remove(t,"handle events")}},dispatch:function(t){var e,i,n,s,o,a,r=ft.event.fix(t),l=new Array(arguments.length),h=(At.get(this,"events")||{})[r.type]||[],c=ft.event.special[r.type]||{};for(l[0]=r,e=1;e<arguments.length;e++)l[e]=arguments[e];if(r.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,r)){for(a=ft.event.handlers.call(this,r,h),e=0;(s=a[e++])&&!r.isPropagationStopped();)for(r.currentTarget=s.elem,i=0;(o=s.handlers[i++])&&!r.isImmediatePropagationStopped();)r.rnamespace&&!r.rnamespace.test(o.namespace)||(r.handleObj=o,r.data=o.data,void 0!==(n=((ft.event.special[o.origType]||{}).handle||o.handler).apply(s.elem,l))&&!1===(r.result=n)&&(r.preventDefault(),r.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,r),r.result}},handlers:function(t,e){var i,n,s,o,a,r=[],l=e.delegateCount,h=t.target;if(l&&h.nodeType&&!("click"===t.type&&t.button>=1))for(;h!==this;h=h.parentNode||this)if(1===h.nodeType&&("click"!==t.type||!0!==h.disabled)){for(o=[],a={},i=0;i<l;i++)void 0===a[s=(n=e[i]).selector+" "]&&(a[s]=n.needsContext?ft(s,this).index(h)>-1:ft.find(s,this,null,[h]).length),a[s]&&o.push(n);o.length&&r.push({elem:h,handlers:o})}return h=this,l<e.length&&r.push({elem:h,handlers:e.slice(l)}),r},addProp:function(t,e){Object.defineProperty(ft.Event.prototype,t,{enumerable:!0,configurable:!0,get:ut(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(t){return t[ft.expando]?t:new ft.Event(t)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==k()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===k()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&o(this,"input"))return this.click(),!1},_default:function(t){return o(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},ft.removeEvent=function(t,e,i){t.removeEventListener&&t.removeEventListener(e,i)},ft.Event=function(t,e){if(!(this instanceof ft.Event))return new ft.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?x:C,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&ft.extend(this,e),this.timeStamp=t&&t.timeStamp||Date.now(),this[ft.expando]=!0},ft.Event.prototype={constructor:ft.Event,isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=x,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=x,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=x,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},ft.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(t){var e=t.button;return null==t.which&&Kt.test(t.type)?null!=t.charCode?t.charCode:t.keyCode:!t.which&&void 0!==e&&Xt.test(t.type)?1&e?1:2&e?3:4&e?2:0:t.which}},ft.event.addProp),ft.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){ft.event.special[t]={delegateType:e,bindType:e,handle:function(t){var i,n=t.relatedTarget,s=t.handleObj;return n&&(n===this||ft.contains(this,n))||(t.type=s.origType,i=s.handler.apply(this,arguments),t.type=e),i}}}),ft.fn.extend({on:function(t,e,i,n){return T(this,t,e,i,n)},one:function(t,e,i,n){return T(this,t,e,i,n,1)},off:function(t,e,i){var n,s;if(t&&t.preventDefault&&t.handleObj)return n=t.handleObj,ft(t.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler),this;if("object"==typeof t){for(s in t)this.off(s,e,t[s]);return this}return!1!==e&&"function"!=typeof e||(i=e,e=void 0),!1===i&&(i=C),this.each(function(){ft.event.remove(this,t,i,e)})}});var Qt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Jt=/<script|<style|<link/i,Zt=/checked\s*(?:[^=]|=\s*.checked.)/i,te=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;ft.extend({htmlPrefilter:function(t){return t.replace(Qt,"<$1></$2>")},clone:function(t,e,i){var n,s,o,a,r=t.cloneNode(!0),l=ft.contains(t.ownerDocument,t);if(!(ct.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||ft.isXMLDoc(t)))for(a=_(r),n=0,s=(o=_(t)).length;n<s;n++)E(o[n],a[n]);if(e)if(i)for(o=o||_(t),a=a||_(r),n=0,s=o.length;n<s;n++)P(o[n],a[n]);else P(t,r);return(a=_(r,"script")).length>0&&y(a,!l&&_(t,"script")),r},cleanData:function(t){for(var e,i,n,s=ft.event.special,o=0;void 0!==(i=t[o]);o++)if(Mt(i)){if(e=i[At.expando]){if(e.events)for(n in e.events)s[n]?ft.event.remove(i,n):ft.removeEvent(i,n,e.handle);i[At.expando]=void 0}i[Ot.expando]&&(i[Ot.expando]=void 0)}}}),ft.fn.extend({detach:function(t){return A(this,t,!0)},remove:function(t){return A(this,t)},text:function(t){return It(this,function(t){return void 0===t?ft.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return M(this,arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||D(this,t).appendChild(t)})},prepend:function(){return M(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=D(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return M(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return M(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(ft.cleanData(_(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return ft.clone(this,t,e)})},html:function(t){return It(this,function(t){var e=this[0]||{},i=0,n=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Jt.test(t)&&!Ut[(Bt.exec(t)||["",""])[1].toLowerCase()]){t=ft.htmlPrefilter(t);try{for(;i<n;i++)1===(e=this[i]||{}).nodeType&&(ft.cleanData(_(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return M(this,arguments,function(e){var i=this.parentNode;ft.inArray(this,t)<0&&(ft.cleanData(_(this)),i&&i.replaceChild(e,this))},t)}}),ft.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){ft.fn[t]=function(t){for(var i,n=[],s=ft(t),o=s.length-1,a=0;a<=o;a++)i=a===o?this:this.clone(!0),ft(s[a])[e](i),nt.apply(n,i.get());return this.pushStack(n)}});var ee=new RegExp("^("+zt+")(?!px)[a-z%]+$","i"),ie=function(e){var i=e.ownerDocument.defaultView;return i&&i.opener||(i=t),i.getComputedStyle(e)},ne=new RegExp(Wt.join("|"),"i");!function(){function e(){if(h){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",h.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",Vt.appendChild(l).appendChild(h);var e=t.getComputedStyle(h);n="1%"!==e.top,r=12===i(e.marginLeft),h.style.right="60%",a=36===i(e.right),s=36===i(e.width),h.style.position="absolute",o=36===h.offsetWidth||"absolute",Vt.removeChild(l),h=null}}function i(t){return Math.round(parseFloat(t))}var n,s,o,a,r,l=Z.createElement("div"),h=Z.createElement("div");h.style&&(h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",ct.clearCloneStyle="content-box"===h.style.backgroundClip,ft.extend(ct,{boxSizingReliable:function(){return e(),s},pixelBoxStyles:function(){return e(),a},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),r},scrollboxSize:function(){return e(),o}}))}();var se=/^(none|table(?!-c[ea]).+)/,oe=/^--/,ae={position:"absolute",visibility:"hidden",display:"block"},re={letterSpacing:"0",fontWeight:"400"},le=["Webkit","Moz","ms"],he=Z.createElement("div").style;ft.extend({cssHooks:{opacity:{get:function(t,e){if(e){var i=O(t,"opacity");return""===i?"1":i}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,i,n){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var s,o,a,r=p(e),l=oe.test(e),h=t.style;if(l||(e=H(r)),a=ft.cssHooks[e]||ft.cssHooks[r],void 0===i)return a&&"get"in a&&void 0!==(s=a.get(t,!1,n))?s:h[e];"string"==(o=typeof i)&&(s=Lt.exec(i))&&s[1]&&(i=m(t,e,s),o="number"),null!=i&&i==i&&("number"===o&&(i+=s&&s[3]||(ft.cssNumber[r]?"":"px")),ct.clearCloneStyle||""!==i||0!==e.indexOf("background")||(h[e]="inherit"),a&&"set"in a&&void 0===(i=a.set(t,i,n))||(l?h.setProperty(e,i):h[e]=i))}},css:function(t,e,i,n){var s,o,a,r=p(e);return oe.test(e)||(e=H(r)),(a=ft.cssHooks[e]||ft.cssHooks[r])&&"get"in a&&(s=a.get(t,!0,i)),void 0===s&&(s=O(t,e,n)),"normal"===s&&e in re&&(s=re[e]),""===i||i?(o=parseFloat(s),!0===i||isFinite(o)?o||0:s):s}}),ft.each(["height","width"],function(t,e){ft.cssHooks[e]={get:function(t,i,n){if(i)return!se.test(ft.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?W(t,e,n):$t(t,ae,function(){return W(t,e,n)})},set:function(t,i,n){var s,o=ie(t),a="border-box"===ft.css(t,"boxSizing",!1,o),r=n&&L(t,e,n,a,o);return a&&ct.scrollboxSize()===o.position&&(r-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-L(t,e,"border",!1,o)-.5)),r&&(s=Lt.exec(i))&&"px"!==(s[3]||"px")&&(t.style[e]=i,i=ft.css(t,e)),z(0,i,r)}}}),ft.cssHooks.marginLeft=N(ct.reliableMarginLeft,function(t,e){if(e)return(parseFloat(O(t,"marginLeft"))||t.getBoundingClientRect().left-$t(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px"}),ft.each({margin:"",padding:"",border:"Width"},function(t,e){ft.cssHooks[t+e]={expand:function(i){for(var n=0,s={},o="string"==typeof i?i.split(" "):[i];n<4;n++)s[t+Wt[n]+e]=o[n]||o[n-2]||o[0];return s}},"margin"!==t&&(ft.cssHooks[t+e].set=z)}),ft.fn.extend({css:function(t,e){return It(this,function(t,e,i){var n,s,o={},a=0;if(Array.isArray(e)){for(n=ie(t),s=e.length;a<s;a++)o[e[a]]=ft.css(t,e[a],!1,n);return o}return void 0!==i?ft.style(t,e,i):ft.css(t,e)},t,e,arguments.length>1)}}),ft.Tween=R,R.prototype={constructor:R,init:function(t,e,i,n,s,o){this.elem=t,this.prop=i,this.easing=s||ft.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=n,this.unit=o||(ft.cssNumber[i]?"":"px")},cur:function(){var t=R.propHooks[this.prop];return t&&t.get?t.get(this):R.propHooks._default.get(this)},run:function(t){var e,i=R.propHooks[this.prop];return this.options.duration?this.pos=e=ft.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),
i&&i.set?i.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=ft.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){ft.fx.step[t.prop]?ft.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[ft.cssProps[t.prop]]&&!ft.cssHooks[t.prop]?t.elem[t.prop]=t.now:ft.style(t.elem,t.prop,t.now+t.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},ft.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},ft.fx=R.prototype.init,ft.fx.step={};var ce,ue,de=/^(?:toggle|show|hide)$/,pe=/queueHooks$/;ft.Animation=ft.extend(q,{tweeners:{"*":[function(t,e){var i=this.createTween(t,e);return m(i.elem,t,Lt.exec(e),i),i}]},tweener:function(t,e){ut(t)?(e=t,t=["*"]):t=t.match(Tt);for(var i,n=0,s=t.length;n<s;n++)i=t[n],q.tweeners[i]=q.tweeners[i]||[],q.tweeners[i].unshift(e)},prefilters:[function(t,e,i){var n,s,o,a,r,l,h,c,u="width"in e||"height"in e,d=this,p={},f=t.style,g=t.nodeType&&Rt(t),m=At.get(t,"fxshow");for(n in i.queue||(null==(a=ft._queueHooks(t,"fx")).unqueued&&(a.unqueued=0,r=a.empty.fire,a.empty.fire=function(){a.unqueued||r()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,ft.queue(t,"fx").length||a.empty.fire()})})),e)if(s=e[n],de.test(s)){if(delete e[n],o=o||"toggle"===s,s===(g?"hide":"show")){if("show"!==s||!m||void 0===m[n])continue;g=!0}p[n]=m&&m[n]||ft.style(t,n)}if((l=!ft.isEmptyObject(e))||!ft.isEmptyObject(p))for(n in u&&1===t.nodeType&&(i.overflow=[f.overflow,f.overflowX,f.overflowY],null==(h=m&&m.display)&&(h=At.get(t,"display")),"none"===(c=ft.css(t,"display"))&&(h?c=h:(b([t],!0),h=t.style.display||h,c=ft.css(t,"display"),b([t]))),("inline"===c||"inline-block"===c&&null!=h)&&"none"===ft.css(t,"float")&&(l||(d.done(function(){f.display=h}),null==h&&(c=f.display,h="none"===c?"":c)),f.display="inline-block")),i.overflow&&(f.overflow="hidden",d.always(function(){f.overflow=i.overflow[0],f.overflowX=i.overflow[1],f.overflowY=i.overflow[2]})),l=!1,p)l||(m?"hidden"in m&&(g=m.hidden):m=At.access(t,"fxshow",{display:h}),o&&(m.hidden=!g),g&&b([t],!0),d.done(function(){for(n in g||b([t]),At.remove(t,"fxshow"),p)ft.style(t,n,p[n])})),l=B(g?m[n]:0,n,d),n in m||(m[n]=l.start,g&&(l.end=l.start,l.start=0))}],prefilter:function(t,e){e?q.prefilters.unshift(t):q.prefilters.push(t)}}),ft.speed=function(t,e,i){var n=t&&"object"==typeof t?ft.extend({},t):{complete:i||!i&&e||ut(t)&&t,duration:t,easing:i&&e||e&&!ut(e)&&e};return ft.fx.off?n.duration=0:"number"!=typeof n.duration&&(n.duration in ft.fx.speeds?n.duration=ft.fx.speeds[n.duration]:n.duration=ft.fx.speeds._default),null!=n.queue&&!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){ut(n.old)&&n.old.call(this),n.queue&&ft.dequeue(this,n.queue)},n},ft.fn.extend({fadeTo:function(t,e,i,n){return this.filter(Rt).css("opacity",0).show().end().animate({opacity:e},t,i,n)},animate:function(t,e,i,n){var s=ft.isEmptyObject(t),o=ft.speed(e,i,n),a=function(){var e=q(this,ft.extend({},t),o);(s||At.get(this,"finish"))&&e.stop(!0)};return a.finish=a,s||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(t,e,i){var n=function(t){var e=t.stop;delete t.stop,e(i)};return"string"!=typeof t&&(i=e,e=t,t=void 0),e&&!1!==t&&this.queue(t||"fx",[]),this.each(function(){var e=!0,s=null!=t&&t+"queueHooks",o=ft.timers,a=At.get(this);if(s)a[s]&&a[s].stop&&n(a[s]);else for(s in a)a[s]&&a[s].stop&&pe.test(s)&&n(a[s]);for(s=o.length;s--;)o[s].elem!==this||null!=t&&o[s].queue!==t||(o[s].anim.stop(i),e=!1,o.splice(s,1));!e&&i||ft.dequeue(this,t)})},finish:function(t){return!1!==t&&(t=t||"fx"),this.each(function(){var e,i=At.get(this),n=i[t+"queue"],s=i[t+"queueHooks"],o=ft.timers,a=n?n.length:0;for(i.finish=!0,ft.queue(this,t,[]),s&&s.stop&&s.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<a;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete i.finish})}}),ft.each(["toggle","show","hide"],function(t,e){var i=ft.fn[e];ft.fn[e]=function(t,n,s){return null==t||"boolean"==typeof t?i.apply(this,arguments):this.animate(F(e,!0),t,n,s)}}),ft.each({slideDown:F("show"),slideUp:F("hide"),slideToggle:F("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){ft.fn[t]=function(t,i,n){return this.animate(e,t,i,n)}}),ft.timers=[],ft.fx.tick=function(){var t,e=0,i=ft.timers;for(ce=Date.now();e<i.length;e++)(t=i[e])()||i[e]!==t||i.splice(e--,1);i.length||ft.fx.stop(),ce=void 0},ft.fx.timer=function(t){ft.timers.push(t),ft.fx.start()},ft.fx.interval=13,ft.fx.start=function(){ue||(ue=!0,$())},ft.fx.stop=function(){ue=null},ft.fx.speeds={slow:600,fast:200,_default:400},ft.fn.delay=function(e,i){return e=ft.fx&&ft.fx.speeds[e]||e,i=i||"fx",this.queue(i,function(i,n){var s=t.setTimeout(i,e);n.stop=function(){t.clearTimeout(s)}})},function(){var t=Z.createElement("input"),e=Z.createElement("select").appendChild(Z.createElement("option"));t.type="checkbox",ct.checkOn=""!==t.value,ct.optSelected=e.selected,(t=Z.createElement("input")).value="t",t.type="radio",ct.radioValue="t"===t.value}();var fe,ge=ft.expr.attrHandle;ft.fn.extend({attr:function(t,e){return It(this,ft.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){ft.removeAttr(this,t)})}}),ft.extend({attr:function(t,e,i){var n,s,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?ft.prop(t,e,i):(1===o&&ft.isXMLDoc(t)||(s=ft.attrHooks[e.toLowerCase()]||(ft.expr.match.bool.test(e)?fe:void 0)),void 0!==i?null===i?void ft.removeAttr(t,e):s&&"set"in s&&void 0!==(n=s.set(t,i,e))?n:(t.setAttribute(e,i+""),i):s&&"get"in s&&null!==(n=s.get(t,e))?n:null==(n=ft.find.attr(t,e))?void 0:n)},attrHooks:{type:{set:function(t,e){if(!ct.radioValue&&"radio"===e&&o(t,"input")){var i=t.value;return t.setAttribute("type",e),i&&(t.value=i),e}}}},removeAttr:function(t,e){var i,n=0,s=e&&e.match(Tt);if(s&&1===t.nodeType)for(;i=s[n++];)t.removeAttribute(i)}}),fe={set:function(t,e,i){return!1===e?ft.removeAttr(t,i):t.setAttribute(i,i),i}},ft.each(ft.expr.match.bool.source.match(/\w+/g),function(t,e){var i=ge[e]||ft.find.attr;ge[e]=function(t,e,n){var s,o,a=e.toLowerCase();return n||(o=ge[a],ge[a]=s,s=null!=i(t,e,n)?a:null,ge[a]=o),s}});var me=/^(?:input|select|textarea|button)$/i,ve=/^(?:a|area)$/i;ft.fn.extend({prop:function(t,e){return It(this,ft.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[ft.propFix[t]||t]})}}),ft.extend({prop:function(t,e,i){var n,s,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ft.isXMLDoc(t)||(e=ft.propFix[e]||e,s=ft.propHooks[e]),void 0!==i?s&&"set"in s&&void 0!==(n=s.set(t,i,e))?n:t[e]=i:s&&"get"in s&&null!==(n=s.get(t,e))?n:t[e]},propHooks:{tabIndex:{get:function(t){var e=ft.find.attr(t,"tabindex");return e?parseInt(e,10):me.test(t.nodeName)||ve.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ct.optSelected||(ft.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),ft.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ft.propFix[this.toLowerCase()]=this}),ft.fn.extend({addClass:function(t){var e,i,n,s,o,a,r,l=0;if(ut(t))return this.each(function(e){ft(this).addClass(t.call(this,e,Y(this)))});if((e=V(t)).length)for(;i=this[l++];)if(s=Y(i),n=1===i.nodeType&&" "+U(s)+" "){for(a=0;o=e[a++];)n.indexOf(" "+o+" ")<0&&(n+=o+" ");s!==(r=U(n))&&i.setAttribute("class",r)}return this},removeClass:function(t){var e,i,n,s,o,a,r,l=0;if(ut(t))return this.each(function(e){ft(this).removeClass(t.call(this,e,Y(this)))});if(!arguments.length)return this.attr("class","");if((e=V(t)).length)for(;i=this[l++];)if(s=Y(i),n=1===i.nodeType&&" "+U(s)+" "){for(a=0;o=e[a++];)for(;n.indexOf(" "+o+" ")>-1;)n=n.replace(" "+o+" "," ");s!==(r=U(n))&&i.setAttribute("class",r)}return this},toggleClass:function(t,e){var i=typeof t,n="string"===i||Array.isArray(t);return"boolean"==typeof e&&n?e?this.addClass(t):this.removeClass(t):ut(t)?this.each(function(i){ft(this).toggleClass(t.call(this,i,Y(this),e),e)}):this.each(function(){var e,s,o,a;if(n)for(s=0,o=ft(this),a=V(t);e=a[s++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==i||((e=Y(this))&&At.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":At.get(this,"__className__")||""))})},hasClass:function(t){var e,i,n=0;for(e=" "+t+" ";i=this[n++];)if(1===i.nodeType&&(" "+U(Y(i))+" ").indexOf(e)>-1)return!0;return!1}});var be=/\r/g;ft.fn.extend({val:function(t){var e,i,n,s=this[0];return arguments.length?(n=ut(t),this.each(function(i){var s;1===this.nodeType&&(null==(s=n?t.call(this,i,ft(this).val()):t)?s="":"number"==typeof s?s+="":Array.isArray(s)&&(s=ft.map(s,function(t){return null==t?"":t+""})),(e=ft.valHooks[this.type]||ft.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,s,"value")||(this.value=s))})):s?(e=ft.valHooks[s.type]||ft.valHooks[s.nodeName.toLowerCase()])&&"get"in e&&void 0!==(i=e.get(s,"value"))?i:"string"==typeof(i=s.value)?i.replace(be,""):null==i?"":i:void 0}}),ft.extend({valHooks:{option:{get:function(t){var e=ft.find.attr(t,"value");return null!=e?e:U(ft.text(t))}},select:{get:function(t){var e,i,n,s=t.options,a=t.selectedIndex,r="select-one"===t.type,l=r?null:[],h=r?a+1:s.length;for(n=a<0?h:r?a:0;n<h;n++)if(((i=s[n]).selected||n===a)&&!i.disabled&&(!i.parentNode.disabled||!o(i.parentNode,"optgroup"))){if(e=ft(i).val(),r)return e;l.push(e)}return l},set:function(t,e){for(var i,n,s=t.options,o=ft.makeArray(e),a=s.length;a--;)((n=s[a]).selected=ft.inArray(ft.valHooks.option.get(n),o)>-1)&&(i=!0);return i||(t.selectedIndex=-1),o}}}}),ft.each(["radio","checkbox"],function(){ft.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=ft.inArray(ft(t).val(),e)>-1}},ct.checkOn||(ft.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),ct.focusin="onfocusin"in t;var _e=/^(?:focusinfocus|focusoutblur)$/,ye=function(t){t.stopPropagation()};ft.extend(ft.event,{trigger:function(e,i,n,s){var o,a,r,l,h,c,u,d,p=[n||Z],f=rt.call(e,"type")?e.type:e,g=rt.call(e,"namespace")?e.namespace.split("."):[];if(a=d=r=n=n||Z,3!==n.nodeType&&8!==n.nodeType&&!_e.test(f+ft.event.triggered)&&(f.indexOf(".")>-1&&(g=f.split("."),f=g.shift(),g.sort()),h=f.indexOf(":")<0&&"on"+f,(e=e[ft.expando]?e:new ft.Event(f,"object"==typeof e&&e)).isTrigger=s?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),i=null==i?[e]:ft.makeArray(i,[e]),u=ft.event.special[f]||{},s||!u.trigger||!1!==u.trigger.apply(n,i))){if(!s&&!u.noBubble&&!dt(n)){for(l=u.delegateType||f,_e.test(l+f)||(a=a.parentNode);a;a=a.parentNode)p.push(a),r=a;r===(n.ownerDocument||Z)&&p.push(r.defaultView||r.parentWindow||t)}for(o=0;(a=p[o++])&&!e.isPropagationStopped();)d=a,e.type=o>1?l:u.bindType||f,(c=(At.get(a,"events")||{})[e.type]&&At.get(a,"handle"))&&c.apply(a,i),(c=h&&a[h])&&c.apply&&Mt(a)&&(e.result=c.apply(a,i),!1===e.result&&e.preventDefault());return e.type=f,s||e.isDefaultPrevented()||u._default&&!1!==u._default.apply(p.pop(),i)||!Mt(n)||h&&ut(n[f])&&!dt(n)&&((r=n[h])&&(n[h]=null),ft.event.triggered=f,e.isPropagationStopped()&&d.addEventListener(f,ye),n[f](),e.isPropagationStopped()&&d.removeEventListener(f,ye),ft.event.triggered=void 0,r&&(n[h]=r)),e.result}},simulate:function(t,e,i){var n=ft.extend(new ft.Event,i,{type:t,isSimulated:!0});ft.event.trigger(n,null,e)}}),ft.fn.extend({trigger:function(t,e){return this.each(function(){ft.event.trigger(t,e,this)})},triggerHandler:function(t,e){var i=this[0];if(i)return ft.event.trigger(t,e,i,!0)}}),ct.focusin||ft.each({focus:"focusin",blur:"focusout"},function(t,e){var i=function(t){ft.event.simulate(e,t.target,ft.event.fix(t))};ft.event.special[e]={setup:function(){var n=this.ownerDocument||this,s=At.access(n,e);s||n.addEventListener(t,i,!0),At.access(n,e,(s||0)+1)},teardown:function(){var n=this.ownerDocument||this,s=At.access(n,e)-1;s?At.access(n,e,s):(n.removeEventListener(t,i,!0),At.remove(n,e))}}});var we=t.location,xe=Date.now(),Ce=/\?/;ft.parseXML=function(e){var i;if(!e||"string"!=typeof e)return null;try{i=(new t.DOMParser).parseFromString(e,"text/xml")}catch(t){i=void 0}return i&&!i.getElementsByTagName("parsererror").length||ft.error("Invalid XML: "+e),i};var ke=/\[\]$/,Te=/\r?\n/g,De=/^(?:submit|button|image|reset|file)$/i,Se=/^(?:input|select|textarea|keygen)/i;ft.param=function(t,e){var i,n=[],s=function(t,e){var i=ut(e)?e():e;n[n.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==i?"":i)};if(Array.isArray(t)||t.jquery&&!ft.isPlainObject(t))ft.each(t,function(){s(this.name,this.value)});else for(i in t)K(i,t[i],e,s);return n.join("&")},ft.fn.extend({serialize:function(){return ft.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=ft.prop(this,"elements");return t?ft.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!ft(this).is(":disabled")&&Se.test(this.nodeName)&&!De.test(t)&&(this.checked||!Ft.test(t))}).map(function(t,e){var i=ft(this).val();return null==i?null:Array.isArray(i)?ft.map(i,function(t){return{name:e.name,value:t.replace(Te,"\r\n")}}):{name:e.name,value:i.replace(Te,"\r\n")}}).get()}});var Ie=/%20/g,Pe=/#.*$/,Ee=/([?&])_=[^&]*/,Me=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ae=/^(?:GET|HEAD)$/,Oe=/^\/\//,Ne={},He={},ze="*/".concat("*"),Le=Z.createElement("a");Le.href=we.href,ft.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:we.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(we.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ze,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ft.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Q(Q(t,ft.ajaxSettings),e):Q(ft.ajaxSettings,t)},ajaxPrefilter:X(Ne),ajaxTransport:X(He),ajax:function(e,i){function n(e,i,n,r){var h,d,p,y,w,x=i;c||(c=!0,l&&t.clearTimeout(l),s=void 0,a=r||"",C.readyState=e>0?4:0,h=e>=200&&e<300||304===e,n&&(y=function(t,e,i){for(var n,s,o,a,r=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===n&&(n=t.mimeType||e.getResponseHeader("Content-Type"));if(n)for(s in r)if(r[s]&&r[s].test(n)){l.unshift(s);break}if(l[0]in i)o=l[0];else{for(s in i){if(!l[0]||t.converters[s+" "+l[0]]){o=s;break}a||(a=s)}o=o||a}if(o)return o!==l[0]&&l.unshift(o),i[o]}(f,C,n)),y=function(t,e,i,n){var s,o,a,r,l,h={},c=t.dataTypes.slice();if(c[1])for(a in t.converters)h[a.toLowerCase()]=t.converters[a];for(o=c.shift();o;)if(t.responseFields[o]&&(i[t.responseFields[o]]=e),!l&&n&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(a=h[l+" "+o]||h["* "+o]))for(s in h)if((r=s.split(" "))[1]===o&&(a=h[l+" "+r[0]]||h["* "+r[0]])){!0===a?a=h[s]:!0!==h[s]&&(o=r[0],c.unshift(r[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:"parsererror",error:a?t:"No conversion from "+l+" to "+o}}}return{state:"success",data:e}}(f,y,C,h),h?(f.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(ft.lastModified[o]=w),(w=C.getResponseHeader("etag"))&&(ft.etag[o]=w)),204===e||"HEAD"===f.type?x="nocontent":304===e?x="notmodified":(x=y.state,d=y.data,h=!(p=y.error))):(p=x,!e&&x||(x="error",e<0&&(e=0))),C.status=e,C.statusText=(i||x)+"",h?v.resolveWith(g,[d,x,C]):v.rejectWith(g,[C,x,p]),C.statusCode(_),_=void 0,u&&m.trigger(h?"ajaxSuccess":"ajaxError",[C,f,h?d:p]),b.fireWith(g,[C,x]),u&&(m.trigger("ajaxComplete",[C,f]),--ft.active||ft.event.trigger("ajaxStop")))}"object"==typeof e&&(i=e,e=void 0),i=i||{};var s,o,a,r,l,h,c,u,d,p,f=ft.ajaxSetup({},i),g=f.context||f,m=f.context&&(g.nodeType||g.jquery)?ft(g):ft.event,v=ft.Deferred(),b=ft.Callbacks("once memory"),_=f.statusCode||{},y={},w={},x="canceled",C={readyState:0,getResponseHeader:function(t){var e;if(c){if(!r)for(r={};e=Me.exec(a);)r[e[1].toLowerCase()]=e[2];e=r[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(t,e){return null==c&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,y[t]=e),this},overrideMimeType:function(t){return null==c&&(f.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)C.always(t[C.status]);else for(e in t)_[e]=[_[e],t[e]];return this},abort:function(t){var e=t||x;return s&&s.abort(e),n(0,e),this}};if(v.promise(C),f.url=((e||f.url||we.href)+"").replace(Oe,we.protocol+"//"),f.type=i.method||i.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(Tt)||[""],null==f.crossDomain){h=Z.createElement("a");try{h.href=f.url,h.href=h.href,f.crossDomain=Le.protocol+"//"+Le.host!=h.protocol+"//"+h.host}catch(t){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=ft.param(f.data,f.traditional)),G(Ne,f,i,C),c)return C;for(d in(u=ft.event&&f.global)&&0==ft.active++&&ft.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Ae.test(f.type),o=f.url.replace(Pe,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(Ie,"+")):(p=f.url.slice(o.length),f.data&&(f.processData||"string"==typeof f.data)&&(o+=(Ce.test(o)?"&":"?")+f.data,delete f.data),!1===f.cache&&(o=o.replace(Ee,"$1"),p=(Ce.test(o)?"&":"?")+"_="+xe+++p),f.url=o+p),f.ifModified&&(ft.lastModified[o]&&C.setRequestHeader("If-Modified-Since",ft.lastModified[o]),ft.etag[o]&&C.setRequestHeader("If-None-Match",ft.etag[o])),(f.data&&f.hasContent&&!1!==f.contentType||i.contentType)&&C.setRequestHeader("Content-Type",f.contentType),C.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+ze+"; q=0.01":""):f.accepts["*"]),f.headers)C.setRequestHeader(d,f.headers[d]);if(f.beforeSend&&(!1===f.beforeSend.call(g,C,f)||c))return C.abort();if(x="abort",b.add(f.complete),C.done(f.success),C.fail(f.error),s=G(He,f,i,C)){if(C.readyState=1,u&&m.trigger("ajaxSend",[C,f]),c)return C;f.async&&f.timeout>0&&(l=t.setTimeout(function(){C.abort("timeout")},f.timeout));try{c=!1,s.send(y,n)}catch(t){if(c)throw t;n(-1,t)}}else n(-1,"No Transport");return C},getJSON:function(t,e,i){return ft.get(t,e,i,"json")},getScript:function(t,e){return ft.get(t,void 0,e,"script")}}),ft.each(["get","post"],function(t,e){ft[e]=function(t,i,n,s){return ut(i)&&(s=s||n,n=i,i=void 0),ft.ajax(ft.extend({url:t,type:e,dataType:s,data:i,success:n},ft.isPlainObject(t)&&t))}}),ft._evalUrl=function(t){return ft.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},ft.fn.extend({wrapAll:function(t){var e;return this[0]&&(ut(t)&&(t=t.call(this[0])),e=ft(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return ut(t)?this.each(function(e){ft(this).wrapInner(t.call(this,e))}):this.each(function(){var e=ft(this),i=e.contents();i.length?i.wrapAll(t):e.append(t)})},wrap:function(t){var e=ut(t);return this.each(function(i){ft(this).wrapAll(e?t.call(this,i):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){ft(this).replaceWith(this.childNodes)}),this}}),ft.expr.pseudos.hidden=function(t){return!ft.expr.pseudos.visible(t)},ft.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},ft.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(t){}};var We={0:200,1223:204},Re=ft.ajaxSettings.xhr();ct.cors=!!Re&&"withCredentials"in Re,ct.ajax=Re=!!Re,ft.ajaxTransport(function(e){var i,n;if(ct.cors||Re&&!e.crossDomain)return{send:function(s,o){var a,r=e.xhr();if(r.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)r[a]=e.xhrFields[a];for(a in e.mimeType&&r.overrideMimeType&&r.overrideMimeType(e.mimeType),e.crossDomain||s["X-Requested-With"]||(s["X-Requested-With"]="XMLHttpRequest"),s)r.setRequestHeader(a,s[a]);i=function(t){return function(){i&&(i=n=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===t?r.abort():"error"===t?"number"!=typeof r.status?o(0,"error"):o(r.status,r.statusText):o(We[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=i(),n=r.onerror=r.ontimeout=i("error"),void 0!==r.onabort?r.onabort=n:r.onreadystatechange=function(){4===r.readyState&&t.setTimeout(function(){i&&n()})},i=i("abort");try{r.send(e.hasContent&&e.data||null)}catch(t){if(i)throw t}},abort:function(){i&&i()}}}),ft.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),ft.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return ft.globalEval(t),t}}}),ft.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),ft.ajaxTransport("script",function(t){var e,i;if(t.crossDomain)return{send:function(n,s){e=ft("<script>").prop({charset:t.scriptCharset,src:t.url}).on("load error",i=function(t){e.remove(),i=null,t&&s("error"===t.type?404:200,t.type)}),Z.head.appendChild(e[0])},abort:function(){i&&i()}}});var $e=[],je=/(=)\?(?=&|$)|\?\?/;ft.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=$e.pop()||ft.expando+"_"+xe++;return this[t]=!0,t}}),ft.ajaxPrefilter("json jsonp",function(e,i,n){var s,o,a,r=!1!==e.jsonp&&(je.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&je.test(e.data)&&"data");if(r||"jsonp"===e.dataTypes[0])return s=e.jsonpCallback=ut(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,r?e[r]=e[r].replace(je,"$1"+s):!1!==e.jsonp&&(e.url+=(Ce.test(e.url)?"&":"?")+e.jsonp+"="+s),e.converters["script json"]=function(){return a||ft.error(s+" was not called"),a[0]},e.dataTypes[0]="json",o=t[s],t[s]=function(){a=arguments},n.always(function(){void 0===o?ft(t).removeProp(s):t[s]=o,e[s]&&(e.jsonpCallback=i.jsonpCallback,$e.push(s)),a&&ut(o)&&o(a[0]),a=o=void 0}),"script"}),ct.createHTMLDocument=function(){var t=Z.implementation.createHTMLDocument("").body;return t.innerHTML="<form></form><form></form>",2===t.childNodes.length}(),ft.parseHTML=function(t,e,i){return"string"!=typeof t?[]:("boolean"==typeof e&&(i=e,e=!1),e||(ct.createHTMLDocument?((n=(e=Z.implementation.createHTMLDocument("")).createElement("base")).href=Z.location.href,e.head.appendChild(n)):e=Z),o=!i&&[],(s=yt.exec(t))?[e.createElement(s[1])]:(s=w([t],e,o),o&&o.length&&ft(o).remove(),ft.merge([],s.childNodes)));var n,s,o},ft.fn.load=function(t,e,i){var n,s,o,a=this,r=t.indexOf(" ");return r>-1&&(n=U(t.slice(r)),t=t.slice(0,r)),ut(e)?(i=e,e=void 0):e&&"object"==typeof e&&(s="POST"),a.length>0&&ft.ajax({url:t,type:s||"GET",dataType:"html",data:e}).done(function(t){o=arguments,a.html(n?ft("<div>").append(ft.parseHTML(t)).find(n):t)}).always(i&&function(t,e){a.each(function(){i.apply(this,o||[t.responseText,e,t])})}),this},ft.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){ft.fn[e]=function(t){return this.on(e,t)}}),ft.expr.pseudos.animated=function(t){return ft.grep(ft.timers,function(e){return t===e.elem}).length},ft.offset={setOffset:function(t,e,i){var n,s,o,a,r,l,h=ft.css(t,"position"),c=ft(t),u={};"static"===h&&(t.style.position="relative"),r=c.offset(),o=ft.css(t,"top"),l=ft.css(t,"left"),("absolute"===h||"fixed"===h)&&(o+l).indexOf("auto")>-1?(a=(n=c.position()).top,s=n.left):(a=parseFloat(o)||0,s=parseFloat(l)||0),ut(e)&&(e=e.call(t,i,ft.extend({},r))),null!=e.top&&(u.top=e.top-r.top+a),null!=e.left&&(u.left=e.left-r.left+s),"using"in e?e.using.call(t,u):c.css(u)}},ft.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ft.offset.setOffset(this,t,e)});var e,i,n=this[0];return n?n.getClientRects().length?(e=n.getBoundingClientRect(),i=n.ownerDocument.defaultView,{top:e.top+i.pageYOffset,left:e.left+i.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,i,n=this[0],s={top:0,left:0};if("fixed"===ft.css(n,"position"))e=n.getBoundingClientRect();else{for(e=this.offset(),i=n.ownerDocument,t=n.offsetParent||i.documentElement;t&&(t===i.body||t===i.documentElement)&&"static"===ft.css(t,"position");)t=t.parentNode;t&&t!==n&&1===t.nodeType&&((s=ft(t).offset()).top+=ft.css(t,"borderTopWidth",!0),s.left+=ft.css(t,"borderLeftWidth",!0))}return{top:e.top-s.top-ft.css(n,"marginTop",!0),left:e.left-s.left-ft.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&"static"===ft.css(t,"position");)t=t.offsetParent;return t||Vt})}}),ft.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var i="pageYOffset"===e;ft.fn[t]=function(n){return It(this,function(t,n,s){var o;if(dt(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===s)return o?o[e]:t[n];o?o.scrollTo(i?o.pageXOffset:s,i?s:o.pageYOffset):t[n]=s},t,n,arguments.length)}}),ft.each(["top","left"],function(t,e){ft.cssHooks[e]=N(ct.pixelPosition,function(t,i){if(i)return i=O(t,e),ee.test(i)?ft(t).position()[e]+"px":i})}),ft.each({Height:"height",Width:"width"},function(t,e){ft.each({padding:"inner"+t,content:e,"":"outer"+t},function(i,n){ft.fn[n]=function(s,o){var a=arguments.length&&(i||"boolean"!=typeof s),r=i||(!0===s||!0===o?"margin":"border");return It(this,function(e,i,s){var o;return dt(e)?0===n.indexOf("outer")?e["inner"+t]:e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===s?ft.css(e,i,r):ft.style(e,i,s,r)},e,a?s:void 0,a)}})}),ft.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(t,e){ft.fn[e]=function(t,i){return arguments.length>0?this.on(e,null,t,i):this.trigger(e)}}),ft.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),ft.fn.extend({bind:function(t,e,i){return this.on(t,null,e,i)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,i,n){return this.on(e,t,i,n)},undelegate:function(t,e,i){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",i)}}),ft.proxy=function(t,e){var i,n,s;if("string"==typeof e&&(i=t[e],e=t,t=i),ut(t))return n=et.call(arguments,2),(s=function(){return t.apply(e||this,n.concat(et.call(arguments)))}).guid=t.guid=t.guid||ft.guid++,s},ft.holdReady=function(t){t?ft.readyWait++:ft.ready(!0)},ft.isArray=Array.isArray,ft.parseJSON=JSON.parse,ft.nodeName=o,ft.isFunction=ut,ft.isWindow=dt,ft.camelCase=p,ft.type=n,ft.now=Date.now,ft.isNumeric=function(t){var e=ft.type(t);return("number"===e||"string"===e)&&!isNaN(t-parseFloat(t))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ft});var Fe=t.jQuery,Be=t.$;return ft.noConflict=function(e){return t.$===ft&&(t.$=Be),e&&t.jQuery===ft&&(t.jQuery=Fe),ft},e||(t.jQuery=t.$=ft),ft}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){function e(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=i(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function i(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,n)}function n(){t.datepicker._isDisabledDatepicker(c.inline?c.dpDiv.parent()[0]:c.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function s(e,i){for(var n in t.extend(e,i),i)null==i[n]&&(e[n]=i[n]);return e}function o(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{};var a=(t.ui.version="1.12.1",0),r=Array.prototype.slice;t.cleanData=function(e){return function(i){var n,s,o;for(o=0;null!=(s=i[o]);o++)try{(n=t._data(s,"events"))&&n.remove&&t(s).triggerHandler("remove")}catch(t){}e(i)}}(t.cleanData),t.widget=function(e,i,n){var s,o,a,r={},l=e.split(".")[0],h=l+"-"+(e=e.split(".")[1]);return n||(n=i,i=t.Widget),t.isArray(n)&&(n=t.extend.apply(null,[{}].concat(n))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},s=t[l][e],o=t[l][e]=function(t,e){if(!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},t.extend(o,s,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),(a=new i).options=t.widget.extend({},a.options),t.each(n,function(e,n){t.isFunction(n)?r[e]=function(){function t(){
return i.prototype[e].apply(this,arguments)}function s(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=s,e=n.apply(this,arguments),this._super=i,this._superApply=o,e}}():r[e]=n}),o.prototype=t.widget.extend(a,{widgetEventPrefix:s&&a.widgetEventPrefix||e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),s?(t.each(s._childConstructors,function(e,i){var n=i.prototype;t.widget(n.namespace+"."+n.widgetName,o,i._proto)}),delete s._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,s=r.call(arguments,1),o=0,a=s.length;o<a;o++)for(i in s[o])n=s[o][i],s[o].hasOwnProperty(i)&&void 0!==n&&(t.isPlainObject(n)?e[i]=t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):e[i]=n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(s){var o="string"==typeof s,a=r.call(arguments,1),l=this;return o?this.length||"instance"!==s?this.each(function(){var i,o=t.data(this,n);return"instance"===s?(l=o,!1):o?t.isFunction(o[s])&&"_"!==s.charAt(0)?(i=o[s].apply(o,a))!==o&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0:t.error("no such method '"+s+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+s+"'")}):l=void 0:(a.length&&(s=t.widget.extend.apply(null,[s].concat(a))),this.each(function(){var e=t.data(this,n);e?(e.option(s||{}),e._init&&e._init()):t.data(this,n,new i(s,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=a++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var n,s,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},n=e.split("."),e=n.shift(),n.length){for(s=a[e]=t.widget.extend({},this.options[e]),o=0;o<n.length-1;o++)s[n[o]]=s[n[o]]||{},s=s[n[o]];if(e=n.pop(),1===arguments.length)return void 0===s[e]?null:s[e];s[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,n,s;for(i in e)s=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&s&&s.length&&(n=t(s.get()),this._removeClass(s,i),n.addClass(this._classes({element:n,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;r<i.length;r++)a=s.classesElementLookup[i[r]]||t(),a=t(e.add?t.unique(a.get().concat(e.element.get())):a.not(e.element).get()),s.classesElementLookup[i[r]]=a,n.push(i[r]),o&&e.classes[i[r]]&&n.push(e.classes[i[r]])}var n=[],s=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),n.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(n,s){-1!==t.inArray(e.target,s)&&(i.classesElementLookup[n]=t(s.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,n){n="boolean"==typeof n?n:i;var s="string"==typeof t||null===t,o={extra:s?e:i,keys:s?t:e,element:s?this.element:t,add:n};return o.element.toggleClass(this._classes(o),n),this},_on:function(e,i,n){var s,o=this;"boolean"!=typeof e&&(n=i,i=e,e=!1),n?(i=s=t(i),this.bindings=this.bindings.add(i)):(n=i,i=this.element,s=this.widget()),t.each(n,function(n,a){function r(){if(e||!0!==o.options.disabled&&!t(this).hasClass("ui-state-disabled"))return("string"==typeof a?o[a]:a).apply(o,arguments)}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=n.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?s.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,n){var s,o,a=this.options[e];if(n=n||{},(i=t.Event(i)).type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(s in o)s in i||(i[s]=o[s]);return this.element.trigger(i,n),!(t.isFunction(a)&&!1===a.apply(this.element[0],[i].concat(n))||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(n,s,o){"string"==typeof s&&(s={effect:s});var a,r=s?!0===s||"number"==typeof s?i:s.effect||i:e;"number"==typeof(s=s||{})&&(s={duration:s}),a=!t.isEmptyObject(s),s.complete=o,s.delay&&n.delay(s.delay),a&&t.effects&&t.effects.effect[r]?n[e](s):r!==e&&n[r]?n[r](s.duration,s.easing,o):n.queue(function(i){t(this)[e](),o&&o.call(n[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(c.test(t[0])?e/100:1),parseFloat(t[1])*(c.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}var n,s=Math.max,o=Math.abs,a=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,h=/^\w+/,c=/%$/,u=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),e===(i=o.offsetWidth)&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),n=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),s="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth;return{width:"scroll"===n||"auto"===n&&e.height<e.element[0].scrollHeight?t.position.scrollbarWidth():0,height:s?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),n=t.isWindow(i[0]),s=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:n,isDocument:s,offset:n||s?{left:0,top:0}:t(e).offset(),scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return u.apply(this,arguments);n=t.extend({},n);var c,d,p,f,g,m,v=t(n.of),b=t.position.getWithinInfo(n.within),_=t.position.getScrollInfo(b),y=(n.collision||"flip").split(" "),w={};return m=function(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}(v),v[0].preventDefault&&(n.at="left top"),d=m.width,p=m.height,f=m.offset,g=t.extend({},f),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=a.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]),i[0]=a.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],n[this]=[h.exec(i[0])[0],h.exec(i[1])[0]]}),1===y.length&&(y[1]=y[0]),"right"===n.at[0]?g.left+=d:"center"===n.at[0]&&(g.left+=d/2),"bottom"===n.at[1]?g.top+=p:"center"===n.at[1]&&(g.top+=p/2),c=e(w.at,d,p),g.left+=c[0],g.top+=c[1],this.each(function(){var a,r,l=t(this),h=l.outerWidth(),u=l.outerHeight(),m=i(this,"marginLeft"),x=i(this,"marginTop"),C=h+m+i(this,"marginRight")+_.width,k=u+x+i(this,"marginBottom")+_.height,T=t.extend({},g),D=e(w.my,l.outerWidth(),l.outerHeight());"right"===n.my[0]?T.left-=h:"center"===n.my[0]&&(T.left-=h/2),"bottom"===n.my[1]?T.top-=u:"center"===n.my[1]&&(T.top-=u/2),T.left+=D[0],T.top+=D[1],a={marginLeft:m,marginTop:x},t.each(["left","top"],function(e,i){t.ui.position[y[e]]&&t.ui.position[y[e]][i](T,{targetWidth:d,targetHeight:p,elemWidth:h,elemHeight:u,collisionPosition:a,collisionWidth:C,collisionHeight:k,offset:[c[0]+D[0],c[1]+D[1]],my:n.my,at:n.at,within:b,elem:l})}),n.using&&(r=function(t){var e=f.left-T.left,i=e+d-h,a=f.top-T.top,r=a+p-u,c={target:{element:v,left:f.left,top:f.top,width:d,height:p},element:{element:l,left:T.left,top:T.top,width:h,height:u},horizontal:i<0?"left":e>0?"right":"center",vertical:r<0?"top":a>0?"bottom":"middle"};d<h&&o(e+i)<d&&(c.horizontal="center"),p<u&&o(a+r)<p&&(c.vertical="middle"),s(o(e),o(i))>s(o(a),o(r))?c.important="horizontal":c.important="vertical",n.using.call(this,t,c)}),l.offset(t.extend(T,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,n=e.within,o=n.isWindow?n.scrollLeft:n.offset.left,a=n.width,r=t.left-e.collisionPosition.marginLeft,l=o-r,h=r+e.collisionWidth-a-o;e.collisionWidth>a?l>0&&h<=0?(i=t.left+l+e.collisionWidth-a-o,t.left+=l-i):t.left=h>0&&l<=0?o:l>h?o+a-e.collisionWidth:o:l>0?t.left+=l:h>0?t.left-=h:t.left=s(t.left-r,t.left)},top:function(t,e){var i,n=e.within,o=n.isWindow?n.scrollTop:n.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=o-r,h=r+e.collisionHeight-a-o;e.collisionHeight>a?l>0&&h<=0?(i=t.top+l+e.collisionHeight-a-o,t.top+=l-i):t.top=h>0&&l<=0?o:l>h?o+a-e.collisionHeight:o:l>0?t.top+=l:h>0?t.top-=h:t.top=s(t.top-r,t.top)}},flip:{left:function(t,e){var i,n,s=e.within,a=s.offset.left+s.scrollLeft,r=s.width,l=s.isWindow?s.scrollLeft:s.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];c<0?((i=t.left+d+p+f+e.collisionWidth-r-a)<0||i<o(c))&&(t.left+=d+p+f):u>0&&((n=t.left-e.collisionPosition.marginLeft+d+p+f-l)>0||o(n)<u)&&(t.left+=d+p+f)},top:function(t,e){var i,n,s=e.within,a=s.offset.top+s.scrollTop,r=s.height,l=s.isWindow?s.scrollTop:s.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,p="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,f=-2*e.offset[1];c<0?((n=t.top+d+p+f+e.collisionHeight-r-a)<0||n<o(c))&&(t.top+=d+p+f):u>0&&((i=t.top-e.collisionPosition.marginTop+d+p+f-l)>0||o(i)<u)&&(t.top+=d+p+f)}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}();var l=(t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,n){return!!t.data(e,n[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),"ui-effects-animated"),h=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var n=c[e.type]||{};return null==t?i||!e.def?null:e.def:(t=n.floor?~~t:parseFloat(t),isNaN(t)?e.def:n.mod?(t+n.mod)%n.mod:0>t?0:n.max<t?n.max:t)}function n(e){var i=l(),n=i._rgba=[];return e=e.toLowerCase(),p(r,function(t,s){var o,a=s.re.exec(e),r=a&&s.parse(a),l=s.space||"rgba";if(r)return o=i[l](r),i[h[l].cache]=o[h[l].cache],n=i._rgba=o._rgba,!1}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),i):o[e]}function s(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}var o,a=/^([\-+])=\s*(\d+\.?\d*)/,r=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,n,s){return new t.Color.fn.parse(e,i,n,s)},h={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},c={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},u=l.support={},d=t("<p>")[0],p=t.each;d.style.cssText="background-color:rgba(1,1,1,.5)",u.rgba=d.style.backgroundColor.indexOf("rgba")>-1,p(h,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(e,s,a,r){if(void 0===e)return this._rgba=[null,null,null,null],this;(e.jquery||e.nodeType)&&(e=t(e).css(s),s=void 0);var c=this,u=t.type(e),d=this._rgba=[];return void 0!==s&&(e=[e,s,a,r],u="array"),"string"===u?this.parse(n(e)||o._default):"array"===u?(p(h.rgba.props,function(t,n){d[n.idx]=i(e[n.idx],n)}),this):"object"===u?(p(h,e instanceof l?function(t,i){e[i.cache]&&(c[i.cache]=e[i.cache].slice())}:function(n,s){var o=s.cache;p(s.props,function(t,n){if(!c[o]&&s.to){if("alpha"===t||null==e[t])return;c[o]=s.to(c._rgba)}c[o][n.idx]=i(e[t],n,!0)}),c[o]&&t.inArray(null,c[o].slice(0,3))<0&&(c[o][3]=1,s.from&&(c._rgba=s.from(c[o])))}),this):void 0},is:function(t){var e=l(t),i=!0,n=this;return p(h,function(t,s){var o,a=e[s.cache];return a&&(o=n[s.cache]||s.to&&s.to(n._rgba)||[],p(s.props,function(t,e){if(null!=a[e.idx])return i=a[e.idx]===o[e.idx]})),i}),i},_space:function(){var t=[],e=this;return p(h,function(i,n){e[n.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var n=l(t),s=n._space(),o=h[s],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),u=r.slice();return n=n[o.cache],p(o.props,function(t,s){var o=s.idx,a=r[o],l=n[o],h=c[s.type]||{};null!==l&&(null===a?u[o]=l:(h.mod&&(l-a>h.mod/2?a+=h.mod:a-l>h.mod/2&&(a-=h.mod)),u[o]=i((l-a)*e+a,s)))}),this[s](u)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),n=i.pop(),s=l(e)._rgba;return l(t.map(i,function(t,e){return(1-n)*s[e]+n*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&e<3&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),n=i.pop();return e&&i.push(~~(255*n)),"#"+t.map(i,function(t){return 1===(t=(t||0).toString(16)).length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,h.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,n=t[0]/255,s=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(n,s,o),l=Math.min(n,s,o),h=r-l,c=r+l,u=.5*c;return e=l===r?0:n===r?60*(s-o)/h+360:s===r?60*(o-n)/h+120:60*(n-s)/h+240,i=0===h?0:u<=.5?h/c:h/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},h.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],n=t[2],o=t[3],a=n<=.5?n*(1+i):n+i-n*i,r=2*n-a;return[Math.round(255*s(r,a,e+1/3)),Math.round(255*s(r,a,e)),Math.round(255*s(r,a,e-1/3)),o]},p(h,function(e,n){var s=n.props,o=n.cache,r=n.to,h=n.from;l.fn[e]=function(e){if(r&&!this[o]&&(this[o]=r(this._rgba)),void 0===e)return this[o].slice();var n,a=t.type(e),c="array"===a||"object"===a?e:arguments,u=this[o].slice();return p(s,function(t,e){var n=c["object"===a?t:e.idx];null==n&&(n=u[e.idx]),u[e.idx]=i(n,e)}),h?((n=l(h(u)))[o]=u,n):l(u)},p(s,function(i,n){l.fn[i]||(l.fn[i]=function(s){var o,r=t.type(s),l="alpha"===i?this._hsla?"hsla":"rgba":e,h=this[l](),c=h[n.idx];return"undefined"===r?c:("function"===r&&(s=s.call(this,c),r=t.type(s)),null==s&&n.empty?this:("string"===r&&(o=a.exec(s))&&(s=c+parseFloat(o[2])*("+"===o[1]?1:-1)),h[n.idx]=s,this[l](h)))})})}),l.hook=function(e){var i=e.split(" ");p(i,function(e,i){t.cssHooks[i]={set:function(e,s){var o,a,r="";if("transparent"!==s&&("string"!==t.type(s)||(o=n(s)))){if(s=l(o||s),!u.rgba&&1!==s._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(t){}s=s.blend(r&&"transparent"!==r?r:"_default")}s=s.toRgbaString()}try{e.style[i]=s}catch(t){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),t.cssHooks.borderColor={expand:function(t){var e={};return p(["Top","Right","Bottom","Left"],function(i,n){e["border"+n+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(h),function(){function e(e){var i,n,s=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(s&&s.length&&s[0]&&s[s[0]])for(n=s.length;n--;)"string"==typeof s[i=s[n]]&&(o[t.camelCase(i)]=s[i]);else for(i in s)"string"==typeof s[i]&&(o[i]=s[i]);return o}function i(e,i){var n,o,a={};for(n in i)o=i[n],e[n]!==o&&(s[n]||!t.fx.step[n]&&isNaN(parseFloat(o))||(a[n]=o));return a}var n=["add","remove","toggle"],s={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(h.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(s,o,a,r){var l=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",h=l.children?a.find("*").addBack():a;h=h.map(function(){return{el:t(this),start:e(this)}}),(o=function(){t.each(n,function(t,e){s[e]&&a[e+"Class"](s[e])})})(),h=h.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),h=h.map(function(){var e=this,i=t.Deferred(),n=t.extend({},l,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,n),i.promise()}),t.when.apply(t,h.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),l.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,n,s,o){return n?t.effects.animateClass.call(this,{add:i},n,s,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,n,s,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},n,s,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,n,s,o,a){return"boolean"==typeof n||void 0===n?s?t.effects.animateClass.call(this,n?{add:i}:{remove:i},s,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},n,s,o)}}(t.fn.toggleClass),switchClass:function(e,i,n,s,o){return t.effects.animateClass.call(this,{add:i,remove:e},n,s,o)}})}(),function(){function e(e,i,n,s){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(s=i,n=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(s=n,n=i,i={}),t.isFunction(n)&&(s=n,n=null),i&&t.extend(e,i),n=n||i.duration,e.duration=t.fx.off?0:"number"==typeof n?n:n in t.fx.speeds?t.fx.speeds[n]:t.fx.speeds._default,e.complete=s||i.complete,e}function i(e){return!(e&&"number"!=typeof e&&!t.fx.speeds[e])||"string"==typeof e&&!t.effects.effect[e]||!!t.isFunction(e)||"object"==typeof e&&!e.effect}function n(t,e){var i=e.outerWidth(),n=e.outerHeight(),s=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,n,0];return{top:parseFloat(s[1])||0,right:"auto"===s[2]?i:parseFloat(s[2]),bottom:"auto"===s[3]?n:parseFloat(s[3]),left:parseFloat(s[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(l)||e(i)}}(t.expr.filters.animated)),!1!==t.uiBackCompat&&t.extend(t.effects,{save:function(t,e){for(var i=0,n=e.length;i<n;i++)null!==e[i]&&t.data("ui-effects-"+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,n=0,s=e.length;n<s;n++)null!==e[n]&&(i=t.data("ui-effects-"+e[n]),t.css(e[n],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),float:e.css("float")},n=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),s={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(t){o=document.body}return e.wrap(n),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),n=e.parent(),"static"===e.css("position")?(n.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,n){i[n]=e.css(n),isNaN(parseInt(i[n],10))&&(i[n]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(s),n.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,n){return n||(n=i,i="effect"),t.effects.effect[e]=n,t.effects.effect[e].mode=i,n},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var n="horizontal"!==i?(e||100)/100:1,s="vertical"!==i?(e||100)/100:1;return{height:t.height()*s,width:t.width()*n,outerHeight:t.outerHeight()*s,outerWidth:t.outerWidth()*n}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var n=t.queue();e>1&&n.splice.apply(n,[1,0].concat(n.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data("ui-effects-style",t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data("ui-effects-style")||"",t.removeData("ui-effects-style")},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,n;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":n=0;break;case"center":n=.5;break;case"right":n=1;break;default:n=t[1]/e.width}return{x:n,y:i}},createPlaceholder:function(e){var i,n=e.css("position"),s=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(n)&&(n="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),float:e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data("ui-effects-placeholder",i)),e.css({position:n,left:s.left,top:s.top}),i},removePlaceholder:function(t){var e="ui-effects-placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,n,s){return s=s||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(s[i]=o[0]*n+o[1])}),s}}),t.fn.extend({effect:function(){function i(e){function i(){t.isFunction(h)&&h.call(a[0]),t.isFunction(e)&&e()}var a=t(this);n.mode=u.shift(),!1===t.uiBackCompat||o?"none"===n.mode?(a[c](),i()):s.call(a[0],n,function(){a.removeData(l),t.effects.cleanUp(a),"hide"===n.mode&&a.hide(),i()}):(a.is(":hidden")?"hide"===c:"show"===c)?(a[c](),i()):s.call(a[0],n,i)}var n=e.apply(this,arguments),s=t.effects.effect[n.effect],o=s.mode,a=n.queue,r=a||"fx",h=n.complete,c=n.mode,u=[],d=function(e){var i=t(this),n=t.effects.mode(i,c)||o;i.data(l,!0),u.push(n),o&&("show"===n||n===o&&"hide"===n)&&i.show(),o&&"none"===n||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!s?c?this[c](n.duration,h):this.each(function(){h&&h.call(this)}):!1===a?this.each(d).each(i):this.queue(r,d).queue(r,i)},show:function(t){return function(n){if(i(n))return t.apply(this,arguments);var s=e.apply(this,arguments);return s.mode="show",this.effect.call(this,s)}}(t.fn.show),hide:function(t){return function(n){if(i(n))return t.apply(this,arguments);var s=e.apply(this,arguments);return s.mode="hide",this.effect.call(this,s)}}(t.fn.hide),toggle:function(t){return function(n){if(i(n)||"boolean"==typeof n)return t.apply(this,arguments);var s=e.apply(this,arguments);return s.mode="toggle",this.effect.call(this,s)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),n=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(n=[parseFloat(i),e])}),n},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):n(this.css("clip"),this)},transfer:function(e,i){var n=t(this),s=t(e.to),o="fixed"===s.css("position"),a=t("body"),r=o?a.scrollTop():0,l=o?a.scrollLeft():0,h=s.offset(),c={top:h.top-r,left:h.left-l,height:s.innerHeight(),width:s.innerWidth()},u=n.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-l,height:n.innerHeight(),width:n.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=n(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return t<.5?i(2*t)/2:1-i(-2*t+2)/2}})}(),t.effects,t.effects.define("blind","hide",function(e,i){var n={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=t(this),o=e.direction||"up",a=s.cssClip(),r={clip:t.extend({},a)},l=t.effects.createPlaceholder(s);r.clip[n[o][0]]=r.clip[n[o][1]],"show"===e.mode&&(s.cssClip(r.clip),l&&l.css(t.effects.clipToBox(r)),r.clip=a),l&&l.animate(t.effects.clipToBox(r),e.duration,e.easing),s.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var n,s,o,a=t(this),r=e.mode,l="hide"===r,h="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(h||l?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",v="up"===c||"left"===c,b=0,_=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),h&&((s={opacity:1})[m]=o,a.css("opacity",0).css(m,v?2*-u:2*u).animate(s,f,g)),l&&(u/=Math.pow(2,d-1)),(s={})[m]=o;b<d;b++)(n={})[m]=(v?"-=":"+=")+u,a.animate(n,f,g).animate(s,f,g),u=l?2*u:u/2;l&&((n={opacity:0})[m]=(v?"-=":"+=")+u,a.animate(n,f,g)),a.queue(i),t.effects.unshift(a,_,p+1)}),t.effects.define("clip","hide",function(e,i){var n,s={},o=t(this),a=e.direction||"vertical",r="both"===a,l=r||"horizontal"===a,h=r||"vertical"===a;n=o.cssClip(),s.clip={top:h?(n.bottom-n.top)/2:n.top,right:l?(n.right-n.left)/2:n.right,bottom:h?(n.bottom-n.top)/2:n.bottom,left:l?(n.right-n.left)/2:n.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(s.clip),s.clip=n),o.animate(s,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var n,s=t(this),o="show"===e.mode,a=e.direction||"left",r="up"===a||"down"===a?"top":"left",l="up"===a||"left"===a?"-=":"+=",h="+="===l?"-=":"+=",c={opacity:0};t.effects.createPlaceholder(s),n=e.distance||s["top"===r?"outerHeight":"outerWidth"](!0)/2,c[r]=l+n,o&&(s.css(c),c[r]=h+n,c.opacity=1),s.animate(c,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function n(){
v.push(this),v.length===c*u&&(d.css({visibility:"visible"}),t(v).remove(),i())}var s,o,a,r,l,h,c=e.pieces?Math.round(Math.sqrt(e.pieces)):3,u=c,d=t(this),p="show"===e.mode,f=d.show().css("visibility","hidden").offset(),g=Math.ceil(d.outerWidth()/u),m=Math.ceil(d.outerHeight()/c),v=[];for(s=0;s<c;s++)for(r=f.top+s*m,h=s-(c-1)/2,o=0;o<u;o++)a=f.left+o*g,l=o-(u-1)/2,d.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*g,top:-s*m}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g,height:m,left:a+(p?l*g:0),top:r+(p?h*m:0),opacity:p?0:1}).animate({left:a+(p?0:l*g),top:r+(p?0:h*m),opacity:p?1:0},e.duration||500,e.easing,n)}),t.effects.define("fade","toggle",function(e,i){var n="show"===e.mode;t(this).css("opacity",n?0:1).animate({opacity:n?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var n=t(this),s=e.mode,o="show"===s,a="hide"===s,r=e.size||15,l=/([0-9]+)%/.exec(r),h=e.horizFirst?["right","bottom"]:["bottom","right"],c=e.duration/2,u=t.effects.createPlaceholder(n),d=n.cssClip(),p={clip:t.extend({},d)},f={clip:t.extend({},d)},g=[d[h[0]],d[h[1]]],m=n.queue().length;l&&(r=parseInt(l[1],10)/100*g[a?0:1]),p.clip[h[0]]=r,f.clip[h[0]]=r,f.clip[h[1]]=0,o&&(n.cssClip(f.clip),u&&u.css(t.effects.clipToBox(f)),f.clip=d),n.queue(function(i){u&&u.animate(t.effects.clipToBox(p),c,e.easing).animate(t.effects.clipToBox(f),c,e.easing),i()}).animate(p,c,e.easing).animate(f,c,e.easing).queue(i),t.effects.unshift(n,m,4)}),t.effects.define("highlight","show",function(e,i){var n=t(this),s={backgroundColor:n.css("backgroundColor")};"hide"===e.mode&&(s.opacity=0),t.effects.saveStyle(n),n.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(s,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var n,s,o,a=t(this),r=["fontSize"],l=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),v=e.from||m,b=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=v,v=b,b=o),s={from:{y:v.height/m.height,x:v.width/m.width},to:{y:b.height/m.height,x:b.width/m.width}},"box"!==d&&"both"!==d||(s.from.y!==s.to.y&&(v=t.effects.setTransition(a,l,s.from.y,v),b=t.effects.setTransition(a,l,s.to.y,b)),s.from.x!==s.to.x&&(v=t.effects.setTransition(a,h,s.from.x,v),b=t.effects.setTransition(a,h,s.to.x,b))),"content"!==d&&"both"!==d||s.from.y!==s.to.y&&(v=t.effects.setTransition(a,r,s.from.y,v),b=t.effects.setTransition(a,r,s.to.y,b)),p&&(n=t.effects.getBaseline(p,m),v.top=(m.outerHeight-v.outerHeight)*n.y+g.top,v.left=(m.outerWidth-v.outerWidth)*n.x+g.left,b.top=(m.outerHeight-b.outerHeight)*n.y+g.top,b.left=(m.outerWidth-b.outerWidth)*n.x+g.left),a.css(v),"content"!==d&&"both"!==d||(l=l.concat(["marginTop","marginBottom"]).concat(r),h=h.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),n=t.effects.scaledDimensions(i),o={height:n.height*s.from.y,width:n.width*s.from.x,outerHeight:n.outerHeight*s.from.y,outerWidth:n.outerWidth*s.from.x},a={height:n.height*s.to.y,width:n.width*s.to.x,outerHeight:n.height*s.to.y,outerWidth:n.width*s.to.x};s.from.y!==s.to.y&&(o=t.effects.setTransition(i,l,s.from.y,o),a=t.effects.setTransition(i,l,s.to.y,a)),s.from.x!==s.to.x&&(o=t.effects.setTransition(i,h,s.from.x,o),a=t.effects.setTransition(i,h,s.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(b,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===b.opacity&&a.css("opacity",v.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var n=t(this),s=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==s?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(n),to:t.effects.scaledDimensions(n,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var n=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,n,i)}),t.effects.define("pulsate","show",function(e,i){var n=t(this),s=e.mode,o="show"===s,a=o||"hide"===s,r=2*(e.times||5)+(a?1:0),l=e.duration/r,h=0,c=1,u=n.queue().length;for(!o&&n.is(":visible")||(n.css("opacity",0).show(),h=1);c<r;c++)n.animate({opacity:h},l,e.easing),h=1-h;n.animate({opacity:h},l,e.easing),n.queue(i),t.effects.unshift(n,u,r+1)}),t.effects.define("shake",function(e,i){var n=1,s=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,l=2*r+1,h=Math.round(e.duration/l),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=s.queue().length;for(t.effects.createPlaceholder(s),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,s.animate(d,h,e.easing);n<r;n++)s.animate(p,h,e.easing).animate(f,h,e.easing);s.animate(p,h,e.easing).animate(d,h/2,e.easing).queue(i),t.effects.unshift(s,g,l+1)}),t.effects.define("slide","show",function(e,i){var n,s,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,l=e.direction||"left",h="up"===l||"down"===l?"top":"left",c="up"===l||"left"===l,u=e.distance||o["top"===h?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),n=o.cssClip(),s=o.position()[h],d[h]=(c?-1:1)*u+s,d.clip=o.cssClip(),d.clip[a[l][1]]=d.clip[a[l][0]],"show"===r&&(o.cssClip(d.clip),o.css(h,d[h]),d.clip=n,d[h]=s),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),!1!==t.uiBackCompat&&t.effects.define("transfer",function(e,i){t(this).transfer(e,i)}),t.ui.focusable=function(e,i){var n,s,o,a,r,l=e.nodeName.toLowerCase();return"area"===l?(s=(n=e.parentNode).name,!(!e.href||!s||"map"!==n.nodeName.toLowerCase())&&(o=t("img[usemap='#"+s+"']")).length>0&&o.is(":visible")):(/^(input|select|textarea|button|object)$/.test(l)?(a=!e.disabled)&&(r=t(e).closest("fieldset")[0])&&(a=!r.disabled):a="a"===l&&e.href||i,a&&t(e).is(":visible")&&function(t){for(var e=t.css("visibility");"inherit"===e;)e=(t=t.parent()).css("visibility");return"hidden"!==e}(t(e)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function n(e,i,n,o){return t.each(s,function(){i-=parseFloat(t.css(e,"padding"+this))||0,n&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var s="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,n(this,e)+"px")})},t.fn["outer"+i]=function(e,s){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,n(this,e,!0,s)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,n,s,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(s=this.eq(0).parents("label"),(n=this.attr("id"))&&(o=(e=this.eq(0).parents().last()).add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(n)+"']",s=s.add(o.find(i).addBack(i))),this.pushStack(s))},t.fn.scrollParent=function(e){var i=this.css("position"),n="absolute"===i,s=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return(!n||"static"!==e.css("position"))&&s.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),n=null!=i;return(!n||i>=0)&&t.ui.focusable(e,n)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,n=this.options.icons;n&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+n.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,n.header)._addClass(i,null,n.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,n=this.headers.length,s=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(s+1)%n];break;case i.LEFT:case i.UP:o=this.headers[(s-1+n)%n];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[n-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=t()):!1===e.active?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,n=i.heightStyle,s=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),n=e.next(),s=n.uniqueId().attr("id");e.attr("aria-controls",s),n.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===n?(e=s.height(),this.element.siblings(":visible").each(function(){var i=t(this),n=i.css("position");"absolute"!==n&&"fixed"!==n&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,n,s=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],l=r&&s.collapsible,h=l?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:l?t():a,newPanel:h};e.preventDefault(),r&&!s.collapsible||!1===this._trigger("beforeActivate",e,u)||(s.active=!l&&this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),s.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,s.icons.activeHeader)._addClass(i,null,s.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),s.icons&&(n=a.children(".ui-accordion-header-icon"),this._removeClass(n,null,s.icons.header)._addClass(n,null,s.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,n=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=n,this.options.animate?this._animate(i,n,e):(n.hide(),i.show(),this._toggleComplete(e)),n.attr({"aria-hidden":"true"}),n.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&n.length?n.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var n,s,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=h&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(s=u),s=s||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(n=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:s,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:o,easing:s,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===l&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(n-e.outerHeight()-r),r=0)}})):e.animate(this.hideProps,o,s,d):t.animate(this.showProps,o,s,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),n=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&n.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),n=t(e.currentTarget);i[0]===n[0]&&(this._removeClass(n.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,n))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]))&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),e.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,n,s,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,n=this.previousFilter||"",o=!1,s=e.keyCode>=96&&e.keyCode<=105?(e.keyCode-96).toString():String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),s===n?o=!0:s=n+s,i=this._filterMenuItems(s),(i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i).length||(s=String.fromCharCode(e.keyCode),i=this._filterMenuItems(s)),i.length?(this.focus(e,i),this.previousFilter=s,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,n,s,o=this,a=this.options.icons.submenu,r=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),i=r.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),n=t("<span>").data("ui-menu-submenu-caret",!0);o._addClass(n,"ui-menu-icon","ui-icon "+a),i.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(i,"ui-menu","ui-widget ui-widget-content ui-front"),(e=r.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var e=t(this);o._isDivider(e)&&o._addClass(e,"ui-menu-divider","ui-widget-content")}),s=(n=e.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(s,"ui-menu-item-wrapper"),e.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,n,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),n=this.active.children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",n.attr("id")),s=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,n,s,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,n=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,s=e.offset().top-this.activeMenu.offset().top-i-n,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),s<0?this.activeMenu.scrollTop(o+s):s+r>a&&this.activeMenu.scrollTop(o+s-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var n=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));n.length||(n=this.element),this._close(n),this.blur(e),this._removeClass(n.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=n},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var n;this.active&&(n="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),n&&n.length&&this.active||(n=this.activeMenu.find(this.options.items)[e]()),this.focus(i,n)},nextPage:function(e){var i,n,s;this.active?this.isLastItem()||(this._hasScroll()?(n=this.active.offset().top,s=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-n-s<0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())):this.next(e)},previousPage:function(e){var i,n,s;this.active?this.isFirstItem()||(this._hasScroll()?(n=this.active.offset().top,s=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-n+s>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())):this.next(e)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),n=new RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return n.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,n,s=this.element[0].nodeName.toLowerCase(),o="textarea"===s,a="input"===s;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(s){if(this.element.prop("readOnly"))return e=!0,n=!0,void(i=!0);e=!1,n=!1,i=!1;var o=t.ui.keyCode;switch(s.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",s);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",s);break;case o.UP:e=!0,this._keyEvent("previous",s);break;case o.DOWN:e=!0,this._keyEvent("next",s);break;case o.ENTER:this.menu.active&&(e=!0,s.preventDefault(),this.menu.select(s));break;case o.TAB:this.menu.active&&this.menu.select(s);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(s),s.preventDefault());break;default:i=!0,this._searchTimeout(s)}},keypress:function(n){if(e)return e=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||n.preventDefault());if(!i){var s=t.ui.keyCode;switch(n.keyCode){case s.PAGE_UP:this._move("previousPage",n);break;case s.PAGE_DOWN:this._move("nextPage",n);break;case s.UP:this._keyEvent("previous",n);break;case s.DOWN:this._keyEvent("next",n)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),this._change(t))}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var n,s;if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)});s=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:s})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value),(n=i.item.attr("aria-label")||s.value)&&t.trim(n).length&&(this.liveRegion.children().hide(),t("<div>").text(n).appendTo(this.liveRegion))},menuselect:function(e,i){var n=i.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=n})),!1!==this._trigger("select",e,{item:n})&&this._value(n.value),this.term=this._value(),this.close(e),this.selectedItem=n}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,n=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,n){n(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,s){n.xhr&&n.xhr.abort(),n.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){s(t)},error:function(){s([])}})}):this.source=this.options.source},_searchTimeout:function(t){
clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),n=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;e&&(!e||i||n)||(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),--this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var n=this;t.each(i,function(t,i){n._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e):void this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var n=new RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return n.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}});var c,u=(t.ui.autocomplete,/ui-corner-([a-z]){2,6}/g);t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(n,s){var o,a={};if(s)return"controlgroupLabel"===n?((o=e.element.find(s)).each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),void(i=i.concat(o.get()))):void(t.fn[n]&&(a=e["_"+n+"Options"]?e["_"+n+"Options"]("middle"):{classes:{}},e.element.find(s).each(function(){var s=t(this),o=s[n]("instance"),r=t.widget.extend({},a);if("button"!==n||!s.parent(".ui-spinner").length){o||(o=s[n]()[n]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),s[n](r);var l=s[n]("widget");t.data(l[0],"ui-controlgroup-data",o||s[n]("instance")),i.push(l[0])}})))}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this).data("ui-controlgroup-data");i&&i[e]&&i[e]()})},_updateCornerClass:function(t,e){var i=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,i)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,n={classes:{}};return n.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],n},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:!!e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var n={};return t.each(e,function(s){var o=i.options.classes[s]||"";o=t.trim(o.replace(u,"")),n[s]=(o+" "+e[s]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,n){var s=e[n]().data("ui-controlgroup-data");if(s&&i["_"+s.widgetName+"Options"]){var o=i["_"+s.widgetName+"Options"](1===e.length?"only":n);o.classes=i._resolveClassesValues(o.classes,s),s.element[s.widgetName](o)}else i._updateCornerClass(e[n](),n)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,n=this,s=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){n.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(s.label=this.originalLabel),null!=(e=this.element[0].disabled)&&(s.disabled=e),s},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e=this.element[0].name,i="input[name='"+t.ui.escapeSelector(e)+"']";return e?(this.form.length?t(this.form[0].elements).filter(i):t(i).filter(function(){return 0===t(this).form().length})).not(this.element):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var n="iconPosition"!==e,s=n?this.options.iconPosition:i,o="top"===s||"bottom"===s;this.icon?n&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),n&&this._addClass(this.icon,null,i),this._attachIcon(s),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==t.uiBackCompat&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"!==t?("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments)):this._super("showLabel",e)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}}),t.extend(e.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return s(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var n,s,o;s="div"===(n=e.nodeName.toLowerCase())||"span"===n,e.id||(this.uuid+=1,e.id="dp"+this.uuid),(o=this._newInst(t(e),s)).settings=t.extend({},i||{}),"input"===n?this._connectDatepicker(e,o):s&&this._inlineDatepicker(e,o)},_newInst:function(e,n){return{id:e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:n,dpDiv:n?i(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var n=t(e);i.append=t([]),i.trigger=t([]),n.hasClass(this.markerClassName)||(this._attachments(n,i),n.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var n,s,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),"focus"!==(n=this._get(i,"showOn"))&&"both"!==n||e.on("focus",this._showDatepicker),"button"!==n&&"both"!==n||(s=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:s,title:s}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:s,title:s}):s)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,n,s,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,n=0,s=0;s<t.length;s++)t[s].length>i&&(i=t[s].length,n=s);return n},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var n=t(e);n.hasClass(this.markerClassName)||(n.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,n,o,a){var r,l,h,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),(d=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},t.data(this._dialogInput[0],"datepicker",d)),s(d.settings,o||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(l=document.documentElement.clientWidth,h=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+c,h/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=n,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,n=t(e),s=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(s.append.remove(),s.trigger.remove(),n.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==i&&"span"!==i||n.removeClass(this.markerClassName).empty(),c===s&&(c=null))},_enableDatepicker:function(e){var i,n,s=t(e),o=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,n,s=t(e),o=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,n){var o,a,r,l,h=this._getInst(e);if(2===arguments.length&&"string"==typeof i)return"defaults"===i?t.extend({},t.datepicker._defaults):h?"all"===i?t.extend({},h.settings):this._get(h,i):null;o=i||{},"string"==typeof i&&((o={})[i]=n),h&&(this._curInst===h&&this._hideDatepicker(),a=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(h,"min"),l=this._getMinMaxDate(h,"max"),s(h.settings,o),null!==r&&void 0!==o.dateFormat&&void 0===o.minDate&&(h.settings.minDate=this._formatDate(h,r)),null!==l&&void 0!==o.dateFormat&&void 0===o.maxDate&&(h.settings.maxDate=this._formatDate(h,l)),"disabled"in o&&(o.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),h),this._autoSize(h),this._setDate(h,a),this._updateAlternate(h),this._updateDatepicker(h))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,n,s,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return(s=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv))[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,s[0]),(i=t.datepicker._get(o,"onSelect"))?(n=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[n,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,n,s=t.datepicker._getInst(e.target);if(t.datepicker._get(s,"constrainInput"))return i=t.datepicker._possibleChars(t.datepicker._get(s,"dateFormat")),n=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||n<" "||!i||i.indexOf(n)>-1},_doKeyUp:function(e){var i=t.datepicker._getInst(e.target);if(i.input.val()!==i.lastVal)try{t.datepicker.parseDate(t.datepicker._get(i,"dateFormat"),i.input?i.input.val():null,t.datepicker._getFormatConfig(i))&&(t.datepicker._setDateFromField(i),t.datepicker._updateAlternate(i),t.datepicker._updateDatepicker(i))}catch(t){}return!0},_showDatepicker:function(e){var i,n,o,a,r,l,h;"input"!==(e=e.target||e).nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),t.datepicker._isDisabledDatepicker(e)||t.datepicker._lastInput===e||(i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),!1!==(o=(n=t.datepicker._get(i,"beforeShow"))?n.apply(e,[e,i]):{})&&(s(i.settings,o),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),a=!1,t(e).parents().each(function(){return!(a|="fixed"===t(this).css("position"))}),r={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),r=t.datepicker._checkOffset(i,r,a),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":a?"fixed":"absolute",display:"none",left:r.left+"px",top:r.top+"px"}),i.inline||(l=t.datepicker._get(i,"showAnim"),h=t.datepicker._get(i,"duration"),i.dpDiv.css("z-index",function(t){for(var e,i;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?i.dpDiv.show(l,t.datepicker._get(i,"showOptions"),h):i.dpDiv[l||"show"](l?h:null),t.datepicker._shouldFocusInput(i)&&i.input.trigger("focus"),t.datepicker._curInst=i)))},_updateDatepicker:function(e){this.maxRows=4,c=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),o=s[1],a=e.dpDiv.find("."+this._dayOverClass+" a");a.length>0&&n.apply(a.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),o>1&&e.dpDiv.addClass("ui-datepicker-multi-"+o).css("width",17*o+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,n){var s=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(n?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(n?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?s-a:0,i.left-=n&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=n&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+s>l&&l>s?Math.abs(i.left+s-l):0),i.top-=Math.min(i.top,i.top+o>h&&h>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,n=this._getInst(e),s=this._get(n,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[s?"previousSibling":"nextSibling"];return[(i=t(e).offset()).left,i.top]},_hideDatepicker:function(e){var i,n,s,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),n=this._get(a,"duration"),s=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),n,s):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?n:null,s),i||s(),this._datepickerShowing=!1,(o=this._get(a,"onClose"))&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),n=t.datepicker._getInst(i[0]);(i[0].id===t.datepicker._mainDivId||0!==i.parents("#"+t.datepicker._mainDivId).length||i.hasClass(t.datepicker.markerClassName)||i.closest("."+t.datepicker._triggerClass).length||!t.datepicker._datepickerShowing||t.datepicker._inDialog&&t.blockUI)&&(!i.hasClass(t.datepicker.markerClassName)||t.datepicker._curInst===n)||t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,n){var s=t(e),o=this._getInst(s[0]);this._isDisabledDatepicker(s[0])||(this._adjustInstDate(o,i+("M"===n?this._get(o,"showCurrentAtPos"):0),n),this._updateDatepicker(o))},_gotoToday:function(e){var i,n=t(e),s=this._getInst(n[0]);this._get(s,"gotoCurrent")&&s.currentDay?(s.selectedDay=s.currentDay,s.drawMonth=s.selectedMonth=s.currentMonth,s.drawYear=s.selectedYear=s.currentYear):(i=new Date,s.selectedDay=i.getDate(),s.drawMonth=s.selectedMonth=i.getMonth(),s.drawYear=s.selectedYear=i.getFullYear()),this._notifyChange(s),this._adjustDate(n)},_selectMonthYear:function(e,i,n){
var s=t(e),o=this._getInst(s[0]);o["selected"+("M"===n?"Month":"Year")]=o["draw"+("M"===n?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(s)},_selectDay:function(e,i,n,s){var o,a=t(e);t(s).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||((o=this._getInst(a[0])).selectedDay=o.currentDay=t("a",s).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=n,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var n,s=t(e),o=this._getInst(s[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),(n=this._get(o,"onSelect"))?n.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,n,s,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),n=this._getDate(e),s=this.formatDate(i,n,this._getFormatConfig(e)),t(o).val(s))},noWeekends:function(t){var e=t.getDay();return[e>0&&e<6,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,n){if(null==e||null==i)throw"Invalid arguments";if(""===(i="object"==typeof i?i.toString():i+""))return null;var s,o,a,r,l=0,h=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof h?h:(new Date).getFullYear()%100+parseInt(h,10),u=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,d=(n?n.dayNames:null)||this._defaults.dayNames,p=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,f=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,v=-1,b=-1,_=!1,y=function(t){var i=s+1<e.length&&e.charAt(s+1)===t;return i&&s++,i},w=function(t){var e=y(t),n="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,s=new RegExp("^\\d{"+("y"===t?n:1)+","+n+"}"),o=i.substring(l).match(s);if(!o)throw"Missing number at position "+l;return l+=o[0].length,parseInt(o[0],10)},x=function(e,n,s){var o=-1,a=t.map(y(e)?s:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var n=e[1];if(i.substr(l,n.length).toLowerCase()===n.toLowerCase())return o=e[0],l+=n.length,!1}),-1!==o)return o+1;throw"Unknown name at position "+l},C=function(){if(i.charAt(l)!==e.charAt(s))throw"Unexpected literal at position "+l;l++};for(s=0;s<e.length;s++)if(_)"'"!==e.charAt(s)||y("'")?C():_=!1;else switch(e.charAt(s)){case"d":v=w("d");break;case"D":x("D",u,d);break;case"o":b=w("o");break;case"m":m=w("m");break;case"M":m=x("M",p,f);break;case"y":g=w("y");break;case"@":g=(r=new Date(w("@"))).getFullYear(),m=r.getMonth()+1,v=r.getDate();break;case"!":g=(r=new Date((w("!")-this._ticksTo1970)/1e4)).getFullYear(),m=r.getMonth()+1,v=r.getDate();break;case"'":y("'")?C():_=!0;break;default:C()}if(l<i.length&&(a=i.substr(l),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():g<100&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(g<=c?0:-100)),b>-1)for(m=1,v=b;!(v<=(o=this._getDaysInMonth(g,m-1)));)m++,v-=o;if((r=this._daylightSavingAdjust(new Date(g,m-1,v))).getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";var n,s=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,l=function(e){var i=n+1<t.length&&t.charAt(n+1)===e;return i&&n++,i},h=function(t,e,i){var n=""+e;if(l(t))for(;n.length<i;)n="0"+n;return n},c=function(t,e,i,n){return l(t)?n[e]:i[e]},u="",d=!1;if(e)for(n=0;n<t.length;n++)if(d)"'"!==t.charAt(n)||l("'")?u+=t.charAt(n):d=!1;else switch(t.charAt(n)){case"d":u+=h("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),s,o);break;case"o":u+=h("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=h("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=l("y")?e.getFullYear():(e.getFullYear()%100<10?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":l("'")?u+="'":d=!0;break;default:u+=t.charAt(n)}return u},_possibleChars:function(t){var e,i="",n=!1,s=function(i){var n=e+1<t.length&&t.charAt(e+1)===i;return n&&e++,n};for(e=0;e<t.length;e++)if(n)"'"!==t.charAt(e)||s("'")?i+=t.charAt(e):n=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":s("'")?i+="'":n=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),n=t.lastVal=t.input?t.input.val():null,s=this._getDefaultDate(t),o=s,a=this._getFormatConfig(t);try{o=this.parseDate(i,n,a)||s}catch(t){n=e?"":n}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=n?o.getDate():0,t.currentMonth=n?o.getMonth():0,t.currentYear=n?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,n){var s=null==i||""===i?n:"string"==typeof i?function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(t){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,s=n.getFullYear(),o=n.getMonth(),a=n.getDate(),r=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=r.exec(i);l;){switch(l[2]||"d"){case"d":case"D":a+=parseInt(l[1],10);break;case"w":case"W":a+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(s,o));break;case"y":case"Y":s+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(s,o))}l=r.exec(i)}return new Date(s,o,a)}(i):"number"==typeof i?isNaN(i)?n:function(t){var e=new Date;return e.setDate(e.getDate()+t),e}(i):new Date(i.getTime());return(s=s&&"Invalid Date"===s.toString()?n:s)&&(s.setHours(0),s.setMinutes(0),s.setSeconds(0),s.setMilliseconds(0)),this._daylightSavingAdjust(s)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var n=!e,s=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),s===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(n?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),n="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(n,-i,"M")},next:function(){t.datepicker._adjustDate(n,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(n)},selectDay:function(){return t.datepicker._selectDay(n,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(n,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(n,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,n,s,o,a,r,l,h,c,u,d,p,f,g,m,v,b,_,y,w,x,C,k,T,D,S,I,P,E,M,A,O,N,H,z,L,W,R,$=new Date,j=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth(),$.getDate())),F=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),U=this._get(t,"navigationAsDateFormat"),Y=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),K=this._get(t,"stepMonths"),X=1!==Y[0]||1!==Y[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,tt=t.drawYear;if(Z<0&&(Z+=12,tt--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-Y[0]*Y[1]+1,J.getDate())),e=Q&&e<Q?Q:e;this._daylightSavingAdjust(new Date(tt,Z,1))>e;)--Z<0&&(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=U?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-K,1)),this._getFormatConfig(t)):i,n=this._canAdjustMonth(t,-1,tt,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"e":"w")+"'>"+i+"</span></a>",s=this._get(t,"nextText"),s=U?this.formatDate(s,this._daylightSavingAdjust(new Date(tt,Z+K,1)),this._getFormatConfig(t)):s,o=this._canAdjustMonth(t,1,tt,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+s+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"w":"e")+"'>"+s+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+s+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"w":"e")+"'>"+s+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:j,a=U?this.formatDate(a,r,this._getFormatConfig(t)):a,l=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",h=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(F?l:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(F?"":l)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),b=this._get(t,"selectOtherMonths"),_=this._getDefaultDate(t),y="",x=0;x<Y[0];x++){for(C="",this.maxRows=4,k=0;k<Y[1];k++){if(T=this._daylightSavingAdjust(new Date(tt,Z,t.selectedDay)),D=" ui-corner-all",S="",X){if(S+="<div class='ui-datepicker-group",Y[1]>1)switch(k){case 0:S+=" ui-datepicker-group-first",D=" ui-corner-"+(F?"right":"left");break;case Y[1]-1:S+=" ui-datepicker-group-last",D=" ui-corner-"+(F?"left":"right");break;default:S+=" ui-datepicker-group-middle",D=""}S+="'>"}for(S+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+D+"'>"+(/all|left/.test(D)&&0===x?F?o:n:"")+(/all|right/.test(D)&&0===x?F?n:o:"")+this._generateMonthYearHeader(t,Z,tt,Q,J,x>0||k>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead><tr>",I=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;w<7;w++)I+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+"><span title='"+d[P=(w+c)%7]+"'>"+p[P]+"</span></th>";for(S+=I+"</tr></thead><tbody>",E=this._getDaysInMonth(tt,Z),tt===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,E)),M=(this._getFirstDayOfMonth(tt,Z)-c+7)%7,A=Math.ceil((M+E)/7),O=X&&this.maxRows>A?this.maxRows:A,this.maxRows=O,N=this._daylightSavingAdjust(new Date(tt,Z,1-M)),H=0;H<O;H++){for(S+="<tr>",z=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(N)+"</td>":"",w=0;w<7;w++)L=m?m.apply(t.input?t.input[0]:null,[N]):[!0,""],R=(W=N.getMonth()!==Z)&&!b||!L[0]||Q&&N<Q||J&&N>J,z+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(N.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||_.getTime()===N.getTime()&&_.getTime()===T.getTime()?" "+this._dayOverClass:"")+(R?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+L[1]+(N.getTime()===G.getTime()?" "+this._currentClass:"")+(N.getTime()===j.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!L[2]?"":" title='"+L[2].replace(/'/g,"&#39;")+"'")+(R?"":" data-handler='selectDay' data-event='click' data-month='"+N.getMonth()+"' data-year='"+N.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":R?"<span class='ui-state-default'>"+N.getDate()+"</span>":"<a class='ui-state-default"+(N.getTime()===j.getTime()?" ui-state-highlight":"")+(N.getTime()===G.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+N.getDate()+"</a>")+"</td>",N.setDate(N.getDate()+1),N=this._daylightSavingAdjust(N);S+=z+"</tr>"}++Z>11&&(Z=0,tt++),C+=S+="</tbody></table>"+(X?"</div>"+(Y[0]>0&&k===Y[1]-1?"<div class='ui-datepicker-row-break'></div>":""):"")}y+=C}return y+=h,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,n,s,o,a,r){var l,h,c,u,d,p,f,g,m=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),b=this._get(t,"showMonthAfterYear"),_="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=n&&n.getFullYear()===i,h=s&&s.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!l||c>=n.getMonth())&&(!h||c<=s.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(b||(_+=y+(!o&&m&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!v)_+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),f=(p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e})(u[0]),g=Math.max(f,p(u[1]||"")),f=n?Math.max(f,n.getFullYear()):f,g=s?Math.min(g,s.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";f<=g;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",_+=t.yearshtml,t.yearshtml=null}return _+=this._get(t,"yearSuffix"),b&&(_+=(!o&&m&&v?"":"&#xa0;")+y),_+"</div>"},_adjustInstDate:function(t,e,i){var n=t.selectedYear+("Y"===i?e:0),s=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(n,s))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(n,s,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),s=i&&e<i?i:e;return n&&s>n?n:s},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,n){var s=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,n+(e<0?e:s[0]*s[1]),1));return e<0&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,n,s=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),n=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=n),i[1].match(/[+\-].*/)&&(r+=n)),(!s||e.getTime()>=s.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||e.getFullYear()<=r)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,n){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var s=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(n,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),s,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new e,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1";var d=(t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),!1);t(document).on("mouseup",function(){d=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){if(!0===t.data(i.target,e.widgetName+".preventClickEvent"))return t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,n=1===e.which,s=!("string"!=typeof this.options.cancel||!e.target.nodeName)&&t(e.target).closest(this.options.cancel).length;return!(n&&!s&&this._mouseCapture(e)&&(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(e),!this._mouseStarted)?(e.preventDefault(),0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),d=!0,0)))}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||document.documentMode<9)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,e),this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,d=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,n){var s,o=t.ui[e].prototype;for(s in n)o.plugins[s]=o.plugins[s]||[],o.plugins[s].push([i,n[s]])},call:function(t,e,i,n){var s,o=t.plugins[e];if(o&&(n||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(s=0;s<o.length;s++)t.options[o[s][0]]&&o[s][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(e){var i=this.options;return!(this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0||(this.handle=this._getHandle(e),!this.handle||(this._blurActiveElement(e),this._blockFrames(!0===i.iframeFix?"iframe":i.iframeFix),0)))},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]);t(e.target).closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),!1===this._trigger("start",e)?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var n=this._uiHash();if(!1===this._trigger("drag",e,n))return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=n.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,n=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(n=t.ui.ddmanager.drop(this,e)),this.dropped&&(n=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!n||"valid"===this.options.revert&&n||!0===this.options.revert||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,n)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==i._trigger("stop",e)&&i._clear()}):!1!==this._trigger("stop",e)&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return!this.options.handle||!!t(e.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,n=t.isFunction(i.helper),s=n?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),n&&s[0]===this.element[0]&&this._setPositionRelative(),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,n,s=this.options,o=this.document[0];return this.relativeContainer=null,s.containment?"window"===s.containment?void(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):"document"===s.containment?void(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):s.containment.constructor===Array?void(this.containment=s.containment):("parent"===s.containment&&(s.containment=this.helper[0].parentNode),void((n=(i=t(s.containment))[0])&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(n.scrollWidth,n.offsetWidth):n.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(n.scrollHeight,n.offsetHeight):n.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i))):void(this.containment=null)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,n=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,n,s,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),l=t.pageX,h=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(n=this.relativeContainer.offset(),i=[this.containment[0]+n.left,this.containment[1]+n.top,this.containment[2]+n.left,this.containment[3]+n.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),a.grid&&(s=a.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,h=i?s-this.offset.click.top>=i[1]||s-this.offset.click.top>i[3]?s:s-this.offset.click.top>=i[1]?s-a.grid[1]:s+a.grid[1]:s,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(l=this.originalPageX),
"x"===a.axis&&(h=this.originalPageY)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,n){return n=n||this._uiHash(),t.ui.plugin.call(this,e,[i,n,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),n.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,n)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,n){var s=t.extend({},i,{item:n.element});n.sortables=[],t(n.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(n.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,s))})},stop:function(e,i,n){var s=t.extend({},i,{item:n.element});n.cancelHelperRemoval=!1,t.each(n.sortables,function(){var t=this;t.isOver?(t.isOver=0,n.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,s))})},drag:function(e,i,n){t.each(n.sortables,function(){var s=!1,o=this;o.positionAbs=n.positionAbs,o.helperProportions=n.helperProportions,o.offset.click=n.offset.click,o._intersectsWith(o.containerCache)&&(s=!0,t.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(s=!1),s})),s?(o.isOver||(o.isOver=1,n._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=n.offset.click.top,o.offset.click.left=n.offset.click.left,o.offset.parent.left-=n.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=n.offset.parent.top-o.offset.parent.top,n._trigger("toSortable",e),n.dropped=o.element,t.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,o.fromOutside=n),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(n._parent),n._refreshOffsets(e),i.position=n._generatePosition(e,!0),n._trigger("fromSortable",e),n.dropped=!1,t.each(n.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,n){var s=t("body"),o=n.options;s.css("cursor")&&(o._cursor=s.css("cursor")),s.css("cursor",o.cursor)},stop:function(e,i,n){var s=n.options;s._cursor&&t("body").css("cursor",s._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,n){var s=t(i.helper),o=n.options;s.css("opacity")&&(o._opacity=s.css("opacity")),s.css("opacity",o.opacity)},stop:function(e,i,n){var s=n.options;s._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,n){var s=n.options,o=!1,a=n.scrollParentNotHidden[0],r=n.document[0];a!==r&&"HTML"!==a.tagName?(s.axis&&"x"===s.axis||(n.overflowOffset.top+a.offsetHeight-e.pageY<s.scrollSensitivity?a.scrollTop=o=a.scrollTop+s.scrollSpeed:e.pageY-n.overflowOffset.top<s.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(n.overflowOffset.left+a.offsetWidth-e.pageX<s.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+s.scrollSpeed:e.pageX-n.overflowOffset.left<s.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(e.pageY-t(r).scrollTop()<s.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-s.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<s.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(e.pageX-t(r).scrollLeft()<s.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-s.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<s.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+s.scrollSpeed)))),!1!==o&&t.ui.ddmanager&&!s.dropBehaviour&&t.ui.ddmanager.prepareOffsets(n,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,n){var s=n.options;n.snapElements=[],t(s.snap.constructor!==String?s.snap.items||":data(ui-draggable)":s.snap).each(function(){var e=t(this),i=e.offset();this!==n.element[0]&&n.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,n){var s,o,a,r,l,h,c,u,d,p,f=n.options,g=f.snapTolerance,m=i.offset.left,v=m+n.helperProportions.width,b=i.offset.top,_=b+n.helperProportions.height;for(d=n.snapElements.length-1;d>=0;d--)h=(l=n.snapElements[d].left-n.margins.left)+n.snapElements[d].width,u=(c=n.snapElements[d].top-n.margins.top)+n.snapElements[d].height,v<l-g||m>h+g||_<c-g||b>u+g||!t.contains(n.snapElements[d].item.ownerDocument,n.snapElements[d].item)?(n.snapElements[d].snapping&&n.options.snap.release&&n.options.snap.release.call(n.element,e,t.extend(n._uiHash(),{snapItem:n.snapElements[d].item})),n.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(s=Math.abs(c-_)<=g,o=Math.abs(u-b)<=g,a=Math.abs(l-v)<=g,r=Math.abs(h-m)<=g,s&&(i.position.top=n._convertPositionTo("relative",{top:c-n.helperProportions.height,left:0}).top),o&&(i.position.top=n._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=n._convertPositionTo("relative",{top:0,left:l-n.helperProportions.width}).left),r&&(i.position.left=n._convertPositionTo("relative",{top:0,left:h}).left)),p=s||o||a||r,"outer"!==f.snapMode&&(s=Math.abs(c-b)<=g,o=Math.abs(u-_)<=g,a=Math.abs(l-m)<=g,r=Math.abs(h-v)<=g,s&&(i.position.top=n._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=n._convertPositionTo("relative",{top:u-n.helperProportions.height,left:0}).top),a&&(i.position.left=n._convertPositionTo("relative",{top:0,left:l}).left),r&&(i.position.left=n._convertPositionTo("relative",{top:0,left:h-n.helperProportions.width}).left)),!n.snapElements[d].snapping&&(s||o||a||r||p)&&n.options.snap.snap&&n.options.snap.snap.call(n.element,e,t.extend(n._uiHash(),{snapItem:n.snapElements[d].item})),n.snapElements[d].snapping=s||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,n){var s,o=n.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(s=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",s+e)}),this.css("zIndex",s+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,n){var s=t(i.helper),o=n.options;s.css("zIndex")&&(o._zIndex=s.css("zIndex")),s.css("zIndex",o.zIndex)},stop:function(e,i,n){var s=n.options;s._zIndex&&t(i.helper).css("zIndex",s._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var n=i&&"left"===i?"scrollLeft":"scrollTop",s=!1;return e[n]>0||(e[n]=1,s=e[n]>0,e[n]=0,s)},_create:function(){var e,i=this.options,n=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(n._removeClass("ui-resizable-autohide"),n._handles.show())}).on("mouseleave",function(){i.disabled||n.resizing||(n._addClass("ui-resizable-autohide"),n._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles()}},_setupHandles:function(){var e,i,n,s,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),n=this.handles.split(","),this.handles={},i=0;i<n.length;i++)s="ui-resizable-"+(e=t.trim(n[i])),o=t("<div>"),this._addClass(o,"ui-resizable-handle "+s),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,n,s,o;for(i in e=e||this.element,this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(n=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?n.outerHeight():n.outerWidth(),s=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(s,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,n,s=!1;for(i in this.handles)((n=t(this.handles[i])[0])===e.target||t.contains(n,e.target))&&(s=!0);return!this.options.disabled&&s},_mouseStart:function(e){var i,n,s,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),n=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,n+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:n},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:n},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,n,s=this.originalMousePosition,o=this.axis,a=e.pageX-s.left||0,r=e.pageY-s.top||0,l=this._change[o];return this._updatePrevProperties(),!!l&&(i=l.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),n=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1)},_mouseStop:function(e){this.resizing=!1;var i,n,s,o,a,r,l,h=this.options,c=this;return this._helper&&(s=(n=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=n?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-s},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,l=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,n,s,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),n>o.minHeight&&(o.minHeight=n),i<o.maxWidth&&(o.maxWidth=i),s<o.maxHeight&&(o.maxHeight=s)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,n=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===n&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===n&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,n=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,s=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),n&&(t.width=e.maxWidth),s&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),n&&h&&(t.left=r-e.maxWidth),a&&c&&(t.top=l-e.minHeight),s&&c&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],n=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],s=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(n[e])||0,i[e]+=parseFloat(s[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var n=this.originalSize;return{top:this.originalPosition.top+i,height:n.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,n){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,n]))},sw:function(e,i,n){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,n]))},ne:function(e,i,n){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,n]))},nw:function(e,i,n){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,n]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),n=i.options,s=i._proportionallyResizeElements,o=s.length&&/textarea/i.test(s[0].nodeName),a=o&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:n.animateDuration,easing:n.animateEasing,step:function(){var n={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&t(s[0]).css({width:n.width,height:n.height}),i._updateCache(n),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,n,s,o,a,r,l=t(this).resizable("instance"),h=l.options,c=l.element,u=h.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(l.containerElement=t(d),/document/.test(u)||u===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,n){i[t]=l._num(e.css("padding"+n))}),l.containerOffset=e.offset(),l.containerPosition=e.position(),l.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},n=l.containerOffset,s=l.containerSize.height,o=l.containerSize.width,a=l._hasScroll(d,"left")?d.scrollWidth:o,r=l._hasScroll(d)?d.scrollHeight:s,l.parentData={element:d,left:n.left,top:n.top,width:a,height:r}))},resize:function(e){var i,n,s,o,a=t(this).resizable("instance"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?l.top:0),s=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),s&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-l.left)),n=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-l.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),n+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-n,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,n=e.containerOffset,s=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-s.left-n.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-s.left-n.left,width:l,height:h})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance").options;t(e.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var n=t(this).resizable("instance"),s=n.options,o=n.originalSize,a=n.originalPosition,r={height:n.size.height-o.height||0,width:n.size.width-o.width||0,top:n.position.top-a.top||0,left:n.position.left-a.left||0};t(s.alsoResize).each(function(){var e=t(this),n=t(this).data("ui-resizable-alsoresize"),s={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(n[e]||0)+(r[e]||0);i&&i>=0&&(s[e]=i||null)}),e.css(s)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),!1!==t.uiBackCompat&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),n=i.options,s=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l="number"==typeof n.grid?[n.grid,n.grid]:n.grid,h=l[0]||1,c=l[1]||1,u=Math.round((s.width-o.width)/h)*h,d=Math.round((s.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=n.maxWidth&&n.maxWidth<p,m=n.maxHeight&&n.maxHeight<f,v=n.minWidth&&n.minWidth>p,b=n.minHeight&&n.minHeight>f;n.grid=l,v&&(p+=h),b&&(f+=c),g&&(p-=h),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((f-c<=0||p-h<=0)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-h>0?(i.size.width=p,i.position.left=a.left-u):(p=h-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;i<0&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&!1!==this._trigger("beforeClose",e)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var n=!1,s=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,s);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),n=!0),n&&!i&&this._trigger("focus",e),n},open:function(){var e=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===e||t.contains(this.uiDialog[0],e)||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),void this.close(e);if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),n=i.filter(":first"),s=i.filter(":last");e.target!==s[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==n[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){s.trigger("focus")}),e.preventDefault()):(this._delay(function(){n.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},
_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(t.each(i,function(i,n){var s,o;n=t.isFunction(n)?{click:n,text:i}:n,n=t.extend({type:"button"},n),s=n.click,o={icon:n.icon,iconPosition:n.iconPosition,showLabel:n.showLabel,icons:n.icons,text:n.text},delete n.click,delete n.icon,delete n.iconPosition,delete n.showLabel,delete n.icons,"boolean"==typeof n.text&&delete n.text,t("<button></button>",n).button(o).appendTo(e.uiButtonSet).on("click",function(){s.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,n=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(n,s){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",n,e(s))},drag:function(t,n){i._trigger("drag",t,e(n))},stop:function(s,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();n.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",s,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,n=this.options,s=n.resizable,o=this.uiDialog.css("position"),a="string"==typeof s?s:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:n.maxWidth,maxHeight:n.maxHeight,minWidth:n.minWidth,minHeight:this._minHeight(),handles:a,start:function(n,s){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",n,e(s))},resize:function(t,n){i._trigger("resize",t,e(n))},stop:function(s,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),l=a.top-i.document.scrollTop();n.height=i.uiDialog.height(),n.width=i.uiDialog.width(),n.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" top"+(l>=0?"+":"")+l,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",s,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,n=!1,s={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(n=!0),t in i.resizableRelatedOptions&&(s[t]=e)}),n&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",s)},_setOption:function(e,i){var n,s,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&((n=o.is(":data(ui-draggable)"))&&!i&&o.draggable("destroy"),!n&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&((s=o.is(":data(ui-resizable)"))&&!i&&o.resizable("destroy"),s&&"string"==typeof i&&o.resizable("option","handles",i),s||!1===i||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,n=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),n.minWidth>n.width&&(n.width=n.minWidth),t=this.uiDialog.css({height:"auto",width:n.width}).outerHeight(),e=Math.max(0,n.minHeight-t),i="number"==typeof n.maxHeight?Math.max(0,n.maxHeight-t):"none","auto"===n.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,n.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return!!t(e.target).closest(".ui-dialog").length||!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),!1!==t.uiBackCompat&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,n=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(n)?n:function(t){return t.is(n)},this.proportions=function(){if(!arguments.length)return e||(e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight});e=arguments[0]},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var n=t.ui.ddmanager.droppables[this.options.scope];this._splice(n),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var n=i||t.ui.ddmanager.current,s=!1;return!(!n||(n.currentItem||n.element)[0]===this.element[0])&&(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");if(i.options.greedy&&!i.options.disabled&&i.options.scope===n.options.scope&&i.accept.call(i.element[0],n.currentItem||n.element)&&p(n,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e))return s=!0,!1}),!s&&!!this.accept.call(this.element[0],n.currentItem||n.element)&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(n)),this.element))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var p=t.ui.intersect=function(){function t(t,e,i){return t>=e&&t<e+i}return function(e,i,n,s){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,l=a+e.helperProportions.height,h=i.offset.left,c=i.offset.top,u=h+i.proportions().width,d=c+i.proportions().height;switch(n){case"fit":return h<=o&&r<=u&&c<=a&&l<=d;case"intersect":return h<o+e.helperProportions.width/2&&r-e.helperProportions.width/2<u&&c<a+e.helperProportions.height/2&&l-e.helperProportions.height/2<d;case"pointer":return t(s.pageY,c,i.proportions().height)&&t(s.pageX,h,i.proportions().width);case"touch":return(a>=c&&a<=d||l>=c&&l<=d||a<c&&l>d)&&(o>=h&&o<=u||r>=h&&r<=u||o<h&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(e,i){var n,s,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(n=0;n<o.length;n++)if(!(o[n].options.disabled||e&&!o[n].accept.call(o[n].element[0],e.currentItem||e.element))){for(s=0;s<r.length;s++)if(r[s]===o[n].element[0]){o[n].proportions().height=0;continue t}o[n].visible="none"!==o[n].element.css("display"),o[n].visible&&("mousedown"===a&&o[n]._activate.call(o[n],i),o[n].offset=o[n].element.offset(),o[n].proportions({width:o[n].element[0].offsetWidth,height:o[n].element[0].offsetHeight}))}},drop:function(e,i){var n=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&p(e,this,this.options.tolerance,i)&&(n=this._drop.call(this,i)||n),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),n},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var n,s,o,a=p(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(s=this.options.scope,(o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===s})).length&&((n=t(o[0]).droppable("instance")).greedyChild="isover"===r)),n&&"isover"===r&&(n.isover=!1,n.isout=!0,n._out.call(n,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),n&&"isout"===r&&(n.isout=!1,n.isover=!0,n._over.call(n,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},!1!==t.uiBackCompat&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),n=i.offset(),s={left:n.left-e.elementPos.left,top:n.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:s.left,top:s.top,right:s.left+i.outerWidth(),bottom:s.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,n=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(n.filter,this.element[0]),this._trigger("start",e),t(n.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),n.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var n=t.data(this,"selectable-item");n.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(n.$element,"ui-selected"),n.selected=!1,i._addClass(n.$element,"ui-unselecting"),n.unselecting=!0,i._trigger("unselecting",e,{unselecting:n.element}))}),t(e.target).parents().addBack().each(function(){var n,s=t.data(this,"selectable-item");if(s)return n=!e.metaKey&&!e.ctrlKey||!s.$element.hasClass("ui-selected"),i._removeClass(s.$element,n?"ui-unselecting":"ui-selected")._addClass(s.$element,n?"ui-selecting":"ui-unselecting"),s.unselecting=!n,s.selecting=n,s.selected=n,n?i._trigger("selecting",e,{selecting:s.element}):i._trigger("unselecting",e,{unselecting:s.element}),!1}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,n=this,s=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,l=e.pageY;return o>r&&(i=r,r=o,o=i),a>l&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),h=!1,c={};i&&i.element!==n.element[0]&&(c.left=i.left+n.elementPos.left,c.right=i.right+n.elementPos.left,c.top=i.top+n.elementPos.top,c.bottom=i.bottom+n.elementPos.top,"touch"===s.tolerance?h=!(c.left>r||c.right<o||c.top>l||c.bottom<a):"fit"===s.tolerance&&(h=c.left>o&&c.right<r&&c.top>a&&c.bottom<l),h?(i.selected&&(n._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(n._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(n._addClass(i.$element,"ui-selecting"),i.selecting=!0,n._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(n._removeClass(i.$element,"ui-selecting"),i.selecting=!1,n._addClass(i.$element,"ui-selected"),i.selected=!0):(n._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(n._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),n._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(n._removeClass(i.$element,"ui-selected"),i.selected=!1,n._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,n._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var n=t.data(this,"selectable-item");i._removeClass(n.$element,"ui-unselecting"),n.unselecting=!1,n.startselected=!1,i._trigger("unselected",e,{unselected:n.element})}),t(".ui-selecting",this.element[0]).each(function(){var n=t.data(this,"selectable-item");i._removeClass(n.$element,"ui-selecting")._addClass(n.$element,"ui-selected"),n.selecting=!1,n.selected=!0,n.startselected=!0,i._trigger("selected",e,{selected:n.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,n=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(n).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var n=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&n.index!==e.focusIndex&&(e._trigger("focus",t,{item:n}),e.isOpen||e._select(n,t)),e.focusIndex=n.index,e.button.attr("aria-activedescendant",e.menuItems.eq(n.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var n=this,s="";t.each(i,function(i,o){var a;o.optgroup!==s&&(a=t("<li>",{text:o.optgroup}),n._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),s=o.optgroup),n._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var n=t("<li>"),s=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(n,null,"ui-state-disabled"),this._setText(s,i.label),n.append(s).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,n,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(n="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,n)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&&(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css("width","")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,n=[];e.each(function(e,s){n.push(i._parseOption(t(s),e))}),this.items=n},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,n=this.options,s=this.element.find(".ui-slider-handle"),o=[];for(i=n.values&&n.values.length||1,s.length>i&&(s.slice(i).remove(),s=s.slice(0,i)),e=s.length;e<i;e++)o.push("<span tabindex='0'></span>");this.handles=s.add(t(o.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(!0===e.range&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==e.range&&"max"!==e.range||this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,n,s,o,a,r,l,h=this,c=this.options;return!c.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(i),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(n-h.values(e));(s>i||s===i&&(e===h._lastChangedValue||h.values(e)===c.min))&&(s=i,o=t(this),a=e)}),!1!==this._start(e,a)&&(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),r=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-r.left-o.width()/2,top:e.pageY-r.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,n),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,n,s,o;return"horizontal"===this.orientation?(e=this.elementSize.width,
i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),(n=i/e)>1&&(n=1),n<0&&(n=0),"vertical"===this.orientation&&(n=1-n),s=this._valueMax()-this._valueMin(),o=this._valueMin()+n*s,this._trimAlignValue(o)},_uiHash:function(t,e,i){var n={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(n.value=void 0!==e?e:this.values(t),n.values=i||this.values()),n},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var n,s=this.value(),o=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),s=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(n,i):Math.max(n,i)),o[e]=i),i!==s&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(e,i){var n,s,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),void this._change(null,e);if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(n=this.options.values,s=arguments[0],o=0;o<n.length;o+=1)n[o]=this._trimAlignValue(s[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var n,s=0;switch("range"===e&&!0===this.options.range&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(s=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),n=s-1;n>=0;n--)this._change(null,n);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return this._trimAlignValue(t)},_values:function(t){var e,i,n;if(arguments.length)return e=this.options.values[t],this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(i[n]);return i}return[]},_trimAlignValue:function(t){if(t<=this._valueMin())return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,n=t-i;return 2*Math.abs(i)>=e&&(n+=i>0?e:-e),parseFloat(n.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,n,s,o,a=this.options.range,r=this.options,l=this,h=!this._animateOff&&r.animate,c={};this._hasMultipleValues()?this.handles.each(function(n){i=(l.values(n)-l._valueMin())/(l._valueMax()-l._valueMin())*100,c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),!0===l.options.range&&("horizontal"===l.orientation?(0===n&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===n&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===n&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===n&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(n=this.value(),s=this._valueMin(),o=this._valueMax(),i=o!==s?(n-s)/(o-s)*100:0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,n,s,o=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),!1===this._start(e,o)))return}switch(s=this.options.step,i=n=this._hasMultipleValues()?this.values(o):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(i===this._valueMax())return;n=this._trimAlignValue(i+s);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i===this._valueMin())return;n=this._trimAlignValue(i-s)}this._slide(e,o,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var n=null,s=!1,o=this;return!(this.reverting||this.options.disabled||"static"===this.options.type||(this._refreshItems(e),t(e.target).parents().each(function(){if(t.data(this,o.widgetName+"-item")===o)return n=t(this),!1}),t.data(e.target,o.widgetName+"-item")===o&&(n=t(e.target)),!n||this.options.handle&&!i&&(t(this.options.handle,n).find("*").addBack().each(function(){this===e.target&&(s=!0)}),!s)||(this.currentItem=n,this._removeCurrentsFromItems(),0)))},_mouseStart:function(e,i,n){var s,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!n)for(s=this.containers.length-1;s>=0;s--)this.containers[s]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,n,s,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),!1!==r&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=(n=this.items[i]).item[0],(o=this._intersectsWithPointer(n))&&n.instance===this.currentContainer&&!(s===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===s||t.contains(this.placeholder[0],s)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],s))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(n))break;this._rearrange(e,n),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var n=this,s=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=s.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=s.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){n._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),n=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&n.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!n.length&&e.key&&n.push(e.key+"="),n.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),n=[];return e=e||{},i.each(function(){n.push(t(e.item||this).attr(e.attribute||"id")||"")}),n},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,n=this.positionAbs.top,s=n+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||n+h>r&&n+h<l,d="y"===this.options.axis||e+c>o&&e+c<a,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<n+this.helperProportions.height/2&&s-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e,i,n="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!n||!s)&&(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),s=this._getDragHorizontalDirection();return this.floating&&s?"right"===s&&i||"left"===s&&!i:n&&("down"===n&&e||"up"===n&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var n,s,o,a,r=[],l=[],h=this._connectWith();if(h&&e)for(n=h.length-1;n>=0;n--)for(s=(o=t(h[n],this.document[0])).length-1;s>=0;s--)(a=t.data(o[s],this.widgetFullName))&&a!==this&&!a.options.disabled&&l.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(l.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),n=l.length-1;n>=0;n--)l[n][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;i<e.length;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,n,s,o,a,r,l,h,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=(s=t(d[i],this.document[0])).length-1;n>=0;n--)(o=t.data(s[n],this.widgetFullName))&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],n=0,h=(r=u[i][0]).length;n<h;n++)(l=t(r[n])).data(this.widgetName+"-item",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){var i,n,s,o;for(this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),i=this.items.length-1;i>=0;i--)(n=this.items[i]).instance!==this.currentContainer&&this.currentContainer&&n.item[0]!==this.currentItem[0]||(s=this.options.toleranceElement?t(this.options.toleranceElement,n.item):n.item,e||(n.width=s.outerWidth(),n.height=s.outerHeight()),o=s.offset(),n.left=o.left,n.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){var i,n=(e=e||this).options;n.placeholder&&n.placeholder.constructor!==String||(i=n.placeholder,n.placeholder={element:function(){var n=e.currentItem[0].nodeName.toLowerCase(),s=t("<"+n+">",e.document[0]);return e._addClass(s,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(s,"ui-sortable-helper"),"tbody"===n?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(s)):"tr"===n?e._createTrPlaceholder(e.currentItem,s):"img"===n&&s.attr("src",e.currentItem.attr("src")),i||s.css("visibility","hidden"),s},update:function(t,s){i&&!n.forcePlaceholderSize||(s.height()||s.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),s.width()||s.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(n.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),n.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var n=this;e.children().each(function(){t("<td>&#160;</td>",n.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,n,s,o,a,r,l,h,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(s=1e4,o=null,a=(c=d.floating||this._isFloating(this.currentItem))?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",n=this.items.length-1;n>=0;n--)t.contains(this.containers[p].element[0],this.items[n].item[0])&&this.items[n].item[0]!==this.currentItem[0]&&(l=this.items[n].item.offset()[a],h=!1,e[u]-l>this.items[n][r]/2&&(h=!0),Math.abs(e[u]-l)<s&&(s=Math.abs(e[u]-l),o=this.items[n],this.direction=h?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return void(this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1));o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,n=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return n.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(n[0]),n[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),n[0].style.width&&!i.forceHelperSize||n.width(this.currentItem.width()),n[0].style.height&&!i.forceHelperSize||n.height(this.currentItem.height()),n},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,n,s=this.options;"parent"===s.containment&&(s.containment=this.helper[0].parentNode),"document"!==s.containment&&"window"!==s.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===s.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===s.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(s.containment)||(e=t(s.containment)[0],i=t(s.containment).offset(),n="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(n?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(n?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var n="absolute"===e?1:-1,s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(s[0].tagName);return{top:i.top+this.offset.relative.top*n+this.offset.parent.top*n-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:s.scrollTop())*n,left:i.left+this.offset.relative.left*n+this.offset.parent.left*n-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:s.scrollLeft())*n}},_generatePosition:function(e){var i,n,s=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),s.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-s.grid[1]:i+s.grid[1]:i,n=this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0],o=this.containment?n-this.offset.click.left>=this.containment[0]&&n-this.offset.click.left<=this.containment[2]?n:n-this.offset.click.left>=this.containment[0]?n-s.grid[0]:n+s.grid[0]:n)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,n){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var s=this.counter;this._delay(function(){s===this.counter&&this.refreshPositions(!n)})},_clear:function(t,e){function i(t,e,i){return function(n){i._trigger(t,n,e._uiHash(e))}}this.reverting=!1;var n,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(n in this._storedCSS)"auto"!==this._storedCSS[n]&&"static"!==this._storedCSS[n]||(this._storedCSS[n]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),n=this.containers.length-1;n>=0;n--)e||s.push(i("deactivate",this,this.containers[n])),this.containers[n].containerCache.over&&(s.push(i("out",this,this.containers[n])),this.containers[n].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(n=0;n<s.length;n++)s[n].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===t.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){
this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,n){var s=i.attr(n);null!=s&&s.length&&(e[n]=s)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t))},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){this.element[0]===t.ui.safeActiveElement(this.document[0])||(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(e)&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){if(t(e.currentTarget).hasClass("ui-state-active"))return!1!==this._start(e)&&void this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,n=t.ui.keyCode;switch(e.keyCode){case n.UP:return this._repeat(null,1,e),!0;case n.DOWN:return this._repeat(null,-1,e),!0;case n.PAGE_UP:return this._repeat(null,i.page,e),!0;case n.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t)||(this.counter||(this.counter=1),this.spinning=!0,0))},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,n=this.options;return i=t-(e=null!==n.min?n.min:0),t=e+(i=Math.round(i/n.step)*n.step),t=parseFloat(t.toFixed(this._precision())),null!==n.max&&t>n.max?n.max:null!==n.min&&t<n.min?n.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,n,s;if("culture"===t||"numberFormat"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));"max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(n=this.buttons.first().find(".ui-icon"),this._removeClass(n,null,this.options.icons.up),this._addClass(n,null,e.up),s=this.buttons.last().find(".ui-icon"),this._removeClass(s,null,this.options.icons.down),this._addClass(s,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:o(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:o(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:o(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:o(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:o(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());o(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==t.uiBackCompat&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,n;i=e.href.replace(t,""),n=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(t){}try{n=decodeURIComponent(n)}catch(t){}return e.hash.length>1&&i===n}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(i.active):this.active=t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,n=location.hash.substring(1);return null===e&&(n&&this.tabs.each(function(i,s){if(t(s).attr("aria-controls")===n)return e=i,!1}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),null!==e&&-1!==e||(e=!!this.tabs.length&&0)),!1!==e&&-1===(e=this.tabs.index(this.tabs.eq(e)))&&(e=!i&&0),!i&&!1===e&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),n=this.tabs.index(i),s=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:s=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),void this._activate(n);case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),void this._activate(n!==this.options.active&&n);default:return}e.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,s),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){for(var n=this.tabs.length-1;-1!==t.inArray((e>n&&(e=0),e<0&&(e=n),e),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"!==t?(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e)):this._activate(e)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),!1!==e.active&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,n=this.anchors,s=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,n){var s,o,a,r=t(n).uniqueId().attr("id"),l=t(n).closest("li"),h=l.attr("aria-controls");e._isLocal(n)?(a=(s=n.hash).substring(1),o=e.element.find(e._sanitizeSelector(s))):(s="#"+(a=l.attr("aria-controls")||t({}).uniqueId()[0].id),(o=e.element.find(s)).length||(o=e._createPanel(a)).insertAfter(e.panels[i-1]||e.tablist),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),h&&l.data("ui-tabs-aria-controls",h),l.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(n.not(this.anchors)),this._off(s.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,n,s;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),s=0;n=this.tabs[s];s++)i=t(n),!0===e||-1!==t.inArray(s,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===e)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,n=this.element.parent();"fill"===e?(i=n.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),n=e.css("position");"absolute"!==n&&"fixed"!==n&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,n=this.active,s=t(e.currentTarget).closest("li"),o=s[0]===n[0],a=o&&i.collapsible,r=a?t():this._getPanelForTab(s),l=n.length?this._getPanelForTab(n):t(),h={oldTab:n,oldPanel:l,newTab:a?t():s,newPanel:r};e.preventDefault(),s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||!1===this._trigger("beforeActivate",e,h)||(i.active=!a&&this.tabs.index(s),this.active=o?t():s,this.xhr&&this.xhr.abort(),l.length||r.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),r.length&&this.load(this.tabs.index(s),e),this._toggle(e,h))},_toggle:function(e,i){function n(){o.running=!1,o._trigger("activate",e,i)}function s(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,n):(a.show(),n())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),s()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),s()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,n=this._findActive(e);n[0]!==this.active[0]&&(n.length||(n=this.active),i=n.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return!1===e?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;!1!==i&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(!0!==i){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var n=this,s=this.tabs.eq(e),o=s.find(".ui-tabs-anchor"),a=this._getPanelForTab(s),r={tab:s,panel:a},l=function(t,e){"abort"===e&&n.panels.stop(!1,!0),n._removeClass(s,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(s,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,s){setTimeout(function(){a.html(t),n._trigger("load",i,r),l(s,e)},1)}).fail(function(t,e){setTimeout(function(){l(t,e)},1)})))},_ajaxSettings:function(e,i,n){var s=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return s._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},n))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),!1!==t.uiBackCompat&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var n=(e.attr("aria-describedby")||"").split(/\s+/);n.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(n.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),n=(e.attr("aria-describedby")||"").split(/\s+/),s=t.inArray(i,n);-1!==s&&n.splice(s,1),e.removeData("ui-tooltip-id"),(n=t.trim(n.join(" ")))?e.attr("aria-describedby",n):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var n=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){n._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,n){var s=t.Event("blur");s.target=s.currentTarget=n.element[0],e.close(s,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);if(e.is("[title]"))return e.data("ui-tooltip-title",e.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,n=t(e?e.target:this.element).closest(this.options.items);n.length&&!n.data("ui-tooltip-id")&&(n.attr("title")&&n.data("ui-tooltip-title",n.attr("title")),n.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&n.parents().each(function(){var e,n=t(this);n.data("ui-tooltip-open")&&((e=t.Event("blur")).target=e.currentTarget=this,i.close(e,!0)),n.attr("title")&&(n.uniqueId(),i.parents[this.id]={element:this,title:n.attr("title")},n.attr("title",""))}),this._registerCloseHandlers(e,n),this._updateContent(n,e))},_updateContent:function(t,e){var i,n=this.options.content,s=this,o=e?e.type:null;if("string"==typeof n||n.nodeType||n.jquery)return this._open(e,t,n);(i=n.call(t[0],function(i){s._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}))&&this._open(e,t,i)},_open:function(e,i,n){function s(t){h.of=t,a.is(":hidden")||a.position(h)}var o,a,r,l,h=t.extend({},this.options.position);if(n){if(o=this._find(i))return void o.tooltip.find(".ui-tooltip-content").html(n);i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(n),this.liveRegion.children().hide(),(l=t("<div>").html(a.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),l.removeAttr("id").find("[id]").removeAttr("id"),l.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:s}),s(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(s(h.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var n={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var n=t.Event(e);n.currentTarget=i[0],this.close(n,!0)}}};i[0]!==this.element[0]&&(n.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(n.mouseleave="close"),e&&"focusin"!==e.type||(n.focusout="close"),this._on(!0,i,n)},close:function(e){var i,n=this,s=t(e?e.currentTarget:this.element),o=this._find(s);o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){n._removeTooltip(t(this))}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete n.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1))):s.removeData("ui-tooltip-open")},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),n=t("<div>").appendTo(i),s=i.uniqueId().attr("id");return this._addClass(n,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[s]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,n){var s=t.Event("blur"),o=n.element;s.target=s.currentTarget=o[0],e.close(s,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==t.uiBackCompat&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(t){var e,i,n,s,o,a,r=function(){},l=!!window.jQuery,h=t(window),c=function(t,i){e.ev.on("mfp"+t+".mfp",i)},u=function(e,i,n,s){var o=document.createElement("div");return o.className="mfp-"+e,n&&(o.innerHTML=n),s?i&&i.appendChild(o):(o=t(o),i&&o.appendTo(i)),o},d=function(i,n){e.ev.triggerHandler("mfp"+i,n),e.st.callbacks&&(i=i.charAt(0).toLowerCase()+i.slice(1),e.st.callbacks[i]&&e.st.callbacks[i].apply(e,t.isArray(n)?n:[n]))},p=function(i){return i===a&&e.currTemplate.closeBtn||(e.currTemplate.closeBtn=t(e.st.closeMarkup.replace("%title%",e.st.tClose)),a=i),e.currTemplate.closeBtn},f=function(){t.magnificPopup.instance||((e=new r).init(),t.magnificPopup.instance=e)};r.prototype={constructor:r,init:function(){var i=navigator.appVersion;e.isLowIE=e.isIE8=document.all&&!document.addEventListener,e.isAndroid=/android/gi.test(i),e.isIOS=/iphone|ipad|ipod/gi.test(i),e.supportsTransition=function(){var t=document.createElement("p").style,e=["ms","O","Moz","Webkit"];if(void 0!==t.transition)return!0;for(;e.length;)if(e.pop()+"Transition"in t)return!0;return!1}(),e.probablyMobile=e.isAndroid||e.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),n=t(document),e.popupsCache={}},open:function(i){var s;if(!1===i.isObj){e.items=i.items.toArray(),e.index=0;var a,r=i.items;for(s=0;s<r.length;s++)if((a=r[s]).parsed&&(a=a.el[0]),a===i.el[0]){e.index=s;break}}else e.items=t.isArray(i.items)?i.items:[i.items],e.index=i.index||0;if(!e.isOpen){e.types=[],o="",i.mainEl&&i.mainEl.length?e.ev=i.mainEl.eq(0):e.ev=n,i.key?(e.popupsCache[i.key]||(e.popupsCache[i.key]={}),e.currTemplate=e.popupsCache[i.key]):e.currTemplate={},e.st=t.extend(!0,{},t.magnificPopup.defaults,i),e.fixedContentPos="auto"===e.st.fixedContentPos?!e.probablyMobile:e.st.fixedContentPos,e.st.modal&&(e.st.closeOnContentClick=!1,e.st.closeOnBgClick=!1,e.st.showCloseBtn=!1,e.st.enableEscapeKey=!1),e.bgOverlay||(e.bgOverlay=u("bg").on("click.mfp",function(){e.close()}),e.wrap=u("wrap").attr("tabindex",-1).on("click.mfp",function(t){e._checkIfClose(t.target)&&e.close()}),e.container=u("container",e.wrap)),e.contentContainer=u("content"),e.st.preloader&&(e.preloader=u("preloader",e.container,e.st.tLoading));var l=t.magnificPopup.modules;for(s=0;s<l.length;s++){var f=l[s];f=f.charAt(0).toUpperCase()+f.slice(1),e["init"+f].call(e)}d("BeforeOpen"),e.st.showCloseBtn&&(e.st.closeBtnInside?(c("MarkupParse",function(t,e,i,n){i.close_replaceWith=p(n.type)}),o+=" mfp-close-btn-in"):e.wrap.append(p())),e.st.alignTop&&(o+=" mfp-align-top"),e.fixedContentPos?e.wrap.css({overflow:e.st.overflowY,overflowX:"hidden",overflowY:e.st.overflowY}):e.wrap.css({top:h.scrollTop(),position:"absolute"}),(!1===e.st.fixedBgPos||"auto"===e.st.fixedBgPos&&!e.fixedContentPos)&&e.bgOverlay.css({height:n.height(),position:"absolute"}),e.st.enableEscapeKey&&n.on("keyup.mfp",function(t){27===t.keyCode&&e.close()}),h.on("resize.mfp",function(){e.updateSize()}),e.st.closeOnContentClick||(o+=" mfp-auto-cursor"),o&&e.wrap.addClass(o);var g=e.wH=h.height(),m={};if(e.fixedContentPos&&e._hasScrollBar(g)){var v=e._getScrollbarSize();v&&(m.marginRight=v)}e.fixedContentPos&&(e.isIE7?t("body, html").css("overflow","hidden"):m.overflow="hidden");var b=e.st.mainClass;return e.isIE7&&(b+=" mfp-ie7"),b&&e._addClassToMFP(b),e.updateItemHTML(),d("BuildControls"),t("html").css(m),e.bgOverlay.add(e.wrap).prependTo(e.st.prependTo||t(document.body)),e._lastFocusedEl=document.activeElement,setTimeout(function(){e.content?(e._addClassToMFP("mfp-ready"),e._setFocus()):e.bgOverlay.addClass("mfp-ready"),n.on("focusin.mfp",e._onFocusIn)},16),e.isOpen=!0,e.updateSize(g),d("Open"),i}e.updateItemHTML()},close:function(){e.isOpen&&(d("BeforeClose"),e.isOpen=!1,e.st.removalDelay&&!e.isLowIE&&e.supportsTransition?(e._addClassToMFP("mfp-removing"),setTimeout(function(){e._close()},e.st.removalDelay)):e._close())},_close:function(){d("Close");var i="mfp-removing mfp-ready ";if(e.bgOverlay.detach(),e.wrap.detach(),e.container.empty(),e.st.mainClass&&(i+=e.st.mainClass+" "),e._removeClassFromMFP(i),e.fixedContentPos){var s={marginRight:""};e.isIE7?t("body, html").css("overflow",""):s.overflow="",t("html").css(s)}n.off("keyup.mfp focusin.mfp"),e.ev.off(".mfp"),e.wrap.attr("class","mfp-wrap").removeAttr("style"),e.bgOverlay.attr("class","mfp-bg"),e.container.attr("class","mfp-container"),!e.st.showCloseBtn||e.st.closeBtnInside&&!0!==e.currTemplate[e.currItem.type]||e.currTemplate.closeBtn&&e.currTemplate.closeBtn.detach(),e.st.autoFocusLast&&e._lastFocusedEl&&t(e._lastFocusedEl).focus(),e.currItem=null,e.content=null,e.currTemplate=null,e.prevHeight=0,d("AfterClose")},updateSize:function(t){if(e.isIOS){var i=document.documentElement.clientWidth/window.innerWidth,n=window.innerHeight*i;e.wrap.css("height",n),e.wH=n}else e.wH=t||h.height();e.fixedContentPos||e.wrap.css("height",e.wH),d("Resize")},updateItemHTML:function(){var i=e.items[e.index];e.contentContainer.detach(),e.content&&e.content.detach(),i.parsed||(i=e.parseEl(e.index));var n=i.type;if(d("BeforeChange",[e.currItem?e.currItem.type:"",n]),e.currItem=i,!e.currTemplate[n]){var o=!!e.st[n]&&e.st[n].markup;d("FirstMarkupParse",o),e.currTemplate[n]=!o||t(o)}s&&s!==i.type&&e.container.removeClass("mfp-"+s+"-holder");var a=e["get"+n.charAt(0).toUpperCase()+n.slice(1)](i,e.currTemplate[n]);e.appendContent(a,n),i.preloaded=!0,d("Change",i),s=i.type,e.container.prepend(e.contentContainer),d("AfterChange")},appendContent:function(t,i){e.content=t,t?e.st.showCloseBtn&&e.st.closeBtnInside&&!0===e.currTemplate[i]?e.content.find(".mfp-close").length||e.content.append(p()):e.content=t:e.content="",d("BeforeAppend"),e.container.addClass("mfp-"+i+"-holder"),e.contentContainer.append(e.content)},parseEl:function(i){var n,s=e.items[i];if(s.tagName?s={el:t(s)}:(n=s.type,s={data:s,src:s.src}),s.el){for(var o=e.types,a=0;a<o.length;a++)if(s.el.hasClass("mfp-"+o[a])){n=o[a];break}s.src=s.el.attr("data-mfp-src"),s.src||(s.src=s.el.attr("href"))}return s.type=n||e.st.type||"inline",s.index=i,s.parsed=!0,e.items[i]=s,d("ElementParse",s),e.items[i]},addGroup:function(t,i){var n=function(n){n.mfpEl=this,e._openClick(n,t,i)};i||(i={});var s="click.magnificPopup";i.mainEl=t,i.items?(i.isObj=!0,t.off(s).on(s,n)):(i.isObj=!1,i.delegate?t.off(s).on(s,i.delegate,n):(i.items=t,t.off(s).on(s,n)))},_openClick:function(i,n,s){if((void 0!==s.midClick?s.midClick:t.magnificPopup.defaults.midClick)||!(2===i.which||i.ctrlKey||i.metaKey||i.altKey||i.shiftKey)){var o=void 0!==s.disableOn?s.disableOn:t.magnificPopup.defaults.disableOn;if(o)if(t.isFunction(o)){if(!o.call(e))return!0}else if(h.width()<o)return!0;i.type&&(i.preventDefault(),e.isOpen&&i.stopPropagation()),s.el=t(i.mfpEl),s.delegate&&(s.items=n.find(s.delegate)),e.open(s)}},updateStatus:function(t,n){if(e.preloader){i!==t&&e.container.removeClass("mfp-s-"+i),n||"loading"!==t||(n=e.st.tLoading);var s={status:t,text:n};d("UpdateStatus",s),t=s.status,n=s.text,e.preloader.html(n),e.preloader.find("a").on("click",function(t){t.stopImmediatePropagation()}),e.container.addClass("mfp-s-"+t),i=t}},_checkIfClose:function(i){if(!t(i).hasClass("mfp-prevent-close")){var n=e.st.closeOnContentClick,s=e.st.closeOnBgClick;if(n&&s)return!0;if(!e.content||t(i).hasClass("mfp-close")||e.preloader&&i===e.preloader[0])return!0;if(i===e.content[0]||t.contains(e.content[0],i)){if(n)return!0}else if(s&&t.contains(document,i))return!0;return!1}},_addClassToMFP:function(t){e.bgOverlay.addClass(t),e.wrap.addClass(t)},_removeClassFromMFP:function(t){this.bgOverlay.removeClass(t),e.wrap.removeClass(t)},_hasScrollBar:function(t){return(e.isIE7?n.height():document.body.scrollHeight)>(t||h.height())},_setFocus:function(){(e.st.focus?e.content.find(e.st.focus).eq(0):e.wrap).focus()},_onFocusIn:function(i){if(i.target!==e.wrap[0]&&!t.contains(e.wrap[0],i.target))return e._setFocus(),!1},
_parseMarkup:function(e,i,n){var s;n.data&&(i=t.extend(n.data,i)),d("MarkupParse",[e,i,n]),t.each(i,function(i,n){if(void 0===n||!1===n)return!0;if((s=i.split("_")).length>1){var o=e.find(".mfp-"+s[0]);if(o.length>0){var a=s[1];"replaceWith"===a?o[0]!==n[0]&&o.replaceWith(n):"img"===a?o.is("img")?o.attr("src",n):o.replaceWith(t("<img>").attr("src",n).attr("class",o.attr("class"))):o.attr(s[1],n)}}else e.find(".mfp-"+i).html(n)})},_getScrollbarSize:function(){if(void 0===e.scrollbarSize){var t=document.createElement("div");t.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(t),e.scrollbarSize=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return e.scrollbarSize}},t.magnificPopup={instance:null,proto:r.prototype,modules:[],open:function(e,i){return f(),(e=e?t.extend(!0,{},e):{}).isObj=!0,e.index=i||0,this.instance.open(e)},close:function(){return t.magnificPopup.instance&&t.magnificPopup.instance.close()},registerModule:function(e,i){i.options&&(t.magnificPopup.defaults[e]=i.options),t.extend(this.proto,i.proto),this.modules.push(e)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},t.fn.magnificPopup=function(i){f();var n=t(this);if("string"==typeof i)if("open"===i){var s,o=l?n.data("magnificPopup"):n[0].magnificPopup,a=parseInt(arguments[1],10)||0;o.items?s=o.items[a]:(s=n,o.delegate&&(s=s.find(o.delegate)),s=s.eq(a)),e._openClick({mfpEl:s},n,o)}else e.isOpen&&e[i].apply(e,Array.prototype.slice.call(arguments,1));else i=t.extend(!0,{},i),l?n.data("magnificPopup",i):n[0].magnificPopup=i,e.addGroup(n,i);return n};var g,m,v,b=function(){v&&(m.after(v.addClass(g)).detach(),v=null)};t.magnificPopup.registerModule("inline",{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){e.types.push("inline"),c("Close.inline",function(){b()})},getInline:function(i,n){if(b(),i.src){var s=e.st.inline,o=t(i.src);if(o.length){var a=o[0].parentNode;a&&a.tagName&&(m||(g=s.hiddenClass,m=u(g),g="mfp-"+g),v=o.after(m).detach().removeClass(g)),e.updateStatus("ready")}else e.updateStatus("error",s.tNotFound),o=t("<div>");return i.inlineElement=o,o}return e.updateStatus("ready"),e._parseMarkup(n,{},i),n}}});var _,y=function(){_&&t(document.body).removeClass(_)},w=function(){y(),e.req&&e.req.abort()};t.magnificPopup.registerModule("ajax",{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){e.types.push("ajax"),_=e.st.ajax.cursor,c("Close.ajax",w),c("BeforeChange.ajax",w)},getAjax:function(i){_&&t(document.body).addClass(_),e.updateStatus("loading");var n=t.extend({url:i.src,success:function(n,s,o){var a={data:n,xhr:o};d("ParseAjax",a),e.appendContent(t(a.data),"ajax"),i.finished=!0,y(),e._setFocus(),setTimeout(function(){e.wrap.addClass("mfp-ready")},16),e.updateStatus("ready"),d("AjaxContentAdded")},error:function(){y(),i.finished=i.loadError=!0,e.updateStatus("error",e.st.ajax.tError.replace("%url%",i.src))}},e.st.ajax.settings);return e.req=t.ajax(n),""}}});var x;t.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var i=e.st.image,n=".image";e.types.push("image"),c("Open"+n,function(){"image"===e.currItem.type&&i.cursor&&t(document.body).addClass(i.cursor)}),c("Close"+n,function(){i.cursor&&t(document.body).removeClass(i.cursor),h.off("resize.mfp")}),c("Resize"+n,e.resizeImage),e.isLowIE&&c("AfterChange",e.resizeImage)},resizeImage:function(){var t=e.currItem;if(t&&t.img&&e.st.image.verticalFit){var i=0;e.isLowIE&&(i=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",e.wH-i)}},_onImageHasSize:function(t){t.img&&(t.hasSize=!0,x&&clearInterval(x),t.isCheckingImgSize=!1,d("ImageHasSize",t),t.imgHidden&&(e.content&&e.content.removeClass("mfp-loading"),t.imgHidden=!1))},findImageSize:function(t){var i=0,n=t.img[0],s=function(o){x&&clearInterval(x),x=setInterval(function(){n.naturalWidth>0?e._onImageHasSize(t):(i>200&&clearInterval(x),3==++i?s(10):40===i?s(50):100===i&&s(500))},o)};s(1)},getImage:function(i,n){var s=0,o=function(){i&&(i.img[0].complete?(i.img.off(".mfploader"),i===e.currItem&&(e._onImageHasSize(i),e.updateStatus("ready")),i.hasSize=!0,i.loaded=!0,d("ImageLoadComplete")):++s<200?setTimeout(o,100):a())},a=function(){i&&(i.img.off(".mfploader"),i===e.currItem&&(e._onImageHasSize(i),e.updateStatus("error",r.tError.replace("%url%",i.src))),i.hasSize=!0,i.loaded=!0,i.loadError=!0)},r=e.st.image,l=n.find(".mfp-img");if(l.length){var h=document.createElement("img");h.className="mfp-img",i.el&&i.el.find("img").length&&(h.alt=i.el.find("img").attr("alt")),i.img=t(h).on("load.mfploader",o).on("error.mfploader",a),h.src=i.src,l.is("img")&&(i.img=i.img.clone()),(h=i.img[0]).naturalWidth>0?i.hasSize=!0:h.width||(i.hasSize=!1)}return e._parseMarkup(n,{title:function(i){if(i.data&&void 0!==i.data.title)return i.data.title;var n=e.st.image.titleSrc;if(n){if(t.isFunction(n))return n.call(e,i);if(i.el)return i.el.attr(n)||""}return""}(i),img_replaceWith:i.img},i),e.resizeImage(),i.hasSize?(x&&clearInterval(x),i.loadError?(n.addClass("mfp-loading"),e.updateStatus("error",r.tError.replace("%url%",i.src))):(n.removeClass("mfp-loading"),e.updateStatus("ready")),n):(e.updateStatus("loading"),i.loading=!0,i.hasSize||(i.imgHidden=!0,n.addClass("mfp-loading"),e.findImageSize(i)),n)}}});var C;t.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(t){return t.is("img")?t:t.find("img")}},proto:{initZoom:function(){var t,i=e.st.zoom,n=".zoom";if(i.enabled&&e.supportsTransition){var s,o,a=i.duration,r=function(t){var e=t.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),n="all "+i.duration/1e3+"s "+i.easing,s={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},o="transition";return s["-webkit-"+o]=s["-moz-"+o]=s["-o-"+o]=s[o]=n,e.css(s),e},l=function(){e.content.css("visibility","visible")};c("BuildControls"+n,function(){if(e._allowZoom()){if(clearTimeout(s),e.content.css("visibility","hidden"),!(t=e._getItemToZoom()))return void l();(o=r(t)).css(e._getOffset()),e.wrap.append(o),s=setTimeout(function(){o.css(e._getOffset(!0)),s=setTimeout(function(){l(),setTimeout(function(){o.remove(),t=o=null,d("ZoomAnimationEnded")},16)},a)},16)}}),c("BeforeClose"+n,function(){if(e._allowZoom()){if(clearTimeout(s),e.st.removalDelay=a,!t){if(!(t=e._getItemToZoom()))return;o=r(t)}o.css(e._getOffset(!0)),e.wrap.append(o),e.content.css("visibility","hidden"),setTimeout(function(){o.css(e._getOffset())},16)}}),c("Close"+n,function(){e._allowZoom()&&(l(),o&&o.remove(),t=null)})}},_allowZoom:function(){return"image"===e.currItem.type},_getItemToZoom:function(){return!!e.currItem.hasSize&&e.currItem.img},_getOffset:function(i){var n,s=(n=i?e.currItem.img:e.st.zoom.opener(e.currItem.el||e.currItem)).offset(),o=parseInt(n.css("padding-top"),10),a=parseInt(n.css("padding-bottom"),10);s.top-=t(window).scrollTop()-o;var r={width:n.width(),height:(l?n.innerHeight():n[0].offsetHeight)-a-o};return void 0===C&&(C=void 0!==document.createElement("p").style.MozTransform),C?r["-moz-transform"]=r.transform="translate("+s.left+"px,"+s.top+"px)":(r.left=s.left,r.top=s.top),r}}});var k=function(t){if(e.currTemplate.iframe){var i=e.currTemplate.iframe.find("iframe");i.length&&(t||(i[0].src="//about:blank"),e.isIE8&&i.css("display",t?"block":"none"))}};t.magnificPopup.registerModule("iframe",{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){e.types.push("iframe"),c("BeforeChange",function(t,e,i){e!==i&&("iframe"===e?k():"iframe"===i&&k(!0))}),c("Close.iframe",function(){k()})},getIframe:function(i,n){var s=i.src,o=e.st.iframe;t.each(o.patterns,function(){if(s.indexOf(this.index)>-1)return this.id&&(s="string"==typeof this.id?s.substr(s.lastIndexOf(this.id)+this.id.length,s.length):this.id.call(this,s)),s=this.src.replace("%id%",s),!1});var a={};return o.srcAction&&(a[o.srcAction]=s),e._parseMarkup(n,a,i),e.updateStatus("ready"),n}}});var T=function(t){var i=e.items.length;return t>i-1?t-i:t<0?i+t:t},D=function(t,e,i){return t.replace(/%curr%/gi,e+1).replace(/%total%/gi,i)};t.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=e.st.gallery,s=".mfp-gallery";if(e.direction=!0,!i||!i.enabled)return!1;o+=" mfp-gallery",c("Open"+s,function(){i.navigateByImgClick&&e.wrap.on("click"+s,".mfp-img",function(){if(e.items.length>1)return e.next(),!1}),n.on("keydown"+s,function(t){37===t.keyCode?e.prev():39===t.keyCode&&e.next()})}),c("UpdateStatus"+s,function(t,i){i.text&&(i.text=D(i.text,e.currItem.index,e.items.length))}),c("MarkupParse"+s,function(t,n,s,o){var a=e.items.length;s.counter=a>1?D(i.tCounter,o.index,a):""}),c("BuildControls"+s,function(){if(e.items.length>1&&i.arrows&&!e.arrowLeft){var n=i.arrowMarkup,s=e.arrowLeft=t(n.replace(/%title%/gi,i.tPrev).replace(/%dir%/gi,"left")).addClass("mfp-prevent-close"),o=e.arrowRight=t(n.replace(/%title%/gi,i.tNext).replace(/%dir%/gi,"right")).addClass("mfp-prevent-close");s.click(function(){e.prev()}),o.click(function(){e.next()}),e.container.append(s.add(o))}}),c("Change"+s,function(){e._preloadTimeout&&clearTimeout(e._preloadTimeout),e._preloadTimeout=setTimeout(function(){e.preloadNearbyImages(),e._preloadTimeout=null},16)}),c("Close"+s,function(){n.off(s),e.wrap.off("click"+s),e.arrowRight=e.arrowLeft=null})},next:function(){e.direction=!0,e.index=T(e.index+1),e.updateItemHTML()},prev:function(){e.direction=!1,e.index=T(e.index-1),e.updateItemHTML()},goTo:function(t){e.direction=t>=e.index,e.index=t,e.updateItemHTML()},preloadNearbyImages:function(){var t,i=e.st.gallery.preload,n=Math.min(i[0],e.items.length),s=Math.min(i[1],e.items.length);for(t=1;t<=(e.direction?s:n);t++)e._preloadItem(e.index+t);for(t=1;t<=(e.direction?n:s);t++)e._preloadItem(e.index-t)},_preloadItem:function(i){if(i=T(i),!e.items[i].preloaded){var n=e.items[i];n.parsed||(n=e.parseEl(i)),d("LazyLoad",n),"image"===n.type&&(n.img=t('<img class="mfp-img" />').on("load.mfploader",function(){n.hasSize=!0}).on("error.mfploader",function(){n.hasSize=!0,n.loadError=!0,d("LazyLoadError",n)}).attr("src",n.src)),n.preloaded=!0}}}}),t.magnificPopup.registerModule("retina",{options:{replaceSrc:function(t){return t.src.replace(/\.\w+$/,function(t){return"@2x"+t})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var t=e.st.retina,i=t.ratio;(i=isNaN(i)?i():i)>1&&(c("ImageHasSize.retina",function(t,e){e.img.css({"max-width":e.img[0].naturalWidth/i,width:"100%"})}),c("ElementParse.retina",function(e,n){n.src=t.replaceSrc(n,i)}))}}}}),f()}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=function(){function e(){var e=this,i=function(i){return t.isNumeric(i)&&(i=Math.floor(i)),t('option[value="'+i+'"]',e.$elem)},n=function(){var n=e.options.initialRating;return n?i(n):t("option:selected",e.$elem)},s=function(){var i=e.$elem.find('option[value="'+e.options.emptyValue+'"]');return!i.length&&e.options.allowEmpty?(i=t("<option />",{value:e.options.emptyValue})).prependTo(e.$elem):i},o=function(t){var i=e.$elem.data("barrating");return void 0!==t?i[t]:i},a=function(t,i){null!==i&&"object"==typeof i?e.$elem.data("barrating",i):e.$elem.data("barrating")[t]=i},r=function(){return o("ratingText")},l=function(){return o("ratingValue")},h=function(){return o("userOptions").reverse?"nextAll":"prevAll"},c=function(t){i(t).prop("selected",!0),e.$elem.change()},u=function(){t("option",e.$elem).prop("selected",function(){return this.defaultSelected}),e.$elem.change()},d=function(t){(t=t||r())==o("emptyRatingText")&&(t=""),e.options.showSelectedRating&&e.$elem.parent().find(".br-current-rating").text(t)},p=function(){e.$widget.find("a").removeClass(function(t,e){return(e.match(/(^|\s)br-\S+/g)||[]).join(" ")})},f=function(){var i,n,s=e.$widget.find('a[data-rating-value="'+l()+'"]'),a=o("userOptions").initialRating,r=t.isNumeric(l())?l():0,c=function(t){return Math.round(Math.floor(10*t)/10%1*100)}(a);if(p(),s.addClass("br-selected br-current")[h()]().addClass("br-selected"),!o("ratingMade")&&t.isNumeric(a)){if(r>=a||!c)return;i=e.$widget.find("a"),(n=s.length?s[o("userOptions").reverse?"prev":"next"]():i[o("userOptions").reverse?"last":"first"]()).addClass("br-fractional"),n.addClass("br-fractional-"+c)}},g=function(i){i.on("click.barrating",function(i){var n,s,h=t(this),u=o("userOptions");return i.preventDefault(),n=h.attr("data-rating-value"),s=h.attr("data-rating-text"),function(t){return!(!o("allowEmpty")||!o("userOptions").deselectable)&&l()==t.attr("data-rating-value")}(h)&&(n=o("emptyRatingValue"),s=o("emptyRatingText")),a("ratingValue",n),a("ratingText",s),a("ratingMade",!0),c(n),d(s),f(),u.onSelect.call(e,l(),r(),i),!1})},m=function(e){e.on("mouseenter.barrating",function(){var e=t(this);p(),e.addClass("br-active")[h()]().addClass("br-active"),d(e.attr("data-rating-text"))})},v=function(e){e.on("touchstart.barrating",function(e){e.preventDefault(),e.stopPropagation(),t(this).click()})},b=function(t){g(t),e.options.hoverState&&(m(t),e.$widget.on("mouseleave.barrating blur.barrating",function(){d(),f()}))},_=function(t){t.off(".barrating")},y=function(t){var i=e.$widget.find("a");v&&v(i),t?(_(i),function(t){t.on("click.barrating",function(t){t.preventDefault()})}(i)):b(i)};this.show=function(){o()||(function(){var i=["br-wrapper"];""!==e.options.theme&&i.push("br-theme-"+e.options.theme),e.$elem.wrap(t("<div />",{class:i.join(" ")}))}(),function(){var t=n(),i=s(),o=t.val(),r=t.data("html")?t.data("html"):t.text(),l=null!==e.options.allowEmpty?e.options.allowEmpty:!!i.length,h=i.length?i.val():null,c=i.length?i.text():null;a(null,{userOptions:e.options,ratingValue:o,ratingText:r,originalRatingValue:o,originalRatingText:r,allowEmpty:l,emptyRatingValue:h,emptyRatingText:c,readOnly:e.options.readonly,ratingMade:!1})}(),e.$widget=function(){var i=t("<div />",{class:"br-widget"});return e.$elem.find("option").each(function(){var n,s,a,r;(n=t(this).val())!==o("emptyRatingValue")&&(s=t(this).text(),(a=t(this).data("html"))&&(s=a),r=t("<a />",{href:"#","data-rating-value":n,"data-rating-text":s,html:e.options.showValues?s:""}),i.append(r))}),e.options.showSelectedRating&&i.append(t("<div />",{text:"",class:"br-current-rating"})),e.options.reverse&&i.addClass("br-reverse"),e.options.readonly&&i.addClass("br-readonly"),i}(),e.$widget.insertAfter(e.$elem),f(),d(),y(e.options.readonly),e.$elem.hide())},this.readonly=function(t){"boolean"==typeof t&&o("readOnly")!=t&&(y(t),a("readOnly",t),e.$widget.toggleClass("br-readonly"))},this.set=function(t){var i=o("userOptions");0!==e.$elem.find('option[value="'+t+'"]').length&&(a("ratingValue",t),a("ratingText",e.$elem.find('option[value="'+t+'"]').text()),a("ratingMade",!0),c(l()),d(r()),f(),i.silent||i.onSelect.call(this,l(),r()))},this.clear=function(){var t=o("userOptions");a("ratingValue",o("originalRatingValue")),a("ratingText",o("originalRatingText")),a("ratingMade",!1),u(),d(r()),f(),t.onClear.call(this,l(),r())},this.destroy=function(){var t=l(),i=r(),n=o("userOptions");_(e.$widget.find("a")),e.$widget.remove(),e.$elem.removeData("barrating"),e.$elem.unwrap(),e.$elem.show(),n.onDestroy.call(this,t,i)}}return e.prototype.init=function(e,i){return this.$elem=t(i),this.options=t.extend({},t.fn.barrating.defaults,e),this.options},e}();t.fn.barrating=function(i,n){return this.each(function(){var s=new e;if(t(this).is("select")||t.error("Sorry, this plugin only works with select fields."),s.hasOwnProperty(i)){if(s.init(n,this),"show"===i)return s.show(n);if(s.$elem.data("barrating"))return s.$widget=t(this).next(".br-widget"),s[i](n)}else{if("object"==typeof i||!i)return n=i,s.init(n,this),s.show();t.error("Method "+i+" does not exist on jQuery.barrating")}})},t.fn.barrating.defaults={theme:"",initialRating:null,allowEmpty:null,emptyValue:"",showValues:!1,showSelectedRating:!0,deselectable:!0,reverse:!1,readonly:!1,fastClicks:!0,hoverState:!0,silent:!1,onSelect:function(t,e,i){},onClear:function(t,e){},onDestroy:function(t,e){}},t.fn.barrating.BarRating=e}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");if(function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var i=!1,n=this;return t(this).one("bsTransitionEnd",function(){i=!0}),setTimeout(function(){i||t(n).trigger(t.support.transition.end)},e),this},t(function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function n(){a.detach().trigger("closed.bs.alert").remove()}var s=t(this),o=s.attr("data-target");o||(o=(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===o?[]:o);e&&e.preventDefault(),a.length||(a=s.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var n=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var n=t(this),s=n.data("bs.alert");s||n.data("bs.alert",s=new i(this)),"string"==typeof e&&s[e].call(n)})},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.button"),o="object"==typeof e&&e;s||n.data("bs.button",s=new i(this,o)),"toggle"==e?s.toggle():e&&s.setState(e)})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",n=this.$element,s=n.is("input")?"val":"html",o=n.data();e+="Text",null==o.resetText&&n.data("resetText",n[s]()),setTimeout(t.proxy(function(){n[s](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,n.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,n.removeClass(i).removeAttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var n=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=n,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var n=t(i.target).closest(".btn");e.call(n,"toggle"),t(i.target).is('input[type="radio"], input[type="checkbox"]')||(i.preventDefault(),n.is("input,button")?n.trigger("focus"):n.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.carousel"),o=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e),a="string"==typeof e?e:o.slide;s||n.data("bs.carousel",s=new i(this,o)),"number"==typeof e?s.to(e):a?s[a]():o.interval&&s.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var n=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(n)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){if(!this.sliding)return this.slide("next")},i.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},i.prototype.slide=function(e,n){var s=this.$element.find(".item.active"),o=n||this.getItemForDirection(e,s),a=this.interval,r="next"==e?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var h=o[0],c=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(o)]);u&&u.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(e),o[0].offsetWidth,s.addClass(r),o.addClass(r),s.one("bsTransitionEnd",function(){o.removeClass([e,r].join(" ")).addClass("active"),s.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(d)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(s.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),a&&this.cycle(),this}};var n=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=n,this};var s=function(i){var n,s=t(this),o=t(s.attr("data-target")||(n=s.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,""));if(o.hasClass("carousel")){var a=t.extend({},o.data(),s.data()),r=s.attr("data-slide-to");r&&(a.interval=!1),e.call(o,a),r&&o.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",s).on("click.bs.carousel.data-api","[data-slide-to]",s),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),function(t){"use strict";function e(e){var i,n=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(n)}function i(e){return this.each(function(){var i=t(this),s=i.data("bs.collapse"),o=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e);!s&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),s||i.data("bs.collapse",s=new n(this,o)),"string"==typeof e&&s[e]()})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};n.VERSION="3.3.7",n.TRANSITION_DURATION=350,n.DEFAULTS={toggle:!0},n.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},n.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,s=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(s&&s.length&&(e=s.data("bs.collapse"))&&e.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){s&&s.length&&(i.call(s,"hide"),e||s.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(n.TRANSITION_DURATION)[a](this.$element[0][l])}}}},n.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var s=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return s.call(this);this.$element[i](0).one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(n.TRANSITION_DURATION)}}},n.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},n.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,n){var s=t(n);this.addAriaAndCollapsedClass(e(s),s)},this)).end()},n.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var s=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=n,t.fn.collapse.noConflict=function(){return t.fn.collapse=s,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(n){var s=t(this);s.attr("data-target")||n.preventDefault();var o=e(s),a=o.data("bs.collapse")?"toggle":s.data();i.call(o,a)})}(jQuery),function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var n=i&&t(i);return n&&n.length?n:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var n=t(this),s=e(n),o={relatedTarget:this};s.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(s[0],i.target)||(s.trigger(i=t.Event("hide.bs.dropdown",o)),i.isDefaultPrevented()||(n.attr("aria-expanded","false"),s.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',o=function(e){t(e).on("click.bs.dropdown",this.toggle)};o.VERSION="3.3.7",o.prototype.toggle=function(n){var s=t(this);if(!s.is(".disabled, :disabled")){var o=e(s),a=o.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(o.trigger(n=t.Event("show.bs.dropdown",r)),n.isDefaultPrevented())return;s.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},o.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var n=t(this);if(i.preventDefault(),i.stopPropagation(),!n.is(".disabled, :disabled")){var o=e(n),a=o.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&o.find(s).trigger("focus"),n.trigger("click");var r=o.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&l<r.length-1&&l++,~l||(l=0),r.eq(l).trigger("focus")}}}};var a=t.fn.dropdown;t.fn.dropdown=function(e){return this.each(function(){var i=t(this),n=i.data("bs.dropdown");n||i.data("bs.dropdown",n=new o(this)),"string"==typeof e&&n[e].call(i)})},t.fn.dropdown.Constructor=o,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=a,this},t(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",s,o.prototype.toggle).on("keydown.bs.dropdown.data-api",s,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(t){"use strict";function e(e,n){return this.each(function(){var s=t(this),o=s.data("bs.modal"),a=t.extend({},i.DEFAULTS,s.data(),"object"==typeof e&&e);o||s.data("bs.modal",o=new i(this,a)),"string"==typeof e?o[e](n):a.show&&o.show(n)})}var i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))}
;i.VERSION="3.3.7",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var n=this,s=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(s),this.isShown||s.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){n.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(n.$element)&&(n.ignoreBackdropClick=!0)})}),this.backdrop(function(){var s=t.support.transition&&n.$element.hasClass("fade");n.$element.parent().length||n.$element.appendTo(n.$body),n.$element.show().scrollTop(0),n.adjustDialog(),s&&n.$element[0].offsetWidth,n.$element.addClass("in"),n.enforceFocus();var o=t.Event("shown.bs.modal",{relatedTarget:e});s?n.$dialog.one("bsTransitionEnd",function(){n.$element.trigger("focus").trigger(o)}).emulateTransitionEnd(i.TRANSITION_DURATION):n.$element.trigger("focus").trigger(o)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=function(e){var n=this,s=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&s;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+s).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;o?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){n.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},i.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var n=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return t.fn.modal=n,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var n=t(this),s=n.attr("href"),o=t(n.attr("data-target")||s&&s.replace(/.*(?=#[^\s]+$)/,"")),a=o.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(s)&&s},o.data(),n.data());n.is("a")&&i.preventDefault(),o.one("show.bs.modal",function(t){t.isDefaultPrevented()||o.one("hidden.bs.modal",function(){n.is(":visible")&&n.trigger("focus")})}),e.call(o,a,this)})}(jQuery),function(t){"use strict";var e=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};e.VERSION="3.3.7",e.TRANSITION_DURATION=150,e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},e.prototype.init=function(e,i,n){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(n),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var s=this.options.trigger.split(" "),o=s.length;o--;){var a=s[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return(e=t.extend({},this.getDefaults(),this.$element.data(),e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,n){i[t]!=n&&(e[t]=n)}),e},e.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},e.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)}},e.prototype.show=function(){var i=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(i);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(i.isDefaultPrevented()||!n)return;var s=this,o=this.tip(),a=this.getUID(this.type);this.setContent(),o.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&o.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?o.appendTo(this.options.container):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),u=o[0].offsetWidth,d=o[0].offsetHeight;if(h){var p=r,f=this.getPosition(this.$viewport);r="bottom"==r&&c.bottom+d>f.bottom?"top":"top"==r&&c.top-d<f.top?"bottom":"right"==r&&c.right+u>f.width?"left":"left"==r&&c.left-u<f.left?"right":r,o.removeClass(p).addClass(r)}var g=this.getCalculatedOffset(r,c,u,d);this.applyPlacement(g,r);var m=function(){var t=s.hoverState;s.$element.trigger("shown.bs."+s.type),s.hoverState=null,"out"==t&&s.leave(s)};t.support.transition&&this.$tip.hasClass("fade")?o.one("bsTransitionEnd",m).emulateTransitionEnd(e.TRANSITION_DURATION):m()}},e.prototype.applyPlacement=function(e,i){var n=this.tip(),s=n[0].offsetWidth,o=n[0].offsetHeight,a=parseInt(n.css("margin-top"),10),r=parseInt(n.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top+=a,e.left+=r,t.offset.setOffset(n[0],t.extend({using:function(t){n.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),n.addClass("in");var l=n[0].offsetWidth,h=n[0].offsetHeight;"top"==i&&h!=o&&(e.top=e.top+o-h);var c=this.getViewportAdjustedDelta(i,e,l,h);c.left?e.left+=c.left:e.top+=c.top;var u=/top|bottom/.test(i),d=u?2*c.left-s+l:2*c.top-o+h,p=u?"offsetWidth":"offsetHeight";n.offset(e),this.replaceArrow(d,n[0][p],u)},e.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},e.prototype.hide=function(i){function n(){"in"!=s.hoverState&&o.detach(),s.$element&&s.$element.removeAttr("aria-describedby").trigger("hidden.bs."+s.type),i&&i()}var s=this,o=t(this.$tip),a=t.Event("hide.bs."+this.type);if(this.$element.trigger(a),!a.isDefaultPrevented())return o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(e.TRANSITION_DURATION):n(),this.hoverState=null,this},e.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},e.prototype.hasContent=function(){return this.getTitle()},e.prototype.getPosition=function(e){var i=(e=e||this.$element)[0],n="BODY"==i.tagName,s=i.getBoundingClientRect();null==s.width&&(s=t.extend({},s,{width:s.right-s.left,height:s.bottom-s.top}));var o=window.SVGElement&&i instanceof window.SVGElement,a=n?{top:0,left:0}:o?null:e.offset(),r={scroll:n?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=n?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},s,r,l,a)},e.prototype.getCalculatedOffset=function(t,e,i,n){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-n,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-n/2,left:e.left-i}:{top:e.top+e.height/2-n/2,left:e.left+e.width}},e.prototype.getViewportAdjustedDelta=function(t,e,i,n){var s={top:0,left:0};if(!this.$viewport)return s;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-o-a.scroll,l=e.top+o-a.scroll+n;r<a.top?s.top=a.top-r:l>a.top+a.height&&(s.top=a.top+a.height-l)}else{var h=e.left-o,c=e.left+o+i;h<a.left?s.left=a.left-h:c>a.right&&(s.left=a.left+a.width-c)}return s},e.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},e.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},e.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},e.prototype.enable=function(){this.enabled=!0},e.prototype.disable=function(){this.enabled=!1},e.prototype.toggleEnabled=function(){this.enabled=!this.enabled},e.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},e.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var i=t.fn.tooltip;t.fn.tooltip=function(i){return this.each(function(){var n=t(this),s=n.data("bs.tooltip"),o="object"==typeof i&&i;!s&&/destroy|hide/.test(i)||(s||n.data("bs.tooltip",s=new e(this,o)),"string"==typeof i&&s[i]())})},t.fn.tooltip.Constructor=e,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.3.7",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=function(i){return this.each(function(){var n=t(this),s=n.data("bs.popover"),o="object"==typeof i&&i;!s&&/destroy|hide/.test(i)||(s||n.data("bs.popover",s=new e(this,o)),"string"==typeof i&&s[i]())})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),function(t){"use strict";function e(i,n){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,n),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var n=t(this),s=n.data("bs.scrollspy"),o="object"==typeof i&&i;s||n.data("bs.scrollspy",s=new e(this,o)),"string"==typeof i&&s[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),s=e.data("target")||e.attr("href"),o=/^#./.test(s)&&t(s);return o&&o.length&&o.is(":visible")&&[[o[i]().top+n,s]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),n=this.options.offset+i-this.$scrollElement.height(),s=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=n)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<s[0])return this.activeTarget=null,this.clear();for(t=s.length;t--;)a!=o[t]&&e>=s[t]&&(void 0===s[t+1]||e<s[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',n=t(i).parents("li").addClass("active");n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var n=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=n,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.tab");s||n.data("bs.tab",s=new i(this)),"string"==typeof e&&s[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),n=e.data("target");if(n||(n=(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var s=i.find(".active:last a"),o=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:s[0]});if(s.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var r=t(n);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){s.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:s[0]})})}}},i.prototype.activate=function(e,n,s){function o(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),s&&s()}var a=n.find("> .active"),r=s&&t.support.transition&&(a.length&&a.hasClass("fade")||!!n.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),a.removeClass("in")};var n=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=n,this};var s=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',s).on("click.bs.tab.data-api",'[data-toggle="pill"]',s)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.affix"),o="object"==typeof e&&e;s||n.data("bs.affix",s=new i(this,o)),"string"==typeof e&&s[e]()})}var i=function(e,n){this.options=t.extend({},i.DEFAULTS,n),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,n){var s=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return s<i&&"top";if("bottom"==this.affixed)return null!=i?!(s+this.unpin<=o.top)&&"bottom":!(s+a<=t-n)&&"bottom";var r=null==this.affixed,l=r?s:o.top;return null!=i&&s<=i?"top":null!=n&&l+(r?a:e)>=t-n&&"bottom"},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),n=this.options.offset,s=n.top,o=n.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof n&&(o=s=n),"function"==typeof s&&(s=n.top(this.$element)),"function"==typeof o&&(o=n.bottom(this.$element));var r=this.getState(a,e,s,o);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-o})}};var n=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=n,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),n=i.data();n.offset=n.offset||{},null!=n.offsetBottom&&(n.offset.bottom=n.offsetBottom),null!=n.offsetTop&&(n.offset.top=n.offsetTop),e.call(i,n)})})}(jQuery),function(t){"use strict";function e(t){if(!t)return"";var e,i="";for(e=0;e<t.length;e+=1)i+=M[t.charAt(e)]||t.charAt(e);return i}function i(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function n(t){return void 0!==t}function s(e,i,o,a){return n(e)&&!t.isArray(e)?t.isFunction(e)?e.apply(this,i):a:n(o)?s.call(this,o,i):a}function o(t,e,i,o){return s.call(this,n(this.source[e])&&Object.prototype.hasOwnProperty.call(this.source[e],t)?this.source[e][t]:void 0,i,function(){return s.call(this,n(this[t][e])?this[t][e]:n(this[t][0])?this[t][0]:Object.prototype.hasOwnProperty.call(this,t)?this[t]:void 0,i,S[t][e]||S[t][0]||S[t],o)},o)}function a(e,i){return n(i)||(i=0),t.isArray(this.source)&&n(this.source[i])&&n(this.source[i][e])?this.source[i][e]:n(this[e])?t.isArray(this[e])?n(this[e][i])?this[e][i]:n(this[e][0])?this[e][0]:null:this[e]:null}function r(e,i,n,s){i.xhr&&i.xhr.abort(),i.xhr=t.ajax(t.extend(!0,{url:e,type:"GET",async:!0,cache:!1,dataType:"json"},i.ajax)).done(function(e){n&&n.apply(this,t.makeArray(arguments))}).fail(function(t,e){s&&console.log("Request failed: "+e)})}function l(t,e){var i,n=!1;for(i=0;i<t.length;i+=1)if(n=o.call(this,"findRight",i,[t[i],e,i]))return{right:n,source:i};return!1}function h(t,e){var i;for(function(t,e){for(var i=0;i<t.length;i++)t[i]=o.call(this,"preparse",i,[t[i],e],t[i])}.call(this,t,e),i=0;i<t.length;i+=1)t[i]=o.call(this,"filter",i,[t[i],e,i],t[i])}function c(e,i,a){var l,h=this;if(t.isFunction(h.source))h.source.apply(h,[e,function(t){i=[t],s.call(h,a,[e])},i,0]);else for(l=0;l<h.source.length;l+=1)if(t.isArray(h.source[l]))i[l]=h.source[l];else if(t.isFunction(h.source[l]))!function(n){h.source[n].apply(h,[e,function(o){if(i[n]||(i[n]=[]),o&&t.isArray(o))switch(h.appendMethod){case"replace":i[n]=o;break;default:i[n]=i[n].concat(o)}s.call(h,a,[e])},i,n])}(l);else switch(h.source[l].type){case"remote":if(n(h.source[l].url)&&(!n(h.source[l].minLength)||e.length>=h.source[l].minLength)){var c=o.call(h,"replace",l,[h.source[l].url,e],"");i[l]||(i[l]=[]),function(t){r(c,h.source[t],function(n){i[t]=n,s.call(h,a,[e])},h.debug)}(l)}break;default:n(h.source[l].data)?i[l]=h.source[l].data:i[l]=h.source[l]}s.call(h,a,[e])}function u(t,e){return!!(n(t.data("source"))&&n(t.data("pid"))&&n(e[t.data("source")])&&n(e[t.data("source")][t.data("pid")]))&&e[t.data("source")][t.data("pid")]}function d(e,i){function s(){if(M.val()!=H){if((H=M.val()).length<i.minLength)return void M.trigger("close.xdsoft");c.call(i,H,A,function(t){var e;if(t==H)if(h.call(i,A,t),M.trigger("updateContent.xdsoft"),i.showHint&&H.length&&H.length<=M.prop("size")&&(e=l.call(i,A,H))){var n=o.call(i,"getTitle",e.source,[e.right,e.source]);n=t+n.substr(t.length),E.val(n)}else E.val("")})}}function a(t){var e,n=t.keyCode;switch(n){case x:case C:case k:case T:case D:if(t.shiftKey||t.ctrlKey)return!0;break;case _:case b:return!0;case f:case p:return!!(I||P||t.shiftKey||t.ctrlKey)||(N=M.val(),L=function(t){if(t){if(t.selectionStart)return t.selectionStart;if(document.selection){t.focus();var e=document.selection.createRange(),i=document.selection.createRange().text.length;return e.moveStart("character",-t.value.length),e.text.length-i}}}(M[0]),n!==f||L!==N.length||((e=l.call(i,A,N))?M.trigger("pick.xdsoft",[o.call(i,"getValue",e.source,[e.right,e.source])]):M.trigger("pick.xdsoft"),t.preventDefault(),!1));case v:return!0;case y:return!O||(M.trigger("pick.xdsoft"),t.preventDefault(),!1);case w:return M.val(H).trigger("close.xdsoft"),t.preventDefault(),!1;case m:case g:if(!O)return M.trigger("open.xdsoft"),M.trigger("updateContent.xdsoft"),t.preventDefault(),!1;z=S.find("div.active");var s=n==m?"next":"prev",a=!0;return z.length?(z.removeClass("active"),z[s]().length?z[s]().addClass("active"):(M.val(H),a=!1)):S.children().eq(n==m?0:-1).addClass("active"),a&&M.trigger("timepick.xdsoft"),S.trigger("updatescroll.xdsoft"),t.preventDefault(),!1}}if(!t(e).hasClass("xdsoft_input")){var r,d=t('<div class="xdsoft_autocomplete"></div>'),S=t('<div class="xdsoft_autocomplete_dropdown"></div>'),E=t('<input readonly class="xdsoft_autocomplete_hint"/>'),M=t(e),A=[],O=!1,N="",H="",z=null,L=0;M.data("autocomplete_options",i),S.on("mousedown",function(t){t.preventDefault(),t.stopPropagation()}).on("updatescroll.xdsoft",function(){var t=S.find(".active");if(t.length){var e=t.position().top,i=t.outerHeight(!0),n=S.scrollTop(),s=S.height();e<0?S.scrollTop(n-Math.abs(e)):e+i>s&&S.scrollTop(n+e+i-s)}}),d.css({display:M.css("display"),width:M.css("width")}),i.style&&d.css(i.style),M.addClass("xdsoft_input").attr("autocomplete","off");var W=null,R=null,$=!1;S.on("mousemove","div",function(){if(t(this).hasClass("active"))return!0;S.find("div").removeClass("active"),t(this).addClass("active")}).on("mousedown","div",function(e){S.find("div").removeClass("active"),t(this).addClass("active"),M.trigger("pick.xdsoft")}).on("touchstart","div",function(t){W=t.originalEvent.touches[0].clientX,R=t.originalEvent.touches[0].clientY}).on("touchend","div",function(e){!1===$&&(S.find("div").removeClass("active"),t(this).addClass("active"),M.trigger("pick.xdsoft")),$=!1}).on("touchmove","div",function(t){if(W&&R){var e=t.originalEvent.touches[0].clientX,i=t.originalEvent.touches[0].clientY,n=W-e,s=R-i;$=Math.abs(n)>Math.abs(s)?n>0?"left":"right":s>0?"top":"bottm",W=null,R=null}}),M.data("xdsoft_autocomplete",A).after(d).on("pick.xdsoft",function(t,e){M.trigger("timepick.xdsoft",e),H=M.val(),M.trigger("close.xdsoft"),(z=S.find("div.active").eq(0)).length||(z=S.children().first()),M.trigger("selected.xdsoft",[u(z,A)]),i.afterSelected&&i.afterSelected()}).on("timepick.xdsoft",function(t,e){(z=S.find("div.active")).length||(z=S.children().first()),z.length&&(n(e)?M.val(e):M.val(function(t,e){var i=u(t,e);return i?o.call(this,"getValue",t.data("source"),[i,t.data("source")]):n(t.data("value"))?decodeURIComponent(t.data("value")):t.html()}.call(i,z,A)),M.trigger("autocompleted.xdsoft",[u(z,A)]),E.val(""),function(t,e){if(t.setSelectionRange)t.focus(),t.setSelectionRange(e,e);else if(t.createTextRange){var i=t.createTextRange();i.collapse(!0),i.moveEnd("character",e),i.moveStart("character",e),i.select()}}(M[0],M.val().length))}).on("keydown.xdsoft input.xdsoft cut.xdsoft paste.xdsoft",function(t){var e=a(t);if(!1===e||!0===e)return e;setTimeout(function(){s()},1),s()}).on("change.xdsoft",function(t){H=M.val()}),H=M.val(),c.call(i,M.val(),A,function(t){h.call(i,A,t)}),i.openOnFocus&&M.on("focusin.xdsoft",function(){M.trigger("open.xdsoft"),M.trigger("updateContent.xdsoft")}),i.closeOnBlur&&M.on("focusout.xdsoft",function(){M.trigger("close.xdsoft")}),d.append(M).append(S);var j=!1,F=0;M.on("updateHelperPosition.xdsoft",function(){clearTimeout(F),F=setTimeout(function(){if(d.css({display:M.css("display"),width:M.css("width")}),S.css(t.extend(!0,{left:M.position().left,top:M.position().top+parseInt(M.css("marginTop"))+parseInt(M[0].offsetHeight),marginLeft:M.css("marginLeft"),marginRight:M.css("marginRight"),width:"100%"==i.dropdownWidth?M[0].offsetWidth:i.dropdownWidth},i.dropdownStyle)),i.showHint){var e=getComputedStyle(M[0],"");E[0].style.cssText=e.cssText,E.css({"box-sizing":e.boxSizing,borderStyle:"solid",borderCollapse:e.borderCollapse,borderLeftWidth:e.borderLeftWidth,borderRightWidth:e.borderRightWidth,borderTopWidth:e.borderTopWidth,borderBottomWidth:e.borderBottomWidth,paddingBottom:e.paddingBottom,marginBottom:e.marginBottom,paddingTop:e.paddingTop,marginTop:e.marginTop,paddingLeft:e.paddingLeft,marginLeft:e.marginLeft,paddingRight:e.paddingRight,marginRight:e.marginRight,maxHeight:e.maxHeight,minHeight:e.minHeight,maxWidth:e.maxWidth,minWidth:e.minWidth,width:e.width,letterSpacing:e.letterSpacing,lineHeight:e.lineHeight,outlineWidth:e.outlineWidth,fontFamily:e.fontFamily,fontVariant:e.fontVariant,fontStyle:M.css("fontStyle"),fontSize:M.css("fontSize"),fontWeight:M.css("fontWeight"),flex:e.flex,justifyContent:e.justifyContent,borderRadius:e.borderRadius,"-webkit-box-shadow":"none","box-shadow":"none"}),M.css("font-size",M.css("fontSize")),E.innerHeight(M.innerHeight()),E.css(t.extend(!0,{position:"absolute",zIndex:"1",borderColor:"transparent",outlineColor:"transparent",left:M.position().left,top:M.position().top,background:M.css("background")},i.hintStyle)),!1!==j?E.css("background",j):j=M.css("background");try{M[0].style.setProperty("background","transparent","important")}catch(t){M.css("background","transparent")}d.append(E)}},i.timeoutUpdate||1)}),M.is(":visible")?M.trigger("updateHelperPosition.xdsoft"):r=setInterval(function(){M.is(":visible")&&(M.trigger("updateHelperPosition.xdsoft"),clearInterval(r))},100),t(window).on("resize",function(){d.css({width:"auto"}),M.trigger("updateHelperPosition.xdsoft")}),M.on("close.xdsoft",function(){O&&(S.hide(),E.val(""),i.autoselect||M.val(H),O=!1)}).on("updateContent.xdsoft",function(){var e,n=function(e,i){var n,s,a,r=[];for(n=0;n<e.length;n+=1)for(s=0;s<e[n].length&&!(r.length>=this.limit);s+=1)(a=t(o.call(this,"render",n,[e[n][s],n,s,i],""))).data("source",n),a.data("pid",s),a.data("item",e[n][s]),r.push(a);return r}.call(i,A,M.val());n.length?(M.trigger("open.xdsoft"),t(n).each(function(){this.css(t.extend(!0,{paddingLeft:M.css("paddingLeft"),paddingRight:M.css("paddingRight")},i.itemStyle))}),S.html(n),e=i.visibleHeight?i.visibleHeight:i.visibleLimit*((n[0]?n[0].outerHeight(!0):0)||i.defaultHeightItem)+5,S.css("maxHeight",e+"px")):M.trigger("close.xdsoft")}).on("open.xdsoft",function(){
O||(S.show(),O=!0)}).on("destroy.xdsoft",function(){M.removeClass("xdsoft"),d.after(M),d.remove(),clearTimeout(0),clearTimeout(r),M.data("xdsoft_autocomplete",null),M.off(".xdsoft")})}}var p=37,f=39,g=38,m=40,v=9,b=17,_=16,y=13,w=27,x=65,C=67,k=86,T=90,D=89,S={},I=!1,P=!1,E={},M={"ẚ":"a","Á":"a","á":"a","À":"a","à":"a","Ă":"a","ă":"a","Ắ":"a","ắ":"a","Ằ":"a","ằ":"a","Ẵ":"a","ẵ":"a","Ẳ":"a","Ẫ":"a","ẫ":"a","Ẩ":"a","ẩ":"a","Ǎ":"a","ǎ":"a","Å":"a","å":"a","Ǻ":"a","ǻ":"a","Ä":"a","ä":"a","Ǟ":"a","ǟ":"a","Ã":"a","ã":"a","Ȧ":"a","ȧ":"a","Ǡ":"a","ǡ":"a","Ą":"a","ą":"a","Ā":"a","ā":"a","Ả":"a","ả":"a","Ȁ":"a","ȁ":"a","Ȃ":"a","ȃ":"a","Ạ":"a","ạ":"a","Ặ":"a","ặ":"a","Ậ":"a","ậ":"a","Ḁ":"a","ḁ":"a","Ⱥ":"a","ⱥ":"a","Ǽ":"a","ǽ":"a","Ǣ":"a","ǣ":"a","Ḃ":"b","ḃ":"b","Ḅ":"b","ḅ":"b","Ḇ":"b","ḇ":"b","Ƀ":"b","ƀ":"b","ᵬ":"b","Ɓ":"b","ɓ":"b","Ƃ":"b","ƃ":"b","Ć":"c","ć":"c","Ĉ":"c","ĉ":"c","Č":"c","č":"c","Ċ":"c","ċ":"c","Ç":"c","ç":"c","Ḉ":"c","ḉ":"c","Ȼ":"c","ȼ":"c","Ƈ":"c","ƈ":"c","ɕ":"c","Ď":"d","ď":"d","Ḋ":"d","ḋ":"d","Ḑ":"d","ḑ":"d","Ḍ":"d","ḍ":"d","Ḓ":"d","ḓ":"d","Ḏ":"d","ḏ":"d","Đ":"d","đ":"d","ᵭ":"d","Ɖ":"d","ɖ":"d","Ɗ":"d","ɗ":"d","Ƌ":"d","ƌ":"d","ȡ":"d","ð":"d","É":"e","Ə":"e","Ǝ":"e","ǝ":"e","é":"e","È":"e","è":"e","Ĕ":"e","ĕ":"e","Ê":"e","ê":"e","Ế":"e","ế":"e","Ề":"e","ề":"e","Ễ":"e","ễ":"e","Ể":"e","ể":"e","Ě":"e","ě":"e","Ë":"e","ë":"e","Ẽ":"e","ẽ":"e","Ė":"e","ė":"e","Ȩ":"e","ȩ":"e","Ḝ":"e","ḝ":"e","Ę":"e","ę":"e","Ē":"e","ē":"e","Ḗ":"e","ḗ":"e","Ḕ":"e","ḕ":"e","Ẻ":"e","ẻ":"e","Ȅ":"e","ȅ":"e","Ȇ":"e","ȇ":"e","Ẹ":"e","ẹ":"e","Ệ":"e","ệ":"e","Ḙ":"e","ḙ":"e","Ḛ":"e","ḛ":"e","Ɇ":"e","ɇ":"e","ɚ":"e","ɝ":"e","Ḟ":"f","ḟ":"f","ᵮ":"f","Ƒ":"f","ƒ":"f","Ǵ":"g","ǵ":"g","Ğ":"g","ğ":"g","Ĝ":"g","ĝ":"g","Ǧ":"g","ǧ":"g","Ġ":"g","ġ":"g","Ģ":"g","ģ":"g","Ḡ":"g","ḡ":"g","Ǥ":"g","ǥ":"g","Ɠ":"g","ɠ":"g","Ĥ":"h","ĥ":"h","Ȟ":"h","ȟ":"h","Ḧ":"h","ḧ":"h","Ḣ":"h","ḣ":"h","Ḩ":"h","ḩ":"h","Ḥ":"h","ḥ":"h","Ḫ":"h","ḫ":"h",H:"h","̱":"h","ẖ":"h","Ħ":"h","ħ":"h","Ⱨ":"h","ⱨ":"h","Í":"i","í":"i","Ì":"i","ì":"i","Ĭ":"i","ĭ":"i","Î":"i","î":"i","Ǐ":"i","ǐ":"i","Ï":"i","ï":"i","Ḯ":"i","ḯ":"i","Ĩ":"i","ĩ":"i","İ":"i",i:"i","Į":"i","į":"i","Ī":"i","ī":"i","Ỉ":"i","ỉ":"i","Ȉ":"i","ȉ":"i","Ȋ":"i","ȋ":"i","Ị":"i","ị":"i","Ḭ":"i","ḭ":"i",I:"i","ı":"i","Ɨ":"i","ɨ":"i","Ĵ":"j","ĵ":"j",J:"j","̌":"j","ǰ":"j","ȷ":"j","Ɉ":"j","ɉ":"j","ʝ":"j","ɟ":"j","ʄ":"j","Ḱ":"k","ḱ":"k","Ǩ":"k","ǩ":"k","Ķ":"k","ķ":"k","Ḳ":"k","ḳ":"k","Ḵ":"k","ḵ":"k","Ƙ":"k","ƙ":"k","Ⱪ":"k","ⱪ":"k","Ĺ":"a","ĺ":"l","Ľ":"l","ľ":"l","Ļ":"l","ļ":"l","Ḷ":"l","ḷ":"l","Ḹ":"l","ḹ":"l","Ḽ":"l","ḽ":"l","Ḻ":"l","ḻ":"l","Ł":"l","ł":"l","̣":"l","Ŀ":"l","ŀ":"l","Ƚ":"l","ƚ":"l","Ⱡ":"l","ⱡ":"l","Ɫ":"l","ɫ":"l","ɬ":"l","ɭ":"l","ȴ":"l","Ḿ":"m","ḿ":"m","Ṁ":"m","ṁ":"m","Ṃ":"m","ṃ":"m","ɱ":"m","Ń":"n","ń":"n","Ǹ":"n","ǹ":"n","Ň":"n","ň":"n","Ñ":"n","ñ":"n","Ṅ":"n","ṅ":"n","Ņ":"n","ņ":"n","Ṇ":"n","ṇ":"n","Ṋ":"n","ṋ":"n","Ṉ":"n","ṉ":"n","Ɲ":"n","ɲ":"n","Ƞ":"n","ƞ":"n","ɳ":"n","ȵ":"n",N:"n","̈":"n",n:"n","Ó":"o","ó":"o","Ò":"o","ò":"o","Ŏ":"o","ŏ":"o","Ô":"o","ô":"o","Ố":"o","ố":"o","Ồ":"o","ồ":"o","Ỗ":"o","ỗ":"o","Ổ":"o","ổ":"o","Ǒ":"o","ǒ":"o","Ö":"o","ö":"o","Ȫ":"o","ȫ":"o","Ő":"o","ő":"o","Õ":"o","õ":"o","Ṍ":"o","ṍ":"o","Ṏ":"o","ṏ":"o","Ȭ":"o","ȭ":"o","Ȯ":"o","ȯ":"o","Ȱ":"o","ȱ":"o","Ø":"o","ø":"o","Ǿ":"o","ǿ":"o","Ǫ":"o","ǫ":"o","Ǭ":"o","ǭ":"o","Ō":"o","ō":"o","Ṓ":"o","ṓ":"o","Ṑ":"o","ṑ":"o","Ỏ":"o","ỏ":"o","Ȍ":"o","ȍ":"o","Ȏ":"o","ȏ":"o","Ơ":"o","ơ":"o","Ớ":"o","ớ":"o","Ờ":"o","ờ":"o","Ỡ":"o","ỡ":"o","Ở":"o","ở":"o","Ợ":"o","ợ":"o","Ọ":"o","ọ":"o","Ộ":"o","ộ":"o","Ɵ":"o","ɵ":"o","Ṕ":"p","ṕ":"p","Ṗ":"p","ṗ":"p","Ᵽ":"p","Ƥ":"p","ƥ":"p",P:"p","̃":"p",p:"p","ʠ":"q","Ɋ":"q","ɋ":"q","Ŕ":"r","ŕ":"r","Ř":"r","ř":"r","Ṙ":"r","ṙ":"r","Ŗ":"r","ŗ":"r","Ȑ":"r","ȑ":"r","Ȓ":"r","ȓ":"r","Ṛ":"r","ṛ":"r","Ṝ":"r","ṝ":"r","Ṟ":"r","ṟ":"r","Ɍ":"r","ɍ":"r","ᵲ":"r","ɼ":"r","Ɽ":"r","ɽ":"r","ɾ":"r","ᵳ":"r","ß":"s","Ś":"s","ś":"s","Ṥ":"s","ṥ":"s","Ŝ":"s","ŝ":"s","Š":"s","š":"s","Ṧ":"s","ṧ":"s","Ṡ":"s","ṡ":"s","ẛ":"s","Ş":"s","ş":"s","Ṣ":"s","ṣ":"s","Ṩ":"s","ṩ":"s","Ș":"s","ș":"s","ʂ":"s",S:"s","̩":"s",s:"s","Þ":"t","þ":"t","Ť":"t","ť":"t",T:"t","ẗ":"t","Ṫ":"t","ṫ":"t","Ţ":"t","ţ":"t","Ṭ":"t","ṭ":"t","Ț":"t","ț":"t","Ṱ":"t","ṱ":"t","Ṯ":"t","ṯ":"t","Ŧ":"t","ŧ":"t","Ⱦ":"t","ⱦ":"t","ᵵ":"t","ƫ":"t","Ƭ":"t","ƭ":"t","Ʈ":"t","ʈ":"t","ȶ":"t","Ú":"u","ú":"u","Ù":"u","ù":"u","Ŭ":"u","ŭ":"u","Û":"u","û":"u","Ǔ":"u","ǔ":"u","Ů":"u","ů":"u","Ü":"u","ü":"u","Ǘ":"u","ǘ":"u","Ǜ":"u","ǜ":"u","Ǚ":"u","ǚ":"u","Ǖ":"u","ǖ":"u","Ű":"u","ű":"u","Ũ":"u","ũ":"u","Ṹ":"u","ṹ":"u","Ų":"u","ų":"u","Ū":"u","ū":"u","Ṻ":"u","ṻ":"u","Ủ":"u","ủ":"u","Ȕ":"u","ȕ":"u","Ȗ":"u","ȗ":"u","Ư":"u","ư":"u","Ứ":"u","ứ":"u","Ừ":"u","ừ":"u","Ữ":"u","ữ":"u","Ử":"u","ử":"u","Ự":"u","ự":"u","Ụ":"u","ụ":"u","Ṳ":"u","ṳ":"u","Ṷ":"u","ṷ":"u","Ṵ":"u","ṵ":"u","Ʉ":"u","ʉ":"u","Ṽ":"v","ṽ":"v","Ṿ":"v","ṿ":"v","Ʋ":"v","ʋ":"v","Ẃ":"w","ẃ":"w","Ẁ":"w","ẁ":"w","Ŵ":"w","ŵ":"w",W:"w","̊":"w","ẘ":"w","Ẅ":"w","ẅ":"w","Ẇ":"w","ẇ":"w","Ẉ":"w","ẉ":"w","Ẍ":"x","ẍ":"x","Ẋ":"x","ẋ":"x","Ý":"y","ý":"y","Ỳ":"y","ỳ":"y","Ŷ":"y","ŷ":"y",Y:"y","ẙ":"y","Ÿ":"y","ÿ":"y","Ỹ":"y","ỹ":"y","Ẏ":"y","ẏ":"y","Ȳ":"y","ȳ":"y","Ỷ":"y","ỷ":"y","Ỵ":"y","ỵ":"y","ʏ":"y","Ɏ":"y","ɏ":"y","Ƴ":"y","ƴ":"y","Ź":"z","ź":"z","Ẑ":"z","ẑ":"z","Ž":"z","ž":"z","Ż":"z","ż":"z","Ẓ":"z","ẓ":"z","Ẕ":"z","ẕ":"z","Ƶ":"z","ƶ":"z","Ȥ":"z","ȥ":"z","ʐ":"z","ʑ":"z","Ⱬ":"z","ⱬ":"z","Ǯ":"z","ǯ":"z","ƺ":"z","2":"2","6":"6","B":"B","F":"F","J":"J","N":"N","R":"R","V":"V","Z":"Z","b":"b","f":"f","j":"j","n":"n","r":"r","v":"v","z":"z","1":"1","5":"5","9":"9","A":"A","E":"E","I":"I","M":"M","Q":"Q","U":"U","Y":"Y","a":"a","e":"e","i":"i","m":"m","q":"q","u":"u","y":"y","0":"0","4":"4","8":"8","D":"D","H":"H","L":"L","P":"P","T":"T","X":"X","d":"d","h":"h","l":"l","p":"p","t":"t","x":"x","3":"3","7":"7","C":"C","G":"G","K":"K","O":"O","S":"S","W":"W","c":"c","g":"g","k":"k","o":"o","s":"s","w":"w","ẳ":"a","Â":"a","â":"a","Ấ":"a","ấ":"a","Ầ":"a","ầ":"a"};void 0===window.getComputedStyle&&(window.getComputedStyle=function(){function t(e,i,n,s){var o,a=i[n],r=parseFloat(a),l=a.split(/\d/)[0];return s=null!==s?s:/%|em/.test(l)&&e.parentElement?t(e.parentElement,e.parentElement.currentStyle,"fontSize",null):16,o="fontSize"===n?s:/width/i.test(n)?e.clientWidth:e.clientHeight,"em"===l?r*s:"in"===l?96*r:"pt"===l?96*r/72:"%"===l?r/100*o:r}function e(t,e){var i="border"===e?"Width":"",n=e+"Top"+i,s=e+"Right"+i,o=e+"Bottom"+i,a=e+"Left"+i;t[e]=(t[n]===t[s]===t[o]===t[a]?[t[n]]:t[n]===t[o]&&t[a]===t[s]?[t[n],t[s]]:t[a]===t[s]?[t[n],t[s],t[o]]:[t[n],t[s],t[o],t[a]]).join(" ")}function i(i){var n,s=i.currentStyle,o=this,a=t(i,s,"fontSize",null);for(n in s)Object.prototype.hasOwnProperty.call(s,n)&&(/width|height|margin.|padding.|border.+W/.test(n)&&"auto"!==o[n]?o[n]=t(i,s,n,a)+"px":"styleFloat"===n?o.float=s[n]:o[n]=s[n]);return e(o,"margin"),e(o,"padding"),e(o,"border"),o.fontSize=a+"px",o}return i.prototype={constructor:i,getPropertyPriority:function(){},getPropertyValue:function(t){return this[t]||""},item:function(){},removeProperty:function(){},setProperty:function(){},getPropertyCSSValue:function(){}},function(t){return new i(t)}}()),t(document).on("keydown.xdsoftctrl",function(t){t.keyCode===b&&(I=!0),t.keyCode===_&&(I=!0)}).on("keyup.xdsoftctrl",function(t){t.keyCode===b&&(I=!1),t.keyCode===_&&(I=!1)}),S={minLength:0,valueKey:"value",titleKey:"title",highlight:!0,showHint:!0,dropdownWidth:"100%",dropdownStyle:{},itemStyle:{},hintStyle:!1,style:!1,debug:!0,openOnFocus:!1,closeOnBlur:!0,autoselect:!1,accents:!0,replaceAccentsForRemote:!0,limit:20,visibleLimit:20,visibleHeight:0,defaultHeightItem:30,timeoutUpdate:10,get:function(t,e){return a.call(this,t,e)},replace:[function(t,i){return this.replaceAccentsForRemote&&(i=e(i)),t.replace("%QUERY%",encodeURIComponent(i))}],equal:function(t,e){return e.toLowerCase()==t.substr(0,e.length).toLowerCase()},findRight:[function(t,e,i){var n,s="";if(t)for(n=0;n<t.length;n+=1)if(s=o.call(this,"getValue",i,[t[n],i]),o.call(this,"equal",i,[s,e,i],!1))return t[n];return!1}],valid:[function(t,i){return this.accents&&(t=e(t),i=e(i)),-1!=t.toLowerCase().indexOf(i.toLowerCase())}],filter:[function(t,e,i){var s,a=[],r="";if(t)for(s=0;s<t.length;s+=1)r=n(t[s][this.get("valueKey",i)])?t[s][this.get("valueKey",i)]:t[s].toString(),o.call(this,"valid",i,[r,e])&&a.push(t[s]);return a}],preparse:function(t){return t},getValue:[function(t,e){return n(t[this.get("valueKey",e)])?t[this.get("valueKey",e)]:t.toString()}],getTitle:[function(t,e){return n(t[this.get("titleKey",e)])?t[this.get("titleKey",e)]:t.toString()}],render:[function(t,n,s,a){var r,l,h,c=o.call(this,"getValue",n,[t,n],S.getValue[0].call(this,t,n)),u=o.call(this,"getTitle",n,[t,n],S.getTitle[0].call(this,t,n)),d="",p="",f="",g="",m=0;if(this.highlight)if(this.accents){for(p=e(u).toLowerCase().replace(/[<>]+/g,""),d=e(a).toLowerCase().replace(/[<>]+/g,""),f=p.replace(new RegExp(i(d),"g"),"<"+d+">"),h=0;h<f.length;h+=1)r=u.charAt(m),"<"===(l=f.charAt(h))?g+="<b>":">"===l?g+="</b>":(m+=1,g+=r);u=g}else u=u.replace(new RegExp("("+i(a)+")","i"),"<b>$1</b>");return"<div "+(c==a?'class="active"':"")+' data-value="'+encodeURIComponent(c)+'">'+u+"</div>"}],appendMethod:"concat",source:[],afterSelected:function(){}},E={destroy:function(){return this.trigger("destroy.xdsoft")},update:function(){return this.trigger("updateHelperPosition.xdsoft")},options:function(e){return this.data("autocomplete_options")&&t.isPlainObject(e)&&this.data("autocomplete_options",t.extend(!0,this.data("autocomplete_options"),e)),this},setSource:function(e,i){if(this.data("autocomplete_options")&&(t.isPlainObject(e)||t.isFunction(e)||t.isArray(e))){var n=this.data("autocomplete_options"),s=this.data("xdsoft_autocomplete"),o=n.source;void 0===i||isNaN(i)?t.isFunction(e)?this.data("autocomplete_options").source=e:t.extend(!0,o,e):t.isPlainObject(e)||t.isArray(e)?o[i]=t.extend(!0,t.isArray(e)?[]:{},e):o[i]=e,c.call(n,this.val(),s,function(t){h.call(n,s,t)})}return this},getSource:function(t){if(this.data("autocomplete_options")){var e=this.data("autocomplete_options").source;return void 0!==t&&!isNaN(t)&&e[t]?e[t]:e}return null}},t.fn.autocomplete=function(e,i,n){return"string"===t.type(e)&&E[e]?E[e].call(this,i,n):this.each(function(){d(this,t.extend(!0,{},S,e))})}}(jQuery),function(t){t("#search").keyup(function(){t.ajax({type:"POST",url:"/search/",data:{search_text:t("#search").val(),csrfmiddlewaretoken:t("input[name=csrfmiddlewaretoken]").val()},success:searchSuccess,dataType:"html"})})}($),$(document).ready(function(){function t(){$(".basket-items").removeClass("hidden")}var e=$("#form-buying-products");e.on("submit",function(t){t.preventDefault(),$("#number").val();var i=$("#number").val(),n=$("#submit-btn"),s=n.data("products-id"),o=(n.data("products-name"),n.data("products-price"),{});o.product_id=s,o.nmb=i;var a=$('#form-buying-products [name="csrfmiddlewaretoken"]').val();o.csrfmiddlewaretoken=a;var r=e.attr("action");$.ajax({url:r,type:"POST",data:o,cache:!0,success:function(t){t.products_total_nmb&&($("#basket_total_nmb").text("("+t.products_total_nmb+")"),$(".basket-items ul").html(""),$.each(t.products,function(t,e){$(".basket-items ul").append("<li>"+e.name+", "+e.nmb+"pc. for "+e.price_per_item+"rub. </li>")}))},error:function(){console.log("error")}})}),$(".basket-container").mouseover(function(){t()}),$(".basket-container").mouseout(function(){t()}),$(document).on("click",".delete-item",function(t){t.preventDefault(),$(this).closest("li").remove()})}),function(t,e){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=t.document?e(t,!0):function(t){if(!t.document)throw new Error("jQuery requires a window with a document");return e(t)}:e(t)}("undefined"!=typeof window?window:this,function(t,e){"use strict";function i(t,e,i){var n,s=(e=e||Z).createElement("script");if(s.text=t,i)for(n in pt)i[n]&&(s[n]=i[n]);e.head.appendChild(s).parentNode.removeChild(s)}function n(t){return null==t?t+"":"object"==typeof t||"function"==typeof t?ot[at.call(t)]||"object":typeof t}function s(t){var e=!!t&&"length"in t&&t.length,i=n(t);return!ut(t)&&!dt(t)&&("array"===i||0===e||"number"==typeof e&&e>0&&e-1 in t)}function o(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function a(t,e,i){return ut(e)?ft.grep(t,function(t,n){return!!e.call(t,n,t)!==i}):e.nodeType?ft.grep(t,function(t){return t===e!==i}):"string"!=typeof e?ft.grep(t,function(t){return st.call(e,t)>-1!==i}):ft.filter(e,t,i)}function r(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function l(t){return t}function h(t){throw t}function c(t,e,i,n){var s;try{t&&ut(s=t.promise)?s.call(t).done(e).fail(i):t&&ut(s=t.then)?s.call(t,e,i):e.apply(void 0,[t].slice(n))}catch(t){i.apply(void 0,[t])}}function u(){Z.removeEventListener("DOMContentLoaded",u),t.removeEventListener("load",u),ft.ready()}function d(t,e){return e.toUpperCase()}function p(t){return t.replace(Pt,"ms-").replace(Et,d)}function f(){this.expando=ft.expando+f.uid++}function g(t,e,i){var n;if(void 0===i&&1===t.nodeType)if(n="data-"+e.replace(Ht,"-$&").toLowerCase(),"string"==typeof(i=t.getAttribute(n))){try{i=function(t){return"true"===t||"false"!==t&&("null"===t?null:t===+t+""?+t:Nt.test(t)?JSON.parse(t):t)}(i)}catch(t){}Ot.set(t,e,i)}else i=void 0;return i}function m(t,e,i,n){var s,o,a=20,r=n?function(){return n.cur()}:function(){return ft.css(t,e,"")},l=r(),h=i&&i[3]||(ft.cssNumber[e]?"":"px"),c=(ft.cssNumber[e]||"px"!==h&&+l)&&Lt.exec(ft.css(t,e));if(c&&c[3]!==h){for(l/=2,h=h||c[3],c=+l||1;a--;)ft.style(t,e,c+h),(1-o)*(1-(o=r()/l||.5))<=0&&(a=0),c/=o;c*=2,ft.style(t,e,c+h),i=i||[]}return i&&(c=+c||+l||0,s=i[1]?c+(i[1]+1)*i[2]:+i[2],n&&(n.unit=h,n.start=c,n.end=s)),s}function v(t){var e,i=t.ownerDocument,n=t.nodeName,s=jt[n];return s||(e=i.body.appendChild(i.createElement(n)),s=ft.css(e,"display"),e.parentNode.removeChild(e),"none"===s&&(s="block"),jt[n]=s,s)}function b(t,e){for(var i,n,s=[],o=0,a=t.length;o<a;o++)(n=t[o]).style&&(i=n.style.display,e?("none"===i&&(s[o]=At.get(n,"display")||null,s[o]||(n.style.display="")),""===n.style.display&&Rt(n)&&(s[o]=v(n))):"none"!==i&&(s[o]="none",At.set(n,"display",i)));for(o=0;o<a;o++)null!=s[o]&&(t[o].style.display=s[o]);return t}function _(t,e){var i;return i=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||"*"):void 0!==t.querySelectorAll?t.querySelectorAll(e||"*"):[],void 0===e||e&&o(t,e)?ft.merge([t],i):i}function y(t,e){for(var i=0,n=t.length;i<n;i++)At.set(t[i],"globalEval",!e||At.get(e[i],"globalEval"))}function w(t,e,i,s,o){for(var a,r,l,h,c,u,d=e.createDocumentFragment(),p=[],f=0,g=t.length;f<g;f++)if((a=t[f])||0===a)if("object"===n(a))ft.merge(p,a.nodeType?[a]:a);else if(Yt.test(a)){for(r=r||d.appendChild(e.createElement("div")),l=(Bt.exec(a)||["",""])[1].toLowerCase(),h=Ut[l]||Ut._default,r.innerHTML=h[1]+ft.htmlPrefilter(a)+h[2],u=h[0];u--;)r=r.lastChild;ft.merge(p,r.childNodes),(r=d.firstChild).textContent=""}else p.push(e.createTextNode(a));for(d.textContent="",f=0;a=p[f++];)if(s&&ft.inArray(a,s)>-1)o&&o.push(a);else if(c=ft.contains(a.ownerDocument,a),r=_(d.appendChild(a),"script"),c&&y(r),i)for(u=0;a=r[u++];)qt.test(a.type||"")&&i.push(a);return d}function x(){return!0}function C(){return!1}function k(){try{return Z.activeElement}catch(t){}}function T(t,e,i,n,s,o){var a,r;if("object"==typeof e){for(r in"string"!=typeof i&&(n=n||i,i=void 0),e)T(t,r,i,n,e[r],o);return t}if(null==n&&null==s?(s=i,n=i=void 0):null==s&&("string"==typeof i?(s=n,n=void 0):(s=n,n=i,i=void 0)),!1===s)s=C;else if(!s)return t;return 1===o&&(a=s,(s=function(t){return ft().off(t),a.apply(this,arguments)}).guid=a.guid||(a.guid=ft.guid++)),t.each(function(){ft.event.add(this,e,s,n,i)})}function D(t,e){return o(t,"table")&&o(11!==e.nodeType?e:e.firstChild,"tr")&&ft(t).children("tbody")[0]||t}function S(t){return t.type=(null!==t.getAttribute("type"))+"/"+t.type,t}function I(t){return"true/"===(t.type||"").slice(0,5)?t.type=t.type.slice(5):t.removeAttribute("type"),t}function P(t,e){var i,n,s,o,a,r,l,h;if(1===e.nodeType){if(At.hasData(t)&&(o=At.access(t),a=At.set(e,o),h=o.events))for(s in delete a.handle,a.events={},h)for(i=0,n=h[s].length;i<n;i++)ft.event.add(e,s,h[s][i]);Ot.hasData(t)&&(r=Ot.access(t),l=ft.extend({},r),Ot.set(e,l))}}function E(t,e){var i=e.nodeName.toLowerCase();"input"===i&&Ft.test(t.type)?e.checked=t.checked:"input"!==i&&"textarea"!==i||(e.defaultValue=t.defaultValue)}function M(t,e,n,s){e=it.apply([],e);var o,a,r,l,h,c,u=0,d=t.length,p=d-1,f=e[0],g=ut(f);if(g||d>1&&"string"==typeof f&&!ct.checkClone&&Zt.test(f))return t.each(function(i){var o=t.eq(i);g&&(e[0]=f.call(this,i,o.html())),M(o,e,n,s)});if(d&&(a=(o=w(e,t[0].ownerDocument,!1,t,s)).firstChild,1===o.childNodes.length&&(o=a),a||s)){for(l=(r=ft.map(_(o,"script"),S)).length;u<d;u++)h=o,u!==p&&(h=ft.clone(h,!0,!0),l&&ft.merge(r,_(h,"script"))),n.call(t[u],h,u);if(l)for(c=r[r.length-1].ownerDocument,ft.map(r,I),u=0;u<l;u++)h=r[u],qt.test(h.type||"")&&!At.access(h,"globalEval")&&ft.contains(c,h)&&(h.src&&"module"!==(h.type||"").toLowerCase()?ft._evalUrl&&ft._evalUrl(h.src):i(h.textContent.replace(te,""),c,h))}return t}function A(t,e,i){for(var n,s=e?ft.filter(e,t):t,o=0;null!=(n=s[o]);o++)i||1!==n.nodeType||ft.cleanData(_(n)),n.parentNode&&(i&&ft.contains(n.ownerDocument,n)&&y(_(n,"script")),n.parentNode.removeChild(n));return t}function O(t,e,i){var n,s,o,a,r=t.style;return(i=i||ie(t))&&(""!==(a=i.getPropertyValue(e)||i[e])||ft.contains(t.ownerDocument,t)||(a=ft.style(t,e)),!ct.pixelBoxStyles()&&ee.test(a)&&ne.test(e)&&(n=r.width,s=r.minWidth,o=r.maxWidth,r.minWidth=r.maxWidth=r.width=a,a=i.width,r.width=n,r.minWidth=s,r.maxWidth=o)),void 0!==a?a+"":a}function N(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}function H(t){var e=ft.cssProps[t];return e||(e=ft.cssProps[t]=function(t){if(t in he)return t;for(var e=t[0].toUpperCase()+t.slice(1),i=le.length;i--;)if((t=le[i]+e)in he)return t}(t)||t),e}function z(t,e,i){var n=Lt.exec(e);return n?Math.max(0,n[2]-(i||0))+(n[3]||"px"):e}function L(t,e,i,n,s,o){var a="width"===e?1:0,r=0,l=0;if(i===(n?"border":"content"))return 0;for(;a<4;a+=2)"margin"===i&&(l+=ft.css(t,i+Wt[a],!0,s)),n?("content"===i&&(l-=ft.css(t,"padding"+Wt[a],!0,s)),"margin"!==i&&(l-=ft.css(t,"border"+Wt[a]+"Width",!0,s))):(l+=ft.css(t,"padding"+Wt[a],!0,s),"padding"!==i?l+=ft.css(t,"border"+Wt[a]+"Width",!0,s):r+=ft.css(t,"border"+Wt[a]+"Width",!0,s));return!n&&o>=0&&(l+=Math.max(0,Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-o-l-r-.5))),l}function W(t,e,i){var n=ie(t),s=O(t,e,n),o="border-box"===ft.css(t,"boxSizing",!1,n),a=o;if(ee.test(s)){if(!i)return s;s="auto"}return a=a&&(ct.boxSizingReliable()||s===t.style[e]),("auto"===s||!parseFloat(s)&&"inline"===ft.css(t,"display",!1,n))&&(s=t["offset"+e[0].toUpperCase()+e.slice(1)],a=!0),(s=parseFloat(s)||0)+L(t,e,i||(o?"border":"content"),a,n,s)+"px"}function R(t,e,i,n,s){return new R.prototype.init(t,e,i,n,s)}function $(){ue&&(!1===Z.hidden&&t.requestAnimationFrame?t.requestAnimationFrame($):t.setTimeout($,ft.fx.interval),ft.fx.tick())}function j(){return t.setTimeout(function(){ce=void 0}),ce=Date.now()}function F(t,e){var i,n=0,s={height:t};for(e=e?1:0;n<4;n+=2-e)s["margin"+(i=Wt[n])]=s["padding"+i]=t;return e&&(s.opacity=s.width=t),s}function B(t,e,i){for(var n,s=(q.tweeners[e]||[]).concat(q.tweeners["*"]),o=0,a=s.length;o<a;o++)if(n=s[o].call(i,e,t))return n}function q(t,e,i){var n,s,o=0,a=q.prefilters.length,r=ft.Deferred().always(function(){delete l.elem}),l=function(){if(s)return!1;for(var e=ce||j(),i=Math.max(0,h.startTime+h.duration-e),n=1-(i/h.duration||0),o=0,a=h.tweens.length;o<a;o++)h.tweens[o].run(n);return r.notifyWith(t,[h,n,i]),n<1&&a?i:(a||r.notifyWith(t,[h,1,0]),r.resolveWith(t,[h]),!1)},h=r.promise({elem:t,props:ft.extend({},e),opts:ft.extend(!0,{specialEasing:{},easing:ft.easing._default},i),originalProperties:e,originalOptions:i,startTime:ce||j(),duration:i.duration,tweens:[],createTween:function(e,i){var n=ft.Tween(t,h.opts,e,i,h.opts.specialEasing[e]||h.opts.easing);return h.tweens.push(n),n},stop:function(e){var i=0,n=e?h.tweens.length:0;if(s)return this;for(s=!0;i<n;i++)h.tweens[i].run(1);return e?(r.notifyWith(t,[h,1,0]),r.resolveWith(t,[h,e])):r.rejectWith(t,[h,e]),this}}),c=h.props;for((function(t,e){var i,n,s,o,a;for(i in t)if(s=e[n=p(i)],o=t[i],Array.isArray(o)&&(s=o[1],o=t[i]=o[0]),i!==n&&(t[n]=o,delete t[i]),(a=ft.cssHooks[n])&&"expand"in a)for(i in o=a.expand(o),delete t[n],o)i in t||(t[i]=o[i],e[i]=s);else e[n]=s}(c,h.opts.specialEasing));o<a;o++)if(n=q.prefilters[o].call(h,t,c,h.opts))return ut(n.stop)&&(ft._queueHooks(h.elem,h.opts.queue).stop=n.stop.bind(n)),n;return ft.map(c,B,h),ut(h.opts.start)&&h.opts.start.call(t,h),h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always),ft.fx.timer(ft.extend(l,{elem:t,anim:h,queue:h.opts.queue})),h}function U(t){return(t.match(Tt)||[]).join(" ")}function Y(t){return t.getAttribute&&t.getAttribute("class")||""}function V(t){return Array.isArray(t)?t:"string"==typeof t&&t.match(Tt)||[]}function K(t,e,i,s){var o;if(Array.isArray(e))ft.each(e,function(e,n){i||ke.test(t)?s(t,n):K(t+"["+("object"==typeof n&&null!=n?e:"")+"]",n,i,s)});else if(i||"object"!==n(e))s(t,e);else for(o in e)K(t+"["+o+"]",e[o],i,s)}function X(t){return function(e,i){"string"!=typeof e&&(i=e,e="*");var n,s=0,o=e.toLowerCase().match(Tt)||[];if(ut(i))for(;n=o[s++];)"+"===n[0]?(n=n.slice(1)||"*",(t[n]=t[n]||[]).unshift(i)):(t[n]=t[n]||[]).push(i)}}function G(t,e,i,n){function s(r){var l;return o[r]=!0,ft.each(t[r]||[],function(t,r){var h=r(e,i,n);return"string"!=typeof h||a||o[h]?a?!(l=h):void 0:(e.dataTypes.unshift(h),s(h),!1)}),l}var o={},a=t===He;return s(e.dataTypes[0])||!o["*"]&&s("*")}function Q(t,e){var i,n,s=ft.ajaxSettings.flatOptions||{};for(i in e)void 0!==e[i]&&((s[i]?t:n||(n={}))[i]=e[i]);return n&&ft.extend(!0,t,n),t}var J=[],Z=t.document,tt=Object.getPrototypeOf,et=J.slice,it=J.concat,nt=J.push,st=J.indexOf,ot={},at=ot.toString,rt=ot.hasOwnProperty,lt=rt.toString,ht=lt.call(Object),ct={},ut=function(t){return"function"==typeof t&&"number"!=typeof t.nodeType},dt=function(t){return null!=t&&t===t.window},pt={type:!0,src:!0,noModule:!0},ft=function(t,e){return new ft.fn.init(t,e)},gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;ft.fn=ft.prototype={jquery:"3.3.1",constructor:ft,length:0,toArray:function(){return et.call(this)},get:function(t){return null==t?et.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=ft.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return ft.each(this,t)},map:function(t){return this.pushStack(ft.map(this,function(e,i){return t.call(e,i,e)}))},slice:function(){return this.pushStack(et.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,i=+t+(t<0?e:0);return this.pushStack(i>=0&&i<e?[this[i]]:[])},end:function(){return this.prevObject||this.constructor()},push:nt,sort:J.sort,splice:J.splice},ft.extend=ft.fn.extend=function(){var t,e,i,n,s,o,a=arguments[0]||{},r=1,l=arguments.length,h=!1;for("boolean"==typeof a&&(h=a,a=arguments[r]||{},r++),"object"==typeof a||ut(a)||(a={}),r===l&&(a=this,r--);r<l;r++)if(null!=(t=arguments[r]))for(e in t)i=a[e],a!==(n=t[e])&&(h&&n&&(ft.isPlainObject(n)||(s=Array.isArray(n)))?(s?(s=!1,o=i&&Array.isArray(i)?i:[]):o=i&&ft.isPlainObject(i)?i:{},a[e]=ft.extend(h,o,n)):void 0!==n&&(a[e]=n));return a},ft.extend({expando:"jQuery"+("3.3.1"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isPlainObject:function(t){var e,i;return!(!t||"[object Object]"!==at.call(t)||(e=tt(t))&&("function"!=typeof(i=rt.call(e,"constructor")&&e.constructor)||lt.call(i)!==ht))},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},globalEval:function(t){i(t)},each:function(t,e){var i,n=0;if(s(t))for(i=t.length;n<i&&!1!==e.call(t[n],n,t[n]);n++);else for(n in t)if(!1===e.call(t[n],n,t[n]))break;return t},trim:function(t){return null==t?"":(t+"").replace(gt,"")},makeArray:function(t,e){var i=e||[];return null!=t&&(s(Object(t))?ft.merge(i,"string"==typeof t?[t]:t):nt.call(i,t)),i},inArray:function(t,e,i){return null==e?-1:st.call(e,t,i)},merge:function(t,e){for(var i=+e.length,n=0,s=t.length;n<i;n++)t[s++]=e[n];return t.length=s,t},grep:function(t,e,i){for(var n=[],s=0,o=t.length,a=!i;s<o;s++)!e(t[s],s)!==a&&n.push(t[s]);return n},map:function(t,e,i){var n,o,a=0,r=[];if(s(t))for(n=t.length;a<n;a++)null!=(o=e(t[a],a,i))&&r.push(o);else for(a in t)null!=(o=e(t[a],a,i))&&r.push(o);return it.apply([],r)},guid:1,support:ct}),"function"==typeof Symbol&&(ft.fn[Symbol.iterator]=J[Symbol.iterator]),ft.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(t,e){ot["[object "+e+"]"]=e.toLowerCase()});var mt=function(t){function e(t,e,i,n){var s,o,a,r,l,c,d,p=e&&e.ownerDocument,f=e?e.nodeType:9;if(i=i||[],"string"!=typeof t||!t||1!==f&&9!==f&&11!==f)return i;if(!n&&((e?e.ownerDocument||e:R)!==M&&E(e),e=e||M,O)){if(11!==f&&(l=gt.exec(t)))if(s=l[1]){if(9===f){if(!(a=e.getElementById(s)))return i;if(a.id===s)return i.push(a),i}else if(p&&(a=p.getElementById(s))&&L(e,a)&&a.id===s)return i.push(a),i}else{if(l[2])return G.apply(i,e.getElementsByTagName(t)),i;if((s=l[3])&&y.getElementsByClassName&&e.getElementsByClassName)return G.apply(i,e.getElementsByClassName(s)),i}if(y.qsa&&!q[t+" "]&&(!N||!N.test(t))){if(1!==f)p=e,d=t;else if("object"!==e.nodeName.toLowerCase()){for((r=e.getAttribute("id"))?r=r.replace(_t,yt):e.setAttribute("id",r=W),o=(c=k(t)).length;o--;)c[o]="#"+r+" "+u(c[o]);d=c.join(","),p=mt.test(t)&&h(e.parentNode)||e}if(d)try{return G.apply(i,p.querySelectorAll(d)),i}catch(t){}finally{r===W&&e.removeAttribute("id")}}}return D(t.replace(ot,"$1"),e,i,n)}function i(){var t=[];return function e(i,n){return t.push(i+" ")>w.cacheLength&&delete e[t.shift()],e[i+" "]=n}}function n(t){return t[W]=!0,t}function s(t){var e=M.createElement("fieldset");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function o(t,e){for(var i=t.split("|"),n=i.length;n--;)w.attrHandle[i[n]]=e}function a(t,e){var i=e&&t,n=i&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(n)return n;if(i)for(;i=i.nextSibling;)if(i===e)return-1;return t?1:-1}function r(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&xt(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function l(t){return n(function(e){return e=+e,n(function(i,n){for(var s,o=t([],i.length,e),a=o.length;a--;)i[s=o[a]]&&(i[s]=!(n[s]=i[s]))})})}function h(t){return t&&void 0!==t.getElementsByTagName&&t}function c(){}function u(t){for(var e=0,i=t.length,n="";e<i;e++)n+=t[e].value;return n}function d(t,e,i){var n=e.dir,s=e.next,o=s||n,a=i&&"parentNode"===o,r=j++;return e.first?function(e,i,s){for(;e=e[n];)if(1===e.nodeType||a)return t(e,i,s);return!1}:function(e,i,l){var h,c,u,d=[$,r];if(l){for(;e=e[n];)if((1===e.nodeType||a)&&t(e,i,l))return!0}else for(;e=e[n];)if(1===e.nodeType||a)if(c=(u=e[W]||(e[W]={}))[e.uniqueID]||(u[e.uniqueID]={}),s&&s===e.nodeName.toLowerCase())e=e[n]||e;else{if((h=c[o])&&h[0]===$&&h[1]===r)return d[2]=h[2];if(c[o]=d,d[2]=t(e,i,l))return!0}return!1}}function p(t){return t.length>1?function(e,i,n){for(var s=t.length;s--;)if(!t[s](e,i,n))return!1;return!0}:t[0]}function f(t,i,n){for(var s=0,o=i.length;s<o;s++)e(t,i[s],n);return n}function g(t,e,i,n,s){for(var o,a=[],r=0,l=t.length,h=null!=e;r<l;r++)(o=t[r])&&(i&&!i(o,n,s)||(a.push(o),h&&e.push(r)));return a}function m(t,e,i,s,o,a){return s&&!s[W]&&(s=m(s)),o&&!o[W]&&(o=m(o,a)),n(function(n,a,r,l){var h,c,u,d=[],p=[],m=a.length,v=n||f(e||"*",r.nodeType?[r]:r,[]),b=!t||!n&&e?v:g(v,d,t,r,l),_=i?o||(n?t:m||s)?[]:a:b;if(i&&i(b,_,r,l),s)for(h=g(_,p),s(h,[],r,l),c=h.length;c--;)(u=h[c])&&(_[p[c]]=!(b[p[c]]=u));if(n){if(o||t){if(o){for(h=[],c=_.length;c--;)(u=_[c])&&h.push(b[c]=u);o(null,_=[],h,l)}for(c=_.length;c--;)(u=_[c])&&(h=o?J(n,u):d[c])>-1&&(n[h]=!(a[h]=u))}}else _=g(_===a?_.splice(m,_.length):_),o?o(null,a,_,l):G.apply(a,_)})}function v(t){for(var e,i,n,s=t.length,o=w.relative[t[0].type],a=o||w.relative[" "],r=o?1:0,l=d(function(t){return t===e},a,!0),h=d(function(t){return J(e,t)>-1},a,!0),c=[function(t,i,n){var s=!o&&(n||i!==S)||((e=i).nodeType?l(t,i,n):h(t,i,n));return e=null,s}];r<s;r++)if(i=w.relative[t[r].type])c=[d(p(c),i)];else{if((i=w.filter[t[r].type].apply(null,t[r].matches))[W]){for(n=++r;n<s&&!w.relative[t[n].type];n++);return m(r>1&&p(c),r>1&&u(t.slice(0,r-1).concat({value:" "===t[r-2].type?"*":""})).replace(ot,"$1"),i,r<n&&v(t.slice(r,n)),n<s&&v(t=t.slice(n)),n<s&&u(t))}c.push(i)}return p(c)}function b(t,i){var s=i.length>0,o=t.length>0,a=function(n,a,r,l,h){var c,u,d,p=0,f="0",m=n&&[],v=[],b=S,_=n||o&&w.find.TAG("*",h),y=$+=null==b?1:Math.random()||.1,x=_.length;for(h&&(S=a===M||a||h);f!==x&&null!=(c=_[f]);f++){if(o&&c){for(u=0,a||c.ownerDocument===M||(E(c),r=!O);d=t[u++];)if(d(c,a||M,r)){l.push(c);break}h&&($=y)}s&&((c=!d&&c)&&p--,n&&m.push(c))}if(p+=f,s&&f!==p){for(u=0;d=i[u++];)d(m,v,a,r);if(n){if(p>0)for(;f--;)m[f]||v[f]||(v[f]=K.call(l));v=g(v)}G.apply(l,v),h&&!n&&v.length>0&&p+i.length>1&&e.uniqueSort(l)}return h&&($=y,S=b),m};return s?n(a):a}var _,y,w,x,C,k,T,D,S,I,P,E,M,A,O,N,H,z,L,W="sizzle"+1*new Date,R=t.document,$=0,j=0,F=i(),B=i(),q=i(),U=function(t,e){return t===e&&(P=!0),0},Y={}.hasOwnProperty,V=[],K=V.pop,X=V.push,G=V.push,Q=V.slice,J=function(t,e){for(var i=0,n=t.length;i<n;i++)if(t[i]===e)return i;return-1},Z="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",tt="[\\x20\\t\\r\\n\\f]",et="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",it="\\["+tt+"*("+et+")(?:"+tt+"*([*^$|!~]?=)"+tt+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+et+"))|)"+tt+"*\\]",nt=":("+et+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+it+")*)|.*)\\)|)",st=new RegExp(tt+"+","g"),ot=new RegExp("^"+tt+"+|((?:^|[^\\\\])(?:\\\\.)*)"+tt+"+$","g"),at=new RegExp("^"+tt+"*,"+tt+"*"),rt=new RegExp("^"+tt+"*([>+~]|"+tt+")"+tt+"*"),lt=new RegExp("="+tt+"*([^\\]'\"]*?)"+tt+"*\\]","g"),ht=new RegExp(nt),ct=new RegExp("^"+et+"$"),ut={ID:new RegExp("^#("+et+")"),CLASS:new RegExp("^\\.("+et+")"),TAG:new RegExp("^("+et+"|[*])"),ATTR:new RegExp("^"+it),PSEUDO:new RegExp("^"+nt),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+tt+"*(even|odd|(([+-]|)(\\d*)n|)"+tt+"*(?:([+-]|)"+tt+"*(\\d+)|))"+tt+"*\\)|)","i"),bool:new RegExp("^(?:"+Z+")$","i"),needsContext:new RegExp("^"+tt+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+tt+"*((?:-\\d)?\\d*)"+tt+"*\\)|)(?=[^-]|$)","i")},dt=/^(?:input|select|textarea|button)$/i,pt=/^h\d$/i,ft=/^[^{]+\{\s*\[native \w/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/[+~]/,vt=new RegExp("\\\\([\\da-f]{1,6}"+tt+"?|("+tt+")|.)","ig"),bt=function(t,e,i){var n="0x"+e-65536;return n!=n||i?e:n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320)},_t=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,yt=function(t,e){return e?"\0"===t?"<EFBFBD>":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t},wt=function(){E()},xt=d(function(t){return!0===t.disabled&&("form"in t||"label"in t)},{dir:"parentNode",next:"legend"});try{G.apply(V=Q.call(R.childNodes),R.childNodes),V[R.childNodes.length].nodeType}catch(t){G={apply:V.length?function(t,e){X.apply(t,Q.call(e))}:function(t,e){for(var i=t.length,n=0;t[i++]=e[n++];);t.length=i-1}}}for(_ in y=e.support={},C=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&"HTML"!==e.nodeName},E=e.setDocument=function(t){var e,i,n=t?t.ownerDocument||t:R;return n!==M&&9===n.nodeType&&n.documentElement?(A=(M=n).documentElement,O=!C(M),
R!==M&&(i=M.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",wt,!1):i.attachEvent&&i.attachEvent("onunload",wt)),y.attributes=s(function(t){return t.className="i",!t.getAttribute("className")}),y.getElementsByTagName=s(function(t){return t.appendChild(M.createComment("")),!t.getElementsByTagName("*").length}),y.getElementsByClassName=ft.test(M.getElementsByClassName),y.getById=s(function(t){return A.appendChild(t).id=W,!M.getElementsByName||!M.getElementsByName(W).length}),y.getById?(w.filter.ID=function(t){var e=t.replace(vt,bt);return function(t){return t.getAttribute("id")===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&O){var i=e.getElementById(t);return i?[i]:[]}}):(w.filter.ID=function(t){var e=t.replace(vt,bt);return function(t){var i=void 0!==t.getAttributeNode&&t.getAttributeNode("id");return i&&i.value===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&O){var i,n,s,o=e.getElementById(t);if(o){if((i=o.getAttributeNode("id"))&&i.value===t)return[o];for(s=e.getElementsByName(t),n=0;o=s[n++];)if((i=o.getAttributeNode("id"))&&i.value===t)return[o]}return[]}}),w.find.TAG=y.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):y.qsa?e.querySelectorAll(t):void 0}:function(t,e){var i,n=[],s=0,o=e.getElementsByTagName(t);if("*"===t){for(;i=o[s++];)1===i.nodeType&&n.push(i);return n}return o},w.find.CLASS=y.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&O)return e.getElementsByClassName(t)},H=[],N=[],(y.qsa=ft.test(M.querySelectorAll))&&(s(function(t){A.appendChild(t).innerHTML="<a id='"+W+"'></a><select id='"+W+"-\r\\' msallowcapture=''><option selected=''></option></select>",t.querySelectorAll("[msallowcapture^='']").length&&N.push("[*^$]="+tt+"*(?:''|\"\")"),t.querySelectorAll("[selected]").length||N.push("\\["+tt+"*(?:value|"+Z+")"),t.querySelectorAll("[id~="+W+"-]").length||N.push("~="),t.querySelectorAll(":checked").length||N.push(":checked"),t.querySelectorAll("a#"+W+"+*").length||N.push(".#.+[+~]")}),s(function(t){t.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var e=M.createElement("input");e.setAttribute("type","hidden"),t.appendChild(e).setAttribute("name","D"),t.querySelectorAll("[name=d]").length&&N.push("name"+tt+"*[*^$|!~]?="),2!==t.querySelectorAll(":enabled").length&&N.push(":enabled",":disabled"),A.appendChild(t).disabled=!0,2!==t.querySelectorAll(":disabled").length&&N.push(":enabled",":disabled"),t.querySelectorAll("*,:x"),N.push(",.*:")})),(y.matchesSelector=ft.test(z=A.matches||A.webkitMatchesSelector||A.mozMatchesSelector||A.oMatchesSelector||A.msMatchesSelector))&&s(function(t){y.disconnectedMatch=z.call(t,"*"),z.call(t,"[s!='']:x"),H.push("!=",nt)}),N=N.length&&new RegExp(N.join("|")),H=H.length&&new RegExp(H.join("|")),e=ft.test(A.compareDocumentPosition),L=e||ft.test(A.contains)?function(t,e){var i=9===t.nodeType?t.documentElement:t,n=e&&e.parentNode;return t===n||!(!n||1!==n.nodeType||!(i.contains?i.contains(n):t.compareDocumentPosition&&16&t.compareDocumentPosition(n)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},U=e?function(t,e){if(t===e)return P=!0,0;var i=!t.compareDocumentPosition-!e.compareDocumentPosition;return i||(1&(i=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1)||!y.sortDetached&&e.compareDocumentPosition(t)===i?t===M||t.ownerDocument===R&&L(R,t)?-1:e===M||e.ownerDocument===R&&L(R,e)?1:I?J(I,t)-J(I,e):0:4&i?-1:1)}:function(t,e){if(t===e)return P=!0,0;var i,n=0,s=t.parentNode,o=e.parentNode,r=[t],l=[e];if(!s||!o)return t===M?-1:e===M?1:s?-1:o?1:I?J(I,t)-J(I,e):0;if(s===o)return a(t,e);for(i=t;i=i.parentNode;)r.unshift(i);for(i=e;i=i.parentNode;)l.unshift(i);for(;r[n]===l[n];)n++;return n?a(r[n],l[n]):r[n]===R?-1:l[n]===R?1:0},M):M},e.matches=function(t,i){return e(t,null,null,i)},e.matchesSelector=function(t,i){if((t.ownerDocument||t)!==M&&E(t),i=i.replace(lt,"='$1']"),y.matchesSelector&&O&&!q[i+" "]&&(!H||!H.test(i))&&(!N||!N.test(i)))try{var n=z.call(t,i);if(n||y.disconnectedMatch||t.document&&11!==t.document.nodeType)return n}catch(t){}return e(i,M,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==M&&E(t),L(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==M&&E(t);var i=w.attrHandle[e.toLowerCase()],n=i&&Y.call(w.attrHandle,e.toLowerCase())?i(t,e,!O):void 0;return void 0!==n?n:y.attributes||!O?t.getAttribute(e):(n=t.getAttributeNode(e))&&n.specified?n.value:null},e.escape=function(t){return(t+"").replace(_t,yt)},e.error=function(t){throw new Error("Syntax error, unrecognized expression: "+t)},e.uniqueSort=function(t){var e,i=[],n=0,s=0;if(P=!y.detectDuplicates,I=!y.sortStable&&t.slice(0),t.sort(U),P){for(;e=t[s++];)e===t[s]&&(n=i.push(s));for(;n--;)t.splice(i[n],1)}return I=null,t},x=e.getText=function(t){var e,i="",n=0,s=t.nodeType;if(s){if(1===s||9===s||11===s){if("string"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)i+=x(t)}else if(3===s||4===s)return t.nodeValue}else for(;e=t[n++];)i+=x(e);return i},(w=e.selectors={cacheLength:50,createPseudo:n,match:ut,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(vt,bt),t[3]=(t[3]||t[4]||t[5]||"").replace(vt,bt),"~="===t[2]&&(t[3]=" "+t[3]+" "),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),"nth"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*("even"===t[3]||"odd"===t[3])),t[5]=+(t[7]+t[8]||"odd"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,i=!t[6]&&t[2];return ut.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||"":i&&ht.test(i)&&(e=k(i,!0))&&(e=i.indexOf(")",i.length-e)-i.length)&&(t[0]=t[0].slice(0,e),t[2]=i.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(vt,bt).toLowerCase();return"*"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=F[t+" "];return e||(e=new RegExp("(^|"+tt+")"+t+"("+tt+"|$)"))&&F(t,function(t){return e.test("string"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute("class")||"")})},ATTR:function(t,i,n){return function(s){var o=e.attr(s,t);return null==o?"!="===i:!i||(o+="","="===i?o===n:"!="===i?o!==n:"^="===i?n&&0===o.indexOf(n):"*="===i?n&&o.indexOf(n)>-1:"$="===i?n&&o.slice(-n.length)===n:"~="===i?(" "+o.replace(st," ")+" ").indexOf(n)>-1:"|="===i&&(o===n||o.slice(0,n.length+1)===n+"-"))}},CHILD:function(t,e,i,n,s){var o="nth"!==t.slice(0,3),a="last"!==t.slice(-4),r="of-type"===e;return 1===n&&0===s?function(t){return!!t.parentNode}:function(e,i,l){var h,c,u,d,p,f,g=o!==a?"nextSibling":"previousSibling",m=e.parentNode,v=r&&e.nodeName.toLowerCase(),b=!l&&!r,_=!1;if(m){if(o){for(;g;){for(d=e;d=d[g];)if(r?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;f=g="only"===t&&!f&&"nextSibling"}return!0}if(f=[a?m.firstChild:m.lastChild],a&&b){for(_=(p=(h=(c=(u=(d=m)[W]||(d[W]={}))[d.uniqueID]||(u[d.uniqueID]={}))[t]||[])[0]===$&&h[1])&&h[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(_=p=0)||f.pop();)if(1===d.nodeType&&++_&&d===e){c[t]=[$,p,_];break}}else if(b&&(_=p=(h=(c=(u=(d=e)[W]||(d[W]={}))[d.uniqueID]||(u[d.uniqueID]={}))[t]||[])[0]===$&&h[1]),!1===_)for(;(d=++p&&d&&d[g]||(_=p=0)||f.pop())&&((r?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++_||(b&&((c=(u=d[W]||(d[W]={}))[d.uniqueID]||(u[d.uniqueID]={}))[t]=[$,_]),d!==e)););return(_-=s)===n||_%n==0&&_/n>=0}}},PSEUDO:function(t,i){var s,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error("unsupported pseudo: "+t);return o[W]?o(i):o.length>1?(s=[t,t,"",i],w.setFilters.hasOwnProperty(t.toLowerCase())?n(function(t,e){for(var n,s=o(t,i),a=s.length;a--;)t[n=J(t,s[a])]=!(e[n]=s[a])}):function(t){return o(t,0,s)}):o}},pseudos:{not:n(function(t){var e=[],i=[],s=T(t.replace(ot,"$1"));return s[W]?n(function(t,e,i,n){for(var o,a=s(t,null,n,[]),r=t.length;r--;)(o=a[r])&&(t[r]=!(e[r]=o))}):function(t,n,o){return e[0]=t,s(e,null,o,i),e[0]=null,!i.pop()}}),has:n(function(t){return function(i){return e(t,i).length>0}}),contains:n(function(t){return t=t.replace(vt,bt),function(e){return(e.textContent||e.innerText||x(e)).indexOf(t)>-1}}),lang:n(function(t){return ct.test(t||"")||e.error("unsupported lang: "+t),t=t.replace(vt,bt).toLowerCase(),function(e){var i;do{if(i=O?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(i=i.toLowerCase())===t||0===i.indexOf(t+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var i=t.location&&t.location.hash;return i&&i.slice(1)===e.id},root:function(t){return t===A},focus:function(t){return t===M.activeElement&&(!M.hasFocus||M.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:r(!1),disabled:r(!0),checked:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&!!t.checked||"option"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return pt.test(t.nodeName)},input:function(t){return dt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return"input"===e&&"button"===t.type||"button"===e},text:function(t){var e;return"input"===t.nodeName.toLowerCase()&&"text"===t.type&&(null==(e=t.getAttribute("type"))||"text"===e.toLowerCase())},first:l(function(){return[0]}),last:l(function(t,e){return[e-1]}),eq:l(function(t,e,i){return[i<0?i+e:i]}),even:l(function(t,e){for(var i=0;i<e;i+=2)t.push(i);return t}),odd:l(function(t,e){for(var i=1;i<e;i+=2)t.push(i);return t}),lt:l(function(t,e,i){for(var n=i<0?i+e:i;--n>=0;)t.push(n);return t}),gt:l(function(t,e,i){for(var n=i<0?i+e:i;++n<e;)t.push(n);return t})}}).pseudos.nth=w.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[_]=function(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}(_);for(_ in{submit:!0,reset:!0})w.pseudos[_]=function(t){return function(e){var i=e.nodeName.toLowerCase();return("input"===i||"button"===i)&&e.type===t}}(_);return c.prototype=w.filters=w.pseudos,w.setFilters=new c,k=e.tokenize=function(t,i){var n,s,o,a,r,l,h,c=B[t+" "];if(c)return i?0:c.slice(0);for(r=t,l=[],h=w.preFilter;r;){for(a in n&&!(s=at.exec(r))||(s&&(r=r.slice(s[0].length)||r),l.push(o=[])),n=!1,(s=rt.exec(r))&&(n=s.shift(),o.push({value:n,type:s[0].replace(ot," ")}),r=r.slice(n.length)),w.filter)!(s=ut[a].exec(r))||h[a]&&!(s=h[a](s))||(n=s.shift(),o.push({value:n,type:a,matches:s}),r=r.slice(n.length));if(!n)break}return i?r.length:r?e.error(t):B(t,l).slice(0)},T=e.compile=function(t,e){var i,n=[],s=[],o=q[t+" "];if(!o){for(e||(e=k(t)),i=e.length;i--;)(o=v(e[i]))[W]?n.push(o):s.push(o);(o=q(t,b(s,n))).selector=t}return o},D=e.select=function(t,e,i,n){var s,o,a,r,l,c="function"==typeof t&&t,d=!n&&k(t=c.selector||t);if(i=i||[],1===d.length){if((o=d[0]=d[0].slice(0)).length>2&&"ID"===(a=o[0]).type&&9===e.nodeType&&O&&w.relative[o[1].type]){if(!(e=(w.find.ID(a.matches[0].replace(vt,bt),e)||[])[0]))return i;c&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(s=ut.needsContext.test(t)?0:o.length;s--&&(a=o[s],!w.relative[r=a.type]);)if((l=w.find[r])&&(n=l(a.matches[0].replace(vt,bt),mt.test(o[0].type)&&h(e.parentNode)||e))){if(o.splice(s,1),!(t=n.length&&u(o)))return G.apply(i,n),i;break}}return(c||T(t,d))(n,e,!O,i,!e||mt.test(t)&&h(e.parentNode)||e),i},y.sortStable=W.split("").sort(U).join("")===W,y.detectDuplicates=!!P,E(),y.sortDetached=s(function(t){return 1&t.compareDocumentPosition(M.createElement("fieldset"))}),s(function(t){return t.innerHTML="<a href='#'></a>","#"===t.firstChild.getAttribute("href")})||o("type|href|height|width",function(t,e,i){if(!i)return t.getAttribute(e,"type"===e.toLowerCase()?1:2)}),y.attributes&&s(function(t){return t.innerHTML="<input/>",t.firstChild.setAttribute("value",""),""===t.firstChild.getAttribute("value")})||o("value",function(t,e,i){if(!i&&"input"===t.nodeName.toLowerCase())return t.defaultValue}),s(function(t){return null==t.getAttribute("disabled")})||o(Z,function(t,e,i){var n;if(!i)return!0===t[e]?e.toLowerCase():(n=t.getAttributeNode(e))&&n.specified?n.value:null}),e}(t);ft.find=mt,ft.expr=mt.selectors,ft.expr[":"]=ft.expr.pseudos,ft.uniqueSort=ft.unique=mt.uniqueSort,ft.text=mt.getText,ft.isXMLDoc=mt.isXML,ft.contains=mt.contains,ft.escapeSelector=mt.escape;var vt=function(t,e,i){for(var n=[],s=void 0!==i;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(s&&ft(t).is(i))break;n.push(t)}return n},bt=function(t,e){for(var i=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&i.push(t);return i},_t=ft.expr.match.needsContext,yt=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;ft.filter=function(t,e,i){var n=e[0];return i&&(t=":not("+t+")"),1===e.length&&1===n.nodeType?ft.find.matchesSelector(n,t)?[n]:[]:ft.find.matches(t,ft.grep(e,function(t){return 1===t.nodeType}))},ft.fn.extend({find:function(t){var e,i,n=this.length,s=this;if("string"!=typeof t)return this.pushStack(ft(t).filter(function(){for(e=0;e<n;e++)if(ft.contains(s[e],this))return!0}));for(i=this.pushStack([]),e=0;e<n;e++)ft.find(t,s[e],i);return n>1?ft.uniqueSort(i):i},filter:function(t){return this.pushStack(a(this,t||[],!1))},not:function(t){return this.pushStack(a(this,t||[],!0))},is:function(t){return!!a(this,"string"==typeof t&&_t.test(t)?ft(t):t||[],!1).length}});var wt,xt=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ft.fn.init=function(t,e,i){var n,s;if(!t)return this;if(i=i||wt,"string"==typeof t){if(!(n="<"===t[0]&&">"===t[t.length-1]&&t.length>=3?[null,t,null]:xt.exec(t))||!n[1]&&e)return!e||e.jquery?(e||i).find(t):this.constructor(e).find(t);if(n[1]){if(e=e instanceof ft?e[0]:e,ft.merge(this,ft.parseHTML(n[1],e&&e.nodeType?e.ownerDocument||e:Z,!0)),yt.test(n[1])&&ft.isPlainObject(e))for(n in e)ut(this[n])?this[n](e[n]):this.attr(n,e[n]);return this}return(s=Z.getElementById(n[2]))&&(this[0]=s,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):ut(t)?void 0!==i.ready?i.ready(t):t(ft):ft.makeArray(t,this)}).prototype=ft.fn,wt=ft(Z);var Ct=/^(?:parents|prev(?:Until|All))/,kt={children:!0,contents:!0,next:!0,prev:!0};ft.fn.extend({has:function(t){var e=ft(t,this),i=e.length;return this.filter(function(){for(var t=0;t<i;t++)if(ft.contains(this,e[t]))return!0})},closest:function(t,e){var i,n=0,s=this.length,o=[],a="string"!=typeof t&&ft(t);if(!_t.test(t))for(;n<s;n++)for(i=this[n];i&&i!==e;i=i.parentNode)if(i.nodeType<11&&(a?a.index(i)>-1:1===i.nodeType&&ft.find.matchesSelector(i,t))){o.push(i);break}return this.pushStack(o.length>1?ft.uniqueSort(o):o)},index:function(t){return t?"string"==typeof t?st.call(ft(t),this[0]):st.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(ft.uniqueSort(ft.merge(this.get(),ft(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),ft.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return vt(t,"parentNode")},parentsUntil:function(t,e,i){return vt(t,"parentNode",i)},next:function(t){return r(t,"nextSibling")},prev:function(t){return r(t,"previousSibling")},nextAll:function(t){return vt(t,"nextSibling")},prevAll:function(t){return vt(t,"previousSibling")},nextUntil:function(t,e,i){return vt(t,"nextSibling",i)},prevUntil:function(t,e,i){return vt(t,"previousSibling",i)},siblings:function(t){return bt((t.parentNode||{}).firstChild,t)},children:function(t){return bt(t.firstChild)},contents:function(t){return o(t,"iframe")?t.contentDocument:(o(t,"template")&&(t=t.content||t),ft.merge([],t.childNodes))}},function(t,e){ft.fn[t]=function(i,n){var s=ft.map(this,e,i);return"Until"!==t.slice(-5)&&(n=i),n&&"string"==typeof n&&(s=ft.filter(n,s)),this.length>1&&(kt[t]||ft.uniqueSort(s),Ct.test(t)&&s.reverse()),this.pushStack(s)}});var Tt=/[^\x20\t\r\n\f]+/g;ft.Callbacks=function(t){t="string"==typeof t?function(t){var e={};return ft.each(t.match(Tt)||[],function(t,i){e[i]=!0}),e}(t):ft.extend({},t);var e,i,s,o,a=[],r=[],l=-1,h=function(){for(o=o||t.once,s=e=!0;r.length;l=-1)for(i=r.shift();++l<a.length;)!1===a[l].apply(i[0],i[1])&&t.stopOnFalse&&(l=a.length,i=!1);t.memory||(i=!1),e=!1,o&&(a=i?[]:"")},c={add:function(){return a&&(i&&!e&&(l=a.length-1,r.push(i)),function e(i){ft.each(i,function(i,s){ut(s)?t.unique&&c.has(s)||a.push(s):s&&s.length&&"string"!==n(s)&&e(s)})}(arguments),i&&!e&&h()),this},remove:function(){return ft.each(arguments,function(t,e){for(var i;(i=ft.inArray(e,a,i))>-1;)a.splice(i,1),i<=l&&l--}),this},has:function(t){return t?ft.inArray(t,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return o=r=[],a=i="",this},disabled:function(){return!a},lock:function(){return o=r=[],i||e||(a=i=""),this},locked:function(){return!!o},fireWith:function(t,i){return o||(i=[t,(i=i||[]).slice?i.slice():i],r.push(i),e||h()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!s}};return c},ft.extend({Deferred:function(e){var i=[["notify","progress",ft.Callbacks("memory"),ft.Callbacks("memory"),2],["resolve","done",ft.Callbacks("once memory"),ft.Callbacks("once memory"),0,"resolved"],["reject","fail",ft.Callbacks("once memory"),ft.Callbacks("once memory"),1,"rejected"]],n="pending",s={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return s.then(null,t)},pipe:function(){var t=arguments;return ft.Deferred(function(e){ft.each(i,function(i,n){var s=ut(t[n[4]])&&t[n[4]];o[n[1]](function(){var t=s&&s.apply(this,arguments);t&&ut(t.promise)?t.promise().progress(e.notify).done(e.resolve).fail(e.reject):e[n[0]+"With"](this,s?[t]:arguments)})}),t=null}).promise()},then:function(e,n,s){function o(e,i,n,s){return function(){var r=this,c=arguments,u=function(){var t,u;if(!(e<a)){if((t=n.apply(r,c))===i.promise())throw new TypeError("Thenable self-resolution");u=t&&("object"==typeof t||"function"==typeof t)&&t.then,ut(u)?s?u.call(t,o(a,i,l,s),o(a,i,h,s)):(a++,u.call(t,o(a,i,l,s),o(a,i,h,s),o(a,i,l,i.notifyWith))):(n!==l&&(r=void 0,c=[t]),(s||i.resolveWith)(r,c))}},d=s?u:function(){try{u()}catch(t){ft.Deferred.exceptionHook&&ft.Deferred.exceptionHook(t,d.stackTrace),e+1>=a&&(n!==h&&(r=void 0,c=[t]),i.rejectWith(r,c))}};e?d():(ft.Deferred.getStackHook&&(d.stackTrace=ft.Deferred.getStackHook()),t.setTimeout(d))}}var a=0;return ft.Deferred(function(t){i[0][3].add(o(0,t,ut(s)?s:l,t.notifyWith)),i[1][3].add(o(0,t,ut(e)?e:l)),i[2][3].add(o(0,t,ut(n)?n:h))}).promise()},promise:function(t){return null!=t?ft.extend(t,s):s}},o={};return ft.each(i,function(t,e){var a=e[2],r=e[5];s[e[1]]=a.add,r&&a.add(function(){n=r},i[3-t][2].disable,i[3-t][3].disable,i[0][2].lock,i[0][3].lock),a.add(e[3].fire),o[e[0]]=function(){return o[e[0]+"With"](this===o?void 0:this,arguments),this},o[e[0]+"With"]=a.fireWith}),s.promise(o),e&&e.call(o,o),o},when:function(t){var e=arguments.length,i=e,n=Array(i),s=et.call(arguments),o=ft.Deferred(),a=function(t){return function(i){n[t]=this,s[t]=arguments.length>1?et.call(arguments):i,--e||o.resolveWith(n,s)}};if(e<=1&&(c(t,o.done(a(i)).resolve,o.reject,!e),"pending"===o.state()||ut(s[i]&&s[i].then)))return o.then();for(;i--;)c(s[i],a(i),o.reject);return o.promise()}});var Dt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ft.Deferred.exceptionHook=function(e,i){t.console&&t.console.warn&&e&&Dt.test(e.name)&&t.console.warn("jQuery.Deferred exception: "+e.message,e.stack,i)},ft.readyException=function(e){t.setTimeout(function(){throw e})};var St=ft.Deferred();ft.fn.ready=function(t){return St.then(t).catch(function(t){ft.readyException(t)}),this},ft.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--ft.readyWait:ft.isReady)||(ft.isReady=!0,!0!==t&&--ft.readyWait>0||St.resolveWith(Z,[ft]))}}),ft.ready.then=St.then,"complete"===Z.readyState||"loading"!==Z.readyState&&!Z.documentElement.doScroll?t.setTimeout(ft.ready):(Z.addEventListener("DOMContentLoaded",u),t.addEventListener("load",u));var It=function(t,e,i,s,o,a,r){var l=0,h=t.length,c=null==i;if("object"===n(i))for(l in o=!0,i)It(t,e,l,i[l],!0,a,r);else if(void 0!==s&&(o=!0,ut(s)||(r=!0),c&&(r?(e.call(t,s),e=null):(c=e,e=function(t,e,i){return c.call(ft(t),i)})),e))for(;l<h;l++)e(t[l],i,r?s:s.call(t[l],l,e(t[l],i)));return o?t:c?e.call(t):h?e(t[0],i):a},Pt=/^-ms-/,Et=/-([a-z])/g,Mt=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};f.uid=1,f.prototype={cache:function(t){var e=t[this.expando];return e||(e={},Mt(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,i){var n,s=this.cache(t);if("string"==typeof e)s[p(e)]=i;else for(n in e)s[p(n)]=e[n];return s},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][p(e)]},access:function(t,e,i){return void 0===e||e&&"string"==typeof e&&void 0===i?this.get(t,e):(this.set(t,e,i),void 0!==i?i:e)},remove:function(t,e){var i,n=t[this.expando];if(void 0!==n){if(void 0!==e){i=(e=Array.isArray(e)?e.map(p):(e=p(e))in n?[e]:e.match(Tt)||[]).length;for(;i--;)delete n[e[i]]}(void 0===e||ft.isEmptyObject(n))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!ft.isEmptyObject(e)}};var At=new f,Ot=new f,Nt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Ht=/[A-Z]/g;ft.extend({hasData:function(t){return Ot.hasData(t)||At.hasData(t)},data:function(t,e,i){return Ot.access(t,e,i)},removeData:function(t,e){Ot.remove(t,e)},_data:function(t,e,i){return At.access(t,e,i)},_removeData:function(t,e){At.remove(t,e)}}),ft.fn.extend({data:function(t,e){var i,n,s,o=this[0],a=o&&o.attributes;if(void 0===t){if(this.length&&(s=Ot.get(o),1===o.nodeType&&!At.get(o,"hasDataAttrs"))){for(i=a.length;i--;)a[i]&&0===(n=a[i].name).indexOf("data-")&&(n=p(n.slice(5)),g(o,n,s[n]));At.set(o,"hasDataAttrs",!0)}return s}return"object"==typeof t?this.each(function(){Ot.set(this,t)}):It(this,function(e){var i;if(o&&void 0===e){if(void 0!==(i=Ot.get(o,t)))return i;if(void 0!==(i=g(o,t)))return i}else this.each(function(){Ot.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){Ot.remove(this,t)})}}),ft.extend({queue:function(t,e,i){var n;if(t)return e=(e||"fx")+"queue",n=At.get(t,e),i&&(!n||Array.isArray(i)?n=At.access(t,e,ft.makeArray(i)):n.push(i)),n||[]},dequeue:function(t,e){e=e||"fx";var i=ft.queue(t,e),n=i.length,s=i.shift(),o=ft._queueHooks(t,e);"inprogress"===s&&(s=i.shift(),n--),s&&("fx"===e&&i.unshift("inprogress"),delete o.stop,s.call(t,function(){ft.dequeue(t,e)},o)),!n&&o&&o.empty.fire()},_queueHooks:function(t,e){var i=e+"queueHooks";return At.get(t,i)||At.access(t,i,{empty:ft.Callbacks("once memory").add(function(){At.remove(t,[e+"queue",i])})})}}),ft.fn.extend({queue:function(t,e){var i=2;return"string"!=typeof t&&(e=t,t="fx",i--),arguments.length<i?ft.queue(this[0],t):void 0===e?this:this.each(function(){var i=ft.queue(this,t,e);ft._queueHooks(this,t),"fx"===t&&"inprogress"!==i[0]&&ft.dequeue(this,t)})},dequeue:function(t){return this.each(function(){ft.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||"fx",[])},promise:function(t,e){var i,n=1,s=ft.Deferred(),o=this,a=this.length,r=function(){--n||s.resolveWith(o,[o])};for("string"!=typeof t&&(e=t,t=void 0),t=t||"fx";a--;)(i=At.get(o[a],t+"queueHooks"))&&i.empty&&(n++,i.empty.add(r));return r(),s.promise(e)}});var zt=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Lt=new RegExp("^(?:([+-])=|)("+zt+")([a-z%]*)$","i"),Wt=["Top","Right","Bottom","Left"],Rt=function(t,e){return"none"===(t=e||t).style.display||""===t.style.display&&ft.contains(t.ownerDocument,t)&&"none"===ft.css(t,"display")},$t=function(t,e,i,n){var s,o,a={};for(o in e)a[o]=t.style[o],t.style[o]=e[o];for(o in s=i.apply(t,n||[]),e)t.style[o]=a[o];return s},jt={};ft.fn.extend({show:function(){return b(this,!0)},hide:function(){return b(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Rt(this)?ft(this).show():ft(this).hide()})}});var Ft=/^(?:checkbox|radio)$/i,Bt=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,qt=/^$|^module$|\/(?:java|ecma)script/i,Ut={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ut.optgroup=Ut.option,Ut.tbody=Ut.tfoot=Ut.colgroup=Ut.caption=Ut.thead,Ut.th=Ut.td;var Yt=/<|&#?\w+;/;!function(){var t=Z.createDocumentFragment().appendChild(Z.createElement("div")),e=Z.createElement("input");e.setAttribute("type","radio"),e.setAttribute("checked","checked"),e.setAttribute("name","t"),t.appendChild(e),ct.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,t.innerHTML="<textarea>x</textarea>",ct.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue}();var Vt=Z.documentElement,Kt=/^key/,Xt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Gt=/^([^.]*)(?:\.(.+)|)/;ft.event={global:{},add:function(t,e,i,n,s){var o,a,r,l,h,c,u,d,p,f,g,m=At.get(t);if(m)for(i.handler&&(i=(o=i).handler,s=o.selector),s&&ft.find.matchesSelector(Vt,s),i.guid||(i.guid=ft.guid++),(l=m.events)||(l=m.events={}),(a=m.handle)||(a=m.handle=function(e){return void 0!==ft&&ft.event.triggered!==e.type?ft.event.dispatch.apply(t,arguments):void 0}),h=(e=(e||"").match(Tt)||[""]).length;h--;)p=g=(r=Gt.exec(e[h])||[])[1],f=(r[2]||"").split(".").sort(),p&&(u=ft.event.special[p]||{},p=(s?u.delegateType:u.bindType)||p,u=ft.event.special[p]||{},c=ft.extend({type:p,origType:g,data:n,handler:i,guid:i.guid,selector:s,needsContext:s&&ft.expr.match.needsContext.test(s),namespace:f.join(".")},o),(d=l[p])||((d=l[p]=[]).delegateCount=0,u.setup&&!1!==u.setup.call(t,n,f,a)||t.addEventListener&&t.addEventListener(p,a)),u.add&&(u.add.call(t,c),c.handler.guid||(c.handler.guid=i.guid)),s?d.splice(d.delegateCount++,0,c):d.push(c),ft.event.global[p]=!0)},remove:function(t,e,i,n,s){var o,a,r,l,h,c,u,d,p,f,g,m=At.hasData(t)&&At.get(t);if(m&&(l=m.events)){for(h=(e=(e||"").match(Tt)||[""]).length;h--;)if(p=g=(r=Gt.exec(e[h])||[])[1],f=(r[2]||"").split(".").sort(),p){for(u=ft.event.special[p]||{},d=l[p=(n?u.delegateType:u.bindType)||p]||[],r=r[2]&&new RegExp("(^|\\.)"+f.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)c=d[o],!s&&g!==c.origType||i&&i.guid!==c.guid||r&&!r.test(c.namespace)||n&&n!==c.selector&&("**"!==n||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,u.remove&&u.remove.call(t,c));a&&!d.length&&(u.teardown&&!1!==u.teardown.call(t,f,m.handle)||ft.removeEvent(t,p,m.handle),delete l[p])}else for(p in l)ft.event.remove(t,p+e[h],i,n,!0);ft.isEmptyObject(l)&&At.remove(t,"handle events")}},dispatch:function(t){var e,i,n,s,o,a,r=ft.event.fix(t),l=new Array(arguments.length),h=(At.get(this,"events")||{})[r.type]||[],c=ft.event.special[r.type]||{};for(l[0]=r,e=1;e<arguments.length;e++)l[e]=arguments[e];if(r.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,r)){for(a=ft.event.handlers.call(this,r,h),e=0;(s=a[e++])&&!r.isPropagationStopped();)for(r.currentTarget=s.elem,i=0;(o=s.handlers[i++])&&!r.isImmediatePropagationStopped();)r.rnamespace&&!r.rnamespace.test(o.namespace)||(r.handleObj=o,r.data=o.data,void 0!==(n=((ft.event.special[o.origType]||{}).handle||o.handler).apply(s.elem,l))&&!1===(r.result=n)&&(r.preventDefault(),r.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,r),r.result}},handlers:function(t,e){var i,n,s,o,a,r=[],l=e.delegateCount,h=t.target;if(l&&h.nodeType&&!("click"===t.type&&t.button>=1))for(;h!==this;h=h.parentNode||this)if(1===h.nodeType&&("click"!==t.type||!0!==h.disabled)){for(o=[],a={},i=0;i<l;i++)void 0===a[s=(n=e[i]).selector+" "]&&(a[s]=n.needsContext?ft(s,this).index(h)>-1:ft.find(s,this,null,[h]).length),a[s]&&o.push(n);o.length&&r.push({elem:h,handlers:o})}return h=this,l<e.length&&r.push({elem:h,handlers:e.slice(l)}),r},addProp:function(t,e){Object.defineProperty(ft.Event.prototype,t,{enumerable:!0,configurable:!0,get:ut(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(t){return t[ft.expando]?t:new ft.Event(t)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==k()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===k()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&o(this,"input"))return this.click(),!1},_default:function(t){return o(t.target,"a")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},ft.removeEvent=function(t,e,i){t.removeEventListener&&t.removeEventListener(e,i)},ft.Event=function(t,e){if(!(this instanceof ft.Event))return new ft.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?x:C,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&ft.extend(this,e),this.timeStamp=t&&t.timeStamp||Date.now(),this[ft.expando]=!0},ft.Event.prototype={constructor:ft.Event,isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=x,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=x,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=x,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},ft.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(t){var e=t.button;return null==t.which&&Kt.test(t.type)?null!=t.charCode?t.charCode:t.keyCode:!t.which&&void 0!==e&&Xt.test(t.type)?1&e?1:2&e?3:4&e?2:0:t.which}},ft.event.addProp),ft.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(t,e){ft.event.special[t]={delegateType:e,bindType:e,handle:function(t){var i,n=t.relatedTarget,s=t.handleObj;return n&&(n===this||ft.contains(this,n))||(t.type=s.origType,i=s.handler.apply(this,arguments),t.type=e),i}}}),ft.fn.extend({on:function(t,e,i,n){return T(this,t,e,i,n)},one:function(t,e,i,n){return T(this,t,e,i,n,1)},off:function(t,e,i){var n,s;if(t&&t.preventDefault&&t.handleObj)return n=t.handleObj,ft(t.delegateTarget).off(n.namespace?n.origType+"."+n.namespace:n.origType,n.selector,n.handler),this;if("object"==typeof t){for(s in t)this.off(s,e,t[s]);return this}return!1!==e&&"function"!=typeof e||(i=e,e=void 0),!1===i&&(i=C),this.each(function(){ft.event.remove(this,t,i,e)})}});var Qt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Jt=/<script|<style|<link/i,Zt=/checked\s*(?:[^=]|=\s*.checked.)/i,te=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;ft.extend({htmlPrefilter:function(t){return t.replace(Qt,"<$1></$2>")},clone:function(t,e,i){var n,s,o,a,r=t.cloneNode(!0),l=ft.contains(t.ownerDocument,t);if(!(ct.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||ft.isXMLDoc(t)))for(a=_(r),n=0,s=(o=_(t)).length;n<s;n++)E(o[n],a[n])
;if(e)if(i)for(o=o||_(t),a=a||_(r),n=0,s=o.length;n<s;n++)P(o[n],a[n]);else P(t,r);return(a=_(r,"script")).length>0&&y(a,!l&&_(t,"script")),r},cleanData:function(t){for(var e,i,n,s=ft.event.special,o=0;void 0!==(i=t[o]);o++)if(Mt(i)){if(e=i[At.expando]){if(e.events)for(n in e.events)s[n]?ft.event.remove(i,n):ft.removeEvent(i,n,e.handle);i[At.expando]=void 0}i[Ot.expando]&&(i[Ot.expando]=void 0)}}}),ft.fn.extend({detach:function(t){return A(this,t,!0)},remove:function(t){return A(this,t)},text:function(t){return It(this,function(t){return void 0===t?ft.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return M(this,arguments,function(t){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||D(this,t).appendChild(t)})},prepend:function(){return M(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=D(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return M(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return M(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(ft.cleanData(_(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return ft.clone(this,t,e)})},html:function(t){return It(this,function(t){var e=this[0]||{},i=0,n=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!Jt.test(t)&&!Ut[(Bt.exec(t)||["",""])[1].toLowerCase()]){t=ft.htmlPrefilter(t);try{for(;i<n;i++)1===(e=this[i]||{}).nodeType&&(ft.cleanData(_(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return M(this,arguments,function(e){var i=this.parentNode;ft.inArray(this,t)<0&&(ft.cleanData(_(this)),i&&i.replaceChild(e,this))},t)}}),ft.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){ft.fn[t]=function(t){for(var i,n=[],s=ft(t),o=s.length-1,a=0;a<=o;a++)i=a===o?this:this.clone(!0),ft(s[a])[e](i),nt.apply(n,i.get());return this.pushStack(n)}});var ee=new RegExp("^("+zt+")(?!px)[a-z%]+$","i"),ie=function(e){var i=e.ownerDocument.defaultView;return i&&i.opener||(i=t),i.getComputedStyle(e)},ne=new RegExp(Wt.join("|"),"i");!function(){function e(){if(h){l.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",h.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",Vt.appendChild(l).appendChild(h);var e=t.getComputedStyle(h);n="1%"!==e.top,r=12===i(e.marginLeft),h.style.right="60%",a=36===i(e.right),s=36===i(e.width),h.style.position="absolute",o=36===h.offsetWidth||"absolute",Vt.removeChild(l),h=null}}function i(t){return Math.round(parseFloat(t))}var n,s,o,a,r,l=Z.createElement("div"),h=Z.createElement("div");h.style&&(h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",ct.clearCloneStyle="content-box"===h.style.backgroundClip,ft.extend(ct,{boxSizingReliable:function(){return e(),s},pixelBoxStyles:function(){return e(),a},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),r},scrollboxSize:function(){return e(),o}}))}();var se=/^(none|table(?!-c[ea]).+)/,oe=/^--/,ae={position:"absolute",visibility:"hidden",display:"block"},re={letterSpacing:"0",fontWeight:"400"},le=["Webkit","Moz","ms"],he=Z.createElement("div").style;ft.extend({cssHooks:{opacity:{get:function(t,e){if(e){var i=O(t,"opacity");return""===i?"1":i}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(t,e,i,n){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var s,o,a,r=p(e),l=oe.test(e),h=t.style;if(l||(e=H(r)),a=ft.cssHooks[e]||ft.cssHooks[r],void 0===i)return a&&"get"in a&&void 0!==(s=a.get(t,!1,n))?s:h[e];"string"==(o=typeof i)&&(s=Lt.exec(i))&&s[1]&&(i=m(t,e,s),o="number"),null!=i&&i==i&&("number"===o&&(i+=s&&s[3]||(ft.cssNumber[r]?"":"px")),ct.clearCloneStyle||""!==i||0!==e.indexOf("background")||(h[e]="inherit"),a&&"set"in a&&void 0===(i=a.set(t,i,n))||(l?h.setProperty(e,i):h[e]=i))}},css:function(t,e,i,n){var s,o,a,r=p(e);return oe.test(e)||(e=H(r)),(a=ft.cssHooks[e]||ft.cssHooks[r])&&"get"in a&&(s=a.get(t,!0,i)),void 0===s&&(s=O(t,e,n)),"normal"===s&&e in re&&(s=re[e]),""===i||i?(o=parseFloat(s),!0===i||isFinite(o)?o||0:s):s}}),ft.each(["height","width"],function(t,e){ft.cssHooks[e]={get:function(t,i,n){if(i)return!se.test(ft.css(t,"display"))||t.getClientRects().length&&t.getBoundingClientRect().width?W(t,e,n):$t(t,ae,function(){return W(t,e,n)})},set:function(t,i,n){var s,o=ie(t),a="border-box"===ft.css(t,"boxSizing",!1,o),r=n&&L(t,e,n,a,o);return a&&ct.scrollboxSize()===o.position&&(r-=Math.ceil(t["offset"+e[0].toUpperCase()+e.slice(1)]-parseFloat(o[e])-L(t,e,"border",!1,o)-.5)),r&&(s=Lt.exec(i))&&"px"!==(s[3]||"px")&&(t.style[e]=i,i=ft.css(t,e)),z(0,i,r)}}}),ft.cssHooks.marginLeft=N(ct.reliableMarginLeft,function(t,e){if(e)return(parseFloat(O(t,"marginLeft"))||t.getBoundingClientRect().left-$t(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px"}),ft.each({margin:"",padding:"",border:"Width"},function(t,e){ft.cssHooks[t+e]={expand:function(i){for(var n=0,s={},o="string"==typeof i?i.split(" "):[i];n<4;n++)s[t+Wt[n]+e]=o[n]||o[n-2]||o[0];return s}},"margin"!==t&&(ft.cssHooks[t+e].set=z)}),ft.fn.extend({css:function(t,e){return It(this,function(t,e,i){var n,s,o={},a=0;if(Array.isArray(e)){for(n=ie(t),s=e.length;a<s;a++)o[e[a]]=ft.css(t,e[a],!1,n);return o}return void 0!==i?ft.style(t,e,i):ft.css(t,e)},t,e,arguments.length>1)}}),ft.Tween=R,R.prototype={constructor:R,init:function(t,e,i,n,s,o){this.elem=t,this.prop=i,this.easing=s||ft.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=n,this.unit=o||(ft.cssNumber[i]?"":"px")},cur:function(){var t=R.propHooks[this.prop];return t&&t.get?t.get(this):R.propHooks._default.get(this)},run:function(t){var e,i=R.propHooks[this.prop];return this.options.duration?this.pos=e=ft.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),i&&i.set?i.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=ft.css(t.elem,t.prop,""))&&"auto"!==e?e:0},set:function(t){ft.fx.step[t.prop]?ft.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[ft.cssProps[t.prop]]&&!ft.cssHooks[t.prop]?t.elem[t.prop]=t.now:ft.style(t.elem,t.prop,t.now+t.unit)}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},ft.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},ft.fx=R.prototype.init,ft.fx.step={};var ce,ue,de=/^(?:toggle|show|hide)$/,pe=/queueHooks$/;ft.Animation=ft.extend(q,{tweeners:{"*":[function(t,e){var i=this.createTween(t,e);return m(i.elem,t,Lt.exec(e),i),i}]},tweener:function(t,e){ut(t)?(e=t,t=["*"]):t=t.match(Tt);for(var i,n=0,s=t.length;n<s;n++)i=t[n],q.tweeners[i]=q.tweeners[i]||[],q.tweeners[i].unshift(e)},prefilters:[function(t,e,i){var n,s,o,a,r,l,h,c,u="width"in e||"height"in e,d=this,p={},f=t.style,g=t.nodeType&&Rt(t),m=At.get(t,"fxshow");for(n in i.queue||(null==(a=ft._queueHooks(t,"fx")).unqueued&&(a.unqueued=0,r=a.empty.fire,a.empty.fire=function(){a.unqueued||r()}),a.unqueued++,d.always(function(){d.always(function(){a.unqueued--,ft.queue(t,"fx").length||a.empty.fire()})})),e)if(s=e[n],de.test(s)){if(delete e[n],o=o||"toggle"===s,s===(g?"hide":"show")){if("show"!==s||!m||void 0===m[n])continue;g=!0}p[n]=m&&m[n]||ft.style(t,n)}if((l=!ft.isEmptyObject(e))||!ft.isEmptyObject(p))for(n in u&&1===t.nodeType&&(i.overflow=[f.overflow,f.overflowX,f.overflowY],null==(h=m&&m.display)&&(h=At.get(t,"display")),"none"===(c=ft.css(t,"display"))&&(h?c=h:(b([t],!0),h=t.style.display||h,c=ft.css(t,"display"),b([t]))),("inline"===c||"inline-block"===c&&null!=h)&&"none"===ft.css(t,"float")&&(l||(d.done(function(){f.display=h}),null==h&&(c=f.display,h="none"===c?"":c)),f.display="inline-block")),i.overflow&&(f.overflow="hidden",d.always(function(){f.overflow=i.overflow[0],f.overflowX=i.overflow[1],f.overflowY=i.overflow[2]})),l=!1,p)l||(m?"hidden"in m&&(g=m.hidden):m=At.access(t,"fxshow",{display:h}),o&&(m.hidden=!g),g&&b([t],!0),d.done(function(){for(n in g||b([t]),At.remove(t,"fxshow"),p)ft.style(t,n,p[n])})),l=B(g?m[n]:0,n,d),n in m||(m[n]=l.start,g&&(l.end=l.start,l.start=0))}],prefilter:function(t,e){e?q.prefilters.unshift(t):q.prefilters.push(t)}}),ft.speed=function(t,e,i){var n=t&&"object"==typeof t?ft.extend({},t):{complete:i||!i&&e||ut(t)&&t,duration:t,easing:i&&e||e&&!ut(e)&&e};return ft.fx.off?n.duration=0:"number"!=typeof n.duration&&(n.duration in ft.fx.speeds?n.duration=ft.fx.speeds[n.duration]:n.duration=ft.fx.speeds._default),null!=n.queue&&!0!==n.queue||(n.queue="fx"),n.old=n.complete,n.complete=function(){ut(n.old)&&n.old.call(this),n.queue&&ft.dequeue(this,n.queue)},n},ft.fn.extend({fadeTo:function(t,e,i,n){return this.filter(Rt).css("opacity",0).show().end().animate({opacity:e},t,i,n)},animate:function(t,e,i,n){var s=ft.isEmptyObject(t),o=ft.speed(e,i,n),a=function(){var e=q(this,ft.extend({},t),o);(s||At.get(this,"finish"))&&e.stop(!0)};return a.finish=a,s||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(t,e,i){var n=function(t){var e=t.stop;delete t.stop,e(i)};return"string"!=typeof t&&(i=e,e=t,t=void 0),e&&!1!==t&&this.queue(t||"fx",[]),this.each(function(){var e=!0,s=null!=t&&t+"queueHooks",o=ft.timers,a=At.get(this);if(s)a[s]&&a[s].stop&&n(a[s]);else for(s in a)a[s]&&a[s].stop&&pe.test(s)&&n(a[s]);for(s=o.length;s--;)o[s].elem!==this||null!=t&&o[s].queue!==t||(o[s].anim.stop(i),e=!1,o.splice(s,1));!e&&i||ft.dequeue(this,t)})},finish:function(t){return!1!==t&&(t=t||"fx"),this.each(function(){var e,i=At.get(this),n=i[t+"queue"],s=i[t+"queueHooks"],o=ft.timers,a=n?n.length:0;for(i.finish=!0,ft.queue(this,t,[]),s&&s.stop&&s.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<a;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete i.finish})}}),ft.each(["toggle","show","hide"],function(t,e){var i=ft.fn[e];ft.fn[e]=function(t,n,s){return null==t||"boolean"==typeof t?i.apply(this,arguments):this.animate(F(e,!0),t,n,s)}}),ft.each({slideDown:F("show"),slideUp:F("hide"),slideToggle:F("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){ft.fn[t]=function(t,i,n){return this.animate(e,t,i,n)}}),ft.timers=[],ft.fx.tick=function(){var t,e=0,i=ft.timers;for(ce=Date.now();e<i.length;e++)(t=i[e])()||i[e]!==t||i.splice(e--,1);i.length||ft.fx.stop(),ce=void 0},ft.fx.timer=function(t){ft.timers.push(t),ft.fx.start()},ft.fx.interval=13,ft.fx.start=function(){ue||(ue=!0,$())},ft.fx.stop=function(){ue=null},ft.fx.speeds={slow:600,fast:200,_default:400},ft.fn.delay=function(e,i){return e=ft.fx&&ft.fx.speeds[e]||e,i=i||"fx",this.queue(i,function(i,n){var s=t.setTimeout(i,e);n.stop=function(){t.clearTimeout(s)}})},function(){var t=Z.createElement("input"),e=Z.createElement("select").appendChild(Z.createElement("option"));t.type="checkbox",ct.checkOn=""!==t.value,ct.optSelected=e.selected,(t=Z.createElement("input")).value="t",t.type="radio",ct.radioValue="t"===t.value}();var fe,ge=ft.expr.attrHandle;ft.fn.extend({attr:function(t,e){return It(this,ft.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){ft.removeAttr(this,t)})}}),ft.extend({attr:function(t,e,i){var n,s,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?ft.prop(t,e,i):(1===o&&ft.isXMLDoc(t)||(s=ft.attrHooks[e.toLowerCase()]||(ft.expr.match.bool.test(e)?fe:void 0)),void 0!==i?null===i?void ft.removeAttr(t,e):s&&"set"in s&&void 0!==(n=s.set(t,i,e))?n:(t.setAttribute(e,i+""),i):s&&"get"in s&&null!==(n=s.get(t,e))?n:null==(n=ft.find.attr(t,e))?void 0:n)},attrHooks:{type:{set:function(t,e){if(!ct.radioValue&&"radio"===e&&o(t,"input")){var i=t.value;return t.setAttribute("type",e),i&&(t.value=i),e}}}},removeAttr:function(t,e){var i,n=0,s=e&&e.match(Tt);if(s&&1===t.nodeType)for(;i=s[n++];)t.removeAttribute(i)}}),fe={set:function(t,e,i){return!1===e?ft.removeAttr(t,i):t.setAttribute(i,i),i}},ft.each(ft.expr.match.bool.source.match(/\w+/g),function(t,e){var i=ge[e]||ft.find.attr;ge[e]=function(t,e,n){var s,o,a=e.toLowerCase();return n||(o=ge[a],ge[a]=s,s=null!=i(t,e,n)?a:null,ge[a]=o),s}});var me=/^(?:input|select|textarea|button)$/i,ve=/^(?:a|area)$/i;ft.fn.extend({prop:function(t,e){return It(this,ft.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[ft.propFix[t]||t]})}}),ft.extend({prop:function(t,e,i){var n,s,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ft.isXMLDoc(t)||(e=ft.propFix[e]||e,s=ft.propHooks[e]),void 0!==i?s&&"set"in s&&void 0!==(n=s.set(t,i,e))?n:t[e]=i:s&&"get"in s&&null!==(n=s.get(t,e))?n:t[e]},propHooks:{tabIndex:{get:function(t){var e=ft.find.attr(t,"tabindex");return e?parseInt(e,10):me.test(t.nodeName)||ve.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),ct.optSelected||(ft.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),ft.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ft.propFix[this.toLowerCase()]=this}),ft.fn.extend({addClass:function(t){var e,i,n,s,o,a,r,l=0;if(ut(t))return this.each(function(e){ft(this).addClass(t.call(this,e,Y(this)))});if((e=V(t)).length)for(;i=this[l++];)if(s=Y(i),n=1===i.nodeType&&" "+U(s)+" "){for(a=0;o=e[a++];)n.indexOf(" "+o+" ")<0&&(n+=o+" ");s!==(r=U(n))&&i.setAttribute("class",r)}return this},removeClass:function(t){var e,i,n,s,o,a,r,l=0;if(ut(t))return this.each(function(e){ft(this).removeClass(t.call(this,e,Y(this)))});if(!arguments.length)return this.attr("class","");if((e=V(t)).length)for(;i=this[l++];)if(s=Y(i),n=1===i.nodeType&&" "+U(s)+" "){for(a=0;o=e[a++];)for(;n.indexOf(" "+o+" ")>-1;)n=n.replace(" "+o+" "," ");s!==(r=U(n))&&i.setAttribute("class",r)}return this},toggleClass:function(t,e){var i=typeof t,n="string"===i||Array.isArray(t);return"boolean"==typeof e&&n?e?this.addClass(t):this.removeClass(t):ut(t)?this.each(function(i){ft(this).toggleClass(t.call(this,i,Y(this),e),e)}):this.each(function(){var e,s,o,a;if(n)for(s=0,o=ft(this),a=V(t);e=a[s++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==i||((e=Y(this))&&At.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===t?"":At.get(this,"__className__")||""))})},hasClass:function(t){var e,i,n=0;for(e=" "+t+" ";i=this[n++];)if(1===i.nodeType&&(" "+U(Y(i))+" ").indexOf(e)>-1)return!0;return!1}});var be=/\r/g;ft.fn.extend({val:function(t){var e,i,n,s=this[0];return arguments.length?(n=ut(t),this.each(function(i){var s;1===this.nodeType&&(null==(s=n?t.call(this,i,ft(this).val()):t)?s="":"number"==typeof s?s+="":Array.isArray(s)&&(s=ft.map(s,function(t){return null==t?"":t+""})),(e=ft.valHooks[this.type]||ft.valHooks[this.nodeName.toLowerCase()])&&"set"in e&&void 0!==e.set(this,s,"value")||(this.value=s))})):s?(e=ft.valHooks[s.type]||ft.valHooks[s.nodeName.toLowerCase()])&&"get"in e&&void 0!==(i=e.get(s,"value"))?i:"string"==typeof(i=s.value)?i.replace(be,""):null==i?"":i:void 0}}),ft.extend({valHooks:{option:{get:function(t){var e=ft.find.attr(t,"value");return null!=e?e:U(ft.text(t))}},select:{get:function(t){var e,i,n,s=t.options,a=t.selectedIndex,r="select-one"===t.type,l=r?null:[],h=r?a+1:s.length;for(n=a<0?h:r?a:0;n<h;n++)if(((i=s[n]).selected||n===a)&&!i.disabled&&(!i.parentNode.disabled||!o(i.parentNode,"optgroup"))){if(e=ft(i).val(),r)return e;l.push(e)}return l},set:function(t,e){for(var i,n,s=t.options,o=ft.makeArray(e),a=s.length;a--;)((n=s[a]).selected=ft.inArray(ft.valHooks.option.get(n),o)>-1)&&(i=!0);return i||(t.selectedIndex=-1),o}}}}),ft.each(["radio","checkbox"],function(){ft.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=ft.inArray(ft(t).val(),e)>-1}},ct.checkOn||(ft.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})}),ct.focusin="onfocusin"in t;var _e=/^(?:focusinfocus|focusoutblur)$/,ye=function(t){t.stopPropagation()};ft.extend(ft.event,{trigger:function(e,i,n,s){var o,a,r,l,h,c,u,d,p=[n||Z],f=rt.call(e,"type")?e.type:e,g=rt.call(e,"namespace")?e.namespace.split("."):[];if(a=d=r=n=n||Z,3!==n.nodeType&&8!==n.nodeType&&!_e.test(f+ft.event.triggered)&&(f.indexOf(".")>-1&&(g=f.split("."),f=g.shift(),g.sort()),h=f.indexOf(":")<0&&"on"+f,(e=e[ft.expando]?e:new ft.Event(f,"object"==typeof e&&e)).isTrigger=s?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),i=null==i?[e]:ft.makeArray(i,[e]),u=ft.event.special[f]||{},s||!u.trigger||!1!==u.trigger.apply(n,i))){if(!s&&!u.noBubble&&!dt(n)){for(l=u.delegateType||f,_e.test(l+f)||(a=a.parentNode);a;a=a.parentNode)p.push(a),r=a;r===(n.ownerDocument||Z)&&p.push(r.defaultView||r.parentWindow||t)}for(o=0;(a=p[o++])&&!e.isPropagationStopped();)d=a,e.type=o>1?l:u.bindType||f,(c=(At.get(a,"events")||{})[e.type]&&At.get(a,"handle"))&&c.apply(a,i),(c=h&&a[h])&&c.apply&&Mt(a)&&(e.result=c.apply(a,i),!1===e.result&&e.preventDefault());return e.type=f,s||e.isDefaultPrevented()||u._default&&!1!==u._default.apply(p.pop(),i)||!Mt(n)||h&&ut(n[f])&&!dt(n)&&((r=n[h])&&(n[h]=null),ft.event.triggered=f,e.isPropagationStopped()&&d.addEventListener(f,ye),n[f](),e.isPropagationStopped()&&d.removeEventListener(f,ye),ft.event.triggered=void 0,r&&(n[h]=r)),e.result}},simulate:function(t,e,i){var n=ft.extend(new ft.Event,i,{type:t,isSimulated:!0});ft.event.trigger(n,null,e)}}),ft.fn.extend({trigger:function(t,e){return this.each(function(){ft.event.trigger(t,e,this)})},triggerHandler:function(t,e){var i=this[0];if(i)return ft.event.trigger(t,e,i,!0)}}),ct.focusin||ft.each({focus:"focusin",blur:"focusout"},function(t,e){var i=function(t){ft.event.simulate(e,t.target,ft.event.fix(t))};ft.event.special[e]={setup:function(){var n=this.ownerDocument||this,s=At.access(n,e);s||n.addEventListener(t,i,!0),At.access(n,e,(s||0)+1)},teardown:function(){var n=this.ownerDocument||this,s=At.access(n,e)-1;s?At.access(n,e,s):(n.removeEventListener(t,i,!0),At.remove(n,e))}}});var we=t.location,xe=Date.now(),Ce=/\?/;ft.parseXML=function(e){var i;if(!e||"string"!=typeof e)return null;try{i=(new t.DOMParser).parseFromString(e,"text/xml")}catch(t){i=void 0}return i&&!i.getElementsByTagName("parsererror").length||ft.error("Invalid XML: "+e),i};var ke=/\[\]$/,Te=/\r?\n/g,De=/^(?:submit|button|image|reset|file)$/i,Se=/^(?:input|select|textarea|keygen)/i;ft.param=function(t,e){var i,n=[],s=function(t,e){var i=ut(e)?e():e;n[n.length]=encodeURIComponent(t)+"="+encodeURIComponent(null==i?"":i)};if(Array.isArray(t)||t.jquery&&!ft.isPlainObject(t))ft.each(t,function(){s(this.name,this.value)});else for(i in t)K(i,t[i],e,s);return n.join("&")},ft.fn.extend({serialize:function(){return ft.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=ft.prop(this,"elements");return t?ft.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!ft(this).is(":disabled")&&Se.test(this.nodeName)&&!De.test(t)&&(this.checked||!Ft.test(t))}).map(function(t,e){var i=ft(this).val();return null==i?null:Array.isArray(i)?ft.map(i,function(t){return{name:e.name,value:t.replace(Te,"\r\n")}}):{name:e.name,value:i.replace(Te,"\r\n")}}).get()}});var Ie=/%20/g,Pe=/#.*$/,Ee=/([?&])_=[^&]*/,Me=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ae=/^(?:GET|HEAD)$/,Oe=/^\/\//,Ne={},He={},ze="*/".concat("*"),Le=Z.createElement("a");Le.href=we.href,ft.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:we.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(we.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ze,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ft.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?Q(Q(t,ft.ajaxSettings),e):Q(ft.ajaxSettings,t)},ajaxPrefilter:X(Ne),ajaxTransport:X(He),ajax:function(e,i){function n(e,i,n,r){var h,d,p,y,w,x=i;c||(c=!0,l&&t.clearTimeout(l),s=void 0,a=r||"",C.readyState=e>0?4:0,h=e>=200&&e<300||304===e,n&&(y=function(t,e,i){for(var n,s,o,a,r=t.contents,l=t.dataTypes;"*"===l[0];)l.shift(),void 0===n&&(n=t.mimeType||e.getResponseHeader("Content-Type"));if(n)for(s in r)if(r[s]&&r[s].test(n)){l.unshift(s);break}if(l[0]in i)o=l[0];else{for(s in i){if(!l[0]||t.converters[s+" "+l[0]]){o=s;break}a||(a=s)}o=o||a}if(o)return o!==l[0]&&l.unshift(o),i[o]}(f,C,n)),y=function(t,e,i,n){var s,o,a,r,l,h={},c=t.dataTypes.slice();if(c[1])for(a in t.converters)h[a.toLowerCase()]=t.converters[a];for(o=c.shift();o;)if(t.responseFields[o]&&(i[t.responseFields[o]]=e),!l&&n&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),l=o,o=c.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(a=h[l+" "+o]||h["* "+o]))for(s in h)if((r=s.split(" "))[1]===o&&(a=h[l+" "+r[0]]||h["* "+r[0]])){!0===a?a=h[s]:!0!==h[s]&&(o=r[0],c.unshift(r[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:"parsererror",error:a?t:"No conversion from "+l+" to "+o}}}return{state:"success",data:e}}(f,y,C,h),h?(f.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(ft.lastModified[o]=w),(w=C.getResponseHeader("etag"))&&(ft.etag[o]=w)),204===e||"HEAD"===f.type?x="nocontent":304===e?x="notmodified":(x=y.state,d=y.data,h=!(p=y.error))):(p=x,!e&&x||(x="error",e<0&&(e=0))),C.status=e,C.statusText=(i||x)+"",h?v.resolveWith(g,[d,x,C]):v.rejectWith(g,[C,x,p]),C.statusCode(_),_=void 0,u&&m.trigger(h?"ajaxSuccess":"ajaxError",[C,f,h?d:p]),b.fireWith(g,[C,x]),u&&(m.trigger("ajaxComplete",[C,f]),--ft.active||ft.event.trigger("ajaxStop")))}"object"==typeof e&&(i=e,e=void 0),i=i||{};var s,o,a,r,l,h,c,u,d,p,f=ft.ajaxSetup({},i),g=f.context||f,m=f.context&&(g.nodeType||g.jquery)?ft(g):ft.event,v=ft.Deferred(),b=ft.Callbacks("once memory"),_=f.statusCode||{},y={},w={},x="canceled",C={readyState:0,getResponseHeader:function(t){var e;if(c){if(!r)for(r={};e=Me.exec(a);)r[e[1].toLowerCase()]=e[2];e=r[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(t,e){return null==c&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,y[t]=e),this},overrideMimeType:function(t){return null==c&&(f.mimeType=t),this},statusCode:function(t){var e;if(t)if(c)C.always(t[C.status]);else for(e in t)_[e]=[_[e],t[e]];return this},abort:function(t){var e=t||x;return s&&s.abort(e),n(0,e),this}};if(v.promise(C),f.url=((e||f.url||we.href)+"").replace(Oe,we.protocol+"//"),f.type=i.method||i.type||f.method||f.type,f.dataTypes=(f.dataType||"*").toLowerCase().match(Tt)||[""],null==f.crossDomain){h=Z.createElement("a");try{h.href=f.url,h.href=h.href,f.crossDomain=Le.protocol+"//"+Le.host!=h.protocol+"//"+h.host}catch(t){f.crossDomain=!0}}if(f.data&&f.processData&&"string"!=typeof f.data&&(f.data=ft.param(f.data,f.traditional)),G(Ne,f,i,C),c)return C;for(d in(u=ft.event&&f.global)&&0==ft.active++&&ft.event.trigger("ajaxStart"),f.type=f.type.toUpperCase(),f.hasContent=!Ae.test(f.type),o=f.url.replace(Pe,""),f.hasContent?f.data&&f.processData&&0===(f.contentType||"").indexOf("application/x-www-form-urlencoded")&&(f.data=f.data.replace(Ie,"+")):(p=f.url.slice(o.length),f.data&&(f.processData||"string"==typeof f.data)&&(o+=(Ce.test(o)?"&":"?")+f.data,delete f.data),!1===f.cache&&(o=o.replace(Ee,"$1"),p=(Ce.test(o)?"&":"?")+"_="+xe+++p),f.url=o+p),f.ifModified&&(ft.lastModified[o]&&C.setRequestHeader("If-Modified-Since",ft.lastModified[o]),ft.etag[o]&&C.setRequestHeader("If-None-Match",ft.etag[o])),(f.data&&f.hasContent&&!1!==f.contentType||i.contentType)&&C.setRequestHeader("Content-Type",f.contentType),C.setRequestHeader("Accept",f.dataTypes[0]&&f.accepts[f.dataTypes[0]]?f.accepts[f.dataTypes[0]]+("*"!==f.dataTypes[0]?", "+ze+"; q=0.01":""):f.accepts["*"]),f.headers)C.setRequestHeader(d,f.headers[d]);if(f.beforeSend&&(!1===f.beforeSend.call(g,C,f)||c))return C.abort();if(x="abort",b.add(f.complete),C.done(f.success),C.fail(f.error),s=G(He,f,i,C)){if(C.readyState=1,u&&m.trigger("ajaxSend",[C,f]),c)return C;f.async&&f.timeout>0&&(l=t.setTimeout(function(){C.abort("timeout")},f.timeout));try{c=!1,s.send(y,n)}catch(t){if(c)throw t;n(-1,t)}}else n(-1,"No Transport");return C},getJSON:function(t,e,i){return ft.get(t,e,i,"json")},getScript:function(t,e){return ft.get(t,void 0,e,"script")}}),ft.each(["get","post"],function(t,e){ft[e]=function(t,i,n,s){return ut(i)&&(s=s||n,n=i,i=void 0),ft.ajax(ft.extend({url:t,type:e,dataType:s,data:i,success:n},ft.isPlainObject(t)&&t))}}),ft._evalUrl=function(t){return ft.ajax({url:t,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},ft.fn.extend({wrapAll:function(t){var e;return this[0]&&(ut(t)&&(t=t.call(this[0])),e=ft(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return ut(t)?this.each(function(e){ft(this).wrapInner(t.call(this,e))}):this.each(function(){var e=ft(this),i=e.contents();i.length?i.wrapAll(t):e.append(t)})},wrap:function(t){var e=ut(t);return this.each(function(i){ft(this).wrapAll(e?t.call(this,i):t)})},unwrap:function(t){return this.parent(t).not("body").each(function(){ft(this).replaceWith(this.childNodes)}),this}}),ft.expr.pseudos.hidden=function(t){return!ft.expr.pseudos.visible(t)},ft.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},ft.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(t){}};var We={0:200,1223:204},Re=ft.ajaxSettings.xhr();ct.cors=!!Re&&"withCredentials"in Re,ct.ajax=Re=!!Re,ft.ajaxTransport(function(e){var i,n;if(ct.cors||Re&&!e.crossDomain)return{send:function(s,o){var a,r=e.xhr();if(r.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)r[a]=e.xhrFields[a];for(a in e.mimeType&&r.overrideMimeType&&r.overrideMimeType(e.mimeType),e.crossDomain||s["X-Requested-With"]||(s["X-Requested-With"]="XMLHttpRequest"),s)r.setRequestHeader(a,s[a]);i=function(t){return function(){i&&(i=n=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===t?r.abort():"error"===t?"number"!=typeof r.status?o(0,"error"):o(r.status,r.statusText):o(We[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=i(),n=r.onerror=r.ontimeout=i("error"),void 0!==r.onabort?r.onabort=n:r.onreadystatechange=function(){4===r.readyState&&t.setTimeout(function(){i&&n()})},i=i("abort");try{r.send(e.hasContent&&e.data||null)}catch(t){if(i)throw t}},abort:function(){i&&i()}}}),ft.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),ft.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return ft.globalEval(t),t}}}),ft.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),ft.ajaxTransport("script",function(t){var e,i;if(t.crossDomain)return{send:function(n,s){e=ft("<script>").prop({charset:t.scriptCharset,src:t.url}).on("load error",i=function(t){e.remove(),i=null,t&&s("error"===t.type?404:200,t.type)}),Z.head.appendChild(e[0])},abort:function(){i&&i()}}});var $e=[],je=/(=)\?(?=&|$)|\?\?/;ft.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var t=$e.pop()||ft.expando+"_"+xe++;return this[t]=!0,t}}),ft.ajaxPrefilter("json jsonp",function(e,i,n){var s,o,a,r=!1!==e.jsonp&&(je.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&je.test(e.data)&&"data");if(r||"jsonp"===e.dataTypes[0])return s=e.jsonpCallback=ut(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,r?e[r]=e[r].replace(je,"$1"+s):!1!==e.jsonp&&(e.url+=(Ce.test(e.url)?"&":"?")+e.jsonp+"="+s),e.converters["script json"]=function(){return a||ft.error(s+" was not called"),a[0]},e.dataTypes[0]="json",o=t[s],t[s]=function(){a=arguments},n.always(function(){void 0===o?ft(t).removeProp(s):t[s]=o,e[s]&&(e.jsonpCallback=i.jsonpCallback,$e.push(s)),a&&ut(o)&&o(a[0]),a=o=void 0}),"script"}),ct.createHTMLDocument=function(){var t=Z.implementation.createHTMLDocument("").body;return t.innerHTML="<form></form><form></form>",2===t.childNodes.length}(),ft.parseHTML=function(t,e,i){return"string"!=typeof t?[]:("boolean"==typeof e&&(i=e,e=!1),e||(ct.createHTMLDocument?((n=(e=Z.implementation.createHTMLDocument("")).createElement("base")).href=Z.location.href,e.head.appendChild(n)):e=Z),o=!i&&[],(s=yt.exec(t))?[e.createElement(s[1])]:(s=w([t],e,o),o&&o.length&&ft(o).remove(),ft.merge([],s.childNodes)));var n,s,o},ft.fn.load=function(t,e,i){var n,s,o,a=this,r=t.indexOf(" ");return r>-1&&(n=U(t.slice(r)),t=t.slice(0,r)),ut(e)?(i=e,e=void 0):e&&"object"==typeof e&&(s="POST"),a.length>0&&ft.ajax({url:t,type:s||"GET",dataType:"html",data:e}).done(function(t){o=arguments,a.html(n?ft("<div>").append(ft.parseHTML(t)).find(n):t)}).always(i&&function(t,e){a.each(function(){i.apply(this,o||[t.responseText,e,t])})}),this},ft.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(t,e){ft.fn[e]=function(t){return this.on(e,t)}}),ft.expr.pseudos.animated=function(t){return ft.grep(ft.timers,function(e){return t===e.elem}).length},ft.offset={setOffset:function(t,e,i){var n,s,o,a,r,l,h=ft.css(t,"position"),c=ft(t),u={};"static"===h&&(t.style.position="relative"),r=c.offset(),o=ft.css(t,"top"),l=ft.css(t,"left"),("absolute"===h||"fixed"===h)&&(o+l).indexOf("auto")>-1?(a=(n=c.position()).top,s=n.left):(a=parseFloat(o)||0,s=parseFloat(l)||0),ut(e)&&(e=e.call(t,i,ft.extend({},r))),null!=e.top&&(u.top=e.top-r.top+a),null!=e.left&&(u.left=e.left-r.left+s),"using"in e?e.using.call(t,u):c.css(u)}},ft.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ft.offset.setOffset(this,t,e)});var e,i,n=this[0];return n?n.getClientRects().length?(e=n.getBoundingClientRect(),i=n.ownerDocument.defaultView,{top:e.top+i.pageYOffset,left:e.left+i.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var t,e,i,n=this[0],s={top:0,left:0};if("fixed"===ft.css(n,"position"))e=n.getBoundingClientRect();else{for(e=this.offset(),i=n.ownerDocument,t=n.offsetParent||i.documentElement;t&&(t===i.body||t===i.documentElement)&&"static"===ft.css(t,"position");)t=t.parentNode;t&&t!==n&&1===t.nodeType&&((s=ft(t).offset()).top+=ft.css(t,"borderTopWidth",!0),s.left+=ft.css(t,"borderLeftWidth",!0))}return{
top:e.top-s.top-ft.css(n,"marginTop",!0),left:e.left-s.left-ft.css(n,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&"static"===ft.css(t,"position");)t=t.offsetParent;return t||Vt})}}),ft.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,e){var i="pageYOffset"===e;ft.fn[t]=function(n){return It(this,function(t,n,s){var o;if(dt(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===s)return o?o[e]:t[n];o?o.scrollTo(i?o.pageXOffset:s,i?s:o.pageYOffset):t[n]=s},t,n,arguments.length)}}),ft.each(["top","left"],function(t,e){ft.cssHooks[e]=N(ct.pixelPosition,function(t,i){if(i)return i=O(t,e),ee.test(i)?ft(t).position()[e]+"px":i})}),ft.each({Height:"height",Width:"width"},function(t,e){ft.each({padding:"inner"+t,content:e,"":"outer"+t},function(i,n){ft.fn[n]=function(s,o){var a=arguments.length&&(i||"boolean"!=typeof s),r=i||(!0===s||!0===o?"margin":"border");return It(this,function(e,i,s){var o;return dt(e)?0===n.indexOf("outer")?e["inner"+t]:e.document.documentElement["client"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body["scroll"+t],o["scroll"+t],e.body["offset"+t],o["offset"+t],o["client"+t])):void 0===s?ft.css(e,i,r):ft.style(e,i,s,r)},e,a?s:void 0,a)}})}),ft.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(t,e){ft.fn[e]=function(t,i){return arguments.length>0?this.on(e,null,t,i):this.trigger(e)}}),ft.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),ft.fn.extend({bind:function(t,e,i){return this.on(t,null,e,i)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,i,n){return this.on(e,t,i,n)},undelegate:function(t,e,i){return 1===arguments.length?this.off(t,"**"):this.off(e,t||"**",i)}}),ft.proxy=function(t,e){var i,n,s;if("string"==typeof e&&(i=t[e],e=t,t=i),ut(t))return n=et.call(arguments,2),(s=function(){return t.apply(e||this,n.concat(et.call(arguments)))}).guid=t.guid=t.guid||ft.guid++,s},ft.holdReady=function(t){t?ft.readyWait++:ft.ready(!0)},ft.isArray=Array.isArray,ft.parseJSON=JSON.parse,ft.nodeName=o,ft.isFunction=ut,ft.isWindow=dt,ft.camelCase=p,ft.type=n,ft.now=Date.now,ft.isNumeric=function(t){var e=ft.type(t);return("number"===e||"string"===e)&&!isNaN(t-parseFloat(t))},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ft});var Fe=t.jQuery,Be=t.$;return ft.noConflict=function(e){return t.$===ft&&(t.$=Be),e&&t.jQuery===ft&&(t.jQuery=Fe),ft},e||(t.jQuery=t.$=ft),ft}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){function e(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=i(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function i(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,n)}function n(){t.datepicker._isDisabledDatepicker(c.inline?c.dpDiv.parent()[0]:c.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function s(e,i){for(var n in t.extend(e,i),i)null==i[n]&&(e[n]=i[n]);return e}function o(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{};var a=(t.ui.version="1.12.1",0),r=Array.prototype.slice;t.cleanData=function(e){return function(i){var n,s,o;for(o=0;null!=(s=i[o]);o++)try{(n=t._data(s,"events"))&&n.remove&&t(s).triggerHandler("remove")}catch(t){}e(i)}}(t.cleanData),t.widget=function(e,i,n){var s,o,a,r={},l=e.split(".")[0],h=l+"-"+(e=e.split(".")[1]);return n||(n=i,i=t.Widget),t.isArray(n)&&(n=t.extend.apply(null,[{}].concat(n))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},s=t[l][e],o=t[l][e]=function(t,e){if(!this._createWidget)return new o(t,e);arguments.length&&this._createWidget(t,e)},t.extend(o,s,{version:n.version,_proto:t.extend({},n),_childConstructors:[]}),(a=new i).options=t.widget.extend({},a.options),t.each(n,function(e,n){t.isFunction(n)?r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function s(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=s,e=n.apply(this,arguments),this._super=i,this._superApply=o,e}}():r[e]=n}),o.prototype=t.widget.extend(a,{widgetEventPrefix:s&&a.widgetEventPrefix||e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),s?(t.each(s._childConstructors,function(e,i){var n=i.prototype;t.widget(n.namespace+"."+n.widgetName,o,i._proto)}),delete s._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,n,s=r.call(arguments,1),o=0,a=s.length;o<a;o++)for(i in s[o])n=s[o][i],s[o].hasOwnProperty(i)&&void 0!==n&&(t.isPlainObject(n)?e[i]=t.isPlainObject(e[i])?t.widget.extend({},e[i],n):t.widget.extend({},n):e[i]=n);return e},t.widget.bridge=function(e,i){var n=i.prototype.widgetFullName||e;t.fn[e]=function(s){var o="string"==typeof s,a=r.call(arguments,1),l=this;return o?this.length||"instance"!==s?this.each(function(){var i,o=t.data(this,n);return"instance"===s?(l=o,!1):o?t.isFunction(o[s])&&"_"!==s.charAt(0)?(i=o[s].apply(o,a))!==o&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0:t.error("no such method '"+s+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; attempted to call method '"+s+"'")}):l=void 0:(a.length&&(s=t.widget.extend.apply(null,[s].concat(a))),this.each(function(){var e=t.data(this,n);e?(e.option(s||{}),e._init&&e._init()):t.data(this,n,new i(s,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=a++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var n,s,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},n=e.split("."),e=n.shift(),n.length){for(s=a[e]=t.widget.extend({},this.options[e]),o=0;o<n.length-1;o++)s[n[o]]=s[n[o]]||{},s=s[n[o]];if(e=n.pop(),1===arguments.length)return void 0===s[e]?null:s[e];s[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,n,s;for(i in e)s=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&s&&s.length&&(n=t(s.get()),this._removeClass(s,i),n.addClass(this._classes({element:n,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;r<i.length;r++)a=s.classesElementLookup[i[r]]||t(),a=t(e.add?t.unique(a.get().concat(e.element.get())):a.not(e.element).get()),s.classesElementLookup[i[r]]=a,n.push(i[r]),o&&e.classes[i[r]]&&n.push(e.classes[i[r]])}var n=[],s=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),n.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(n,s){-1!==t.inArray(e.target,s)&&(i.classesElementLookup[n]=t(s.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,n){n="boolean"==typeof n?n:i;var s="string"==typeof t||null===t,o={extra:s?e:i,keys:s?t:e,element:s?this.element:t,add:n};return o.element.toggleClass(this._classes(o),n),this},_on:function(e,i,n){var s,o=this;"boolean"!=typeof e&&(n=i,i=e,e=!1),n?(i=s=t(i),this.bindings=this.bindings.add(i)):(n=i,i=this.element,s=this.widget()),t.each(n,function(n,a){function r(){if(e||!0!==o.options.disabled&&!t(this).hasClass("ui-state-disabled"))return("string"==typeof a?o[a]:a).apply(o,arguments)}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=n.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?s.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,n){var s,o,a=this.options[e];if(n=n||{},(i=t.Event(i)).type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(s in o)s in i||(i[s]=o[s]);return this.element.trigger(i,n),!(t.isFunction(a)&&!1===a.apply(this.element[0],[i].concat(n))||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(n,s,o){"string"==typeof s&&(s={effect:s});var a,r=s?!0===s||"number"==typeof s?i:s.effect||i:e;"number"==typeof(s=s||{})&&(s={duration:s}),a=!t.isEmptyObject(s),s.complete=o,s.delay&&n.delay(s.delay),a&&t.effects&&t.effects.effect[r]?n[e](s):r!==e&&n[r]?n[r](s.duration,s.easing,o):n.queue(function(i){t(this)[e](),o&&o.call(n[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(c.test(t[0])?e/100:1),parseFloat(t[1])*(c.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}var n,s=Math.max,o=Math.abs,a=/left|center|right/,r=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,h=/^\w+/,c=/%$/,u=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),e===(i=o.offsetWidth)&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),n=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),s="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth;return{width:"scroll"===n||"auto"===n&&e.height<e.element[0].scrollHeight?t.position.scrollbarWidth():0,height:s?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),n=t.isWindow(i[0]),s=!!i[0]&&9===i[0].nodeType;return{element:i,isWindow:n,isDocument:s,offset:n||s?{left:0,top:0}:t(e).offset(),scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return u.apply(this,arguments);n=t.extend({},n);var c,d,p,f,g,m,v=t(n.of),b=t.position.getWithinInfo(n.within),_=t.position.getScrollInfo(b),y=(n.collision||"flip").split(" "),w={};return m=function(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}(v),v[0].preventDefault&&(n.at="left top"),d=m.width,p=m.height,f=m.offset,g=t.extend({},f),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=a.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]),i[0]=a.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],n[this]=[h.exec(i[0])[0],h.exec(i[1])[0]]}),1===y.length&&(y[1]=y[0]),"right"===n.at[0]?g.left+=d:"center"===n.at[0]&&(g.left+=d/2),"bottom"===n.at[1]?g.top+=p:"center"===n.at[1]&&(g.top+=p/2),c=e(w.at,d,p),g.left+=c[0],g.top+=c[1],this.each(function(){var a,r,l=t(this),h=l.outerWidth(),u=l.outerHeight(),m=i(this,"marginLeft"),x=i(this,"marginTop"),C=h+m+i(this,"marginRight")+_.width,k=u+x+i(this,"marginBottom")+_.height,T=t.extend({},g),D=e(w.my,l.outerWidth(),l.outerHeight());"right"===n.my[0]?T.left-=h:"center"===n.my[0]&&(T.left-=h/2),"bottom"===n.my[1]?T.top-=u:"center"===n.my[1]&&(T.top-=u/2),T.left+=D[0],T.top+=D[1],a={marginLeft:m,marginTop:x},t.each(["left","top"],function(e,i){t.ui.position[y[e]]&&t.ui.position[y[e]][i](T,{targetWidth:d,targetHeight:p,elemWidth:h,elemHeight:u,collisionPosition:a,collisionWidth:C,collisionHeight:k,offset:[c[0]+D[0],c[1]+D[1]],my:n.my,at:n.at,within:b,elem:l})}),n.using&&(r=function(t){var e=f.left-T.left,i=e+d-h,a=f.top-T.top,r=a+p-u,c={target:{element:v,left:f.left,top:f.top,width:d,height:p},element:{element:l,left:T.left,top:T.top,width:h,height:u},horizontal:i<0?"left":e>0?"right":"center",vertical:r<0?"top":a>0?"bottom":"middle"};d<h&&o(e+i)<d&&(c.horizontal="center"),p<u&&o(a+r)<p&&(c.vertical="middle"),s(o(e),o(i))>s(o(a),o(r))?c.important="horizontal":c.important="vertical",n.using.call(this,t,c)}),l.offset(t.extend(T,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,n=e.within,o=n.isWindow?n.scrollLeft:n.offset.left,a=n.width,r=t.left-e.collisionPosition.marginLeft,l=o-r,h=r+e.collisionWidth-a-o;e.collisionWidth>a?l>0&&h<=0?(i=t.left+l+e.collisionWidth-a-o,t.left+=l-i):t.left=h>0&&l<=0?o:l>h?o+a-e.collisionWidth:o:l>0?t.left+=l:h>0?t.left-=h:t.left=s(t.left-r,t.left)},top:function(t,e){var i,n=e.within,o=n.isWindow?n.scrollTop:n.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=o-r,h=r+e.collisionHeight-a-o;e.collisionHeight>a?l>0&&h<=0?(i=t.top+l+e.collisionHeight-a-o,t.top+=l-i):t.top=h>0&&l<=0?o:l>h?o+a-e.collisionHeight:o:l>0?t.top+=l:h>0?t.top-=h:t.top=s(t.top-r,t.top)}},flip:{left:function(t,e){var i,n,s=e.within,a=s.offset.left+s.scrollLeft,r=s.width,l=s.isWindow?s.scrollLeft:s.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];c<0?((i=t.left+d+p+f+e.collisionWidth-r-a)<0||i<o(c))&&(t.left+=d+p+f):u>0&&((n=t.left-e.collisionPosition.marginLeft+d+p+f-l)>0||o(n)<u)&&(t.left+=d+p+f)},top:function(t,e){var i,n,s=e.within,a=s.offset.top+s.scrollTop,r=s.height,l=s.isWindow?s.scrollTop:s.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,p="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,f=-2*e.offset[1];c<0?((n=t.top+d+p+f+e.collisionHeight-r-a)<0||n<o(c))&&(t.top+=d+p+f):u>0&&((i=t.top-e.collisionPosition.marginTop+d+p+f-l)>0||o(i)<u)&&(t.top+=d+p+f)}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}();var l=(t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,n){return!!t.data(e,n[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),"ui-effects-animated"),h=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var n=c[e.type]||{};return null==t?i||!e.def?null:e.def:(t=n.floor?~~t:parseFloat(t),isNaN(t)?e.def:n.mod?(t+n.mod)%n.mod:0>t?0:n.max<t?n.max:t)}function n(e){var i=l(),n=i._rgba=[];return e=e.toLowerCase(),p(r,function(t,s){var o,a=s.re.exec(e),r=a&&s.parse(a),l=s.space||"rgba";if(r)return o=i[l](r),i[h[l].cache]=o[h[l].cache],n=i._rgba=o._rgba,!1}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),i):o[e]}function s(t,e,i){return 6*(i=(i+1)%1)<1?t+(e-t)*i*6:2*i<1?e:3*i<2?t+(e-t)*(2/3-i)*6:t}var o,a=/^([\-+])=\s*(\d+\.?\d*)/,r=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,n,s){return new t.Color.fn.parse(e,i,n,s)},h={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},c={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},u=l.support={},d=t("<p>")[0],p=t.each;d.style.cssText="background-color:rgba(1,1,1,.5)",u.rgba=d.style.backgroundColor.indexOf("rgba")>-1,p(h,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(e,s,a,r){if(void 0===e)return this._rgba=[null,null,null,null],this;(e.jquery||e.nodeType)&&(e=t(e).css(s),s=void 0);var c=this,u=t.type(e),d=this._rgba=[];return void 0!==s&&(e=[e,s,a,r],u="array"),"string"===u?this.parse(n(e)||o._default):"array"===u?(p(h.rgba.props,function(t,n){d[n.idx]=i(e[n.idx],n)}),this):"object"===u?(p(h,e instanceof l?function(t,i){e[i.cache]&&(c[i.cache]=e[i.cache].slice())}:function(n,s){var o=s.cache;p(s.props,function(t,n){if(!c[o]&&s.to){if("alpha"===t||null==e[t])return;c[o]=s.to(c._rgba)}c[o][n.idx]=i(e[t],n,!0)}),c[o]&&t.inArray(null,c[o].slice(0,3))<0&&(c[o][3]=1,s.from&&(c._rgba=s.from(c[o])))}),this):void 0},is:function(t){var e=l(t),i=!0,n=this;return p(h,function(t,s){var o,a=e[s.cache];return a&&(o=n[s.cache]||s.to&&s.to(n._rgba)||[],p(s.props,function(t,e){if(null!=a[e.idx])return i=a[e.idx]===o[e.idx]})),i}),i},_space:function(){var t=[],e=this;return p(h,function(i,n){e[n.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var n=l(t),s=n._space(),o=h[s],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),u=r.slice();return n=n[o.cache],p(o.props,function(t,s){var o=s.idx,a=r[o],l=n[o],h=c[s.type]||{};null!==l&&(null===a?u[o]=l:(h.mod&&(l-a>h.mod/2?a+=h.mod:a-l>h.mod/2&&(a-=h.mod)),u[o]=i((l-a)*e+a,s)))}),this[s](u)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),n=i.pop(),s=l(e)._rgba;return l(t.map(i,function(t,e){return(1-n)*s[e]+n*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&e<3&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),n=i.pop();return e&&i.push(~~(255*n)),"#"+t.map(i,function(t){return 1===(t=(t||0).toString(16)).length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,h.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,n=t[0]/255,s=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(n,s,o),l=Math.min(n,s,o),h=r-l,c=r+l,u=.5*c;return e=l===r?0:n===r?60*(s-o)/h+360:s===r?60*(o-n)/h+120:60*(n-s)/h+240,i=0===h?0:u<=.5?h/c:h/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},h.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],n=t[2],o=t[3],a=n<=.5?n*(1+i):n+i-n*i,r=2*n-a;return[Math.round(255*s(r,a,e+1/3)),Math.round(255*s(r,a,e)),Math.round(255*s(r,a,e-1/3)),o]},p(h,function(e,n){var s=n.props,o=n.cache,r=n.to,h=n.from;l.fn[e]=function(e){if(r&&!this[o]&&(this[o]=r(this._rgba)),void 0===e)return this[o].slice();var n,a=t.type(e),c="array"===a||"object"===a?e:arguments,u=this[o].slice();return p(s,function(t,e){var n=c["object"===a?t:e.idx];null==n&&(n=u[e.idx]),u[e.idx]=i(n,e)}),h?((n=l(h(u)))[o]=u,n):l(u)},p(s,function(i,n){l.fn[i]||(l.fn[i]=function(s){var o,r=t.type(s),l="alpha"===i?this._hsla?"hsla":"rgba":e,h=this[l](),c=h[n.idx];return"undefined"===r?c:("function"===r&&(s=s.call(this,c),r=t.type(s)),null==s&&n.empty?this:("string"===r&&(o=a.exec(s))&&(s=c+parseFloat(o[2])*("+"===o[1]?1:-1)),h[n.idx]=s,this[l](h)))})})}),l.hook=function(e){var i=e.split(" ");p(i,function(e,i){t.cssHooks[i]={set:function(e,s){var o,a,r="";if("transparent"!==s&&("string"!==t.type(s)||(o=n(s)))){if(s=l(o||s),!u.rgba&&1!==s._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(t){}s=s.blend(r&&"transparent"!==r?r:"_default")}s=s.toRgbaString()}try{e.style[i]=s}catch(t){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook("backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor"),t.cssHooks.borderColor={expand:function(t){var e={};return p(["Top","Right","Bottom","Left"],function(i,n){e["border"+n+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(h),function(){function e(e){var i,n,s=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(s&&s.length&&s[0]&&s[s[0]])for(n=s.length;n--;)"string"==typeof s[i=s[n]]&&(o[t.camelCase(i)]=s[i]);else for(i in s)"string"==typeof s[i]&&(o[i]=s[i]);return o}function i(e,i){var n,o,a={};for(n in i)o=i[n],e[n]!==o&&(s[n]||!t.fx.step[n]&&isNaN(parseFloat(o))||(a[n]=o));return a}var n=["add","remove","toggle"],s={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(h.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(s,o,a,r){var l=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",h=l.children?a.find("*").addBack():a;h=h.map(function(){return{el:t(this),start:e(this)}}),(o=function(){t.each(n,function(t,e){s[e]&&a[e+"Class"](s[e])})})(),h=h.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),h=h.map(function(){var e=this,i=t.Deferred(),n=t.extend({},l,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,n),i.promise()}),t.when.apply(t,h.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),l.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,n,s,o){return n?t.effects.animateClass.call(this,{add:i},n,s,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,n,s,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},n,s,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,n,s,o,a){return"boolean"==typeof n||void 0===n?s?t.effects.animateClass.call(this,n?{add:i}:{remove:i},s,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},n,s,o)}}(t.fn.toggleClass),switchClass:function(e,i,n,s,o){return t.effects.animateClass.call(this,{add:i,remove:e},n,s,o)}})}(),function(){function e(e,i,n,s){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(s=i,n=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(s=n,n=i,i={}),t.isFunction(n)&&(s=n,n=null),i&&t.extend(e,i),n=n||i.duration,e.duration=t.fx.off?0:"number"==typeof n?n:n in t.fx.speeds?t.fx.speeds[n]:t.fx.speeds._default,e.complete=s||i.complete,e}function i(e){return!(e&&"number"!=typeof e&&!t.fx.speeds[e])||"string"==typeof e&&!t.effects.effect[e]||!!t.isFunction(e)||"object"==typeof e&&!e.effect}function n(t,e){var i=e.outerWidth(),n=e.outerHeight(),s=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/.exec(t)||["",0,i,n,0];return{top:parseFloat(s[1])||0,right:"auto"===s[2]?i:parseFloat(s[2]),bottom:"auto"===s[3]?n:parseFloat(s[3]),left:parseFloat(s[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(l)||e(i)}}(t.expr.filters.animated)),!1!==t.uiBackCompat&&t.extend(t.effects,{save:function(t,e){for(var i=0,n=e.length;i<n;i++)null!==e[i]&&t.data("ui-effects-"+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,n=0,s=e.length;n<s;n++)null!==e[n]&&(i=t.data("ui-effects-"+e[n]),t.css(e[n],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),float:e.css("float")},n=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),s={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(t){o=document.body}return e.wrap(n),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),n=e.parent(),"static"===e.css("position")?(n.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,n){i[n]=e.css(n),isNaN(parseInt(i[n],10))&&(i[n]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(s),n.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,n){return n||(n=i,i="effect"),t.effects.effect[e]=n,t.effects.effect[e].mode=i,n},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var n="horizontal"!==i?(e||100)/100:1,s="vertical"!==i?(e||100)/100:1;return{height:t.height()*s,width:t.width()*n,outerHeight:t.outerHeight()*s,outerWidth:t.outerWidth()*n}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var n=t.queue();e>1&&n.splice.apply(n,[1,0].concat(n.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data("ui-effects-style",t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data("ui-effects-style")||"",t.removeData("ui-effects-style")},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),
(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,n;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":n=0;break;case"center":n=.5;break;case"right":n=1;break;default:n=t[1]/e.width}return{x:n,y:i}},createPlaceholder:function(e){var i,n=e.css("position"),s=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(n)&&(n="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),float:e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data("ui-effects-placeholder",i)),e.css({position:n,left:s.left,top:s.top}),i},removePlaceholder:function(t){var e="ui-effects-placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,n,s){return s=s||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(s[i]=o[0]*n+o[1])}),s}}),t.fn.extend({effect:function(){function i(e){function i(){t.isFunction(h)&&h.call(a[0]),t.isFunction(e)&&e()}var a=t(this);n.mode=u.shift(),!1===t.uiBackCompat||o?"none"===n.mode?(a[c](),i()):s.call(a[0],n,function(){a.removeData(l),t.effects.cleanUp(a),"hide"===n.mode&&a.hide(),i()}):(a.is(":hidden")?"hide"===c:"show"===c)?(a[c](),i()):s.call(a[0],n,i)}var n=e.apply(this,arguments),s=t.effects.effect[n.effect],o=s.mode,a=n.queue,r=a||"fx",h=n.complete,c=n.mode,u=[],d=function(e){var i=t(this),n=t.effects.mode(i,c)||o;i.data(l,!0),u.push(n),o&&("show"===n||n===o&&"hide"===n)&&i.show(),o&&"none"===n||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!s?c?this[c](n.duration,h):this.each(function(){h&&h.call(this)}):!1===a?this.each(d).each(i):this.queue(r,d).queue(r,i)},show:function(t){return function(n){if(i(n))return t.apply(this,arguments);var s=e.apply(this,arguments);return s.mode="show",this.effect.call(this,s)}}(t.fn.show),hide:function(t){return function(n){if(i(n))return t.apply(this,arguments);var s=e.apply(this,arguments);return s.mode="hide",this.effect.call(this,s)}}(t.fn.hide),toggle:function(t){return function(n){if(i(n)||"boolean"==typeof n)return t.apply(this,arguments);var s=e.apply(this,arguments);return s.mode="toggle",this.effect.call(this,s)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),n=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(n=[parseFloat(i),e])}),n},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):n(this.css("clip"),this)},transfer:function(e,i){var n=t(this),s=t(e.to),o="fixed"===s.css("position"),a=t("body"),r=o?a.scrollTop():0,l=o?a.scrollLeft():0,h=s.offset(),c={top:h.top-r,left:h.left-l,height:s.innerHeight(),width:s.innerWidth()},u=n.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-l,height:n.innerHeight(),width:n.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=n(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;t<((e=Math.pow(2,--i))-1)/11;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return t<.5?i(2*t)/2:1-i(-2*t+2)/2}})}(),t.effects,t.effects.define("blind","hide",function(e,i){var n={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},s=t(this),o=e.direction||"up",a=s.cssClip(),r={clip:t.extend({},a)},l=t.effects.createPlaceholder(s);r.clip[n[o][0]]=r.clip[n[o][1]],"show"===e.mode&&(s.cssClip(r.clip),l&&l.css(t.effects.clipToBox(r)),r.clip=a),l&&l.animate(t.effects.clipToBox(r),e.duration,e.easing),s.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var n,s,o,a=t(this),r=e.mode,l="hide"===r,h="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(h||l?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",v="up"===c||"left"===c,b=0,_=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),h&&((s={opacity:1})[m]=o,a.css("opacity",0).css(m,v?2*-u:2*u).animate(s,f,g)),l&&(u/=Math.pow(2,d-1)),(s={})[m]=o;b<d;b++)(n={})[m]=(v?"-=":"+=")+u,a.animate(n,f,g).animate(s,f,g),u=l?2*u:u/2;l&&((n={opacity:0})[m]=(v?"-=":"+=")+u,a.animate(n,f,g)),a.queue(i),t.effects.unshift(a,_,p+1)}),t.effects.define("clip","hide",function(e,i){var n,s={},o=t(this),a=e.direction||"vertical",r="both"===a,l=r||"horizontal"===a,h=r||"vertical"===a;n=o.cssClip(),s.clip={top:h?(n.bottom-n.top)/2:n.top,right:l?(n.right-n.left)/2:n.right,bottom:h?(n.bottom-n.top)/2:n.bottom,left:l?(n.right-n.left)/2:n.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(s.clip),s.clip=n),o.animate(s,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var n,s=t(this),o="show"===e.mode,a=e.direction||"left",r="up"===a||"down"===a?"top":"left",l="up"===a||"left"===a?"-=":"+=",h="+="===l?"-=":"+=",c={opacity:0};t.effects.createPlaceholder(s),n=e.distance||s["top"===r?"outerHeight":"outerWidth"](!0)/2,c[r]=l+n,o&&(s.css(c),c[r]=h+n,c.opacity=1),s.animate(c,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function n(){v.push(this),v.length===c*u&&(d.css({visibility:"visible"}),t(v).remove(),i())}var s,o,a,r,l,h,c=e.pieces?Math.round(Math.sqrt(e.pieces)):3,u=c,d=t(this),p="show"===e.mode,f=d.show().css("visibility","hidden").offset(),g=Math.ceil(d.outerWidth()/u),m=Math.ceil(d.outerHeight()/c),v=[];for(s=0;s<c;s++)for(r=f.top+s*m,h=s-(c-1)/2,o=0;o<u;o++)a=f.left+o*g,l=o-(u-1)/2,d.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-o*g,top:-s*m}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g,height:m,left:a+(p?l*g:0),top:r+(p?h*m:0),opacity:p?0:1}).animate({left:a+(p?0:l*g),top:r+(p?0:h*m),opacity:p?1:0},e.duration||500,e.easing,n)}),t.effects.define("fade","toggle",function(e,i){var n="show"===e.mode;t(this).css("opacity",n?0:1).animate({opacity:n?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var n=t(this),s=e.mode,o="show"===s,a="hide"===s,r=e.size||15,l=/([0-9]+)%/.exec(r),h=e.horizFirst?["right","bottom"]:["bottom","right"],c=e.duration/2,u=t.effects.createPlaceholder(n),d=n.cssClip(),p={clip:t.extend({},d)},f={clip:t.extend({},d)},g=[d[h[0]],d[h[1]]],m=n.queue().length;l&&(r=parseInt(l[1],10)/100*g[a?0:1]),p.clip[h[0]]=r,f.clip[h[0]]=r,f.clip[h[1]]=0,o&&(n.cssClip(f.clip),u&&u.css(t.effects.clipToBox(f)),f.clip=d),n.queue(function(i){u&&u.animate(t.effects.clipToBox(p),c,e.easing).animate(t.effects.clipToBox(f),c,e.easing),i()}).animate(p,c,e.easing).animate(f,c,e.easing).queue(i),t.effects.unshift(n,m,4)}),t.effects.define("highlight","show",function(e,i){var n=t(this),s={backgroundColor:n.css("backgroundColor")};"hide"===e.mode&&(s.opacity=0),t.effects.saveStyle(n),n.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(s,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var n,s,o,a=t(this),r=["fontSize"],l=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],h=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),v=e.from||m,b=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=v,v=b,b=o),s={from:{y:v.height/m.height,x:v.width/m.width},to:{y:b.height/m.height,x:b.width/m.width}},"box"!==d&&"both"!==d||(s.from.y!==s.to.y&&(v=t.effects.setTransition(a,l,s.from.y,v),b=t.effects.setTransition(a,l,s.to.y,b)),s.from.x!==s.to.x&&(v=t.effects.setTransition(a,h,s.from.x,v),b=t.effects.setTransition(a,h,s.to.x,b))),"content"!==d&&"both"!==d||s.from.y!==s.to.y&&(v=t.effects.setTransition(a,r,s.from.y,v),b=t.effects.setTransition(a,r,s.to.y,b)),p&&(n=t.effects.getBaseline(p,m),v.top=(m.outerHeight-v.outerHeight)*n.y+g.top,v.left=(m.outerWidth-v.outerWidth)*n.x+g.left,b.top=(m.outerHeight-b.outerHeight)*n.y+g.top,b.left=(m.outerWidth-b.outerWidth)*n.x+g.left),a.css(v),"content"!==d&&"both"!==d||(l=l.concat(["marginTop","marginBottom"]).concat(r),h=h.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),n=t.effects.scaledDimensions(i),o={height:n.height*s.from.y,width:n.width*s.from.x,outerHeight:n.outerHeight*s.from.y,outerWidth:n.outerWidth*s.from.x},a={height:n.height*s.to.y,width:n.width*s.to.x,outerHeight:n.height*s.to.y,outerWidth:n.width*s.to.x};s.from.y!==s.to.y&&(o=t.effects.setTransition(i,l,s.from.y,o),a=t.effects.setTransition(i,l,s.to.y,a)),s.from.x!==s.to.x&&(o=t.effects.setTransition(i,h,s.from.x,o),a=t.effects.setTransition(i,h,s.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(b,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===b.opacity&&a.css("opacity",v.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var n=t(this),s=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==s?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(n),to:t.effects.scaledDimensions(n,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var n=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,n,i)}),t.effects.define("pulsate","show",function(e,i){var n=t(this),s=e.mode,o="show"===s,a=o||"hide"===s,r=2*(e.times||5)+(a?1:0),l=e.duration/r,h=0,c=1,u=n.queue().length;for(!o&&n.is(":visible")||(n.css("opacity",0).show(),h=1);c<r;c++)n.animate({opacity:h},l,e.easing),h=1-h;n.animate({opacity:h},l,e.easing),n.queue(i),t.effects.unshift(n,u,r+1)}),t.effects.define("shake",function(e,i){var n=1,s=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,l=2*r+1,h=Math.round(e.duration/l),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=s.queue().length;for(t.effects.createPlaceholder(s),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,s.animate(d,h,e.easing);n<r;n++)s.animate(p,h,e.easing).animate(f,h,e.easing);s.animate(p,h,e.easing).animate(d,h/2,e.easing).queue(i),t.effects.unshift(s,g,l+1)}),t.effects.define("slide","show",function(e,i){var n,s,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,l=e.direction||"left",h="up"===l||"down"===l?"top":"left",c="up"===l||"left"===l,u=e.distance||o["top"===h?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),n=o.cssClip(),s=o.position()[h],d[h]=(c?-1:1)*u+s,d.clip=o.cssClip(),d.clip[a[l][1]]=d.clip[a[l][0]],"show"===r&&(o.cssClip(d.clip),o.css(h,d[h]),d.clip=n,d[h]=s),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),!1!==t.uiBackCompat&&t.effects.define("transfer",function(e,i){t(this).transfer(e,i)}),t.ui.focusable=function(e,i){var n,s,o,a,r,l=e.nodeName.toLowerCase();return"area"===l?(s=(n=e.parentNode).name,!(!e.href||!s||"map"!==n.nodeName.toLowerCase())&&(o=t("img[usemap='#"+s+"']")).length>0&&o.is(":visible")):(/^(input|select|textarea|button|object)$/.test(l)?(a=!e.disabled)&&(r=t(e).closest("fieldset")[0])&&(a=!r.disabled):a="a"===l&&e.href||i,a&&t(e).is(":visible")&&function(t){for(var e=t.css("visibility");"inherit"===e;)e=(t=t.parent()).css("visibility");return"hidden"!==e}(t(e)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function n(e,i,n,o){return t.each(s,function(){i-=parseFloat(t.css(e,"padding"+this))||0,n&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var s="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,n(this,e)+"px")})},t.fn["outer"+i]=function(e,s){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,n(this,e,!0,s)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,.\/:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,n,s,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(s=this.eq(0).parents("label"),(n=this.attr("id"))&&(o=(e=this.eq(0).parents().last()).add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(n)+"']",s=s.add(o.find(i).addBack(i))),this.pushStack(s))},t.fn.scrollParent=function(e){var i=this.css("position"),n="absolute"===i,s=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return(!n||"static"!==e.css("position"))&&s.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),n=null!=i;return(!n||i>=0)&&t.ui.focusable(e,n)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,n=this.options.icons;n&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+n.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,n.header)._addClass(i,null,n.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){"active"!==t?("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||!1!==this.options.active||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons())):this._activate(e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,n=this.headers.length,s=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(s+1)%n];break;case i.LEFT:case i.UP:o=this.headers[(s-1+n)%n];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[n-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=t()):!1===e.active?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,n=i.heightStyle,s=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),n=e.next(),s=n.uniqueId().attr("id");e.attr("aria-controls",s),n.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===n?(e=s.height(),this.element.siblings(":visible").each(function(){var i=t(this),n=i.css("position");"absolute"!==n&&"fixed"!==n&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===n&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,n,s=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],l=r&&s.collapsible,h=l?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:l?t():a,newPanel:h};e.preventDefault(),r&&!s.collapsible||!1===this._trigger("beforeActivate",e,u)||(s.active=!l&&this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),s.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,s.icons.activeHeader)._addClass(i,null,s.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),s.icons&&(n=a.children(".ui-accordion-header-icon"),this._removeClass(n,null,s.icons.header)._addClass(n,null,s.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,n=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=n,this.options.animate?this._animate(i,n,e):(n.hide(),i.show(),this._toggleComplete(e)),n.attr({"aria-hidden":"true"}),n.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&n.length?n.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var n,s,o,a=this,r=0,l=t.css("box-sizing"),h=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=h&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(s=u),s=s||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(n=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:s,step:function(t,e){e.now=Math.round(t)}}),void t.hide().animate(this.showProps,{duration:o,easing:s,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===l&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(n-e.outerHeight()-r),r=0)}})):e.animate(this.hideProps,o,s,d):t.animate(this.showProps,o,s,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),n=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&n.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),n=t(e.currentTarget);i[0]===n[0]&&(this._removeClass(n.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,n))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]))&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),e.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,n,s,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,n=this.previousFilter||"",o=!1,s=e.keyCode>=96&&e.keyCode<=105?(e.keyCode-96).toString():String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),s===n?o=!0:s=n+s,i=this._filterMenuItems(s),(i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i).length||(s=String.fromCharCode(e.keyCode),i=this._filterMenuItems(s)),i.length?(this.focus(e,i),this.previousFilter=s,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,n,s,o=this,a=this.options.icons.submenu,r=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),i=r.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),n=t("<span>").data("ui-menu-submenu-caret",!0);o._addClass(n,"ui-menu-icon","ui-icon "+a),i.attr("aria-haspopup","true").prepend(n),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(i,"ui-menu","ui-widget ui-widget-content ui-front"),(e=r.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var e=t(this);o._isDivider(e)&&o._addClass(e,"ui-menu-divider","ui-widget-content")}),s=(n=e.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(s,"ui-menu-item-wrapper"),e.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,n,s;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),n=this.active.children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",n.attr("id")),s=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,n,s,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,n=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,s=e.offset().top-this.activeMenu.offset().top-i-n,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),s<0?this.activeMenu.scrollTop(o+s):s+r>a&&this.activeMenu.scrollTop(o+s-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var n=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));n.length||(n=this.element),this._close(n),this.blur(e),this._removeClass(n.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=n},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))
},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var n;this.active&&(n="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),n&&n.length&&this.active||(n=this.activeMenu.find(this.options.items)[e]()),this.focus(i,n)},nextPage:function(e){var i,n,s;this.active?this.isLastItem()||(this._hasScroll()?(n=this.active.offset().top,s=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-n-s<0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())):this.next(e)},previousPage:function(e){var i,n,s;this.active?this.isFirstItem()||(this._hasScroll()?(n=this.active.offset().top,s=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return(i=t(this)).offset().top-n+s>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())):this.next(e)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),n=new RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return n.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,n,s=this.element[0].nodeName.toLowerCase(),o="textarea"===s,a="input"===s;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(s){if(this.element.prop("readOnly"))return e=!0,n=!0,void(i=!0);e=!1,n=!1,i=!1;var o=t.ui.keyCode;switch(s.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",s);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",s);break;case o.UP:e=!0,this._keyEvent("previous",s);break;case o.DOWN:e=!0,this._keyEvent("next",s);break;case o.ENTER:this.menu.active&&(e=!0,s.preventDefault(),this.menu.select(s));break;case o.TAB:this.menu.active&&this.menu.select(s);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(s),s.preventDefault());break;default:i=!0,this._searchTimeout(s)}},keypress:function(n){if(e)return e=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||n.preventDefault());if(!i){var s=t.ui.keyCode;switch(n.keyCode){case s.PAGE_UP:this._move("previousPage",n);break;case s.PAGE_DOWN:this._move("nextPage",n);break;case s.UP:this._keyEvent("previous",n);break;case s.DOWN:this._keyEvent("next",n)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(t),this._change(t))}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var n,s;if(this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)});s=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:s})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value),(n=i.item.attr("aria-label")||s.value)&&t.trim(n).length&&(this.liveRegion.children().hide(),t("<div>").text(n).appendTo(this.liveRegion))},menuselect:function(e,i){var n=i.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=n})),!1!==this._trigger("select",e,{item:n})&&this._value(n.value),this.term=this._value(),this.close(e),this.selectedItem=n}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,n=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,n){n(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,s){n.xhr&&n.xhr.abort(),n.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){s(t)},error:function(){s([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),n=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;e&&(!e||i||n)||(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),--this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var n=this;t.each(i,function(t,i){n._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e):void this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var n=new RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return n.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}});var c,u=(t.ui.autocomplete,/ui-corner-([a-z]){2,6}/g);t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(n,s){var o,a={};if(s)return"controlgroupLabel"===n?((o=e.element.find(s)).each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),void(i=i.concat(o.get()))):void(t.fn[n]&&(a=e["_"+n+"Options"]?e["_"+n+"Options"]("middle"):{classes:{}},e.element.find(s).each(function(){var s=t(this),o=s[n]("instance"),r=t.widget.extend({},a);if("button"!==n||!s.parent(".ui-spinner").length){o||(o=s[n]()[n]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),s[n](r);var l=s[n]("widget");t.data(l[0],"ui-controlgroup-data",o||s[n]("instance")),i.push(l[0])}})))}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this).data("ui-controlgroup-data");i&&i[e]&&i[e]()})},_updateCornerClass:function(t,e){var i=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all"),this._addClass(t,null,i)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,n={classes:{}};return n.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],n},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:!!e&&"auto",classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var n={};return t.each(e,function(s){var o=i.options.classes[s]||"";o=t.trim(o.replace(u,"")),n[s]=(o+" "+e[s]).replace(/\s+/g," ")}),n},_setOption:function(t,e){"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"!==t?this.refresh():this._callChildMethod(e?"disable":"enable")},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,n){var s=e[n]().data("ui-controlgroup-data");if(s&&i["_"+s.widgetName+"Options"]){var o=i["_"+s.widgetName+"Options"](1===e.length?"only":n);o.classes=i._resolveClassesValues(o.classes,s),s.element[s.widgetName](o)}else i._updateCornerClass(e[n](),n)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,n=this,s=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){n.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(s.label=this.originalLabel),null!=(e=this.element[0].disabled)&&(s.disabled=e),s},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e=this.element[0].name,i="input[name='"+t.ui.escapeSelector(e)+"']";return e?(this.form.length?t(this.form[0].elements).filter(i):t(i).filter(function(){return 0===t(this).form().length})).not(this.element):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){if("label"!==t||e){if(this._super(t,e),"disabled"===t)return this._toggleClass(this.label,null,"ui-state-disabled",e),void(this.element[0].disabled=e);this.refresh()}},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),null!=(t=this.element[0].disabled)&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var n="iconPosition"!==e,s=n?this.options.iconPosition:i,o="top"===s||"bottom"===s;this.icon?n&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),n&&this._addClass(this.icon,null,i),this._attachIcon(s),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(s))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),!1!==t.uiBackCompat&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){"text"!==t?("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments)):this._super("showLabel",e)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}}),t.extend(e.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return s(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var n,s,o;s="div"===(n=e.nodeName.toLowerCase())||"span"===n,e.id||(this.uuid+=1,e.id="dp"+this.uuid),(o=this._newInst(t(e),s)).settings=t.extend({},i||{}),"input"===n?this._connectDatepicker(e,o):s&&this._inlineDatepicker(e,o)},_newInst:function(e,n){return{id:e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1"),input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:n,dpDiv:n?i(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var n=t(e);i.append=t([]),i.trigger=t([]),n.hasClass(this.markerClassName)||(this._attachments(n,i),n.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var n,s,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),"focus"!==(n=this._get(i,"showOn"))&&"both"!==n||e.on("focus",this._showDatepicker),"button"!==n&&"both"!==n||(s=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:s,title:s}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:s,title:s}):s)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,n,s,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,n=0,s=0;s<t.length;s++)t[s].length>i&&(i=t[s].length,n=s);return n},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var n=t(e);n.hasClass(this.markerClassName)||(n.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,n,o,a){var r,l,h,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),(d=this._dialogInst=this._newInst(this._dialogInput,!1)).settings={},t.data(this._dialogInput[0],"datepicker",d)),s(d.settings,o||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=a?a.length?a:[a.pageX,a.pageY]:null,this._pos||(l=document.documentElement.clientWidth,h=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[l/2-100+c,h/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=n,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,n=t(e),s=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(s.append.remove(),s.trigger.remove(),n.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):"div"!==i&&"span"!==i||n.removeClass(this.markerClassName).empty(),c===s&&(c=null))},_enableDatepicker:function(e){var i,n,s=t(e),o=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().removeClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,n,s=t(e),o=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&("input"===(i=e.nodeName.toLowerCase())?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):"div"!==i&&"span"!==i||((n=s.children("."+this._inlineClass)).children().addClass("ui-state-disabled"),n.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;e<this._disabledInputs.length;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(t){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,n){var o,a,r,l,h=this._getInst(e);if(2===arguments.length&&"string"==typeof i)return"defaults"===i?t.extend({},t.datepicker._defaults):h?"all"===i?t.extend({},h.settings):this._get(h,i):null;o=i||{},"string"==typeof i&&((o={})[i]=n),h&&(this._curInst===h&&this._hideDatepicker(),a=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(h,"min"),l=this._getMinMaxDate(h,"max"),s(h.settings,o),null!==r&&void 0!==o.dateFormat&&void 0===o.minDate&&(h.settings.minDate=this._formatDate(h,r)),null!==l&&void 0!==o.dateFormat&&void 0===o.maxDate&&(h.settings.maxDate=this._formatDate(h,l)),"disabled"in o&&(o.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),h),this._autoSize(h),this._setDate(h,a),this._updateAlternate(h),this._updateDatepicker(h))},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,n,s,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return(s=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv))[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,s[0]),(i=t.datepicker._get(o,"onSelect"))?(n=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[n,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,
e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,n,s=t.datepicker._getInst(e.target);if(t.datepicker._get(s,"constrainInput"))return i=t.datepicker._possibleChars(t.datepicker._get(s,"dateFormat")),n=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||n<" "||!i||i.indexOf(n)>-1},_doKeyUp:function(e){var i=t.datepicker._getInst(e.target);if(i.input.val()!==i.lastVal)try{t.datepicker.parseDate(t.datepicker._get(i,"dateFormat"),i.input?i.input.val():null,t.datepicker._getFormatConfig(i))&&(t.datepicker._setDateFromField(i),t.datepicker._updateAlternate(i),t.datepicker._updateDatepicker(i))}catch(t){}return!0},_showDatepicker:function(e){var i,n,o,a,r,l,h;"input"!==(e=e.target||e).nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),t.datepicker._isDisabledDatepicker(e)||t.datepicker._lastInput===e||(i=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==i&&(t.datepicker._curInst.dpDiv.stop(!0,!0),i&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),!1!==(o=(n=t.datepicker._get(i,"beforeShow"))?n.apply(e,[e,i]):{})&&(s(i.settings,o),i.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(i),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),a=!1,t(e).parents().each(function(){return!(a|="fixed"===t(this).css("position"))}),r={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,i.dpDiv.empty(),i.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(i),r=t.datepicker._checkOffset(i,r,a),i.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":a?"fixed":"absolute",display:"none",left:r.left+"px",top:r.top+"px"}),i.inline||(l=t.datepicker._get(i,"showAnim"),h=t.datepicker._get(i,"duration"),i.dpDiv.css("z-index",function(t){for(var e,i;t.length&&t[0]!==document;){if(("absolute"===(e=t.css("position"))||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?i.dpDiv.show(l,t.datepicker._get(i,"showOptions"),h):i.dpDiv[l||"show"](l?h:null),t.datepicker._shouldFocusInput(i)&&i.input.trigger("focus"),t.datepicker._curInst=i)))},_updateDatepicker:function(e){this.maxRows=4,c=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),o=s[1],a=e.dpDiv.find("."+this._dayOverClass+" a");a.length>0&&n.apply(a.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),o>1&&e.dpDiv.addClass("ui-datepicker-multi-"+o).css("width",17*o+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,n){var s=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,l=document.documentElement.clientWidth+(n?0:t(document).scrollLeft()),h=document.documentElement.clientHeight+(n?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?s-a:0,i.left-=n&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=n&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+s>l&&l>s?Math.abs(i.left+s-l):0),i.top-=Math.min(i.top,i.top+o>h&&h>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,n=this._getInst(e),s=this._get(n,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[s?"previousSibling":"nextSibling"];return[(i=t(e).offset()).left,i.top]},_hideDatepicker:function(e){var i,n,s,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),n=this._get(a,"duration"),s=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),n,s):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?n:null,s),i||s(),this._datepickerShowing=!1,(o=this._get(a,"onClose"))&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),n=t.datepicker._getInst(i[0]);(i[0].id===t.datepicker._mainDivId||0!==i.parents("#"+t.datepicker._mainDivId).length||i.hasClass(t.datepicker.markerClassName)||i.closest("."+t.datepicker._triggerClass).length||!t.datepicker._datepickerShowing||t.datepicker._inDialog&&t.blockUI)&&(!i.hasClass(t.datepicker.markerClassName)||t.datepicker._curInst===n)||t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,n){var s=t(e),o=this._getInst(s[0]);this._isDisabledDatepicker(s[0])||(this._adjustInstDate(o,i+("M"===n?this._get(o,"showCurrentAtPos"):0),n),this._updateDatepicker(o))},_gotoToday:function(e){var i,n=t(e),s=this._getInst(n[0]);this._get(s,"gotoCurrent")&&s.currentDay?(s.selectedDay=s.currentDay,s.drawMonth=s.selectedMonth=s.currentMonth,s.drawYear=s.selectedYear=s.currentYear):(i=new Date,s.selectedDay=i.getDate(),s.drawMonth=s.selectedMonth=i.getMonth(),s.drawYear=s.selectedYear=i.getFullYear()),this._notifyChange(s),this._adjustDate(n)},_selectMonthYear:function(e,i,n){var s=t(e),o=this._getInst(s[0]);o["selected"+("M"===n?"Month":"Year")]=o["draw"+("M"===n?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(s)},_selectDay:function(e,i,n,s){var o,a=t(e);t(s).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||((o=this._getInst(a[0])).selectedDay=o.currentDay=t("a",s).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=n,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var n,s=t(e),o=this._getInst(s[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),(n=this._get(o,"onSelect"))?n.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,n,s,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),n=this._getDate(e),s=this.formatDate(i,n,this._getFormatConfig(e)),t(o).val(s))},noWeekends:function(t){var e=t.getDay();return[e>0&&e<6,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,n){if(null==e||null==i)throw"Invalid arguments";if(""===(i="object"==typeof i?i.toString():i+""))return null;var s,o,a,r,l=0,h=(n?n.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof h?h:(new Date).getFullYear()%100+parseInt(h,10),u=(n?n.dayNamesShort:null)||this._defaults.dayNamesShort,d=(n?n.dayNames:null)||this._defaults.dayNames,p=(n?n.monthNamesShort:null)||this._defaults.monthNamesShort,f=(n?n.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,v=-1,b=-1,_=!1,y=function(t){var i=s+1<e.length&&e.charAt(s+1)===t;return i&&s++,i},w=function(t){var e=y(t),n="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,s=new RegExp("^\\d{"+("y"===t?n:1)+","+n+"}"),o=i.substring(l).match(s);if(!o)throw"Missing number at position "+l;return l+=o[0].length,parseInt(o[0],10)},x=function(e,n,s){var o=-1,a=t.map(y(e)?s:n,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var n=e[1];if(i.substr(l,n.length).toLowerCase()===n.toLowerCase())return o=e[0],l+=n.length,!1}),-1!==o)return o+1;throw"Unknown name at position "+l},C=function(){if(i.charAt(l)!==e.charAt(s))throw"Unexpected literal at position "+l;l++};for(s=0;s<e.length;s++)if(_)"'"!==e.charAt(s)||y("'")?C():_=!1;else switch(e.charAt(s)){case"d":v=w("d");break;case"D":x("D",u,d);break;case"o":b=w("o");break;case"m":m=w("m");break;case"M":m=x("M",p,f);break;case"y":g=w("y");break;case"@":g=(r=new Date(w("@"))).getFullYear(),m=r.getMonth()+1,v=r.getDate();break;case"!":g=(r=new Date((w("!")-this._ticksTo1970)/1e4)).getFullYear(),m=r.getMonth()+1,v=r.getDate();break;case"'":y("'")?C():_=!0;break;default:C()}if(l<i.length&&(a=i.substr(l),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():g<100&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(g<=c?0:-100)),b>-1)for(m=1,v=b;!(v<=(o=this._getDaysInMonth(g,m-1)));)m++,v-=o;if((r=this._daylightSavingAdjust(new Date(g,m-1,v))).getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==v)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*60*60*1e7,formatDate:function(t,e,i){if(!e)return"";var n,s=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,l=function(e){var i=n+1<t.length&&t.charAt(n+1)===e;return i&&n++,i},h=function(t,e,i){var n=""+e;if(l(t))for(;n.length<i;)n="0"+n;return n},c=function(t,e,i,n){return l(t)?n[e]:i[e]},u="",d=!1;if(e)for(n=0;n<t.length;n++)if(d)"'"!==t.charAt(n)||l("'")?u+=t.charAt(n):d=!1;else switch(t.charAt(n)){case"d":u+=h("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),s,o);break;case"o":u+=h("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=h("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=l("y")?e.getFullYear():(e.getFullYear()%100<10?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":l("'")?u+="'":d=!0;break;default:u+=t.charAt(n)}return u},_possibleChars:function(t){var e,i="",n=!1,s=function(i){var n=e+1<t.length&&t.charAt(e+1)===i;return n&&e++,n};for(e=0;e<t.length;e++)if(n)"'"!==t.charAt(e)||s("'")?i+=t.charAt(e):n=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":s("'")?i+="'":n=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),n=t.lastVal=t.input?t.input.val():null,s=this._getDefaultDate(t),o=s,a=this._getFormatConfig(t);try{o=this.parseDate(i,n,a)||s}catch(t){n=e?"":n}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=n?o.getDate():0,t.currentMonth=n?o.getMonth():0,t.currentYear=n?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,n){var s=null==i||""===i?n:"string"==typeof i?function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(t){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,s=n.getFullYear(),o=n.getMonth(),a=n.getDate(),r=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=r.exec(i);l;){switch(l[2]||"d"){case"d":case"D":a+=parseInt(l[1],10);break;case"w":case"W":a+=7*parseInt(l[1],10);break;case"m":case"M":o+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(s,o));break;case"y":case"Y":s+=parseInt(l[1],10),a=Math.min(a,t.datepicker._getDaysInMonth(s,o))}l=r.exec(i)}return new Date(s,o,a)}(i):"number"==typeof i?isNaN(i)?n:function(t){var e=new Date;return e.setDate(e.getDate()+t),e}(i):new Date(i.getTime());return(s=s&&"Invalid Date"===s.toString()?n:s)&&(s.setHours(0),s.setMinutes(0),s.setSeconds(0),s.setMilliseconds(0)),this._daylightSavingAdjust(s)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var n=!e,s=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),s===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(n?"":this._formatDate(t))},_getDate:function(t){return!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay))},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),n="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(n,-i,"M")},next:function(){t.datepicker._adjustDate(n,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(n)},selectDay:function(){return t.datepicker._selectDay(n,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(n,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(n,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,n,s,o,a,r,l,h,c,u,d,p,f,g,m,v,b,_,y,w,x,C,k,T,D,S,I,P,E,M,A,O,N,H,z,L,W,R,$=new Date,j=this._daylightSavingAdjust(new Date($.getFullYear(),$.getMonth(),$.getDate())),F=this._get(t,"isRTL"),B=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),U=this._get(t,"navigationAsDateFormat"),Y=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),K=this._get(t,"stepMonths"),X=1!==Y[0]||1!==Y[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,tt=t.drawYear;if(Z<0&&(Z+=12,tt--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-Y[0]*Y[1]+1,J.getDate())),e=Q&&e<Q?Q:e;this._daylightSavingAdjust(new Date(tt,Z,1))>e;)--Z<0&&(Z=11,tt--);for(t.drawMonth=Z,t.drawYear=tt,i=this._get(t,"prevText"),i=U?this.formatDate(i,this._daylightSavingAdjust(new Date(tt,Z-K,1)),this._getFormatConfig(t)):i,n=this._canAdjustMonth(t,-1,tt,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"e":"w")+"'>"+i+"</span></a>",s=this._get(t,"nextText"),s=U?this.formatDate(s,this._daylightSavingAdjust(new Date(tt,Z+K,1)),this._getFormatConfig(t)):s,o=this._canAdjustMonth(t,1,tt,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+s+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"w":"e")+"'>"+s+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+s+"'><span class='ui-icon ui-icon-circle-triangle-"+(F?"w":"e")+"'>"+s+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:j,a=U?this.formatDate(a,r,this._getFormatConfig(t)):a,l=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",h=B?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(F?l:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(F?"":l)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),v=this._get(t,"showOtherMonths"),b=this._get(t,"selectOtherMonths"),_=this._getDefaultDate(t),y="",x=0;x<Y[0];x++){for(C="",this.maxRows=4,k=0;k<Y[1];k++){if(T=this._daylightSavingAdjust(new Date(tt,Z,t.selectedDay)),D=" ui-corner-all",S="",X){if(S+="<div class='ui-datepicker-group",Y[1]>1)switch(k){case 0:S+=" ui-datepicker-group-first",D=" ui-corner-"+(F?"right":"left");break;case Y[1]-1:S+=" ui-datepicker-group-last",D=" ui-corner-"+(F?"left":"right");break;default:S+=" ui-datepicker-group-middle",D=""}S+="'>"}for(S+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+D+"'>"+(/all|left/.test(D)&&0===x?F?o:n:"")+(/all|right/.test(D)&&0===x?F?n:o:"")+this._generateMonthYearHeader(t,Z,tt,Q,J,x>0||k>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead><tr>",I=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;w<7;w++)I+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+"><span title='"+d[P=(w+c)%7]+"'>"+p[P]+"</span></th>";for(S+=I+"</tr></thead><tbody>",E=this._getDaysInMonth(tt,Z),tt===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,E)),M=(this._getFirstDayOfMonth(tt,Z)-c+7)%7,A=Math.ceil((M+E)/7),O=X&&this.maxRows>A?this.maxRows:A,this.maxRows=O,N=this._daylightSavingAdjust(new Date(tt,Z,1-M)),H=0;H<O;H++){for(S+="<tr>",z=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(N)+"</td>":"",w=0;w<7;w++)L=m?m.apply(t.input?t.input[0]:null,[N]):[!0,""],R=(W=N.getMonth()!==Z)&&!b||!L[0]||Q&&N<Q||J&&N>J,z+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(W?" ui-datepicker-other-month":"")+(N.getTime()===T.getTime()&&Z===t.selectedMonth&&t._keyEvent||_.getTime()===N.getTime()&&_.getTime()===T.getTime()?" "+this._dayOverClass:"")+(R?" "+this._unselectableClass+" ui-state-disabled":"")+(W&&!v?"":" "+L[1]+(N.getTime()===G.getTime()?" "+this._currentClass:"")+(N.getTime()===j.getTime()?" ui-datepicker-today":""))+"'"+(W&&!v||!L[2]?"":" title='"+L[2].replace(/'/g,"&#39;")+"'")+(R?"":" data-handler='selectDay' data-event='click' data-month='"+N.getMonth()+"' data-year='"+N.getFullYear()+"'")+">"+(W&&!v?"&#xa0;":R?"<span class='ui-state-default'>"+N.getDate()+"</span>":"<a class='ui-state-default"+(N.getTime()===j.getTime()?" ui-state-highlight":"")+(N.getTime()===G.getTime()?" ui-state-active":"")+(W?" ui-priority-secondary":"")+"' href='#'>"+N.getDate()+"</a>")+"</td>",N.setDate(N.getDate()+1),N=this._daylightSavingAdjust(N);S+=z+"</tr>"}++Z>11&&(Z=0,tt++),C+=S+="</tbody></table>"+(X?"</div>"+(Y[0]>0&&k===Y[1]-1?"<div class='ui-datepicker-row-break'></div>":""):"")}y+=C}return y+=h,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,n,s,o,a,r){var l,h,c,u,d,p,f,g,m=this._get(t,"changeMonth"),v=this._get(t,"changeYear"),b=this._get(t,"showMonthAfterYear"),_="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(l=n&&n.getFullYear()===i,h=s&&s.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;c<12;c++)(!l||c>=n.getMonth())&&(!h||c<=s.getMonth())&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(b||(_+=y+(!o&&m&&v?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!v)_+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),f=(p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e})(u[0]),g=Math.max(f,p(u[1]||"")),f=n?Math.max(f,n.getFullYear()):f,g=s?Math.min(g,s.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";f<=g;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",_+=t.yearshtml,t.yearshtml=null}return _+=this._get(t,"yearSuffix"),b&&(_+=(!o&&m&&v?"":"&#xa0;")+y),_+"</div>"},_adjustInstDate:function(t,e,i){var n=t.selectedYear+("Y"===i?e:0),s=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(n,s))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(n,s,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),"M"!==i&&"Y"!==i||this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),n=this._getMinMaxDate(t,"max"),s=i&&e<i?i:e;return n&&s>n?n:s},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,n){var s=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,n+(e<0?e:s[0]*s[1]),1));return e<0&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,n,s=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,l=this._get(t,"yearRange");return l&&(i=l.split(":"),n=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=n),i[1].match(/[+\-].*/)&&(r+=n)),(!s||e.getTime()>=s.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||e.getFullYear()<=r)},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return{shortYearCutoff:e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,n){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var s=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(n,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),s,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new e,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1";var d=(t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),!1);t(document).on("mouseup",function(){d=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){if(!0===t.data(i.target,e.widgetName+".preventClickEvent"))return t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!d){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,n=1===e.which,s=!("string"!=typeof this.options.cancel||!e.target.nodeName)&&t(e.target).closest(this.options.cancel).length;return!(n&&!s&&this._mouseCapture(e)&&(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(e),!this._mouseStarted)?(e.preventDefault(),0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),d=!0,0)))}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||document.documentMode<9)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=!1!==this._mouseStart(this._mouseDownEvent,e),this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,d=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,n){var s,o=t.ui[e].prototype;for(s in n)o.plugins[s]=o.plugins[s]||[],o.plugins[s].push([i,n[s]])},call:function(t,e,i,n){var s,o=t.plugins[e];if(o&&(n||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(s=0;s<o.length;s++)t.options[o[s][0]]&&o[s][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){(this.helper||this.element).is(".ui-draggable-dragging")?this.destroyOnClear=!0:(this._removeHandleClassName(),this._mouseDestroy())},_mouseCapture:function(e){var i=this.options;return!(this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0||(this.handle=this._getHandle(e),!this.handle||(this._blurActiveElement(e),this._blockFrames(!0===i.iframeFix?"iframe":i.iframeFix),0)))},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]);t(e.target).closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),!1===this._trigger("start",e)?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var n=this._uiHash();if(!1===this._trigger("drag",e,n))return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=n.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,n=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(n=t.ui.ddmanager.drop(this,e)),
this.dropped&&(n=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!n||"valid"===this.options.revert&&n||!0===this.options.revert||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,n)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){!1!==i._trigger("stop",e)&&i._clear()}):!1!==this._trigger("stop",e)&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return!this.options.handle||!!t(e.target).closest(this.element.find(this.options.handle)).length},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,n=t.isFunction(i.helper),s=n?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return s.parents("body").length||s.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),n&&s[0]===this.element[0]&&this._setPositionRelative(),s[0]===this.element[0]||/(fixed|absolute)/.test(s.css("position"))||s.css("position","absolute"),s},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,n,s=this.options,o=this.document[0];return this.relativeContainer=null,s.containment?"window"===s.containment?void(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):"document"===s.containment?void(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]):s.containment.constructor===Array?void(this.containment=s.containment):("parent"===s.containment&&(s.containment=this.helper[0].parentNode),void((n=(i=t(s.containment))[0])&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(n.scrollWidth,n.offsetWidth):n.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(n.scrollHeight,n.offsetHeight):n.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i))):void(this.containment=null)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,n=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:n?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:n?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,n,s,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),l=t.pageX,h=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(n=this.relativeContainer.offset(),i=[this.containment[0]+n.left,this.containment[1]+n.top,this.containment[2]+n.left,this.containment[3]+n.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(l=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(h=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(l=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(h=i[3]+this.offset.click.top)),a.grid&&(s=a.grid[1]?this.originalPageY+Math.round((h-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,h=i?s-this.offset.click.top>=i[1]||s-this.offset.click.top>i[3]?s:s-this.offset.click.top>=i[1]?s-a.grid[1]:s+a.grid[1]:s,o=a.grid[0]?this.originalPageX+Math.round((l-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,l=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(l=this.originalPageX),"x"===a.axis&&(h=this.originalPageY)),{top:h-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:l-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,n){return n=n||this._uiHash(),t.ui.plugin.call(this,e,[i,n,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),n.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,n)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,n){var s=t.extend({},i,{item:n.element});n.sortables=[],t(n.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(n.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,s))})},stop:function(e,i,n){var s=t.extend({},i,{item:n.element});n.cancelHelperRemoval=!1,t.each(n.sortables,function(){var t=this;t.isOver?(t.isOver=0,n.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,s))})},drag:function(e,i,n){t.each(n.sortables,function(){var s=!1,o=this;o.positionAbs=n.positionAbs,o.helperProportions=n.helperProportions,o.offset.click=n.offset.click,o._intersectsWith(o.containerCache)&&(s=!0,t.each(n.sortables,function(){return this.positionAbs=n.positionAbs,this.helperProportions=n.helperProportions,this.offset.click=n.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(s=!1),s})),s?(o.isOver||(o.isOver=1,n._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=n.offset.click.top,o.offset.click.left=n.offset.click.left,o.offset.parent.left-=n.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=n.offset.parent.top-o.offset.parent.top,n._trigger("toSortable",e),n.dropped=o.element,t.each(n.sortables,function(){this.refreshPositions()}),n.currentItem=n.element,o.fromOutside=n),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(n._parent),n._refreshOffsets(e),i.position=n._generatePosition(e,!0),n._trigger("fromSortable",e),n.dropped=!1,t.each(n.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,n){var s=t("body"),o=n.options;s.css("cursor")&&(o._cursor=s.css("cursor")),s.css("cursor",o.cursor)},stop:function(e,i,n){var s=n.options;s._cursor&&t("body").css("cursor",s._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,n){var s=t(i.helper),o=n.options;s.css("opacity")&&(o._opacity=s.css("opacity")),s.css("opacity",o.opacity)},stop:function(e,i,n){var s=n.options;s._opacity&&t(i.helper).css("opacity",s._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,n){var s=n.options,o=!1,a=n.scrollParentNotHidden[0],r=n.document[0];a!==r&&"HTML"!==a.tagName?(s.axis&&"x"===s.axis||(n.overflowOffset.top+a.offsetHeight-e.pageY<s.scrollSensitivity?a.scrollTop=o=a.scrollTop+s.scrollSpeed:e.pageY-n.overflowOffset.top<s.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-s.scrollSpeed)),s.axis&&"y"===s.axis||(n.overflowOffset.left+a.offsetWidth-e.pageX<s.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+s.scrollSpeed:e.pageX-n.overflowOffset.left<s.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-s.scrollSpeed))):(s.axis&&"x"===s.axis||(e.pageY-t(r).scrollTop()<s.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-s.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<s.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+s.scrollSpeed))),s.axis&&"y"===s.axis||(e.pageX-t(r).scrollLeft()<s.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-s.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<s.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+s.scrollSpeed)))),!1!==o&&t.ui.ddmanager&&!s.dropBehaviour&&t.ui.ddmanager.prepareOffsets(n,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,n){var s=n.options;n.snapElements=[],t(s.snap.constructor!==String?s.snap.items||":data(ui-draggable)":s.snap).each(function(){var e=t(this),i=e.offset();this!==n.element[0]&&n.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,n){var s,o,a,r,l,h,c,u,d,p,f=n.options,g=f.snapTolerance,m=i.offset.left,v=m+n.helperProportions.width,b=i.offset.top,_=b+n.helperProportions.height;for(d=n.snapElements.length-1;d>=0;d--)h=(l=n.snapElements[d].left-n.margins.left)+n.snapElements[d].width,u=(c=n.snapElements[d].top-n.margins.top)+n.snapElements[d].height,v<l-g||m>h+g||_<c-g||b>u+g||!t.contains(n.snapElements[d].item.ownerDocument,n.snapElements[d].item)?(n.snapElements[d].snapping&&n.options.snap.release&&n.options.snap.release.call(n.element,e,t.extend(n._uiHash(),{snapItem:n.snapElements[d].item})),n.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(s=Math.abs(c-_)<=g,o=Math.abs(u-b)<=g,a=Math.abs(l-v)<=g,r=Math.abs(h-m)<=g,s&&(i.position.top=n._convertPositionTo("relative",{top:c-n.helperProportions.height,left:0}).top),o&&(i.position.top=n._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=n._convertPositionTo("relative",{top:0,left:l-n.helperProportions.width}).left),r&&(i.position.left=n._convertPositionTo("relative",{top:0,left:h}).left)),p=s||o||a||r,"outer"!==f.snapMode&&(s=Math.abs(c-b)<=g,o=Math.abs(u-_)<=g,a=Math.abs(l-m)<=g,r=Math.abs(h-v)<=g,s&&(i.position.top=n._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=n._convertPositionTo("relative",{top:u-n.helperProportions.height,left:0}).top),a&&(i.position.left=n._convertPositionTo("relative",{top:0,left:l}).left),r&&(i.position.left=n._convertPositionTo("relative",{top:0,left:h-n.helperProportions.width}).left)),!n.snapElements[d].snapping&&(s||o||a||r||p)&&n.options.snap.snap&&n.options.snap.snap.call(n.element,e,t.extend(n._uiHash(),{snapItem:n.snapElements[d].item})),n.snapElements[d].snapping=s||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,n){var s,o=n.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(s=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",s+e)}),this.css("zIndex",s+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,n){var s=t(i.helper),o=n.options;s.css("zIndex")&&(o._zIndex=s.css("zIndex")),s.css("zIndex",o.zIndex)},stop:function(e,i,n){var s=n.options;s._zIndex&&t(i.helper).css("zIndex",s._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var n=i&&"left"===i?"scrollLeft":"scrollTop",s=!1;return e[n]>0||(e[n]=1,s=e[n]>0,e[n]=0,s)},_create:function(){var e,i=this.options,n=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(n._removeClass("ui-resizable-autohide"),n._handles.show())}).on("mouseleave",function(){i.disabled||n.resizing||(n._addClass("ui-resizable-autohide"),n._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles()}},_setupHandles:function(){var e,i,n,s,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),n=this.handles.split(","),this.handles={},i=0;i<n.length;i++)s="ui-resizable-"+(e=t.trim(n[i])),o=t("<div>"),this._addClass(o,"ui-resizable-handle "+s),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,n,s,o;for(i in e=e||this.element,this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(n=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?n.outerHeight():n.outerWidth(),s=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(s,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,n,s=!1;for(i in this.handles)((n=t(this.handles[i])[0])===e.target||t.contains(n,e.target))&&(s=!0);return!this.options.disabled&&s},_mouseStart:function(e){var i,n,s,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),n=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,n+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:n},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:n},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,n,s=this.originalMousePosition,o=this.axis,a=e.pageX-s.left||0,r=e.pageY-s.top||0,l=this._change[o];return this._updatePrevProperties(),!!l&&(i=l.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),n=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(n)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1)},_mouseStop:function(e){this.resizing=!1;var i,n,s,o,a,r,l,h=this.options,c=this;return this._helper&&(s=(n=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=n?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-s},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,l=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,h.animate||this.element.css(t.extend(a,{top:l,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!h.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,n,s,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,s=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),n>o.minHeight&&(o.minHeight=n),i<o.maxWidth&&(o.maxWidth=i),s<o.maxHeight&&(o.maxHeight=s)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,n=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===n&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===n&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,n=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,s=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,l=this.originalPosition.top+this.originalSize.height,h=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),n&&(t.width=e.maxWidth),s&&(t.height=e.maxHeight),o&&h&&(t.left=r-e.minWidth),n&&h&&(t.left=r-e.maxWidth),a&&c&&(t.top=l-e.minHeight),s&&c&&(t.top=l-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],n=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],s=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(n[e])||0,i[e]+=parseFloat(s[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e<this._proportionallyResizeElements.length;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var n=this.originalSize;return{top:this.originalPosition.top+i,height:n.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,n){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,n]))},sw:function(e,i,n){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,n]))},ne:function(e,i,n){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,n]))},nw:function(e,i,n){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,n]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),n=i.options,s=i._proportionallyResizeElements,o=s.length&&/textarea/i.test(s[0].nodeName),a=o&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,l={width:i.size.width-r,height:i.size.height-a},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(l,c&&h?{top:c,left:h}:{}),{duration:n.animateDuration,easing:n.animateEasing,step:function(){var n={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&t(s[0]).css({width:n.width,height:n.height}),i._updateCache(n),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,n,s,o,a,r,l=t(this).resizable("instance"),h=l.options,c=l.element,u=h.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(l.containerElement=t(d),/document/.test(u)||u===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,n){i[t]=l._num(e.css("padding"+n))}),l.containerOffset=e.offset(),l.containerPosition=e.position(),l.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},n=l.containerOffset,s=l.containerSize.height,o=l.containerSize.width,a=l._hasScroll(d,"left")?d.scrollWidth:o,r=l._hasScroll(d)?d.scrollHeight:s,l.parentData={element:d,left:n.left,top:n.top,width:a,height:r}))},resize:function(e){var i,n,s,o,a=t(this).resizable("instance"),r=a.options,l=a.containerOffset,h=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=l),h.left<(a._helper?l.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-l.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?l.left:0),h.top<(a._helper?l.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-l.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?l.top:0),s=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),s&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-l.left)),n=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-l.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),n+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-n,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,n=e.containerOffset,s=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),l=a.outerWidth()-e.sizeDiff.width,h=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-s.left-n.left,width:l,height:h}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-s.left-n.left,width:l,height:h})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance").options;t(e.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var n=t(this).resizable("instance"),s=n.options,o=n.originalSize,a=n.originalPosition,r={height:n.size.height-o.height||0,width:n.size.width-o.width||0,top:n.position.top-a.top||0,left:n.position.left-a.left||0};t(s.alsoResize).each(function(){var e=t(this),n=t(this).data("ui-resizable-alsoresize"),s={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(n[e]||0)+(r[e]||0);i&&i>=0&&(s[e]=i||null)}),e.css(s)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),!1!==t.uiBackCompat&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){
var e,i=t(this).resizable("instance"),n=i.options,s=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,l="number"==typeof n.grid?[n.grid,n.grid]:n.grid,h=l[0]||1,c=l[1]||1,u=Math.round((s.width-o.width)/h)*h,d=Math.round((s.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=n.maxWidth&&n.maxWidth<p,m=n.maxHeight&&n.maxHeight<f,v=n.minWidth&&n.minWidth>p,b=n.minHeight&&n.minHeight>f;n.grid=l,v&&(p+=h),b&&(f+=c),g&&(p-=h),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((f-c<=0||p-h<=0)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-h>0?(i.size.width=p,i.position.left=a.left-u):(p=h-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;i<0&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),(t=e.parent.children().eq(e.index)).length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&!1!==this._trigger("beforeClose",e)&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var n=!1,s=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,s);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),n=!0),n&&!i&&this._trigger("focus",e),n},open:function(){var e=this;this._isOpen?this._moveToTop()&&this._focusTabbable():(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"))},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]);this.uiDialog[0]===e||t.contains(this.uiDialog[0],e)||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),void this.close(e);if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),n=i.filter(":first"),s=i.filter(":last");e.target!==s[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==n[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){s.trigger("focus")}),e.preventDefault()):(this._delay(function(){n.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?this._removeClass(this.uiDialog,"ui-dialog-buttons"):(t.each(i,function(i,n){var s,o;n=t.isFunction(n)?{click:n,text:i}:n,n=t.extend({type:"button"},n),s=n.click,o={icon:n.icon,iconPosition:n.iconPosition,showLabel:n.showLabel,icons:n.icons,text:n.text},delete n.click,delete n.icon,delete n.iconPosition,delete n.showLabel,delete n.icons,"boolean"==typeof n.text&&delete n.text,t("<button></button>",n).button(o).appendTo(e.uiButtonSet).on("click",function(){s.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog))},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,n=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(n,s){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",n,e(s))},drag:function(t,n){i._trigger("drag",t,e(n))},stop:function(s,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();n.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",s,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,n=this.options,s=n.resizable,o=this.uiDialog.css("position"),a="string"==typeof s?s:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:n.maxWidth,maxHeight:n.maxHeight,minWidth:n.minWidth,minHeight:this._minHeight(),handles:a,start:function(n,s){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",n,e(s))},resize:function(t,n){i._trigger("resize",t,e(n))},stop:function(s,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),l=a.top-i.document.scrollTop();n.height=i.uiDialog.height(),n.width=i.uiDialog.width(),n.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" top"+(l>=0?"+":"")+l,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",s,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,n=!1,s={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(n=!0),t in i.resizableRelatedOptions&&(s[t]=e)}),n&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",s)},_setOption:function(e,i){var n,s,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&((n=o.is(":data(ui-draggable)"))&&!i&&o.draggable("destroy"),!n&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&((s=o.is(":data(ui-resizable)"))&&!i&&o.resizable("destroy"),s&&"string"==typeof i&&o.resizable("option","handles",i),s||!1===i||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,n=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),n.minWidth>n.width&&(n.width=n.minWidth),t=this.uiDialog.css({height:"auto",width:n.width}).outerHeight(),e=Math.max(0,n.minHeight-t),i="number"==typeof n.maxHeight?Math.max(0,n.maxHeight-t):"none","auto"===n.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,n.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return!!t(e.target).closest(".ui-dialog").length||!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),!1!==t.uiBackCompat&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,n=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(n)?n:function(t){return t.is(n)},this.proportions=function(){if(!arguments.length)return e||(e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight});e=arguments[0]},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;e<t.length;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var n=t.ui.ddmanager.droppables[this.options.scope];this._splice(n),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var n=i||t.ui.ddmanager.current,s=!1;return!(!n||(n.currentItem||n.element)[0]===this.element[0])&&(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");if(i.options.greedy&&!i.options.disabled&&i.options.scope===n.options.scope&&i.accept.call(i.element[0],n.currentItem||n.element)&&p(n,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e))return s=!0,!1}),!s&&!!this.accept.call(this.element[0],n.currentItem||n.element)&&(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(n)),this.element))},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var p=t.ui.intersect=function(){function t(t,e,i){return t>=e&&t<e+i}return function(e,i,n,s){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,l=a+e.helperProportions.height,h=i.offset.left,c=i.offset.top,u=h+i.proportions().width,d=c+i.proportions().height;switch(n){case"fit":return h<=o&&r<=u&&c<=a&&l<=d;case"intersect":return h<o+e.helperProportions.width/2&&r-e.helperProportions.width/2<u&&c<a+e.helperProportions.height/2&&l-e.helperProportions.height/2<d;case"pointer":return t(s.pageY,c,i.proportions().height)&&t(s.pageX,h,i.proportions().width);case"touch":return(a>=c&&a<=d||l>=c&&l<=d||a<c&&l>d)&&(o>=h&&o<=u||r>=h&&r<=u||o<h&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{default:[]},prepareOffsets:function(e,i){var n,s,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(n=0;n<o.length;n++)if(!(o[n].options.disabled||e&&!o[n].accept.call(o[n].element[0],e.currentItem||e.element))){for(s=0;s<r.length;s++)if(r[s]===o[n].element[0]){o[n].proportions().height=0;continue t}o[n].visible="none"!==o[n].element.css("display"),o[n].visible&&("mousedown"===a&&o[n]._activate.call(o[n],i),o[n].offset=o[n].element.offset(),o[n].proportions({width:o[n].element[0].offsetWidth,height:o[n].element[0].offsetHeight}))}},drop:function(e,i){var n=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&p(e,this,this.options.tolerance,i)&&(n=this._drop.call(this,i)||n),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),n},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var n,s,o,a=p(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(s=this.options.scope,(o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===s})).length&&((n=t(o[0]).droppable("instance")).greedyChild="isover"===r)),n&&"isover"===r&&(n.isover=!1,n.isout=!0,n._out.call(n,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),n&&"isout"===r&&(n.isout=!1,n.isover=!0,n._over.call(n,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},!1!==t.uiBackCompat&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){if(void 0===t)return this.options.value;this.options.value=this._constrainedValue(t),this._refreshValue()},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=!1===t,"number"!=typeof t&&(t=0),!this.indeterminate&&Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),n=i.offset(),s={left:n.left-e.elementPos.left,top:n.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:s.left,top:s.top,right:s.left+i.outerWidth(),bottom:s.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,n=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(n.filter,this.element[0]),this._trigger("start",e),t(n.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),n.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var n=t.data(this,"selectable-item");n.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(n.$element,"ui-selected"),n.selected=!1,i._addClass(n.$element,"ui-unselecting"),n.unselecting=!0,i._trigger("unselecting",e,{unselecting:n.element}))}),t(e.target).parents().addBack().each(function(){var n,s=t.data(this,"selectable-item");if(s)return n=!e.metaKey&&!e.ctrlKey||!s.$element.hasClass("ui-selected"),i._removeClass(s.$element,n?"ui-unselecting":"ui-selected")._addClass(s.$element,n?"ui-selecting":"ui-unselecting"),s.unselecting=!n,s.selecting=n,s.selected=n,n?i._trigger("selecting",e,{selecting:s.element}):i._trigger("unselecting",e,{unselecting:s.element}),!1}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,n=this,s=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,l=e.pageY;return o>r&&(i=r,r=o,o=i),a>l&&(i=l,l=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:l-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),h=!1,c={};i&&i.element!==n.element[0]&&(c.left=i.left+n.elementPos.left,c.right=i.right+n.elementPos.left,c.top=i.top+n.elementPos.top,c.bottom=i.bottom+n.elementPos.top,"touch"===s.tolerance?h=!(c.left>r||c.right<o||c.top>l||c.bottom<a):"fit"===s.tolerance&&(h=c.left>o&&c.right<r&&c.top>a&&c.bottom<l),h?(i.selected&&(n._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(n._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(n._addClass(i.$element,"ui-selecting"),i.selecting=!0,n._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(n._removeClass(i.$element,"ui-selecting"),i.selecting=!1,n._addClass(i.$element,"ui-selected"),i.selected=!0):(n._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(n._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),n._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(n._removeClass(i.$element,"ui-selected"),i.selected=!1,n._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,n._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var n=t.data(this,"selectable-item");i._removeClass(n.$element,"ui-unselecting"),n.unselecting=!1,n.startselected=!1,i._trigger("unselected",e,{unselected:n.element})}),t(".ui-selecting",this.element[0]).each(function(){var n=t.data(this,"selectable-item");i._removeClass(n.$element,"ui-selecting")._addClass(n.$element,"ui-selected"),n.selecting=!1,n.selected=!0,n.startselected=!0,i._trigger("selected",e,{selected:n.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,n=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(n).appendTo(this.button),!1!==this.options.width&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var n=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&n.index!==e.focusIndex&&(e._trigger("focus",t,{item:n}),e.isOpen||e._select(n,t)),e.focusIndex=n.index,e.button.attr("aria-activedescendant",e.menuItems.eq(n.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var n=this,s="";t.each(i,function(i,o){var a;o.optgroup!==s&&(a=t("<li>",{text:o.optgroup}),n._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),s=o.optgroup),n._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var n=t("<li>"),s=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(n,null,"ui-state-disabled"),this._setText(s,i.label),n.append(s).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,n,s=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),s+=":not(.ui-state-disabled)"),(n="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](s).eq(-1):i[t+"All"](s).eq(0)).length&&this.menuInstance.focus(e,n)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?((t=window.getSelection()).removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection()).rangeCount&&(this.range=t.getRangeAt(0)):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:
e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;!1!==t?(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t)):this.button.css("width","")},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,n=[];e.each(function(e,s){n.push(i._parseOption(t(s),e))}),this.items=n},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,n=this.options,s=this.element.find(".ui-slider-handle"),o=[];for(i=n.values&&n.values.length||1,s.length>i&&(s.slice(i).remove(),s=s.slice(0,i)),e=s.length;e<i;e++)o.push("<span tabindex='0'></span>");this.handles=s.add(t(o.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(!0===e.range&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),"min"!==e.range&&"max"!==e.range||this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,n,s,o,a,r,l,h=this,c=this.options;return!c.disabled&&(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},n=this._normValueFromMouse(i),s=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(n-h.values(e));(s>i||s===i&&(e===h._lastChangedValue||h.values(e)===c.min))&&(s=i,o=t(this),a=e)}),!1!==this._start(e,a)&&(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),r=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-r.left-o.width()/2,top:e.pageY-r.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,n),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,n,s,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),(n=i/e)>1&&(n=1),n<0&&(n=0),"vertical"===this.orientation&&(n=1-n),s=this._valueMax()-this._valueMin(),o=this._valueMin()+n*s,this._trimAlignValue(o)},_uiHash:function(t,e,i){var n={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(n.value=void 0!==e?e:this.values(t),n.values=i||this.values()),n},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var n,s=this.value(),o=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),s=this.values(e),2===this.options.values.length&&!0===this.options.range&&(i=0===e?Math.min(n,i):Math.max(n,i)),o[e]=i),i!==s&&!1!==this._trigger("slide",t,this._uiHash(e,i,o))&&(this._hasMultipleValues()?this.values(e,i):this.value(i))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),void this._change(null,0)):this._value()},values:function(e,i){var n,s,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),void this._change(null,e);if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(n=this.options.values,s=arguments[0],o=0;o<n.length;o+=1)n[o]=this._trimAlignValue(s[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var n,s=0;switch("range"===e&&!0===this.options.range&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(s=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),n=s-1;n>=0;n--)this._change(null,n);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return this._trimAlignValue(t)},_values:function(t){var e,i,n;if(arguments.length)return e=this.options.values[t],this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),n=0;n<i.length;n+=1)i[n]=this._trimAlignValue(i[n]);return i}return[]},_trimAlignValue:function(t){if(t<=this._valueMin())return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,n=t-i;return 2*Math.abs(i)>=e&&(n+=i>0?e:-e),parseFloat(n.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step;(t=Math.round((t-e)/i)*i+e)>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,n,s,o,a=this.options.range,r=this.options,l=this,h=!this._animateOff&&r.animate,c={};this._hasMultipleValues()?this.handles.each(function(n){i=(l.values(n)-l._valueMin())/(l._valueMax()-l._valueMin())*100,c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),!0===l.options.range&&("horizontal"===l.orientation?(0===n&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===n&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===n&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===n&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(n=this.value(),s=this._valueMin(),o=this._valueMax(),i=o!==s?(n-s)/(o-s)*100:0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,n,s,o=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),!1===this._start(e,o)))return}switch(s=this.options.step,i=n=this._hasMultipleValues()?this.values(o):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(i+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(i-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(i===this._valueMax())return;n=this._trimAlignValue(i+s);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i===this._valueMin())return;n=this._trimAlignValue(i-s)}this._slide(e,o,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&t<e+i},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var n=null,s=!1,o=this;return!(this.reverting||this.options.disabled||"static"===this.options.type||(this._refreshItems(e),t(e.target).parents().each(function(){if(t.data(this,o.widgetName+"-item")===o)return n=t(this),!1}),t.data(e.target,o.widgetName+"-item")===o&&(n=t(e.target)),!n||this.options.handle&&!i&&(t(this.options.handle,n).find("*").addBack().each(function(){this===e.target&&(s=!0)}),!s)||(this.currentItem=n,this._removeCurrentsFromItems(),0)))},_mouseStart:function(e,i,n){var s,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!n)for(s=this.containers.length-1;s>=0;s--)this.containers[s]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,n,s,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),!1!==r&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=(n=this.items[i]).item[0],(o=this._intersectsWithPointer(n))&&n.instance===this.currentContainer&&!(s===this.currentItem[0]||this.placeholder[1===o?"next":"prev"]()[0]===s||t.contains(this.placeholder[0],s)||"semi-dynamic"===this.options.type&&t.contains(this.element[0],s))){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(n))break;this._rearrange(e,n),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var n=this,s=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=s.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=s.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){n._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),n=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&n.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!n.length&&e.key&&n.push(e.key+"="),n.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),n=[];return e=e||{},i.each(function(){n.push(t(e.item||this).attr(e.attribute||"id")||"")}),n},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,n=this.positionAbs.top,s=n+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,l=r+t.height,h=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||n+h>r&&n+h<l,d="y"===this.options.axis||e+c>o&&e+c<a,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:o<e+this.helperProportions.width/2&&i-this.helperProportions.width/2<a&&r<n+this.helperProportions.height/2&&s-this.helperProportions.height/2<l},_intersectsWithPointer:function(t){var e,i,n="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),s="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width);return!(!n||!s)&&(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1))},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),n=this._getDragVerticalDirection(),s=this._getDragHorizontalDirection();return this.floating&&s?"right"===s&&i||"left"===s&&!i:n&&("down"===n&&e||"up"===n&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var n,s,o,a,r=[],l=[],h=this._connectWith();if(h&&e)for(n=h.length-1;n>=0;n--)for(s=(o=t(h[n],this.document[0])).length-1;s>=0;s--)(a=t.data(o[s],this.widgetFullName))&&a!==this&&!a.options.disabled&&l.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(l.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),n=l.length-1;n>=0;n--)l[n][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;i<e.length;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,n,s,o,a,r,l,h,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=(s=t(d[i],this.document[0])).length-1;n>=0;n--)(o=t.data(s[n],this.widgetFullName))&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],n=0,h=(r=u[i][0]).length;n<h;n++)(l=t(r[n])).data(this.widgetName+"-item",a),c.push({item:l,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){var i,n,s,o;for(this.floating=!!this.items.length&&("x"===this.options.axis||this._isFloating(this.items[0].item)),this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset()),i=this.items.length-1;i>=0;i--)(n=this.items[i]).instance!==this.currentContainer&&this.currentContainer&&n.item[0]!==this.currentItem[0]||(s=this.options.toleranceElement?t(this.options.toleranceElement,n.item):n.item,e||(n.width=s.outerWidth(),n.height=s.outerHeight()),o=s.offset(),n.left=o.left,n.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){var i,n=(e=e||this).options;n.placeholder&&n.placeholder.constructor!==String||(i=n.placeholder,n.placeholder={element:function(){var n=e.currentItem[0].nodeName.toLowerCase(),s=t("<"+n+">",e.document[0]);return e._addClass(s,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(s,"ui-sortable-helper"),"tbody"===n?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(s)):"tr"===n?e._createTrPlaceholder(e.currentItem,s):"img"===n&&s.attr("src",e.currentItem.attr("src")),i||s.css("visibility","hidden"),s},update:function(t,s){i&&!n.forcePlaceholderSize||(s.height()||s.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),s.width()||s.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(n.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),n.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var n=this;e.children().each(function(){t("<td>&#160;</td>",n.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,n,s,o,a,r,l,h,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(s=1e4,o=null,a=(c=d.floating||this._isFloating(this.currentItem))?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",n=this.items.length-1;n>=0;n--)t.contains(this.containers[p].element[0],this.items[n].item[0])&&this.items[n].item[0]!==this.currentItem[0]&&(l=this.items[n].item.offset()[a],h=!1,e[u]-l>this.items[n][r]/2&&(h=!0),Math.abs(e[u]-l)<s&&(s=Math.abs(e[u]-l),o=this.items[n],this.direction=h?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return void(this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1));o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,n=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return n.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(n[0]),n[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),n[0].style.width&&!i.forceHelperSize||n.width(this.currentItem.width()),n[0].style.height&&!i.forceHelperSize||n.height(this.currentItem.height()),n},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,n,s=this.options;"parent"===s.containment&&(s.containment=this.helper[0].parentNode),
"document"!==s.containment&&"window"!==s.containment||(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===s.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===s.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(s.containment)||(e=t(s.containment)[0],i=t(s.containment).offset(),n="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(n?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(n?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var n="absolute"===e?1:-1,s="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(s[0].tagName);return{top:i.top+this.offset.relative.top*n+this.offset.parent.top*n-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:s.scrollTop())*n,left:i.left+this.offset.relative.left*n+this.offset.parent.left*n-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:s.scrollLeft())*n}},_generatePosition:function(e){var i,n,s=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,l=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),s.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/s.grid[1])*s.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-s.grid[1]:i+s.grid[1]:i,n=this.originalPageX+Math.round((o-this.originalPageX)/s.grid[0])*s.grid[0],o=this.containment?n-this.offset.click.left>=this.containment[0]&&n-this.offset.click.left<=this.containment[2]?n:n-this.offset.click.left>=this.containment[0]?n-s.grid[0]:n+s.grid[0]:n)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():l?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():l?0:r.scrollLeft())}},_rearrange:function(t,e,i,n){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var s=this.counter;this._delay(function(){s===this.counter&&this.refreshPositions(!n)})},_clear:function(t,e){function i(t,e,i){return function(n){i._trigger(t,n,e._uiHash(e))}}this.reverting=!1;var n,s=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(n in this._storedCSS)"auto"!==this._storedCSS[n]&&"static"!==this._storedCSS[n]||(this._storedCSS[n]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&s.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||s.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(s.push(function(t){this._trigger("remove",t,this._uiHash())}),s.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),s.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),n=this.containers.length-1;n>=0;n--)e||s.push(i("deactivate",this,this.containers[n])),this.containers[n].containerCache.over&&(s.push(i("out",this,this.containers[n])),this.containers[n].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(n=0;n<s.length;n++)s[n].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){!1===t.Widget.prototype._trigger.apply(this,arguments)&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,n){var s=i.attr(n);null!=s&&s.length&&(e[n]=s)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){this.cancelBlur?delete this.cancelBlur:(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t))},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){this.element[0]===t.ui.safeActiveElement(this.document[0])||(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n}))}var n;n=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),!1!==this._start(e)&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){if(t(e.currentTarget).hasClass("ui-state-active"))return!1!==this._start(e)&&void this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,n=t.ui.keyCode;switch(e.keyCode){case n.UP:return this._repeat(null,1,e),!0;case n.DOWN:return this._repeat(null,-1,e),!0;case n.PAGE_UP:return this._repeat(null,i.page,e),!0;case n.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return!(!this.spinning&&!1===this._trigger("start",t)||(this.counter||(this.counter=1),this.spinning=!0,0))},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&!1===this._trigger("spin",e,{value:i})||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=t.toString(),i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,n=this.options;return i=t-(e=null!==n.min?n.min:0),t=e+(i=Math.round(i/n.step)*n.step),t=parseFloat(t.toFixed(this._precision())),null!==n.max&&t>n.max?n.max:null!==n.min&&t<n.min?n.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,n,s;if("culture"===t||"numberFormat"===t)return i=this._parse(this.element.val()),this.options[t]=e,void this.element.val(this._format(i));"max"!==t&&"min"!==t&&"step"!==t||"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(n=this.buttons.first().find(".ui-icon"),this._removeClass(n,null,this.options.icons.up),this._addClass(n,null,e.up),s=this.buttons.last().find(".ui-icon"),this._removeClass(s,null,this.options.icons.down),this._addClass(s,null,e.down)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:o(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null!==t&&t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&null!==(i=this._parse(t))&&(e||(i=this._adjustValue(i)),t=this._format(i)),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:o(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:o(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:o(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:o(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){if(!arguments.length)return this._parse(this.element.val());o(this._value).call(this,t)},widget:function(){return this.uiSpinner}}),!1!==t.uiBackCompat&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,n;i=e.href.replace(t,""),n=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(t){}try{n=decodeURIComponent(n)}catch(t){}return e.hash.length>1&&i===n}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),!1!==this.options.active&&this.anchors.length?this.active=this._findActive(i.active):this.active=t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,n=location.hash.substring(1);return null===e&&(n&&this.tabs.each(function(i,s){if(t(s).attr("aria-controls")===n)return e=i,!1}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),null!==e&&-1!==e||(e=!!this.tabs.length&&0)),!1!==e&&-1===(e=this.tabs.index(this.tabs.eq(e)))&&(e=!i&&0),!i&&!1===e&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),n=this.tabs.index(i),s=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:n++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:s=!1,n--;break;case t.ui.keyCode.END:n=this.anchors.length-1;break;case t.ui.keyCode.HOME:n=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),void this._activate(n);case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),void this._activate(n!==this.options.active&&n);default:return}e.preventDefault(),clearTimeout(this.activating),n=this._focusNextTab(n,s),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(n).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",n)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){for(var n=this.tabs.length-1;-1!==t.inArray((e>n&&(e=0),e<0&&(e=n),e),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){"active"!==t?(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||!1!==this.options.active||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e)):this._activate(e)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),!1!==e.active&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,n=this.anchors,s=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,n){var s,o,a,r=t(n).uniqueId().attr("id"),l=t(n).closest("li"),h=l.attr("aria-controls");e._isLocal(n)?(a=(s=n.hash).substring(1),o=e.element.find(e._sanitizeSelector(s))):(s="#"+(a=l.attr("aria-controls")||t({}).uniqueId()[0].id),(o=e.element.find(s)).length||(o=e._createPanel(a)).insertAfter(e.panels[i-1]||e.tablist),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),h&&l.data("ui-tabs-aria-controls",h),l.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(n.not(this.anchors)),this._off(s.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,n,s;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),s=0;n=this.tabs[s];s++)i=t(n),!0===e||-1!==t.inArray(s,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!0===e)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,n=this.element.parent();"fill"===e?(i=n.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),n=e.css("position");"absolute"!==n&&"fixed"!==n&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,n=this.active,s=t(e.currentTarget).closest("li"),o=s[0]===n[0],a=o&&i.collapsible,r=a?t():this._getPanelForTab(s),l=n.length?this._getPanelForTab(n):t(),h={oldTab:n,oldPanel:l,newTab:a?t():s,newPanel:r};e.preventDefault(),s.hasClass("ui-state-disabled")||s.hasClass("ui-tabs-loading")||this.running||o&&!i.collapsible||!1===this._trigger("beforeActivate",e,h)||(i.active=!a&&this.tabs.index(s),this.active=o?t():s,this.xhr&&this.xhr.abort(),l.length||r.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),r.length&&this.load(this.tabs.index(s),e),this._toggle(e,h))},_toggle:function(e,i){function n(){o.running=!1,o._trigger("activate",e,i)}function s(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,n):(a.show(),n())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),s()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),s()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,n=this._findActive(e);n[0]!==this.active[0]&&(n.length||(n=this.active),i=n.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return!1===e?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;!1!==i&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(!0!==i){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var n=this,s=this.tabs.eq(e),o=s.find(".ui-tabs-anchor"),a=this._getPanelForTab(s),r={tab:s,panel:a},l=function(t,e){"abort"===e&&n.panels.stop(!1,!0),n._removeClass(s,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===n.xhr&&delete n.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(s,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,s){setTimeout(function(){a.html(t),n._trigger("load",i,r),l(s,e)},1)}).fail(function(t,e){setTimeout(function(){l(t,e)},1)})))},_ajaxSettings:function(e,i,n){var s=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return s._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},n))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),!1!==t.uiBackCompat&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var n=(e.attr("aria-describedby")||"").split(/\s+/);n.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(n.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),n=(e.attr("aria-describedby")||"").split(/\s+/),s=t.inArray(i,n);-1!==s&&n.splice(s,1),e.removeData("ui-tooltip-id"),(n=t.trim(n.join(" ")))?e.attr("aria-describedby",n):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var n=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){n._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,n){var s=t.Event("blur");s.target=s.currentTarget=n.element[0],e.close(s,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);if(e.is("[title]"))return e.data("ui-tooltip-title",e.attr("title")).removeAttr("title")}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,n=t(e?e.target:this.element).closest(this.options.items);n.length&&!n.data("ui-tooltip-id")&&(n.attr("title")&&n.data("ui-tooltip-title",n.attr("title")),n.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&n.parents().each(function(){var e,n=t(this);n.data("ui-tooltip-open")&&((e=t.Event("blur")).target=e.currentTarget=this,i.close(e,!0)),n.attr("title")&&(n.uniqueId(),i.parents[this.id]={element:this,title:n.attr("title")},n.attr("title",""))}),this._registerCloseHandlers(e,n),this._updateContent(n,e))},_updateContent:function(t,e){var i,n=this.options.content,s=this,o=e?e.type:null;if("string"==typeof n||n.nodeType||n.jquery)return this._open(e,t,n);(i=n.call(t[0],function(i){s._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}))&&this._open(e,t,i)},_open:function(e,i,n){function s(t){h.of=t,a.is(":hidden")||a.position(h)}var o,a,r,l,h=t.extend({},this.options.position);if(n){if(o=this._find(i))return void o.tooltip.find(".ui-tooltip-content").html(n);i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(n),this.liveRegion.children().hide(),(l=t("<div>").html(a.find(".ui-tooltip-content").html())).removeAttr("name").find("[name]").removeAttr("name"),l.removeAttr("id").find("[id]").removeAttr("id"),l.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:s}),s(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(s(h.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var n={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var n=t.Event(e);n.currentTarget=i[0],this.close(n,!0)}}};i[0]!==this.element[0]&&(n.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(n.mouseleave="close"),e&&"focusin"!==e.type||(n.focusout="close"),this._on(!0,i,n)},close:function(e){var i,n=this,s=t(e?e.currentTarget:this.element),o=this._find(s);o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),s.data("ui-tooltip-title")&&!s.attr("title")&&s.attr("title",s.data("ui-tooltip-title")),this._removeDescribedBy(s),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){n._removeTooltip(t(this))}),s.removeData("ui-tooltip-open"),this._off(s,"mouseleave focusout keyup"),s[0]!==this.element[0]&&this._off(s,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete n.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1))):s.removeData("ui-tooltip-open")},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),n=t("<div>").appendTo(i),s=i.uniqueId().attr("id");return this._addClass(n,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[s]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,n){var s=t.Event("blur"),o=n.element;s.target=s.currentTarget=o[0],e.close(s,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),!1!==t.uiBackCompat&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):window.jQuery||window.Zepto)}(function(t){var e,i,n,s,o,a,r=function(){},l=!!window.jQuery,h=t(window),c=function(t,i){e.ev.on("mfp"+t+".mfp",i)},u=function(e,i,n,s){var o=document.createElement("div");return o.className="mfp-"+e,n&&(o.innerHTML=n),s?i&&i.appendChild(o):(o=t(o),i&&o.appendTo(i)),o},d=function(i,n){e.ev.triggerHandler("mfp"+i,n),e.st.callbacks&&(i=i.charAt(0).toLowerCase()+i.slice(1),e.st.callbacks[i]&&e.st.callbacks[i].apply(e,t.isArray(n)?n:[n]))},p=function(i){return i===a&&e.currTemplate.closeBtn||(e.currTemplate.closeBtn=t(e.st.closeMarkup.replace("%title%",e.st.tClose)),a=i),e.currTemplate.closeBtn},f=function(){t.magnificPopup.instance||((e=new r).init(),t.magnificPopup.instance=e)};r.prototype={constructor:r,init:function(){var i=navigator.appVersion;e.isLowIE=e.isIE8=document.all&&!document.addEventListener,e.isAndroid=/android/gi.test(i),e.isIOS=/iphone|ipad|ipod/gi.test(i),e.supportsTransition=function(){var t=document.createElement("p").style,e=["ms","O","Moz","Webkit"];if(void 0!==t.transition)return!0
;for(;e.length;)if(e.pop()+"Transition"in t)return!0;return!1}(),e.probablyMobile=e.isAndroid||e.isIOS||/(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(navigator.userAgent),n=t(document),e.popupsCache={}},open:function(i){var s;if(!1===i.isObj){e.items=i.items.toArray(),e.index=0;var a,r=i.items;for(s=0;s<r.length;s++)if((a=r[s]).parsed&&(a=a.el[0]),a===i.el[0]){e.index=s;break}}else e.items=t.isArray(i.items)?i.items:[i.items],e.index=i.index||0;if(!e.isOpen){e.types=[],o="",i.mainEl&&i.mainEl.length?e.ev=i.mainEl.eq(0):e.ev=n,i.key?(e.popupsCache[i.key]||(e.popupsCache[i.key]={}),e.currTemplate=e.popupsCache[i.key]):e.currTemplate={},e.st=t.extend(!0,{},t.magnificPopup.defaults,i),e.fixedContentPos="auto"===e.st.fixedContentPos?!e.probablyMobile:e.st.fixedContentPos,e.st.modal&&(e.st.closeOnContentClick=!1,e.st.closeOnBgClick=!1,e.st.showCloseBtn=!1,e.st.enableEscapeKey=!1),e.bgOverlay||(e.bgOverlay=u("bg").on("click.mfp",function(){e.close()}),e.wrap=u("wrap").attr("tabindex",-1).on("click.mfp",function(t){e._checkIfClose(t.target)&&e.close()}),e.container=u("container",e.wrap)),e.contentContainer=u("content"),e.st.preloader&&(e.preloader=u("preloader",e.container,e.st.tLoading));var l=t.magnificPopup.modules;for(s=0;s<l.length;s++){var f=l[s];f=f.charAt(0).toUpperCase()+f.slice(1),e["init"+f].call(e)}d("BeforeOpen"),e.st.showCloseBtn&&(e.st.closeBtnInside?(c("MarkupParse",function(t,e,i,n){i.close_replaceWith=p(n.type)}),o+=" mfp-close-btn-in"):e.wrap.append(p())),e.st.alignTop&&(o+=" mfp-align-top"),e.fixedContentPos?e.wrap.css({overflow:e.st.overflowY,overflowX:"hidden",overflowY:e.st.overflowY}):e.wrap.css({top:h.scrollTop(),position:"absolute"}),(!1===e.st.fixedBgPos||"auto"===e.st.fixedBgPos&&!e.fixedContentPos)&&e.bgOverlay.css({height:n.height(),position:"absolute"}),e.st.enableEscapeKey&&n.on("keyup.mfp",function(t){27===t.keyCode&&e.close()}),h.on("resize.mfp",function(){e.updateSize()}),e.st.closeOnContentClick||(o+=" mfp-auto-cursor"),o&&e.wrap.addClass(o);var g=e.wH=h.height(),m={};if(e.fixedContentPos&&e._hasScrollBar(g)){var v=e._getScrollbarSize();v&&(m.marginRight=v)}e.fixedContentPos&&(e.isIE7?t("body, html").css("overflow","hidden"):m.overflow="hidden");var b=e.st.mainClass;return e.isIE7&&(b+=" mfp-ie7"),b&&e._addClassToMFP(b),e.updateItemHTML(),d("BuildControls"),t("html").css(m),e.bgOverlay.add(e.wrap).prependTo(e.st.prependTo||t(document.body)),e._lastFocusedEl=document.activeElement,setTimeout(function(){e.content?(e._addClassToMFP("mfp-ready"),e._setFocus()):e.bgOverlay.addClass("mfp-ready"),n.on("focusin.mfp",e._onFocusIn)},16),e.isOpen=!0,e.updateSize(g),d("Open"),i}e.updateItemHTML()},close:function(){e.isOpen&&(d("BeforeClose"),e.isOpen=!1,e.st.removalDelay&&!e.isLowIE&&e.supportsTransition?(e._addClassToMFP("mfp-removing"),setTimeout(function(){e._close()},e.st.removalDelay)):e._close())},_close:function(){d("Close");var i="mfp-removing mfp-ready ";if(e.bgOverlay.detach(),e.wrap.detach(),e.container.empty(),e.st.mainClass&&(i+=e.st.mainClass+" "),e._removeClassFromMFP(i),e.fixedContentPos){var s={marginRight:""};e.isIE7?t("body, html").css("overflow",""):s.overflow="",t("html").css(s)}n.off("keyup.mfp focusin.mfp"),e.ev.off(".mfp"),e.wrap.attr("class","mfp-wrap").removeAttr("style"),e.bgOverlay.attr("class","mfp-bg"),e.container.attr("class","mfp-container"),!e.st.showCloseBtn||e.st.closeBtnInside&&!0!==e.currTemplate[e.currItem.type]||e.currTemplate.closeBtn&&e.currTemplate.closeBtn.detach(),e.st.autoFocusLast&&e._lastFocusedEl&&t(e._lastFocusedEl).focus(),e.currItem=null,e.content=null,e.currTemplate=null,e.prevHeight=0,d("AfterClose")},updateSize:function(t){if(e.isIOS){var i=document.documentElement.clientWidth/window.innerWidth,n=window.innerHeight*i;e.wrap.css("height",n),e.wH=n}else e.wH=t||h.height();e.fixedContentPos||e.wrap.css("height",e.wH),d("Resize")},updateItemHTML:function(){var i=e.items[e.index];e.contentContainer.detach(),e.content&&e.content.detach(),i.parsed||(i=e.parseEl(e.index));var n=i.type;if(d("BeforeChange",[e.currItem?e.currItem.type:"",n]),e.currItem=i,!e.currTemplate[n]){var o=!!e.st[n]&&e.st[n].markup;d("FirstMarkupParse",o),e.currTemplate[n]=!o||t(o)}s&&s!==i.type&&e.container.removeClass("mfp-"+s+"-holder");var a=e["get"+n.charAt(0).toUpperCase()+n.slice(1)](i,e.currTemplate[n]);e.appendContent(a,n),i.preloaded=!0,d("Change",i),s=i.type,e.container.prepend(e.contentContainer),d("AfterChange")},appendContent:function(t,i){e.content=t,t?e.st.showCloseBtn&&e.st.closeBtnInside&&!0===e.currTemplate[i]?e.content.find(".mfp-close").length||e.content.append(p()):e.content=t:e.content="",d("BeforeAppend"),e.container.addClass("mfp-"+i+"-holder"),e.contentContainer.append(e.content)},parseEl:function(i){var n,s=e.items[i];if(s.tagName?s={el:t(s)}:(n=s.type,s={data:s,src:s.src}),s.el){for(var o=e.types,a=0;a<o.length;a++)if(s.el.hasClass("mfp-"+o[a])){n=o[a];break}s.src=s.el.attr("data-mfp-src"),s.src||(s.src=s.el.attr("href"))}return s.type=n||e.st.type||"inline",s.index=i,s.parsed=!0,e.items[i]=s,d("ElementParse",s),e.items[i]},addGroup:function(t,i){var n=function(n){n.mfpEl=this,e._openClick(n,t,i)};i||(i={});var s="click.magnificPopup";i.mainEl=t,i.items?(i.isObj=!0,t.off(s).on(s,n)):(i.isObj=!1,i.delegate?t.off(s).on(s,i.delegate,n):(i.items=t,t.off(s).on(s,n)))},_openClick:function(i,n,s){if((void 0!==s.midClick?s.midClick:t.magnificPopup.defaults.midClick)||!(2===i.which||i.ctrlKey||i.metaKey||i.altKey||i.shiftKey)){var o=void 0!==s.disableOn?s.disableOn:t.magnificPopup.defaults.disableOn;if(o)if(t.isFunction(o)){if(!o.call(e))return!0}else if(h.width()<o)return!0;i.type&&(i.preventDefault(),e.isOpen&&i.stopPropagation()),s.el=t(i.mfpEl),s.delegate&&(s.items=n.find(s.delegate)),e.open(s)}},updateStatus:function(t,n){if(e.preloader){i!==t&&e.container.removeClass("mfp-s-"+i),n||"loading"!==t||(n=e.st.tLoading);var s={status:t,text:n};d("UpdateStatus",s),t=s.status,n=s.text,e.preloader.html(n),e.preloader.find("a").on("click",function(t){t.stopImmediatePropagation()}),e.container.addClass("mfp-s-"+t),i=t}},_checkIfClose:function(i){if(!t(i).hasClass("mfp-prevent-close")){var n=e.st.closeOnContentClick,s=e.st.closeOnBgClick;if(n&&s)return!0;if(!e.content||t(i).hasClass("mfp-close")||e.preloader&&i===e.preloader[0])return!0;if(i===e.content[0]||t.contains(e.content[0],i)){if(n)return!0}else if(s&&t.contains(document,i))return!0;return!1}},_addClassToMFP:function(t){e.bgOverlay.addClass(t),e.wrap.addClass(t)},_removeClassFromMFP:function(t){this.bgOverlay.removeClass(t),e.wrap.removeClass(t)},_hasScrollBar:function(t){return(e.isIE7?n.height():document.body.scrollHeight)>(t||h.height())},_setFocus:function(){(e.st.focus?e.content.find(e.st.focus).eq(0):e.wrap).focus()},_onFocusIn:function(i){if(i.target!==e.wrap[0]&&!t.contains(e.wrap[0],i.target))return e._setFocus(),!1},_parseMarkup:function(e,i,n){var s;n.data&&(i=t.extend(n.data,i)),d("MarkupParse",[e,i,n]),t.each(i,function(i,n){if(void 0===n||!1===n)return!0;if((s=i.split("_")).length>1){var o=e.find(".mfp-"+s[0]);if(o.length>0){var a=s[1];"replaceWith"===a?o[0]!==n[0]&&o.replaceWith(n):"img"===a?o.is("img")?o.attr("src",n):o.replaceWith(t("<img>").attr("src",n).attr("class",o.attr("class"))):o.attr(s[1],n)}}else e.find(".mfp-"+i).html(n)})},_getScrollbarSize:function(){if(void 0===e.scrollbarSize){var t=document.createElement("div");t.style.cssText="width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;",document.body.appendChild(t),e.scrollbarSize=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return e.scrollbarSize}},t.magnificPopup={instance:null,proto:r.prototype,modules:[],open:function(e,i){return f(),(e=e?t.extend(!0,{},e):{}).isObj=!0,e.index=i||0,this.instance.open(e)},close:function(){return t.magnificPopup.instance&&t.magnificPopup.instance.close()},registerModule:function(e,i){i.options&&(t.magnificPopup.defaults[e]=i.options),t.extend(this.proto,i.proto),this.modules.push(e)},defaults:{disableOn:0,key:null,midClick:!1,mainClass:"",preloader:!0,focus:"",closeOnContentClick:!1,closeOnBgClick:!0,closeBtnInside:!0,showCloseBtn:!0,enableEscapeKey:!0,modal:!1,alignTop:!1,removalDelay:0,prependTo:null,fixedContentPos:"auto",fixedBgPos:"auto",overflowY:"auto",closeMarkup:'<button title="%title%" type="button" class="mfp-close">&#215;</button>',tClose:"Close (Esc)",tLoading:"Loading...",autoFocusLast:!0}},t.fn.magnificPopup=function(i){f();var n=t(this);if("string"==typeof i)if("open"===i){var s,o=l?n.data("magnificPopup"):n[0].magnificPopup,a=parseInt(arguments[1],10)||0;o.items?s=o.items[a]:(s=n,o.delegate&&(s=s.find(o.delegate)),s=s.eq(a)),e._openClick({mfpEl:s},n,o)}else e.isOpen&&e[i].apply(e,Array.prototype.slice.call(arguments,1));else i=t.extend(!0,{},i),l?n.data("magnificPopup",i):n[0].magnificPopup=i,e.addGroup(n,i);return n};var g,m,v,b=function(){v&&(m.after(v.addClass(g)).detach(),v=null)};t.magnificPopup.registerModule("inline",{options:{hiddenClass:"hide",markup:"",tNotFound:"Content not found"},proto:{initInline:function(){e.types.push("inline"),c("Close.inline",function(){b()})},getInline:function(i,n){if(b(),i.src){var s=e.st.inline,o=t(i.src);if(o.length){var a=o[0].parentNode;a&&a.tagName&&(m||(g=s.hiddenClass,m=u(g),g="mfp-"+g),v=o.after(m).detach().removeClass(g)),e.updateStatus("ready")}else e.updateStatus("error",s.tNotFound),o=t("<div>");return i.inlineElement=o,o}return e.updateStatus("ready"),e._parseMarkup(n,{},i),n}}});var _,y,w,x=function(){_&&t(document.body).removeClass(_)},C=function(){x(),e.req&&e.req.abort()};t.magnificPopup.registerModule("ajax",{options:{settings:null,cursor:"mfp-ajax-cur",tError:'<a href="%url%">The content</a> could not be loaded.'},proto:{initAjax:function(){e.types.push("ajax"),_=e.st.ajax.cursor,c("Close.ajax",C),c("BeforeChange.ajax",C)},getAjax:function(i){_&&t(document.body).addClass(_),e.updateStatus("loading");var n=t.extend({url:i.src,success:function(n,s,o){var a={data:n,xhr:o};d("ParseAjax",a),e.appendContent(t(a.data),"ajax"),i.finished=!0,x(),e._setFocus(),setTimeout(function(){e.wrap.addClass("mfp-ready")},16),e.updateStatus("ready"),d("AjaxContentAdded")},error:function(){x(),i.finished=i.loadError=!0,e.updateStatus("error",e.st.ajax.tError.replace("%url%",i.src))}},e.st.ajax.settings);return e.req=t.ajax(n),""}}}),t.magnificPopup.registerModule("image",{options:{markup:'<div class="mfp-figure"><div class="mfp-close"></div><figure><div class="mfp-img"></div><figcaption><div class="mfp-bottom-bar"><div class="mfp-title"></div><div class="mfp-counter"></div></div></figcaption></figure></div>',cursor:"mfp-zoom-out-cur",titleSrc:"title",verticalFit:!0,tError:'<a href="%url%">The image</a> could not be loaded.'},proto:{initImage:function(){var i=e.st.image,n=".image";e.types.push("image"),c("Open"+n,function(){"image"===e.currItem.type&&i.cursor&&t(document.body).addClass(i.cursor)}),c("Close"+n,function(){i.cursor&&t(document.body).removeClass(i.cursor),h.off("resize.mfp")}),c("Resize"+n,e.resizeImage),e.isLowIE&&c("AfterChange",e.resizeImage)},resizeImage:function(){var t=e.currItem;if(t&&t.img&&e.st.image.verticalFit){var i=0;e.isLowIE&&(i=parseInt(t.img.css("padding-top"),10)+parseInt(t.img.css("padding-bottom"),10)),t.img.css("max-height",e.wH-i)}},_onImageHasSize:function(t){t.img&&(t.hasSize=!0,y&&clearInterval(y),t.isCheckingImgSize=!1,d("ImageHasSize",t),t.imgHidden&&(e.content&&e.content.removeClass("mfp-loading"),t.imgHidden=!1))},findImageSize:function(t){var i=0,n=t.img[0],s=function(o){y&&clearInterval(y),y=setInterval(function(){n.naturalWidth>0?e._onImageHasSize(t):(i>200&&clearInterval(y),3==++i?s(10):40===i?s(50):100===i&&s(500))},o)};s(1)},getImage:function(i,n){var s=0,o=function(){i&&(i.img[0].complete?(i.img.off(".mfploader"),i===e.currItem&&(e._onImageHasSize(i),e.updateStatus("ready")),i.hasSize=!0,i.loaded=!0,d("ImageLoadComplete")):++s<200?setTimeout(o,100):a())},a=function(){i&&(i.img.off(".mfploader"),i===e.currItem&&(e._onImageHasSize(i),e.updateStatus("error",r.tError.replace("%url%",i.src))),i.hasSize=!0,i.loaded=!0,i.loadError=!0)},r=e.st.image,l=n.find(".mfp-img");if(l.length){var h=document.createElement("img");h.className="mfp-img",i.el&&i.el.find("img").length&&(h.alt=i.el.find("img").attr("alt")),i.img=t(h).on("load.mfploader",o).on("error.mfploader",a),h.src=i.src,l.is("img")&&(i.img=i.img.clone()),(h=i.img[0]).naturalWidth>0?i.hasSize=!0:h.width||(i.hasSize=!1)}return e._parseMarkup(n,{title:function(i){if(i.data&&void 0!==i.data.title)return i.data.title;var n=e.st.image.titleSrc;if(n){if(t.isFunction(n))return n.call(e,i);if(i.el)return i.el.attr(n)||""}return""}(i),img_replaceWith:i.img},i),e.resizeImage(),i.hasSize?(y&&clearInterval(y),i.loadError?(n.addClass("mfp-loading"),e.updateStatus("error",r.tError.replace("%url%",i.src))):(n.removeClass("mfp-loading"),e.updateStatus("ready")),n):(e.updateStatus("loading"),i.loading=!0,i.hasSize||(i.imgHidden=!0,n.addClass("mfp-loading"),e.findImageSize(i)),n)}}}),t.magnificPopup.registerModule("zoom",{options:{enabled:!1,easing:"ease-in-out",duration:300,opener:function(t){return t.is("img")?t:t.find("img")}},proto:{initZoom:function(){var t,i=e.st.zoom,n=".zoom";if(i.enabled&&e.supportsTransition){var s,o,a=i.duration,r=function(t){var e=t.clone().removeAttr("style").removeAttr("class").addClass("mfp-animated-image"),n="all "+i.duration/1e3+"s "+i.easing,s={position:"fixed",zIndex:9999,left:0,top:0,"-webkit-backface-visibility":"hidden"},o="transition";return s["-webkit-"+o]=s["-moz-"+o]=s["-o-"+o]=s[o]=n,e.css(s),e},l=function(){e.content.css("visibility","visible")};c("BuildControls"+n,function(){if(e._allowZoom()){if(clearTimeout(s),e.content.css("visibility","hidden"),!(t=e._getItemToZoom()))return void l();(o=r(t)).css(e._getOffset()),e.wrap.append(o),s=setTimeout(function(){o.css(e._getOffset(!0)),s=setTimeout(function(){l(),setTimeout(function(){o.remove(),t=o=null,d("ZoomAnimationEnded")},16)},a)},16)}}),c("BeforeClose"+n,function(){if(e._allowZoom()){if(clearTimeout(s),e.st.removalDelay=a,!t){if(!(t=e._getItemToZoom()))return;o=r(t)}o.css(e._getOffset(!0)),e.wrap.append(o),e.content.css("visibility","hidden"),setTimeout(function(){o.css(e._getOffset())},16)}}),c("Close"+n,function(){e._allowZoom()&&(l(),o&&o.remove(),t=null)})}},_allowZoom:function(){return"image"===e.currItem.type},_getItemToZoom:function(){return!!e.currItem.hasSize&&e.currItem.img},_getOffset:function(i){var n,s=(n=i?e.currItem.img:e.st.zoom.opener(e.currItem.el||e.currItem)).offset(),o=parseInt(n.css("padding-top"),10),a=parseInt(n.css("padding-bottom"),10);s.top-=t(window).scrollTop()-o;var r={width:n.width(),height:(l?n.innerHeight():n[0].offsetHeight)-a-o};return void 0===w&&(w=void 0!==document.createElement("p").style.MozTransform),w?r["-moz-transform"]=r.transform="translate("+s.left+"px,"+s.top+"px)":(r.left=s.left,r.top=s.top),r}}});var k=function(t){if(e.currTemplate.iframe){var i=e.currTemplate.iframe.find("iframe");i.length&&(t||(i[0].src="//about:blank"),e.isIE8&&i.css("display",t?"block":"none"))}};t.magnificPopup.registerModule("iframe",{options:{markup:'<div class="mfp-iframe-scaler"><div class="mfp-close"></div><iframe class="mfp-iframe" src="//about:blank" frameborder="0" allowfullscreen></iframe></div>',srcAction:"iframe_src",patterns:{youtube:{index:"youtube.com",id:"v=",src:"//www.youtube.com/embed/%id%?autoplay=1"},vimeo:{index:"vimeo.com/",id:"/",src:"//player.vimeo.com/video/%id%?autoplay=1"},gmaps:{index:"//maps.google.",src:"%id%&output=embed"}}},proto:{initIframe:function(){e.types.push("iframe"),c("BeforeChange",function(t,e,i){e!==i&&("iframe"===e?k():"iframe"===i&&k(!0))}),c("Close.iframe",function(){k()})},getIframe:function(i,n){var s=i.src,o=e.st.iframe;t.each(o.patterns,function(){if(s.indexOf(this.index)>-1)return this.id&&(s="string"==typeof this.id?s.substr(s.lastIndexOf(this.id)+this.id.length,s.length):this.id.call(this,s)),s=this.src.replace("%id%",s),!1});var a={};return o.srcAction&&(a[o.srcAction]=s),e._parseMarkup(n,a,i),e.updateStatus("ready"),n}}});var T=function(t){var i=e.items.length;return t>i-1?t-i:t<0?i+t:t},D=function(t,e,i){return t.replace(/%curr%/gi,e+1).replace(/%total%/gi,i)};t.magnificPopup.registerModule("gallery",{options:{enabled:!1,arrowMarkup:'<button title="%title%" type="button" class="mfp-arrow mfp-arrow-%dir%"></button>',preload:[0,2],navigateByImgClick:!0,arrows:!0,tPrev:"Previous (Left arrow key)",tNext:"Next (Right arrow key)",tCounter:"%curr% of %total%"},proto:{initGallery:function(){var i=e.st.gallery,s=".mfp-gallery";if(e.direction=!0,!i||!i.enabled)return!1;o+=" mfp-gallery",c("Open"+s,function(){i.navigateByImgClick&&e.wrap.on("click"+s,".mfp-img",function(){if(e.items.length>1)return e.next(),!1}),n.on("keydown"+s,function(t){37===t.keyCode?e.prev():39===t.keyCode&&e.next()})}),c("UpdateStatus"+s,function(t,i){i.text&&(i.text=D(i.text,e.currItem.index,e.items.length))}),c("MarkupParse"+s,function(t,n,s,o){var a=e.items.length;s.counter=a>1?D(i.tCounter,o.index,a):""}),c("BuildControls"+s,function(){if(e.items.length>1&&i.arrows&&!e.arrowLeft){var n=i.arrowMarkup,s=e.arrowLeft=t(n.replace(/%title%/gi,i.tPrev).replace(/%dir%/gi,"left")).addClass("mfp-prevent-close"),o=e.arrowRight=t(n.replace(/%title%/gi,i.tNext).replace(/%dir%/gi,"right")).addClass("mfp-prevent-close");s.click(function(){e.prev()}),o.click(function(){e.next()}),e.container.append(s.add(o))}}),c("Change"+s,function(){e._preloadTimeout&&clearTimeout(e._preloadTimeout),e._preloadTimeout=setTimeout(function(){e.preloadNearbyImages(),e._preloadTimeout=null},16)}),c("Close"+s,function(){n.off(s),e.wrap.off("click"+s),e.arrowRight=e.arrowLeft=null})},next:function(){e.direction=!0,e.index=T(e.index+1),e.updateItemHTML()},prev:function(){e.direction=!1,e.index=T(e.index-1),e.updateItemHTML()},goTo:function(t){e.direction=t>=e.index,e.index=t,e.updateItemHTML()},preloadNearbyImages:function(){var t,i=e.st.gallery.preload,n=Math.min(i[0],e.items.length),s=Math.min(i[1],e.items.length);for(t=1;t<=(e.direction?s:n);t++)e._preloadItem(e.index+t);for(t=1;t<=(e.direction?n:s);t++)e._preloadItem(e.index-t)},_preloadItem:function(i){if(i=T(i),!e.items[i].preloaded){var n=e.items[i];n.parsed||(n=e.parseEl(i)),d("LazyLoad",n),"image"===n.type&&(n.img=t('<img class="mfp-img" />').on("load.mfploader",function(){n.hasSize=!0}).on("error.mfploader",function(){n.hasSize=!0,n.loadError=!0,d("LazyLoadError",n)}).attr("src",n.src)),n.preloaded=!0}}}}),t.magnificPopup.registerModule("retina",{options:{replaceSrc:function(t){return t.src.replace(/\.\w+$/,function(t){return"@2x"+t})},ratio:1},proto:{initRetina:function(){if(window.devicePixelRatio>1){var t=e.st.retina,i=t.ratio;(i=isNaN(i)?i():i)>1&&(c("ImageHasSize.retina",function(t,e){e.img.css({"max-width":e.img[0].naturalWidth/i,width:"100%"})}),c("ElementParse.retina",function(e,n){n.src=t.replaceSrc(n,i)}))}}}}),f()}),function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&module.exports?module.exports=t(require("jquery")):t(jQuery)}(function(t){var e=function(){function e(){var e=this,i=function(i){return t.isNumeric(i)&&(i=Math.floor(i)),t('option[value="'+i+'"]',e.$elem)},n=function(){var n=e.options.initialRating;return n?i(n):t("option:selected",e.$elem)},s=function(){var i=e.$elem.find('option[value="'+e.options.emptyValue+'"]');return!i.length&&e.options.allowEmpty?(i=t("<option />",{value:e.options.emptyValue})).prependTo(e.$elem):i},o=function(t){var i=e.$elem.data("barrating");return void 0!==t?i[t]:i},a=function(t,i){null!==i&&"object"==typeof i?e.$elem.data("barrating",i):e.$elem.data("barrating")[t]=i},r=function(){return o("ratingText")},l=function(){return o("ratingValue")},h=function(){return o("userOptions").reverse?"nextAll":"prevAll"},c=function(t){i(t).prop("selected",!0),e.$elem.change()},u=function(){t("option",e.$elem).prop("selected",function(){return this.defaultSelected}),e.$elem.change()},d=function(t){(t=t||r())==o("emptyRatingText")&&(t=""),e.options.showSelectedRating&&e.$elem.parent().find(".br-current-rating").text(t)},p=function(){e.$widget.find("a").removeClass(function(t,e){return(e.match(/(^|\s)br-\S+/g)||[]).join(" ")})},f=function(){var i,n,s=e.$widget.find('a[data-rating-value="'+l()+'"]'),a=o("userOptions").initialRating,r=t.isNumeric(l())?l():0,c=function(t){return Math.round(Math.floor(10*t)/10%1*100)}(a);if(p(),s.addClass("br-selected br-current")[h()]().addClass("br-selected"),!o("ratingMade")&&t.isNumeric(a)){if(r>=a||!c)return;i=e.$widget.find("a"),(n=s.length?s[o("userOptions").reverse?"prev":"next"]():i[o("userOptions").reverse?"last":"first"]()).addClass("br-fractional"),n.addClass("br-fractional-"+c)}},g=function(i){i.on("click.barrating",function(i){var n,s,h=t(this),u=o("userOptions");return i.preventDefault(),n=h.attr("data-rating-value"),s=h.attr("data-rating-text"),function(t){return!(!o("allowEmpty")||!o("userOptions").deselectable)&&l()==t.attr("data-rating-value")}(h)&&(n=o("emptyRatingValue"),s=o("emptyRatingText")),a("ratingValue",n),a("ratingText",s),a("ratingMade",!0),c(n),d(s),f(),u.onSelect.call(e,l(),r(),i),!1})},m=function(e){e.on("mouseenter.barrating",function(){var e=t(this);p(),e.addClass("br-active")[h()]().addClass("br-active"),d(e.attr("data-rating-text"))})},v=function(e){e.on("touchstart.barrating",function(e){e.preventDefault(),e.stopPropagation(),t(this).click()})},b=function(t){t.off(".barrating")},_=function(t){var i=e.$widget.find("a");v&&v(i),t?(b(i),i.on("click.barrating",function(t){t.preventDefault()})):function(t){g(t),e.options.hoverState&&(m(t),e.$widget.on("mouseleave.barrating blur.barrating",function(){d(),f()}))}(i)};this.show=function(){var i;o()||(i=["br-wrapper"],""!==e.options.theme&&i.push("br-theme-"+e.options.theme),e.$elem.wrap(t("<div />",{class:i.join(" ")})),function(){var t=n(),i=s(),o=t.val(),r=t.data("html")?t.data("html"):t.text(),l=null!==e.options.allowEmpty?e.options.allowEmpty:!!i.length,h=i.length?i.val():null,c=i.length?i.text():null;a(null,{userOptions:e.options,ratingValue:o,ratingText:r,originalRatingValue:o,originalRatingText:r,allowEmpty:l,emptyRatingValue:h,emptyRatingText:c,readOnly:e.options.readonly,ratingMade:!1})}(),e.$widget=function(){var i=t("<div />",{class:"br-widget"});return e.$elem.find("option").each(function(){var n,s,a,r;(n=t(this).val())!==o("emptyRatingValue")&&(s=t(this).text(),(a=t(this).data("html"))&&(s=a),r=t("<a />",{href:"#","data-rating-value":n,"data-rating-text":s,html:e.options.showValues?s:""}),i.append(r))}),e.options.showSelectedRating&&i.append(t("<div />",{text:"",class:"br-current-rating"})),e.options.reverse&&i.addClass("br-reverse"),e.options.readonly&&i.addClass("br-readonly"),i}(),e.$widget.insertAfter(e.$elem),f(),d(),_(e.options.readonly),e.$elem.hide())},this.readonly=function(t){"boolean"==typeof t&&o("readOnly")!=t&&(_(t),a("readOnly",t),e.$widget.toggleClass("br-readonly"))},this.set=function(t){var i=o("userOptions");0!==e.$elem.find('option[value="'+t+'"]').length&&(a("ratingValue",t),a("ratingText",e.$elem.find('option[value="'+t+'"]').text()),a("ratingMade",!0),c(l()),d(r()),f(),i.silent||i.onSelect.call(this,l(),r()))},this.clear=function(){var t=o("userOptions");a("ratingValue",o("originalRatingValue")),a("ratingText",o("originalRatingText")),a("ratingMade",!1),u(),d(r()),f(),t.onClear.call(this,l(),r())},this.destroy=function(){var t=l(),i=r(),n=o("userOptions");b(e.$widget.find("a")),e.$widget.remove(),e.$elem.removeData("barrating"),e.$elem.unwrap(),e.$elem.show(),n.onDestroy.call(this,t,i)}}return e.prototype.init=function(e,i){return this.$elem=t(i),this.options=t.extend({},t.fn.barrating.defaults,e),this.options},e}();t.fn.barrating=function(i,n){return this.each(function(){var s=new e;if(t(this).is("select")||t.error("Sorry, this plugin only works with select fields."),s.hasOwnProperty(i)){if(s.init(n,this),"show"===i)return s.show(n);if(s.$elem.data("barrating"))return s.$widget=t(this).next(".br-widget"),s[i](n)}else{if("object"==typeof i||!i)return n=i,s.init(n,this),s.show();t.error("Method "+i+" does not exist on jQuery.barrating")}})},t.fn.barrating.defaults={theme:"",initialRating:null,allowEmpty:null,emptyValue:"",showValues:!1,showSelectedRating:!0,deselectable:!0,reverse:!1,readonly:!1,fastClicks:!0,hoverState:!0,silent:!1,onSelect:function(t,e,i){},onClear:function(t,e){},onDestroy:function(t,e){}},t.fn.barrating.BarRating=e}),"undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");!function(t){"use strict";var e=jQuery.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(),function(t){"use strict";t.fn.emulateTransitionEnd=function(e){var i=!1,n=this;return t(this).one("bsTransitionEnd",function(){i=!0}),setTimeout(function(){i||t(n).trigger(t.support.transition.end)},e),this},t(function(){t.support.transition=function(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]};return!1}(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.close=function(e){function n(){a.detach().trigger("closed.bs.alert").remove()}var s=t(this),o=s.attr("data-target");o||(o=(o=s.attr("href"))&&o.replace(/.*(?=#[^\s]*$)/,""));var a=t("#"===o?[]:o);e&&e.preventDefault(),a.length||(a=s.closest(".alert")),a.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(a.removeClass("in"),t.support.transition&&a.hasClass("fade")?a.one("bsTransitionEnd",n).emulateTransitionEnd(i.TRANSITION_DURATION):n())};var n=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var n=t(this),s=n.data("bs.alert");s||n.data("bs.alert",s=new i(this)),"string"==typeof e&&s[e].call(n)})},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=n,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.button"),o="object"==typeof e&&e;s||n.data("bs.button",s=new i(this,o)),"toggle"==e?s.toggle():e&&s.setState(e)})}var i=function(e,n){this.$element=t(e),this.options=t.extend({},i.DEFAULTS,n),this.isLoading=!1};i.VERSION="3.3.7",i.DEFAULTS={loadingText:"loading..."},i.prototype.setState=function(e){var i="disabled",n=this.$element,s=n.is("input")?"val":"html",o=n.data();e+="Text",null==o.resetText&&n.data("resetText",n[s]()),setTimeout(t.proxy(function(){n[s](null==o[e]?this.options[e]:o[e]),"loadingText"==e?(this.isLoading=!0,n.addClass(i).attr(i,i).prop(i,!0)):this.isLoading&&(this.isLoading=!1,n.removeClass(i).removeAttr(i).prop(i,!1))},this),0)},i.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle="buttons"]');if(e.length){var i=this.$element.find("input");"radio"==i.prop("type")?(i.prop("checked")&&(t=!1),e.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==i.prop("type")&&(i.prop("checked")!==this.$element.hasClass("active")&&(t=!1),this.$element.toggleClass("active")),i.prop("checked",this.$element.hasClass("active")),t&&i.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var n=t.fn.button;t.fn.button=e,t.fn.button.Constructor=i,t.fn.button.noConflict=function(){return t.fn.button=n,this},t(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(i){var n=t(i.target).closest(".btn");e.call(n,"toggle"),t(i.target).is('input[type="radio"], input[type="checkbox"]')||(i.preventDefault(),n.is("input,button")?n.trigger("focus"):n.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(e){t(e.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.carousel"),o=t.extend({},i.DEFAULTS,n.data(),"object"==typeof e&&e),a="string"==typeof e?e:o.slide;s||n.data("bs.carousel",s=new i(this,o)),"number"==typeof e?s.to(e):a?s[a]():o.interval&&s.pause().cycle()})}var i=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",t.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",t.proxy(this.pause,this)).on("mouseleave.bs.carousel",t.proxy(this.cycle,this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=600,i.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},i.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},i.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},i.prototype.getItemIndex=function(t){return this.$items=t.parent().children(".item"),this.$items.index(t||this.$active)},i.prototype.getItemForDirection=function(t,e){var i=this.getItemIndex(e);if(("prev"==t&&0===i||"next"==t&&i==this.$items.length-1)&&!this.options.wrap)return e;var n=(i+("prev"==t?-1:1))%this.$items.length;return this.$items.eq(n)},i.prototype.to=function(t){var e=this,i=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){e.to(t)}):i==t?this.pause().cycle():this.slide(t>i?"next":"prev",this.$items.eq(t))},i.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},i.prototype.next=function(){if(!this.sliding)return this.slide("next")},i.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},i.prototype.slide=function(e,n){var s=this.$element.find(".item.active"),o=n||this.getItemForDirection(e,s),a=this.interval,r="next"==e?"left":"right",l=this;if(o.hasClass("active"))return this.sliding=!1;var h=o[0],c=t.Event("slide.bs.carousel",{relatedTarget:h,direction:r});if(this.$element.trigger(c),!c.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var u=t(this.$indicators.children()[this.getItemIndex(o)]);u&&u.addClass("active")}var d=t.Event("slid.bs.carousel",{relatedTarget:h,direction:r});return t.support.transition&&this.$element.hasClass("slide")?(o.addClass(e),o[0].offsetWidth,s.addClass(r),o.addClass(r),s.one("bsTransitionEnd",function(){o.removeClass([e,r].join(" ")).addClass("active"),s.removeClass(["active",r].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger(d)},0)}).emulateTransitionEnd(i.TRANSITION_DURATION)):(s.removeClass("active"),o.addClass("active"),this.sliding=!1,this.$element.trigger(d)),a&&this.cycle(),this}};var n=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=i,t.fn.carousel.noConflict=function(){return t.fn.carousel=n,this};var s=function(i){
var n,s=t(this),o=t(s.attr("data-target")||(n=s.attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,""));if(o.hasClass("carousel")){var a=t.extend({},o.data(),s.data()),r=s.attr("data-slide-to");r&&(a.interval=!1),e.call(o,a),r&&o.data("bs.carousel").to(r),i.preventDefault()}};t(document).on("click.bs.carousel.data-api","[data-slide]",s).on("click.bs.carousel.data-api","[data-slide-to]",s),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var i=t(this);e.call(i,i.data())})})}(jQuery),function(t){"use strict";function e(e){var i,n=e.attr("data-target")||(i=e.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"");return t(n)}function i(e){return this.each(function(){var i=t(this),s=i.data("bs.collapse"),o=t.extend({},n.DEFAULTS,i.data(),"object"==typeof e&&e);!s&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),s||i.data("bs.collapse",s=new n(this,o)),"string"==typeof e&&s[e]()})}var n=function(e,i){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,i),this.$trigger=t('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};n.VERSION="3.3.7",n.TRANSITION_DURATION=350,n.DEFAULTS={toggle:!0},n.prototype.dimension=function(){return this.$element.hasClass("width")?"width":"height"},n.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e,s=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(s&&s.length&&(e=s.data("bs.collapse"))&&e.transitioning)){var o=t.Event("show.bs.collapse");if(this.$element.trigger(o),!o.isDefaultPrevented()){s&&s.length&&(i.call(s,"hide"),e||s.data("bs.collapse",null));var a=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[a](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var r=function(){this.$element.removeClass("collapsing").addClass("collapse in")[a](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!t.support.transition)return r.call(this);var l=t.camelCase(["scroll",a].join("-"));this.$element.one("bsTransitionEnd",t.proxy(r,this)).emulateTransitionEnd(n.TRANSITION_DURATION)[a](this.$element[0][l])}}}},n.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=t.Event("hide.bs.collapse");if(this.$element.trigger(e),!e.isDefaultPrevented()){var i=this.dimension();this.$element[i](this.$element[i]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var s=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};if(!t.support.transition)return s.call(this);this.$element[i](0).one("bsTransitionEnd",t.proxy(s,this)).emulateTransitionEnd(n.TRANSITION_DURATION)}}},n.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},n.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(t.proxy(function(i,n){var s=t(n);this.addAriaAndCollapsedClass(e(s),s)},this)).end()},n.prototype.addAriaAndCollapsedClass=function(t,e){var i=t.hasClass("in");t.attr("aria-expanded",i),e.toggleClass("collapsed",!i).attr("aria-expanded",i)};var s=t.fn.collapse;t.fn.collapse=i,t.fn.collapse.Constructor=n,t.fn.collapse.noConflict=function(){return t.fn.collapse=s,this},t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(n){var s=t(this);s.attr("data-target")||n.preventDefault();var o=e(s),a=o.data("bs.collapse")?"toggle":s.data();i.call(o,a)})}(jQuery),function(t){"use strict";function e(e){var i=e.attr("data-target");i||(i=(i=e.attr("href"))&&/#[A-Za-z]/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var n=i&&t(i);return n&&n.length?n:e.parent()}function i(i){i&&3===i.which||(t(n).remove(),t(s).each(function(){var n=t(this),s=e(n),o={relatedTarget:this};s.hasClass("open")&&(i&&"click"==i.type&&/input|textarea/i.test(i.target.tagName)&&t.contains(s[0],i.target)||(s.trigger(i=t.Event("hide.bs.dropdown",o)),i.isDefaultPrevented()||(n.attr("aria-expanded","false"),s.removeClass("open").trigger(t.Event("hidden.bs.dropdown",o)))))}))}var n=".dropdown-backdrop",s='[data-toggle="dropdown"]',o=function(e){t(e).on("click.bs.dropdown",this.toggle)};o.VERSION="3.3.7",o.prototype.toggle=function(n){var s=t(this);if(!s.is(".disabled, :disabled")){var o=e(s),a=o.hasClass("open");if(i(),!a){"ontouchstart"in document.documentElement&&!o.closest(".navbar-nav").length&&t(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(t(this)).on("click",i);var r={relatedTarget:this};if(o.trigger(n=t.Event("show.bs.dropdown",r)),n.isDefaultPrevented())return;s.trigger("focus").attr("aria-expanded","true"),o.toggleClass("open").trigger(t.Event("shown.bs.dropdown",r))}return!1}},o.prototype.keydown=function(i){if(/(38|40|27|32)/.test(i.which)&&!/input|textarea/i.test(i.target.tagName)){var n=t(this);if(i.preventDefault(),i.stopPropagation(),!n.is(".disabled, :disabled")){var o=e(n),a=o.hasClass("open");if(!a&&27!=i.which||a&&27==i.which)return 27==i.which&&o.find(s).trigger("focus"),n.trigger("click");var r=o.find(".dropdown-menu li:not(.disabled):visible a");if(r.length){var l=r.index(i.target);38==i.which&&l>0&&l--,40==i.which&&l<r.length-1&&l++,~l||(l=0),r.eq(l).trigger("focus")}}}};var a=t.fn.dropdown;t.fn.dropdown=function(e){return this.each(function(){var i=t(this),n=i.data("bs.dropdown");n||i.data("bs.dropdown",n=new o(this)),"string"==typeof e&&n[e].call(i)})},t.fn.dropdown.Constructor=o,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=a,this},t(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",s,o.prototype.toggle).on("keydown.bs.dropdown.data-api",s,o.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",o.prototype.keydown)}(jQuery),function(t){"use strict";function e(e,n){return this.each(function(){var s=t(this),o=s.data("bs.modal"),a=t.extend({},i.DEFAULTS,s.data(),"object"==typeof e&&e);o||s.data("bs.modal",o=new i(this,a)),"string"==typeof e?o[e](n):a.show&&o.show(n)})}var i=function(e,i){this.options=i,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,t.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};i.VERSION="3.3.7",i.TRANSITION_DURATION=300,i.BACKDROP_TRANSITION_DURATION=150,i.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},i.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},i.prototype.show=function(e){var n=this,s=t.Event("show.bs.modal",{relatedTarget:e});this.$element.trigger(s),this.isShown||s.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',t.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){n.$element.one("mouseup.dismiss.bs.modal",function(e){t(e.target).is(n.$element)&&(n.ignoreBackdropClick=!0)})}),this.backdrop(function(){var s=t.support.transition&&n.$element.hasClass("fade");n.$element.parent().length||n.$element.appendTo(n.$body),n.$element.show().scrollTop(0),n.adjustDialog(),s&&n.$element[0].offsetWidth,n.$element.addClass("in"),n.enforceFocus();var o=t.Event("shown.bs.modal",{relatedTarget:e});s?n.$dialog.one("bsTransitionEnd",function(){n.$element.trigger("focus").trigger(o)}).emulateTransitionEnd(i.TRANSITION_DURATION):n.$element.trigger("focus").trigger(o)}))},i.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),t.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",t.proxy(this.hideModal,this)).emulateTransitionEnd(i.TRANSITION_DURATION):this.hideModal())},i.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger("focus")},this))},i.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},i.prototype.resize=function(){this.isShown?t(window).on("resize.bs.modal",t.proxy(this.handleUpdate,this)):t(window).off("resize.bs.modal")},i.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass("modal-open"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger("hidden.bs.modal")})},i.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},i.prototype.backdrop=function(e){var n=this,s=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&s;if(this.$backdrop=t(document.createElement("div")).addClass("modal-backdrop "+s).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",t.proxy(function(t){this.ignoreBackdropClick?this.ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;o?this.$backdrop.one("bsTransitionEnd",e).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var a=function(){n.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",a).emulateTransitionEnd(i.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},i.prototype.handleUpdate=function(){this.adjustDialog()},i.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:""})},i.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},i.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},i.prototype.setScrollbar=function(){var t=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",t+this.scrollbarWidth)},i.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},i.prototype.measureScrollbar=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var n=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=i,t.fn.modal.noConflict=function(){return t.fn.modal=n,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(i){var n=t(this),s=n.attr("href"),o=t(n.attr("data-target")||s&&s.replace(/.*(?=#[^\s]+$)/,"")),a=o.data("bs.modal")?"toggle":t.extend({remote:!/#/.test(s)&&s},o.data(),n.data());n.is("a")&&i.preventDefault(),o.one("show.bs.modal",function(t){t.isDefaultPrevented()||o.one("hidden.bs.modal",function(){n.is(":visible")&&n.trigger("focus")})}),e.call(o,a,this)})}(jQuery),function(t){"use strict";var e=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",t,e)};e.VERSION="3.3.7",e.TRANSITION_DURATION=150,e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},e.prototype.init=function(e,i,n){if(this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(n),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var s=this.options.trigger.split(" "),o=s.length;o--;){var a=s[o];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focusin",l="hover"==a?"mouseleave":"focusout";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return(e=t.extend({},this.getDefaults(),this.$element.data(),e)).delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.getDelegateOptions=function(){var e={},i=this.getDefaults();return this._options&&t.each(this._options,function(t,n){i[t]!=n&&(e[t]=n)}),e},e.prototype.enter=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);return i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusin"==e.type?"focus":"hover"]=!0),i.tip().hasClass("in")||"in"==i.hoverState?void(i.hoverState="in"):(clearTimeout(i.timeout),i.hoverState="in",i.options.delay&&i.options.delay.show?void(i.timeout=setTimeout(function(){"in"==i.hoverState&&i.show()},i.options.delay.show)):i.show())},e.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget).data("bs."+this.type);if(i||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i)),e instanceof t.Event&&(i.inState["focusout"==e.type?"focus":"hover"]=!1),!i.isInStateTrue()){if(clearTimeout(i.timeout),i.hoverState="out",!i.options.delay||!i.options.delay.hide)return i.hide();i.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide)}},e.prototype.show=function(){var i=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(i);var n=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(i.isDefaultPrevented()||!n)return;var s=this,o=this.tip(),a=this.getUID(this.type);this.setContent(),o.attr("id",a),this.$element.attr("aria-describedby",a),this.options.animation&&o.addClass("fade");var r="function"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,l=/\s?auto?\s?/i,h=l.test(r);h&&(r=r.replace(l,"")||"top"),o.detach().css({top:0,left:0,display:"block"}).addClass(r).data("bs."+this.type,this),this.options.container?o.appendTo(this.options.container):o.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var c=this.getPosition(),u=o[0].offsetWidth,d=o[0].offsetHeight;if(h){var p=r,f=this.getPosition(this.$viewport);r="bottom"==r&&c.bottom+d>f.bottom?"top":"top"==r&&c.top-d<f.top?"bottom":"right"==r&&c.right+u>f.width?"left":"left"==r&&c.left-u<f.left?"right":r,o.removeClass(p).addClass(r)}var g=this.getCalculatedOffset(r,c,u,d);this.applyPlacement(g,r);var m=function(){var t=s.hoverState;s.$element.trigger("shown.bs."+s.type),s.hoverState=null,"out"==t&&s.leave(s)};t.support.transition&&this.$tip.hasClass("fade")?o.one("bsTransitionEnd",m).emulateTransitionEnd(e.TRANSITION_DURATION):m()}},e.prototype.applyPlacement=function(e,i){var n=this.tip(),s=n[0].offsetWidth,o=n[0].offsetHeight,a=parseInt(n.css("margin-top"),10),r=parseInt(n.css("margin-left"),10);isNaN(a)&&(a=0),isNaN(r)&&(r=0),e.top+=a,e.left+=r,t.offset.setOffset(n[0],t.extend({using:function(t){n.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),n.addClass("in");var l=n[0].offsetWidth,h=n[0].offsetHeight;"top"==i&&h!=o&&(e.top=e.top+o-h);var c=this.getViewportAdjustedDelta(i,e,l,h);c.left?e.left+=c.left:e.top+=c.top;var u=/top|bottom/.test(i),d=u?2*c.left-s+l:2*c.top-o+h,p=u?"offsetWidth":"offsetHeight";n.offset(e),this.replaceArrow(d,n[0][p],u)},e.prototype.replaceArrow=function(t,e,i){this.arrow().css(i?"left":"top",50*(1-t/e)+"%").css(i?"top":"left","")},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},e.prototype.hide=function(i){function n(){"in"!=s.hoverState&&o.detach(),s.$element&&s.$element.removeAttr("aria-describedby").trigger("hidden.bs."+s.type),i&&i()}var s=this,o=t(this.$tip),a=t.Event("hide.bs."+this.type);if(this.$element.trigger(a),!a.isDefaultPrevented())return o.removeClass("in"),t.support.transition&&o.hasClass("fade")?o.one("bsTransitionEnd",n).emulateTransitionEnd(e.TRANSITION_DURATION):n(),this.hoverState=null,this},e.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},e.prototype.hasContent=function(){return this.getTitle()},e.prototype.getPosition=function(e){var i=(e=e||this.$element)[0],n="BODY"==i.tagName,s=i.getBoundingClientRect();null==s.width&&(s=t.extend({},s,{width:s.right-s.left,height:s.bottom-s.top}));var o=window.SVGElement&&i instanceof window.SVGElement,a=n?{top:0,left:0}:o?null:e.offset(),r={scroll:n?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},l=n?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},s,r,l,a)},e.prototype.getCalculatedOffset=function(t,e,i,n){return"bottom"==t?{top:e.top+e.height,left:e.left+e.width/2-i/2}:"top"==t?{top:e.top-n,left:e.left+e.width/2-i/2}:"left"==t?{top:e.top+e.height/2-n/2,left:e.left-i}:{top:e.top+e.height/2-n/2,left:e.left+e.width}},e.prototype.getViewportAdjustedDelta=function(t,e,i,n){var s={top:0,left:0};if(!this.$viewport)return s;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var r=e.top-o-a.scroll,l=e.top+o-a.scroll+n;r<a.top?s.top=a.top-r:l>a.top+a.height&&(s.top=a.top+a.height-l)}else{var h=e.left-o,c=e.left+o+i;h<a.left?s.left=a.left-h:c>a.right&&(s.left=a.left+a.width-c)}return s},e.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr("data-original-title")||("function"==typeof e.title?e.title.call(t[0]):e.title)},e.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},e.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},e.prototype.enable=function(){this.enabled=!0},e.prototype.disable=function(){this.enabled=!1},e.prototype.toggleEnabled=function(){this.enabled=!this.enabled},e.prototype.toggle=function(e){var i=this;e&&((i=t(e.currentTarget).data("bs."+this.type))||(i=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data("bs."+this.type,i))),e?(i.inState.click=!i.inState.click,i.isInStateTrue()?i.enter(i):i.leave(i)):i.tip().hasClass("in")?i.leave(i):i.enter(i)},e.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off("."+t.type).removeData("bs."+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var i=t.fn.tooltip;t.fn.tooltip=function(i){return this.each(function(){var n=t(this),s=n.data("bs.tooltip"),o="object"==typeof i&&i;!s&&/destroy|hide/.test(i)||(s||n.data("bs.tooltip",s=new e(this,o)),"string"==typeof i&&s[i]())})},t.fn.tooltip.Constructor=e,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(jQuery),function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};if(!t.fn.tooltip)throw new Error("Popover requires tooltip.js");e.VERSION="3.3.7",e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),(e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype)).constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof i?"html":"append":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title").html()||t.find(".popover-title").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr("data-content")||("function"==typeof e.content?e.content.call(t[0]):e.content)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var i=t.fn.popover;t.fn.popover=function(i){return this.each(function(){var n=t(this),s=n.data("bs.popover"),o="object"==typeof i&&i;!s&&/destroy|hide/.test(i)||(s||n.data("bs.popover",s=new e(this,o)),"string"==typeof i&&s[i]())})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(jQuery),function(t){"use strict";function e(i,n){this.$body=t(document.body),this.$scrollElement=t(t(i).is(document.body)?window:i),this.options=t.extend({},e.DEFAULTS,n),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",t.proxy(this.process,this)),this.refresh(),this.process()}function i(i){return this.each(function(){var n=t(this),s=n.data("bs.scrollspy"),o="object"==typeof i&&i;s||n.data("bs.scrollspy",s=new e(this,o)),"string"==typeof i&&s[i]()})}e.VERSION="3.3.7",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,i="offset",n=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(i="position",n=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),s=e.data("target")||e.attr("href"),o=/^#./.test(s)&&t(s);return o&&o.length&&o.is(":visible")&&[[o[i]().top+n,s]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.getScrollHeight(),n=this.options.offset+i-this.$scrollElement.height(),s=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=i&&this.refresh(),e>=n)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<s[0])return this.activeTarget=null,this.clear();for(t=s.length;t--;)a!=o[t]&&e>=s[t]&&(void 0===s[t+1]||e<s[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',n=t(i).parents("li").addClass("active");n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate.bs.scrollspy")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var n=t.fn.scrollspy;t.fn.scrollspy=i,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=n,this},t(window).on("load.bs.scrollspy.data-api",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);i.call(e,e.data())})})}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.tab");s||n.data("bs.tab",s=new i(this)),"string"==typeof e&&s[e]()})}var i=function(e){this.element=t(e)};i.VERSION="3.3.7",i.TRANSITION_DURATION=150,i.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),n=e.data("target");if(n||(n=(n=e.attr("href"))&&n.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var s=i.find(".active:last a"),o=t.Event("hide.bs.tab",{relatedTarget:e[0]}),a=t.Event("show.bs.tab",{relatedTarget:s[0]});if(s.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var r=t(n);this.activate(e.closest("li"),i),this.activate(r,r.parent(),function(){s.trigger({type:"hidden.bs.tab",relatedTarget:e[0]}),e.trigger({type:"shown.bs.tab",relatedTarget:s[0]})})}}},i.prototype.activate=function(e,n,s){function o(){a.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),e.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),r?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu").length&&e.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),s&&s()}var a=n.find("> .active"),r=s&&t.support.transition&&(a.length&&a.hasClass("fade")||!!n.find("> .fade").length);a.length&&r?a.one("bsTransitionEnd",o).emulateTransitionEnd(i.TRANSITION_DURATION):o(),a.removeClass("in")};var n=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=i,t.fn.tab.noConflict=function(){return t.fn.tab=n,this};var s=function(i){i.preventDefault(),e.call(t(this),"show")};t(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',s).on("click.bs.tab.data-api",'[data-toggle="pill"]',s)}(jQuery),function(t){"use strict";function e(e){return this.each(function(){var n=t(this),s=n.data("bs.affix"),o="object"==typeof e&&e;s||n.data("bs.affix",s=new i(this,o)),"string"==typeof e&&s[e]()})}var i=function(e,n){this.options=t.extend({},i.DEFAULTS,n),this.$target=t(this.options.target).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};i.VERSION="3.3.7",i.RESET="affix affix-top affix-bottom",i.DEFAULTS={offset:0,target:window},i.prototype.getState=function(t,e,i,n){var s=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=i&&"top"==this.affixed)return s<i&&"top";if("bottom"==this.affixed)return null!=i?!(s+this.unpin<=o.top)&&"bottom":!(s+a<=t-n)&&"bottom";var r=null==this.affixed,l=r?s:o.top;return null!=i&&s<=i?"top":null!=n&&l+(r?a:e)>=t-n&&"bottom"},i.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(i.RESET).addClass("affix");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},i.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},i.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=this.$element.height(),n=this.options.offset,s=n.top,o=n.bottom,a=Math.max(t(document).height(),t(document.body).height());"object"!=typeof n&&(o=s=n),"function"==typeof s&&(s=n.top(this.$element)),"function"==typeof o&&(o=n.bottom(this.$element));var r=this.getState(a,e,s,o);if(this.affixed!=r){null!=this.unpin&&this.$element.css("top","");var l="affix"+(r?"-"+r:""),h=t.Event(l+".bs.affix");if(this.$element.trigger(h),h.isDefaultPrevented())return;this.affixed=r,this.unpin="bottom"==r?this.getPinnedOffset():null,this.$element.removeClass(i.RESET).addClass(l).trigger(l.replace("affix","affixed")+".bs.affix")}"bottom"==r&&this.$element.offset({top:a-e-o})}};var n=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=i,t.fn.affix.noConflict=function(){return t.fn.affix=n,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var i=t(this),n=i.data();n.offset=n.offset||{},null!=n.offsetBottom&&(n.offset.bottom=n.offsetBottom),null!=n.offsetTop&&(n.offset.top=n.offsetTop),e.call(i,n)})})}(jQuery),function(t){"use strict";function e(t){if(!t)return"";var e,i="";for(e=0;e<t.length;e+=1)i+=M[t.charAt(e)]||t.charAt(e);return i}function i(t){return t.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function n(t){return void 0!==t}function s(e,i,o,a){return n(e)&&!t.isArray(e)?t.isFunction(e)?e.apply(this,i):a:n(o)?s.call(this,o,i):a}function o(t,e,i,o){return s.call(this,n(this.source[e])&&Object.prototype.hasOwnProperty.call(this.source[e],t)?this.source[e][t]:void 0,i,function(){return s.call(this,n(this[t][e])?this[t][e]:n(this[t][0])?this[t][0]:Object.prototype.hasOwnProperty.call(this,t)?this[t]:void 0,i,S[t][e]||S[t][0]||S[t],o)},o)}function a(e,i){return n(i)||(i=0),t.isArray(this.source)&&n(this.source[i])&&n(this.source[i][e])?this.source[i][e]:n(this[e])?t.isArray(this[e])?n(this[e][i])?this[e][i]:n(this[e][0])?this[e][0]:null:this[e]:null}function r(e,i,n,s){i.xhr&&i.xhr.abort(),i.xhr=t.ajax(t.extend(!0,{url:e,type:"GET",async:!0,cache:!1,dataType:"json"},i.ajax)).done(function(e){n&&n.apply(this,t.makeArray(arguments))}).fail(function(t,e){s&&console.log("Request failed: "+e)})}function l(t,e){var i,n=!1;for(i=0;i<t.length;i+=1)if(n=o.call(this,"findRight",i,[t[i],e,i]))return{right:n,source:i};return!1}function h(t,e){var i;for(function(t,e){for(var i=0;i<t.length;i++)t[i]=o.call(this,"preparse",i,[t[i],e],t[i])}.call(this,t,e),i=0;i<t.length;i+=1)t[i]=o.call(this,"filter",i,[t[i],e,i],t[i])}function c(e,i,a){var l,h=this;if(t.isFunction(h.source))h.source.apply(h,[e,function(t){i=[t],s.call(h,a,[e])},i,0]);else for(l=0;l<h.source.length;l+=1)if(t.isArray(h.source[l]))i[l]=h.source[l];else if(t.isFunction(h.source[l]))!function(n){h.source[n].apply(h,[e,function(o){if(i[n]||(i[n]=[]),o&&t.isArray(o))switch(h.appendMethod){case"replace":i[n]=o;break;default:i[n]=i[n].concat(o)}s.call(h,a,[e])},i,n])}(l);else switch(h.source[l].type){case"remote":if(n(h.source[l].url)&&(!n(h.source[l].minLength)||e.length>=h.source[l].minLength)){var c=o.call(h,"replace",l,[h.source[l].url,e],"");i[l]||(i[l]=[]),function(t){r(c,h.source[t],function(n){i[t]=n,s.call(h,a,[e])},h.debug)}(l)}break;default:n(h.source[l].data)?i[l]=h.source[l].data:i[l]=h.source[l]}s.call(h,a,[e])}function u(t,e){return!!(n(t.data("source"))&&n(t.data("pid"))&&n(e[t.data("source")])&&n(e[t.data("source")][t.data("pid")]))&&e[t.data("source")][t.data("pid")]}function d(e,i){function s(){if(E.val()!=N){if((N=E.val()).length<i.minLength)return void E.trigger("close.xdsoft");c.call(i,N,M,function(t){var e;if(t==N)if(h.call(i,M,t),E.trigger("updateContent.xdsoft"),i.showHint&&N.length&&N.length<=E.prop("size")&&(e=l.call(i,M,N))){
var n=o.call(i,"getTitle",e.source,[e.right,e.source]);n=t+n.substr(t.length),S.val(n)}else S.val("")})}}if(!t(e).hasClass("xdsoft_input")){var a,r=t('<div class="xdsoft_autocomplete"></div>'),d=t('<div class="xdsoft_autocomplete_dropdown"></div>'),S=t('<input readonly class="xdsoft_autocomplete_hint"/>'),E=t(e),M=[],A=!1,O="",N="",H=null,z=0;E.data("autocomplete_options",i),d.on("mousedown",function(t){t.preventDefault(),t.stopPropagation()}).on("updatescroll.xdsoft",function(){var t=d.find(".active");if(t.length){var e=t.position().top,i=t.outerHeight(!0),n=d.scrollTop(),s=d.height();e<0?d.scrollTop(n-Math.abs(e)):e+i>s&&d.scrollTop(n+e+i-s)}}),r.css({display:E.css("display"),width:E.css("width")}),i.style&&r.css(i.style),E.addClass("xdsoft_input").attr("autocomplete","off");var L=null,W=null,R=!1;d.on("mousemove","div",function(){if(t(this).hasClass("active"))return!0;d.find("div").removeClass("active"),t(this).addClass("active")}).on("mousedown","div",function(e){d.find("div").removeClass("active"),t(this).addClass("active"),E.trigger("pick.xdsoft")}).on("touchstart","div",function(t){L=t.originalEvent.touches[0].clientX,W=t.originalEvent.touches[0].clientY}).on("touchend","div",function(e){!1===R&&(d.find("div").removeClass("active"),t(this).addClass("active"),E.trigger("pick.xdsoft")),R=!1}).on("touchmove","div",function(t){if(L&&W){var e=t.originalEvent.touches[0].clientX,i=t.originalEvent.touches[0].clientY,n=L-e,s=W-i;R=Math.abs(n)>Math.abs(s)?n>0?"left":"right":s>0?"top":"bottm",L=null,W=null}}),E.data("xdsoft_autocomplete",M).after(r).on("pick.xdsoft",function(t,e){E.trigger("timepick.xdsoft",e),N=E.val(),E.trigger("close.xdsoft"),(H=d.find("div.active").eq(0)).length||(H=d.children().first()),E.trigger("selected.xdsoft",[u(H,M)]),i.afterSelected&&i.afterSelected()}).on("timepick.xdsoft",function(t,e){(H=d.find("div.active")).length||(H=d.children().first()),H.length&&(n(e)?E.val(e):E.val(function(t,e){var i=u(t,e);return i?o.call(this,"getValue",t.data("source"),[i,t.data("source")]):n(t.data("value"))?decodeURIComponent(t.data("value")):t.html()}.call(i,H,M)),E.trigger("autocompleted.xdsoft",[u(H,M)]),S.val(""),function(t,e){if(t.setSelectionRange)t.focus(),t.setSelectionRange(e,e);else if(t.createTextRange){var i=t.createTextRange();i.collapse(!0),i.moveEnd("character",e),i.moveStart("character",e),i.select()}}(E[0],E.val().length))}).on("keydown.xdsoft input.xdsoft cut.xdsoft paste.xdsoft",function(t){var e=function(t){var e,n=t.keyCode;switch(n){case x:case C:case k:case T:case D:if(t.shiftKey||t.ctrlKey)return!0;break;case _:case b:return!0;case f:case p:return!!(I||P||t.shiftKey||t.ctrlKey)||(O=E.val(),z=function(t){if(t){if(t.selectionStart)return t.selectionStart;if(document.selection){t.focus();var e=document.selection.createRange(),i=document.selection.createRange().text.length;return e.moveStart("character",-t.value.length),e.text.length-i}}}(E[0]),n!==f||z!==O.length||((e=l.call(i,M,O))?E.trigger("pick.xdsoft",[o.call(i,"getValue",e.source,[e.right,e.source])]):E.trigger("pick.xdsoft"),t.preventDefault(),!1));case v:return!0;case y:return!A||(E.trigger("pick.xdsoft"),t.preventDefault(),!1);case w:return E.val(N).trigger("close.xdsoft"),t.preventDefault(),!1;case m:case g:if(!A)return E.trigger("open.xdsoft"),E.trigger("updateContent.xdsoft"),t.preventDefault(),!1;H=d.find("div.active");var s=n==m?"next":"prev",a=!0;return H.length?(H.removeClass("active"),H[s]().length?H[s]().addClass("active"):(E.val(N),a=!1)):d.children().eq(n==m?0:-1).addClass("active"),a&&E.trigger("timepick.xdsoft"),d.trigger("updatescroll.xdsoft"),t.preventDefault(),!1}}(t);if(!1===e||!0===e)return e;setTimeout(function(){s()},1),s()}).on("change.xdsoft",function(t){N=E.val()}),N=E.val(),c.call(i,E.val(),M,function(t){h.call(i,M,t)}),i.openOnFocus&&E.on("focusin.xdsoft",function(){E.trigger("open.xdsoft"),E.trigger("updateContent.xdsoft")}),i.closeOnBlur&&E.on("focusout.xdsoft",function(){E.trigger("close.xdsoft")}),r.append(E).append(d);var $=!1,j=0;E.on("updateHelperPosition.xdsoft",function(){clearTimeout(j),j=setTimeout(function(){if(r.css({display:E.css("display"),width:E.css("width")}),d.css(t.extend(!0,{left:E.position().left,top:E.position().top+parseInt(E.css("marginTop"))+parseInt(E[0].offsetHeight),marginLeft:E.css("marginLeft"),marginRight:E.css("marginRight"),width:"100%"==i.dropdownWidth?E[0].offsetWidth:i.dropdownWidth},i.dropdownStyle)),i.showHint){var e=getComputedStyle(E[0],"");S[0].style.cssText=e.cssText,S.css({"box-sizing":e.boxSizing,borderStyle:"solid",borderCollapse:e.borderCollapse,borderLeftWidth:e.borderLeftWidth,borderRightWidth:e.borderRightWidth,borderTopWidth:e.borderTopWidth,borderBottomWidth:e.borderBottomWidth,paddingBottom:e.paddingBottom,marginBottom:e.marginBottom,paddingTop:e.paddingTop,marginTop:e.marginTop,paddingLeft:e.paddingLeft,marginLeft:e.marginLeft,paddingRight:e.paddingRight,marginRight:e.marginRight,maxHeight:e.maxHeight,minHeight:e.minHeight,maxWidth:e.maxWidth,minWidth:e.minWidth,width:e.width,letterSpacing:e.letterSpacing,lineHeight:e.lineHeight,outlineWidth:e.outlineWidth,fontFamily:e.fontFamily,fontVariant:e.fontVariant,fontStyle:E.css("fontStyle"),fontSize:E.css("fontSize"),fontWeight:E.css("fontWeight"),flex:e.flex,justifyContent:e.justifyContent,borderRadius:e.borderRadius,"-webkit-box-shadow":"none","box-shadow":"none"}),E.css("font-size",E.css("fontSize")),S.innerHeight(E.innerHeight()),S.css(t.extend(!0,{position:"absolute",zIndex:"1",borderColor:"transparent",outlineColor:"transparent",left:E.position().left,top:E.position().top,background:E.css("background")},i.hintStyle)),!1!==$?S.css("background",$):$=E.css("background");try{E[0].style.setProperty("background","transparent","important")}catch(t){E.css("background","transparent")}r.append(S)}},i.timeoutUpdate||1)}),E.is(":visible")?E.trigger("updateHelperPosition.xdsoft"):a=setInterval(function(){E.is(":visible")&&(E.trigger("updateHelperPosition.xdsoft"),clearInterval(a))},100),t(window).on("resize",function(){r.css({width:"auto"}),E.trigger("updateHelperPosition.xdsoft")}),E.on("close.xdsoft",function(){A&&(d.hide(),S.val(""),i.autoselect||E.val(N),A=!1)}).on("updateContent.xdsoft",function(){var e,n=function(e,i){var n,s,a,r=[];for(n=0;n<e.length;n+=1)for(s=0;s<e[n].length&&!(r.length>=this.limit);s+=1)(a=t(o.call(this,"render",n,[e[n][s],n,s,i],""))).data("source",n),a.data("pid",s),a.data("item",e[n][s]),r.push(a);return r}.call(i,M,E.val());n.length?(E.trigger("open.xdsoft"),t(n).each(function(){this.css(t.extend(!0,{paddingLeft:E.css("paddingLeft"),paddingRight:E.css("paddingRight")},i.itemStyle))}),d.html(n),e=i.visibleHeight?i.visibleHeight:i.visibleLimit*((n[0]?n[0].outerHeight(!0):0)||i.defaultHeightItem)+5,d.css("maxHeight",e+"px")):E.trigger("close.xdsoft")}).on("open.xdsoft",function(){A||(d.show(),A=!0)}).on("destroy.xdsoft",function(){E.removeClass("xdsoft"),r.after(E),r.remove(),clearTimeout(0),clearTimeout(a),E.data("xdsoft_autocomplete",null),E.off(".xdsoft")})}}var p=37,f=39,g=38,m=40,v=9,b=17,_=16,y=13,w=27,x=65,C=67,k=86,T=90,D=89,S={},I=!1,P=!1,E={},M={"ẚ":"a","Á":"a","á":"a","À":"a","à":"a","Ă":"a","ă":"a","Ắ":"a","ắ":"a","Ằ":"a","ằ":"a","Ẵ":"a","ẵ":"a","Ẳ":"a","Ẫ":"a","ẫ":"a","Ẩ":"a","ẩ":"a","Ǎ":"a","ǎ":"a","Å":"a","å":"a","Ǻ":"a","ǻ":"a","Ä":"a","ä":"a","Ǟ":"a","ǟ":"a","Ã":"a","ã":"a","Ȧ":"a","ȧ":"a","Ǡ":"a","ǡ":"a","Ą":"a","ą":"a","Ā":"a","ā":"a","Ả":"a","ả":"a","Ȁ":"a","ȁ":"a","Ȃ":"a","ȃ":"a","Ạ":"a","ạ":"a","Ặ":"a","ặ":"a","Ậ":"a","ậ":"a","Ḁ":"a","ḁ":"a","Ⱥ":"a","ⱥ":"a","Ǽ":"a","ǽ":"a","Ǣ":"a","ǣ":"a","Ḃ":"b","ḃ":"b","Ḅ":"b","ḅ":"b","Ḇ":"b","ḇ":"b","Ƀ":"b","ƀ":"b","ᵬ":"b","Ɓ":"b","ɓ":"b","Ƃ":"b","ƃ":"b","Ć":"c","ć":"c","Ĉ":"c","ĉ":"c","Č":"c","č":"c","Ċ":"c","ċ":"c","Ç":"c","ç":"c","Ḉ":"c","ḉ":"c","Ȼ":"c","ȼ":"c","Ƈ":"c","ƈ":"c","ɕ":"c","Ď":"d","ď":"d","Ḋ":"d","ḋ":"d","Ḑ":"d","ḑ":"d","Ḍ":"d","ḍ":"d","Ḓ":"d","ḓ":"d","Ḏ":"d","ḏ":"d","Đ":"d","đ":"d","ᵭ":"d","Ɖ":"d","ɖ":"d","Ɗ":"d","ɗ":"d","Ƌ":"d","ƌ":"d","ȡ":"d","ð":"d","É":"e","Ə":"e","Ǝ":"e","ǝ":"e","é":"e","È":"e","è":"e","Ĕ":"e","ĕ":"e","Ê":"e","ê":"e","Ế":"e","ế":"e","Ề":"e","ề":"e","Ễ":"e","ễ":"e","Ể":"e","ể":"e","Ě":"e","ě":"e","Ë":"e","ë":"e","Ẽ":"e","ẽ":"e","Ė":"e","ė":"e","Ȩ":"e","ȩ":"e","Ḝ":"e","ḝ":"e","Ę":"e","ę":"e","Ē":"e","ē":"e","Ḗ":"e","ḗ":"e","Ḕ":"e","ḕ":"e","Ẻ":"e","ẻ":"e","Ȅ":"e","ȅ":"e","Ȇ":"e","ȇ":"e","Ẹ":"e","ẹ":"e","Ệ":"e","ệ":"e","Ḙ":"e","ḙ":"e","Ḛ":"e","ḛ":"e","Ɇ":"e","ɇ":"e","ɚ":"e","ɝ":"e","Ḟ":"f","ḟ":"f","ᵮ":"f","Ƒ":"f","ƒ":"f","Ǵ":"g","ǵ":"g","Ğ":"g","ğ":"g","Ĝ":"g","ĝ":"g","Ǧ":"g","ǧ":"g","Ġ":"g","ġ":"g","Ģ":"g","ģ":"g","Ḡ":"g","ḡ":"g","Ǥ":"g","ǥ":"g","Ɠ":"g","ɠ":"g","Ĥ":"h","ĥ":"h","Ȟ":"h","ȟ":"h","Ḧ":"h","ḧ":"h","Ḣ":"h","ḣ":"h","Ḩ":"h","ḩ":"h","Ḥ":"h","ḥ":"h","Ḫ":"h","ḫ":"h",H:"h","̱":"h","ẖ":"h","Ħ":"h","ħ":"h","Ⱨ":"h","ⱨ":"h","Í":"i","í":"i","Ì":"i","ì":"i","Ĭ":"i","ĭ":"i","Î":"i","î":"i","Ǐ":"i","ǐ":"i","Ï":"i","ï":"i","Ḯ":"i","ḯ":"i","Ĩ":"i","ĩ":"i","İ":"i",i:"i","Į":"i","į":"i","Ī":"i","ī":"i","Ỉ":"i","ỉ":"i","Ȉ":"i","ȉ":"i","Ȋ":"i","ȋ":"i","Ị":"i","ị":"i","Ḭ":"i","ḭ":"i",I:"i","ı":"i","Ɨ":"i","ɨ":"i","Ĵ":"j","ĵ":"j",J:"j","̌":"j","ǰ":"j","ȷ":"j","Ɉ":"j","ɉ":"j","ʝ":"j","ɟ":"j","ʄ":"j","Ḱ":"k","ḱ":"k","Ǩ":"k","ǩ":"k","Ķ":"k","ķ":"k","Ḳ":"k","ḳ":"k","Ḵ":"k","ḵ":"k","Ƙ":"k","ƙ":"k","Ⱪ":"k","ⱪ":"k","Ĺ":"a","ĺ":"l","Ľ":"l","ľ":"l","Ļ":"l","ļ":"l","Ḷ":"l","ḷ":"l","Ḹ":"l","ḹ":"l","Ḽ":"l","ḽ":"l","Ḻ":"l","ḻ":"l","Ł":"l","ł":"l","̣":"l","Ŀ":"l","ŀ":"l","Ƚ":"l","ƚ":"l","Ⱡ":"l","ⱡ":"l","Ɫ":"l","ɫ":"l","ɬ":"l","ɭ":"l","ȴ":"l","Ḿ":"m","ḿ":"m","Ṁ":"m","ṁ":"m","Ṃ":"m","ṃ":"m","ɱ":"m","Ń":"n","ń":"n","Ǹ":"n","ǹ":"n","Ň":"n","ň":"n","Ñ":"n","ñ":"n","Ṅ":"n","ṅ":"n","Ņ":"n","ņ":"n","Ṇ":"n","ṇ":"n","Ṋ":"n","ṋ":"n","Ṉ":"n","ṉ":"n","Ɲ":"n","ɲ":"n","Ƞ":"n","ƞ":"n","ɳ":"n","ȵ":"n",N:"n","̈":"n",n:"n","Ó":"o","ó":"o","Ò":"o","ò":"o","Ŏ":"o","ŏ":"o","Ô":"o","ô":"o","Ố":"o","ố":"o","Ồ":"o","ồ":"o","Ỗ":"o","ỗ":"o","Ổ":"o","ổ":"o","Ǒ":"o","ǒ":"o","Ö":"o","ö":"o","Ȫ":"o","ȫ":"o","Ő":"o","ő":"o","Õ":"o","õ":"o","Ṍ":"o","ṍ":"o","Ṏ":"o","ṏ":"o","Ȭ":"o","ȭ":"o","Ȯ":"o","ȯ":"o","Ȱ":"o","ȱ":"o","Ø":"o","ø":"o","Ǿ":"o","ǿ":"o","Ǫ":"o","ǫ":"o","Ǭ":"o","ǭ":"o","Ō":"o","ō":"o","Ṓ":"o","ṓ":"o","Ṑ":"o","ṑ":"o","Ỏ":"o","ỏ":"o","Ȍ":"o","ȍ":"o","Ȏ":"o","ȏ":"o","Ơ":"o","ơ":"o","Ớ":"o","ớ":"o","Ờ":"o","ờ":"o","Ỡ":"o","ỡ":"o","Ở":"o","ở":"o","Ợ":"o","ợ":"o","Ọ":"o","ọ":"o","Ộ":"o","ộ":"o","Ɵ":"o","ɵ":"o","Ṕ":"p","ṕ":"p","Ṗ":"p","ṗ":"p","Ᵽ":"p","Ƥ":"p","ƥ":"p",P:"p","̃":"p",p:"p","ʠ":"q","Ɋ":"q","ɋ":"q","Ŕ":"r","ŕ":"r","Ř":"r","ř":"r","Ṙ":"r","ṙ":"r","Ŗ":"r","ŗ":"r","Ȑ":"r","ȑ":"r","Ȓ":"r","ȓ":"r","Ṛ":"r","ṛ":"r","Ṝ":"r","ṝ":"r","Ṟ":"r","ṟ":"r","Ɍ":"r","ɍ":"r","ᵲ":"r","ɼ":"r","Ɽ":"r","ɽ":"r","ɾ":"r","ᵳ":"r","ß":"s","Ś":"s","ś":"s","Ṥ":"s","ṥ":"s","Ŝ":"s","ŝ":"s","Š":"s","š":"s","Ṧ":"s","ṧ":"s","Ṡ":"s","ṡ":"s","ẛ":"s","Ş":"s","ş":"s","Ṣ":"s","ṣ":"s","Ṩ":"s","ṩ":"s","Ș":"s","ș":"s","ʂ":"s",S:"s","̩":"s",s:"s","Þ":"t","þ":"t","Ť":"t","ť":"t",T:"t","ẗ":"t","Ṫ":"t","ṫ":"t","Ţ":"t","ţ":"t","Ṭ":"t","ṭ":"t","Ț":"t","ț":"t","Ṱ":"t","ṱ":"t","Ṯ":"t","ṯ":"t","Ŧ":"t","ŧ":"t","Ⱦ":"t","ⱦ":"t","ᵵ":"t","ƫ":"t","Ƭ":"t","ƭ":"t","Ʈ":"t","ʈ":"t","ȶ":"t","Ú":"u","ú":"u","Ù":"u","ù":"u","Ŭ":"u","ŭ":"u","Û":"u","û":"u","Ǔ":"u","ǔ":"u","Ů":"u","ů":"u","Ü":"u","ü":"u","Ǘ":"u","ǘ":"u","Ǜ":"u","ǜ":"u","Ǚ":"u","ǚ":"u","Ǖ":"u","ǖ":"u","Ű":"u","ű":"u","Ũ":"u","ũ":"u","Ṹ":"u","ṹ":"u","Ų":"u","ų":"u","Ū":"u","ū":"u","Ṻ":"u","ṻ":"u","Ủ":"u","ủ":"u","Ȕ":"u","ȕ":"u","Ȗ":"u","ȗ":"u","Ư":"u","ư":"u","Ứ":"u","ứ":"u","Ừ":"u","ừ":"u","Ữ":"u","ữ":"u","Ử":"u","ử":"u","Ự":"u","ự":"u","Ụ":"u","ụ":"u","Ṳ":"u","ṳ":"u","Ṷ":"u","ṷ":"u","Ṵ":"u","ṵ":"u","Ʉ":"u","ʉ":"u","Ṽ":"v","ṽ":"v","Ṿ":"v","ṿ":"v","Ʋ":"v","ʋ":"v","Ẃ":"w","ẃ":"w","Ẁ":"w","ẁ":"w","Ŵ":"w","ŵ":"w",W:"w","̊":"w","ẘ":"w","Ẅ":"w","ẅ":"w","Ẇ":"w","ẇ":"w","Ẉ":"w","ẉ":"w","Ẍ":"x","ẍ":"x","Ẋ":"x","ẋ":"x","Ý":"y","ý":"y","Ỳ":"y","ỳ":"y","Ŷ":"y","ŷ":"y",Y:"y","ẙ":"y","Ÿ":"y","ÿ":"y","Ỹ":"y","ỹ":"y","Ẏ":"y","ẏ":"y","Ȳ":"y","ȳ":"y","Ỷ":"y","ỷ":"y","Ỵ":"y","ỵ":"y","ʏ":"y","Ɏ":"y","ɏ":"y","Ƴ":"y","ƴ":"y","Ź":"z","ź":"z","Ẑ":"z","ẑ":"z","Ž":"z","ž":"z","Ż":"z","ż":"z","Ẓ":"z","ẓ":"z","Ẕ":"z","ẕ":"z","Ƶ":"z","ƶ":"z","Ȥ":"z","ȥ":"z","ʐ":"z","ʑ":"z","Ⱬ":"z","ⱬ":"z","Ǯ":"z","ǯ":"z","ƺ":"z","2":"2","6":"6","B":"B","F":"F","J":"J","N":"N","R":"R","V":"V","Z":"Z","b":"b","f":"f","j":"j","n":"n","r":"r","v":"v","z":"z","1":"1","5":"5","9":"9","A":"A","E":"E","I":"I","M":"M","Q":"Q","U":"U","Y":"Y","a":"a","e":"e","i":"i","m":"m","q":"q","u":"u","y":"y","0":"0","4":"4","8":"8","D":"D","H":"H","L":"L","P":"P","T":"T","X":"X","d":"d","h":"h","l":"l","p":"p","t":"t","x":"x","3":"3","7":"7","C":"C","G":"G","K":"K","O":"O","S":"S","W":"W","c":"c","g":"g","k":"k","o":"o","s":"s","w":"w","ẳ":"a","Â":"a","â":"a","Ấ":"a","ấ":"a","Ầ":"a","ầ":"a"};void 0===window.getComputedStyle&&(window.getComputedStyle=function(){function t(e,i,n,s){var o,a=i[n],r=parseFloat(a),l=a.split(/\d/)[0];return s=null!==s?s:/%|em/.test(l)&&e.parentElement?t(e.parentElement,e.parentElement.currentStyle,"fontSize",null):16,o="fontSize"===n?s:/width/i.test(n)?e.clientWidth:e.clientHeight,"em"===l?r*s:"in"===l?96*r:"pt"===l?96*r/72:"%"===l?r/100*o:r}function e(t,e){var i="border"===e?"Width":"",n=e+"Top"+i,s=e+"Right"+i,o=e+"Bottom"+i,a=e+"Left"+i;t[e]=(t[n]===t[s]===t[o]===t[a]?[t[n]]:t[n]===t[o]&&t[a]===t[s]?[t[n],t[s]]:t[a]===t[s]?[t[n],t[s],t[o]]:[t[n],t[s],t[o],t[a]]).join(" ")}function i(i){var n,s=i.currentStyle,o=this,a=t(i,s,"fontSize",null);for(n in s)Object.prototype.hasOwnProperty.call(s,n)&&(/width|height|margin.|padding.|border.+W/.test(n)&&"auto"!==o[n]?o[n]=t(i,s,n,a)+"px":"styleFloat"===n?o.float=s[n]:o[n]=s[n]);return e(o,"margin"),e(o,"padding"),e(o,"border"),o.fontSize=a+"px",o}return i.prototype={constructor:i,getPropertyPriority:function(){},getPropertyValue:function(t){return this[t]||""},item:function(){},removeProperty:function(){},setProperty:function(){},getPropertyCSSValue:function(){}},function(t){return new i(t)}}()),t(document).on("keydown.xdsoftctrl",function(t){t.keyCode===b&&(I=!0),t.keyCode===_&&(I=!0)}).on("keyup.xdsoftctrl",function(t){t.keyCode===b&&(I=!1),t.keyCode===_&&(I=!1)}),S={minLength:0,valueKey:"value",titleKey:"title",highlight:!0,showHint:!0,dropdownWidth:"100%",dropdownStyle:{},itemStyle:{},hintStyle:!1,style:!1,debug:!0,openOnFocus:!1,closeOnBlur:!0,autoselect:!1,accents:!0,replaceAccentsForRemote:!0,limit:20,visibleLimit:20,visibleHeight:0,defaultHeightItem:30,timeoutUpdate:10,get:function(t,e){return a.call(this,t,e)},replace:[function(t,i){return this.replaceAccentsForRemote&&(i=e(i)),t.replace("%QUERY%",encodeURIComponent(i))}],equal:function(t,e){return e.toLowerCase()==t.substr(0,e.length).toLowerCase()},findRight:[function(t,e,i){var n,s="";if(t)for(n=0;n<t.length;n+=1)if(s=o.call(this,"getValue",i,[t[n],i]),o.call(this,"equal",i,[s,e,i],!1))return t[n];return!1}],valid:[function(t,i){return this.accents&&(t=e(t),i=e(i)),-1!=t.toLowerCase().indexOf(i.toLowerCase())}],filter:[function(t,e,i){var s,a=[],r="";if(t)for(s=0;s<t.length;s+=1)r=n(t[s][this.get("valueKey",i)])?t[s][this.get("valueKey",i)]:t[s].toString(),o.call(this,"valid",i,[r,e])&&a.push(t[s]);return a}],preparse:function(t){return t},getValue:[function(t,e){return n(t[this.get("valueKey",e)])?t[this.get("valueKey",e)]:t.toString()}],getTitle:[function(t,e){return n(t[this.get("titleKey",e)])?t[this.get("titleKey",e)]:t.toString()}],render:[function(t,n,s,a){var r,l,h,c=o.call(this,"getValue",n,[t,n],S.getValue[0].call(this,t,n)),u=o.call(this,"getTitle",n,[t,n],S.getTitle[0].call(this,t,n)),d="",p="",f="",g="",m=0;if(this.highlight)if(this.accents){for(p=e(u).toLowerCase().replace(/[<>]+/g,""),d=e(a).toLowerCase().replace(/[<>]+/g,""),f=p.replace(new RegExp(i(d),"g"),"<"+d+">"),h=0;h<f.length;h+=1)r=u.charAt(m),"<"===(l=f.charAt(h))?g+="<b>":">"===l?g+="</b>":(m+=1,g+=r);u=g}else u=u.replace(new RegExp("("+i(a)+")","i"),"<b>$1</b>");return"<div "+(c==a?'class="active"':"")+' data-value="'+encodeURIComponent(c)+'">'+u+"</div>"}],appendMethod:"concat",source:[],afterSelected:function(){}},E={destroy:function(){return this.trigger("destroy.xdsoft")},update:function(){return this.trigger("updateHelperPosition.xdsoft")},options:function(e){return this.data("autocomplete_options")&&t.isPlainObject(e)&&this.data("autocomplete_options",t.extend(!0,this.data("autocomplete_options"),e)),this},setSource:function(e,i){if(this.data("autocomplete_options")&&(t.isPlainObject(e)||t.isFunction(e)||t.isArray(e))){var n=this.data("autocomplete_options"),s=this.data("xdsoft_autocomplete"),o=n.source;void 0===i||isNaN(i)?t.isFunction(e)?this.data("autocomplete_options").source=e:t.extend(!0,o,e):t.isPlainObject(e)||t.isArray(e)?o[i]=t.extend(!0,t.isArray(e)?[]:{},e):o[i]=e,c.call(n,this.val(),s,function(t){h.call(n,s,t)})}return this},getSource:function(t){if(this.data("autocomplete_options")){var e=this.data("autocomplete_options").source;return void 0!==t&&!isNaN(t)&&e[t]?e[t]:e}return null}},t.fn.autocomplete=function(e,i,n){return"string"===t.type(e)&&E[e]?E[e].call(this,i,n):this.each(function(){d(this,t.extend(!0,{},S,e))})}}(jQuery),function(t){t("#search").keyup(function(){t.ajax({type:"POST",url:"/search/",data:{search_text:t("#search").val(),csrfmiddlewaretoken:t("input[name=csrfmiddlewaretoken]").val()},success:searchSuccess,dataType:"html"})})}($),$(document).ready(function(){function t(){$(".basket-items").removeClass("hidden")}var e=$("#form-buying-products");e.on("submit",function(t){t.preventDefault(),$("#number").val();var i=$("#number").val(),n=$("#submit-btn"),s=n.data("products-id"),o=(n.data("products-name"),n.data("products-price"),{});o.product_id=s,o.nmb=i;var a=$('#form-buying-products [name="csrfmiddlewaretoken"]').val();o.csrfmiddlewaretoken=a;var r=e.attr("action");$.ajax({url:r,type:"POST",data:o,cache:!0,success:function(t){t.products_total_nmb&&($("#basket_total_nmb").text("("+t.products_total_nmb+")"),$(".basket-items ul").html(""),$.each(t.products,function(t,e){$(".basket-items ul").append("<li>"+e.name+", "+e.nmb+"pc. for "+e.price_per_item+"rub. </li>")}))},error:function(){console.log("error")}})}),$(".basket-container").mouseover(function(){t()}),$(".basket-container").mouseout(function(){t()}),$(document).on("click",".delete-item",function(t){t.preventDefault(),$(this).closest("li").remove()})}),function(t){t(function(){var e=t("#range"),i=e.attr("data-min"),n=e.attr("data-max"),s=t(".filter__min"),o=t(".filter__max");s.val(i),o.val(n),s<0&&(s=0),o<0&&(o=0),e.slider({range:!0,max:n,values:[i,n],change:function(t,i){var n=e.slider("values",0),a=e.slider("values",1);console.log(n,a),s.val(n),o.val(a)}}),t(".filter__category .filter__category-item ul").toggle(),t(".filter__category .filter__category-item .category__title").click(function(){t(this).parent().find("ul").slideToggle()}),t("#menu_active").click(function(){t(".mobail-menu").slideToggle()}),t("#content__category-btn").click(function(){t(".content__category").slideToggle()}),t(".banner__close").click(function(){t(".banner__close").parent().hide()}),t(".certificate__item").magnificPopup({type:"image"});var a=t(".stars");a.barrating({theme:"fontawesome-stars"});var r=a.attr("data-rating");a.barrating("set",r);var l=t(".slider__main-image img"),h=t(".slider__list li");l.attr("src",h.find("img").attr("src")),h.click(function(){var e=t(this).find("img").attr("src");l.attr("src",e)})})}($),$(function(){"use strict";$("#q").autocomplete({serviceUrl:"http://127.0.0.1:8001/search/autocomplete/",minChars:2,dataType:"json",type:"GET",onSelect:function(t){console.log(t.value+", data :"+t.data)}})}),$(document).ready(function(){var t=getQueryParams();console.log(),$.each(t,function(t,e){id=decodeURIComponent(t).replace(/\s/g,""),$("#"+id).attr("checked","checked")})}),function(t){t(function(){var e=t("#range"),i=e.attr("data-min"),n=e.attr("data-max"),s=t(".filter__min"),o=t(".filter__max");s.val(i),o.val(n),s<0&&(s=0),o<0&&(o=0),e.slider({range:!0,max:n,values:[i,n],change:function(t,i){var n=e.slider("values",0),a=e.slider("values",1);console.log(n,a),s.val(n),o.val(a)}}),t(".filter__category .filter__category-item ul").toggle(),t(".filter__category .filter__category-item .category__title").click(function(){t(this).parent().find("ul").slideToggle()}),t("#menu_active").click(function(){t(".mobail-menu").slideToggle()}),t("#content__category-btn").click(function(){t(".content__category").slideToggle()}),t(".banner__close").click(function(){t(".banner__close").parent().hide()}),t(".certificate__item").magnificPopup({type:"image"});var a=t(".stars");a.barrating({theme:"fontawesome-stars"});var r=a.attr("data-rating");a.barrating("set",r);var l=t(".slider__main-image img"),h=t(".slider__list li");l.attr("src",h.find("img").attr("src")),h.click(function(){var e=t(this).find("img").attr("src");l.attr("src",e)})})}($),$(function(){"use strict";$("#q").autocomplete({serviceUrl:"http://127.0.0.1:8001/search/autocomplete/",minChars:2,dataType:"json",type:"GET",onSelect:function(t){console.log(t.value+", data :"+t.data)}})}),$(document).ready(function(){var t=getQueryParams();console.log(),$.each(t,function(t,e){id=decodeURIComponent(t).replace(/\s/g,""),$("#"+id).attr("checked","checked")})});
!function(t){t(function(){var a=t("#range"),e=a.attr("data-min"),i=a.attr("data-max"),r=t(".filter__min"),n=t(".filter__max");r.val(e),n.val(i),r<0&&(r=0),n<0&&(n=0),a.slider({range:!0,max:i,values:[e,i],change:function(t,e){var i=a.slider("values",0),l=a.slider("values",1);console.log(i,l),r.val(i),n.val(l)}}),t(".filter__category .filter__category-item ul").toggle(),t(".filter__category .filter__category-item .category__title").click(function(){t(this).parent().find("ul").slideToggle()}),t("#menu_active").click(function(){t(".mobail-menu").slideToggle()}),t("#content__category-btn").click(function(){t(".content__category").slideToggle()}),t(".banner__close").click(function(){t(".banner__close").parent().hide()}),t(".certificate__item").magnificPopup({type:"image"});var l=t(".stars");l.barrating({theme:"fontawesome-stars"});var c=l.attr("data-rating");l.barrating("set",c);var o=t(".slider__main-image img"),_=t(".slider__list li");o.attr("src",_.find("img").attr("src")),_.click(function(){var a=t(this).find("img").attr("src");o.attr("src",a)})})}($);
function getParameterByName(e,n){n||(n=window.location.href),e=e.replace(/[\[\]]/g,"\\$&");var t=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)"),o=t.exec(n);return o?o[2]?decodeURIComponent(o[2].replace(/\+/g," ")):"":null}function onFacetChangeApplied(){var e=window.location.href.split("?")[0],n=getParameterByName("q"),t=e+"?q="+n;return $("input:checkbox.facet").each(function(){var e=this.checked?$(this).val():null,n=this.checked?$(this).attr("name"):null;null!==e&&(t+="&"+encodeURIComponent(n)+"="+encodeURIComponent(e))}),location.href=t,!0}function getQueryParams(){for(var e,n={},t=window.location.href.slice(window.location.href.indexOf("?")+1).split("&"),o=0;o<t.length;o++)e=t[o].split("="),n[e[1]]=e[0];return n}$(function(){"use strict";$("#q").autocomplete({serviceUrl:"http://127.0.0.1:8001/search/autocomplete/",minChars:2,dataType:"json",type:"GET",onSelect:function(e){console.log(e.value+", data :"+e.data)}})}),$(document).ready(function(){var e=getQueryParams();console.log(),$.each(e,function(e,n){id=decodeURIComponent(e).replace(/\s/g,""),$("#"+id).attr("checked","checked")})});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJub2RlX21vZHVsZXMvanF1ZXJ5LXVpLWRpc3QvanF1ZXJ5LXVpLmpzIiwibm9kZV9tb2R1bGVzL21hZ25pZmljLXBvcHVwL2Rpc3QvanF1ZXJ5Lm1hZ25pZmljLXBvcHVwLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS1iYXItcmF0aW5nL2Rpc3QvanF1ZXJ5LmJhcnJhdGluZy5taW4uanMiLCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS1hdXRvY29tcGxldGUvanF1ZXJ5LmF1dG9jb21wbGV0ZS5qcyIsInN0YXRpYy9qcy9hamF4LmpzIiwic3RhdGljL2pzL2Jhc2tldC50b29scy5qcyIsInN0YXRpYy9qcy9idWlsZC1taW4uanMiLCJzdGF0aWMvanMvY29tbW9uLmpzIiwic3RhdGljL2pzL291cl9zZWFyY2hfY29kZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUNGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FDUEE7QUNBQTtBQ0FBO0FBQ0E7QUNEQTtBQ0FBO0FDQUE7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUMxQkE7QUNBQSIsImZpbGUiOiJidWlsZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiFmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO1wib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz1lLmRvY3VtZW50P3QoZSwhMCk6ZnVuY3Rpb24oZSl7aWYoIWUuZG9jdW1lbnQpdGhyb3cgbmV3IEVycm9yKFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiKTtyZXR1cm4gdChlKX06dChlKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxmdW5jdGlvbihlLHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oZSx0LG4pe3Q9dHx8YWU7dmFyIHIsaT10LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7aWYoaS50ZXh0PWUsbilmb3IociBpbiBiZSluW3JdJiYoaVtyXT1uW3JdKTt0LmhlYWQuYXBwZW5kQ2hpbGQoaSkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKX1mdW5jdGlvbiByKGUpe3JldHVybiBudWxsPT1lP2UrXCJcIjpcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZT9wZVtkZS5jYWxsKGUpXXx8XCJvYmplY3RcIjp0eXBlb2YgZX1mdW5jdGlvbiBpKGUpe3ZhciB0PSEhZSYmXCJsZW5ndGhcImluIGUmJmUubGVuZ3RoLG49cihlKTtyZXR1cm4hbWUoZSkmJiF4ZShlKSYmKFwiYXJyYXlcIj09PW58fDA9PT10fHxcIm51bWJlclwiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIG1lKHQpP3dlLmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiEhdC5jYWxsKGUscixlKSE9PW59KTp0Lm5vZGVUeXBlP3dlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQhPT1ufSk6XCJzdHJpbmdcIiE9dHlwZW9mIHQ/d2UuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBmZS5jYWxsKHQsZSk+LTEhPT1ufSk6d2UuZmlsdGVyKHQsZSxuKX1mdW5jdGlvbiBzKGUsdCl7Zm9yKDsoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGU7KTtyZXR1cm4gZX1mdW5jdGlvbiB1KGUpe3ZhciB0PXt9O3JldHVybiB3ZS5lYWNoKGUubWF0Y2goTGUpfHxbXSxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KSx0fWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gYyhlKXt0aHJvdyBlfWZ1bmN0aW9uIGYoZSx0LG4scil7dmFyIGk7dHJ5e2UmJm1lKGk9ZS5wcm9taXNlKT9pLmNhbGwoZSkuZG9uZSh0KS5mYWlsKG4pOmUmJm1lKGk9ZS50aGVuKT9pLmNhbGwoZSx0LG4pOnQuYXBwbHkodm9pZCAwLFtlXS5zbGljZShyKSl9Y2F0Y2goZSl7bi5hcHBseSh2b2lkIDAsW2VdKX19ZnVuY3Rpb24gcCgpe2FlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIscCksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHApLHdlLnJlYWR5KCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybiB0LnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gaChlKXtyZXR1cm4gZS5yZXBsYWNlKE1lLFwibXMtXCIpLnJlcGxhY2UoUmUsZCl9ZnVuY3Rpb24gZygpe3RoaXMuZXhwYW5kbz13ZS5leHBhbmRvK2cudWlkKyt9ZnVuY3Rpb24gdihlKXtyZXR1cm5cInRydWVcIj09PWV8fFwiZmFsc2VcIiE9PWUmJihcIm51bGxcIj09PWU/bnVsbDplPT09K2UrXCJcIj8rZTpCZS50ZXN0KGUpP0pTT04ucGFyc2UoZSk6ZSl9ZnVuY3Rpb24geShlLHQsbil7dmFyIHI7aWYodm9pZCAwPT09biYmMT09PWUubm9kZVR5cGUpaWYocj1cImRhdGEtXCIrdC5yZXBsYWNlKEZlLFwiLSQmXCIpLnRvTG93ZXJDYXNlKCksXCJzdHJpbmdcIj09dHlwZW9mKG49ZS5nZXRBdHRyaWJ1dGUocikpKXt0cnl7bj12KG4pfWNhdGNoKGUpe30kZS5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59ZnVuY3Rpb24gbShlLHQsbixyKXt2YXIgaSxvLGE9MjAscz1yP2Z1bmN0aW9uKCl7cmV0dXJuIHIuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIHdlLmNzcyhlLHQsXCJcIil9LHU9cygpLGw9biYmblszXXx8KHdlLmNzc051bWJlclt0XT9cIlwiOlwicHhcIiksYz0od2UuY3NzTnVtYmVyW3RdfHxcInB4XCIhPT1sJiYrdSkmJnplLmV4ZWMod2UuY3NzKGUsdCkpO2lmKGMmJmNbM10hPT1sKXtmb3IodS89MixsPWx8fGNbM10sYz0rdXx8MTthLS07KXdlLnN0eWxlKGUsdCxjK2wpLCgxLW8pKigxLShvPXMoKS91fHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsd2Uuc3R5bGUoZSx0LGMrbCksbj1ufHxbXX1yZXR1cm4gbiYmKGM9K2N8fCt1fHwwLGk9blsxXT9jKyhuWzFdKzEpKm5bMl06K25bMl0sciYmKHIudW5pdD1sLHIuc3RhcnQ9YyxyLmVuZD1pKSksaX1mdW5jdGlvbiB4KGUpe3ZhciB0LG49ZS5vd25lckRvY3VtZW50LHI9ZS5ub2RlTmFtZSxpPUdlW3JdO3JldHVybiBpfHwodD1uLmJvZHkuYXBwZW5kQ2hpbGQobi5jcmVhdGVFbGVtZW50KHIpKSxpPXdlLmNzcyh0LFwiZGlzcGxheVwiKSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksXCJub25lXCI9PT1pJiYoaT1cImJsb2NrXCIpLEdlW3JdPWksaSl9ZnVuY3Rpb24gYihlLHQpe2Zvcih2YXIgbixyLGk9W10sbz0wLGE9ZS5sZW5ndGg7bzxhO28rKylyPWVbb10sci5zdHlsZSYmKG49ci5zdHlsZS5kaXNwbGF5LHQ/KFwibm9uZVwiPT09biYmKGlbb109V2UuZ2V0KHIsXCJkaXNwbGF5XCIpfHxudWxsLGlbb118fChyLnN0eWxlLmRpc3BsYXk9XCJcIikpLFwiXCI9PT1yLnN0eWxlLmRpc3BsYXkmJlVlKHIpJiYoaVtvXT14KHIpKSk6XCJub25lXCIhPT1uJiYoaVtvXT1cIm5vbmVcIixXZS5zZXQocixcImRpc3BsYXlcIixuKSkpO2ZvcihvPTA7bzxhO28rKyludWxsIT1pW29dJiYoZVtvXS5zdHlsZS5kaXNwbGF5PWlbb10pO3JldHVybiBlfWZ1bmN0aW9uIHcoZSx0KXt2YXIgbjtyZXR1cm4gbj12b2lkIDAhPT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodHx8XCIqXCIpOnZvaWQgMCE9PWUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8XCIqXCIpOltdLHZvaWQgMD09PXR8fHQmJm8oZSx0KT93ZS5tZXJnZShbZV0sbik6bn1mdW5jdGlvbiBUKGUsdCl7Zm9yKHZhciBuPTAscj1lLmxlbmd0aDtuPHI7bisrKVdlLnNldChlW25dLFwiZ2xvYmFsRXZhbFwiLCF0fHxXZS5nZXQodFtuXSxcImdsb2JhbEV2YWxcIikpfWZ1bmN0aW9uIEMoZSx0LG4saSxvKXtmb3IodmFyIGEscyx1LGwsYyxmLHA9dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZD1bXSxoPTAsZz1lLmxlbmd0aDtoPGc7aCsrKWlmKChhPWVbaF0pfHwwPT09YSlpZihcIm9iamVjdFwiPT09cihhKSl3ZS5tZXJnZShkLGEubm9kZVR5cGU/W2FdOmEpO2Vsc2UgaWYoWmUudGVzdChhKSl7Zm9yKHM9c3x8cC5hcHBlbmRDaGlsZCh0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLHU9KFFlLmV4ZWMoYSl8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpLGw9S2VbdV18fEtlLl9kZWZhdWx0LHMuaW5uZXJIVE1MPWxbMV0rd2UuaHRtbFByZWZpbHRlcihhKStsWzJdLGY9bFswXTtmLS07KXM9cy5sYXN0Q2hpbGQ7d2UubWVyZ2UoZCxzLmNoaWxkTm9kZXMpLHM9cC5maXJzdENoaWxkLHMudGV4dENvbnRlbnQ9XCJcIn1lbHNlIGQucHVzaCh0LmNyZWF0ZVRleHROb2RlKGEpKTtmb3IocC50ZXh0Q29udGVudD1cIlwiLGg9MDthPWRbaCsrXTspaWYoaSYmd2UuaW5BcnJheShhLGkpPi0xKW8mJm8ucHVzaChhKTtlbHNlIGlmKGM9d2UuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpLHM9dyhwLmFwcGVuZENoaWxkKGEpLFwic2NyaXB0XCIpLGMmJlQocyksbilmb3IoZj0wO2E9c1tmKytdOylKZS50ZXN0KGEudHlwZXx8XCJcIikmJm4ucHVzaChhKTtyZXR1cm4gcH1mdW5jdGlvbiBFKCl7cmV0dXJuITB9ZnVuY3Rpb24gaygpe3JldHVybiExfWZ1bmN0aW9uIFMoKXt0cnl7cmV0dXJuIGFlLmFjdGl2ZUVsZW1lbnR9Y2F0Y2goZSl7fX1mdW5jdGlvbiBEKGUsdCxuLHIsaSxvKXt2YXIgYSxzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtcInN0cmluZ1wiIT10eXBlb2YgbiYmKHI9cnx8bixuPXZvaWQgMCk7Zm9yKHMgaW4gdClEKGUscyxuLHIsdFtzXSxvKTtyZXR1cm4gZX1pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXZvaWQgMCk6bnVsbD09aSYmKFwic3RyaW5nXCI9PXR5cGVvZiBuPyhpPXIscj12b2lkIDApOihpPXIscj1uLG49dm9pZCAwKSksITE9PT1pKWk9aztlbHNlIGlmKCFpKXJldHVybiBlO3JldHVybiAxPT09byYmKGE9aSxpPWZ1bmN0aW9uKGUpe3JldHVybiB3ZSgpLm9mZihlKSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0saS5ndWlkPWEuZ3VpZHx8KGEuZ3VpZD13ZS5ndWlkKyspKSxlLmVhY2goZnVuY3Rpb24oKXt3ZS5ldmVudC5hZGQodGhpcyx0LGkscixuKX0pfWZ1bmN0aW9uIE4oZSx0KXtyZXR1cm4gbyhlLFwidGFibGVcIikmJm8oMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLFwidHJcIik/d2UoZSkuY2hpbGRyZW4oXCJ0Ym9keVwiKVswXXx8ZTplfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGUudHlwZT0obnVsbCE9PWUuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkrXCIvXCIrZS50eXBlLGV9ZnVuY3Rpb24gaihlKXtyZXR1cm5cInRydWUvXCI9PT0oZS50eXBlfHxcIlwiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpLGV9ZnVuY3Rpb24gcShlLHQpe3ZhciBuLHIsaSxvLGEscyx1LGw7aWYoMT09PXQubm9kZVR5cGUpe2lmKFdlLmhhc0RhdGEoZSkmJihvPVdlLmFjY2VzcyhlKSxhPVdlLnNldCh0LG8pLGw9by5ldmVudHMpKXtkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e307Zm9yKGkgaW4gbClmb3Iobj0wLHI9bFtpXS5sZW5ndGg7bjxyO24rKyl3ZS5ldmVudC5hZGQodCxpLGxbaV1bbl0pfSRlLmhhc0RhdGEoZSkmJihzPSRlLmFjY2VzcyhlKSx1PXdlLmV4dGVuZCh7fSxzKSwkZS5zZXQodCx1KSl9fWZ1bmN0aW9uIEwoZSx0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XCJpbnB1dFwiPT09biYmWWUudGVzdChlLnR5cGUpP3QuY2hlY2tlZD1lLmNoZWNrZWQ6XCJpbnB1dFwiIT09biYmXCJ0ZXh0YXJlYVwiIT09bnx8KHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX1mdW5jdGlvbiBIKGUsdCxyLGkpe3Q9bGUuYXBwbHkoW10sdCk7dmFyIG8sYSxzLHUsbCxjLGY9MCxwPWUubGVuZ3RoLGQ9cC0xLGg9dFswXSxnPW1lKGgpO2lmKGd8fHA+MSYmXCJzdHJpbmdcIj09dHlwZW9mIGgmJiF5ZS5jaGVja0Nsb25lJiZhdC50ZXN0KGgpKXJldHVybiBlLmVhY2goZnVuY3Rpb24obil7dmFyIG89ZS5lcShuKTtnJiYodFswXT1oLmNhbGwodGhpcyxuLG8uaHRtbCgpKSksSChvLHQscixpKX0pO2lmKHAmJihvPUModCxlWzBdLm93bmVyRG9jdW1lbnQsITEsZSxpKSxhPW8uZmlyc3RDaGlsZCwxPT09by5jaGlsZE5vZGVzLmxlbmd0aCYmKG89YSksYXx8aSkpe2ZvcihzPXdlLm1hcCh3KG8sXCJzY3JpcHRcIiksQSksdT1zLmxlbmd0aDtmPHA7ZisrKWw9byxmIT09ZCYmKGw9d2UuY2xvbmUobCwhMCwhMCksdSYmd2UubWVyZ2Uocyx3KGwsXCJzY3JpcHRcIikpKSxyLmNhbGwoZVtmXSxsLGYpO2lmKHUpZm9yKGM9c1tzLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHdlLm1hcChzLGopLGY9MDtmPHU7ZisrKWw9c1tmXSxKZS50ZXN0KGwudHlwZXx8XCJcIikmJiFXZS5hY2Nlc3MobCxcImdsb2JhbEV2YWxcIikmJndlLmNvbnRhaW5zKGMsbCkmJihsLnNyYyYmXCJtb2R1bGVcIiE9PShsLnR5cGV8fFwiXCIpLnRvTG93ZXJDYXNlKCk/d2UuX2V2YWxVcmwmJndlLl9ldmFsVXJsKGwuc3JjKTpuKGwudGV4dENvbnRlbnQucmVwbGFjZShzdCxcIlwiKSxjLGwpKX1yZXR1cm4gZX1mdW5jdGlvbiBPKGUsdCxuKXtmb3IodmFyIHIsaT10P3dlLmZpbHRlcih0LGUpOmUsbz0wO251bGwhPShyPWlbb10pO28rKylufHwxIT09ci5ub2RlVHlwZXx8d2UuY2xlYW5EYXRhKHcocikpLHIucGFyZW50Tm9kZSYmKG4mJndlLmNvbnRhaW5zKHIub3duZXJEb2N1bWVudCxyKSYmVCh3KHIsXCJzY3JpcHRcIikpLHIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gUChlLHQsbil7dmFyIHIsaSxvLGEscz1lLnN0eWxlO3JldHVybiBuPW58fGx0KGUpLG4mJihhPW4uZ2V0UHJvcGVydHlWYWx1ZSh0KXx8blt0XSxcIlwiIT09YXx8d2UuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfHwoYT13ZS5zdHlsZShlLHQpKSwheWUucGl4ZWxCb3hTdHlsZXMoKSYmdXQudGVzdChhKSYmY3QudGVzdCh0KSYmKHI9cy53aWR0aCxpPXMubWluV2lkdGgsbz1zLm1heFdpZHRoLHMubWluV2lkdGg9cy5tYXhXaWR0aD1zLndpZHRoPWEsYT1uLndpZHRoLHMud2lkdGg9cixzLm1pbldpZHRoPWkscy5tYXhXaWR0aD1vKSksdm9pZCAwIT09YT9hK1wiXCI6YX1mdW5jdGlvbiBNKGUsdCl7cmV0dXJue2dldDpmdW5jdGlvbigpe3JldHVybiBlKCk/dm9pZCBkZWxldGUgdGhpcy5nZXQ6KHRoaXMuZ2V0PXQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fWZ1bmN0aW9uIFIoZSl7aWYoZSBpbiB2dClyZXR1cm4gZTtmb3IodmFyIHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSksbj1ndC5sZW5ndGg7bi0tOylpZigoZT1ndFtuXSt0KWluIHZ0KXJldHVybiBlfWZ1bmN0aW9uIEkoZSl7dmFyIHQ9d2UuY3NzUHJvcHNbZV07cmV0dXJuIHR8fCh0PXdlLmNzc1Byb3BzW2VdPVIoZSl8fGUpLHR9ZnVuY3Rpb24gVyhlLHQsbil7dmFyIHI9emUuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMl0tKG58fDApKSsoclszXXx8XCJweFwiKTp0fWZ1bmN0aW9uICQoZSx0LG4scixpLG8pe3ZhciBhPVwid2lkdGhcIj09PXQ/MTowLHM9MCx1PTA7aWYobj09PShyP1wiYm9yZGVyXCI6XCJjb250ZW50XCIpKXJldHVybiAwO2Zvcig7YTw0O2ErPTIpXCJtYXJnaW5cIj09PW4mJih1Kz13ZS5jc3MoZSxuK1hlW2FdLCEwLGkpKSxyPyhcImNvbnRlbnRcIj09PW4mJih1LT13ZS5jc3MoZSxcInBhZGRpbmdcIitYZVthXSwhMCxpKSksXCJtYXJnaW5cIiE9PW4mJih1LT13ZS5jc3MoZSxcImJvcmRlclwiK1hlW2FdK1wiV2lkdGhcIiwhMCxpKSkpOih1Kz13ZS5jc3MoZSxcInBhZGRpbmdcIitYZVthXSwhMCxpKSxcInBhZGRpbmdcIiE9PW4/dSs9d2UuY3NzKGUsXCJib3JkZXJcIitYZVthXStcIldpZHRoXCIsITAsaSk6cys9d2UuY3NzKGUsXCJib3JkZXJcIitYZVthXStcIldpZHRoXCIsITAsaSkpO3JldHVybiFyJiZvPj0wJiYodSs9TWF0aC5tYXgoMCxNYXRoLmNlaWwoZVtcIm9mZnNldFwiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1vLXUtcy0uNSkpKSx1fWZ1bmN0aW9uIEIoZSx0LG4pe3ZhciByPWx0KGUpLGk9UChlLHQsciksbz1cImJvcmRlci1ib3hcIj09PXdlLmNzcyhlLFwiYm94U2l6aW5nXCIsITEsciksYT1vO2lmKHV0LnRlc3QoaSkpe2lmKCFuKXJldHVybiBpO2k9XCJhdXRvXCJ9cmV0dXJuIGE9YSYmKHllLmJveFNpemluZ1JlbGlhYmxlKCl8fGk9PT1lLnN0eWxlW3RdKSwoXCJhdXRvXCI9PT1pfHwhcGFyc2VGbG9hdChpKSYmXCJpbmxpbmVcIj09PXdlLmNzcyhlLFwiZGlzcGxheVwiLCExLHIpKSYmKGk9ZVtcIm9mZnNldFwiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXSxhPSEwKSwoaT1wYXJzZUZsb2F0KGkpfHwwKSskKGUsdCxufHwobz9cImJvcmRlclwiOlwiY29udGVudFwiKSxhLHIsaSkrXCJweFwifWZ1bmN0aW9uIEYoZSx0LG4scixpKXtyZXR1cm4gbmV3IEYucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1mdW5jdGlvbiBfKCl7bXQmJighMT09PWFlLmhpZGRlbiYmZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoXyk6ZS5zZXRUaW1lb3V0KF8sd2UuZnguaW50ZXJ2YWwpLHdlLmZ4LnRpY2soKSl9ZnVuY3Rpb24geigpe3JldHVybiBlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt5dD12b2lkIDB9KSx5dD1EYXRlLm5vdygpfWZ1bmN0aW9uIFgoZSx0KXt2YXIgbixyPTAsaT17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO3I8NDtyKz0yLXQpbj1YZVtyXSxpW1wibWFyZ2luXCIrbl09aVtcInBhZGRpbmdcIituXT1lO3JldHVybiB0JiYoaS5vcGFjaXR5PWkud2lkdGg9ZSksaX1mdW5jdGlvbiBVKGUsdCxuKXtmb3IodmFyIHIsaT0oWS50d2VlbmVyc1t0XXx8W10pLmNvbmNhdChZLnR3ZWVuZXJzW1wiKlwiXSksbz0wLGE9aS5sZW5ndGg7bzxhO28rKylpZihyPWlbb10uY2FsbChuLHQsZSkpcmV0dXJuIHJ9ZnVuY3Rpb24gVihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYyxmPVwid2lkdGhcImluIHR8fFwiaGVpZ2h0XCJpbiB0LHA9dGhpcyxkPXt9LGg9ZS5zdHlsZSxnPWUubm9kZVR5cGUmJlVlKGUpLHY9V2UuZ2V0KGUsXCJmeHNob3dcIik7bi5xdWV1ZXx8KGE9d2UuX3F1ZXVlSG9va3MoZSxcImZ4XCIpLG51bGw9PWEudW5xdWV1ZWQmJihhLnVucXVldWVkPTAscz1hLmVtcHR5LmZpcmUsYS5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7YS51bnF1ZXVlZHx8cygpfSksYS51bnF1ZXVlZCsrLHAuYWx3YXlzKGZ1bmN0aW9uKCl7cC5hbHdheXMoZnVuY3Rpb24oKXthLnVucXVldWVkLS0sd2UucXVldWUoZSxcImZ4XCIpLmxlbmd0aHx8YS5lbXB0eS5maXJlKCl9KX0pKTtmb3IociBpbiB0KWlmKGk9dFtyXSx4dC50ZXN0KGkpKXtpZihkZWxldGUgdFtyXSxvPW98fFwidG9nZ2xlXCI9PT1pLGk9PT0oZz9cImhpZGVcIjpcInNob3dcIikpe2lmKFwic2hvd1wiIT09aXx8IXZ8fHZvaWQgMD09PXZbcl0pY29udGludWU7Zz0hMH1kW3JdPXYmJnZbcl18fHdlLnN0eWxlKGUscil9aWYoKHU9IXdlLmlzRW1wdHlPYmplY3QodCkpfHwhd2UuaXNFbXB0eU9iamVjdChkKSl7ZiYmMT09PWUubm9kZVR5cGUmJihuLm92ZXJmbG93PVtoLm92ZXJmbG93LGgub3ZlcmZsb3dYLGgub3ZlcmZsb3dZXSxsPXYmJnYuZGlzcGxheSxudWxsPT1sJiYobD1XZS5nZXQoZSxcImRpc3BsYXlcIikpLGM9d2UuY3NzKGUsXCJkaXNwbGF5XCIpLFwibm9uZVwiPT09YyYmKGw/Yz1sOihiKFtlXSwhMCksbD1lLnN0eWxlLmRpc3BsYXl8fGwsYz13ZS5jc3MoZSxcImRpc3BsYXlcIiksYihbZV0pKSksKFwiaW5saW5lXCI9PT1jfHxcImlubGluZS1ibG9ja1wiPT09YyYmbnVsbCE9bCkmJlwibm9uZVwiPT09d2UuY3NzKGUsXCJmbG9hdFwiKSYmKHV8fChwLmRvbmUoZnVuY3Rpb24oKXtoLmRpc3BsYXk9bH0pLG51bGw9PWwmJihjPWguZGlzcGxheSxsPVwibm9uZVwiPT09Yz9cIlwiOmMpKSxoLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIikpLG4ub3ZlcmZsb3cmJihoLm92ZXJmbG93PVwiaGlkZGVuXCIscC5hbHdheXMoZnVuY3Rpb24oKXtoLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0saC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxoLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpLHU9ITE7Zm9yKHIgaW4gZCl1fHwodj9cImhpZGRlblwiaW4gdiYmKGc9di5oaWRkZW4pOnY9V2UuYWNjZXNzKGUsXCJmeHNob3dcIix7ZGlzcGxheTpsfSksbyYmKHYuaGlkZGVuPSFnKSxnJiZiKFtlXSwhMCkscC5kb25lKGZ1bmN0aW9uKCl7Z3x8YihbZV0pLFdlLnJlbW92ZShlLFwiZnhzaG93XCIpO2ZvcihyIGluIGQpd2Uuc3R5bGUoZSxyLGRbcl0pfSkpLHU9VShnP3Zbcl06MCxyLHApLHIgaW4gdnx8KHZbcl09dS5zdGFydCxnJiYodS5lbmQ9dS5zdGFydCx1LnN0YXJ0PTApKX19ZnVuY3Rpb24gRyhlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPWgobiksaT10W3JdLG89ZVtuXSxBcnJheS5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksKGE9d2UuY3NzSG9va3Nbcl0pJiZcImV4cGFuZFwiaW4gYSl7bz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfWZ1bmN0aW9uIFkoZSx0LG4pe3ZhciByLGksbz0wLGE9WS5wcmVmaWx0ZXJzLmxlbmd0aCxzPXdlLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO2Zvcih2YXIgdD15dHx8eigpLG49TWF0aC5tYXgoMCxsLnN0YXJ0VGltZStsLmR1cmF0aW9uLXQpLHI9bi9sLmR1cmF0aW9ufHwwLG89MS1yLGE9MCx1PWwudHdlZW5zLmxlbmd0aDthPHU7YSsrKWwudHdlZW5zW2FdLnJ1bihvKTtyZXR1cm4gcy5ub3RpZnlXaXRoKGUsW2wsbyxuXSksbzwxJiZ1P246KHV8fHMubm90aWZ5V2l0aChlLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgoZSxbbF0pLCExKX0sbD1zLnByb21pc2Uoe2VsZW06ZSxwcm9wczp3ZS5leHRlbmQoe30sdCksb3B0czp3ZS5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOndlLmVhc2luZy5fZGVmYXVsdH0sbiksb3JpZ2luYWxQcm9wZXJ0aWVzOnQsb3JpZ2luYWxPcHRpb25zOm4sc3RhcnRUaW1lOnl0fHx6KCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuKXt2YXIgcj13ZS5Ud2VlbihlLGwub3B0cyx0LG4sbC5vcHRzLnNwZWNpYWxFYXNpbmdbdF18fGwub3B0cy5lYXNpbmcpO3JldHVybiBsLnR3ZWVucy5wdXNoKHIpLHJ9LHN0b3A6ZnVuY3Rpb24odCl7dmFyIG49MCxyPXQ/bC50d2VlbnMubGVuZ3RoOjA7aWYoaSlyZXR1cm4gdGhpcztmb3IoaT0hMDtuPHI7bisrKWwudHdlZW5zW25dLnJ1bigxKTtyZXR1cm4gdD8ocy5ub3RpZnlXaXRoKGUsW2wsMSwwXSkscy5yZXNvbHZlV2l0aChlLFtsLHRdKSk6cy5yZWplY3RXaXRoKGUsW2wsdF0pLHRoaXN9fSksYz1sLnByb3BzO2ZvcihHKGMsbC5vcHRzLnNwZWNpYWxFYXNpbmcpO288YTtvKyspaWYocj1ZLnByZWZpbHRlcnNbb10uY2FsbChsLGUsYyxsLm9wdHMpKXJldHVybiBtZShyLnN0b3ApJiYod2UuX3F1ZXVlSG9va3MobC5lbGVtLGwub3B0cy5xdWV1ZSkuc3RvcD1yLnN0b3AuYmluZChyKSkscjtyZXR1cm4gd2UubWFwKGMsVSxsKSxtZShsLm9wdHMuc3RhcnQpJiZsLm9wdHMuc3RhcnQuY2FsbChlLGwpLGwucHJvZ3Jlc3MobC5vcHRzLnByb2dyZXNzKS5kb25lKGwub3B0cy5kb25lLGwub3B0cy5jb21wbGV0ZSkuZmFpbChsLm9wdHMuZmFpbCkuYWx3YXlzKGwub3B0cy5hbHdheXMpLHdlLmZ4LnRpbWVyKHdlLmV4dGVuZCh1LHtlbGVtOmUsYW5pbTpsLHF1ZXVlOmwub3B0cy5xdWV1ZX0pKSxsfWZ1bmN0aW9uIFEoZSl7cmV0dXJuKGUubWF0Y2goTGUpfHxbXSkuam9pbihcIiBcIil9ZnVuY3Rpb24gSihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9ZnVuY3Rpb24gSyhlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lOlwic3RyaW5nXCI9PXR5cGVvZiBlP2UubWF0Y2goTGUpfHxbXTpbXX1mdW5jdGlvbiBaKGUsdCxuLGkpe3ZhciBvO2lmKEFycmF5LmlzQXJyYXkodCkpd2UuZWFjaCh0LGZ1bmN0aW9uKHQscil7bnx8cXQudGVzdChlKT9pKGUscik6WihlK1wiW1wiKyhcIm9iamVjdFwiPT10eXBlb2YgciYmbnVsbCE9cj90OlwiXCIpK1wiXVwiLHIsbixpKX0pO2Vsc2UgaWYobnx8XCJvYmplY3RcIiE9PXIodCkpaShlLHQpO2Vsc2UgZm9yKG8gaW4gdClaKGUrXCJbXCIrbytcIl1cIix0W29dLG4saSl9ZnVuY3Rpb24gZWUoZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7XCJzdHJpbmdcIiE9dHlwZW9mIHQmJihuPXQsdD1cIipcIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKExlKXx8W107aWYobWUobikpZm9yKDtyPW9baSsrXTspXCIrXCI9PT1yWzBdPyhyPXIuc2xpY2UoMSl8fFwiKlwiLChlW3JdPWVbcl18fFtdKS51bnNoaWZ0KG4pKTooZVtyXT1lW3JdfHxbXSkucHVzaChuKX19ZnVuY3Rpb24gdGUoZSx0LG4scil7ZnVuY3Rpb24gaShzKXt2YXIgdTtyZXR1cm4gb1tzXT0hMCx3ZS5lYWNoKGVbc118fFtdLGZ1bmN0aW9uKGUscyl7dmFyIGw9cyh0LG4scik7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGx8fGF8fG9bbF0/YT8hKHU9bCk6dm9pZCAwOih0LmRhdGFUeXBlcy51bnNoaWZ0KGwpLGkobCksITEpfSksdX12YXIgbz17fSxhPWU9PT1fdDtyZXR1cm4gaSh0LmRhdGFUeXBlc1swXSl8fCFvW1wiKlwiXSYmaShcIipcIil9ZnVuY3Rpb24gbmUoZSx0KXt2YXIgbixyLGk9d2UuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zfHx7fTtmb3IobiBpbiB0KXZvaWQgMCE9PXRbbl0mJigoaVtuXT9lOnJ8fChyPXt9KSlbbl09dFtuXSk7cmV0dXJuIHImJndlLmV4dGVuZCghMCxlLHIpLGV9ZnVuY3Rpb24gcmUoZSx0LG4pe2Zvcih2YXIgcixpLG8sYSxzPWUuY29udGVudHMsdT1lLmRhdGFUeXBlcztcIipcIj09PXVbMF07KXUuc2hpZnQoKSx2b2lkIDA9PT1yJiYocj1lLm1pbWVUeXBlfHx0LmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpKTtpZihyKWZvcihpIGluIHMpaWYoc1tpXSYmc1tpXS50ZXN0KHIpKXt1LnVuc2hpZnQoaSk7YnJlYWt9aWYodVswXWluIG4pbz11WzBdO2Vsc2V7Zm9yKGkgaW4gbil7aWYoIXVbMF18fGUuY29udmVydGVyc1tpK1wiIFwiK3VbMF1dKXtvPWk7YnJlYWt9YXx8KGE9aSl9bz1vfHxhfWlmKG8pcmV0dXJuIG8hPT11WzBdJiZ1LnVuc2hpZnQobyksbltvXX1mdW5jdGlvbiBpZShlLHQsbixyKXt2YXIgaSxvLGEscyx1LGw9e30sYz1lLmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gZS5jb252ZXJ0ZXJzKWxbYS50b0xvd2VyQ2FzZSgpXT1lLmNvbnZlcnRlcnNbYV07Zm9yKG89Yy5zaGlmdCgpO287KWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCF1JiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSx1PW8sbz1jLnNoaWZ0KCkpaWYoXCIqXCI9PT1vKW89dTtlbHNlIGlmKFwiKlwiIT09dSYmdSE9PW8pe2lmKCEoYT1sW3UrXCIgXCIrb118fGxbXCIqIFwiK29dKSlmb3IoaSBpbiBsKWlmKHM9aS5zcGxpdChcIiBcIiksc1sxXT09PW8mJihhPWxbdStcIiBcIitzWzBdXXx8bFtcIiogXCIrc1swXV0pKXshMD09PWE/YT1sW2ldOiEwIT09bFtpXSYmKG89c1swXSxjLnVuc2hpZnQoc1sxXSkpO2JyZWFrfWlmKCEwIT09YSlpZihhJiZlLnRocm93cyl0PWEodCk7ZWxzZSB0cnl7dD1hKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZTpcInBhcnNlcmVycm9yXCIsZXJyb3I6YT9lOlwiTm8gY29udmVyc2lvbiBmcm9tIFwiK3UrXCIgdG8gXCIrb319fXJldHVybntzdGF0ZTpcInN1Y2Nlc3NcIixkYXRhOnR9fXZhciBvZT1bXSxhZT1lLmRvY3VtZW50LHNlPU9iamVjdC5nZXRQcm90b3R5cGVPZix1ZT1vZS5zbGljZSxsZT1vZS5jb25jYXQsY2U9b2UucHVzaCxmZT1vZS5pbmRleE9mLHBlPXt9LGRlPXBlLnRvU3RyaW5nLGhlPXBlLmhhc093blByb3BlcnR5LGdlPWhlLnRvU3RyaW5nLHZlPWdlLmNhbGwoT2JqZWN0KSx5ZT17fSxtZT1mdW5jdGlvbihlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZcIm51bWJlclwiIT10eXBlb2YgZS5ub2RlVHlwZX0seGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd30sYmU9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfSx3ZT1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcgd2UuZm4uaW5pdChlLHQpfSxUZT0vXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7d2UuZm49d2UucHJvdG90eXBlPXtqcXVlcnk6XCIzLjMuMVwiLGNvbnN0cnVjdG9yOndlLGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdWUuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP3VlLmNhbGwodGhpcyk6ZTwwP3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGUpe3ZhciB0PXdlLm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSxlKTtyZXR1cm4gdC5wcmV2T2JqZWN0PXRoaXMsdH0sZWFjaDpmdW5jdGlvbihlKXtyZXR1cm4gd2UuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHdlLm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKGU8MD90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZuPHQ/W3RoaXNbbl1dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOmNlLHNvcnQ6b2Uuc29ydCxzcGxpY2U6b2Uuc3BsaWNlfSx3ZS5leHRlbmQ9d2UuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLHIsaSxvLGE9YXJndW1lbnRzWzBdfHx7fSxzPTEsdT1hcmd1bWVudHMubGVuZ3RoLGw9ITE7Zm9yKFwiYm9vbGVhblwiPT10eXBlb2YgYSYmKGw9YSxhPWFyZ3VtZW50c1tzXXx8e30scysrKSxcIm9iamVjdFwiPT10eXBlb2YgYXx8bWUoYSl8fChhPXt9KSxzPT09dSYmKGE9dGhpcyxzLS0pO3M8dTtzKyspaWYobnVsbCE9KGU9YXJndW1lbnRzW3NdKSlmb3IodCBpbiBlKW49YVt0XSxyPWVbdF0sYSE9PXImJihsJiZyJiYod2UuaXNQbGFpbk9iamVjdChyKXx8KGk9QXJyYXkuaXNBcnJheShyKSkpPyhpPyhpPSExLG89biYmQXJyYXkuaXNBcnJheShuKT9uOltdKTpvPW4mJndlLmlzUGxhaW5PYmplY3Qobik/bjp7fSxhW3RdPXdlLmV4dGVuZChsLG8scikpOnZvaWQgMCE9PXImJihhW3RdPXIpKTtyZXR1cm4gYX0sd2UuZXh0ZW5kKHtleHBhbmRvOlwialF1ZXJ5XCIrKFwiMy4zLjFcIitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cXEQvZyxcIlwiKSxpc1JlYWR5OiEwLGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0sbm9vcDpmdW5jdGlvbigpe30saXNQbGFpbk9iamVjdDpmdW5jdGlvbihlKXt2YXIgdCxuO3JldHVybiEoIWV8fFwiW29iamVjdCBPYmplY3RdXCIhPT1kZS5jYWxsKGUpKSYmKCEodD1zZShlKSl8fFwiZnVuY3Rpb25cIj09dHlwZW9mKG49aGUuY2FsbCh0LFwiY29uc3RydWN0b3JcIikmJnQuY29uc3RydWN0b3IpJiZnZS5jYWxsKG4pPT09dmUpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oZSl7bihlKX0sZWFjaDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MDtpZihpKGUpKWZvcihuPWUubGVuZ3RoO3I8biYmITEhPT10LmNhbGwoZVtyXSxyLGVbcl0pO3IrKyk7ZWxzZSBmb3IociBpbiBlKWlmKCExPT09dC5jYWxsKGVbcl0scixlW3JdKSlicmVhaztyZXR1cm4gZX0sdHJpbTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9cIlwiOihlK1wiXCIpLnJlcGxhY2UoVGUsXCJcIil9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuPXR8fFtdO3JldHVybiBudWxsIT1lJiYoaShPYmplY3QoZSkpP3dlLm1lcmdlKG4sXCJzdHJpbmdcIj09dHlwZW9mIGU/W2VdOmUpOmNlLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PXQ/LTE6ZmUuY2FsbCh0LGUsbil9LG1lcmdlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPSt0Lmxlbmd0aCxyPTAsaT1lLmxlbmd0aDtyPG47cisrKWVbaSsrXT10W3JdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPTAsbz1lLmxlbmd0aCxhPSFuO2k8bztpKyspIXQoZVtpXSxpKSE9PWEmJnIucHVzaChlW2ldKTtyZXR1cm4gcn0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixvLGE9MCxzPVtdO2lmKGkoZSkpZm9yKHI9ZS5sZW5ndGg7YTxyO2ErKyludWxsIT0obz10KGVbYV0sYSxuKSkmJnMucHVzaChvKTtlbHNlIGZvcihhIGluIGUpbnVsbCE9KG89dChlW2FdLGEsbikpJiZzLnB1c2gobyk7cmV0dXJuIGxlLmFwcGx5KFtdLHMpfSxndWlkOjEsc3VwcG9ydDp5ZX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKHdlLmZuW1N5bWJvbC5pdGVyYXRvcl09b2VbU3ltYm9sLml0ZXJhdG9yXSksd2UuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKGUsdCl7cGVbXCJbb2JqZWN0IFwiK3QrXCJdXCJdPXQudG9Mb3dlckNhc2UoKX0pO3ZhciBDZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuLHIpe3ZhciBpLG8sYSxzLHUsYyxwLGQ9dCYmdC5vd25lckRvY3VtZW50LGg9dD90Lm5vZGVUeXBlOjk7aWYobj1ufHxbXSxcInN0cmluZ1wiIT10eXBlb2YgZXx8IWV8fDEhPT1oJiY5IT09aCYmMTEhPT1oKXJldHVybiBuO2lmKCFyJiYoKHQ/dC5vd25lckRvY3VtZW50fHx0OlcpIT09cSYmaih0KSx0PXR8fHEsSCkpe2lmKDExIT09aCYmKHU9Z2UuZXhlYyhlKSkpaWYoaT11WzFdKXtpZig5PT09aCl7aWYoIShhPXQuZ2V0RWxlbWVudEJ5SWQoaSkpKXJldHVybiBuO2lmKGEuaWQ9PT1pKXJldHVybiBuLnB1c2goYSksbn1lbHNlIGlmKGQmJihhPWQuZ2V0RWxlbWVudEJ5SWQoaSkpJiZSKHQsYSkmJmEuaWQ9PT1pKXJldHVybiBuLnB1c2goYSksbn1lbHNle2lmKHVbMl0pcmV0dXJuIFEuYXBwbHkobix0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpKSxuO2lmKChpPXVbM10pJiZiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gUS5hcHBseShuLHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShpKSksbn1pZihiLnFzYSYmIXpbZStcIiBcIl0mJighT3x8IU8udGVzdChlKSkpe2lmKDEhPT1oKWQ9dCxwPWU7ZWxzZSBpZihcIm9iamVjdFwiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IoKHM9dC5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk/cz1zLnJlcGxhY2UoeGUsYmUpOnQuc2V0QXR0cmlidXRlKFwiaWRcIixzPUkpLGM9RShlKSxvPWMubGVuZ3RoO28tLTspY1tvXT1cIiNcIitzK1wiIFwiK2YoY1tvXSk7cD1jLmpvaW4oXCIsXCIpLGQ9dmUudGVzdChlKSYmbCh0LnBhcmVudE5vZGUpfHx0fWlmKHApdHJ5e3JldHVybiBRLmFwcGx5KG4sZC5xdWVyeVNlbGVjdG9yQWxsKHApKSxufWNhdGNoKGUpe31maW5hbGx5e3M9PT1JJiZ0LnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpfX19cmV0dXJuIFMoZS5yZXBsYWNlKG9lLFwiJDFcIiksdCxuLHIpfWZ1bmN0aW9uIG4oKXtmdW5jdGlvbiBlKG4scil7cmV0dXJuIHQucHVzaChuK1wiIFwiKT53LmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCldLGVbbitcIiBcIl09cn12YXIgdD1bXTtyZXR1cm4gZX1mdW5jdGlvbiByKGUpe3JldHVybiBlW0ldPSEwLGV9ZnVuY3Rpb24gaShlKXt2YXIgdD1xLmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPWUuc3BsaXQoXCJ8XCIpLHI9bi5sZW5ndGg7ci0tOyl3LmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBhKGUsdCl7dmFyIG49dCYmZSxyPW4mJjE9PT1lLm5vZGVUeXBlJiYxPT09dC5ub2RlVHlwZSYmZS5zb3VyY2VJbmRleC10LnNvdXJjZUluZGV4O2lmKHIpcmV0dXJuIHI7aWYobilmb3IoO249bi5uZXh0U2libGluZzspaWYobj09PXQpcmV0dXJuLTE7cmV0dXJuIGU/MTotMX1mdW5jdGlvbiBzKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cImZvcm1cImluIHQ/dC5wYXJlbnROb2RlJiYhMT09PXQuZGlzYWJsZWQ/XCJsYWJlbFwiaW4gdD9cImxhYmVsXCJpbiB0LnBhcmVudE5vZGU/dC5wYXJlbnROb2RlLmRpc2FibGVkPT09ZTp0LmRpc2FibGVkPT09ZTp0LmlzRGlzYWJsZWQ9PT1lfHx0LmlzRGlzYWJsZWQhPT0hZSYmVGUodCk9PT1lOnQuZGlzYWJsZWQ9PT1lOlwibGFiZWxcImluIHQmJnQuZGlzYWJsZWQ9PT1lfX1mdW5jdGlvbiB1KGUpe3JldHVybiByKGZ1bmN0aW9uKHQpe3JldHVybiB0PSt0LHIoZnVuY3Rpb24obixyKXtmb3IodmFyIGksbz1lKFtdLG4ubGVuZ3RoLHQpLGE9by5sZW5ndGg7YS0tOyluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJnZvaWQgMCE9PWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUmJmV9ZnVuY3Rpb24gYygpe31mdW5jdGlvbiBmKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgscj1cIlwiO3Q8bjt0Kyspcis9ZVt0XS52YWx1ZTtyZXR1cm4gcn1mdW5jdGlvbiBwKGUsdCxuKXt2YXIgcj10LmRpcixpPXQubmV4dCxvPWl8fHIsYT1uJiZcInBhcmVudE5vZGVcIj09PW8scz1CKys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLGkpe2Zvcig7dD10W3JdOylpZigxPT09dC5ub2RlVHlwZXx8YSlyZXR1cm4gZSh0LG4saSk7cmV0dXJuITF9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscD1bJCxzXTtpZih1KXtmb3IoO3Q9dFtyXTspaWYoKDE9PT10Lm5vZGVUeXBlfHxhKSYmZSh0LG4sdSkpcmV0dXJuITB9ZWxzZSBmb3IoO3Q9dFtyXTspaWYoMT09PXQubm9kZVR5cGV8fGEpaWYoZj10W0ldfHwodFtJXT17fSksYz1mW3QudW5pcXVlSURdfHwoZlt0LnVuaXF1ZUlEXT17fSksaSYmaT09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl0PXRbcl18fHQ7ZWxzZXtpZigobD1jW29dKSYmbFswXT09PSQmJmxbMV09PT1zKXJldHVybiBwWzJdPWxbMl07aWYoY1tvXT1wLHBbMl09ZSh0LG4sdSkpcmV0dXJuITB9cmV0dXJuITF9fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUubGVuZ3RoPjE/ZnVuY3Rpb24odCxuLHIpe2Zvcih2YXIgaT1lLmxlbmd0aDtpLS07KWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBoKGUsbixyKXtmb3IodmFyIGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspdChlLG5baV0scik7cmV0dXJuIHJ9ZnVuY3Rpb24gZyhlLHQsbixyLGkpe2Zvcih2YXIgbyxhPVtdLHM9MCx1PWUubGVuZ3RoLGw9bnVsbCE9dDtzPHU7cysrKShvPWVbc10pJiYobiYmIW4obyxyLGkpfHwoYS5wdXNoKG8pLGwmJnQucHVzaChzKSkpO3JldHVybiBhfWZ1bmN0aW9uIHYoZSx0LG4saSxvLGEpe3JldHVybiBpJiYhaVtJXSYmKGk9dihpKSksbyYmIW9bSV0mJihvPXYobyxhKSkscihmdW5jdGlvbihyLGEscyx1KXt2YXIgbCxjLGYscD1bXSxkPVtdLHY9YS5sZW5ndGgseT1yfHxoKHR8fFwiKlwiLHMubm9kZVR5cGU/W3NdOnMsW10pLG09IWV8fCFyJiZ0P3k6Zyh5LHAsZSxzLHUpLHg9bj9vfHwocj9lOnZ8fGkpP1tdOmE6bTtpZihuJiZuKG0seCxzLHUpLGkpZm9yKGw9Zyh4LGQpLGkobCxbXSxzLHUpLGM9bC5sZW5ndGg7Yy0tOykoZj1sW2NdKSYmKHhbZFtjXV09IShtW2RbY11dPWYpKTtpZihyKXtpZihvfHxlKXtpZihvKXtmb3IobD1bXSxjPXgubGVuZ3RoO2MtLTspKGY9eFtjXSkmJmwucHVzaChtW2NdPWYpO28obnVsbCx4PVtdLGwsdSl9Zm9yKGM9eC5sZW5ndGg7Yy0tOykoZj14W2NdKSYmKGw9bz9LKHIsZik6cFtjXSk+LTEmJihyW2xdPSEoYVtsXT1mKSl9fWVsc2UgeD1nKHg9PT1hP3guc3BsaWNlKHYseC5sZW5ndGgpOngpLG8/byhudWxsLGEseCx1KTpRLmFwcGx5KGEseCl9KX1mdW5jdGlvbiB5KGUpe2Zvcih2YXIgdCxuLHIsaT1lLmxlbmd0aCxvPXcucmVsYXRpdmVbZVswXS50eXBlXSxhPW98fHcucmVsYXRpdmVbXCIgXCJdLHM9bz8xOjAsdT1wKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dH0sYSwhMCksbD1wKGZ1bmN0aW9uKGUpe3JldHVybiBLKHQsZSk+LTF9LGEsITApLGM9W2Z1bmN0aW9uKGUsbixyKXt2YXIgaT0hbyYmKHJ8fG4hPT1EKXx8KCh0PW4pLm5vZGVUeXBlP3UoZSxuLHIpOmwoZSxuLHIpKTtyZXR1cm4gdD1udWxsLGl9XTtzPGk7cysrKWlmKG49dy5yZWxhdGl2ZVtlW3NdLnR5cGVdKWM9W3AoZChjKSxuKV07ZWxzZXtpZihuPXcuZmlsdGVyW2Vbc10udHlwZV0uYXBwbHkobnVsbCxlW3NdLm1hdGNoZXMpLG5bSV0pe2ZvcihyPSsrcztyPGkmJiF3LnJlbGF0aXZlW2Vbcl0udHlwZV07cisrKTtyZXR1cm4gdihzPjEmJmQoYykscz4xJiZmKGUuc2xpY2UoMCxzLTEpLmNvbmNhdCh7dmFsdWU6XCIgXCI9PT1lW3MtMl0udHlwZT9cIipcIjpcIlwifSkpLnJlcGxhY2Uob2UsXCIkMVwiKSxuLHM8ciYmeShlLnNsaWNlKHMscikpLHI8aSYmeShlPWUuc2xpY2UocikpLHI8aSYmZihlKSl9Yy5wdXNoKG4pfXJldHVybiBkKGMpfWZ1bmN0aW9uIG0oZSxuKXt2YXIgaT1uLmxlbmd0aD4wLG89ZS5sZW5ndGg+MCxhPWZ1bmN0aW9uKHIsYSxzLHUsbCl7dmFyIGMsZixwLGQ9MCxoPVwiMFwiLHY9ciYmW10seT1bXSxtPUQseD1yfHxvJiZ3LmZpbmQuVEFHKFwiKlwiLGwpLGI9JCs9bnVsbD09bT8xOk1hdGgucmFuZG9tKCl8fC4xLFQ9eC5sZW5ndGg7Zm9yKGwmJihEPWE9PT1xfHxhfHxsKTtoIT09VCYmbnVsbCE9KGM9eFtoXSk7aCsrKXtpZihvJiZjKXtmb3IoZj0wLGF8fGMub3duZXJEb2N1bWVudD09PXF8fChqKGMpLHM9IUgpO3A9ZVtmKytdOylpZihwKGMsYXx8cSxzKSl7dS5wdXNoKGMpO2JyZWFrfWwmJigkPWIpfWkmJigoYz0hcCYmYykmJmQtLSxyJiZ2LnB1c2goYykpfWlmKGQrPWgsaSYmaCE9PWQpe2ZvcihmPTA7cD1uW2YrK107KXAodix5LGEscyk7aWYocil7aWYoZD4wKWZvcig7aC0tOyl2W2hdfHx5W2hdfHwoeVtoXT1HLmNhbGwodSkpO3k9Zyh5KX1RLmFwcGx5KHUseSksbCYmIXImJnkubGVuZ3RoPjAmJmQrbi5sZW5ndGg+MSYmdC51bmlxdWVTb3J0KHUpfXJldHVybiBsJiYoJD1iLEQ9bSksdn07cmV0dXJuIGk/cihhKTphfXZhciB4LGIsdyxULEMsRSxrLFMsRCxOLEEsaixxLEwsSCxPLFAsTSxSLEk9XCJzaXp6bGVcIisxKm5ldyBEYXRlLFc9ZS5kb2N1bWVudCwkPTAsQj0wLEY9bigpLF89bigpLHo9bigpLFg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQmJihBPSEwKSwwfSxVPXt9Lmhhc093blByb3BlcnR5LFY9W10sRz1WLnBvcCxZPVYucHVzaCxRPVYucHVzaCxKPVYuc2xpY2UsSz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylpZihlW25dPT09dClyZXR1cm4gbjtyZXR1cm4tMX0sWj1cImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsZWU9XCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLHRlPVwiKD86XFxcXFxcXFwufFtcXFxcdy1dfFteXFwwLVxcXFx4YTBdKStcIixuZT1cIlxcXFxbXCIrZWUrXCIqKFwiK3RlK1wiKSg/OlwiK2VlK1wiKihbKl4kfCF+XT89KVwiK2VlK1wiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIrdGUrXCIpKXwpXCIrZWUrXCIqXFxcXF1cIixyZT1cIjooXCIrdGUrXCIpKD86XFxcXCgoKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8KCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiK25lK1wiKSopfC4qKVxcXFwpfClcIixpZT1uZXcgUmVnRXhwKGVlK1wiK1wiLFwiZ1wiKSxvZT1uZXcgUmVnRXhwKFwiXlwiK2VlK1wiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIitlZStcIiskXCIsXCJnXCIpLGFlPW5ldyBSZWdFeHAoXCJeXCIrZWUrXCIqLFwiK2VlK1wiKlwiKSxzZT1uZXcgUmVnRXhwKFwiXlwiK2VlK1wiKihbPit+XXxcIitlZStcIilcIitlZStcIipcIiksdWU9bmV3IFJlZ0V4cChcIj1cIitlZStcIiooW15cXFxcXSdcXFwiXSo/KVwiK2VlK1wiKlxcXFxdXCIsXCJnXCIpLGxlPW5ldyBSZWdFeHAocmUpLGNlPW5ldyBSZWdFeHAoXCJeXCIrdGUrXCIkXCIpLGZlPXtJRDpuZXcgUmVnRXhwKFwiXiMoXCIrdGUrXCIpXCIpLENMQVNTOm5ldyBSZWdFeHAoXCJeXFxcXC4oXCIrdGUrXCIpXCIpLFRBRzpuZXcgUmVnRXhwKFwiXihcIit0ZStcInxbKl0pXCIpLEFUVFI6bmV3IFJlZ0V4cChcIl5cIituZSksUFNFVURPOm5ldyBSZWdFeHAoXCJeXCIrcmUpLENISUxEOm5ldyBSZWdFeHAoXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiK2VlK1wiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIrZWUrXCIqKD86KFsrLV18KVwiK2VlK1wiKihcXFxcZCspfCkpXCIrZWUrXCIqXFxcXCl8KVwiLFwiaVwiKSxib29sOm5ldyBSZWdFeHAoXCJeKD86XCIrWitcIikkXCIsXCJpXCIpLG5lZWRzQ29udGV4dDpuZXcgUmVnRXhwKFwiXlwiK2VlK1wiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIitlZStcIiooKD86LVxcXFxkKT9cXFxcZCopXCIrZWUrXCIqXFxcXCl8KSg/PVteLV18JClcIixcImlcIil9LHBlPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksZGU9L15oXFxkJC9pLGhlPS9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sZ2U9L14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sdmU9L1srfl0vLHllPW5ldyBSZWdFeHAoXCJcXFxcXFxcXChbXFxcXGRhLWZdezEsNn1cIitlZStcIj98KFwiK2VlK1wiKXwuKVwiLFwiaWdcIiksbWU9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPVwiMHhcIit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OnI8MD9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUocj4+MTB8NTUyOTYsMTAyMyZyfDU2MzIwKX0seGU9LyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csYmU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9cIlxcMFwiPT09ZT9cIu+/vVwiOmUuc2xpY2UoMCwtMSkrXCJcXFxcXCIrZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KStcIiBcIjpcIlxcXFxcIitlfSx3ZT1mdW5jdGlvbigpe2ooKX0sVGU9cChmdW5jdGlvbihlKXtyZXR1cm4hMD09PWUuZGlzYWJsZWQmJihcImZvcm1cImluIGV8fFwibGFiZWxcImluIGUpfSx7ZGlyOlwicGFyZW50Tm9kZVwiLG5leHQ6XCJsZWdlbmRcIn0pO3RyeXtRLmFwcGx5KFY9Si5jYWxsKFcuY2hpbGROb2RlcyksVy5jaGlsZE5vZGVzKSxWW1cuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGUpe1E9e2FwcGx5OlYubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7WS5hcHBseShlLEouY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLHI9MDtlW24rK109dFtyKytdOyk7ZS5sZW5ndGg9bi0xfX19Yj10LnN1cHBvcnQ9e30sQz10LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hIXQmJlwiSFRNTFwiIT09dC5ub2RlTmFtZX0saj10LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lP2Uub3duZXJEb2N1bWVudHx8ZTpXO3JldHVybiByIT09cSYmOT09PXIubm9kZVR5cGUmJnIuZG9jdW1lbnRFbGVtZW50PyhxPXIsTD1xLmRvY3VtZW50RWxlbWVudCxIPSFDKHEpLFchPT1xJiYobj1xLmRlZmF1bHRWaWV3KSYmbi50b3AhPT1uJiYobi5hZGRFdmVudExpc3RlbmVyP24uYWRkRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLHdlLCExKTpuLmF0dGFjaEV2ZW50JiZuLmF0dGFjaEV2ZW50KFwib251bmxvYWRcIix3ZSkpLGIuYXR0cmlidXRlcz1pKGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT1cImlcIiwhZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSxiLmdldEVsZW1lbnRzQnlUYWdOYW1lPWkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQocS5jcmVhdGVDb21tZW50KFwiXCIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RofSksYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWhlLnRlc3QocS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSxiLmdldEJ5SWQ9aShmdW5jdGlvbihlKXtyZXR1cm4gTC5hcHBlbmRDaGlsZChlKS5pZD1JLCFxLmdldEVsZW1lbnRzQnlOYW1lfHwhcS5nZXRFbGVtZW50c0J5TmFtZShJKS5sZW5ndGh9KSxiLmdldEJ5SWQ/KHcuZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZSh5ZSxtZSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZShcImlkXCIpPT09dH19LHcuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJkgpe3ZhciBuPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIG4/W25dOltdfX0pOih3LmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUsbWUpO3JldHVybiBmdW5jdGlvbihlKXt2YXIgbj12b2lkIDAhPT1lLmdldEF0dHJpYnV0ZU5vZGUmJmUuZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO3JldHVybiBuJiZuLnZhbHVlPT09dH19LHcuZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJkgpe3ZhciBuLHIsaSxvPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYobyl7aWYoKG49by5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bb107Zm9yKGk9dC5nZXRFbGVtZW50c0J5TmFtZShlKSxyPTA7bz1pW3IrK107KWlmKChuPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dfXJldHVybltdfX0pLHcuZmluZC5UQUc9Yi5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk6Yi5xc2E/dC5xdWVyeVNlbGVjdG9yQWxsKGUpOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9MCxvPXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZSk7aWYoXCIqXCI9PT1lKXtmb3IoO249b1tpKytdOykxPT09bi5ub2RlVHlwZSYmci5wdXNoKG4pO3JldHVybiByfXJldHVybiBvfSx3LmZpbmQuQ0xBU1M9Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmSClyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfSxQPVtdLE89W10sKGIucXNhPWhlLnRlc3QocS5xdWVyeVNlbGVjdG9yQWxsKSkmJihpKGZ1bmN0aW9uKGUpe0wuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPVwiPGEgaWQ9J1wiK0krXCInPjwvYT48c2VsZWN0IGlkPSdcIitJK1wiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCIsZS5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoJiZPLnB1c2goXCJbKl4kXT1cIitlZStcIiooPzonJ3xcXFwiXFxcIilcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fE8ucHVzaChcIlxcXFxbXCIrZWUrXCIqKD86dmFsdWV8XCIrWitcIilcIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkfj1cIitJK1wiLV1cIikubGVuZ3RofHxPLnB1c2goXCJ+PVwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGh8fE8ucHVzaChcIjpjaGVja2VkXCIpLGUucXVlcnlTZWxlY3RvckFsbChcImEjXCIrSStcIisqXCIpLmxlbmd0aHx8Ty5wdXNoKFwiLiMuK1srfl1cIil9KSxpKGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPVwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7dmFyIHQ9cS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJEXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCYmTy5wdXNoKFwibmFtZVwiK2VlK1wiKlsqXiR8IX5dPz1cIiksMiE9PWUucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCYmTy5wdXNoKFwiOmVuYWJsZWRcIixcIjpkaXNhYmxlZFwiKSxMLmFwcGVuZENoaWxkKGUpLmRpc2FibGVkPSEwLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoJiZPLnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIiksTy5wdXNoKFwiLC4qOlwiKX0pKSwoYi5tYXRjaGVzU2VsZWN0b3I9aGUudGVzdChNPUwubWF0Y2hlc3x8TC53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fEwubW96TWF0Y2hlc1NlbGVjdG9yfHxMLm9NYXRjaGVzU2VsZWN0b3J8fEwubXNNYXRjaGVzU2VsZWN0b3IpKSYmaShmdW5jdGlvbihlKXtiLmRpc2Nvbm5lY3RlZE1hdGNoPU0uY2FsbChlLFwiKlwiKSxNLmNhbGwoZSxcIltzIT0nJ106eFwiKSxQLnB1c2goXCIhPVwiLHJlKX0pLE89Ty5sZW5ndGgmJm5ldyBSZWdFeHAoTy5qb2luKFwifFwiKSksUD1QLmxlbmd0aCYmbmV3IFJlZ0V4cChQLmpvaW4oXCJ8XCIpKSx0PWhlLnRlc3QoTC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksUj10fHxoZS50ZXN0KEwuY29udGFpbnMpP2Z1bmN0aW9uKGUsdCl7dmFyIG49OT09PWUubm9kZVR5cGU/ZS5kb2N1bWVudEVsZW1lbnQ6ZSxyPXQmJnQucGFyZW50Tm9kZTtyZXR1cm4gZT09PXJ8fCEoIXJ8fDEhPT1yLm5vZGVUeXBlfHwhKG4uY29udGFpbnM/bi5jb250YWlucyhyKTplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSl9OmZ1bmN0aW9uKGUsdCl7aWYodClmb3IoO3Q9dC5wYXJlbnROb2RlOylpZih0PT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sWD10P2Z1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIEE9ITAsMDt2YXIgbj0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gbnx8KG49KGUub3duZXJEb2N1bWVudHx8ZSk9PT0odC5vd25lckRvY3VtZW50fHx0KT9lLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpOjEsMSZufHwhYi5zb3J0RGV0YWNoZWQmJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oZSk9PT1uP2U9PT1xfHxlLm93bmVyRG9jdW1lbnQ9PT1XJiZSKFcsZSk/LTE6dD09PXF8fHQub3duZXJEb2N1bWVudD09PVcmJlIoVyx0KT8xOk4/SyhOLGUpLUsoTix0KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gQT0hMCwwO3ZhciBuLHI9MCxpPWUucGFyZW50Tm9kZSxvPXQucGFyZW50Tm9kZSxzPVtlXSx1PVt0XTtpZighaXx8IW8pcmV0dXJuIGU9PT1xPy0xOnQ9PT1xPzE6aT8tMTpvPzE6Tj9LKE4sZSktSyhOLHQpOjA7aWYoaT09PW8pcmV0dXJuIGEoZSx0KTtmb3Iobj1lO249bi5wYXJlbnROb2RlOylzLnVuc2hpZnQobik7Zm9yKG49dDtuPW4ucGFyZW50Tm9kZTspdS51bnNoaWZ0KG4pO2Zvcig7c1tyXT09PXVbcl07KXIrKztyZXR1cm4gcj9hKHNbcl0sdVtyXSk6c1tyXT09PVc/LTE6dVtyXT09PVc/MTowfSxxKTpxfSx0Lm1hdGNoZXM9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdChlLG51bGwsbnVsbCxuKX0sdC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSxuKXtpZigoZS5vd25lckRvY3VtZW50fHxlKSE9PXEmJmooZSksbj1uLnJlcGxhY2UodWUsXCI9JyQxJ11cIiksYi5tYXRjaGVzU2VsZWN0b3ImJkgmJiF6W24rXCIgXCJdJiYoIVB8fCFQLnRlc3QobikpJiYoIU98fCFPLnRlc3QobikpKXRyeXt2YXIgcj1NLmNhbGwoZSxuKTtpZihyfHxiLmRpc2Nvbm5lY3RlZE1hdGNofHxlLmRvY3VtZW50JiYxMSE9PWUuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIHJ9Y2F0Y2goZSl7fXJldHVybiB0KG4scSxudWxsLFtlXSkubGVuZ3RoPjB9LHQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PXEmJmooZSksUihlLHQpfSx0LmF0dHI9ZnVuY3Rpb24oZSx0KXsoZS5vd25lckRvY3VtZW50fHxlKSE9PXEmJmooZSk7dmFyIG49dy5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0scj1uJiZVLmNhbGwody5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIUgpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09cj9yOmIuYXR0cmlidXRlc3x8IUg/ZS5nZXRBdHRyaWJ1dGUodCk6KHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmci5zcGVjaWZpZWQ/ci52YWx1ZTpudWxsfSx0LmVzY2FwZT1mdW5jdGlvbihlKXtyZXR1cm4oZStcIlwiKS5yZXBsYWNlKHhlLGJlKX0sdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIitlKX0sdC51bmlxdWVTb3J0PWZ1bmN0aW9uKGUpe3ZhciB0LG49W10scj0wLGk9MDtpZihBPSFiLmRldGVjdER1cGxpY2F0ZXMsTj0hYi5zb3J0U3RhYmxlJiZlLnNsaWNlKDApLGUuc29ydChYKSxBKXtmb3IoO3Q9ZVtpKytdOyl0PT09ZVtpXSYmKHI9bi5wdXNoKGkpKTtmb3IoO3ItLTspZS5zcGxpY2UobltyXSwxKX1yZXR1cm4gTj1udWxsLGV9LFQ9dC5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49XCJcIixyPTAsaT1lLm5vZGVUeXBlO2lmKGkpe2lmKDE9PT1pfHw5PT09aXx8MTE9PT1pKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9VChlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyKytdOyluKz1UKHQpO3JldHVybiBufSx3PXQuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86cixtYXRjaDpmZSxhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6e1wiPlwiOntkaXI6XCJwYXJlbnROb2RlXCIsZmlyc3Q6ITB9LFwiIFwiOntkaXI6XCJwYXJlbnROb2RlXCJ9LFwiK1wiOntkaXI6XCJwcmV2aW91c1NpYmxpbmdcIixmaXJzdDohMH0sXCJ+XCI6e2RpcjpcInByZXZpb3VzU2libGluZ1wifX0scHJlRmlsdGVyOntBVFRSOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0ucmVwbGFjZSh5ZSxtZSksZVszXT0oZVszXXx8ZVs0XXx8ZVs1XXx8XCJcIikucmVwbGFjZSh5ZSxtZSksXCJ+PVwiPT09ZVsyXSYmKGVbM109XCIgXCIrZVszXStcIiBcIiksZS5zbGljZSgwLDQpfSxDSElMRDpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnRvTG93ZXJDYXNlKCksXCJudGhcIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8dC5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKihcImV2ZW5cIj09PWVbM118fFwib2RkXCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8XCJvZGRcIj09PWVbM10pKTplWzNdJiZ0LmVycm9yKGVbMF0pLGV9LFBTRVVETzpmdW5jdGlvbihlKXt2YXIgdCxuPSFlWzZdJiZlWzJdO3JldHVybiBmZS5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHxcIlwiOm4mJmxlLnRlc3QobikmJih0PUUobiwhMCkpJiYodD1uLmluZGV4T2YoXCIpXCIsbi5sZW5ndGgtdCktbi5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsdCksZVsyXT1uLnNsaWNlKDAsdCkpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUsbWUpLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCIqXCI9PT1lP2Z1bmN0aW9uKCl7cmV0dXJuITB9OmZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10fX0sQ0xBU1M6ZnVuY3Rpb24oZSl7dmFyIHQ9RltlK1wiIFwiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cChcIihefFwiK2VlK1wiKVwiK2UrXCIoXCIrZWUrXCJ8JClcIikpJiZGKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdChcInN0cmluZ1wiPT10eXBlb2YgZS5jbGFzc05hbWUmJmUuY2xhc3NOYW1lfHx2b2lkIDAhPT1lLmdldEF0dHJpYnV0ZSYmZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKXx8XCJcIil9KX0sQVRUUjpmdW5jdGlvbihlLG4scil7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBvPXQuYXR0cihpLGUpO3JldHVybiBudWxsPT1vP1wiIT1cIj09PW46IW58fChvKz1cIlwiLFwiPVwiPT09bj9vPT09cjpcIiE9XCI9PT1uP28hPT1yOlwiXj1cIj09PW4/ciYmMD09PW8uaW5kZXhPZihyKTpcIio9XCI9PT1uP3ImJm8uaW5kZXhPZihyKT4tMTpcIiQ9XCI9PT1uP3ImJm8uc2xpY2UoLXIubGVuZ3RoKT09PXI6XCJ+PVwiPT09bj8oXCIgXCIrby5yZXBsYWNlKGllLFwiIFwiKStcIiBcIikuaW5kZXhPZihyKT4tMTpcInw9XCI9PT1uJiYobz09PXJ8fG8uc2xpY2UoMCxyLmxlbmd0aCsxKT09PXIrXCItXCIpKX19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG89XCJudGhcIiE9PWUuc2xpY2UoMCwzKSxhPVwibGFzdFwiIT09ZS5zbGljZSgtNCkscz1cIm9mLXR5cGVcIj09PXQ7cmV0dXJuIDE9PT1yJiYwPT09aT9mdW5jdGlvbihlKXtyZXR1cm4hIWUucGFyZW50Tm9kZX06ZnVuY3Rpb24odCxuLHUpe3ZhciBsLGMsZixwLGQsaCxnPW8hPT1hP1wibmV4dFNpYmxpbmdcIjpcInByZXZpb3VzU2libGluZ1wiLHY9dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG09IXUmJiFzLHg9ITE7aWYodil7aWYobyl7Zm9yKDtnOyl7Zm9yKHA9dDtwPXBbZ107KWlmKHM/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09eToxPT09cC5ub2RlVHlwZSlyZXR1cm4hMTtoPWc9XCJvbmx5XCI9PT1lJiYhaCYmXCJuZXh0U2libGluZ1wifXJldHVybiEwfWlmKGg9W2E/di5maXJzdENoaWxkOnYubGFzdENoaWxkXSxhJiZtKXtmb3IocD12LGY9cFtJXXx8KHBbSV09e30pLGM9ZltwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pLGw9Y1tlXXx8W10sZD1sWzBdPT09JCYmbFsxXSx4PWQmJmxbMl0scD1kJiZ2LmNoaWxkTm9kZXNbZF07cD0rK2QmJnAmJnBbZ118fCh4PWQ9MCl8fGgucG9wKCk7KWlmKDE9PT1wLm5vZGVUeXBlJiYrK3gmJnA9PT10KXtjW2VdPVskLGQseF07YnJlYWt9fWVsc2UgaWYobSYmKHA9dCxmPXBbSV18fChwW0ldPXt9KSxjPWZbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSxsPWNbZV18fFtdLGQ9bFswXT09PSQmJmxbMV0seD1kKSwhMT09PXgpZm9yKDsocD0rK2QmJnAmJnBbZ118fCh4PWQ9MCl8fGgucG9wKCkpJiYoKHM/cC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09eToxIT09cC5ub2RlVHlwZSl8fCErK3h8fChtJiYoZj1wW0ldfHwocFtJXT17fSksYz1mW3AudW5pcXVlSURdfHwoZltwLnVuaXF1ZUlEXT17fSksY1tlXT1bJCx4XSkscCE9PXQpKTspO3JldHVybih4LT1pKT09PXJ8fHglcj09MCYmeC9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLG4pe3ZhciBpLG89dy5wc2V1ZG9zW2VdfHx3LnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8dC5lcnJvcihcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIrZSk7cmV0dXJuIG9bSV0/byhuKTpvLmxlbmd0aD4xPyhpPVtlLGUsXCJcIixuXSx3LnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9yKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLGk9byhlLG4pLGE9aS5sZW5ndGg7YS0tOylyPUsoZSxpW2FdKSxlW3JdPSEodFtyXT1pW2FdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiBvKGUsMCxpKX0pOm99fSxwc2V1ZG9zOntub3Q6cihmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLGk9ayhlLnJlcGxhY2Uob2UsXCIkMVwiKSk7cmV0dXJuIGlbSV0/cihmdW5jdGlvbihlLHQsbixyKXtmb3IodmFyIG8sYT1pKGUsbnVsbCxyLFtdKSxzPWUubGVuZ3RoO3MtLTspKG89YVtzXSkmJihlW3NdPSEodFtzXT1vKSl9KTpmdW5jdGlvbihlLHIsbyl7cmV0dXJuIHRbMF09ZSxpKHQsbnVsbCxvLG4pLHRbMF09bnVsbCwhbi5wb3AoKX19KSxoYXM6cihmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHQoZSxuKS5sZW5ndGg+MH19KSxjb250YWluczpyKGZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSh5ZSxtZSksZnVuY3Rpb24odCl7cmV0dXJuKHQudGV4dENvbnRlbnR8fHQuaW5uZXJUZXh0fHxUKHQpKS5pbmRleE9mKGUpPi0xfX0pLGxhbmc6cihmdW5jdGlvbihlKXtyZXR1cm4gY2UudGVzdChlfHxcIlwiKXx8dC5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiK2UpLGU9ZS5yZXBsYWNlKHllLG1lKS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKHQpe3ZhciBuO2Rve2lmKG49SD90Lmxhbmc6dC5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKXx8dC5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKXJldHVybihuPW4udG9Mb3dlckNhc2UoKSk9PT1lfHwwPT09bi5pbmRleE9mKGUrXCItXCIpfXdoaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PUx9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09cS5hY3RpdmVFbGVtZW50JiYoIXEuaGFzRm9jdXN8fHEuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6cyghMSksZGlzYWJsZWQ6cyghMCksY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09dCYmISFlLmNoZWNrZWR8fFwib3B0aW9uXCI9PT10JiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCEwPT09ZS5zZWxlY3RlZH0sXG5lbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXcucHNldWRvcy5lbXB0eShlKX0saGVhZGVyOmZ1bmN0aW9uKGUpe3JldHVybiBkZS50ZXN0KGUubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gcGUudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT10JiZcImJ1dHRvblwiPT09ZS50eXBlfHxcImJ1dHRvblwiPT09dH0sdGV4dDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm5cImlucHV0XCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT10LnRvTG93ZXJDYXNlKCkpfSxmaXJzdDp1KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDp1KGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTp1KGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm5bbjwwP24rdDpuXX0pLGV2ZW46dShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDp1KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6dShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPW48MD9uK3Q6bjstLXI+PTA7KWUucHVzaChyKTtyZXR1cm4gZX0pLGd0OnUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0sdy5wc2V1ZG9zLm50aD13LnBzZXVkb3MuZXE7Zm9yKHggaW57cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pdy5wc2V1ZG9zW3hdPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm5cImlucHV0XCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQudHlwZT09PWV9fSh4KTtmb3IoeCBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KXcucHNldWRvc1t4XT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihcImlucHV0XCI9PT1ufHxcImJ1dHRvblwiPT09bikmJnQudHlwZT09PWV9fSh4KTtyZXR1cm4gYy5wcm90b3R5cGU9dy5maWx0ZXJzPXcucHNldWRvcyx3LnNldEZpbHRlcnM9bmV3IGMsRT10LnRva2VuaXplPWZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvLGEscyx1LGwsYz1fW2UrXCIgXCJdO2lmKGMpcmV0dXJuIG4/MDpjLnNsaWNlKDApO2ZvcihzPWUsdT1bXSxsPXcucHJlRmlsdGVyO3M7KXtyJiYhKGk9YWUuZXhlYyhzKSl8fChpJiYocz1zLnNsaWNlKGlbMF0ubGVuZ3RoKXx8cyksdS5wdXNoKG89W10pKSxyPSExLChpPXNlLmV4ZWMocykpJiYocj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpyLHR5cGU6aVswXS5yZXBsYWNlKG9lLFwiIFwiKX0pLHM9cy5zbGljZShyLmxlbmd0aCkpO2ZvcihhIGluIHcuZmlsdGVyKSEoaT1mZVthXS5leGVjKHMpKXx8bFthXSYmIShpPWxbYV0oaSkpfHwocj1pLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpyLHR5cGU6YSxtYXRjaGVzOml9KSxzPXMuc2xpY2Uoci5sZW5ndGgpKTtpZighcilicmVha31yZXR1cm4gbj9zLmxlbmd0aDpzP3QuZXJyb3IoZSk6XyhlLHUpLnNsaWNlKDApfSxrPXQuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1bXSxvPXpbZStcIiBcIl07aWYoIW8pe2Zvcih0fHwodD1FKGUpKSxuPXQubGVuZ3RoO24tLTspbz15KHRbbl0pLG9bSV0/ci5wdXNoKG8pOmkucHVzaChvKTtvPXooZSxtKGkscikpLG8uc2VsZWN0b3I9ZX1yZXR1cm4gb30sUz10LnNlbGVjdD1mdW5jdGlvbihlLHQsbixyKXt2YXIgaSxvLGEscyx1LGM9XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmZSxwPSFyJiZFKGU9Yy5zZWxlY3Rvcnx8ZSk7aWYobj1ufHxbXSwxPT09cC5sZW5ndGgpe2lmKG89cFswXT1wWzBdLnNsaWNlKDApLG8ubGVuZ3RoPjImJlwiSURcIj09PShhPW9bMF0pLnR5cGUmJjk9PT10Lm5vZGVUeXBlJiZIJiZ3LnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEodD0ody5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHllLG1lKSx0KXx8W10pWzBdKSlyZXR1cm4gbjtjJiYodD10LnBhcmVudE5vZGUpLGU9ZS5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1mb3IoaT1mZS5uZWVkc0NvbnRleHQudGVzdChlKT8wOm8ubGVuZ3RoO2ktLSYmKGE9b1tpXSwhdy5yZWxhdGl2ZVtzPWEudHlwZV0pOylpZigodT13LmZpbmRbc10pJiYocj11KGEubWF0Y2hlc1swXS5yZXBsYWNlKHllLG1lKSx2ZS50ZXN0KG9bMF0udHlwZSkmJmwodC5wYXJlbnROb2RlKXx8dCkpKXtpZihvLnNwbGljZShpLDEpLCEoZT1yLmxlbmd0aCYmZihvKSkpcmV0dXJuIFEuYXBwbHkobixyKSxuO2JyZWFrfX1yZXR1cm4oY3x8ayhlLHApKShyLHQsIUgsbiwhdHx8dmUudGVzdChlKSYmbCh0LnBhcmVudE5vZGUpfHx0KSxufSxiLnNvcnRTdGFibGU9SS5zcGxpdChcIlwiKS5zb3J0KFgpLmpvaW4oXCJcIik9PT1JLGIuZGV0ZWN0RHVwbGljYXRlcz0hIUEsaigpLGIuc29ydERldGFjaGVkPWkoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihxLmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKSl9KSxpKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD1cIjxhIGhyZWY9JyMnPjwvYT5cIixcIiNcIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfSl8fG8oXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LFwidHlwZVwiPT09dC50b0xvd2VyQ2FzZSgpPzE6Mil9KSxiLmF0dHJpYnV0ZXMmJmkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPVwiPGlucHV0Lz5cIixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiKSxcIlwiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpfSl8fG8oXCJ2YWx1ZVwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmXCJpbnB1dFwiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiBlLmRlZmF1bHRWYWx1ZX0pLGkoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIil9KXx8byhaLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZighbilyZXR1cm4hMD09PWVbdF0/dC50b0xvd2VyQ2FzZSgpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0pLHR9KGUpO3dlLmZpbmQ9Q2Usd2UuZXhwcj1DZS5zZWxlY3RvcnMsd2UuZXhwcltcIjpcIl09d2UuZXhwci5wc2V1ZG9zLHdlLnVuaXF1ZVNvcnQ9d2UudW5pcXVlPUNlLnVuaXF1ZVNvcnQsd2UudGV4dD1DZS5nZXRUZXh0LHdlLmlzWE1MRG9jPUNlLmlzWE1MLHdlLmNvbnRhaW5zPUNlLmNvbnRhaW5zLHdlLmVzY2FwZVNlbGVjdG9yPUNlLmVzY2FwZTt2YXIgRWU9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1bXSxpPXZvaWQgMCE9PW47KGU9ZVt0XSkmJjkhPT1lLm5vZGVUeXBlOylpZigxPT09ZS5ub2RlVHlwZSl7aWYoaSYmd2UoZSkuaXMobikpYnJlYWs7ci5wdXNoKGUpfXJldHVybiByfSxrZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1bXTtlO2U9ZS5uZXh0U2libGluZykxPT09ZS5ub2RlVHlwZSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn0sU2U9d2UuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsRGU9L148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2k7d2UuZmlsdGVyPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT1cIjpub3QoXCIrZStcIilcIiksMT09PXQubGVuZ3RoJiYxPT09ci5ub2RlVHlwZT93ZS5maW5kLm1hdGNoZXNTZWxlY3RvcihyLGUpP1tyXTpbXTp3ZS5maW5kLm1hdGNoZXMoZSx3ZS5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSx3ZS5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPXRoaXMubGVuZ3RoLGk9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2sod2UoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDt0PHI7dCsrKWlmKHdlLmNvbnRhaW5zKGlbdF0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKG49dGhpcy5wdXNoU3RhY2soW10pLHQ9MDt0PHI7dCsrKXdlLmZpbmQoZSxpW3RdLG4pO3JldHVybiByPjE/d2UudW5pcXVlU29ydChuKTpufSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEodGhpcyxlfHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEodGhpcyxlfHxbXSwhMCkpfSxpczpmdW5jdGlvbihlKXtyZXR1cm4hIWEodGhpcyxcInN0cmluZ1wiPT10eXBlb2YgZSYmU2UudGVzdChlKT93ZShlKTplfHxbXSwhMSkubGVuZ3RofX0pO3ZhciBOZSxBZT0vXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLzsod2UuZm4uaW5pdD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZighZSlyZXR1cm4gdGhpcztpZihuPW58fE5lLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZighKHI9XCI8XCI9PT1lWzBdJiZcIj5cIj09PWVbZS5sZW5ndGgtMV0mJmUubGVuZ3RoPj0zP1tudWxsLGUsbnVsbF06QWUuZXhlYyhlKSl8fCFyWzFdJiZ0KXJldHVybiF0fHx0LmpxdWVyeT8odHx8bikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKHQpLmZpbmQoZSk7aWYoclsxXSl7aWYodD10IGluc3RhbmNlb2Ygd2U/dFswXTp0LHdlLm1lcmdlKHRoaXMsd2UucGFyc2VIVE1MKHJbMV0sdCYmdC5ub2RlVHlwZT90Lm93bmVyRG9jdW1lbnR8fHQ6YWUsITApKSxEZS50ZXN0KHJbMV0pJiZ3ZS5pc1BsYWluT2JqZWN0KHQpKWZvcihyIGluIHQpbWUodGhpc1tyXSk/dGhpc1tyXSh0W3JdKTp0aGlzLmF0dHIocix0W3JdKTtyZXR1cm4gdGhpc31yZXR1cm4gaT1hZS5nZXRFbGVtZW50QnlJZChyWzJdKSxpJiYodGhpc1swXT1pLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm1lKGUpP3ZvaWQgMCE9PW4ucmVhZHk/bi5yZWFkeShlKTplKHdlKTp3ZS5tYWtlQXJyYXkoZSx0aGlzKX0pLnByb3RvdHlwZT13ZS5mbixOZT13ZShhZSk7dmFyIGplPS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLHFlPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O3dlLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PXdlKGUsdGhpcyksbj10Lmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIGU9MDtlPG47ZSsrKWlmKHdlLmNvbnRhaW5zKHRoaXMsdFtlXSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXRoaXMubGVuZ3RoLG89W10sYT1cInN0cmluZ1wiIT10eXBlb2YgZSYmd2UoZSk7aWYoIVNlLnRlc3QoZSkpZm9yKDtyPGk7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKGE/YS5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmd2UuZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSkpe28ucHVzaChuKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT93ZS51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gZT9cInN0cmluZ1wiPT10eXBlb2YgZT9mZS5jYWxsKHdlKGUpLHRoaXNbMF0pOmZlLmNhbGwodGhpcyxlLmpxdWVyeT9lWzBdOmUpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHdlLnVuaXF1ZVNvcnQod2UubWVyZ2UodGhpcy5nZXQoKSx3ZShlLHQpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KSx3ZS5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBFZShlLFwicGFyZW50Tm9kZVwiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRWUoZSxcInBhcmVudE5vZGVcIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gcyhlLFwibmV4dFNpYmxpbmdcIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4gRWUoZSxcIm5leHRTaWJsaW5nXCIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBFZShlLFwicHJldmlvdXNTaWJsaW5nXCIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBFZShlLFwibmV4dFNpYmxpbmdcIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRWUoZSxcInByZXZpb3VzU2libGluZ1wiLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4ga2UoKGUucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsZSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGUpe3JldHVybiBrZShlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gbyhlLFwiaWZyYW1lXCIpP2UuY29udGVudERvY3VtZW50OihvKGUsXCJ0ZW1wbGF0ZVwiKSYmKGU9ZS5jb250ZW50fHxlKSx3ZS5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKGUsdCl7d2UuZm5bZV09ZnVuY3Rpb24obixyKXt2YXIgaT13ZS5tYXAodGhpcyx0LG4pO3JldHVyblwiVW50aWxcIiE9PWUuc2xpY2UoLTUpJiYocj1uKSxyJiZcInN0cmluZ1wiPT10eXBlb2YgciYmKGk9d2UuZmlsdGVyKHIsaSkpLHRoaXMubGVuZ3RoPjEmJihxZVtlXXx8d2UudW5pcXVlU29ydChpKSxqZS50ZXN0KGUpJiZpLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2soaSl9fSk7dmFyIExlPS9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZzt3ZS5DYWxsYmFja3M9ZnVuY3Rpb24oZSl7ZT1cInN0cmluZ1wiPT10eXBlb2YgZT91KGUpOndlLmV4dGVuZCh7fSxlKTt2YXIgdCxuLGksbyxhPVtdLHM9W10sbD0tMSxjPWZ1bmN0aW9uKCl7Zm9yKG89b3x8ZS5vbmNlLGk9dD0hMDtzLmxlbmd0aDtsPS0xKWZvcihuPXMuc2hpZnQoKTsrK2w8YS5sZW5ndGg7KSExPT09YVtsXS5hcHBseShuWzBdLG5bMV0pJiZlLnN0b3BPbkZhbHNlJiYobD1hLmxlbmd0aCxuPSExKTtlLm1lbW9yeXx8KG49ITEpLHQ9ITEsbyYmKGE9bj9bXTpcIlwiKX0sZj17YWRkOmZ1bmN0aW9uKCl7cmV0dXJuIGEmJihuJiYhdCYmKGw9YS5sZW5ndGgtMSxzLnB1c2gobikpLGZ1bmN0aW9uIHQobil7d2UuZWFjaChuLGZ1bmN0aW9uKG4saSl7bWUoaSk/ZS51bmlxdWUmJmYuaGFzKGkpfHxhLnB1c2goaSk6aSYmaS5sZW5ndGgmJlwic3RyaW5nXCIhPT1yKGkpJiZ0KGkpfSl9KGFyZ3VtZW50cyksbiYmIXQmJmMoKSksdGhpc30scmVtb3ZlOmZ1bmN0aW9uKCl7cmV0dXJuIHdlLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuOyhuPXdlLmluQXJyYXkodCxhLG4pKT4tMTspYS5zcGxpY2UobiwxKSxuPD1sJiZsLS19KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/d2UuaW5BcnJheShlLGEpPi0xOmEubGVuZ3RoPjB9LGVtcHR5OmZ1bmN0aW9uKCl7cmV0dXJuIGEmJihhPVtdKSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIG89cz1bXSxhPW49XCJcIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiFhfSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIG89cz1bXSxufHx0fHwoYT1uPVwiXCIpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiEhb30sZmlyZVdpdGg6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gb3x8KG49bnx8W10sbj1bZSxuLnNsaWNlP24uc2xpY2UoKTpuXSxzLnB1c2gobiksdHx8YygpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIGYuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfX07cmV0dXJuIGZ9LHdlLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24odCl7dmFyIG49W1tcIm5vdGlmeVwiLFwicHJvZ3Jlc3NcIix3ZS5DYWxsYmFja3MoXCJtZW1vcnlcIiksd2UuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLDJdLFtcInJlc29sdmVcIixcImRvbmVcIix3ZS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSx3ZS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwwLFwicmVzb2x2ZWRcIl0sW1wicmVqZWN0XCIsXCJmYWlsXCIsd2UuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksd2UuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksMSxcInJlamVjdGVkXCJdXSxyPVwicGVuZGluZ1wiLGk9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBvLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGkudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB3ZS5EZWZlcnJlZChmdW5jdGlvbih0KXt3ZS5lYWNoKG4sZnVuY3Rpb24obixyKXt2YXIgaT1tZShlW3JbNF1dKSYmZVtyWzRdXTtvW3JbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9aSYmaS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbWUoZS5wcm9taXNlKT9lLnByb21pc2UoKS5wcm9ncmVzcyh0Lm5vdGlmeSkuZG9uZSh0LnJlc29sdmUpLmZhaWwodC5yZWplY3QpOnRbclswXStcIldpdGhcIl0odGhpcyxpP1tlXTphcmd1bWVudHMpfSl9KSxlPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxyLGkpe2Z1bmN0aW9uIG8odCxuLHIsaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHM9dGhpcyx1PWFyZ3VtZW50cyxmPWZ1bmN0aW9uKCl7dmFyIGUsZjtpZighKHQ8YSkpe2lmKChlPXIuYXBwbHkocyx1KSk9PT1uLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIpO2Y9ZSYmKFwib2JqZWN0XCI9PXR5cGVvZiBlfHxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlKSYmZS50aGVuLG1lKGYpP2k/Zi5jYWxsKGUsbyhhLG4sbCxpKSxvKGEsbixjLGkpKTooYSsrLGYuY2FsbChlLG8oYSxuLGwsaSksbyhhLG4sYyxpKSxvKGEsbixsLG4ubm90aWZ5V2l0aCkpKToociE9PWwmJihzPXZvaWQgMCx1PVtlXSksKGl8fG4ucmVzb2x2ZVdpdGgpKHMsdSkpfX0scD1pP2Y6ZnVuY3Rpb24oKXt0cnl7ZigpfWNhdGNoKGUpe3dlLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2smJndlLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soZSxwLnN0YWNrVHJhY2UpLHQrMT49YSYmKHIhPT1jJiYocz12b2lkIDAsdT1bZV0pLG4ucmVqZWN0V2l0aChzLHUpKX19O3Q/cCgpOih3ZS5EZWZlcnJlZC5nZXRTdGFja0hvb2smJihwLnN0YWNrVHJhY2U9d2UuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCkpLGUuc2V0VGltZW91dChwKSl9fXZhciBhPTA7cmV0dXJuIHdlLkRlZmVycmVkKGZ1bmN0aW9uKGUpe25bMF1bM10uYWRkKG8oMCxlLG1lKGkpP2k6bCxlLm5vdGlmeVdpdGgpKSxuWzFdWzNdLmFkZChvKDAsZSxtZSh0KT90OmwpKSxuWzJdWzNdLmFkZChvKDAsZSxtZShyKT9yOmMpKX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZT93ZS5leHRlbmQoZSxpKTppfX0sbz17fTtyZXR1cm4gd2UuZWFjaChuLGZ1bmN0aW9uKGUsdCl7dmFyIGE9dFsyXSxzPXRbNV07aVt0WzFdXT1hLmFkZCxzJiZhLmFkZChmdW5jdGlvbigpe3I9c30sblszLWVdWzJdLmRpc2FibGUsblszLWVdWzNdLmRpc2FibGUsblswXVsyXS5sb2NrLG5bMF1bM10ubG9jayksYS5hZGQodFszXS5maXJlKSxvW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIG9bdFswXStcIldpdGhcIl0odGhpcz09PW8/dm9pZCAwOnRoaXMsYXJndW1lbnRzKSx0aGlzfSxvW3RbMF0rXCJXaXRoXCJdPWEuZmlyZVdpdGh9KSxpLnByb21pc2UobyksdCYmdC5jYWxsKG8sbyksb30sd2hlbjpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49dCxyPUFycmF5KG4pLGk9dWUuY2FsbChhcmd1bWVudHMpLG89d2UuRGVmZXJyZWQoKSxhPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihuKXtyW2VdPXRoaXMsaVtlXT1hcmd1bWVudHMubGVuZ3RoPjE/dWUuY2FsbChhcmd1bWVudHMpOm4sLS10fHxvLnJlc29sdmVXaXRoKHIsaSl9fTtpZih0PD0xJiYoZihlLG8uZG9uZShhKG4pKS5yZXNvbHZlLG8ucmVqZWN0LCF0KSxcInBlbmRpbmdcIj09PW8uc3RhdGUoKXx8bWUoaVtuXSYmaVtuXS50aGVuKSkpcmV0dXJuIG8udGhlbigpO2Zvcig7bi0tOylmKGlbbl0sYShuKSxvLnJlamVjdCk7cmV0dXJuIG8ucHJvbWlzZSgpfX0pO3ZhciBIZT0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLzt3ZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rPWZ1bmN0aW9uKHQsbil7ZS5jb25zb2xlJiZlLmNvbnNvbGUud2FybiYmdCYmSGUudGVzdCh0Lm5hbWUpJiZlLmNvbnNvbGUud2FybihcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiK3QubWVzc2FnZSx0LnN0YWNrLG4pfSx3ZS5yZWFkeUV4Y2VwdGlvbj1mdW5jdGlvbih0KXtlLnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aHJvdyB0fSl9O3ZhciBPZT13ZS5EZWZlcnJlZCgpO3dlLmZuLnJlYWR5PWZ1bmN0aW9uKGUpe3JldHVybiBPZS50aGVuKGUpLmNhdGNoKGZ1bmN0aW9uKGUpe3dlLnJlYWR5RXhjZXB0aW9uKGUpfSksdGhpc30sd2UuZXh0ZW5kKHtpc1JlYWR5OiExLHJlYWR5V2FpdDoxLHJlYWR5OmZ1bmN0aW9uKGUpeyghMD09PWU/LS13ZS5yZWFkeVdhaXQ6d2UuaXNSZWFkeSl8fCh3ZS5pc1JlYWR5PSEwLCEwIT09ZSYmLS13ZS5yZWFkeVdhaXQ+MHx8T2UucmVzb2x2ZVdpdGgoYWUsW3dlXSkpfX0pLHdlLnJlYWR5LnRoZW49T2UudGhlbixcImNvbXBsZXRlXCI9PT1hZS5yZWFkeVN0YXRlfHxcImxvYWRpbmdcIiE9PWFlLnJlYWR5U3RhdGUmJiFhZS5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/ZS5zZXRUaW1lb3V0KHdlLnJlYWR5KTooYWUuYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIixwKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIscCkpO3ZhciBQZT1mdW5jdGlvbihlLHQsbixpLG8sYSxzKXt2YXIgdT0wLGw9ZS5sZW5ndGgsYz1udWxsPT1uO2lmKFwib2JqZWN0XCI9PT1yKG4pKXtvPSEwO2Zvcih1IGluIG4pUGUoZSx0LHUsblt1XSwhMCxhLHMpfWVsc2UgaWYodm9pZCAwIT09aSYmKG89ITAsbWUoaSl8fChzPSEwKSxjJiYocz8odC5jYWxsKGUsaSksdD1udWxsKTooYz10LHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBjLmNhbGwod2UoZSksbil9KSksdCkpZm9yKDt1PGw7dSsrKXQoZVt1XSxuLHM/aTppLmNhbGwoZVt1XSx1LHQoZVt1XSxuKSkpO3JldHVybiBvP2U6Yz90LmNhbGwoZSk6bD90KGVbMF0sbik6YX0sTWU9L14tbXMtLyxSZT0vLShbYS16XSkvZyxJZT1mdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV8fDk9PT1lLm5vZGVUeXBlfHwhK2Uubm9kZVR5cGV9O2cudWlkPTEsZy5wcm90b3R5cGU9e2NhY2hlOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdHx8KHQ9e30sSWUoZSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT10Ok9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHRoaXMuZXhwYW5kbyx7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KSkpLHR9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaT10aGlzLmNhY2hlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KWlbaCh0KV09bjtlbHNlIGZvcihyIGluIHQpaVtoKHIpXT10W3JdO3JldHVybiBpfSxnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD90aGlzLmNhY2hlKGUpOmVbdGhpcy5leHBhbmRvXSYmZVt0aGlzLmV4cGFuZG9dW2godCldfSxhY2Nlc3M6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2b2lkIDA9PT10fHx0JiZcInN0cmluZ1wiPT10eXBlb2YgdCYmdm9pZCAwPT09bj90aGlzLmdldChlLHQpOih0aGlzLnNldChlLHQsbiksdm9pZCAwIT09bj9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPWVbdGhpcy5leHBhbmRvXTtpZih2b2lkIDAhPT1yKXtpZih2b2lkIDAhPT10KXtBcnJheS5pc0FycmF5KHQpP3Q9dC5tYXAoaCk6KHQ9aCh0KSx0PXQgaW4gcj9bdF06dC5tYXRjaChMZSl8fFtdKSxuPXQubGVuZ3RoO2Zvcig7bi0tOylkZWxldGUgclt0W25dXX0odm9pZCAwPT09dHx8d2UuaXNFbXB0eU9iamVjdChyKSkmJihlLm5vZGVUeXBlP2VbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIGVbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09dCYmIXdlLmlzRW1wdHlPYmplY3QodCl9fTt2YXIgV2U9bmV3IGcsJGU9bmV3IGcsQmU9L14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLEZlPS9bQS1aXS9nO3dlLmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gJGUuaGFzRGF0YShlKXx8V2UuaGFzRGF0YShlKX0sZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuICRlLmFjY2VzcyhlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXskZS5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBXZS5hY2Nlc3MoZSx0LG4pfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe1dlLnJlbW92ZShlLHQpfX0pLHdlLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxvPXRoaXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09ZSl7aWYodGhpcy5sZW5ndGgmJihpPSRlLmdldChvKSwxPT09by5ub2RlVHlwZSYmIVdlLmdldChvLFwiaGFzRGF0YUF0dHJzXCIpKSl7Zm9yKG49YS5sZW5ndGg7bi0tOylhW25dJiYocj1hW25dLm5hbWUsMD09PXIuaW5kZXhPZihcImRhdGEtXCIpJiYocj1oKHIuc2xpY2UoNSkpLHkobyxyLGlbcl0pKSk7V2Uuc2V0KG8sXCJoYXNEYXRhQXR0cnNcIiwhMCl9cmV0dXJuIGl9cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIGU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7JGUuc2V0KHRoaXMsZSl9KTpQZSh0aGlzLGZ1bmN0aW9uKHQpe3ZhciBuO2lmKG8mJnZvaWQgMD09PXQpe2lmKHZvaWQgMCE9PShuPSRlLmdldChvLGUpKSlyZXR1cm4gbjtpZih2b2lkIDAhPT0obj15KG8sZSkpKXJldHVybiBufWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7JGUuc2V0KHRoaXMsZSx0KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXskZS5yZW1vdmUodGhpcyxlKX0pfX0pLHdlLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fFwiZnhcIikrXCJxdWV1ZVwiLHI9V2UuZ2V0KGUsdCksbiYmKCFyfHxBcnJheS5pc0FycmF5KG4pP3I9V2UuYWNjZXNzKGUsdCx3ZS5tYWtlQXJyYXkobikpOnIucHVzaChuKSkscnx8W119LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fFwiZnhcIjt2YXIgbj13ZS5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz13ZS5fcXVldWVIb29rcyhlLHQpLGE9ZnVuY3Rpb24oKXt3ZS5kZXF1ZXVlKGUsdCl9O1wiaW5wcm9ncmVzc1wiPT09aSYmKGk9bi5zaGlmdCgpLHItLSksaSYmKFwiZnhcIj09PXQmJm4udW5zaGlmdChcImlucHJvZ3Jlc3NcIiksZGVsZXRlIG8uc3RvcCxpLmNhbGwoZSxhLG8pKSwhciYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCtcInF1ZXVlSG9va3NcIjtyZXR1cm4gV2UuZ2V0KGUsbil8fFdlLmFjY2VzcyhlLG4se2VtcHR5OndlLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLmFkZChmdW5jdGlvbigpe1dlLnJlbW92ZShlLFt0K1wicXVldWVcIixuXSl9KX0pfX0pLHdlLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlJiYodD1lLGU9XCJmeFwiLG4tLSksYXJndW1lbnRzLmxlbmd0aDxuP3dlLnF1ZXVlKHRoaXNbMF0sZSk6dm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXdlLnF1ZXVlKHRoaXMsZSx0KTt3ZS5fcXVldWVIb29rcyh0aGlzLGUpLFwiZnhcIj09PWUmJlwiaW5wcm9ncmVzc1wiIT09blswXSYmd2UuZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3dlLmRlcXVldWUodGhpcyxlKX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fFwiZnhcIixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTEsaT13ZS5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHM9ZnVuY3Rpb24oKXstLXJ8fGkucmVzb2x2ZVdpdGgobyxbb10pfTtmb3IoXCJzdHJpbmdcIiE9dHlwZW9mIGUmJih0PWUsZT12b2lkIDApLGU9ZXx8XCJmeFwiO2EtLTspKG49V2UuZ2V0KG9bYV0sZStcInF1ZXVlSG9va3NcIikpJiZuLmVtcHR5JiYocisrLG4uZW1wdHkuYWRkKHMpKTtyZXR1cm4gcygpLGkucHJvbWlzZSh0KX19KTt2YXIgX2U9L1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLHplPW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK19lK1wiKShbYS16JV0qKSRcIixcImlcIiksWGU9W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLFVlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9dHx8ZSxcIm5vbmVcIj09PWUuc3R5bGUuZGlzcGxheXx8XCJcIj09PWUuc3R5bGUuZGlzcGxheSYmd2UuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpJiZcIm5vbmVcIj09PXdlLmNzcyhlLFwiZGlzcGxheVwiKX0sVmU9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9LEdlPXt9O3dlLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbigpe3JldHVybiBiKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGU/ZT90aGlzLnNob3coKTp0aGlzLmhpZGUoKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtVZSh0aGlzKT93ZSh0aGlzKS5zaG93KCk6d2UodGhpcykuaGlkZSgpfSl9fSk7dmFyIFllPS9eKD86Y2hlY2tib3h8cmFkaW8pJC9pLFFlPS88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKykvaSxKZT0vXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pLEtlPXtvcHRpb246WzEsXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsXCI8L3NlbGVjdD5cIl0sdGhlYWQ6WzEsXCI8dGFibGU+XCIsXCI8L3RhYmxlPlwiXSxjb2w6WzIsXCI8dGFibGU+PGNvbGdyb3VwPlwiLFwiPC9jb2xncm91cD48L3RhYmxlPlwiXSx0cjpbMixcIjx0YWJsZT48dGJvZHk+XCIsXCI8L3Rib2R5PjwvdGFibGU+XCJdLHRkOlszLFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIl0sX2RlZmF1bHQ6WzAsXCJcIixcIlwiXX07S2Uub3B0Z3JvdXA9S2Uub3B0aW9uLEtlLnRib2R5PUtlLnRmb290PUtlLmNvbGdyb3VwPUtlLmNhcHRpb249S2UudGhlYWQsS2UudGg9S2UudGQ7dmFyIFplPS88fCYjP1xcdys7LzshZnVuY3Rpb24oKXt2YXIgZT1hZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdD1lLmFwcGVuZENoaWxkKGFlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLG49YWUuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO24uc2V0QXR0cmlidXRlKFwidHlwZVwiLFwicmFkaW9cIiksbi5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpLG4uc2V0QXR0cmlidXRlKFwibmFtZVwiLFwidFwiKSx0LmFwcGVuZENoaWxkKG4pLHllLmNoZWNrQ2xvbmU9dC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5pbm5lckhUTUw9XCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCIseWUubm9DbG9uZUNoZWNrZWQ9ISF0LmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0oKTt2YXIgZXQ9YWUuZG9jdW1lbnRFbGVtZW50LHR0PS9ea2V5LyxudD0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8scnQ9L14oW14uXSopKD86XFwuKC4rKXwpLzt3ZS5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZCxoLGcsdj1XZS5nZXQoZSk7aWYodilmb3Iobi5oYW5kbGVyJiYobz1uLG49by5oYW5kbGVyLGk9by5zZWxlY3RvciksaSYmd2UuZmluZC5tYXRjaGVzU2VsZWN0b3IoZXQsaSksbi5ndWlkfHwobi5ndWlkPXdlLmd1aWQrKyksKHU9di5ldmVudHMpfHwodT12LmV2ZW50cz17fSksKGE9di5oYW5kbGUpfHwoYT12LmhhbmRsZT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09d2UmJndlLmV2ZW50LnRyaWdnZXJlZCE9PXQudHlwZT93ZS5ldmVudC5kaXNwYXRjaC5hcHBseShlLGFyZ3VtZW50cyk6dm9pZCAwfSksdD0odHx8XCJcIikubWF0Y2goTGUpfHxbXCJcIl0sbD10Lmxlbmd0aDtsLS07KXM9cnQuZXhlYyh0W2xdKXx8W10sZD1nPXNbMV0saD0oc1syXXx8XCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSxkJiYoZj13ZS5ldmVudC5zcGVjaWFsW2RdfHx7fSxkPShpP2YuZGVsZWdhdGVUeXBlOmYuYmluZFR5cGUpfHxkLGY9d2UuZXZlbnQuc3BlY2lhbFtkXXx8e30sYz13ZS5leHRlbmQoe3R5cGU6ZCxvcmlnVHlwZTpnLGRhdGE6cixoYW5kbGVyOm4sZ3VpZDpuLmd1aWQsc2VsZWN0b3I6aSxuZWVkc0NvbnRleHQ6aSYmd2UuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChpKSxuYW1lc3BhY2U6aC5qb2luKFwiLlwiKX0sbyksKHA9dVtkXSl8fChwPXVbZF09W10scC5kZWxlZ2F0ZUNvdW50PTAsZi5zZXR1cCYmITEhPT1mLnNldHVwLmNhbGwoZSxyLGgsYSl8fGUuYWRkRXZlbnRMaXN0ZW5lciYmZS5hZGRFdmVudExpc3RlbmVyKGQsYSkpLGYuYWRkJiYoZi5hZGQuY2FsbChlLGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9bi5ndWlkKSksaT9wLnNwbGljZShwLmRlbGVnYXRlQ291bnQrKywwLGMpOnAucHVzaChjKSx3ZS5ldmVudC5nbG9iYWxbZF09ITApfSxyZW1vdmU6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9V2UuaGFzRGF0YShlKSYmV2UuZ2V0KGUpO2lmKHYmJih1PXYuZXZlbnRzKSl7Zm9yKHQ9KHR8fFwiXCIpLm1hdGNoKExlKXx8W1wiXCJdLGw9dC5sZW5ndGg7bC0tOylpZihzPXJ0LmV4ZWModFtsXSl8fFtdLGQ9Zz1zWzFdLGg9KHNbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksZCl7Zm9yKGY9d2UuZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0ocj9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxwPXVbZF18fFtdLHM9c1syXSYmbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK2guam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpLGE9bz1wLmxlbmd0aDtvLS07KWM9cFtvXSwhaSYmZyE9PWMub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWMuZ3VpZHx8cyYmIXMudGVzdChjLm5hbWVzcGFjZSl8fHImJnIhPT1jLnNlbGVjdG9yJiYoXCIqKlwiIT09cnx8IWMuc2VsZWN0b3IpfHwocC5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZwLmRlbGVnYXRlQ291bnQtLSxmLnJlbW92ZSYmZi5yZW1vdmUuY2FsbChlLGMpKTthJiYhcC5sZW5ndGgmJihmLnRlYXJkb3duJiYhMSE9PWYudGVhcmRvd24uY2FsbChlLGgsdi5oYW5kbGUpfHx3ZS5yZW1vdmVFdmVudChlLGQsdi5oYW5kbGUpLGRlbGV0ZSB1W2RdKX1lbHNlIGZvcihkIGluIHUpd2UuZXZlbnQucmVtb3ZlKGUsZCt0W2xdLG4sciwhMCk7d2UuaXNFbXB0eU9iamVjdCh1KSYmV2UucmVtb3ZlKGUsXCJoYW5kbGUgZXZlbnRzXCIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHM9d2UuZXZlbnQuZml4KGUpLHU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGw9KFdlLmdldCh0aGlzLFwiZXZlbnRzXCIpfHx7fSlbcy50eXBlXXx8W10sYz13ZS5ldmVudC5zcGVjaWFsW3MudHlwZV18fHt9O2Zvcih1WzBdPXMsdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspdVt0XT1hcmd1bWVudHNbdF07aWYocy5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHMpKXtmb3IoYT13ZS5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMscyxsKSx0PTA7KGk9YVt0KytdKSYmIXMuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKHMuY3VycmVudFRhcmdldD1pLmVsZW0sbj0wOyhvPWkuaGFuZGxlcnNbbisrXSkmJiFzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7KXMucm5hbWVzcGFjZSYmIXMucm5hbWVzcGFjZS50ZXN0KG8ubmFtZXNwYWNlKXx8KHMuaGFuZGxlT2JqPW8scy5kYXRhPW8uZGF0YSx2b2lkIDAhPT0ocj0oKHdlLmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkoaS5lbGVtLHUpKSYmITE9PT0ocy5yZXN1bHQ9cikmJihzLnByZXZlbnREZWZhdWx0KCkscy5zdG9wUHJvcGFnYXRpb24oKSkpO3JldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHMpLHMucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbyxhLHM9W10sdT10LmRlbGVnYXRlQ291bnQsbD1lLnRhcmdldDtpZih1JiZsLm5vZGVUeXBlJiYhKFwiY2xpY2tcIj09PWUudHlwZSYmZS5idXR0b24+PTEpKWZvcig7bCE9PXRoaXM7bD1sLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWwubm9kZVR5cGUmJihcImNsaWNrXCIhPT1lLnR5cGV8fCEwIT09bC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30sbj0wO248dTtuKyspcj10W25dLGk9ci5zZWxlY3RvcitcIiBcIix2b2lkIDA9PT1hW2ldJiYoYVtpXT1yLm5lZWRzQ29udGV4dD93ZShpLHRoaXMpLmluZGV4KGwpPi0xOndlLmZpbmQoaSx0aGlzLG51bGwsW2xdKS5sZW5ndGgpLGFbaV0mJm8ucHVzaChyKTtvLmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6b30pfXJldHVybiBsPXRoaXMsdTx0Lmxlbmd0aCYmcy5wdXNoKHtlbGVtOmwsaGFuZGxlcnM6dC5zbGljZSh1KX0pLHN9LGFkZFByb3A6ZnVuY3Rpb24oZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkod2UuRXZlbnQucHJvdG90eXBlLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLGdldDptZSh0KT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdCh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W2VdfSxzZXQ6ZnVuY3Rpb24odCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsZSx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dH0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbd2UuZXhwYW5kb10/ZTpuZXcgd2UuRXZlbnQoZSl9LHNwZWNpYWw6e2xvYWQ6e25vQnViYmxlOiEwfSxmb2N1czp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXMhPT1TKCkmJnRoaXMuZm9jdXMpcmV0dXJuIHRoaXMuZm9jdXMoKSwhMX0sZGVsZWdhdGVUeXBlOlwiZm9jdXNpblwifSxibHVyOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcz09PVMoKSYmdGhpcy5ibHVyKXJldHVybiB0aGlzLmJsdXIoKSwhMX0sZGVsZWdhdGVUeXBlOlwiZm9jdXNvdXRcIn0sY2xpY2s6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZihcImNoZWNrYm94XCI9PT10aGlzLnR5cGUmJnRoaXMuY2xpY2smJm8odGhpcyxcImlucHV0XCIpKXJldHVybiB0aGlzLmNsaWNrKCksITF9LF9kZWZhdWx0OmZ1bmN0aW9uKGUpe3JldHVybiBvKGUudGFyZ2V0LFwiYVwiKX19LGJlZm9yZXVubG9hZDp7cG9zdERpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUucmVzdWx0JiZlLm9yaWdpbmFsRXZlbnQmJihlLm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWU9ZS5yZXN1bHQpfX19fSx3ZS5yZW1vdmVFdmVudD1mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuKX0sd2UuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiB3ZS5FdmVudCkpcmV0dXJuIG5ldyB3ZS5FdmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fHZvaWQgMD09PWUuZGVmYXVsdFByZXZlbnRlZCYmITE9PT1lLnJldHVyblZhbHVlP0U6ayx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZ3ZS5leHRlbmQodGhpcyx0KSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKSx0aGlzW3dlLmV4cGFuZG9dPSEwfSx3ZS5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOndlLkV2ZW50LGlzRGVmYXVsdFByZXZlbnRlZDprLGlzUHJvcGFnYXRpb25TdG9wcGVkOmssaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6ayxpc1NpbXVsYXRlZDohMSxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1FLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUUsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcFByb3BhZ2F0aW9uKCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkPUUsZSYmIXRoaXMuaXNTaW11bGF0ZWQmJmUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LHdlLmVhY2goe2FsdEtleTohMCxidWJibGVzOiEwLGNhbmNlbGFibGU6ITAsY2hhbmdlZFRvdWNoZXM6ITAsY3RybEtleTohMCxkZXRhaWw6ITAsZXZlbnRQaGFzZTohMCxtZXRhS2V5OiEwLHBhZ2VYOiEwLHBhZ2VZOiEwLHNoaWZ0S2V5OiEwLHZpZXc6ITAsY2hhcjohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDpmdW5jdGlvbihlKXt2YXIgdD1lLmJ1dHRvbjtyZXR1cm4gbnVsbD09ZS53aGljaCYmdHQudGVzdChlLnR5cGUpP251bGwhPWUuY2hhckNvZGU/ZS5jaGFyQ29kZTplLmtleUNvZGU6IWUud2hpY2gmJnZvaWQgMCE9PXQmJm50LnRlc3QoZS50eXBlKT8xJnQ/MToyJnQ/Mzo0JnQ/MjowOmUud2hpY2h9fSx3ZS5ldmVudC5hZGRQcm9wKSx3ZS5lYWNoKHttb3VzZWVudGVyOlwibW91c2VvdmVyXCIsbW91c2VsZWF2ZTpcIm1vdXNlb3V0XCIscG9pbnRlcmVudGVyOlwicG9pbnRlcm92ZXJcIixwb2ludGVybGVhdmU6XCJwb2ludGVyb3V0XCJ9LGZ1bmN0aW9uKGUsdCl7d2UuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LG89ZS5oYW5kbGVPYmo7cmV0dXJuIGkmJihpPT09cnx8d2UuY29udGFpbnMocixpKSl8fChlLnR5cGU9by5vcmlnVHlwZSxuPW8uaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQpLG59fX0pLHdlLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIEQodGhpcyxlLHQsbixyKX0sb25lOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBEKHRoaXMsZSx0LG4sciwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiByPWUuaGFuZGxlT2JqLHdlKGUuZGVsZWdhdGVUYXJnZXQpLm9mZihyLm5hbWVzcGFjZT9yLm9yaWdUeXBlK1wiLlwiK3IubmFtZXNwYWNlOnIub3JpZ1R5cGUsci5zZWxlY3RvcixyLmhhbmRsZXIpLHRoaXM7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpe2ZvcihpIGluIGUpdGhpcy5vZmYoaSx0LGVbaV0pO3JldHVybiB0aGlzfXJldHVybiExIT09dCYmXCJmdW5jdGlvblwiIT10eXBlb2YgdHx8KG49dCx0PXZvaWQgMCksITE9PT1uJiYobj1rKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt3ZS5ldmVudC5yZW1vdmUodGhpcyxlLG4sdCl9KX19KTt2YXIgaXQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKVtePl0qKVxcLz4vZ2ksb3Q9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksYXQ9L2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxzdD0vXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7d2UuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoaXQsXCI8JDE+PC8kMj5cIil9LGNsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzPWUuY2xvbmVOb2RlKCEwKSx1PXdlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZighKHllLm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx3ZS5pc1hNTERvYyhlKSkpZm9yKGE9dyhzKSxvPXcoZSkscj0wLGk9by5sZW5ndGg7cjxpO3IrKylMKG9bcl0sYVtyXSk7aWYodClpZihuKWZvcihvPW98fHcoZSksYT1hfHx3KHMpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspcShvW3JdLGFbcl0pO2Vsc2UgcShlLHMpO3JldHVybiBhPXcocyxcInNjcmlwdFwiKSxhLmxlbmd0aD4wJiZUKGEsIXUmJncoZSxcInNjcmlwdFwiKSksc30sY2xlYW5EYXRhOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHIsaT13ZS5ldmVudC5zcGVjaWFsLG89MDt2b2lkIDAhPT0obj1lW29dKTtvKyspaWYoSWUobikpe2lmKHQ9bltXZS5leHBhbmRvXSl7aWYodC5ldmVudHMpZm9yKHIgaW4gdC5ldmVudHMpaVtyXT93ZS5ldmVudC5yZW1vdmUobixyKTp3ZS5yZW1vdmVFdmVudChuLHIsdC5oYW5kbGUpO25bV2UuZXhwYW5kb109dm9pZCAwfW5bJGUuZXhwYW5kb10mJihuWyRlLmV4cGFuZG9dPXZvaWQgMCl9fX0pLHdlLmZuLmV4dGVuZCh7ZGV0YWNoOmZ1bmN0aW9uKGUpe3JldHVybiBPKHRoaXMsZSwhMCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBQZSh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP3dlLnRleHQodGhpcyk6dGhpcy5lbXB0eSgpLmVhY2goZnVuY3Rpb24oKXsxIT09dGhpcy5ub2RlVHlwZSYmMTEhPT10aGlzLm5vZGVUeXBlJiY5IT09dGhpcy5ub2RlVHlwZXx8KHRoaXMudGV4dENvbnRlbnQ9ZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7Tih0aGlzLGUpLmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe3ZhciB0PU4odGhpcyxlKTt0Lmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9fSl9LGJlZm9yZTpmdW5jdGlvbigpe3JldHVybiBIKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KX0sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGUsdD0wO251bGwhPShlPXRoaXNbdF0pO3QrKykxPT09ZS5ub2RlVHlwZSYmKHdlLmNsZWFuRGF0YSh3KGUsITEpKSxlLnRleHRDb250ZW50PVwiXCIpO3JldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPW51bGwhPWUmJmUsdD1udWxsPT10P2U6dCx0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiB3ZS5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAscj10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiFvdC50ZXN0KGUpJiYhS2VbKFFlLmV4ZWMoZSl8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT13ZS5odG1sUHJlZmlsdGVyKGUpO3RyeXtmb3IoO248cjtuKyspdD10aGlzW25dfHx7fSwxPT09dC5ub2RlVHlwZSYmKHdlLmNsZWFuRGF0YSh3KHQsITEpKSx0LmlubmVySFRNTD1lKTt0PTB9Y2F0Y2goZSl7fX10JiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGUpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIEgodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24odCl7dmFyIG49dGhpcy5wYXJlbnROb2RlO3dlLmluQXJyYXkodGhpcyxlKTwwJiYod2UuY2xlYW5EYXRhKHcodGhpcykpLG4mJm4ucmVwbGFjZUNoaWxkKHQsdGhpcykpfSxlKX19KSx3ZS5lYWNoKHthcHBlbmRUbzpcImFwcGVuZFwiLHByZXBlbmRUbzpcInByZXBlbmRcIixpbnNlcnRCZWZvcmU6XCJiZWZvcmVcIixpbnNlcnRBZnRlcjpcImFmdGVyXCIscmVwbGFjZUFsbDpcInJlcGxhY2VXaXRoXCJ9LGZ1bmN0aW9uKGUsdCl7d2UuZm5bZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciBuLHI9W10saT13ZShlKSxvPWkubGVuZ3RoLTEsYT0wO2E8PW87YSsrKW49YT09PW8/dGhpczp0aGlzLmNsb25lKCEwKSx3ZShpW2FdKVt0XShuKSxjZS5hcHBseShyLG4uZ2V0KCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhyKX19KTt2YXIgdXQ9bmV3IFJlZ0V4cChcIl4oXCIrX2UrXCIpKD8hcHgpW2EteiVdKyRcIixcImlcIiksbHQ9ZnVuY3Rpb24odCl7dmFyIG49dC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O3JldHVybiBuJiZuLm9wZW5lcnx8KG49ZSksbi5nZXRDb21wdXRlZFN0eWxlKHQpfSxjdD1uZXcgUmVnRXhwKFhlLmpvaW4oXCJ8XCIpLFwiaVwiKTshZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7aWYobCl7dS5zdHlsZS5jc3NUZXh0PVwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiLGwuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDttYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O3dpZHRoOjYwJTt0b3A6MSVcIixldC5hcHBlbmRDaGlsZCh1KS5hcHBlbmRDaGlsZChsKTt2YXIgdD1lLmdldENvbXB1dGVkU3R5bGUobCk7cj1cIjElXCIhPT10LnRvcCxzPTEyPT09bih0Lm1hcmdpbkxlZnQpLGwuc3R5bGUucmlnaHQ9XCI2MCVcIixhPTM2PT09bih0LnJpZ2h0KSxpPTM2PT09bih0LndpZHRoKSxsLnN0eWxlLnBvc2l0aW9uPVwiYWJzb2x1dGVcIixvPTM2PT09bC5vZmZzZXRXaWR0aHx8XCJhYnNvbHV0ZVwiLGV0LnJlbW92ZUNoaWxkKHUpLGw9bnVsbH19ZnVuY3Rpb24gbihlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX12YXIgcixpLG8sYSxzLHU9YWUuY3JlYXRlRWxlbWVudChcImRpdlwiKSxsPWFlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bC5zdHlsZSYmKGwuc3R5bGUuYmFja2dyb3VuZENsaXA9XCJjb250ZW50LWJveFwiLGwuY2xvbmVOb2RlKCEwKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cIlwiLHllLmNsZWFyQ2xvbmVTdHlsZT1cImNvbnRlbnQtYm94XCI9PT1sLnN0eWxlLmJhY2tncm91bmRDbGlwLHdlLmV4dGVuZCh5ZSx7Ym94U2l6aW5nUmVsaWFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLGl9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxhfSxwaXhlbFBvc2l0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxyfSxyZWxpYWJsZU1hcmdpbkxlZnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLHN9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpLG99fSkpfSgpO3ZhciBmdD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8scHQ9L14tLS8sZHQ9e3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsZGlzcGxheTpcImJsb2NrXCJ9LGh0PXtsZXR0ZXJTcGFjaW5nOlwiMFwiLGZvbnRXZWlnaHQ6XCI0MDBcIn0sZ3Q9W1wiV2Via2l0XCIsXCJNb3pcIixcIm1zXCJdLHZ0PWFlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuc3R5bGU7d2UuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7dmFyIG49UChlLFwib3BhY2l0eVwiKTtyZXR1cm5cIlwiPT09bj9cIjFcIjpufX19fSxjc3NOdW1iZXI6e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx3aWRvd3M6ITAsekluZGV4OiEwLHpvb206ITB9LGNzc1Byb3BzOnt9LHN0eWxlOmZ1bmN0aW9uKGUsdCxuLHIpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIGksbyxhLHM9aCh0KSx1PXB0LnRlc3QodCksbD1lLnN0eWxlO2lmKHV8fCh0PUkocykpLGE9d2UuY3NzSG9va3NbdF18fHdlLmNzc0hvb2tzW3NdLHZvaWQgMD09PW4pcmV0dXJuIGEmJlwiZ2V0XCJpbiBhJiZ2b2lkIDAhPT0oaT1hLmdldChlLCExLHIpKT9pOmxbdF07bz10eXBlb2YgbixcInN0cmluZ1wiPT09byYmKGk9emUuZXhlYyhuKSkmJmlbMV0mJihuPW0oZSx0LGkpLG89XCJudW1iZXJcIiksbnVsbCE9biYmbj09PW4mJihcIm51bWJlclwiPT09byYmKG4rPWkmJmlbM118fCh3ZS5jc3NOdW1iZXJbc10/XCJcIjpcInB4XCIpKSx5ZS5jbGVhckNsb25lU3R5bGV8fFwiXCIhPT1ufHwwIT09dC5pbmRleE9mKFwiYmFja2dyb3VuZFwiKXx8KGxbdF09XCJpbmhlcml0XCIpLGEmJlwic2V0XCJpbiBhJiZ2b2lkIDA9PT0obj1hLnNldChlLG4scikpfHwodT9sLnNldFByb3BlcnR5KHQsbik6bFt0XT1uKSl9fSxjc3M6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHM9aCh0KTtyZXR1cm4gcHQudGVzdCh0KXx8KHQ9SShzKSksYT13ZS5jc3NIb29rc1t0XXx8d2UuY3NzSG9va3Nbc10sYSYmXCJnZXRcImluIGEmJihpPWEuZ2V0KGUsITAsbikpLHZvaWQgMD09PWkmJihpPVAoZSx0LHIpKSxcIm5vcm1hbFwiPT09aSYmdCBpbiBodCYmKGk9aHRbdF0pLFwiXCI9PT1ufHxuPyhvPXBhcnNlRmxvYXQoaSksITA9PT1ufHxpc0Zpbml0ZShvKT9vfHwwOmkpOml9fSksd2UuZWFjaChbXCJoZWlnaHRcIixcIndpZHRoXCJdLGZ1bmN0aW9uKGUsdCl7d2UuY3NzSG9va3NbdF09e2dldDpmdW5jdGlvbihlLG4scil7aWYobilyZXR1cm4hZnQudGVzdCh3ZS5jc3MoZSxcImRpc3BsYXlcIikpfHxlLmdldENsaWVudFJlY3RzKCkubGVuZ3RoJiZlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoP0IoZSx0LHIpOlZlKGUsZHQsZnVuY3Rpb24oKXtyZXR1cm4gQihlLHQscil9KX0sc2V0OmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvPWx0KGUpLGE9XCJib3JkZXItYm94XCI9PT13ZS5jc3MoZSxcImJveFNpemluZ1wiLCExLG8pLHM9ciYmJChlLHQscixhLG8pO3JldHVybiBhJiZ5ZS5zY3JvbGxib3hTaXplKCk9PT1vLnBvc2l0aW9uJiYocy09TWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tcGFyc2VGbG9hdChvW3RdKS0kKGUsdCxcImJvcmRlclwiLCExLG8pLS41KSkscyYmKGk9emUuZXhlYyhuKSkmJlwicHhcIiE9PShpWzNdfHxcInB4XCIpJiYoZS5zdHlsZVt0XT1uLG49d2UuY3NzKGUsdCkpLFcoZSxuLHMpfX19KSx3ZS5jc3NIb29rcy5tYXJnaW5MZWZ0PU0oeWUucmVsaWFibGVNYXJnaW5MZWZ0LGZ1bmN0aW9uKGUsdCl7aWYodClyZXR1cm4ocGFyc2VGbG9hdChQKGUsXCJtYXJnaW5MZWZ0XCIpKXx8ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0LVZlKGUse21hcmdpbkxlZnQ6MH0sZnVuY3Rpb24oKXtyZXR1cm4gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0fSkpK1wicHhcIn0pLHdlLmVhY2goe21hcmdpbjpcIlwiLHBhZGRpbmc6XCJcIixib3JkZXI6XCJXaWR0aFwifSxmdW5jdGlvbihlLHQpe3dlLmNzc0hvb2tzW2UrdF09e2V4cGFuZDpmdW5jdGlvbihuKXtmb3IodmFyIHI9MCxpPXt9LG89XCJzdHJpbmdcIj09dHlwZW9mIG4/bi5zcGxpdChcIiBcIik6W25dO3I8NDtyKyspaVtlK1hlW3JdK3RdPW9bcl18fG9bci0yXXx8b1swXTtyZXR1cm4gaX19LFwibWFyZ2luXCIhPT1lJiYod2UuY3NzSG9va3NbZSt0XS5zZXQ9Vyl9KSx3ZS5mbi5leHRlbmQoe2NzczpmdW5jdGlvbihlLHQpe3JldHVybiBQZSh0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG89e30sYT0wO2lmKEFycmF5LmlzQXJyYXkodCkpe2ZvcihyPWx0KGUpLGk9dC5sZW5ndGg7YTxpO2ErKylvW3RbYV1dPXdlLmNzcyhlLHRbYV0sITEscik7cmV0dXJuIG99cmV0dXJuIHZvaWQgMCE9PW4/d2Uuc3R5bGUoZSx0LG4pOndlLmNzcyhlLHQpfSxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX19KSx3ZS5Ud2Vlbj1GLEYucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpGLGluaXQ6ZnVuY3Rpb24oZSx0LG4scixpLG8pe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPWl8fHdlLmVhc2luZy5fZGVmYXVsdCx0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHdlLmNzc051bWJlcltuXT9cIlwiOlwicHhcIil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPUYucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIGUmJmUuZ2V0P2UuZ2V0KHRoaXMpOkYucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49Ri5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9d2UuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpGLnByb3BIb29rcy5fZGVmYXVsdC5zZXQodGhpcyksdGhpc319LEYucHJvdG90eXBlLmluaXQucHJvdG90eXBlPUYucHJvdG90eXBlLEYucHJvcEhvb2tzPXtfZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiAxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsIT1lLmVsZW1bZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW2UucHJvcF0/ZS5lbGVtW2UucHJvcF06KHQ9d2UuY3NzKGUuZWxlbSxlLnByb3AsXCJcIiksdCYmXCJhdXRvXCIhPT10P3Q6MCl9LHNldDpmdW5jdGlvbihlKXt3ZS5meC5zdGVwW2UucHJvcF0/d2UuZnguc3RlcFtlLnByb3BdKGUpOjEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGw9PWUuZWxlbS5zdHlsZVt3ZS5jc3NQcm9wc1tlLnByb3BdXSYmIXdlLmNzc0hvb2tzW2UucHJvcF0/ZS5lbGVtW2UucHJvcF09ZS5ub3c6d2Uuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19LEYucHJvcEhvb2tzLnNjcm9sbFRvcD1GLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24oZSl7ZS5lbGVtLm5vZGVUeXBlJiZlLmVsZW0ucGFyZW50Tm9kZSYmKGUuZWxlbVtlLnByb3BdPWUubm93KX19LHdlLmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9LF9kZWZhdWx0Olwic3dpbmdcIn0sd2UuZng9Ri5wcm90b3R5cGUuaW5pdCx3ZS5meC5zdGVwPXt9O3ZhciB5dCxtdCx4dD0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sYnQ9L3F1ZXVlSG9va3MkLzt3ZS5BbmltYXRpb249d2UuZXh0ZW5kKFkse3R3ZWVuZXJzOntcIipcIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCk7cmV0dXJuIG0obi5lbGVtLGUsemUuZXhlYyh0KSxuKSxufV19LHR3ZWVuZXI6ZnVuY3Rpb24oZSx0KXttZShlKT8odD1lLGU9W1wiKlwiXSk6ZT1lLm1hdGNoKExlKTtmb3IodmFyIG4scj0wLGk9ZS5sZW5ndGg7cjxpO3IrKyluPWVbcl0sWS50d2VlbmVyc1tuXT1ZLnR3ZWVuZXJzW25dfHxbXSxZLnR3ZWVuZXJzW25dLnVuc2hpZnQodCl9LHByZWZpbHRlcnM6W1ZdLHByZWZpbHRlcjpmdW5jdGlvbihlLHQpe3Q/WS5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6WS5wcmVmaWx0ZXJzLnB1c2goZSl9fSksd2Uuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlP3dlLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG1lKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiFtZSh0KSYmdH07cmV0dXJuIHdlLmZ4Lm9mZj9yLmR1cmF0aW9uPTA6XCJudW1iZXJcIiE9dHlwZW9mIHIuZHVyYXRpb24mJihyLmR1cmF0aW9uIGluIHdlLmZ4LnNwZWVkcz9yLmR1cmF0aW9uPXdlLmZ4LnNwZWVkc1tyLmR1cmF0aW9uXTpyLmR1cmF0aW9uPXdlLmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9ci5xdWV1ZSYmITAhPT1yLnF1ZXVlfHwoci5xdWV1ZT1cImZ4XCIpLHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe21lKHIub2xkKSYmci5vbGQuY2FsbCh0aGlzKSxyLnF1ZXVlJiZ3ZS5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHdlLmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihVZSkuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixyKX0sYW5pbWF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT13ZS5pc0VtcHR5T2JqZWN0KGUpLG89d2Uuc3BlZWQodCxuLHIpLGE9ZnVuY3Rpb24oKXt2YXIgdD1ZKHRoaXMsd2UuZXh0ZW5kKHt9LGUpLG8pOyhpfHxXZS5nZXQodGhpcyxcImZpbmlzaFwiKSkmJnQuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLGl8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1mdW5jdGlvbihlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KG4pfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKG49dCx0PWUsZT12b2lkIDApLHQmJiExIT09ZSYmdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PSEwLGk9bnVsbCE9ZSYmZStcInF1ZXVlSG9va3NcIixvPXdlLnRpbWVycyxhPVdlLmdldCh0aGlzKTtpZihpKWFbaV0mJmFbaV0uc3RvcCYmcihhW2ldKTtlbHNlIGZvcihpIGluIGEpYVtpXSYmYVtpXS5zdG9wJiZidC50ZXN0KGkpJiZyKGFbaV0pO2ZvcihpPW8ubGVuZ3RoO2ktLTspb1tpXS5lbGVtIT09dGhpc3x8bnVsbCE9ZSYmb1tpXS5xdWV1ZSE9PWV8fChvW2ldLmFuaW0uc3RvcChuKSx0PSExLG8uc3BsaWNlKGksMSkpOyF0JiZufHx3ZS5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiExIT09ZSYmKGU9ZXx8XCJmeFwiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtcbnZhciB0LG49V2UuZ2V0KHRoaXMpLHI9bltlK1wicXVldWVcIl0saT1uW2UrXCJxdWV1ZUhvb2tzXCJdLG89d2UudGltZXJzLGE9cj9yLmxlbmd0aDowO2ZvcihuLmZpbmlzaD0hMCx3ZS5xdWV1ZSh0aGlzLGUsW10pLGkmJmkuc3RvcCYmaS5zdG9wLmNhbGwodGhpcywhMCksdD1vLmxlbmd0aDt0LS07KW9bdF0uZWxlbT09PXRoaXMmJm9bdF0ucXVldWU9PT1lJiYob1t0XS5hbmltLnN0b3AoITApLG8uc3BsaWNlKHQsMSkpO2Zvcih0PTA7dDxhO3QrKylyW3RdJiZyW3RdLmZpbmlzaCYmclt0XS5maW5pc2guY2FsbCh0aGlzKTtkZWxldGUgbi5maW5pc2h9KX19KSx3ZS5lYWNoKFtcInRvZ2dsZVwiLFwic2hvd1wiLFwiaGlkZVwiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXdlLmZuW3RdO3dlLmZuW3RdPWZ1bmN0aW9uKGUscixpKXtyZXR1cm4gbnVsbD09ZXx8XCJib29sZWFuXCI9PXR5cGVvZiBlP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShYKHQsITApLGUscixpKX19KSx3ZS5lYWNoKHtzbGlkZURvd246WChcInNob3dcIiksc2xpZGVVcDpYKFwiaGlkZVwiKSxzbGlkZVRvZ2dsZTpYKFwidG9nZ2xlXCIpLGZhZGVJbjp7b3BhY2l0eTpcInNob3dcIn0sZmFkZU91dDp7b3BhY2l0eTpcImhpZGVcIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eTpcInRvZ2dsZVwifX0sZnVuY3Rpb24oZSx0KXt3ZS5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx3ZS50aW1lcnM9W10sd2UuZngudGljaz1mdW5jdGlvbigpe3ZhciBlLHQ9MCxuPXdlLnRpbWVycztmb3IoeXQ9RGF0ZS5ub3coKTt0PG4ubGVuZ3RoO3QrKykoZT1uW3RdKSgpfHxuW3RdIT09ZXx8bi5zcGxpY2UodC0tLDEpO24ubGVuZ3RofHx3ZS5meC5zdG9wKCkseXQ9dm9pZCAwfSx3ZS5meC50aW1lcj1mdW5jdGlvbihlKXt3ZS50aW1lcnMucHVzaChlKSx3ZS5meC5zdGFydCgpfSx3ZS5meC5pbnRlcnZhbD0xMyx3ZS5meC5zdGFydD1mdW5jdGlvbigpe210fHwobXQ9ITAsXygpKX0sd2UuZnguc3RvcD1mdW5jdGlvbigpe210PW51bGx9LHdlLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx3ZS5mbi5kZWxheT1mdW5jdGlvbih0LG4pe3JldHVybiB0PXdlLmZ4P3dlLmZ4LnNwZWVkc1t0XXx8dDp0LG49bnx8XCJmeFwiLHRoaXMucXVldWUobixmdW5jdGlvbihuLHIpe3ZhciBpPWUuc2V0VGltZW91dChuLHQpO3Iuc3RvcD1mdW5jdGlvbigpe2UuY2xlYXJUaW1lb3V0KGkpfX0pfSxmdW5jdGlvbigpe3ZhciBlPWFlLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSx0PWFlLmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiksbj10LmFwcGVuZENoaWxkKGFlLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIikpO2UudHlwZT1cImNoZWNrYm94XCIseWUuY2hlY2tPbj1cIlwiIT09ZS52YWx1ZSx5ZS5vcHRTZWxlY3RlZD1uLnNlbGVjdGVkLGU9YWUuY3JlYXRlRWxlbWVudChcImlucHV0XCIpLGUudmFsdWU9XCJ0XCIsZS50eXBlPVwicmFkaW9cIix5ZS5yYWRpb1ZhbHVlPVwidFwiPT09ZS52YWx1ZX0oKTt2YXIgd3QsVHQ9d2UuZXhwci5hdHRySGFuZGxlO3dlLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiBQZSh0aGlzLHdlLmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3dlLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLHdlLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gdm9pZCAwPT09ZS5nZXRBdHRyaWJ1dGU/d2UucHJvcChlLHQsbik6KDE9PT1vJiZ3ZS5pc1hNTERvYyhlKXx8KGk9d2UuYXR0ckhvb2tzW3QudG9Mb3dlckNhc2UoKV18fCh3ZS5leHByLm1hdGNoLmJvb2wudGVzdCh0KT93dDp2b2lkIDApKSx2b2lkIDAhPT1uP251bGw9PT1uP3ZvaWQgd2UucmVtb3ZlQXR0cihlLHQpOmkmJlwic2V0XCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6KGUuc2V0QXR0cmlidXRlKHQsbitcIlwiKSxuKTppJiZcImdldFwiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6KHI9d2UuZmluZC5hdHRyKGUsdCksbnVsbD09cj92b2lkIDA6cikpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF5ZS5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT10JiZvKGUsXCJpbnB1dFwiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsdCksbiYmKGUudmFsdWU9biksdH19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHI9MCxpPXQmJnQubWF0Y2goTGUpO2lmKGkmJjE9PT1lLm5vZGVUeXBlKWZvcig7bj1pW3IrK107KWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLHd0PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD93ZS5yZW1vdmVBdHRyKGUsbik6ZS5zZXRBdHRyaWJ1dGUobixuKSxufX0sd2UuZWFjaCh3ZS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cXHcrL2cpLGZ1bmN0aW9uKGUsdCl7dmFyIG49VHRbdF18fHdlLmZpbmQuYXR0cjtUdFt0XT1mdW5jdGlvbihlLHQscil7dmFyIGksbyxhPXQudG9Mb3dlckNhc2UoKTtyZXR1cm4gcnx8KG89VHRbYV0sVHRbYV09aSxpPW51bGwhPW4oZSx0LHIpP2E6bnVsbCxUdFthXT1vKSxpfX0pO3ZhciBDdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLEV0PS9eKD86YXxhcmVhKSQvaTt3ZS5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUGUodGhpcyx3ZS5wcm9wLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1t3ZS5wcm9wRml4W2VdfHxlXX0pfX0pLHdlLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPWUubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJndlLmlzWE1MRG9jKGUpfHwodD13ZS5wcm9wRml4W3RdfHx0LGk9d2UucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP2kmJlwic2V0XCJpbiBpJiZ2b2lkIDAhPT0ocj1pLnNldChlLG4sdCkpP3I6ZVt0XT1uOmkmJlwiZ2V0XCJpbiBpJiZudWxsIT09KHI9aS5nZXQoZSx0KSk/cjplW3RdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9d2UuZmluZC5hdHRyKGUsXCJ0YWJpbmRleFwiKTtyZXR1cm4gdD9wYXJzZUludCh0LDEwKTpDdC50ZXN0KGUubm9kZU5hbWUpfHxFdC50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDotMX19fSxwcm9wRml4Ontmb3I6XCJodG1sRm9yXCIsY2xhc3M6XCJjbGFzc05hbWVcIn19KSx5ZS5vcHRTZWxlY3RlZHx8KHdlLnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3QmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksd2UuZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXt3ZS5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLHdlLmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGksbyxhLHMsdT0wO2lmKG1lKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7d2UodGhpcykuYWRkQ2xhc3MoZS5jYWxsKHRoaXMsdCxKKHRoaXMpKSl9KTtpZih0PUsoZSksdC5sZW5ndGgpZm9yKDtuPXRoaXNbdSsrXTspaWYoaT1KKG4pLHI9MT09PW4ubm9kZVR5cGUmJlwiIFwiK1EoaSkrXCIgXCIpe2ZvcihhPTA7bz10W2ErK107KXIuaW5kZXhPZihcIiBcIitvK1wiIFwiKTwwJiYocis9bytcIiBcIik7cz1RKHIpLGkhPT1zJiZuLnNldEF0dHJpYnV0ZShcImNsYXNzXCIscyl9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHU9MDtpZihtZShlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3dlKHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsSih0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsXCJcIik7aWYodD1LKGUpLHQubGVuZ3RoKWZvcig7bj10aGlzW3UrK107KWlmKGk9SihuKSxyPTE9PT1uLm5vZGVUeXBlJiZcIiBcIitRKGkpK1wiIFwiKXtmb3IoYT0wO289dFthKytdOylmb3IoO3IuaW5kZXhPZihcIiBcIitvK1wiIFwiKT4tMTspcj1yLnJlcGxhY2UoXCIgXCIrbytcIiBcIixcIiBcIik7cz1RKHIpLGkhPT1zJiZuLnNldEF0dHJpYnV0ZShcImNsYXNzXCIscyl9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGUscj1cInN0cmluZ1wiPT09bnx8QXJyYXkuaXNBcnJheShlKTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHQmJnI/dD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6bWUoZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3dlKHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sSih0aGlzKSx0KSx0KX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LGksbyxhO2lmKHIpZm9yKGk9MCxvPXdlKHRoaXMpLGE9SyhlKTt0PWFbaSsrXTspby5oYXNDbGFzcyh0KT9vLnJlbW92ZUNsYXNzKHQpOm8uYWRkQ2xhc3ModCk7ZWxzZSB2b2lkIDAhPT1lJiZcImJvb2xlYW5cIiE9PW58fCh0PUoodGhpcyksdCYmV2Uuc2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIsdCksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIix0fHwhMT09PWU/XCJcIjpXZS5nZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIil8fFwiXCIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHI9MDtmb3IodD1cIiBcIitlK1wiIFwiO249dGhpc1tyKytdOylpZigxPT09bi5ub2RlVHlwZSYmKFwiIFwiK1EoSihuKSkrXCIgXCIpLmluZGV4T2YodCk+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGt0PS9cXHIvZzt3ZS5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaT10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiByPW1lKGUpLHRoaXMuZWFjaChmdW5jdGlvbihuKXt2YXIgaTsxPT09dGhpcy5ub2RlVHlwZSYmKGk9cj9lLmNhbGwodGhpcyxuLHdlKHRoaXMpLnZhbCgpKTplLG51bGw9PWk/aT1cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiBpP2krPVwiXCI6QXJyYXkuaXNBcnJheShpKSYmKGk9d2UubWFwKGksZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/XCJcIjplK1wiXCJ9KSksKHQ9d2UudmFsSG9va3NbdGhpcy50eXBlXXx8d2UudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJlwic2V0XCJpbiB0JiZ2b2lkIDAhPT10LnNldCh0aGlzLGksXCJ2YWx1ZVwiKXx8KHRoaXMudmFsdWU9aSkpfSk7aWYoaSlyZXR1cm4odD13ZS52YWxIb29rc1tpLnR5cGVdfHx3ZS52YWxIb29rc1tpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJnZXRcImluIHQmJnZvaWQgMCE9PShuPXQuZ2V0KGksXCJ2YWx1ZVwiKSk/bjoobj1pLnZhbHVlLFwic3RyaW5nXCI9PXR5cGVvZiBuP24ucmVwbGFjZShrdCxcIlwiKTpudWxsPT1uP1wiXCI6bil9fX0pLHdlLmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXdlLmZpbmQuYXR0cihlLFwidmFsdWVcIik7cmV0dXJuIG51bGwhPXQ/dDpRKHdlLnRleHQoZSkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9ZS5vcHRpb25zLGE9ZS5zZWxlY3RlZEluZGV4LHM9XCJzZWxlY3Qtb25lXCI9PT1lLnR5cGUsdT1zP251bGw6W10sbD1zP2ErMTppLmxlbmd0aDtmb3Iocj1hPDA/bDpzP2E6MDtyPGw7cisrKWlmKG49aVtyXSwobi5zZWxlY3RlZHx8cj09PWEpJiYhbi5kaXNhYmxlZCYmKCFuLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFvKG4ucGFyZW50Tm9kZSxcIm9wdGdyb3VwXCIpKSl7aWYodD13ZShuKS52YWwoKSxzKXJldHVybiB0O3UucHVzaCh0KX1yZXR1cm4gdX0sc2V0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLHIsaT1lLm9wdGlvbnMsbz13ZS5tYWtlQXJyYXkodCksYT1pLmxlbmd0aDthLS07KXI9aVthXSwoci5zZWxlY3RlZD13ZS5pbkFycmF5KHdlLnZhbEhvb2tzLm9wdGlvbi5nZXQociksbyk+LTEpJiYobj0hMCk7cmV0dXJuIG58fChlLnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSx3ZS5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe3dlLnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24oZSx0KXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmNoZWNrZWQ9d2UuaW5BcnJheSh3ZShlKS52YWwoKSx0KT4tMX19LHllLmNoZWNrT258fCh3ZS52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpP1wib25cIjplLnZhbHVlfSl9KSx5ZS5mb2N1c2luPVwib25mb2N1c2luXCJpbiBlO3ZhciBTdD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sRHQ9ZnVuY3Rpb24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKX07d2UuZXh0ZW5kKHdlLmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKHQsbixyLGkpe3ZhciBvLGEscyx1LGwsYyxmLHAsZD1bcnx8YWVdLGg9aGUuY2FsbCh0LFwidHlwZVwiKT90LnR5cGU6dCxnPWhlLmNhbGwodCxcIm5hbWVzcGFjZVwiKT90Lm5hbWVzcGFjZS5zcGxpdChcIi5cIik6W107aWYoYT1wPXM9cj1yfHxhZSwzIT09ci5ub2RlVHlwZSYmOCE9PXIubm9kZVR5cGUmJiFTdC50ZXN0KGgrd2UuZXZlbnQudHJpZ2dlcmVkKSYmKGguaW5kZXhPZihcIi5cIik+LTEmJihnPWguc3BsaXQoXCIuXCIpLGg9Zy5zaGlmdCgpLGcuc29ydCgpKSxsPWguaW5kZXhPZihcIjpcIik8MCYmXCJvblwiK2gsdD10W3dlLmV4cGFuZG9dP3Q6bmV3IHdlLkV2ZW50KGgsXCJvYmplY3RcIj09dHlwZW9mIHQmJnQpLHQuaXNUcmlnZ2VyPWk/MjozLHQubmFtZXNwYWNlPWcuam9pbihcIi5cIiksdC5ybmFtZXNwYWNlPXQubmFtZXNwYWNlP25ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitnLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKTpudWxsLHQucmVzdWx0PXZvaWQgMCx0LnRhcmdldHx8KHQudGFyZ2V0PXIpLG49bnVsbD09bj9bdF06d2UubWFrZUFycmF5KG4sW3RdKSxmPXdlLmV2ZW50LnNwZWNpYWxbaF18fHt9LGl8fCFmLnRyaWdnZXJ8fCExIT09Zi50cmlnZ2VyLmFwcGx5KHIsbikpKXtpZighaSYmIWYubm9CdWJibGUmJiF4ZShyKSl7Zm9yKHU9Zi5kZWxlZ2F0ZVR5cGV8fGgsU3QudGVzdCh1K2gpfHwoYT1hLnBhcmVudE5vZGUpO2E7YT1hLnBhcmVudE5vZGUpZC5wdXNoKGEpLHM9YTtzPT09KHIub3duZXJEb2N1bWVudHx8YWUpJiZkLnB1c2gocy5kZWZhdWx0Vmlld3x8cy5wYXJlbnRXaW5kb3d8fGUpfWZvcihvPTA7KGE9ZFtvKytdKSYmIXQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspcD1hLHQudHlwZT1vPjE/dTpmLmJpbmRUeXBlfHxoLGM9KFdlLmdldChhLFwiZXZlbnRzXCIpfHx7fSlbdC50eXBlXSYmV2UuZ2V0KGEsXCJoYW5kbGVcIiksYyYmYy5hcHBseShhLG4pLChjPWwmJmFbbF0pJiZjLmFwcGx5JiZJZShhKSYmKHQucmVzdWx0PWMuYXBwbHkoYSxuKSwhMT09PXQucmVzdWx0JiZ0LnByZXZlbnREZWZhdWx0KCkpO3JldHVybiB0LnR5cGU9aCxpfHx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxmLl9kZWZhdWx0JiYhMSE9PWYuX2RlZmF1bHQuYXBwbHkoZC5wb3AoKSxuKXx8IUllKHIpfHxsJiZtZShyW2hdKSYmIXhlKHIpJiYocz1yW2xdLHMmJihyW2xdPW51bGwpLHdlLmV2ZW50LnRyaWdnZXJlZD1oLHQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmcC5hZGRFdmVudExpc3RlbmVyKGgsRHQpLHJbaF0oKSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJnAucmVtb3ZlRXZlbnRMaXN0ZW5lcihoLER0KSx3ZS5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLHMmJihyW2xdPXMpKSx0LnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj13ZS5leHRlbmQobmV3IHdlLkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMH0pO3dlLmV2ZW50LnRyaWdnZXIocixudWxsLHQpfX0pLHdlLmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3ZS5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXNbMF07aWYobilyZXR1cm4gd2UuZXZlbnQudHJpZ2dlcihlLHQsbiwhMCl9fSkseWUuZm9jdXNpbnx8d2UuZWFjaCh7Zm9jdXM6XCJmb2N1c2luXCIsYmx1cjpcImZvY3Vzb3V0XCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49ZnVuY3Rpb24oZSl7d2UuZXZlbnQuc2ltdWxhdGUodCxlLnRhcmdldCx3ZS5ldmVudC5maXgoZSkpfTt3ZS5ldmVudC5zcGVjaWFsW3RdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPVdlLmFjY2VzcyhyLHQpO2l8fHIuYWRkRXZlbnRMaXN0ZW5lcihlLG4sITApLFdlLmFjY2VzcyhyLHQsKGl8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciByPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxpPVdlLmFjY2VzcyhyLHQpLTE7aT9XZS5hY2Nlc3Mocix0LGkpOihyLnJlbW92ZUV2ZW50TGlzdGVuZXIoZSxuLCEwKSxXZS5yZW1vdmUocix0KSl9fX0pO3ZhciBOdD1lLmxvY2F0aW9uLEF0PURhdGUubm93KCksanQ9L1xcPy87d2UucGFyc2VYTUw9ZnVuY3Rpb24odCl7dmFyIG47aWYoIXR8fFwic3RyaW5nXCIhPXR5cGVvZiB0KXJldHVybiBudWxsO3RyeXtuPShuZXcgZS5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LFwidGV4dC94bWxcIil9Y2F0Y2goZSl7bj12b2lkIDB9cmV0dXJuIG4mJiFuLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwicGFyc2VyZXJyb3JcIikubGVuZ3RofHx3ZS5lcnJvcihcIkludmFsaWQgWE1MOiBcIit0KSxufTt2YXIgcXQ9L1xcW1xcXSQvLEx0PS9cXHI/XFxuL2csSHQ9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLE90PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt3ZS5wYXJhbT1mdW5jdGlvbihlLHQpe3ZhciBuLHI9W10saT1mdW5jdGlvbihlLHQpe3ZhciBuPW1lKHQpP3QoKTp0O3Jbci5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQobnVsbD09bj9cIlwiOm4pfTtpZihBcnJheS5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIXdlLmlzUGxhaW5PYmplY3QoZSkpd2UuZWFjaChlLGZ1bmN0aW9uKCl7aSh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihuIGluIGUpWihuLGVbbl0sdCxpKTtyZXR1cm4gci5qb2luKFwiJlwiKX0sd2UuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gd2UucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT13ZS5wcm9wKHRoaXMsXCJlbGVtZW50c1wiKTtyZXR1cm4gZT93ZS5tYWtlQXJyYXkoZSk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhd2UodGhpcykuaXMoXCI6ZGlzYWJsZWRcIikmJk90LnRlc3QodGhpcy5ub2RlTmFtZSkmJiFIdC50ZXN0KGUpJiYodGhpcy5jaGVja2VkfHwhWWUudGVzdChlKSl9KS5tYXAoZnVuY3Rpb24oZSx0KXt2YXIgbj13ZSh0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09bj9udWxsOkFycmF5LmlzQXJyYXkobik/d2UubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShMdCxcIlxcclxcblwiKX19KTp7bmFtZTp0Lm5hbWUsdmFsdWU6bi5yZXBsYWNlKEx0LFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pO3ZhciBQdD0vJTIwL2csTXQ9LyMuKiQvLFJ0PS8oWz8mXSlfPVteJl0qLyxJdD0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLFd0PS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLCR0PS9eKD86R0VUfEhFQUQpJC8sQnQ9L15cXC9cXC8vLEZ0PXt9LF90PXt9LHp0PVwiKi9cIi5jb25jYXQoXCIqXCIpLFh0PWFlLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1h0LmhyZWY9TnQuaHJlZix3ZS5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOk50LmhyZWYsdHlwZTpcIkdFVFwiLGlzTG9jYWw6V3QudGVzdChOdC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsYWNjZXB0czp7XCIqXCI6enQsdGV4dDpcInRleHQvcGxhaW5cIixodG1sOlwidGV4dC9odG1sXCIseG1sOlwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLGpzb246XCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIn0sY29udGVudHM6e3htbDovXFxieG1sXFxiLyxodG1sOi9cXGJodG1sLyxqc29uOi9cXGJqc29uXFxiL30scmVzcG9uc2VGaWVsZHM6e3htbDpcInJlc3BvbnNlWE1MXCIsdGV4dDpcInJlc3BvbnNlVGV4dFwiLGpzb246XCJyZXNwb25zZUpTT05cIn0sY29udmVydGVyczp7XCIqIHRleHRcIjpTdHJpbmcsXCJ0ZXh0IGh0bWxcIjohMCxcInRleHQganNvblwiOkpTT04ucGFyc2UsXCJ0ZXh0IHhtbFwiOndlLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD9uZShuZShlLHdlLmFqYXhTZXR0aW5ncyksdCk6bmUod2UuYWpheFNldHRpbmdzLGUpfSxhamF4UHJlZmlsdGVyOmVlKEZ0KSxhamF4VHJhbnNwb3J0OmVlKF90KSxhamF4OmZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcih0LG4scixzKXt2YXIgbCxwLGQsYix3LFQ9bjtjfHwoYz0hMCx1JiZlLmNsZWFyVGltZW91dCh1KSxpPXZvaWQgMCxhPXN8fFwiXCIsQy5yZWFkeVN0YXRlPXQ+MD80OjAsbD10Pj0yMDAmJnQ8MzAwfHwzMDQ9PT10LHImJihiPXJlKGgsQyxyKSksYj1pZShoLGIsQyxsKSxsPyhoLmlmTW9kaWZpZWQmJih3PUMuZ2V0UmVzcG9uc2VIZWFkZXIoXCJMYXN0LU1vZGlmaWVkXCIpLHcmJih3ZS5sYXN0TW9kaWZpZWRbb109dyksKHc9Qy5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIikpJiYod2UuZXRhZ1tvXT13KSksMjA0PT09dHx8XCJIRUFEXCI9PT1oLnR5cGU/VD1cIm5vY29udGVudFwiOjMwND09PXQ/VD1cIm5vdG1vZGlmaWVkXCI6KFQ9Yi5zdGF0ZSxwPWIuZGF0YSxkPWIuZXJyb3IsbD0hZCkpOihkPVQsIXQmJlR8fChUPVwiZXJyb3JcIix0PDAmJih0PTApKSksQy5zdGF0dXM9dCxDLnN0YXR1c1RleHQ9KG58fFQpK1wiXCIsbD95LnJlc29sdmVXaXRoKGcsW3AsVCxDXSk6eS5yZWplY3RXaXRoKGcsW0MsVCxkXSksQy5zdGF0dXNDb2RlKHgpLHg9dm9pZCAwLGYmJnYudHJpZ2dlcihsP1wiYWpheFN1Y2Nlc3NcIjpcImFqYXhFcnJvclwiLFtDLGgsbD9wOmRdKSxtLmZpcmVXaXRoKGcsW0MsVF0pLGYmJih2LnRyaWdnZXIoXCJhamF4Q29tcGxldGVcIixbQyxoXSksLS13ZS5hY3RpdmV8fHdlLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKSkpfVwib2JqZWN0XCI9PXR5cGVvZiB0JiYobj10LHQ9dm9pZCAwKSxuPW58fHt9O3ZhciBpLG8sYSxzLHUsbCxjLGYscCxkLGg9d2UuYWpheFNldHVwKHt9LG4pLGc9aC5jb250ZXh0fHxoLHY9aC5jb250ZXh0JiYoZy5ub2RlVHlwZXx8Zy5qcXVlcnkpP3dlKGcpOndlLmV2ZW50LHk9d2UuRGVmZXJyZWQoKSxtPXdlLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHg9aC5zdGF0dXNDb2RlfHx7fSxiPXt9LHc9e30sVD1cImNhbmNlbGVkXCIsQz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGMpe2lmKCFzKWZvcihzPXt9O3Q9SXQuZXhlYyhhKTspc1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl07dD1zW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9d1tlLnRvTG93ZXJDYXNlKCldPXdbZS50b0xvd2VyQ2FzZSgpXXx8ZSxiW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihoLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7dmFyIHQ7aWYoZSlpZihjKUMuYWx3YXlzKGVbQy5zdGF0dXNdKTtlbHNlIGZvcih0IGluIGUpeFt0XT1beFt0XSxlW3RdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8VDtyZXR1cm4gaSYmaS5hYm9ydCh0KSxyKDAsdCksdGhpc319O2lmKHkucHJvbWlzZShDKSxoLnVybD0oKHR8fGgudXJsfHxOdC5ocmVmKStcIlwiKS5yZXBsYWNlKEJ0LE50LnByb3RvY29sK1wiLy9cIiksaC50eXBlPW4ubWV0aG9kfHxuLnR5cGV8fGgubWV0aG9kfHxoLnR5cGUsaC5kYXRhVHlwZXM9KGguZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKExlKXx8W1wiXCJdLG51bGw9PWguY3Jvc3NEb21haW4pe2w9YWUuY3JlYXRlRWxlbWVudChcImFcIik7dHJ5e2wuaHJlZj1oLnVybCxsLmhyZWY9bC5ocmVmLGguY3Jvc3NEb21haW49WHQucHJvdG9jb2wrXCIvL1wiK1h0Lmhvc3QhPWwucHJvdG9jb2wrXCIvL1wiK2wuaG9zdH1jYXRjaChlKXtoLmNyb3NzRG9tYWluPSEwfX1pZihoLmRhdGEmJmgucHJvY2Vzc0RhdGEmJlwic3RyaW5nXCIhPXR5cGVvZiBoLmRhdGEmJihoLmRhdGE9d2UucGFyYW0oaC5kYXRhLGgudHJhZGl0aW9uYWwpKSx0ZShGdCxoLG4sQyksYylyZXR1cm4gQztmPXdlLmV2ZW50JiZoLmdsb2JhbCxmJiYwPT13ZS5hY3RpdmUrKyYmd2UuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKSxoLnR5cGU9aC50eXBlLnRvVXBwZXJDYXNlKCksaC5oYXNDb250ZW50PSEkdC50ZXN0KGgudHlwZSksbz1oLnVybC5yZXBsYWNlKE10LFwiXCIpLGguaGFzQ29udGVudD9oLmRhdGEmJmgucHJvY2Vzc0RhdGEmJjA9PT0oaC5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmKGguZGF0YT1oLmRhdGEucmVwbGFjZShQdCxcIitcIikpOihkPWgudXJsLnNsaWNlKG8ubGVuZ3RoKSxoLmRhdGEmJihoLnByb2Nlc3NEYXRhfHxcInN0cmluZ1wiPT10eXBlb2YgaC5kYXRhKSYmKG8rPShqdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStoLmRhdGEsZGVsZXRlIGguZGF0YSksITE9PT1oLmNhY2hlJiYobz1vLnJlcGxhY2UoUnQsXCIkMVwiKSxkPShqdC50ZXN0KG8pP1wiJlwiOlwiP1wiKStcIl89XCIrQXQrKytkKSxoLnVybD1vK2QpLGguaWZNb2RpZmllZCYmKHdlLmxhc3RNb2RpZmllZFtvXSYmQy5zZXRSZXF1ZXN0SGVhZGVyKFwiSWYtTW9kaWZpZWQtU2luY2VcIix3ZS5sYXN0TW9kaWZpZWRbb10pLHdlLmV0YWdbb10mJkMuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIix3ZS5ldGFnW29dKSksKGguZGF0YSYmaC5oYXNDb250ZW50JiYhMSE9PWguY29udGVudFR5cGV8fG4uY29udGVudFR5cGUpJiZDLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIixoLmNvbnRlbnRUeXBlKSxDLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIixoLmRhdGFUeXBlc1swXSYmaC5hY2NlcHRzW2guZGF0YVR5cGVzWzBdXT9oLmFjY2VwdHNbaC5kYXRhVHlwZXNbMF1dKyhcIipcIiE9PWguZGF0YVR5cGVzWzBdP1wiLCBcIit6dCtcIjsgcT0wLjAxXCI6XCJcIik6aC5hY2NlcHRzW1wiKlwiXSk7Zm9yKHAgaW4gaC5oZWFkZXJzKUMuc2V0UmVxdWVzdEhlYWRlcihwLGguaGVhZGVyc1twXSk7aWYoaC5iZWZvcmVTZW5kJiYoITE9PT1oLmJlZm9yZVNlbmQuY2FsbChnLEMsaCl8fGMpKXJldHVybiBDLmFib3J0KCk7aWYoVD1cImFib3J0XCIsbS5hZGQoaC5jb21wbGV0ZSksQy5kb25lKGguc3VjY2VzcyksQy5mYWlsKGguZXJyb3IpLGk9dGUoX3QsaCxuLEMpKXtpZihDLnJlYWR5U3RhdGU9MSxmJiZ2LnRyaWdnZXIoXCJhamF4U2VuZFwiLFtDLGhdKSxjKXJldHVybiBDO2guYXN5bmMmJmgudGltZW91dD4wJiYodT1lLnNldFRpbWVvdXQoZnVuY3Rpb24oKXtDLmFib3J0KFwidGltZW91dFwiKX0saC50aW1lb3V0KSk7dHJ5e2M9ITEsaS5zZW5kKGIscil9Y2F0Y2goZSl7aWYoYyl0aHJvdyBlO3IoLTEsZSl9fWVsc2UgcigtMSxcIk5vIFRyYW5zcG9ydFwiKTtyZXR1cm4gQ30sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHdlLmdldChlLHQsbixcImpzb25cIil9LGdldFNjcmlwdDpmdW5jdGlvbihlLHQpe3JldHVybiB3ZS5nZXQoZSx2b2lkIDAsdCxcInNjcmlwdFwiKX19KSx3ZS5lYWNoKFtcImdldFwiLFwicG9zdFwiXSxmdW5jdGlvbihlLHQpe3dlW3RdPWZ1bmN0aW9uKGUsbixyLGkpe3JldHVybiBtZShuKSYmKGk9aXx8cixyPW4sbj12b2lkIDApLHdlLmFqYXgod2UuZXh0ZW5kKHt1cmw6ZSx0eXBlOnQsZGF0YVR5cGU6aSxkYXRhOm4sc3VjY2VzczpyfSx3ZS5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksd2UuX2V2YWxVcmw9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmFqYXgoe3VybDplLHR5cGU6XCJHRVRcIixkYXRhVHlwZTpcInNjcmlwdFwiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSx0aHJvd3M6ITB9KX0sd2UuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB0aGlzWzBdJiYobWUoZSkmJihlPWUuY2FsbCh0aGlzWzBdKSksdD13ZShlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcztlLmZpcnN0RWxlbWVudENoaWxkOyllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihlKXtyZXR1cm4gbWUoZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3dlKHRoaXMpLndyYXBJbm5lcihlLmNhbGwodGhpcyx0KSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD13ZSh0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD1tZShlKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKG4pe3dlKHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucGFyZW50KGUpLm5vdChcImJvZHlcIikuZWFjaChmdW5jdGlvbigpe3dlKHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLHdlLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIXdlLmV4cHIucHNldWRvcy52aXNpYmxlKGUpfSx3ZS5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbihlKXtyZXR1cm4hIShlLm9mZnNldFdpZHRofHxlLm9mZnNldEhlaWdodHx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LHdlLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBlLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBVdD17MDoyMDAsMTIyMzoyMDR9LFZ0PXdlLmFqYXhTZXR0aW5ncy54aHIoKTt5ZS5jb3JzPSEhVnQmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBWdCx5ZS5hamF4PVZ0PSEhVnQsd2UuYWpheFRyYW5zcG9ydChmdW5jdGlvbih0KXt2YXIgbixyO2lmKHllLmNvcnN8fFZ0JiYhdC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihpLG8pe3ZhciBhLHM9dC54aHIoKTtpZihzLm9wZW4odC50eXBlLHQudXJsLHQuYXN5bmMsdC51c2VybmFtZSx0LnBhc3N3b3JkKSx0LnhockZpZWxkcylmb3IoYSBpbiB0LnhockZpZWxkcylzW2FdPXQueGhyRmllbGRzW2FdO3QubWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSYmcy5vdmVycmlkZU1pbWVUeXBlKHQubWltZVR5cGUpLHQuY3Jvc3NEb21haW58fGlbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoaVtcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKTtmb3IoYSBpbiBpKXMuc2V0UmVxdWVzdEhlYWRlcihhLGlbYV0pO249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7biYmKG49cj1zLm9ubG9hZD1zLm9uZXJyb3I9cy5vbmFib3J0PXMub250aW1lb3V0PXMub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsXCJhYm9ydFwiPT09ZT9zLmFib3J0KCk6XCJlcnJvclwiPT09ZT9cIm51bWJlclwiIT10eXBlb2Ygcy5zdGF0dXM/bygwLFwiZXJyb3JcIik6byhzLnN0YXR1cyxzLnN0YXR1c1RleHQpOm8oVXRbcy5zdGF0dXNdfHxzLnN0YXR1cyxzLnN0YXR1c1RleHQsXCJ0ZXh0XCIhPT0ocy5yZXNwb25zZVR5cGV8fFwidGV4dFwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHMucmVzcG9uc2VUZXh0P3tiaW5hcnk6cy5yZXNwb25zZX06e3RleHQ6cy5yZXNwb25zZVRleHR9LHMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHMub25sb2FkPW4oKSxyPXMub25lcnJvcj1zLm9udGltZW91dD1uKFwiZXJyb3JcIiksdm9pZCAwIT09cy5vbmFib3J0P3Mub25hYm9ydD1yOnMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXMucmVhZHlTdGF0ZSYmZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7biYmcigpfSl9LG49bihcImFib3J0XCIpO3RyeXtzLnNlbmQodC5oYXNDb250ZW50JiZ0LmRhdGF8fG51bGwpfWNhdGNoKGUpe2lmKG4pdGhyb3cgZX19LGFib3J0OmZ1bmN0aW9uKCl7biYmbigpfX19KSx3ZS5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2UuY3Jvc3NEb21haW4mJihlLmNvbnRlbnRzLnNjcmlwdD0hMSl9KSx3ZS5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDpcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvfSxjb252ZXJ0ZXJzOntcInRleHQgc2NyaXB0XCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmdsb2JhbEV2YWwoZSksZX19fSksd2UuYWpheFByZWZpbHRlcihcInNjcmlwdFwiLGZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUuY2FjaGUmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPVwiR0VUXCIpfSksd2UuYWpheFRyYW5zcG9ydChcInNjcmlwdFwiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciB0LG47cmV0dXJue3NlbmQ6ZnVuY3Rpb24ocixpKXt0PXdlKFwiPHNjcmlwdD5cIikucHJvcCh7Y2hhcnNldDplLnNjcmlwdENoYXJzZXQsc3JjOmUudXJsfSkub24oXCJsb2FkIGVycm9yXCIsbj1mdW5jdGlvbihlKXt0LnJlbW92ZSgpLG49bnVsbCxlJiZpKFwiZXJyb3JcIj09PWUudHlwZT80MDQ6MjAwLGUudHlwZSl9KSxhZS5oZWFkLmFwcGVuZENoaWxkKHRbMF0pfSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fX0pO3ZhciBHdD1bXSxZdD0vKD0pXFw/KD89JnwkKXxcXD9cXD8vO3dlLmFqYXhTZXR1cCh7anNvbnA6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgZT1HdC5wb3AoKXx8d2UuZXhwYW5kbytcIl9cIitBdCsrO3JldHVybiB0aGlzW2VdPSEwLGV9fSksd2UuYWpheFByZWZpbHRlcihcImpzb24ganNvbnBcIixmdW5jdGlvbih0LG4scil7dmFyIGksbyxhLHM9ITEhPT10Lmpzb25wJiYoWXQudGVzdCh0LnVybCk/XCJ1cmxcIjpcInN0cmluZ1wiPT10eXBlb2YgdC5kYXRhJiYwPT09KHQuY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJll0LnRlc3QodC5kYXRhKSYmXCJkYXRhXCIpO2lmKHN8fFwianNvbnBcIj09PXQuZGF0YVR5cGVzWzBdKXJldHVybiBpPXQuanNvbnBDYWxsYmFjaz1tZSh0Lmpzb25wQ2FsbGJhY2spP3QuanNvbnBDYWxsYmFjaygpOnQuanNvbnBDYWxsYmFjayxzP3Rbc109dFtzXS5yZXBsYWNlKFl0LFwiJDFcIitpKTohMSE9PXQuanNvbnAmJih0LnVybCs9KGp0LnRlc3QodC51cmwpP1wiJlwiOlwiP1wiKSt0Lmpzb25wK1wiPVwiK2kpLHQuY29udmVydGVyc1tcInNjcmlwdCBqc29uXCJdPWZ1bmN0aW9uKCl7cmV0dXJuIGF8fHdlLmVycm9yKGkrXCIgd2FzIG5vdCBjYWxsZWRcIiksYVswXX0sdC5kYXRhVHlwZXNbMF09XCJqc29uXCIsbz1lW2ldLGVbaV09ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sci5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1vP3dlKGUpLnJlbW92ZVByb3AoaSk6ZVtpXT1vLHRbaV0mJih0Lmpzb25wQ2FsbGJhY2s9bi5qc29ucENhbGxiYWNrLEd0LnB1c2goaSkpLGEmJm1lKG8pJiZvKGFbMF0pLGE9bz12b2lkIDB9KSxcInNjcmlwdFwifSkseWUuY3JlYXRlSFRNTERvY3VtZW50PWZ1bmN0aW9uKCl7dmFyIGU9YWUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpLmJvZHk7cmV0dXJuIGUuaW5uZXJIVE1MPVwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIiwyPT09ZS5jaGlsZE5vZGVzLmxlbmd0aH0oKSx3ZS5wYXJzZUhUTUw9ZnVuY3Rpb24oZSx0LG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybltdO1wiYm9vbGVhblwiPT10eXBlb2YgdCYmKG49dCx0PSExKTt2YXIgcixpLG87cmV0dXJuIHR8fCh5ZS5jcmVhdGVIVE1MRG9jdW1lbnQ/KHQ9YWUuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpLHI9dC5jcmVhdGVFbGVtZW50KFwiYmFzZVwiKSxyLmhyZWY9YWUubG9jYXRpb24uaHJlZix0LmhlYWQuYXBwZW5kQ2hpbGQocikpOnQ9YWUpLGk9RGUuZXhlYyhlKSxvPSFuJiZbXSxpP1t0LmNyZWF0ZUVsZW1lbnQoaVsxXSldOihpPUMoW2VdLHQsbyksbyYmby5sZW5ndGgmJndlKG8pLnJlbW92ZSgpLHdlLm1lcmdlKFtdLGkuY2hpbGROb2RlcykpfSx3ZS5mbi5sb2FkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYT10aGlzLHM9ZS5pbmRleE9mKFwiIFwiKTtyZXR1cm4gcz4tMSYmKHI9UShlLnNsaWNlKHMpKSxlPWUuc2xpY2UoMCxzKSksbWUodCk/KG49dCx0PXZvaWQgMCk6dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJihpPVwiUE9TVFwiKSxhLmxlbmd0aD4wJiZ3ZS5hamF4KHt1cmw6ZSx0eXBlOml8fFwiR0VUXCIsZGF0YVR5cGU6XCJodG1sXCIsZGF0YTp0fSkuZG9uZShmdW5jdGlvbihlKXtvPWFyZ3VtZW50cyxhLmh0bWwocj93ZShcIjxkaXY+XCIpLmFwcGVuZCh3ZS5wYXJzZUhUTUwoZSkpLmZpbmQocik6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXthLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsb3x8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSx3ZS5lYWNoKFtcImFqYXhTdGFydFwiLFwiYWpheFN0b3BcIixcImFqYXhDb21wbGV0ZVwiLFwiYWpheEVycm9yXCIsXCJhamF4U3VjY2Vzc1wiLFwiYWpheFNlbmRcIl0sZnVuY3Rpb24oZSx0KXt3ZS5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHdlLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gd2UuZ3JlcCh3ZS50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9LHdlLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLG8sYSxzLHUsbCxjPXdlLmNzcyhlLFwicG9zaXRpb25cIiksZj13ZShlKSxwPXt9O1wic3RhdGljXCI9PT1jJiYoZS5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpLHM9Zi5vZmZzZXQoKSxvPXdlLmNzcyhlLFwidG9wXCIpLHU9d2UuY3NzKGUsXCJsZWZ0XCIpLGw9KFwiYWJzb2x1dGVcIj09PWN8fFwiZml4ZWRcIj09PWMpJiYobyt1KS5pbmRleE9mKFwiYXV0b1wiKT4tMSxsPyhyPWYucG9zaXRpb24oKSxhPXIudG9wLGk9ci5sZWZ0KTooYT1wYXJzZUZsb2F0KG8pfHwwLGk9cGFyc2VGbG9hdCh1KXx8MCksbWUodCkmJih0PXQuY2FsbChlLG4sd2UuZXh0ZW5kKHt9LHMpKSksbnVsbCE9dC50b3AmJihwLnRvcD10LnRvcC1zLnRvcCthKSxudWxsIT10LmxlZnQmJihwLmxlZnQ9dC5sZWZ0LXMubGVmdCtpKSxcInVzaW5nXCJpbiB0P3QudXNpbmcuY2FsbChlLHApOmYuY3NzKHApfX0sd2UuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09ZT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbih0KXt3ZS5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciB0LG4scj10aGlzWzBdO2lmKHIpcmV0dXJuIHIuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KHQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxuPXIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOnQudG9wK24ucGFnZVlPZmZzZXQsbGVmdDp0LmxlZnQrbi5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9fSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciBlLHQsbixyPXRoaXNbMF0saT17dG9wOjAsbGVmdDowfTtpZihcImZpeGVkXCI9PT13ZS5jc3MocixcInBvc2l0aW9uXCIpKXQ9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle2Zvcih0PXRoaXMub2Zmc2V0KCksbj1yLm93bmVyRG9jdW1lbnQsZT1yLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7ZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJlwic3RhdGljXCI9PT13ZS5jc3MoZSxcInBvc2l0aW9uXCIpOyllPWUucGFyZW50Tm9kZTtlJiZlIT09ciYmMT09PWUubm9kZVR5cGUmJihpPXdlKGUpLm9mZnNldCgpLGkudG9wKz13ZS5jc3MoZSxcImJvcmRlclRvcFdpZHRoXCIsITApLGkubGVmdCs9d2UuY3NzKGUsXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCkpfXJldHVybnt0b3A6dC50b3AtaS50b3Atd2UuY3NzKHIsXCJtYXJnaW5Ub3BcIiwhMCksbGVmdDp0LmxlZnQtaS5sZWZ0LXdlLmNzcyhyLFwibWFyZ2luTGVmdFwiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7ZSYmXCJzdGF0aWNcIj09PXdlLmNzcyhlLFwicG9zaXRpb25cIik7KWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fGV0fSl9fSksd2UuZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24oZSx0KXt2YXIgbj1cInBhZ2VZT2Zmc2V0XCI9PT10O3dlLmZuW2VdPWZ1bmN0aW9uKHIpe3JldHVybiBQZSh0aGlzLGZ1bmN0aW9uKGUscixpKXt2YXIgbztpZih4ZShlKT9vPWU6OT09PWUubm9kZVR5cGUmJihvPWUuZGVmYXVsdFZpZXcpLHZvaWQgMD09PWkpcmV0dXJuIG8/b1t0XTplW3JdO28/by5zY3JvbGxUbyhuP28ucGFnZVhPZmZzZXQ6aSxuP2k6by5wYWdlWU9mZnNldCk6ZVtyXT1pfSxlLHIsYXJndW1lbnRzLmxlbmd0aCl9fSksd2UuZWFjaChbXCJ0b3BcIixcImxlZnRcIl0sZnVuY3Rpb24oZSx0KXt3ZS5jc3NIb29rc1t0XT1NKHllLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSxuKXtpZihuKXJldHVybiBuPVAoZSx0KSx1dC50ZXN0KG4pP3dlKGUpLnBvc2l0aW9uKClbdF0rXCJweFwiOm59KX0pLHdlLmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24oZSx0KXt3ZS5lYWNoKHtwYWRkaW5nOlwiaW5uZXJcIitlLGNvbnRlbnQ6dCxcIlwiOlwib3V0ZXJcIitlfSxmdW5jdGlvbihuLHIpe3dlLmZuW3JdPWZ1bmN0aW9uKGksbyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aCYmKG58fFwiYm9vbGVhblwiIT10eXBlb2YgaSkscz1ufHwoITA9PT1pfHwhMD09PW8/XCJtYXJnaW5cIjpcImJvcmRlclwiKTtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbih0LG4saSl7dmFyIG87cmV0dXJuIHhlKHQpPzA9PT1yLmluZGV4T2YoXCJvdXRlclwiKT90W1wiaW5uZXJcIitlXTp0LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtcImNsaWVudFwiK2VdOjk9PT10Lm5vZGVUeXBlPyhvPXQuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KHQuYm9keVtcInNjcm9sbFwiK2VdLG9bXCJzY3JvbGxcIitlXSx0LmJvZHlbXCJvZmZzZXRcIitlXSxvW1wib2Zmc2V0XCIrZV0sb1tcImNsaWVudFwiK2VdKSk6dm9pZCAwPT09aT93ZS5jc3ModCxuLHMpOndlLnN0eWxlKHQsbixpLHMpfSx0LGE/aTp2b2lkIDAsYSl9fSl9KSx3ZS5lYWNoKFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihlLHQpe3dlLmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx3ZS5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMubW91c2VlbnRlcihlKS5tb3VzZWxlYXZlKHR8fGUpfX0pLHdlLmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYoZSxcIioqXCIpOnRoaXMub2ZmKHQsZXx8XCIqKlwiLG4pfX0pLHdlLnByb3h5PWZ1bmN0aW9uKGUsdCl7dmFyIG4scixpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYobj1lW3RdLHQ9ZSxlPW4pLG1lKGUpKXJldHVybiByPXVlLmNhbGwoYXJndW1lbnRzLDIpLGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLHIuY29uY2F0KHVlLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8d2UuZ3VpZCsrLGl9LHdlLmhvbGRSZWFkeT1mdW5jdGlvbihlKXtlP3dlLnJlYWR5V2FpdCsrOndlLnJlYWR5KCEwKX0sd2UuaXNBcnJheT1BcnJheS5pc0FycmF5LHdlLnBhcnNlSlNPTj1KU09OLnBhcnNlLHdlLm5vZGVOYW1lPW8sd2UuaXNGdW5jdGlvbj1tZSx3ZS5pc1dpbmRvdz14ZSx3ZS5jYW1lbENhc2U9aCx3ZS50eXBlPXIsd2Uubm93PURhdGUubm93LHdlLmlzTnVtZXJpYz1mdW5jdGlvbihlKXt2YXIgdD13ZS50eXBlKGUpO3JldHVybihcIm51bWJlclwiPT09dHx8XCJzdHJpbmdcIj09PXQpJiYhaXNOYU4oZS1wYXJzZUZsb2F0KGUpKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiB3ZX0pO3ZhciBRdD1lLmpRdWVyeSxKdD1lLiQ7cmV0dXJuIHdlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24odCl7cmV0dXJuIGUuJD09PXdlJiYoZS4kPUp0KSx0JiZlLmpRdWVyeT09PXdlJiYoZS5qUXVlcnk9UXQpLHdlfSx0fHwoZS5qUXVlcnk9ZS4kPXdlKSx3ZX0pOyIsIiFmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSx0KTp0KGpRdWVyeSl9KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7Zm9yKHZhciBlPXQuY3NzKFwidmlzaWJpbGl0eVwiKTtcImluaGVyaXRcIj09PWU7KXQ9dC5wYXJlbnQoKSxlPXQuY3NzKFwidmlzaWJpbGl0eVwiKTtyZXR1cm5cImhpZGRlblwiIT09ZX1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZSxpO3QubGVuZ3RoJiZ0WzBdIT09ZG9jdW1lbnQ7KXtpZigoXCJhYnNvbHV0ZVwiPT09KGU9dC5jc3MoXCJwb3NpdGlvblwiKSl8fFwicmVsYXRpdmVcIj09PWV8fFwiZml4ZWRcIj09PWUpJiYoaT1wYXJzZUludCh0LmNzcyhcInpJbmRleFwiKSwxMCksIWlzTmFOKGkpJiYwIT09aSkpcmV0dXJuIGk7dD10LnBhcmVudCgpfXJldHVybiAwfWZ1bmN0aW9uIHMoKXt0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPVwidWktZGF0ZXBpY2tlci1kaXZcIix0aGlzLl9pbmxpbmVDbGFzcz1cInVpLWRhdGVwaWNrZXItaW5saW5lXCIsdGhpcy5fYXBwZW5kQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWFwcGVuZFwiLHRoaXMuX3RyaWdnZXJDbGFzcz1cInVpLWRhdGVwaWNrZXItdHJpZ2dlclwiLHRoaXMuX2RpYWxvZ0NsYXNzPVwidWktZGF0ZXBpY2tlci1kaWFsb2dcIix0aGlzLl9kaXNhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRpc2FibGVkXCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZVwiLHRoaXMuX2N1cnJlbnRDbGFzcz1cInVpLWRhdGVwaWNrZXItY3VycmVudC1kYXlcIix0aGlzLl9kYXlPdmVyQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyXCIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsW1wiXCJdPXtjbG9zZVRleHQ6XCJEb25lXCIscHJldlRleHQ6XCJQcmV2XCIsbmV4dFRleHQ6XCJOZXh0XCIsY3VycmVudFRleHQ6XCJUb2RheVwiLG1vbnRoTmFtZXM6W1wiSmFudWFyeVwiLFwiRmVicnVhcnlcIixcIk1hcmNoXCIsXCJBcHJpbFwiLFwiTWF5XCIsXCJKdW5lXCIsXCJKdWx5XCIsXCJBdWd1c3RcIixcIlNlcHRlbWJlclwiLFwiT2N0b2JlclwiLFwiTm92ZW1iZXJcIixcIkRlY2VtYmVyXCJdLG1vbnRoTmFtZXNTaG9ydDpbXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdLGRheU5hbWVzOltcIlN1bmRheVwiLFwiTW9uZGF5XCIsXCJUdWVzZGF5XCIsXCJXZWRuZXNkYXlcIixcIlRodXJzZGF5XCIsXCJGcmlkYXlcIixcIlNhdHVyZGF5XCJdLGRheU5hbWVzU2hvcnQ6W1wiU3VuXCIsXCJNb25cIixcIlR1ZVwiLFwiV2VkXCIsXCJUaHVcIixcIkZyaVwiLFwiU2F0XCJdLGRheU5hbWVzTWluOltcIlN1XCIsXCJNb1wiLFwiVHVcIixcIldlXCIsXCJUaFwiLFwiRnJcIixcIlNhXCJdLHdlZWtIZWFkZXI6XCJXa1wiLGRhdGVGb3JtYXQ6XCJtbS9kZC95eVwiLGZpcnN0RGF5OjAsaXNSVEw6ITEsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHllYXJTdWZmaXg6XCJcIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjpcImZvY3VzXCIsc2hvd0FuaW06XCJmYWRlSW5cIixzaG93T3B0aW9uczp7fSxkZWZhdWx0RGF0ZTpudWxsLGFwcGVuZFRleHQ6XCJcIixidXR0b25UZXh0OlwiLi4uXCIsYnV0dG9uSW1hZ2U6XCJcIixidXR0b25JbWFnZU9ubHk6ITEsaGlkZUlmTm9QcmV2TmV4dDohMSxuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiExLGdvdG9DdXJyZW50OiExLGNoYW5nZU1vbnRoOiExLGNoYW5nZVllYXI6ITEseWVhclJhbmdlOlwiYy0xMDpjKzEwXCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6XCIrMTBcIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOlwiZmFzdFwiLGJlZm9yZVNob3dEYXk6bnVsbCxiZWZvcmVTaG93Om51bGwsb25TZWxlY3Q6bnVsbCxvbkNoYW5nZU1vbnRoWWVhcjpudWxsLG9uQ2xvc2U6bnVsbCxudW1iZXJPZk1vbnRoczoxLHNob3dDdXJyZW50QXRQb3M6MCxzdGVwTW9udGhzOjEsc3RlcEJpZ01vbnRoczoxMixhbHRGaWVsZDpcIlwiLGFsdEZvcm1hdDpcIlwiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sdC5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFtcIlwiXSksdGhpcy5yZWdpb25hbC5lbj10LmV4dGVuZCghMCx7fSx0aGlzLnJlZ2lvbmFsW1wiXCJdKSx0aGlzLnJlZ2lvbmFsW1wiZW4tVVNcIl09dC5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbC5lbiksdGhpcy5kcERpdj1uKHQoXCI8ZGl2IGlkPSdcIit0aGlzLl9tYWluRGl2SWQrXCInIGNsYXNzPSd1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKX1mdW5jdGlvbiBuKGUpe3ZhciBpPVwiYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhXCI7cmV0dXJuIGUub24oXCJtb3VzZW91dFwiLGksZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZ0KHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmdCh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKX0pLm9uKFwibW91c2VvdmVyXCIsaSxvKX1mdW5jdGlvbiBvKCl7dC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihwLmlubGluZT9wLmRwRGl2LnBhcmVudCgpWzBdOnAuaW5wdXRbMF0pfHwodCh0aGlzKS5wYXJlbnRzKFwiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXJcIikuZmluZChcImFcIikucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSx0KHRoaXMpLmFkZENsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1wcmV2XCIpJiZ0KHRoaXMpLmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItbmV4dFwiKSYmdCh0aGlzKS5hZGRDbGFzcyhcInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlclwiKSl9ZnVuY3Rpb24gYShlLGkpe3QuZXh0ZW5kKGUsaSk7Zm9yKHZhciBzIGluIGkpbnVsbD09aVtzXSYmKGVbc109aVtzXSk7cmV0dXJuIGV9ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudmFsKCk7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLGUhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIil9fXQudWk9dC51aXx8e307dmFyIGg9KHQudWkudmVyc2lvbj1cIjEuMTIuMVwiLDApLGw9QXJyYXkucHJvdG90eXBlLnNsaWNlO3QuY2xlYW5EYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcyxuLG87Zm9yKG89MDtudWxsIT0obj1pW29dKTtvKyspdHJ5e3M9dC5fZGF0YShuLFwiZXZlbnRzXCIpLHMmJnMucmVtb3ZlJiZ0KG4pLnRyaWdnZXJIYW5kbGVyKFwicmVtb3ZlXCIpfWNhdGNoKHQpe31lKGkpfX0odC5jbGVhbkRhdGEpLHQud2lkZ2V0PWZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGEscj17fSxoPWUuc3BsaXQoXCIuXCIpWzBdO2U9ZS5zcGxpdChcIi5cIilbMV07dmFyIGw9aCtcIi1cIitlO3JldHVybiBzfHwocz1pLGk9dC5XaWRnZXQpLHQuaXNBcnJheShzKSYmKHM9dC5leHRlbmQuYXBwbHkobnVsbCxbe31dLmNvbmNhdChzKSkpLHQuZXhwcltcIjpcIl1bbC50b0xvd2VyQ2FzZSgpXT1mdW5jdGlvbihlKXtyZXR1cm4hIXQuZGF0YShlLGwpfSx0W2hdPXRbaF18fHt9LG49dFtoXVtlXSxvPXRbaF1bZV09ZnVuY3Rpb24odCxlKXtpZighdGhpcy5fY3JlYXRlV2lkZ2V0KXJldHVybiBuZXcgbyh0LGUpO2FyZ3VtZW50cy5sZW5ndGgmJnRoaXMuX2NyZWF0ZVdpZGdldCh0LGUpfSx0LmV4dGVuZChvLG4se3ZlcnNpb246cy52ZXJzaW9uLF9wcm90bzp0LmV4dGVuZCh7fSxzKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSxhPW5ldyBpLGEub3B0aW9ucz10LndpZGdldC5leHRlbmQoe30sYS5vcHRpb25zKSx0LmVhY2gocyxmdW5jdGlvbihlLHMpe2lmKCF0LmlzRnVuY3Rpb24ocykpcmV0dXJuIHZvaWQocltlXT1zKTtyW2VdPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe3JldHVybiBpLnByb3RvdHlwZVtlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbih0KXtyZXR1cm4gaS5wcm90b3R5cGVbZV0uYXBwbHkodGhpcyx0KX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMuX3N1cGVyLG89dGhpcy5fc3VwZXJBcHBseTtyZXR1cm4gdGhpcy5fc3VwZXI9dCx0aGlzLl9zdXBlckFwcGx5PW4sZT1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9zdXBlcj1pLHRoaXMuX3N1cGVyQXBwbHk9byxlfX0oKX0pLG8ucHJvdG90eXBlPXQud2lkZ2V0LmV4dGVuZChhLHt3aWRnZXRFdmVudFByZWZpeDpuP2Eud2lkZ2V0RXZlbnRQcmVmaXh8fGU6ZX0scix7Y29uc3RydWN0b3I6byxuYW1lc3BhY2U6aCx3aWRnZXROYW1lOmUsd2lkZ2V0RnVsbE5hbWU6bH0pLG4/KHQuZWFjaChuLl9jaGlsZENvbnN0cnVjdG9ycyxmdW5jdGlvbihlLGkpe3ZhciBzPWkucHJvdG90eXBlO3Qud2lkZ2V0KHMubmFtZXNwYWNlK1wiLlwiK3Mud2lkZ2V0TmFtZSxvLGkuX3Byb3RvKX0pLGRlbGV0ZSBuLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSx0LndpZGdldC5icmlkZ2UoZSxvKSxvfSx0LndpZGdldC5leHRlbmQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciBpLHMsbj1sLmNhbGwoYXJndW1lbnRzLDEpLG89MCxhPW4ubGVuZ3RoO288YTtvKyspZm9yKGkgaW4gbltvXSlzPW5bb11baV0sbltvXS5oYXNPd25Qcm9wZXJ0eShpKSYmdm9pZCAwIT09cyYmKHQuaXNQbGFpbk9iamVjdChzKT9lW2ldPXQuaXNQbGFpbk9iamVjdChlW2ldKT90LndpZGdldC5leHRlbmQoe30sZVtpXSxzKTp0LndpZGdldC5leHRlbmQoe30scyk6ZVtpXT1zKTtyZXR1cm4gZX0sdC53aWRnZXQuYnJpZGdlPWZ1bmN0aW9uKGUsaSl7dmFyIHM9aS5wcm90b3R5cGUud2lkZ2V0RnVsbE5hbWV8fGU7dC5mbltlXT1mdW5jdGlvbihuKXt2YXIgbz1cInN0cmluZ1wiPT10eXBlb2YgbixhPWwuY2FsbChhcmd1bWVudHMsMSkscj10aGlzO3JldHVybiBvP3RoaXMubGVuZ3RofHxcImluc3RhbmNlXCIhPT1uP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpLG89dC5kYXRhKHRoaXMscyk7cmV0dXJuXCJpbnN0YW5jZVwiPT09bj8ocj1vLCExKTpvP3QuaXNGdW5jdGlvbihvW25dKSYmXCJfXCIhPT1uLmNoYXJBdCgwKT8oaT1vW25dLmFwcGx5KG8sYSksaSE9PW8mJnZvaWQgMCE9PWk/KHI9aSYmaS5qcXVlcnk/ci5wdXNoU3RhY2soaS5nZXQoKSk6aSwhMSk6dm9pZCAwKTp0LmVycm9yKFwibm8gc3VjaCBtZXRob2QgJ1wiK24rXCInIGZvciBcIitlK1wiIHdpZGdldCBpbnN0YW5jZVwiKTp0LmVycm9yKFwiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiBcIitlK1wiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyBhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJ1wiK24rXCInXCIpfSk6cj12b2lkIDA6KGEubGVuZ3RoJiYobj10LndpZGdldC5leHRlbmQuYXBwbHkobnVsbCxbbl0uY29uY2F0KGEpKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5kYXRhKHRoaXMscyk7ZT8oZS5vcHRpb24obnx8e30pLGUuX2luaXQmJmUuX2luaXQoKSk6dC5kYXRhKHRoaXMscyxuZXcgaShuLHRoaXMpKX0pKSxyfX0sdC5XaWRnZXQ9ZnVuY3Rpb24oKXt9LHQuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycz1bXSx0LldpZGdldC5wcm90b3R5cGU9e3dpZGdldE5hbWU6XCJ3aWRnZXRcIix3aWRnZXRFdmVudFByZWZpeDpcIlwiLGRlZmF1bHRFbGVtZW50OlwiPGRpdj5cIixvcHRpb25zOntjbGFzc2VzOnt9LGRpc2FibGVkOiExLGNyZWF0ZTpudWxsfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKGUsaSl7aT10KGl8fHRoaXMuZGVmYXVsdEVsZW1lbnR8fHRoaXMpWzBdLHRoaXMuZWxlbWVudD10KGkpLHRoaXMudXVpZD1oKyssdGhpcy5ldmVudE5hbWVzcGFjZT1cIi5cIit0aGlzLndpZGdldE5hbWUrdGhpcy51dWlkLHRoaXMuYmluZGluZ3M9dCgpLHRoaXMuaG92ZXJhYmxlPXQoKSx0aGlzLmZvY3VzYWJsZT10KCksdGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cD17fSxpIT09dGhpcyYmKHQuZGF0YShpLHRoaXMud2lkZ2V0RnVsbE5hbWUsdGhpcyksdGhpcy5fb24oITAsdGhpcy5lbGVtZW50LHtyZW1vdmU6ZnVuY3Rpb24odCl7dC50YXJnZXQ9PT1pJiZ0aGlzLmRlc3Ryb3koKX19KSx0aGlzLmRvY3VtZW50PXQoaS5zdHlsZT9pLm93bmVyRG9jdW1lbnQ6aS5kb2N1bWVudHx8aSksdGhpcy53aW5kb3c9dCh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3fHx0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdykpLHRoaXMub3B0aW9ucz10LndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zLHRoaXMuX2dldENyZWF0ZU9wdGlvbnMoKSxlKSx0aGlzLl9jcmVhdGUoKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbkRpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fdHJpZ2dlcihcImNyZWF0ZVwiLG51bGwsdGhpcy5fZ2V0Q3JlYXRlRXZlbnREYXRhKCkpLHRoaXMuX2luaXQoKX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXtyZXR1cm57fX0sX2dldENyZWF0ZUV2ZW50RGF0YTp0Lm5vb3AsX2NyZWF0ZTp0Lm5vb3AsX2luaXQ6dC5ub29wLGRlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2Rlc3Ryb3koKSx0LmVhY2godGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cCxmdW5jdGlvbih0LGkpe2UuX3JlbW92ZUNsYXNzKGksdCl9KSx0aGlzLmVsZW1lbnQub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXRGdWxsTmFtZSksdGhpcy53aWRnZXQoKS5vZmYodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlQXR0cihcImFyaWEtZGlzYWJsZWRcIiksdGhpcy5iaW5kaW5ncy5vZmYodGhpcy5ldmVudE5hbWVzcGFjZSl9LF9kZXN0cm95OnQubm9vcCx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50fSxvcHRpb246ZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG8sYT1lO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0LndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlpZihhPXt9LHM9ZS5zcGxpdChcIi5cIiksZT1zLnNoaWZ0KCkscy5sZW5ndGgpe2ZvcihuPWFbZV09dC53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9uc1tlXSksbz0wO288cy5sZW5ndGgtMTtvKyspbltzW29dXT1uW3Nbb11dfHx7fSxuPW5bc1tvXV07aWYoZT1zLnBvcCgpLDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT1uW2VdP251bGw6bltlXTtuW2VdPWl9ZWxzZXtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dGhpcy5vcHRpb25zW2VdP251bGw6dGhpcy5vcHRpb25zW2VdO2FbZV09aX1yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhhKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiB0KXRoaXMuX3NldE9wdGlvbihlLHRbZV0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJjbGFzc2VzXCI9PT10JiZ0aGlzLl9zZXRPcHRpb25DbGFzc2VzKGUpLHRoaXMub3B0aW9uc1t0XT1lLFwiZGlzYWJsZWRcIj09PXQmJnRoaXMuX3NldE9wdGlvbkRpc2FibGVkKGUpLHRoaXN9LF9zZXRPcHRpb25DbGFzc2VzOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtmb3IoaSBpbiBlKW49dGhpcy5jbGFzc2VzRWxlbWVudExvb2t1cFtpXSxlW2ldIT09dGhpcy5vcHRpb25zLmNsYXNzZXNbaV0mJm4mJm4ubGVuZ3RoJiYocz10KG4uZ2V0KCkpLHRoaXMuX3JlbW92ZUNsYXNzKG4saSkscy5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzKHtlbGVtZW50OnMsa2V5czppLGNsYXNzZXM6ZSxhZGQ6ITB9KSkpfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy53aWRnZXQoKSx0aGlzLndpZGdldEZ1bGxOYW1lK1wiLWRpc2FibGVkXCIsbnVsbCwhIXQpLHQmJih0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhvdmVyYWJsZSxudWxsLFwidWktc3RhdGUtaG92ZXJcIiksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5mb2N1c2FibGUsbnVsbCxcInVpLXN0YXRlLWZvY3VzXCIpKX0sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiExfSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITB9KX0sX2NsYXNzZXM6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaShpLG8pe3ZhciBhLHI7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKylhPW4uY2xhc3Nlc0VsZW1lbnRMb29rdXBbaVtyXV18fHQoKSxhPXQoZS5hZGQ/dC51bmlxdWUoYS5nZXQoKS5jb25jYXQoZS5lbGVtZW50LmdldCgpKSk6YS5ub3QoZS5lbGVtZW50KS5nZXQoKSksbi5jbGFzc2VzRWxlbWVudExvb2t1cFtpW3JdXT1hLHMucHVzaChpW3JdKSxvJiZlLmNsYXNzZXNbaVtyXV0mJnMucHVzaChlLmNsYXNzZXNbaVtyXV0pfXZhciBzPVtdLG49dGhpcztyZXR1cm4gZT10LmV4dGVuZCh7ZWxlbWVudDp0aGlzLmVsZW1lbnQsY2xhc3Nlczp0aGlzLm9wdGlvbnMuY2xhc3Nlc3x8e319LGUpLHRoaXMuX29uKGUuZWxlbWVudCx7cmVtb3ZlOlwiX3VudHJhY2tDbGFzc2VzRWxlbWVudFwifSksZS5rZXlzJiZpKGUua2V5cy5tYXRjaCgvXFxTKy9nKXx8W10sITApLGUuZXh0cmEmJmkoZS5leHRyYS5tYXRjaCgvXFxTKy9nKXx8W10pLHMuam9pbihcIiBcIil9LF91bnRyYWNrQ2xhc3Nlc0VsZW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpczt0LmVhY2goaS5jbGFzc2VzRWxlbWVudExvb2t1cCxmdW5jdGlvbihzLG4pey0xIT09dC5pbkFycmF5KGUudGFyZ2V0LG4pJiYoaS5jbGFzc2VzRWxlbWVudExvb2t1cFtzXT10KG4ubm90KGUudGFyZ2V0KS5nZXQoKSkpfSl9LF9yZW1vdmVDbGFzczpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKHQsZSxpLCExKX0sX2FkZENsYXNzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3ModCxlLGksITApfSxfdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCxlLGkscyl7cz1cImJvb2xlYW5cIj09dHlwZW9mIHM/czppO3ZhciBuPVwic3RyaW5nXCI9PXR5cGVvZiB0fHxudWxsPT09dCxvPXtleHRyYTpuP2U6aSxrZXlzOm4/dDplLGVsZW1lbnQ6bj90aGlzLmVsZW1lbnQ6dCxhZGQ6c307cmV0dXJuIG8uZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLl9jbGFzc2VzKG8pLHMpLHRoaXN9LF9vbjpmdW5jdGlvbihlLGkscyl7dmFyIG4sbz10aGlzO1wiYm9vbGVhblwiIT10eXBlb2YgZSYmKHM9aSxpPWUsZT0hMSkscz8oaT1uPXQoaSksdGhpcy5iaW5kaW5ncz10aGlzLmJpbmRpbmdzLmFkZChpKSk6KHM9aSxpPXRoaXMuZWxlbWVudCxuPXRoaXMud2lkZ2V0KCkpLHQuZWFjaChzLGZ1bmN0aW9uKHMsYSl7ZnVuY3Rpb24gcigpe2lmKGV8fCEwIT09by5vcHRpb25zLmRpc2FibGVkJiYhdCh0aGlzKS5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpKXJldHVybihcInN0cmluZ1wiPT10eXBlb2YgYT9vW2FdOmEpLmFwcGx5KG8sYXJndW1lbnRzKX1cInN0cmluZ1wiIT10eXBlb2YgYSYmKHIuZ3VpZD1hLmd1aWQ9YS5ndWlkfHxyLmd1aWR8fHQuZ3VpZCsrKTt2YXIgaD1zLm1hdGNoKC9eKFtcXHc6LV0qKVxccyooLiopJC8pLGw9aFsxXStvLmV2ZW50TmFtZXNwYWNlLGM9aFsyXTtjP24ub24obCxjLHIpOmkub24obCxyKX0pfSxfb2ZmOmZ1bmN0aW9uKGUsaSl7aT0oaXx8XCJcIikuc3BsaXQoXCIgXCIpLmpvaW4odGhpcy5ldmVudE5hbWVzcGFjZStcIiBcIikrdGhpcy5ldmVudE5hbWVzcGFjZSxlLm9mZihpKS5vZmYoaSksdGhpcy5iaW5kaW5ncz10KHRoaXMuYmluZGluZ3Mubm90KGUpLmdldCgpKSx0aGlzLmZvY3VzYWJsZT10KHRoaXMuZm9jdXNhYmxlLm5vdChlKS5nZXQoKSksdGhpcy5ob3ZlcmFibGU9dCh0aGlzLmhvdmVyYWJsZS5ub3QoZSkuZ2V0KCkpfSxfZGVsYXk6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKCl7cmV0dXJuKFwic3RyaW5nXCI9PXR5cGVvZiB0P3NbdF06dCkuYXBwbHkocyxhcmd1bWVudHMpfXZhciBzPXRoaXM7cmV0dXJuIHNldFRpbWVvdXQoaSxlfHwwKX0sX2hvdmVyYWJsZTpmdW5jdGlvbihlKXt0aGlzLmhvdmVyYWJsZT10aGlzLmhvdmVyYWJsZS5hZGQoZSksdGhpcy5fb24oZSx7bW91c2VlbnRlcjpmdW5jdGlvbihlKXt0aGlzLl9hZGRDbGFzcyh0KGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlbW92ZUNsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtaG92ZXJcIil9fSl9LF9mb2N1c2FibGU6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2FibGU9dGhpcy5mb2N1c2FibGUuYWRkKGUpLHRoaXMuX29uKGUse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dGhpcy5fYWRkQ2xhc3ModChlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1mb2N1c1wiKX0sZm9jdXNvdXQ6ZnVuY3Rpb24oZSl7dGhpcy5fcmVtb3ZlQ2xhc3ModChlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1mb2N1c1wiKX19KX0sX3RyaWdnZXI6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG8sYT10aGlzLm9wdGlvbnNbZV07aWYocz1zfHx7fSxpPXQuRXZlbnQoaSksaS50eXBlPShlPT09dGhpcy53aWRnZXRFdmVudFByZWZpeD9lOnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrZSkudG9Mb3dlckNhc2UoKSxpLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sbz1pLm9yaWdpbmFsRXZlbnQpZm9yKG4gaW4gbyluIGluIGl8fChpW25dPW9bbl0pO3JldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLHMpLCEodC5pc0Z1bmN0aW9uKGEpJiYhMT09PWEuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtpXS5jb25jYXQocykpfHxpLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LHQuZWFjaCh7c2hvdzpcImZhZGVJblwiLGhpZGU6XCJmYWRlT3V0XCJ9LGZ1bmN0aW9uKGUsaSl7dC5XaWRnZXQucHJvdG90eXBlW1wiX1wiK2VdPWZ1bmN0aW9uKHMsbixvKXtcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49e2VmZmVjdDpufSk7dmFyIGEscj1uPyEwPT09bnx8XCJudW1iZXJcIj09dHlwZW9mIG4/aTpuLmVmZmVjdHx8aTplO249bnx8e30sXCJudW1iZXJcIj09dHlwZW9mIG4mJihuPXtkdXJhdGlvbjpufSksYT0hdC5pc0VtcHR5T2JqZWN0KG4pLG4uY29tcGxldGU9byxuLmRlbGF5JiZzLmRlbGF5KG4uZGVsYXkpLGEmJnQuZWZmZWN0cyYmdC5lZmZlY3RzLmVmZmVjdFtyXT9zW2VdKG4pOnIhPT1lJiZzW3JdP3Nbcl0obi5kdXJhdGlvbixuLmVhc2luZyxvKTpzLnF1ZXVlKGZ1bmN0aW9uKGkpe3QodGhpcylbZV0oKSxvJiZvLmNhbGwoc1swXSksaSgpfSl9fSk7dC53aWRnZXQ7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGUsaSl7cmV0dXJuW3BhcnNlRmxvYXQodFswXSkqKHUudGVzdCh0WzBdKT9lLzEwMDoxKSxwYXJzZUZsb2F0KHRbMV0pKih1LnRlc3QodFsxXSk/aS8xMDA6MSldfWZ1bmN0aW9uIGkoZSxpKXtyZXR1cm4gcGFyc2VJbnQodC5jc3MoZSxpKSwxMCl8fDB9ZnVuY3Rpb24gcyhlKXt2YXIgaT1lWzBdO3JldHVybiA5PT09aS5ub2RlVHlwZT97d2lkdGg6ZS53aWR0aCgpLGhlaWdodDplLmhlaWdodCgpLG9mZnNldDp7dG9wOjAsbGVmdDowfX06dC5pc1dpbmRvdyhpKT97d2lkdGg6ZS53aWR0aCgpLGhlaWdodDplLmhlaWdodCgpLG9mZnNldDp7dG9wOmUuc2Nyb2xsVG9wKCksbGVmdDplLnNjcm9sbExlZnQoKX19OmkucHJldmVudERlZmF1bHQ/e3dpZHRoOjAsaGVpZ2h0OjAsb2Zmc2V0Ont0b3A6aS5wYWdlWSxsZWZ0OmkucGFnZVh9fTp7d2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKSxvZmZzZXQ6ZS5vZmZzZXQoKX19dmFyIG4sbz1NYXRoLm1heCxhPU1hdGguYWJzLHI9L2xlZnR8Y2VudGVyfHJpZ2h0LyxoPS90b3B8Y2VudGVyfGJvdHRvbS8sbD0vW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLGM9L15cXHcrLyx1PS8lJC8sZD10LmZuLnBvc2l0aW9uO3QucG9zaXRpb249e3Njcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjt2YXIgZSxpLHM9dChcIjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NTBweDtoZWlnaHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Jz48ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiKSxvPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gdChcImJvZHlcIikuYXBwZW5kKHMpLGU9by5vZmZzZXRXaWR0aCxzLmNzcyhcIm92ZXJmbG93XCIsXCJzY3JvbGxcIiksaT1vLm9mZnNldFdpZHRoLGU9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49ZS1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKGUpe3ZhciBpPWUuaXNXaW5kb3d8fGUuaXNEb2N1bWVudD9cIlwiOmUuZWxlbWVudC5jc3MoXCJvdmVyZmxvdy14XCIpLHM9ZS5pc1dpbmRvd3x8ZS5pc0RvY3VtZW50P1wiXCI6ZS5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXlcIiksbj1cInNjcm9sbFwiPT09aXx8XCJhdXRvXCI9PT1pJiZlLndpZHRoPGUuZWxlbWVudFswXS5zY3JvbGxXaWR0aDtyZXR1cm57d2lkdGg6XCJzY3JvbGxcIj09PXN8fFwiYXV0b1wiPT09cyYmZS5oZWlnaHQ8ZS5lbGVtZW50WzBdLnNjcm9sbEhlaWdodD90LnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6bj90LnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24oZSl7dmFyIGk9dChlfHx3aW5kb3cpLHM9dC5pc1dpbmRvdyhpWzBdKSxuPSEhaVswXSYmOT09PWlbMF0ubm9kZVR5cGU7cmV0dXJue2VsZW1lbnQ6aSxpc1dpbmRvdzpzLGlzRG9jdW1lbnQ6bixvZmZzZXQ6c3x8bj97bGVmdDowLHRvcDowfTp0KGUpLm9mZnNldCgpLHNjcm9sbExlZnQ6aS5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOmkuc2Nyb2xsVG9wKCksd2lkdGg6aS5vdXRlcldpZHRoKCksaGVpZ2h0Omkub3V0ZXJIZWlnaHQoKX19fSx0LmZuLnBvc2l0aW9uPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5vZilyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj10LmV4dGVuZCh7fSxuKTt2YXIgdSxwLGYsZyxtLF8sdj10KG4ub2YpLGI9dC5wb3NpdGlvbi5nZXRXaXRoaW5JbmZvKG4ud2l0aGluKSx5PXQucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyhiKSx3PShuLmNvbGxpc2lvbnx8XCJmbGlwXCIpLnNwbGl0KFwiIFwiKSxrPXt9O3JldHVybiBfPXModiksdlswXS5wcmV2ZW50RGVmYXVsdCYmKG4uYXQ9XCJsZWZ0IHRvcFwiKSxwPV8ud2lkdGgsZj1fLmhlaWdodCxnPV8ub2Zmc2V0LG09dC5leHRlbmQoe30sZyksdC5lYWNoKFtcIm15XCIsXCJhdFwiXSxmdW5jdGlvbigpe3ZhciB0LGUsaT0oblt0aGlzXXx8XCJcIikuc3BsaXQoXCIgXCIpOzE9PT1pLmxlbmd0aCYmKGk9ci50ZXN0KGlbMF0pP2kuY29uY2F0KFtcImNlbnRlclwiXSk6aC50ZXN0KGlbMF0pP1tcImNlbnRlclwiXS5jb25jYXQoaSk6W1wiY2VudGVyXCIsXCJjZW50ZXJcIl0pLGlbMF09ci50ZXN0KGlbMF0pP2lbMF06XCJjZW50ZXJcIixpWzFdPWgudGVzdChpWzFdKT9pWzFdOlwiY2VudGVyXCIsdD1sLmV4ZWMoaVswXSksZT1sLmV4ZWMoaVsxXSksa1t0aGlzXT1bdD90WzBdOjAsZT9lWzBdOjBdLG5bdGhpc109W2MuZXhlYyhpWzBdKVswXSxjLmV4ZWMoaVsxXSlbMF1dfSksMT09PXcubGVuZ3RoJiYod1sxXT13WzBdKSxcInJpZ2h0XCI9PT1uLmF0WzBdP20ubGVmdCs9cDpcImNlbnRlclwiPT09bi5hdFswXSYmKG0ubGVmdCs9cC8yKSxcImJvdHRvbVwiPT09bi5hdFsxXT9tLnRvcCs9ZjpcImNlbnRlclwiPT09bi5hdFsxXSYmKG0udG9wKz1mLzIpLHU9ZShrLmF0LHAsZiksbS5sZWZ0Kz11WzBdLG0udG9wKz11WzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBzLHIsaD10KHRoaXMpLGw9aC5vdXRlcldpZHRoKCksYz1oLm91dGVySGVpZ2h0KCksZD1pKHRoaXMsXCJtYXJnaW5MZWZ0XCIpLF89aSh0aGlzLFwibWFyZ2luVG9wXCIpLHg9bCtkK2kodGhpcyxcIm1hcmdpblJpZ2h0XCIpK3kud2lkdGgsQz1jK18raSh0aGlzLFwibWFyZ2luQm90dG9tXCIpK3kuaGVpZ2h0LEQ9dC5leHRlbmQoe30sbSksST1lKGsubXksaC5vdXRlcldpZHRoKCksaC5vdXRlckhlaWdodCgpKTtcInJpZ2h0XCI9PT1uLm15WzBdP0QubGVmdC09bDpcImNlbnRlclwiPT09bi5teVswXSYmKEQubGVmdC09bC8yKSxcImJvdHRvbVwiPT09bi5teVsxXT9ELnRvcC09YzpcImNlbnRlclwiPT09bi5teVsxXSYmKEQudG9wLT1jLzIpLEQubGVmdCs9SVswXSxELnRvcCs9SVsxXSxzPXttYXJnaW5MZWZ0OmQsbWFyZ2luVG9wOl99LHQuZWFjaChbXCJsZWZ0XCIsXCJ0b3BcIl0sZnVuY3Rpb24oZSxpKXt0LnVpLnBvc2l0aW9uW3dbZV1dJiZ0LnVpLnBvc2l0aW9uW3dbZV1dW2ldKEQse3RhcmdldFdpZHRoOnAsdGFyZ2V0SGVpZ2h0OmYsZWxlbVdpZHRoOmwsZWxlbUhlaWdodDpjLGNvbGxpc2lvblBvc2l0aW9uOnMsY29sbGlzaW9uV2lkdGg6eCxjb2xsaXNpb25IZWlnaHQ6QyxvZmZzZXQ6W3VbMF0rSVswXSx1WzFdK0lbMV1dLG15Om4ubXksYXQ6bi5hdCx3aXRoaW46YixlbGVtOmh9KX0pLG4udXNpbmcmJihyPWZ1bmN0aW9uKHQpe3ZhciBlPWcubGVmdC1ELmxlZnQsaT1lK3AtbCxzPWcudG9wLUQudG9wLHI9cytmLWMsdT17dGFyZ2V0OntlbGVtZW50OnYsbGVmdDpnLmxlZnQsdG9wOmcudG9wLHdpZHRoOnAsaGVpZ2h0OmZ9LGVsZW1lbnQ6e2VsZW1lbnQ6aCxsZWZ0OkQubGVmdCx0b3A6RC50b3Asd2lkdGg6bCxoZWlnaHQ6Y30saG9yaXpvbnRhbDppPDA/XCJsZWZ0XCI6ZT4wP1wicmlnaHRcIjpcImNlbnRlclwiLHZlcnRpY2FsOnI8MD9cInRvcFwiOnM+MD9cImJvdHRvbVwiOlwibWlkZGxlXCJ9O3A8bCYmYShlK2kpPHAmJih1Lmhvcml6b250YWw9XCJjZW50ZXJcIiksZjxjJiZhKHMrcik8ZiYmKHUudmVydGljYWw9XCJtaWRkbGVcIiksbyhhKGUpLGEoaSkpPm8oYShzKSxhKHIpKT91LmltcG9ydGFudD1cImhvcml6b250YWxcIjp1LmltcG9ydGFudD1cInZlcnRpY2FsXCIsbi51c2luZy5jYWxsKHRoaXMsdCx1KX0pLGgub2Zmc2V0KHQuZXh0ZW5kKEQse3VzaW5nOnJ9KSl9KX0sdC51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIGkscz1lLndpdGhpbixuPXMuaXNXaW5kb3c/cy5zY3JvbGxMZWZ0OnMub2Zmc2V0LmxlZnQsYT1zLndpZHRoLHI9dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxoPW4tcixsPXIrZS5jb2xsaXNpb25XaWR0aC1hLW47ZS5jb2xsaXNpb25XaWR0aD5hP2g+MCYmbDw9MD8oaT10LmxlZnQraCtlLmNvbGxpc2lvbldpZHRoLWEtbix0LmxlZnQrPWgtaSk6dC5sZWZ0PWw+MCYmaDw9MD9uOmg+bD9uK2EtZS5jb2xsaXNpb25XaWR0aDpuOmg+MD90LmxlZnQrPWg6bD4wP3QubGVmdC09bDp0LmxlZnQ9byh0LmxlZnQtcix0LmxlZnQpfSx0b3A6ZnVuY3Rpb24odCxlKXt2YXIgaSxzPWUud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbFRvcDpzLm9mZnNldC50b3AsYT1lLndpdGhpbi5oZWlnaHQscj10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxoPW4tcixsPXIrZS5jb2xsaXNpb25IZWlnaHQtYS1uO2UuY29sbGlzaW9uSGVpZ2h0PmE/aD4wJiZsPD0wPyhpPXQudG9wK2grZS5jb2xsaXNpb25IZWlnaHQtYS1uLHQudG9wKz1oLWkpOnQudG9wPWw+MCYmaDw9MD9uOmg+bD9uK2EtZS5jb2xsaXNpb25IZWlnaHQ6bjpoPjA/dC50b3ArPWg6bD4wP3QudG9wLT1sOnQudG9wPW8odC50b3Atcix0LnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuPWUud2l0aGluLG89bi5vZmZzZXQubGVmdCtuLnNjcm9sbExlZnQscj1uLndpZHRoLGg9bi5pc1dpbmRvdz9uLnNjcm9sbExlZnQ6bi5vZmZzZXQubGVmdCxsPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsYz1sLWgsdT1sK2UuY29sbGlzaW9uV2lkdGgtci1oLGQ9XCJsZWZ0XCI9PT1lLm15WzBdPy1lLmVsZW1XaWR0aDpcInJpZ2h0XCI9PT1lLm15WzBdP2UuZWxlbVdpZHRoOjAscD1cImxlZnRcIj09PWUuYXRbMF0/ZS50YXJnZXRXaWR0aDpcInJpZ2h0XCI9PT1lLmF0WzBdPy1lLnRhcmdldFdpZHRoOjAsZj0tMiplLm9mZnNldFswXTtjPDA/KChpPXQubGVmdCtkK3ArZitlLmNvbGxpc2lvbldpZHRoLXItbyk8MHx8aTxhKGMpKSYmKHQubGVmdCs9ZCtwK2YpOnU+MCYmKChzPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQrZCtwK2YtaCk+MHx8YShzKTx1KSYmKHQubGVmdCs9ZCtwK2YpfSx0b3A6ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG49ZS53aXRoaW4sbz1uLm9mZnNldC50b3Arbi5zY3JvbGxUb3Ascj1uLmhlaWdodCxoPW4uaXNXaW5kb3c/bi5zY3JvbGxUb3A6bi5vZmZzZXQudG9wLGw9dC50b3AtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsYz1sLWgsdT1sK2UuY29sbGlzaW9uSGVpZ2h0LXItaCxkPVwidG9wXCI9PT1lLm15WzFdLHA9ZD8tZS5lbGVtSGVpZ2h0OlwiYm90dG9tXCI9PT1lLm15WzFdP2UuZWxlbUhlaWdodDowLGY9XCJ0b3BcIj09PWUuYXRbMV0/ZS50YXJnZXRIZWlnaHQ6XCJib3R0b21cIj09PWUuYXRbMV0/LWUudGFyZ2V0SGVpZ2h0OjAsZz0tMiplLm9mZnNldFsxXTtjPDA/KChzPXQudG9wK3ArZitnK2UuY29sbGlzaW9uSGVpZ2h0LXItbyk8MHx8czxhKGMpKSYmKHQudG9wKz1wK2YrZyk6dT4wJiYoKGk9dC50b3AtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3ArcCtmK2ctaCk+MHx8YShpKTx1KSYmKHQudG9wKz1wK2YrZyl9fSxmbGlwZml0OntsZWZ0OmZ1bmN0aW9uKCl7dC51aS5wb3NpdGlvbi5mbGlwLmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQudWkucG9zaXRpb24uZml0LmxlZnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0b3A6ZnVuY3Rpb24oKXt0LnVpLnBvc2l0aW9uLmZsaXAudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LnVpLnBvc2l0aW9uLmZpdC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19fSgpO3ZhciBjPSh0LnVpLnBvc2l0aW9uLHQuZXh0ZW5kKHQuZXhwcltcIjpcIl0se2RhdGE6dC5leHByLmNyZWF0ZVBzZXVkbz90LmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4hIXQuZGF0YShpLGUpfX0pOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4hIXQuZGF0YShlLHNbM10pfX0pLHQuZm4uZXh0ZW5kKHtkaXNhYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9XCJvbnNlbGVjdHN0YXJ0XCJpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpP1wic2VsZWN0c3RhcnRcIjpcIm1vdXNlZG93blwiO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm9uKHQrXCIudWktZGlzYWJsZVNlbGVjdGlvblwiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pfX0oKSxlbmFibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmYoXCIudWktZGlzYWJsZVNlbGVjdGlvblwiKX19KSxcInVpLWVmZmVjdHMtYW5pbWF0ZWRcIiksdT10O3QuZWZmZWN0cz17ZWZmZWN0Ont9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGkpe3ZhciBzPWNbZS50eXBlXXx8e307cmV0dXJuIG51bGw9PXQ/aXx8IWUuZGVmP251bGw6ZS5kZWY6KHQ9cy5mbG9vcj9+fnQ6cGFyc2VGbG9hdCh0KSxpc05hTih0KT9lLmRlZjpzLm1vZD8odCtzLm1vZCklcy5tb2Q6MD50PzA6cy5tYXg8dD9zLm1heDp0KX1mdW5jdGlvbiBzKGUpe3ZhciBpPWgoKSxzPWkuX3JnYmE9W107cmV0dXJuIGU9ZS50b0xvd2VyQ2FzZSgpLHAocixmdW5jdGlvbih0LG4pe3ZhciBvLGE9bi5yZS5leGVjKGUpLHI9YSYmbi5wYXJzZShhKSxoPW4uc3BhY2V8fFwicmdiYVwiO2lmKHIpcmV0dXJuIG89aVtoXShyKSxpW2xbaF0uY2FjaGVdPW9bbFtoXS5jYWNoZV0scz1pLl9yZ2JhPW8uX3JnYmEsITF9KSxzLmxlbmd0aD8oXCIwLDAsMCwwXCI9PT1zLmpvaW4oKSYmdC5leHRlbmQocyxvLnRyYW5zcGFyZW50KSxpKTpvW2VdfWZ1bmN0aW9uIG4odCxlLGkpe3JldHVybiBpPShpKzEpJTEsNippPDE/dCsoZS10KSppKjY6MippPDE/ZTozKmk8Mj90KyhlLXQpKigyLzMtaSkqNjp0fXZhciBvLGE9L14oW1xcLStdKT1cXHMqKFxcZCtcXC4/XFxkKikvLHI9W3tyZTovcmdiYT9cXChcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bdFsxXSx0WzJdLHRbM10sdFs0XV19fSx7cmU6L3JnYmE/XFwoXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuWzIuNTUqdFsxXSwyLjU1KnRbMl0sMi41NSp0WzNdLHRbNF1dfX0se3JlOi8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSwxNikscGFyc2VJbnQodFsyXSwxNikscGFyc2VJbnQodFszXSwxNildfX0se3JlOi8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bcGFyc2VJbnQodFsxXSt0WzFdLDE2KSxwYXJzZUludCh0WzJdK3RbMl0sMTYpLHBhcnNlSW50KHRbM10rdFszXSwxNildfX0se3JlOi9oc2xhP1xcKFxccyooXFxkKyg/OlxcLlxcZCspPylcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqKD86LFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqKT9cXCkvLHNwYWNlOlwiaHNsYVwiLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblt0WzFdLHRbMl0vMTAwLHRbM10vMTAwLHRbNF1dfX1dLGg9dC5Db2xvcj1mdW5jdGlvbihlLGkscyxuKXtyZXR1cm4gbmV3IHQuQ29sb3IuZm4ucGFyc2UoZSxpLHMsbil9LGw9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6XCJieXRlXCJ9LGdyZWVuOntpZHg6MSx0eXBlOlwiYnl0ZVwifSxibHVlOntpZHg6Mix0eXBlOlwiYnl0ZVwifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6XCJkZWdyZWVzXCJ9LHNhdHVyYXRpb246e2lkeDoxLHR5cGU6XCJwZXJjZW50XCJ9LGxpZ2h0bmVzczp7aWR4OjIsdHlwZTpcInBlcmNlbnRcIn19fX0sYz17Ynl0ZTp7Zmxvb3I6ITAsbWF4OjI1NX0scGVyY2VudDp7bWF4OjF9LGRlZ3JlZXM6e21vZDozNjAsZmxvb3I6ITB9fSx1PWguc3VwcG9ydD17fSxkPXQoXCI8cD5cIilbMF0scD10LmVhY2g7ZC5zdHlsZS5jc3NUZXh0PVwiYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEsMSwxLC41KVwiLHUucmdiYT1kLnN0eWxlLmJhY2tncm91bmRDb2xvci5pbmRleE9mKFwicmdiYVwiKT4tMSxwKGwsZnVuY3Rpb24odCxlKXtlLmNhY2hlPVwiX1wiK3QsZS5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZTpcInBlcmNlbnRcIixkZWY6MX19KSxoLmZuPXQuZXh0ZW5kKGgucHJvdG90eXBlLHtwYXJzZTpmdW5jdGlvbihlLG4sYSxyKXtpZih2b2lkIDA9PT1lKXJldHVybiB0aGlzLl9yZ2JhPVtudWxsLG51bGwsbnVsbCxudWxsXSx0aGlzOyhlLmpxdWVyeXx8ZS5ub2RlVHlwZSkmJihlPXQoZSkuY3NzKG4pLG49dm9pZCAwKTt2YXIgYz10aGlzLHU9dC50eXBlKGUpLGQ9dGhpcy5fcmdiYT1bXTtyZXR1cm4gdm9pZCAwIT09biYmKGU9W2UsbixhLHJdLHU9XCJhcnJheVwiKSxcInN0cmluZ1wiPT09dT90aGlzLnBhcnNlKHMoZSl8fG8uX2RlZmF1bHQpOlwiYXJyYXlcIj09PXU/KHAobC5yZ2JhLnByb3BzLGZ1bmN0aW9uKHQscyl7ZFtzLmlkeF09aShlW3MuaWR4XSxzKX0pLHRoaXMpOlwib2JqZWN0XCI9PT11PyhlIGluc3RhbmNlb2YgaD9wKGwsZnVuY3Rpb24odCxpKXtlW2kuY2FjaGVdJiYoY1tpLmNhY2hlXT1lW2kuY2FjaGVdLnNsaWNlKCkpfSk6cChsLGZ1bmN0aW9uKHMsbil7dmFyIG89bi5jYWNoZTtwKG4ucHJvcHMsZnVuY3Rpb24odCxzKXtpZighY1tvXSYmbi50byl7aWYoXCJhbHBoYVwiPT09dHx8bnVsbD09ZVt0XSlyZXR1cm47Y1tvXT1uLnRvKGMuX3JnYmEpfWNbb11bcy5pZHhdPWkoZVt0XSxzLCEwKX0pLGNbb10mJnQuaW5BcnJheShudWxsLGNbb10uc2xpY2UoMCwzKSk8MCYmKGNbb11bM109MSxuLmZyb20mJihjLl9yZ2JhPW4uZnJvbShjW29dKSkpfSksdGhpcyk6dm9pZCAwfSxpczpmdW5jdGlvbih0KXt2YXIgZT1oKHQpLGk9ITAscz10aGlzO3JldHVybiBwKGwsZnVuY3Rpb24odCxuKXt2YXIgbyxhPWVbbi5jYWNoZV07cmV0dXJuIGEmJihvPXNbbi5jYWNoZV18fG4udG8mJm4udG8ocy5fcmdiYSl8fFtdLHAobi5wcm9wcyxmdW5jdGlvbih0LGUpe2lmKG51bGwhPWFbZS5pZHhdKXJldHVybiBpPWFbZS5pZHhdPT09b1tlLmlkeF19KSksaX0pLGl9LF9zcGFjZTpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcztyZXR1cm4gcChsLGZ1bmN0aW9uKGkscyl7ZVtzLmNhY2hlXSYmdC5wdXNoKGkpfSksdC5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBzPWgodCksbj1zLl9zcGFjZSgpLG89bFtuXSxhPTA9PT10aGlzLmFscGhhKCk/aChcInRyYW5zcGFyZW50XCIpOnRoaXMscj1hW28uY2FjaGVdfHxvLnRvKGEuX3JnYmEpLHU9ci5zbGljZSgpO3JldHVybiBzPXNbby5jYWNoZV0scChvLnByb3BzLGZ1bmN0aW9uKHQsbil7dmFyIG89bi5pZHgsYT1yW29dLGg9c1tvXSxsPWNbbi50eXBlXXx8e307bnVsbCE9PWgmJihudWxsPT09YT91W29dPWg6KGwubW9kJiYoaC1hPmwubW9kLzI/YSs9bC5tb2Q6YS1oPmwubW9kLzImJihhLT1sLm1vZCkpLHVbb109aSgoaC1hKSplK2EsbikpKX0pLHRoaXNbbl0odSl9LGJsZW5kOmZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLl9yZ2JhWzNdKXJldHVybiB0aGlzO3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxzPWkucG9wKCksbj1oKGUpLl9yZ2JhO3JldHVybiBoKHQubWFwKGksZnVuY3Rpb24odCxlKXtyZXR1cm4oMS1zKSpuW2VdK3MqdH0pKX0sdG9SZ2JhU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9XCJyZ2JhKFwiLGk9dC5tYXAodGhpcy5fcmdiYSxmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P2U+Mj8xOjA6dH0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksZT1cInJnYihcIiksZStpLmpvaW4oKStcIilcIn0sdG9Ic2xhU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9XCJoc2xhKFwiLGk9dC5tYXAodGhpcy5oc2xhKCksZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9ZT4yPzE6MCksZSYmZTwzJiYodD1NYXRoLnJvdW5kKDEwMCp0KStcIiVcIiksdH0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksZT1cImhzbChcIiksZStpLmpvaW4oKStcIilcIn0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fcmdiYS5zbGljZSgpLHM9aS5wb3AoKTtyZXR1cm4gZSYmaS5wdXNoKH5+KDI1NSpzKSksXCIjXCIrdC5tYXAoaSxmdW5jdGlvbih0KXtyZXR1cm4gdD0odHx8MCkudG9TdHJpbmcoMTYpLDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9KS5qb2luKFwiXCIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fcmdiYVszXT9cInRyYW5zcGFyZW50XCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxoLmZuLnBhcnNlLnByb3RvdHlwZT1oLmZuLGwuaHNsYS50bz1mdW5jdGlvbih0KXtpZihudWxsPT10WzBdfHxudWxsPT10WzFdfHxudWxsPT10WzJdKXJldHVybltudWxsLG51bGwsbnVsbCx0WzNdXTt2YXIgZSxpLHM9dFswXS8yNTUsbj10WzFdLzI1NSxvPXRbMl0vMjU1LGE9dFszXSxyPU1hdGgubWF4KHMsbixvKSxoPU1hdGgubWluKHMsbixvKSxsPXItaCxjPXIraCx1PS41KmM7cmV0dXJuIGU9aD09PXI/MDpzPT09cj82MCoobi1vKS9sKzM2MDpuPT09cj82MCooby1zKS9sKzEyMDo2MCoocy1uKS9sKzI0MCxpPTA9PT1sPzA6dTw9LjU/bC9jOmwvKDItYyksW01hdGgucm91bmQoZSklMzYwLGksdSxudWxsPT1hPzE6YV19LGwuaHNsYS5mcm9tPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXRbMF18fG51bGw9PXRbMV18fG51bGw9PXRbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLHRbM11dO3ZhciBlPXRbMF0vMzYwLGk9dFsxXSxzPXRbMl0sbz10WzNdLGE9czw9LjU/cyooMStpKTpzK2ktcyppLHI9MipzLWE7cmV0dXJuW01hdGgucm91bmQoMjU1Km4ocixhLGUrMS8zKSksTWF0aC5yb3VuZCgyNTUqbihyLGEsZSkpLE1hdGgucm91bmQoMjU1Km4ocixhLGUtMS8zKSksb119LHAobCxmdW5jdGlvbihlLHMpe3ZhciBuPXMucHJvcHMsbz1zLmNhY2hlLHI9cy50byxsPXMuZnJvbTtoLmZuW2VdPWZ1bmN0aW9uKGUpe2lmKHImJiF0aGlzW29dJiYodGhpc1tvXT1yKHRoaXMuX3JnYmEpKSx2b2lkIDA9PT1lKXJldHVybiB0aGlzW29dLnNsaWNlKCk7dmFyIHMsYT10LnR5cGUoZSksYz1cImFycmF5XCI9PT1hfHxcIm9iamVjdFwiPT09YT9lOmFyZ3VtZW50cyx1PXRoaXNbb10uc2xpY2UoKTtyZXR1cm4gcChuLGZ1bmN0aW9uKHQsZSl7dmFyIHM9Y1tcIm9iamVjdFwiPT09YT90OmUuaWR4XTtudWxsPT1zJiYocz11W2UuaWR4XSksdVtlLmlkeF09aShzLGUpfSksbD8ocz1oKGwodSkpLHNbb109dSxzKTpoKHUpfSxwKG4sZnVuY3Rpb24oaSxzKXtoLmZuW2ldfHwoaC5mbltpXT1mdW5jdGlvbihuKXt2YXIgbyxyPXQudHlwZShuKSxoPVwiYWxwaGFcIj09PWk/dGhpcy5faHNsYT9cImhzbGFcIjpcInJnYmFcIjplLGw9dGhpc1toXSgpLGM9bFtzLmlkeF07cmV0dXJuXCJ1bmRlZmluZWRcIj09PXI/YzooXCJmdW5jdGlvblwiPT09ciYmKG49bi5jYWxsKHRoaXMsYykscj10LnR5cGUobikpLG51bGw9PW4mJnMuZW1wdHk/dGhpczooXCJzdHJpbmdcIj09PXImJihvPWEuZXhlYyhuKSkmJihuPWMrcGFyc2VGbG9hdChvWzJdKSooXCIrXCI9PT1vWzFdPzE6LTEpKSxsW3MuaWR4XT1uLHRoaXNbaF0obCkpKX0pfSl9KSxoLmhvb2s9ZnVuY3Rpb24oZSl7dmFyIGk9ZS5zcGxpdChcIiBcIik7cChpLGZ1bmN0aW9uKGUsaSl7dC5jc3NIb29rc1tpXT17c2V0OmZ1bmN0aW9uKGUsbil7dmFyIG8sYSxyPVwiXCI7aWYoXCJ0cmFuc3BhcmVudFwiIT09biYmKFwic3RyaW5nXCIhPT10LnR5cGUobil8fChvPXMobikpKSl7aWYobj1oKG98fG4pLCF1LnJnYmEmJjEhPT1uLl9yZ2JhWzNdKXtmb3IoYT1cImJhY2tncm91bmRDb2xvclwiPT09aT9lLnBhcmVudE5vZGU6ZTsoXCJcIj09PXJ8fFwidHJhbnNwYXJlbnRcIj09PXIpJiZhJiZhLnN0eWxlOyl0cnl7cj10LmNzcyhhLFwiYmFja2dyb3VuZENvbG9yXCIpLGE9YS5wYXJlbnROb2RlfWNhdGNoKHQpe31uPW4uYmxlbmQociYmXCJ0cmFuc3BhcmVudFwiIT09cj9yOlwiX2RlZmF1bHRcIil9bj1uLnRvUmdiYVN0cmluZygpfXRyeXtlLnN0eWxlW2ldPW59Y2F0Y2godCl7fX19LHQuZnguc3RlcFtpXT1mdW5jdGlvbihlKXtlLmNvbG9ySW5pdHx8KGUuc3RhcnQ9aChlLmVsZW0saSksZS5lbmQ9aChlLmVuZCksZS5jb2xvckluaXQ9ITApLHQuY3NzSG9va3NbaV0uc2V0KGUuZWxlbSxlLnN0YXJ0LnRyYW5zaXRpb24oZS5lbmQsZS5wb3MpKX19KX0saC5ob29rKFwiYmFja2dyb3VuZENvbG9yIGJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckxlZnRDb2xvciBib3JkZXJSaWdodENvbG9yIGJvcmRlclRvcENvbG9yIGNvbG9yIGNvbHVtblJ1bGVDb2xvciBvdXRsaW5lQ29sb3IgdGV4dERlY29yYXRpb25Db2xvciB0ZXh0RW1waGFzaXNDb2xvclwiKSx0LmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHAoW1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGZ1bmN0aW9uKGkscyl7ZVtcImJvcmRlclwiK3MrXCJDb2xvclwiXT10fSksZX19LG89dC5Db2xvci5uYW1lcz17YXF1YTpcIiMwMGZmZmZcIixibGFjazpcIiMwMDAwMDBcIixibHVlOlwiIzAwMDBmZlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixsaW1lOlwiIzAwZmYwMFwiLG1hcm9vbjpcIiM4MDAwMDBcIixuYXZ5OlwiIzAwMDA4MFwiLG9saXZlOlwiIzgwODAwMFwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHRlYWw6XCIjMDA4MDgwXCIsd2hpdGU6XCIjZmZmZmZmXCIseWVsbG93OlwiI2ZmZmYwMFwiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDpcIiNmZmZmZmZcIn19KHUpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgaSxzLG49ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P2Uub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk6ZS5jdXJyZW50U3R5bGUsbz17fTtpZihuJiZuLmxlbmd0aCYmblswXSYmbltuWzBdXSlmb3Iocz1uLmxlbmd0aDtzLS07KWk9bltzXSxcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmKG9bdC5jYW1lbENhc2UoaSldPW5baV0pO2Vsc2UgZm9yKGkgaW4gbilcInN0cmluZ1wiPT10eXBlb2YgbltpXSYmKG9baV09bltpXSk7cmV0dXJuIG99ZnVuY3Rpb24gaShlLGkpe3ZhciBzLG8sYT17fTtmb3IocyBpbiBpKW89aVtzXSxlW3NdIT09byYmKG5bc118fCF0LmZ4LnN0ZXBbc10mJmlzTmFOKHBhcnNlRmxvYXQobykpfHwoYVtzXT1vKSk7cmV0dXJuIGF9dmFyIHM9W1wiYWRkXCIsXCJyZW1vdmVcIixcInRvZ2dsZVwiXSxuPXtib3JkZXI6MSxib3JkZXJCb3R0b206MSxib3JkZXJDb2xvcjoxLGJvcmRlckxlZnQ6MSxib3JkZXJSaWdodDoxLGJvcmRlclRvcDoxLGJvcmRlcldpZHRoOjEsbWFyZ2luOjEscGFkZGluZzoxfTt0LmVhY2goW1wiYm9yZGVyTGVmdFN0eWxlXCIsXCJib3JkZXJSaWdodFN0eWxlXCIsXCJib3JkZXJCb3R0b21TdHlsZVwiLFwiYm9yZGVyVG9wU3R5bGVcIl0sZnVuY3Rpb24oZSxpKXt0LmZ4LnN0ZXBbaV09ZnVuY3Rpb24odCl7KFwibm9uZVwiIT09dC5lbmQmJiF0LnNldEF0dHJ8fDE9PT10LnBvcyYmIXQuc2V0QXR0cikmJih1LnN0eWxlKHQuZWxlbSxpLHQuZW5kKSx0LnNldEF0dHI9ITApfX0pLHQuZm4uYWRkQmFja3x8KHQuZm4uYWRkQmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGQobnVsbD09dD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcih0KSl9KSx0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKG4sbyxhLHIpe3ZhciBoPXQuc3BlZWQobyxhLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIG8sYT10KHRoaXMpLHI9YS5hdHRyKFwiY2xhc3NcIil8fFwiXCIsbD1oLmNoaWxkcmVuP2EuZmluZChcIipcIikuYWRkQmFjaygpOmE7bD1sLm1hcChmdW5jdGlvbigpe3JldHVybntlbDp0KHRoaXMpLHN0YXJ0OmUodGhpcyl9fSksbz1mdW5jdGlvbigpe3QuZWFjaChzLGZ1bmN0aW9uKHQsZSl7bltlXSYmYVtlK1wiQ2xhc3NcIl0obltlXSl9KX0sbygpLGw9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9ZSh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9aSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksYS5hdHRyKFwiY2xhc3NcIixyKSxsPWwubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXQuRGVmZXJyZWQoKSxzPXQuZXh0ZW5kKHt9LGgse3F1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5yZXNvbHZlKGUpfX0pO3JldHVybiB0aGlzLmVsLmFuaW1hdGUodGhpcy5kaWZmLHMpLGkucHJvbWlzZSgpfSksdC53aGVuLmFwcGx5KHQsbC5nZXQoKSkuZG9uZShmdW5jdGlvbigpe28oKSx0LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbDt0LmVhY2godGhpcy5kaWZmLGZ1bmN0aW9uKHQpe2UuY3NzKHQsXCJcIil9KX0pLGguY29tcGxldGUuY2FsbChhWzBdKX0pfSl9LHQuZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxzLG4sbyl7cmV0dXJuIHM/dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse2FkZDppfSxzLG4sbyk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSh0LmZuLmFkZENsYXNzKSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxzLG4sbyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7cmVtb3ZlOml9LHMsbixvKTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KHQuZm4ucmVtb3ZlQ2xhc3MpLHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpLHMsbixvLGEpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2Ygc3x8dm9pZCAwPT09cz9uP3QuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHM/e2FkZDppfTp7cmVtb3ZlOml9LG4sbyxhKTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOml9LHMsbixvKX19KHQuZm4udG9nZ2xlQ2xhc3MpLHN3aXRjaENsYXNzOmZ1bmN0aW9uKGUsaSxzLG4sbyl7cmV0dXJuIHQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aSxyZW1vdmU6ZX0scyxuLG8pfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLGkscyxuKXtyZXR1cm4gdC5pc1BsYWluT2JqZWN0KGUpJiYoaT1lLGU9ZS5lZmZlY3QpLGU9e2VmZmVjdDplfSxudWxsPT1pJiYoaT17fSksdC5pc0Z1bmN0aW9uKGkpJiYobj1pLHM9bnVsbCxpPXt9KSwoXCJudW1iZXJcIj09dHlwZW9mIGl8fHQuZnguc3BlZWRzW2ldKSYmKG49cyxzPWksaT17fSksdC5pc0Z1bmN0aW9uKHMpJiYobj1zLHM9bnVsbCksaSYmdC5leHRlbmQoZSxpKSxzPXN8fGkuZHVyYXRpb24sZS5kdXJhdGlvbj10LmZ4Lm9mZj8wOlwibnVtYmVyXCI9PXR5cGVvZiBzP3M6cyBpbiB0LmZ4LnNwZWVkcz90LmZ4LnNwZWVkc1tzXTp0LmZ4LnNwZWVkcy5fZGVmYXVsdCxlLmNvbXBsZXRlPW58fGkuY29tcGxldGUsZX1mdW5jdGlvbiBpKGUpe3JldHVybiEoZSYmXCJudW1iZXJcIiE9dHlwZW9mIGUmJiF0LmZ4LnNwZWVkc1tlXSl8fChcInN0cmluZ1wiPT10eXBlb2YgZSYmIXQuZWZmZWN0cy5lZmZlY3RbZV18fCghIXQuaXNGdW5jdGlvbihlKXx8XCJvYmplY3RcIj09dHlwZW9mIGUmJiFlLmVmZmVjdCkpfWZ1bmN0aW9uIHModCxlKXt2YXIgaT1lLm91dGVyV2lkdGgoKSxzPWUub3V0ZXJIZWlnaHQoKSxuPS9ecmVjdFxcKCgtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0bylcXCkkLyxvPW4uZXhlYyh0KXx8W1wiXCIsMCxpLHMsMF07cmV0dXJue3RvcDpwYXJzZUZsb2F0KG9bMV0pfHwwLHJpZ2h0OlwiYXV0b1wiPT09b1syXT9pOnBhcnNlRmxvYXQob1syXSksYm90dG9tOlwiYXV0b1wiPT09b1szXT9zOnBhcnNlRmxvYXQob1szXSksbGVmdDpwYXJzZUZsb2F0KG9bNF0pfHwwfX10LmV4cHImJnQuZXhwci5maWx0ZXJzJiZ0LmV4cHIuZmlsdGVycy5hbmltYXRlZCYmKHQuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4hIXQoaSkuZGF0YShjKXx8ZShpKX19KHQuZXhwci5maWx0ZXJzLmFuaW1hdGVkKSksITEhPT10LnVpQmFja0NvbXBhdCYmdC5leHRlbmQodC5lZmZlY3RzLHtzYXZlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTAscz1lLmxlbmd0aDtpPHM7aSsrKW51bGwhPT1lW2ldJiZ0LmRhdGEoXCJ1aS1lZmZlY3RzLVwiK2VbaV0sdFswXS5zdHlsZVtlW2ldXSl9LHJlc3RvcmU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGkscz0wLG49ZS5sZW5ndGg7czxuO3MrKyludWxsIT09ZVtzXSYmKGk9dC5kYXRhKFwidWktZWZmZWN0cy1cIitlW3NdKSx0LmNzcyhlW3NdLGkpKX0sc2V0TW9kZTpmdW5jdGlvbih0LGUpe3JldHVyblwidG9nZ2xlXCI9PT1lJiYoZT10LmlzKFwiOmhpZGRlblwiKT9cInNob3dcIjpcImhpZGVcIiksZX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbihlKXtpZihlLnBhcmVudCgpLmlzKFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiKSlyZXR1cm4gZS5wYXJlbnQoKTt2YXIgaT17d2lkdGg6ZS5vdXRlcldpZHRoKCEwKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCghMCksZmxvYXQ6ZS5jc3MoXCJmbG9hdFwiKX0scz10KFwiPGRpdj48L2Rpdj5cIikuYWRkQ2xhc3MoXCJ1aS1lZmZlY3RzLXdyYXBwZXJcIikuY3NzKHtmb250U2l6ZTpcIjEwMCVcIixiYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIixib3JkZXI6XCJub25lXCIsbWFyZ2luOjAscGFkZGluZzowfSksbj17d2lkdGg6ZS53aWR0aCgpLGhlaWdodDplLmhlaWdodCgpfSxvPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dHJ5e28uaWR9Y2F0Y2godCl7bz1kb2N1bWVudC5ib2R5fXJldHVybiBlLndyYXAocyksKGVbMF09PT1vfHx0LmNvbnRhaW5zKGVbMF0sbykpJiZ0KG8pLnRyaWdnZXIoXCJmb2N1c1wiKSxzPWUucGFyZW50KCksXCJzdGF0aWNcIj09PWUuY3NzKFwicG9zaXRpb25cIik/KHMuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCJ9KSxlLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwifSkpOih0LmV4dGVuZChpLHtwb3NpdGlvbjplLmNzcyhcInBvc2l0aW9uXCIpLHpJbmRleDplLmNzcyhcInotaW5kZXhcIil9KSx0LmVhY2goW1widG9wXCIsXCJsZWZ0XCIsXCJib3R0b21cIixcInJpZ2h0XCJdLGZ1bmN0aW9uKHQscyl7aVtzXT1lLmNzcyhzKSxpc05hTihwYXJzZUludChpW3NdLDEwKSkmJihpW3NdPVwiYXV0b1wiKX0pLGUuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsdG9wOjAsbGVmdDowLHJpZ2h0OlwiYXV0b1wiLGJvdHRvbTpcImF1dG9cIn0pKSxlLmNzcyhuKSxzLmNzcyhpKS5zaG93KCl9LHJlbW92ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIGk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gZS5wYXJlbnQoKS5pcyhcIi51aS1lZmZlY3RzLXdyYXBwZXJcIikmJihlLnBhcmVudCgpLnJlcGxhY2VXaXRoKGUpLChlWzBdPT09aXx8dC5jb250YWlucyhlWzBdLGkpKSYmdChpKS50cmlnZ2VyKFwiZm9jdXNcIikpLGV9fSksdC5leHRlbmQodC5lZmZlY3RzLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmaW5lOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gc3x8KHM9aSxpPVwiZWZmZWN0XCIpLHQuZWZmZWN0cy5lZmZlY3RbZV09cyx0LmVmZmVjdHMuZWZmZWN0W2VdLm1vZGU9aSxzfSxzY2FsZWREaW1lbnNpb25zOmZ1bmN0aW9uKHQsZSxpKXtpZigwPT09ZSlyZXR1cm57aGVpZ2h0OjAsd2lkdGg6MCxvdXRlckhlaWdodDowLG91dGVyV2lkdGg6MH07dmFyIHM9XCJob3Jpem9udGFsXCIhPT1pPyhlfHwxMDApLzEwMDoxLG49XCJ2ZXJ0aWNhbFwiIT09aT8oZXx8MTAwKS8xMDA6MTtyZXR1cm57aGVpZ2h0OnQuaGVpZ2h0KCkqbix3aWR0aDp0LndpZHRoKCkqcyxvdXRlckhlaWdodDp0Lm91dGVySGVpZ2h0KCkqbixvdXRlcldpZHRoOnQub3V0ZXJXaWR0aCgpKnN9fSxjbGlwVG9Cb3g6ZnVuY3Rpb24odCl7cmV0dXJue3dpZHRoOnQuY2xpcC5yaWdodC10LmNsaXAubGVmdCxoZWlnaHQ6dC5jbGlwLmJvdHRvbS10LmNsaXAudG9wLGxlZnQ6dC5jbGlwLmxlZnQsdG9wOnQuY2xpcC50b3B9fSx1bnNoaWZ0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10LnF1ZXVlKCk7ZT4xJiZzLnNwbGljZS5hcHBseShzLFsxLDBdLmNvbmNhdChzLnNwbGljZShlLGkpKSksdC5kZXF1ZXVlKCl9LHNhdmVTdHlsZTpmdW5jdGlvbih0KXt0LmRhdGEoXCJ1aS1lZmZlY3RzLXN0eWxlXCIsdFswXS5zdHlsZS5jc3NUZXh0KX0scmVzdG9yZVN0eWxlOmZ1bmN0aW9uKHQpe3RbMF0uc3R5bGUuY3NzVGV4dD10LmRhdGEoXCJ1aS1lZmZlY3RzLXN0eWxlXCIpfHxcIlwiLHQucmVtb3ZlRGF0YShcInVpLWVmZmVjdHMtc3R5bGVcIil9LG1vZGU6ZnVuY3Rpb24odCxlKXt2YXIgaT10LmlzKFwiOmhpZGRlblwiKTtyZXR1cm5cInRvZ2dsZVwiPT09ZSYmKGU9aT9cInNob3dcIjpcImhpZGVcIiksKGk/XCJoaWRlXCI9PT1lOlwic2hvd1wiPT09ZSkmJihlPVwibm9uZVwiKSxlfSxnZXRCYXNlbGluZTpmdW5jdGlvbih0LGUpe3ZhciBpLHM7c3dpdGNoKHRbMF0pe2Nhc2VcInRvcFwiOmk9MDticmVhaztjYXNlXCJtaWRkbGVcIjppPS41O2JyZWFrO2Nhc2VcImJvdHRvbVwiOmk9MTticmVhaztkZWZhdWx0Omk9dFswXS9lLmhlaWdodH1zd2l0Y2godFsxXSl7Y2FzZVwibGVmdFwiOnM9MDticmVhaztjYXNlXCJjZW50ZXJcIjpzPS41O2JyZWFrO2Nhc2VcInJpZ2h0XCI6cz0xO2JyZWFrO2RlZmF1bHQ6cz10WzFdL2Uud2lkdGh9cmV0dXJue3g6cyx5Oml9fSxjcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbihlKXt2YXIgaSxzPWUuY3NzKFwicG9zaXRpb25cIiksbj1lLnBvc2l0aW9uKCk7cmV0dXJuIGUuY3NzKHttYXJnaW5Ub3A6ZS5jc3MoXCJtYXJnaW5Ub3BcIiksbWFyZ2luQm90dG9tOmUuY3NzKFwibWFyZ2luQm90dG9tXCIpLG1hcmdpbkxlZnQ6ZS5jc3MoXCJtYXJnaW5MZWZ0XCIpLG1hcmdpblJpZ2h0OmUuY3NzKFwibWFyZ2luUmlnaHRcIil9KS5vdXRlcldpZHRoKGUub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodChlLm91dGVySGVpZ2h0KCkpLC9eKHN0YXRpY3xyZWxhdGl2ZSkvLnRlc3QocykmJihzPVwiYWJzb2x1dGVcIixpPXQoXCI8XCIrZVswXS5ub2RlTmFtZStcIj5cIikuaW5zZXJ0QWZ0ZXIoZSkuY3NzKHtkaXNwbGF5Oi9eKGlubGluZXxydWJ5KS8udGVzdChlLmNzcyhcImRpc3BsYXlcIikpP1wiaW5saW5lLWJsb2NrXCI6XCJibG9ja1wiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixtYXJnaW5Ub3A6ZS5jc3MoXCJtYXJnaW5Ub3BcIiksbWFyZ2luQm90dG9tOmUuY3NzKFwibWFyZ2luQm90dG9tXCIpLG1hcmdpbkxlZnQ6ZS5jc3MoXCJtYXJnaW5MZWZ0XCIpLG1hcmdpblJpZ2h0OmUuY3NzKFwibWFyZ2luUmlnaHRcIiksZmxvYXQ6ZS5jc3MoXCJmbG9hdFwiKX0pLm91dGVyV2lkdGgoZS5vdXRlcldpZHRoKCkpLm91dGVySGVpZ2h0KGUub3V0ZXJIZWlnaHQoKSkuYWRkQ2xhc3MoXCJ1aS1lZmZlY3RzLXBsYWNlaG9sZGVyXCIpLGUuZGF0YShcInVpLWVmZmVjdHMtcGxhY2Vob2xkZXJcIixpKSksZS5jc3Moe3Bvc2l0aW9uOnMsbGVmdDpuLmxlZnQsdG9wOm4udG9wfSksaX0scmVtb3ZlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dmFyIGU9XCJ1aS1lZmZlY3RzLXBsYWNlaG9sZGVyXCIsaT10LmRhdGEoZSk7aSYmKGkucmVtb3ZlKCksdC5yZW1vdmVEYXRhKGUpKX0sY2xlYW5VcDpmdW5jdGlvbihlKXt0LmVmZmVjdHMucmVzdG9yZVN0eWxlKGUpLHQuZWZmZWN0cy5yZW1vdmVQbGFjZWhvbGRlcihlKX0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbihlLGkscyxuKXtyZXR1cm4gbj1ufHx7fSx0LmVhY2goaSxmdW5jdGlvbih0LGkpe3ZhciBvPWUuY3NzVW5pdChpKTtvWzBdPjAmJihuW2ldPW9bMF0qcytvWzFdKX0pLG59fSksdC5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbigpe2Z1bmN0aW9uIGkoZSl7ZnVuY3Rpb24gaSgpe3IucmVtb3ZlRGF0YShjKSx0LmVmZmVjdHMuY2xlYW5VcChyKSxcImhpZGVcIj09PXMubW9kZSYmci5oaWRlKCksYSgpfWZ1bmN0aW9uIGEoKXt0LmlzRnVuY3Rpb24oaCkmJmguY2FsbChyWzBdKSx0LmlzRnVuY3Rpb24oZSkmJmUoKX12YXIgcj10KHRoaXMpO3MubW9kZT11LnNoaWZ0KCksITE9PT10LnVpQmFja0NvbXBhdHx8bz9cIm5vbmVcIj09PXMubW9kZT8ocltsXSgpLGEoKSk6bi5jYWxsKHJbMF0scyxpKTooci5pcyhcIjpoaWRkZW5cIik/XCJoaWRlXCI9PT1sOlwic2hvd1wiPT09bCk/KHJbbF0oKSxhKCkpOm4uY2FsbChyWzBdLHMsYSl9dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyksbj10LmVmZmVjdHMuZWZmZWN0W3MuZWZmZWN0XSxvPW4ubW9kZSxhPXMucXVldWUscj1hfHxcImZ4XCIsaD1zLmNvbXBsZXRlLGw9cy5tb2RlLHU9W10sZD1mdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLHM9dC5lZmZlY3RzLm1vZGUoaSxsKXx8bztpLmRhdGEoYywhMCksdS5wdXNoKHMpLG8mJihcInNob3dcIj09PXN8fHM9PT1vJiZcImhpZGVcIj09PXMpJiZpLnNob3coKSxvJiZcIm5vbmVcIj09PXN8fHQuZWZmZWN0cy5zYXZlU3R5bGUoaSksdC5pc0Z1bmN0aW9uKGUpJiZlKCl9O3JldHVybiB0LmZ4Lm9mZnx8IW4/bD90aGlzW2xdKHMuZHVyYXRpb24saCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aCYmaC5jYWxsKHRoaXMpfSk6ITE9PT1hP3RoaXMuZWFjaChkKS5lYWNoKGkpOnRoaXMucXVldWUocixkKS5xdWV1ZShyLGkpfSxzaG93OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKVxuO3JldHVybiBuLm1vZGU9XCJzaG93XCIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0odC5mbi5zaG93KSxoaWRlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPVwiaGlkZVwiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX19KHQuZm4uaGlkZSksdG9nZ2xlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihzKXtpZihpKHMpfHxcImJvb2xlYW5cIj09dHlwZW9mIHMpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuLm1vZGU9XCJ0b2dnbGVcIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fSh0LmZuLnRvZ2dsZSksY3NzVW5pdDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLmNzcyhlKSxzPVtdO3JldHVybiB0LmVhY2goW1wiZW1cIixcInB4XCIsXCIlXCIsXCJwdFwiXSxmdW5jdGlvbih0LGUpe2kuaW5kZXhPZihlKT4wJiYocz1bcGFyc2VGbG9hdChpKSxlXSl9KSxzfSxjc3NDbGlwOmZ1bmN0aW9uKHQpe3JldHVybiB0P3RoaXMuY3NzKFwiY2xpcFwiLFwicmVjdChcIit0LnRvcCtcInB4IFwiK3QucmlnaHQrXCJweCBcIit0LmJvdHRvbStcInB4IFwiK3QubGVmdCtcInB4KVwiKTpzKHRoaXMuY3NzKFwiY2xpcFwiKSx0aGlzKX0sdHJhbnNmZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49dChlLnRvKSxvPVwiZml4ZWRcIj09PW4uY3NzKFwicG9zaXRpb25cIiksYT10KFwiYm9keVwiKSxyPW8/YS5zY3JvbGxUb3AoKTowLGg9bz9hLnNjcm9sbExlZnQoKTowLGw9bi5vZmZzZXQoKSxjPXt0b3A6bC50b3AtcixsZWZ0OmwubGVmdC1oLGhlaWdodDpuLmlubmVySGVpZ2h0KCksd2lkdGg6bi5pbm5lcldpZHRoKCl9LHU9cy5vZmZzZXQoKSxkPXQoXCI8ZGl2IGNsYXNzPSd1aS1lZmZlY3RzLXRyYW5zZmVyJz48L2Rpdj5cIikuYXBwZW5kVG8oXCJib2R5XCIpLmFkZENsYXNzKGUuY2xhc3NOYW1lKS5jc3Moe3RvcDp1LnRvcC1yLGxlZnQ6dS5sZWZ0LWgsaGVpZ2h0OnMuaW5uZXJIZWlnaHQoKSx3aWR0aDpzLmlubmVyV2lkdGgoKSxwb3NpdGlvbjpvP1wiZml4ZWRcIjpcImFic29sdXRlXCJ9KS5hbmltYXRlKGMsZS5kdXJhdGlvbixlLmVhc2luZyxmdW5jdGlvbigpe2QucmVtb3ZlKCksdC5pc0Z1bmN0aW9uKGkpJiZpKCl9KX19KSx0LmZ4LnN0ZXAuY2xpcD1mdW5jdGlvbihlKXtlLmNsaXBJbml0fHwoZS5zdGFydD10KGUuZWxlbSkuY3NzQ2xpcCgpLFwic3RyaW5nXCI9PXR5cGVvZiBlLmVuZCYmKGUuZW5kPXMoZS5lbmQsZS5lbGVtKSksZS5jbGlwSW5pdD0hMCksdChlLmVsZW0pLmNzc0NsaXAoe3RvcDplLnBvcyooZS5lbmQudG9wLWUuc3RhcnQudG9wKStlLnN0YXJ0LnRvcCxyaWdodDplLnBvcyooZS5lbmQucmlnaHQtZS5zdGFydC5yaWdodCkrZS5zdGFydC5yaWdodCxib3R0b206ZS5wb3MqKGUuZW5kLmJvdHRvbS1lLnN0YXJ0LmJvdHRvbSkrZS5zdGFydC5ib3R0b20sbGVmdDplLnBvcyooZS5lbmQubGVmdC1lLnN0YXJ0LmxlZnQpK2Uuc3RhcnQubGVmdH0pfX0oKSxmdW5jdGlvbigpe3ZhciBlPXt9O3QuZWFjaChbXCJRdWFkXCIsXCJDdWJpY1wiLFwiUXVhcnRcIixcIlF1aW50XCIsXCJFeHBvXCJdLGZ1bmN0aW9uKHQsaSl7ZVtpXT1mdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5wb3coZSx0KzIpfX0pLHQuZXh0ZW5kKGUse1NpbmU6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5jb3ModCpNYXRoLlBJLzIpfSxDaXJjOmZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguc3FydCgxLXQqdCl9LEVsYXN0aWM6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10fHwxPT09dD90Oi1NYXRoLnBvdygyLDgqKHQtMSkpKk1hdGguc2luKCg4MCoodC0xKS03LjUpKk1hdGguUEkvMTUpfSxCYWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKDMqdC0yKX0sQm91bmNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxpPTQ7dDwoKGU9TWF0aC5wb3coMiwtLWkpKS0xKS8xMTspO3JldHVybiAxL01hdGgucG93KDQsMy1pKS03LjU2MjUqTWF0aC5wb3coKDMqZS0yKS8yMi10LDIpfX0pLHQuZWFjaChlLGZ1bmN0aW9uKGUsaSl7dC5lYXNpbmdbXCJlYXNlSW5cIitlXT1pLHQuZWFzaW5nW1wiZWFzZU91dFwiK2VdPWZ1bmN0aW9uKHQpe3JldHVybiAxLWkoMS10KX0sdC5lYXNpbmdbXCJlYXNlSW5PdXRcIitlXT1mdW5jdGlvbih0KXtyZXR1cm4gdDwuNT9pKDIqdCkvMjoxLWkoLTIqdCsyKS8yfX0pfSgpO3QuZWZmZWN0cyx0LmVmZmVjdHMuZGVmaW5lKFwiYmxpbmRcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBzPXt1cDpbXCJib3R0b21cIixcInRvcFwiXSx2ZXJ0aWNhbDpbXCJib3R0b21cIixcInRvcFwiXSxkb3duOltcInRvcFwiLFwiYm90dG9tXCJdLGxlZnQ6W1wicmlnaHRcIixcImxlZnRcIl0saG9yaXpvbnRhbDpbXCJyaWdodFwiLFwibGVmdFwiXSxyaWdodDpbXCJsZWZ0XCIsXCJyaWdodFwiXX0sbj10KHRoaXMpLG89ZS5kaXJlY3Rpb258fFwidXBcIixhPW4uY3NzQ2xpcCgpLHI9e2NsaXA6dC5leHRlbmQoe30sYSl9LGg9dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKG4pO3IuY2xpcFtzW29dWzBdXT1yLmNsaXBbc1tvXVsxXV0sXCJzaG93XCI9PT1lLm1vZGUmJihuLmNzc0NsaXAoci5jbGlwKSxoJiZoLmNzcyh0LmVmZmVjdHMuY2xpcFRvQm94KHIpKSxyLmNsaXA9YSksaCYmaC5hbmltYXRlKHQuZWZmZWN0cy5jbGlwVG9Cb3gociksZS5kdXJhdGlvbixlLmVhc2luZyksbi5hbmltYXRlKHIse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJib3VuY2VcIixmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXQodGhpcykscj1lLm1vZGUsaD1cImhpZGVcIj09PXIsbD1cInNob3dcIj09PXIsYz1lLmRpcmVjdGlvbnx8XCJ1cFwiLHU9ZS5kaXN0YW5jZSxkPWUudGltZXN8fDUscD0yKmQrKGx8fGg/MTowKSxmPWUuZHVyYXRpb24vcCxnPWUuZWFzaW5nLG09XCJ1cFwiPT09Y3x8XCJkb3duXCI9PT1jP1widG9wXCI6XCJsZWZ0XCIsXz1cInVwXCI9PT1jfHxcImxlZnRcIj09PWMsdj0wLGI9YS5xdWV1ZSgpLmxlbmd0aDtmb3IodC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKGEpLG89YS5jc3MobSksdXx8KHU9YVtcInRvcFwiPT09bT9cIm91dGVySGVpZ2h0XCI6XCJvdXRlcldpZHRoXCJdKCkvMyksbCYmKG49e29wYWNpdHk6MX0sblttXT1vLGEuY3NzKFwib3BhY2l0eVwiLDApLmNzcyhtLF8/MiotdToyKnUpLmFuaW1hdGUobixmLGcpKSxoJiYodS89TWF0aC5wb3coMixkLTEpKSxuPXt9LG5bbV09bzt2PGQ7disrKXM9e30sc1ttXT0oXz9cIi09XCI6XCIrPVwiKSt1LGEuYW5pbWF0ZShzLGYsZykuYW5pbWF0ZShuLGYsZyksdT1oPzIqdTp1LzI7aCYmKHM9e29wYWNpdHk6MH0sc1ttXT0oXz9cIi09XCI6XCIrPVwiKSt1LGEuYW5pbWF0ZShzLGYsZykpLGEucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQoYSxiLHArMSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiY2xpcFwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIHMsbj17fSxvPXQodGhpcyksYT1lLmRpcmVjdGlvbnx8XCJ2ZXJ0aWNhbFwiLHI9XCJib3RoXCI9PT1hLGg9cnx8XCJob3Jpem9udGFsXCI9PT1hLGw9cnx8XCJ2ZXJ0aWNhbFwiPT09YTtzPW8uY3NzQ2xpcCgpLG4uY2xpcD17dG9wOmw/KHMuYm90dG9tLXMudG9wKS8yOnMudG9wLHJpZ2h0Omg/KHMucmlnaHQtcy5sZWZ0KS8yOnMucmlnaHQsYm90dG9tOmw/KHMuYm90dG9tLXMudG9wKS8yOnMuYm90dG9tLGxlZnQ6aD8ocy5yaWdodC1zLmxlZnQpLzI6cy5sZWZ0fSx0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIobyksXCJzaG93XCI9PT1lLm1vZGUmJihvLmNzc0NsaXAobi5jbGlwKSxuLmNsaXA9cyksby5hbmltYXRlKG4se3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJkcm9wXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcyxuPXQodGhpcyksbz1lLm1vZGUsYT1cInNob3dcIj09PW8scj1lLmRpcmVjdGlvbnx8XCJsZWZ0XCIsaD1cInVwXCI9PT1yfHxcImRvd25cIj09PXI/XCJ0b3BcIjpcImxlZnRcIixsPVwidXBcIj09PXJ8fFwibGVmdFwiPT09cj9cIi09XCI6XCIrPVwiLGM9XCIrPVwiPT09bD9cIi09XCI6XCIrPVwiLHU9e29wYWNpdHk6MH07dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKG4pLHM9ZS5kaXN0YW5jZXx8bltcInRvcFwiPT09aD9cIm91dGVySGVpZ2h0XCI6XCJvdXRlcldpZHRoXCJdKCEwKS8yLHVbaF09bCtzLGEmJihuLmNzcyh1KSx1W2hdPWMrcyx1Lm9wYWNpdHk9MSksbi5hbmltYXRlKHUse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJleHBsb2RlXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXtmdW5jdGlvbiBzKCl7Yi5wdXNoKHRoaXMpLGIubGVuZ3RoPT09dSpkJiZuKCl9ZnVuY3Rpb24gbigpe3AuY3NzKHt2aXNpYmlsaXR5OlwidmlzaWJsZVwifSksdChiKS5yZW1vdmUoKSxpKCl9dmFyIG8sYSxyLGgsbCxjLHU9ZS5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQoZS5waWVjZXMpKTozLGQ9dSxwPXQodGhpcyksZj1lLm1vZGUsZz1cInNob3dcIj09PWYsbT1wLnNob3coKS5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIikub2Zmc2V0KCksXz1NYXRoLmNlaWwocC5vdXRlcldpZHRoKCkvZCksdj1NYXRoLmNlaWwocC5vdXRlckhlaWdodCgpL3UpLGI9W107Zm9yKG89MDtvPHU7bysrKWZvcihoPW0udG9wK28qdixjPW8tKHUtMSkvMixhPTA7YTxkO2ErKylyPW0ubGVmdCthKl8sbD1hLShkLTEpLzIscC5jbG9uZSgpLmFwcGVuZFRvKFwiYm9keVwiKS53cmFwKFwiPGRpdj48L2Rpdj5cIikuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdmlzaWJpbGl0eTpcInZpc2libGVcIixsZWZ0Oi1hKl8sdG9wOi1vKnZ9KS5wYXJlbnQoKS5hZGRDbGFzcyhcInVpLWVmZmVjdHMtZXhwbG9kZVwiKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixvdmVyZmxvdzpcImhpZGRlblwiLHdpZHRoOl8saGVpZ2h0OnYsbGVmdDpyKyhnP2wqXzowKSx0b3A6aCsoZz9jKnY6MCksb3BhY2l0eTpnPzA6MX0pLmFuaW1hdGUoe2xlZnQ6cisoZz8wOmwqXyksdG9wOmgrKGc/MDpjKnYpLG9wYWNpdHk6Zz8xOjB9LGUuZHVyYXRpb258fDUwMCxlLmVhc2luZyxzKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJmYWRlXCIsXCJ0b2dnbGVcIixmdW5jdGlvbihlLGkpe3ZhciBzPVwic2hvd1wiPT09ZS5tb2RlO3QodGhpcykuY3NzKFwib3BhY2l0eVwiLHM/MDoxKS5hbmltYXRlKHtvcGFjaXR5OnM/MTowfSx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcImZvbGRcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcyksbj1lLm1vZGUsbz1cInNob3dcIj09PW4sYT1cImhpZGVcIj09PW4scj1lLnNpemV8fDE1LGg9LyhbMC05XSspJS8uZXhlYyhyKSxsPSEhZS5ob3JpekZpcnN0LGM9bD9bXCJyaWdodFwiLFwiYm90dG9tXCJdOltcImJvdHRvbVwiLFwicmlnaHRcIl0sdT1lLmR1cmF0aW9uLzIsZD10LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIocykscD1zLmNzc0NsaXAoKSxmPXtjbGlwOnQuZXh0ZW5kKHt9LHApfSxnPXtjbGlwOnQuZXh0ZW5kKHt9LHApfSxtPVtwW2NbMF1dLHBbY1sxXV1dLF89cy5xdWV1ZSgpLmxlbmd0aDtoJiYocj1wYXJzZUludChoWzFdLDEwKS8xMDAqbVthPzA6MV0pLGYuY2xpcFtjWzBdXT1yLGcuY2xpcFtjWzBdXT1yLGcuY2xpcFtjWzFdXT0wLG8mJihzLmNzc0NsaXAoZy5jbGlwKSxkJiZkLmNzcyh0LmVmZmVjdHMuY2xpcFRvQm94KGcpKSxnLmNsaXA9cCkscy5xdWV1ZShmdW5jdGlvbihpKXtkJiZkLmFuaW1hdGUodC5lZmZlY3RzLmNsaXBUb0JveChmKSx1LGUuZWFzaW5nKS5hbmltYXRlKHQuZWZmZWN0cy5jbGlwVG9Cb3goZyksdSxlLmVhc2luZyksaSgpfSkuYW5pbWF0ZShmLHUsZS5lYXNpbmcpLmFuaW1hdGUoZyx1LGUuZWFzaW5nKS5xdWV1ZShpKSx0LmVmZmVjdHMudW5zaGlmdChzLF8sNCl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiaGlnaGxpZ2h0XCIsXCJzaG93XCIsZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49e2JhY2tncm91bmRDb2xvcjpzLmNzcyhcImJhY2tncm91bmRDb2xvclwiKX07XCJoaWRlXCI9PT1lLm1vZGUmJihuLm9wYWNpdHk9MCksdC5lZmZlY3RzLnNhdmVTdHlsZShzKSxzLmNzcyh7YmFja2dyb3VuZEltYWdlOlwibm9uZVwiLGJhY2tncm91bmRDb2xvcjplLmNvbG9yfHxcIiNmZmZmOTlcIn0pLmFuaW1hdGUobix7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcInNpemVcIixmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXQodGhpcykscj1bXCJmb250U2l6ZVwiXSxoPVtcImJvcmRlclRvcFdpZHRoXCIsXCJib3JkZXJCb3R0b21XaWR0aFwiLFwicGFkZGluZ1RvcFwiLFwicGFkZGluZ0JvdHRvbVwiXSxsPVtcImJvcmRlckxlZnRXaWR0aFwiLFwiYm9yZGVyUmlnaHRXaWR0aFwiLFwicGFkZGluZ0xlZnRcIixcInBhZGRpbmdSaWdodFwiXSxjPWUubW9kZSx1PVwiZWZmZWN0XCIhPT1jLGQ9ZS5zY2FsZXx8XCJib3RoXCIscD1lLm9yaWdpbnx8W1wibWlkZGxlXCIsXCJjZW50ZXJcIl0sZj1hLmNzcyhcInBvc2l0aW9uXCIpLGc9YS5wb3NpdGlvbigpLG09dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoYSksXz1lLmZyb218fG0sdj1lLnRvfHx0LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhhLDApO3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihhKSxcInNob3dcIj09PWMmJihvPV8sXz12LHY9byksbj17ZnJvbTp7eTpfLmhlaWdodC9tLmhlaWdodCx4Ol8ud2lkdGgvbS53aWR0aH0sdG86e3k6di5oZWlnaHQvbS5oZWlnaHQseDp2LndpZHRoL20ud2lkdGh9fSxcImJveFwiIT09ZCYmXCJib3RoXCIhPT1kfHwobi5mcm9tLnkhPT1uLnRvLnkmJihfPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsaCxuLmZyb20ueSxfKSx2PXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsaCxuLnRvLnksdikpLG4uZnJvbS54IT09bi50by54JiYoXz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGwsbi5mcm9tLngsXyksdj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGwsbi50by54LHYpKSksXCJjb250ZW50XCIhPT1kJiZcImJvdGhcIiE9PWR8fG4uZnJvbS55IT09bi50by55JiYoXz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLHIsbi5mcm9tLnksXyksdj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLHIsbi50by55LHYpKSxwJiYocz10LmVmZmVjdHMuZ2V0QmFzZWxpbmUocCxtKSxfLnRvcD0obS5vdXRlckhlaWdodC1fLm91dGVySGVpZ2h0KSpzLnkrZy50b3AsXy5sZWZ0PShtLm91dGVyV2lkdGgtXy5vdXRlcldpZHRoKSpzLngrZy5sZWZ0LHYudG9wPShtLm91dGVySGVpZ2h0LXYub3V0ZXJIZWlnaHQpKnMueStnLnRvcCx2LmxlZnQ9KG0ub3V0ZXJXaWR0aC12Lm91dGVyV2lkdGgpKnMueCtnLmxlZnQpLGEuY3NzKF8pLFwiY29udGVudFwiIT09ZCYmXCJib3RoXCIhPT1kfHwoaD1oLmNvbmNhdChbXCJtYXJnaW5Ub3BcIixcIm1hcmdpbkJvdHRvbVwiXSkuY29uY2F0KHIpLGw9bC5jb25jYXQoW1wibWFyZ2luTGVmdFwiLFwibWFyZ2luUmlnaHRcIl0pLGEuZmluZChcIipbd2lkdGhdXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoaSksbz17aGVpZ2h0OnMuaGVpZ2h0Km4uZnJvbS55LHdpZHRoOnMud2lkdGgqbi5mcm9tLngsb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCpuLmZyb20ueSxvdXRlcldpZHRoOnMub3V0ZXJXaWR0aCpuLmZyb20ueH0sYT17aGVpZ2h0OnMuaGVpZ2h0Km4udG8ueSx3aWR0aDpzLndpZHRoKm4udG8ueCxvdXRlckhlaWdodDpzLmhlaWdodCpuLnRvLnksb3V0ZXJXaWR0aDpzLndpZHRoKm4udG8ueH07bi5mcm9tLnkhPT1uLnRvLnkmJihvPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksaCxuLmZyb20ueSxvKSxhPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksaCxuLnRvLnksYSkpLG4uZnJvbS54IT09bi50by54JiYobz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGwsbi5mcm9tLngsbyksYT10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGwsbi50by54LGEpKSx1JiZ0LmVmZmVjdHMuc2F2ZVN0eWxlKGkpLGkuY3NzKG8pLGkuYW5pbWF0ZShhLGUuZHVyYXRpb24sZS5lYXNpbmcsZnVuY3Rpb24oKXt1JiZ0LmVmZmVjdHMucmVzdG9yZVN0eWxlKGkpfSl9KSksYS5hbmltYXRlKHYse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU9YS5vZmZzZXQoKTswPT09di5vcGFjaXR5JiZhLmNzcyhcIm9wYWNpdHlcIixfLm9wYWNpdHkpLHV8fChhLmNzcyhcInBvc2l0aW9uXCIsXCJzdGF0aWNcIj09PWY/XCJyZWxhdGl2ZVwiOmYpLm9mZnNldChlKSx0LmVmZmVjdHMuc2F2ZVN0eWxlKGEpKSxpKCl9fSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2NhbGVcIixmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcyksbj1lLm1vZGUsbz1wYXJzZUludChlLnBlcmNlbnQsMTApfHwoMD09PXBhcnNlSW50KGUucGVyY2VudCwxMCk/MDpcImVmZmVjdFwiIT09bj8wOjEwMCksYT10LmV4dGVuZCghMCx7ZnJvbTp0LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhzKSx0bzp0LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhzLG8sZS5kaXJlY3Rpb258fFwiYm90aFwiKSxvcmlnaW46ZS5vcmlnaW58fFtcIm1pZGRsZVwiLFwiY2VudGVyXCJdfSxlKTtlLmZhZGUmJihhLmZyb20ub3BhY2l0eT0xLGEudG8ub3BhY2l0eT0wKSx0LmVmZmVjdHMuZWZmZWN0LnNpemUuY2FsbCh0aGlzLGEsaSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwicHVmZlwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIHM9dC5leHRlbmQoITAse30sZSx7ZmFkZTohMCxwZXJjZW50OnBhcnNlSW50KGUucGVyY2VudCwxMCl8fDE1MH0pO3QuZWZmZWN0cy5lZmZlY3Quc2NhbGUuY2FsbCh0aGlzLHMsaSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwicHVsc2F0ZVwiLFwic2hvd1wiLGZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKSxuPWUubW9kZSxvPVwic2hvd1wiPT09bixhPVwiaGlkZVwiPT09bixyPW98fGEsaD0yKihlLnRpbWVzfHw1KSsocj8xOjApLGw9ZS5kdXJhdGlvbi9oLGM9MCx1PTEsZD1zLnF1ZXVlKCkubGVuZ3RoO2ZvcighbyYmcy5pcyhcIjp2aXNpYmxlXCIpfHwocy5jc3MoXCJvcGFjaXR5XCIsMCkuc2hvdygpLGM9MSk7dTxoO3UrKylzLmFuaW1hdGUoe29wYWNpdHk6Y30sbCxlLmVhc2luZyksYz0xLWM7cy5hbmltYXRlKHtvcGFjaXR5OmN9LGwsZS5lYXNpbmcpLHMucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQocyxkLGgrMSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2hha2VcIixmdW5jdGlvbihlLGkpe3ZhciBzPTEsbj10KHRoaXMpLG89ZS5kaXJlY3Rpb258fFwibGVmdFwiLGE9ZS5kaXN0YW5jZXx8MjAscj1lLnRpbWVzfHwzLGg9MipyKzEsbD1NYXRoLnJvdW5kKGUuZHVyYXRpb24vaCksYz1cInVwXCI9PT1vfHxcImRvd25cIj09PW8/XCJ0b3BcIjpcImxlZnRcIix1PVwidXBcIj09PW98fFwibGVmdFwiPT09byxkPXt9LHA9e30sZj17fSxnPW4ucXVldWUoKS5sZW5ndGg7Zm9yKHQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKSxkW2NdPSh1P1wiLT1cIjpcIis9XCIpK2EscFtjXT0odT9cIis9XCI6XCItPVwiKSsyKmEsZltjXT0odT9cIi09XCI6XCIrPVwiKSsyKmEsbi5hbmltYXRlKGQsbCxlLmVhc2luZyk7czxyO3MrKyluLmFuaW1hdGUocCxsLGUuZWFzaW5nKS5hbmltYXRlKGYsbCxlLmVhc2luZyk7bi5hbmltYXRlKHAsbCxlLmVhc2luZykuYW5pbWF0ZShkLGwvMixlLmVhc2luZykucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQobixnLGgrMSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2xpZGVcIixcInNob3dcIixmdW5jdGlvbihlLGkpe3ZhciBzLG4sbz10KHRoaXMpLGE9e3VwOltcImJvdHRvbVwiLFwidG9wXCJdLGRvd246W1widG9wXCIsXCJib3R0b21cIl0sbGVmdDpbXCJyaWdodFwiLFwibGVmdFwiXSxyaWdodDpbXCJsZWZ0XCIsXCJyaWdodFwiXX0scj1lLm1vZGUsaD1lLmRpcmVjdGlvbnx8XCJsZWZ0XCIsbD1cInVwXCI9PT1ofHxcImRvd25cIj09PWg/XCJ0b3BcIjpcImxlZnRcIixjPVwidXBcIj09PWh8fFwibGVmdFwiPT09aCx1PWUuZGlzdGFuY2V8fG9bXCJ0b3BcIj09PWw/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSghMCksZD17fTt0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIobykscz1vLmNzc0NsaXAoKSxuPW8ucG9zaXRpb24oKVtsXSxkW2xdPShjPy0xOjEpKnUrbixkLmNsaXA9by5jc3NDbGlwKCksZC5jbGlwW2FbaF1bMV1dPWQuY2xpcFthW2hdWzBdXSxcInNob3dcIj09PXImJihvLmNzc0NsaXAoZC5jbGlwKSxvLmNzcyhsLGRbbF0pLGQuY2xpcD1zLGRbbF09biksby5hbmltYXRlKGQse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pOyExIT09dC51aUJhY2tDb21wYXQmJnQuZWZmZWN0cy5kZWZpbmUoXCJ0cmFuc2ZlclwiLGZ1bmN0aW9uKGUsaSl7dCh0aGlzKS50cmFuc2ZlcihlLGkpfSk7dC51aS5mb2N1c2FibGU9ZnVuY3Rpb24oaSxzKXt2YXIgbixvLGEscixoLGw9aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiYXJlYVwiPT09bD8obj1pLnBhcmVudE5vZGUsbz1uLm5hbWUsISghaS5ocmVmfHwhb3x8XCJtYXBcIiE9PW4ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkmJihhPXQoXCJpbWdbdXNlbWFwPScjXCIrbytcIiddXCIpLGEubGVuZ3RoPjAmJmEuaXMoXCI6dmlzaWJsZVwiKSkpOigvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KGwpPyhyPSFpLmRpc2FibGVkKSYmKGg9dChpKS5jbG9zZXN0KFwiZmllbGRzZXRcIilbMF0pJiYocj0haC5kaXNhYmxlZCk6cj1cImFcIj09PWw/aS5ocmVmfHxzOnMsciYmdChpKS5pcyhcIjp2aXNpYmxlXCIpJiZlKHQoaSkpKX0sdC5leHRlbmQodC5leHByW1wiOlwiXSx7Zm9jdXNhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnVpLmZvY3VzYWJsZShlLG51bGwhPXQuYXR0cihlLFwidGFiaW5kZXhcIikpfX0pO3QudWkuZm9jdXNhYmxlLHQuZm4uZm9ybT1mdW5jdGlvbigpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzWzBdLmZvcm0/dGhpcy5jbG9zZXN0KFwiZm9ybVwiKTp0KHRoaXNbMF0uZm9ybSl9LHQudWkuZm9ybVJlc2V0TWl4aW49e19mb3JtUmVzZXRIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGk9ZS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIik7dC5lYWNoKGksZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2goKX0pfSl9LF9iaW5kRm9ybVJlc2V0SGFuZGxlcjpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybT10aGlzLmVsZW1lbnQuZm9ybSgpLHRoaXMuZm9ybS5sZW5ndGgpe3ZhciB0PXRoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIil8fFtdO3QubGVuZ3RofHx0aGlzLmZvcm0ub24oXCJyZXNldC51aS1mb3JtLXJlc2V0XCIsdGhpcy5fZm9ybVJlc2V0SGFuZGxlciksdC5wdXNoKHRoaXMpLHRoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIix0KX19LF91bmJpbmRGb3JtUmVzZXRIYW5kbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5mb3JtLmxlbmd0aCl7dmFyIGU9dGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKTtlLnNwbGljZSh0LmluQXJyYXkodGhpcyxlKSwxKSxlLmxlbmd0aD90aGlzLmZvcm0uZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIsZSk6dGhpcy5mb3JtLnJlbW92ZURhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKS5vZmYoXCJyZXNldC51aS1mb3JtLXJlc2V0XCIpfX19O1wiMS43XCI9PT10LmZuLmpxdWVyeS5zdWJzdHJpbmcoMCwzKSYmKHQuZWFjaChbXCJXaWR0aFwiLFwiSGVpZ2h0XCJdLGZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcyhlLGkscyxvKXtyZXR1cm4gdC5lYWNoKG4sZnVuY3Rpb24oKXtpLT1wYXJzZUZsb2F0KHQuY3NzKGUsXCJwYWRkaW5nXCIrdGhpcykpfHwwLHMmJihpLT1wYXJzZUZsb2F0KHQuY3NzKGUsXCJib3JkZXJcIit0aGlzK1wiV2lkdGhcIikpfHwwKSxvJiYoaS09cGFyc2VGbG9hdCh0LmNzcyhlLFwibWFyZ2luXCIrdGhpcykpfHwwKX0pLGl9dmFyIG49XCJXaWR0aFwiPT09aT9bXCJMZWZ0XCIsXCJSaWdodFwiXTpbXCJUb3BcIixcIkJvdHRvbVwiXSxvPWkudG9Mb3dlckNhc2UoKSxhPXtpbm5lcldpZHRoOnQuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDp0LmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6dC5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OnQuZm4ub3V0ZXJIZWlnaHR9O3QuZm5bXCJpbm5lclwiK2ldPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2FbXCJpbm5lclwiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzKS5jc3MobyxzKHRoaXMsZSkrXCJweFwiKX0pfSx0LmZuW1wib3V0ZXJcIitpXT1mdW5jdGlvbihlLG4pe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlP2FbXCJvdXRlclwiK2ldLmNhbGwodGhpcyxlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmNzcyhvLHModGhpcyxlLCEwLG4pK1wicHhcIil9KX19KSx0LmZuLmFkZEJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PXQ/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIodCkpfSk7dC51aS5rZXlDb2RlPXtCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH0sdC51aS5lc2NhcGVTZWxlY3Rvcj1mdW5jdGlvbigpe3ZhciB0PS8oWyFcIiMkJSYnKCkqKywuXFwvOjs8PT4/QFtcXF1eYHt8fX5dKS9nO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHQsXCJcXFxcJDFcIil9fSgpLHQuZm4ubGFiZWxzPWZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbztyZXR1cm4gdGhpc1swXS5sYWJlbHMmJnRoaXNbMF0ubGFiZWxzLmxlbmd0aD90aGlzLnB1c2hTdGFjayh0aGlzWzBdLmxhYmVscyk6KG49dGhpcy5lcSgwKS5wYXJlbnRzKFwibGFiZWxcIikscz10aGlzLmF0dHIoXCJpZFwiKSxzJiYoZT10aGlzLmVxKDApLnBhcmVudHMoKS5sYXN0KCksbz1lLmFkZChlLmxlbmd0aD9lLnNpYmxpbmdzKCk6dGhpcy5zaWJsaW5ncygpKSxpPVwibGFiZWxbZm9yPSdcIit0LnVpLmVzY2FwZVNlbGVjdG9yKHMpK1wiJ11cIixuPW4uYWRkKG8uZmluZChpKS5hZGRCYWNrKGkpKSksdGhpcy5wdXNoU3RhY2sobikpfSx0LmZuLnNjcm9sbFBhcmVudD1mdW5jdGlvbihlKXt2YXIgaT10aGlzLmNzcyhcInBvc2l0aW9uXCIpLHM9XCJhYnNvbHV0ZVwiPT09aSxuPWU/LyhhdXRvfHNjcm9sbHxoaWRkZW4pLzovKGF1dG98c2Nyb2xsKS8sbz10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3JldHVybighc3x8XCJzdGF0aWNcIiE9PWUuY3NzKFwicG9zaXRpb25cIikpJiZuLnRlc3QoZS5jc3MoXCJvdmVyZmxvd1wiKStlLmNzcyhcIm92ZXJmbG93LXlcIikrZS5jc3MoXCJvdmVyZmxvdy14XCIpKX0pLmVxKDApO3JldHVyblwiZml4ZWRcIiE9PWkmJm8ubGVuZ3RoP286dCh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KX0sdC5leHRlbmQodC5leHByW1wiOlwiXSx7dGFiYmFibGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC5hdHRyKGUsXCJ0YWJpbmRleFwiKSxzPW51bGwhPWk7cmV0dXJuKCFzfHxpPj0wKSYmdC51aS5mb2N1c2FibGUoZSxzKX19KSx0LmZuLmV4dGVuZCh7dW5pcXVlSWQ6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkfHwodGhpcy5pZD1cInVpLWlkLVwiKyArK3QpfSl9fSgpLHJlbW92ZVVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpey9edWktaWQtXFxkKyQvLnRlc3QodGhpcy5pZCkmJnQodGhpcykucmVtb3ZlQXR0cihcImlkXCIpfSl9fSksdC53aWRnZXQoXCJ1aS5hY2NvcmRpb25cIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2FjdGl2ZTowLGFuaW1hdGU6e30sY2xhc3Nlczp7XCJ1aS1hY2NvcmRpb24taGVhZGVyXCI6XCJ1aS1jb3JuZXItdG9wXCIsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiOlwidWktY29ybmVyLWFsbFwiLFwidWktYWNjb3JkaW9uLWNvbnRlbnRcIjpcInVpLWNvcm5lci1ib3R0b21cIn0sY29sbGFwc2libGU6ITEsZXZlbnQ6XCJjbGlja1wiLGhlYWRlcjpcIj4gbGkgPiA6Zmlyc3QtY2hpbGQsID4gOm5vdChsaSk6ZXZlblwiLGhlaWdodFN0eWxlOlwiYXV0b1wiLGljb25zOnthY3RpdmVIZWFkZXI6XCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wiLGhlYWRlcjpcInVpLWljb24tdHJpYW5nbGUtMS1lXCJ9LGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbH0saGlkZVByb3BzOntib3JkZXJUb3BXaWR0aDpcImhpZGVcIixib3JkZXJCb3R0b21XaWR0aDpcImhpZGVcIixwYWRkaW5nVG9wOlwiaGlkZVwiLHBhZGRpbmdCb3R0b206XCJoaWRlXCIsaGVpZ2h0OlwiaGlkZVwifSxzaG93UHJvcHM6e2JvcmRlclRvcFdpZHRoOlwic2hvd1wiLGJvcmRlckJvdHRvbVdpZHRoOlwic2hvd1wiLHBhZGRpbmdUb3A6XCJzaG93XCIscGFkZGluZ0JvdHRvbTpcInNob3dcIixoZWlnaHQ6XCJzaG93XCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPXQoKSx0aGlzLl9hZGRDbGFzcyhcInVpLWFjY29yZGlvblwiLFwidWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInRhYmxpc3RcIiksZS5jb2xsYXBzaWJsZXx8ITEhPT1lLmFjdGl2ZSYmbnVsbCE9ZS5hY3RpdmV8fChlLmFjdGl2ZT0wKSx0aGlzLl9wcm9jZXNzUGFuZWxzKCksZS5hY3RpdmU8MCYmKGUuYWN0aXZlKz10aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLl9yZWZyZXNoKCl9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aGVhZGVyOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5uZXh0KCk6dCgpfX0sX2NyZWF0ZUljb25zOmZ1bmN0aW9uKCl7dmFyIGUsaSxzPXRoaXMub3B0aW9ucy5pY29ucztzJiYoZT10KFwiPHNwYW4+XCIpLHRoaXMuX2FkZENsYXNzKGUsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWljb25cIixcInVpLWljb24gXCIrcy5oZWFkZXIpLGUucHJlcGVuZFRvKHRoaXMuaGVhZGVycyksaT10aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxzLmhlYWRlcikuX2FkZENsYXNzKGksbnVsbCxzLmFjdGl2ZUhlYWRlcikuX2FkZENsYXNzKHRoaXMuaGVhZGVycyxcInVpLWFjY29yZGlvbi1pY29uc1wiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhlYWRlcnMsXCJ1aS1hY2NvcmRpb24taWNvbnNcIiksdGhpcy5oZWFkZXJzLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5oZWFkZXJzLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtZXhwYW5kZWQgYXJpYS1zZWxlY3RlZCBhcmlhLWNvbnRyb2xzIHRhYkluZGV4XCIpLnJlbW92ZVVuaXF1ZUlkKCksdGhpcy5fZGVzdHJveUljb25zKCksdD10aGlzLmhlYWRlcnMubmV4dCgpLmNzcyhcImRpc3BsYXlcIixcIlwiKS5yZW1vdmVBdHRyKFwicm9sZSBhcmlhLWhpZGRlbiBhcmlhLWxhYmVsbGVkYnlcIikucmVtb3ZlVW5pcXVlSWQoKSxcImNvbnRlbnRcIiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdC5jc3MoXCJoZWlnaHRcIixcIlwiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe2lmKFwiYWN0aXZlXCI9PT10KXJldHVybiB2b2lkIHRoaXMuX2FjdGl2YXRlKGUpO1wiZXZlbnRcIj09PXQmJih0aGlzLm9wdGlvbnMuZXZlbnQmJnRoaXMuX29mZih0aGlzLmhlYWRlcnMsdGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEV2ZW50cyhlKSksdGhpcy5fc3VwZXIodCxlKSxcImNvbGxhcHNpYmxlXCIhPT10fHxlfHwhMSE9PXRoaXMub3B0aW9ucy5hY3RpdmV8fHRoaXMuX2FjdGl2YXRlKDApLFwiaWNvbnNcIj09PXQmJih0aGlzLl9kZXN0cm95SWNvbnMoKSxlJiZ0aGlzLl9jcmVhdGVJY29ucygpKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLHQpLHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpfSxfa2V5ZG93bjpmdW5jdGlvbihlKXtpZighZS5hbHRLZXkmJiFlLmN0cmxLZXkpe3ZhciBpPXQudWkua2V5Q29kZSxzPXRoaXMuaGVhZGVycy5sZW5ndGgsbj10aGlzLmhlYWRlcnMuaW5kZXgoZS50YXJnZXQpLG89ITE7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSBpLlJJR0hUOmNhc2UgaS5ET1dOOm89dGhpcy5oZWFkZXJzWyhuKzEpJXNdO2JyZWFrO2Nhc2UgaS5MRUZUOmNhc2UgaS5VUDpvPXRoaXMuaGVhZGVyc1sobi0xK3MpJXNdO2JyZWFrO2Nhc2UgaS5TUEFDRTpjYXNlIGkuRU5URVI6dGhpcy5fZXZlbnRIYW5kbGVyKGUpO2JyZWFrO2Nhc2UgaS5IT01FOm89dGhpcy5oZWFkZXJzWzBdO2JyZWFrO2Nhc2UgaS5FTkQ6bz10aGlzLmhlYWRlcnNbcy0xXX1vJiYodChlLnRhcmdldCkuYXR0cihcInRhYkluZGV4XCIsLTEpLHQobykuYXR0cihcInRhYkluZGV4XCIsMCksdChvKS50cmlnZ2VyKFwiZm9jdXNcIiksZS5wcmV2ZW50RGVmYXVsdCgpKX19LF9wYW5lbEtleURvd246ZnVuY3Rpb24oZSl7ZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlVQJiZlLmN0cmxLZXkmJnQoZS5jdXJyZW50VGFyZ2V0KS5wcmV2KCkudHJpZ2dlcihcImZvY3VzXCIpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKSwhMT09PWUuYWN0aXZlJiYhMD09PWUuY29sbGFwc2libGV8fCF0aGlzLmhlYWRlcnMubGVuZ3RoPyhlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpOiExPT09ZS5hY3RpdmU/dGhpcy5fYWN0aXZhdGUoMCk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMuaGVhZGVycy5sZW5ndGg9PT10aGlzLmhlYWRlcnMuZmluZChcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKS5sZW5ndGg/KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSk6dGhpcy5fYWN0aXZhdGUoTWF0aC5tYXgoMCxlLmFjdGl2ZS0xKSk6ZS5hY3RpdmU9dGhpcy5oZWFkZXJzLmluZGV4KHRoaXMuYWN0aXZlKSx0aGlzLl9kZXN0cm95SWNvbnMoKSx0aGlzLl9yZWZyZXNoKCl9LF9wcm9jZXNzUGFuZWxzOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5oZWFkZXJzLGU9dGhpcy5wYW5lbHM7dGhpcy5oZWFkZXJzPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oZWFkZXIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaGVhZGVycyxcInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIixcInVpLXN0YXRlLWRlZmF1bHRcIiksdGhpcy5wYW5lbHM9dGhpcy5oZWFkZXJzLm5leHQoKS5maWx0ZXIoXCI6bm90KC51aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUpXCIpLmhpZGUoKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnBhbmVscyxcInVpLWFjY29yZGlvbi1jb250ZW50XCIsXCJ1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksZSYmKHRoaXMuX29mZih0Lm5vdCh0aGlzLmhlYWRlcnMpKSx0aGlzLl9vZmYoZS5ub3QodGhpcy5wYW5lbHMpKSl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMscz1pLmhlaWdodFN0eWxlLG49dGhpcy5lbGVtZW50LnBhcmVudCgpO3RoaXMuYWN0aXZlPXRoaXMuX2ZpbmRBY3RpdmUoaS5hY3RpdmUpLHRoaXMuX2FkZENsYXNzKHRoaXMuYWN0aXZlLFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKS5fcmVtb3ZlQ2xhc3ModGhpcy5hY3RpdmUsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFjdGl2ZS5uZXh0KCksXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIiksdGhpcy5hY3RpdmUubmV4dCgpLnNob3coKSx0aGlzLmhlYWRlcnMuYXR0cihcInJvbGVcIixcInRhYlwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUudW5pcXVlSWQoKS5hdHRyKFwiaWRcIikscz1lLm5leHQoKSxuPXMudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7ZS5hdHRyKFwiYXJpYS1jb250cm9sc1wiLG4pLHMuYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLGkpfSkubmV4dCgpLmF0dHIoXCJyb2xlXCIsXCJ0YWJwYW5lbFwiKSx0aGlzLmhlYWRlcnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLmhpZGUoKSx0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwifSk6dGhpcy5oZWFkZXJzLmVxKDApLmF0dHIoXCJ0YWJJbmRleFwiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoaS5ldmVudCksXCJmaWxsXCI9PT1zPyhlPW4uaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKFwiOnZpc2libGVcIikuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykscz1pLmNzcyhcInBvc2l0aW9uXCIpO1wiYWJzb2x1dGVcIiE9PXMmJlwiZml4ZWRcIiE9PXMmJihlLT1pLm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmhlYWRlcnMuZWFjaChmdW5jdGlvbigpe2UtPXQodGhpcykub3V0ZXJIZWlnaHQoITApfSksdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxlLXQodGhpcykuaW5uZXJIZWlnaHQoKSt0KHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoXCJvdmVyZmxvd1wiLFwiYXV0b1wiKSk6XCJhdXRvXCI9PT1zJiYoZT0wLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuaXMoXCI6dmlzaWJsZVwiKTtpfHx0KHRoaXMpLnNob3coKSxlPU1hdGgubWF4KGUsdCh0aGlzKS5jc3MoXCJoZWlnaHRcIixcIlwiKS5oZWlnaHQoKSksaXx8dCh0aGlzKS5oaWRlKCl9KS5oZWlnaHQoZSkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZmluZEFjdGl2ZShlKVswXTtpIT09dGhpcy5hY3RpdmVbMF0mJihpPWl8fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OnQubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIGU/dGhpcy5oZWFkZXJzLmVxKGUpOnQoKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKGUpe3ZhciBpPXtrZXlkb3duOlwiX2tleWRvd25cIn07ZSYmdC5lYWNoKGUuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKHQsZSl7aVtlXT1cIl9ldmVudEhhbmRsZXJcIn0pLHRoaXMuX29mZih0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpKSx0aGlzLl9vbih0aGlzLmhlYWRlcnMsaSksdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSx7a2V5ZG93bjpcIl9wYW5lbEtleURvd25cIn0pLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhlYWRlcnMpfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10aGlzLm9wdGlvbnMsbz10aGlzLmFjdGl2ZSxhPXQoZS5jdXJyZW50VGFyZ2V0KSxyPWFbMF09PT1vWzBdLGg9ciYmbi5jb2xsYXBzaWJsZSxsPWg/dCgpOmEubmV4dCgpLGM9by5uZXh0KCksdT17b2xkSGVhZGVyOm8sb2xkUGFuZWw6YyxuZXdIZWFkZXI6aD90KCk6YSxuZXdQYW5lbDpsfTtlLnByZXZlbnREZWZhdWx0KCksciYmIW4uY29sbGFwc2libGV8fCExPT09dGhpcy5fdHJpZ2dlcihcImJlZm9yZUFjdGl2YXRlXCIsZSx1KXx8KG4uYWN0aXZlPSFoJiZ0aGlzLmhlYWRlcnMuaW5kZXgoYSksdGhpcy5hY3RpdmU9cj90KCk6YSx0aGlzLl90b2dnbGUodSksdGhpcy5fcmVtb3ZlQ2xhc3MobyxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksbi5pY29ucyYmKGk9by5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLG4uaWNvbnMuYWN0aXZlSGVhZGVyKS5fYWRkQ2xhc3MoaSxudWxsLG4uaWNvbnMuaGVhZGVyKSkscnx8KHRoaXMuX3JlbW92ZUNsYXNzKGEsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiKS5fYWRkQ2xhc3MoYSxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksbi5pY29ucyYmKHM9YS5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MocyxudWxsLG4uaWNvbnMuaGVhZGVyKS5fYWRkQ2xhc3MocyxudWxsLG4uaWNvbnMuYWN0aXZlSGVhZGVyKSksdGhpcy5fYWRkQ2xhc3MoYS5uZXh0KCksXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIikpKX0sX3RvZ2dsZTpmdW5jdGlvbihlKXt2YXIgaT1lLm5ld1BhbmVsLHM9dGhpcy5wcmV2U2hvdy5sZW5ndGg/dGhpcy5wcmV2U2hvdzplLm9sZFBhbmVsO3RoaXMucHJldlNob3cuYWRkKHRoaXMucHJldkhpZGUpLnN0b3AoITAsITApLHRoaXMucHJldlNob3c9aSx0aGlzLnByZXZIaWRlPXMsdGhpcy5vcHRpb25zLmFuaW1hdGU/dGhpcy5fYW5pbWF0ZShpLHMsZSk6KHMuaGlkZSgpLGkuc2hvdygpLHRoaXMuX3RvZ2dsZUNvbXBsZXRlKGUpKSxzLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLHMucHJldigpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KSxpLmxlbmd0aCYmcy5sZW5ndGg/cy5wcmV2KCkuYXR0cih7dGFiSW5kZXg6LTEsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSk6aS5sZW5ndGgmJnRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXBhcnNlSW50KHQodGhpcykuYXR0cihcInRhYkluZGV4XCIpLDEwKX0pLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSxpLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIikucHJldigpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KX0sX2FuaW1hdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzLG4sbyxhPXRoaXMscj0wLGg9dC5jc3MoXCJib3gtc2l6aW5nXCIpLGw9dC5sZW5ndGgmJighZS5sZW5ndGh8fHQuaW5kZXgoKTxlLmluZGV4KCkpLGM9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LHU9bCYmYy5kb3dufHxjLGQ9ZnVuY3Rpb24oKXthLl90b2dnbGVDb21wbGV0ZShpKX07cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHUmJihvPXUpLFwic3RyaW5nXCI9PXR5cGVvZiB1JiYobj11KSxuPW58fHUuZWFzaW5nfHxjLmVhc2luZyxvPW98fHUuZHVyYXRpb258fGMuZHVyYXRpb24sZS5sZW5ndGg/dC5sZW5ndGg/KHM9dC5zaG93KCkub3V0ZXJIZWlnaHQoKSxlLmFuaW1hdGUodGhpcy5oaWRlUHJvcHMse2R1cmF0aW9uOm8sZWFzaW5nOm4sc3RlcDpmdW5jdGlvbih0LGUpe2Uubm93PU1hdGgucm91bmQodCl9fSksdm9pZCB0LmhpZGUoKS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLHtkdXJhdGlvbjpvLGVhc2luZzpuLGNvbXBsZXRlOmQsc3RlcDpmdW5jdGlvbih0LGkpe2kubm93PU1hdGgucm91bmQodCksXCJoZWlnaHRcIiE9PWkucHJvcD9cImNvbnRlbnQtYm94XCI9PT1oJiYocis9aS5ub3cpOlwiY29udGVudFwiIT09YS5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChzLWUub3V0ZXJIZWlnaHQoKS1yKSxyPTApfX0pKTplLmFuaW1hdGUodGhpcy5oaWRlUHJvcHMsbyxuLGQpOnQuYW5pbWF0ZSh0aGlzLnNob3dQcm9wcyxvLG4sZCl9LF90b2dnbGVDb21wbGV0ZTpmdW5jdGlvbih0KXt2YXIgZT10Lm9sZFBhbmVsLGk9ZS5wcmV2KCk7dGhpcy5fcmVtb3ZlQ2xhc3MoZSxcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiKSx0aGlzLl9yZW1vdmVDbGFzcyhpLFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIikuX2FkZENsYXNzKGksXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiKSxlLmxlbmd0aCYmKGUucGFyZW50KClbMF0uY2xhc3NOYW1lPWUucGFyZW50KClbMF0uY2xhc3NOYW1lKSx0aGlzLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixudWxsLHQpfX0pLHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9dC5hY3RpdmVFbGVtZW50fWNhdGNoKGkpe2U9dC5ib2R5fXJldHVybiBlfHwoZT10LmJvZHkpLGUubm9kZU5hbWV8fChlPXQuYm9keSksZX0sdC53aWRnZXQoXCJ1aS5tZW51XCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjx1bD5cIixkZWxheTozMDAsb3B0aW9uczp7aWNvbnM6e3N1Ym1lbnU6XCJ1aS1pY29uLWNhcmV0LTEtZVwifSxpdGVtczpcIj4gKlwiLG1lbnVzOlwidWxcIixwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwicmlnaHQgdG9wXCJ9LHJvbGU6XCJtZW51XCIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMubW91c2VIYW5kbGVkPSExLHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsdGFiSW5kZXg6MH0pLHRoaXMuX2FkZENsYXNzKFwidWktbWVudVwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX29uKHtcIm1vdXNlZG93biAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSxcImNsaWNrIC51aS1tZW51LWl0ZW1cIjpmdW5jdGlvbihlKXt2YXIgaT10KGUudGFyZ2V0KSxzPXQodC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSk7IXRoaXMubW91c2VIYW5kbGVkJiZpLm5vdChcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKS5sZW5ndGgmJih0aGlzLnNlbGVjdChlKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCl8fCh0aGlzLm1vdXNlSGFuZGxlZD0hMCksaS5oYXMoXCIudWktbWVudVwiKS5sZW5ndGg/dGhpcy5leHBhbmQoZSk6IXRoaXMuZWxlbWVudC5pcyhcIjpmb2N1c1wiKSYmcy5jbG9zZXN0KFwiLnVpLW1lbnVcIikubGVuZ3RoJiYodGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiLFshMF0pLHRoaXMuYWN0aXZlJiYxPT09dGhpcy5hY3RpdmUucGFyZW50cyhcIi51aS1tZW51XCIpLmxlbmd0aCYmY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpKSl9LFwibW91c2VlbnRlciAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24oZSl7aWYoIXRoaXMucHJldmlvdXNGaWx0ZXIpe3ZhciBpPXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpLHM9dChlLmN1cnJlbnRUYXJnZXQpO2lbMF09PT1zWzBdJiYodGhpcy5fcmVtb3ZlQ2xhc3Mocy5zaWJsaW5ncygpLmNoaWxkcmVuKFwiLnVpLXN0YXRlLWFjdGl2ZVwiKSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuZm9jdXMoZSxzKSl9fSxtb3VzZWxlYXZlOlwiY29sbGFwc2VBbGxcIixcIm1vdXNlbGVhdmUgLnVpLW1lbnVcIjpcImNvbGxhcHNlQWxsXCIsZm9jdXM6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmFjdGl2ZXx8dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5lcSgwKTtlfHx0aGlzLmZvY3VzKHQsaSl9LGJsdXI6ZnVuY3Rpb24oZSl7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXshdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSkmJnRoaXMuY29sbGFwc2VBbGwoZSl9KX0sa2V5ZG93bjpcIl9rZXlkb3duXCJ9KSx0aGlzLnJlZnJlc2goKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtjbGljazpmdW5jdGlvbih0KXt0aGlzLl9jbG9zZU9uRG9jdW1lbnRDbGljayh0KSYmdGhpcy5jb2xsYXBzZUFsbCh0KSx0aGlzLm1vdXNlSGFuZGxlZD0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51LWl0ZW1cIikucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1kaXNhYmxlZFwiKSxpPWUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVBdHRyKFwidGFiSW5kZXggcm9sZSBhcmlhLWhhc3BvcHVwXCIpO3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpLmZpbmQoXCIudWktbWVudVwiKS5hZGRCYWNrKCkucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1sYWJlbGxlZGJ5IGFyaWEtZXhwYW5kZWQgYXJpYS1oaWRkZW4gYXJpYS1kaXNhYmxlZCB0YWJJbmRleFwiKS5yZW1vdmVVbmlxdWVJZCgpLnNob3coKSxpLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5kYXRhKFwidWktbWVudS1zdWJtZW51LWNhcmV0XCIpJiZlLnJlbW92ZSgpfSl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGE9ITA7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLnByZXZpb3VzUGFnZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046dGhpcy5uZXh0UGFnZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5IT01FOnRoaXMuX21vdmUoXCJmaXJzdFwiLFwiZmlyc3RcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6dGhpcy5fbW92ZShcImxhc3RcIixcImxhc3RcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZ0aGlzLmV4cGFuZChlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTlRFUjpjYXNlIHQudWkua2V5Q29kZS5TUEFDRTp0aGlzLl9hY3RpdmF0ZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jb2xsYXBzZShlKTticmVhaztkZWZhdWx0OmE9ITEscz10aGlzLnByZXZpb3VzRmlsdGVyfHxcIlwiLG89ITEsbj1lLmtleUNvZGU+PTk2JiZlLmtleUNvZGU8PTEwNT8oZS5rZXlDb2RlLTk2KS50b1N0cmluZygpOlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksbj09PXM/bz0hMDpuPXMrbixpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhuKSxpPW8mJi0xIT09aS5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpP3RoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpOmksaS5sZW5ndGh8fChuPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSxpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhuKSksaS5sZW5ndGg/KHRoaXMuZm9jdXMoZSxpKSx0aGlzLnByZXZpb3VzRmlsdGVyPW4sdGhpcy5maWx0ZXJUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfSwxZTMpKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn1hJiZlLnByZXZlbnREZWZhdWx0KCl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiYodGhpcy5hY3RpdmUuY2hpbGRyZW4oXCJbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddXCIpLmxlbmd0aD90aGlzLmV4cGFuZCh0KTp0aGlzLnNlbGVjdCh0KSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSxpLHMsbixvLGE9dGhpcyxyPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LGg9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTt0aGlzLl90b2dnbGVDbGFzcyhcInVpLW1lbnUtaWNvbnNcIixudWxsLCEhdGhpcy5lbGVtZW50LmZpbmQoXCIudWktaWNvblwiKS5sZW5ndGgpLHM9aC5maWx0ZXIoXCI6bm90KC51aS1tZW51KVwiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSxcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksaT1lLnByZXYoKSxzPXQoXCI8c3Bhbj5cIikuZGF0YShcInVpLW1lbnUtc3VibWVudS1jYXJldFwiLCEwKTthLl9hZGRDbGFzcyhzLFwidWktbWVudS1pY29uXCIsXCJ1aS1pY29uIFwiK3IpLGkuYXR0cihcImFyaWEtaGFzcG9wdXBcIixcInRydWVcIikucHJlcGVuZChzKSxlLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixpLmF0dHIoXCJpZFwiKSl9KSx0aGlzLl9hZGRDbGFzcyhzLFwidWktbWVudVwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWZyb250XCIpLGU9aC5hZGQodGhpcy5lbGVtZW50KSxpPWUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLGkubm90KFwiLnVpLW1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTthLl9pc0RpdmlkZXIoZSkmJmEuX2FkZENsYXNzKGUsXCJ1aS1tZW51LWRpdmlkZXJcIixcInVpLXdpZGdldC1jb250ZW50XCIpfSksbj1pLm5vdChcIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXJcIiksbz1uLmNoaWxkcmVuKCkubm90KFwiLnVpLW1lbnVcIikudW5pcXVlSWQoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSx0aGlzLl9hZGRDbGFzcyhuLFwidWktbWVudS1pdGVtXCIpLl9hZGRDbGFzcyhvLFwidWktbWVudS1pdGVtLXdyYXBwZXJcIiksaS5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIikuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIiksdGhpcy5hY3RpdmUmJiF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSkmJnRoaXMuYmx1cigpfSxfaXRlbVJvbGU6ZnVuY3Rpb24oKXtyZXR1cm57bWVudTpcIm1lbnVpdGVtXCIsbGlzdGJveDpcIm9wdGlvblwifVt0aGlzLm9wdGlvbnMucm9sZV19LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImljb25zXCI9PT10KXt2YXIgaT10aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51LWljb25cIik7dGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLHRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51KS5fYWRkQ2xhc3MoaSxudWxsLGUuc3VibWVudSl9dGhpcy5fc3VwZXIodCxlKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFN0cmluZyh0KSksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sZm9jdXM6ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG47dGhpcy5ibHVyKHQsdCYmXCJmb2N1c1wiPT09dC50eXBlKSx0aGlzLl9zY3JvbGxJbnRvVmlldyhlKSx0aGlzLmFjdGl2ZT1lLmZpcnN0KCkscz10aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKSx0aGlzLl9hZGRDbGFzcyhzLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIscy5hdHRyKFwiaWRcIikpLG49dGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIikuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fYWRkQ2xhc3MobixudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHQmJlwia2V5ZG93blwiPT09dC50eXBlP3RoaXMuX2Nsb3NlKCk6dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCl9LHRoaXMuZGVsYXkpLGk9ZS5jaGlsZHJlbihcIi51aS1tZW51XCIpLGkubGVuZ3RoJiZ0JiYvXm1vdXNlLy50ZXN0KHQudHlwZSkmJnRoaXMuX3N0YXJ0T3BlbmluZyhpKSx0aGlzLmFjdGl2ZU1lbnU9ZS5wYXJlbnQoKSx0aGlzLl90cmlnZ2VyKFwiZm9jdXNcIix0LHtpdGVtOmV9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGEscjt0aGlzLl9oYXNTY3JvbGwoKSYmKGk9cGFyc2VGbG9hdCh0LmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sXCJib3JkZXJUb3BXaWR0aFwiKSl8fDAscz1wYXJzZUZsb2F0KHQuY3NzKHRoaXMuYWN0aXZlTWVudVswXSxcInBhZGRpbmdUb3BcIikpfHwwLG49ZS5vZmZzZXQoKS50b3AtdGhpcy5hY3RpdmVNZW51Lm9mZnNldCgpLnRvcC1pLXMsbz10aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCksYT10aGlzLmFjdGl2ZU1lbnUuaGVpZ2h0KCkscj1lLm91dGVySGVpZ2h0KCksbjwwP3RoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AobytuKTpuK3I+YSYmdGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChvK24tYStyKSl9LGJsdXI6ZnVuY3Rpb24odCxlKXtlfHxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5hY3RpdmUmJih0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuX3RyaWdnZXIoXCJibHVyXCIsdCx7aXRlbTp0aGlzLmFjdGl2ZX0pLHRoaXMuYWN0aXZlPW51bGwpfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxcInRydWVcIj09PXQuYXR0cihcImFyaWEtaGlkZGVuXCIpJiYodGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3Blbih0KX0sdGhpcy5kZWxheSkpfSxfb3BlbjpmdW5jdGlvbihlKXt2YXIgaT10LmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnVcIikubm90KGUucGFyZW50cyhcIi51aS1tZW51XCIpKS5oaWRlKCkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGUuc2hvdygpLnJlbW92ZUF0dHIoXCJhcmlhLWhpZGRlblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKS5wb3NpdGlvbihpKX0sY29sbGFwc2VBbGw6ZnVuY3Rpb24oZSxpKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBzPWk/dGhpcy5lbGVtZW50OnQoZSYmZS50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudVwiKSk7cy5sZW5ndGh8fChzPXRoaXMuZWxlbWVudCksdGhpcy5fY2xvc2UocyksdGhpcy5ibHVyKGUpLHRoaXMuX3JlbW92ZUNsYXNzKHMuZmluZChcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmFjdGl2ZU1lbnU9c30sdGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbih0KXt0fHwodD10aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZS5wYXJlbnQoKTp0aGlzLmVsZW1lbnQpLHQuZmluZChcIi51aS1tZW51XCIpLmhpZGUoKS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpfSxfY2xvc2VPbkRvY3VtZW50Q2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudVwiKS5sZW5ndGh9LF9pc0RpdmlkZXI6ZnVuY3Rpb24odCl7cmV0dXJuIS9bXlxcLVxcdTIwMTRcXHUyMDEzXFxzXS8udGVzdCh0LnRleHQoKSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiLHRoaXMuZWxlbWVudCk7ZSYmZS5sZW5ndGgmJih0aGlzLl9jbG9zZSgpLHRoaXMuZm9jdXModCxlKSl9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudSBcIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7ZSYmZS5sZW5ndGgmJih0aGlzLl9vcGVuKGUucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyh0LGUpfSkpfSxuZXh0OmZ1bmN0aW9uKHQpe3RoaXMuX21vdmUoXCJuZXh0XCIsXCJmaXJzdFwiLHQpfSxwcmV2aW91czpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlKFwicHJldlwiLFwibGFzdFwiLHQpfSxpc0ZpcnN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLnByZXZBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzO3RoaXMuYWN0aXZlJiYocz1cImZpcnN0XCI9PT10fHxcImxhc3RcIj09PXQ/dGhpcy5hY3RpdmVbXCJmaXJzdFwiPT09dD9cInByZXZBbGxcIjpcIm5leHRBbGxcIl0oXCIudWktbWVudS1pdGVtXCIpLmVxKC0xKTp0aGlzLmFjdGl2ZVt0K1wiQWxsXCJdKFwiLnVpLW1lbnUtaXRlbVwiKS5lcSgwKSkscyYmcy5sZW5ndGgmJnRoaXMuYWN0aXZlfHwocz10aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW2VdKCkpLHRoaXMuZm9jdXMoaSxzKX0sbmV4dFBhZ2U6ZnVuY3Rpb24oZSl7dmFyIGkscyxuO2lmKCF0aGlzLmFjdGl2ZSlyZXR1cm4gdm9pZCB0aGlzLm5leHQoZSk7dGhpcy5pc0xhc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUubmV4dEFsbChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPXQodGhpcyksaS5vZmZzZXQoKS50b3Atcy1uPDB9KSx0aGlzLmZvY3VzKGUsaSkpOnRoaXMuZm9jdXMoZSx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlP1wibGFzdFwiOlwiZmlyc3RcIl0oKSkpfSxwcmV2aW91c1BhZ2U6ZnVuY3Rpb24oZSl7dmFyIGkscyxuO2lmKCF0aGlzLmFjdGl2ZSlyZXR1cm4gdm9pZCB0aGlzLm5leHQoZSk7dGhpcy5pc0ZpcnN0SXRlbSgpfHwodGhpcy5faGFzU2Nyb2xsKCk/KHM9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLG49dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLnByZXZBbGwoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT10KHRoaXMpLGkub2Zmc2V0KCkudG9wLXMrbj4wfSksdGhpcy5mb2N1cyhlLGkpKTp0aGlzLmZvY3VzKGUsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpKSl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoXCJzY3JvbGxIZWlnaHRcIil9LHNlbGVjdDpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZT10aGlzLmFjdGl2ZXx8dChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIik7dmFyIGk9e2l0ZW06dGhpcy5hY3RpdmV9O3RoaXMuYWN0aXZlLmhhcyhcIi51aS1tZW51XCIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbChlLCEwKSx0aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsZSxpKX0sX2ZpbHRlck1lbnVJdGVtczpmdW5jdGlvbihlKXt2YXIgaT1lLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLFwiXFxcXCQmXCIpLHM9bmV3IFJlZ0V4cChcIl5cIitpLFwiaVwiKTtyZXR1cm4gdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoXCIudWktbWVudS1pdGVtXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBzLnRlc3QodC50cmltKHQodGhpcykuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIikudGV4dCgpKSl9KX19KTt0LndpZGdldChcInVpLmF1dG9jb21wbGV0ZVwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8aW5wdXQ+XCIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxhdXRvRm9jdXM6ITEsZGVsYXk6MzAwLG1pbkxlbmd0aDoxLHBvc2l0aW9uOntteTpcImxlZnQgdG9wXCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcIm5vbmVcIn0sc291cmNlOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNwb25zZTpudWxsLHNlYXJjaDpudWxsLHNlbGVjdDpudWxsfSxyZXF1ZXN0SW5kZXg6MCxwZW5kaW5nOjAsX2NyZWF0ZTpmdW5jdGlvbigpe1xudmFyIGUsaSxzLG49dGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1cInRleHRhcmVhXCI9PT1uLGE9XCJpbnB1dFwiPT09bjt0aGlzLmlzTXVsdGlMaW5lPW98fCFhJiZ0aGlzLl9pc0NvbnRlbnRFZGl0YWJsZSh0aGlzLmVsZW1lbnQpLHRoaXMudmFsdWVNZXRob2Q9dGhpcy5lbGVtZW50W298fGE/XCJ2YWxcIjpcInRleHRcIl0sdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fYWRkQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtaW5wdXRcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKSx0aGlzLl9vbih0aGlzLmVsZW1lbnQse2tleWRvd246ZnVuY3Rpb24obil7aWYodGhpcy5lbGVtZW50LnByb3AoXCJyZWFkT25seVwiKSlyZXR1cm4gZT0hMCxzPSEwLHZvaWQoaT0hMCk7ZT0hMSxzPSExLGk9ITE7dmFyIG89dC51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2Ugby5QQUdFX1VQOmU9ITAsdGhpcy5fbW92ZShcInByZXZpb3VzUGFnZVwiLG4pO2JyZWFrO2Nhc2Ugby5QQUdFX0RPV046ZT0hMCx0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixuKTticmVhaztjYXNlIG8uVVA6ZT0hMCx0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIsbik7YnJlYWs7Y2FzZSBvLkRPV046ZT0hMCx0aGlzLl9rZXlFdmVudChcIm5leHRcIixuKTticmVhaztjYXNlIG8uRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKGU9ITAsbi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QobikpO2JyZWFrO2Nhc2Ugby5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChuKTticmVhaztjYXNlIG8uRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2Uobiksbi5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0Omk9ITAsdGhpcy5fc2VhcmNoVGltZW91dChuKX19LGtleXByZXNzOmZ1bmN0aW9uKHMpe2lmKGUpcmV0dXJuIGU9ITEsdm9pZCh0aGlzLmlzTXVsdGlMaW5lJiYhdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKXx8cy5wcmV2ZW50RGVmYXVsdCgpKTtpZighaSl7dmFyIG49dC51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoXCJwcmV2aW91c1BhZ2VcIixzKTticmVhaztjYXNlIG4uUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJuZXh0UGFnZVwiLHMpO2JyZWFrO2Nhc2Ugbi5VUDp0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoXCJuZXh0XCIscyl9fX0saW5wdXQ6ZnVuY3Rpb24odCl7aWYocylyZXR1cm4gcz0hMSx2b2lkIHQucHJldmVudERlZmF1bHQoKTt0aGlzLl9zZWFyY2hUaW1lb3V0KHQpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5wcmV2aW91cz10aGlzLl92YWx1ZSgpfSxibHVyOmZ1bmN0aW9uKHQpe2lmKHRoaXMuY2FuY2VsQmx1cilyZXR1cm4gdm9pZCBkZWxldGUgdGhpcy5jYW5jZWxCbHVyO2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5jbG9zZSh0KSx0aGlzLl9jaGFuZ2UodCl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT10KFwiPHVsPlwiKS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKS5tZW51KHtyb2xlOm51bGx9KS5oaWRlKCkubWVudShcImluc3RhbmNlXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMubWVudS5lbGVtZW50LFwidWktYXV0b2NvbXBsZXRlXCIsXCJ1aS1mcm9udFwiKSx0aGlzLl9vbih0aGlzLm1lbnUuZWxlbWVudCx7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHRoaXMuZWxlbWVudFswXSE9PXQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkmJnRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIil9KX0sbWVudWZvY3VzOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbjtpZih0aGlzLmlzTmV3TWVudSYmKHRoaXMuaXNOZXdNZW51PSExLGUub3JpZ2luYWxFdmVudCYmL15tb3VzZS8udGVzdChlLm9yaWdpbmFsRXZlbnQudHlwZSkpKXJldHVybiB0aGlzLm1lbnUuYmx1cigpLHZvaWQgdGhpcy5kb2N1bWVudC5vbmUoXCJtb3VzZW1vdmVcIixmdW5jdGlvbigpe3QoZS50YXJnZXQpLnRyaWdnZXIoZS5vcmlnaW5hbEV2ZW50KX0pO249aS5pdGVtLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiKSwhMSE9PXRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUse2l0ZW06bn0pJiZlLm9yaWdpbmFsRXZlbnQmJi9ea2V5Ly50ZXN0KGUub3JpZ2luYWxFdmVudC50eXBlKSYmdGhpcy5fdmFsdWUobi52YWx1ZSksKHM9aS5pdGVtLmF0dHIoXCJhcmlhLWxhYmVsXCIpfHxuLnZhbHVlKSYmdC50cmltKHMpLmxlbmd0aCYmKHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSx0KFwiPGRpdj5cIikudGV4dChzKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLGkpe3ZhciBzPWkuaXRlbS5kYXRhKFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIiksbj10aGlzLnByZXZpb3VzO3RoaXMuZWxlbWVudFswXSE9PXQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkmJih0aGlzLmVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLHRoaXMucHJldmlvdXM9bix0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMucHJldmlvdXM9bix0aGlzLnNlbGVjdGVkSXRlbT1zfSkpLCExIT09dGhpcy5fdHJpZ2dlcihcInNlbGVjdFwiLGUse2l0ZW06c30pJiZ0aGlzLl92YWx1ZShzLnZhbHVlKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0aGlzLmNsb3NlKGUpLHRoaXMuc2VsZWN0ZWRJdGVtPXN9fSksdGhpcy5saXZlUmVnaW9uPXQoXCI8ZGl2PlwiLHtyb2xlOlwic3RhdHVzXCIsXCJhcmlhLWxpdmVcIjpcImFzc2VydGl2ZVwiLFwiYXJpYS1yZWxldmFudFwiOlwiYWRkaXRpb25zXCJ9KS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpLHRoaXMuX2FkZENsYXNzKHRoaXMubGl2ZVJlZ2lvbixudWxsLFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZVwiKX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpLHRoaXMubWVudS5lbGVtZW50LnJlbW92ZSgpLHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3N1cGVyKHQsZSksXCJzb3VyY2VcIj09PXQmJnRoaXMuX2luaXRTb3VyY2UoKSxcImFwcGVuZFRvXCI9PT10JiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxcImRpc2FibGVkXCI9PT10JiZlJiZ0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX0sX2lzRXZlbnRUYXJnZXRJbldpZGdldDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm1lbnUuZWxlbWVudFswXTtyZXR1cm4gZS50YXJnZXQ9PT10aGlzLmVsZW1lbnRbMF18fGUudGFyZ2V0PT09aXx8dC5jb250YWlucyhpLGUudGFyZ2V0KX0sX2Nsb3NlT25DbGlja091dHNpZGU6ZnVuY3Rpb24odCl7dGhpcy5faXNFdmVudFRhcmdldEluV2lkZ2V0KHQpfHx0aGlzLmNsb3NlKCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gZSYmKGU9ZS5qcXVlcnl8fGUubm9kZVR5cGU/dChlKTp0aGlzLmRvY3VtZW50LmZpbmQoZSkuZXEoMCkpLGUmJmVbMF18fChlPXRoaXMuZWxlbWVudC5jbG9zZXN0KFwiLnVpLWZyb250LCBkaWFsb2dcIikpLGUubGVuZ3RofHwoZT10aGlzLmRvY3VtZW50WzBdLmJvZHkpLGV9LF9pbml0U291cmNlOmZ1bmN0aW9uKCl7dmFyIGUsaSxzPXRoaXM7dC5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpPyhlPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24oaSxzKXtzKHQudWkuYXV0b2NvbXBsZXRlLmZpbHRlcihlLGkudGVybSkpfSk6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihlLG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPXQuYWpheCh7dXJsOmksZGF0YTplLGRhdGFUeXBlOlwianNvblwiLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7bih0KX0sZXJyb3I6ZnVuY3Rpb24oKXtuKFtdKX19KX0pOnRoaXMuc291cmNlPXRoaXMub3B0aW9ucy5zb3VyY2V9LF9zZWFyY2hUaW1lb3V0OmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5zZWFyY2hpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnRlcm09PT10aGlzLl92YWx1ZSgpLGk9dGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSxzPXQuYWx0S2V5fHx0LmN0cmxLZXl8fHQubWV0YUtleXx8dC5zaGlmdEtleTtlJiYoIWV8fGl8fHMpfHwodGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnNlYXJjaChudWxsLHQpKX0sdGhpcy5vcHRpb25zLmRlbGF5KX0sc2VhcmNoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9bnVsbCE9dD90OnRoaXMuX3ZhbHVlKCksdGhpcy50ZXJtPXRoaXMuX3ZhbHVlKCksdC5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aD90aGlzLmNsb3NlKGUpOiExIT09dGhpcy5fdHJpZ2dlcihcInNlYXJjaFwiLGUpP3RoaXMuX3NlYXJjaCh0KTp2b2lkIDB9LF9zZWFyY2g6ZnVuY3Rpb24odCl7dGhpcy5wZW5kaW5nKyssdGhpcy5fYWRkQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZ1wiKSx0aGlzLmNhbmNlbFNlYXJjaD0hMSx0aGlzLnNvdXJjZSh7dGVybTp0fSx0aGlzLl9yZXNwb25zZSgpKX0sX3Jlc3BvbnNlOmZ1bmN0aW9uKCl7dmFyIGU9Kyt0aGlzLnJlcXVlc3RJbmRleDtyZXR1cm4gdC5wcm94eShmdW5jdGlvbih0KXtlPT09dGhpcy5yZXF1ZXN0SW5kZXgmJnRoaXMuX19yZXNwb25zZSh0KSwtLXRoaXMucGVuZGluZ3x8dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZ1wiKX0sdGhpcyl9LF9fcmVzcG9uc2U6ZnVuY3Rpb24odCl7dCYmKHQ9dGhpcy5fbm9ybWFsaXplKHQpKSx0aGlzLl90cmlnZ2VyKFwicmVzcG9uc2VcIixudWxsLHtjb250ZW50OnR9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0JiZ0Lmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KHQpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbih0KXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZSh0KX0sX2Nsb3NlOmZ1bmN0aW9uKHQpe3RoaXMuX29mZih0aGlzLmRvY3VtZW50LFwibW91c2Vkb3duXCIpLHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksdGhpcy5tZW51LmJsdXIoKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIix0KSl9LF9jaGFuZ2U6ZnVuY3Rpb24odCl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoJiZlWzBdLmxhYmVsJiZlWzBdLnZhbHVlP2U6dC5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZT97bGFiZWw6ZSx2YWx1ZTplfTp0LmV4dGVuZCh7fSxlLHtsYWJlbDplLmxhYmVsfHxlLnZhbHVlLHZhbHVlOmUudmFsdWV8fGUubGFiZWx9KX0pfSxfc3VnZ2VzdDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm1lbnUuZWxlbWVudC5lbXB0eSgpO3RoaXMuX3JlbmRlck1lbnUoaSxlKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLm1lbnUucmVmcmVzaCgpLGkuc2hvdygpLHRoaXMuX3Jlc2l6ZU1lbnUoKSxpLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjp0aGlzLmVsZW1lbnR9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLHRoaXMub3B0aW9ucy5hdXRvRm9jdXMmJnRoaXMubWVudS5uZXh0KCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vkb3duOlwiX2Nsb3NlT25DbGlja091dHNpZGVcIn0pfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWVudS5lbGVtZW50O3Qub3V0ZXJXaWR0aChNYXRoLm1heCh0LndpZHRoKFwiXCIpLm91dGVyV2lkdGgoKSsxLHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24oZSxpKXt2YXIgcz10aGlzO3QuZWFjaChpLGZ1bmN0aW9uKHQsaSl7cy5fcmVuZGVySXRlbURhdGEoZSxpKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbSh0LGUpLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiLGUpfSxfcmVuZGVySXRlbTpmdW5jdGlvbihlLGkpe3JldHVybiB0KFwiPGxpPlwiKS5hcHBlbmQodChcIjxkaXY+XCIpLnRleHQoaS5sYWJlbCkpLmFwcGVuZFRvKGUpfSxfbW92ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpP3RoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KHQpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QodCk/KHRoaXMuaXNNdWx0aUxpbmV8fHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdm9pZCB0aGlzLm1lbnUuYmx1cigpKTp2b2lkIHRoaXMubWVudVt0XShlKTp2b2lkIHRoaXMuc2VhcmNoKG51bGwsZSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudH0sX3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVNZXRob2QuYXBwbHkodGhpcy5lbGVtZW50LGFyZ3VtZW50cyl9LF9rZXlFdmVudDpmdW5jdGlvbih0LGUpe3RoaXMuaXNNdWx0aUxpbmUmJiF0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpfHwodGhpcy5fbW92ZSh0LGUpLGUucHJldmVudERlZmF1bHQoKSl9LF9pc0NvbnRlbnRFZGl0YWJsZTpmdW5jdGlvbih0KXtpZighdC5sZW5ndGgpcmV0dXJuITE7dmFyIGU9dC5wcm9wKFwiY29udGVudEVkaXRhYmxlXCIpO3JldHVyblwiaW5oZXJpdFwiPT09ZT90aGlzLl9pc0NvbnRlbnRFZGl0YWJsZSh0LnBhcmVudCgpKTpcInRydWVcIj09PWV9fSksdC5leHRlbmQodC51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLFwiXFxcXCQmXCIpfSxmaWx0ZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz1uZXcgUmVnRXhwKHQudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KGkpLFwiaVwiKTtyZXR1cm4gdC5ncmVwKGUsZnVuY3Rpb24odCl7cmV0dXJuIHMudGVzdCh0LmxhYmVsfHx0LnZhbHVlfHx0KX0pfX0pLHQud2lkZ2V0KFwidWkuYXV0b2NvbXBsZXRlXCIsdC51aS5hdXRvY29tcGxldGUse29wdGlvbnM6e21lc3NhZ2VzOntub1Jlc3VsdHM6XCJObyBzZWFyY2ggcmVzdWx0cy5cIixyZXN1bHRzOmZ1bmN0aW9uKHQpe3JldHVybiB0Kyh0PjE/XCIgcmVzdWx0cyBhcmVcIjpcIiByZXN1bHQgaXNcIikrXCIgYXZhaWxhYmxlLCB1c2UgdXAgYW5kIGRvd24gYXJyb3cga2V5cyB0byBuYXZpZ2F0ZS5cIn19fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciBpO3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuY2FuY2VsU2VhcmNofHwoaT1lJiZlLmxlbmd0aD90aGlzLm9wdGlvbnMubWVzc2FnZXMucmVzdWx0cyhlLmxlbmd0aCk6dGhpcy5vcHRpb25zLm1lc3NhZ2VzLm5vUmVzdWx0cyx0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksdChcIjxkaXY+XCIpLnRleHQoaSkuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSl9fSk7dmFyIGQ9KHQudWkuYXV0b2NvbXBsZXRlLC91aS1jb3JuZXItKFthLXpdKXsyLDZ9L2cpO3Qud2lkZ2V0KFwidWkuY29udHJvbGdyb3VwXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxkaXY+XCIsb3B0aW9uczp7ZGlyZWN0aW9uOlwiaG9yaXpvbnRhbFwiLGRpc2FibGVkOm51bGwsb25seVZpc2libGU6ITAsaXRlbXM6e2J1dHRvbjpcImlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgYnV0dG9uLCBhXCIsY29udHJvbGdyb3VwTGFiZWw6XCIudWktY29udHJvbGdyb3VwLWxhYmVsXCIsY2hlY2tib3hyYWRpbzpcImlucHV0W3R5cGU9J2NoZWNrYm94J10sIGlucHV0W3R5cGU9J3JhZGlvJ11cIixzZWxlY3RtZW51Olwic2VsZWN0XCIsc3Bpbm5lcjpcIi51aS1zcGlubmVyLWlucHV0XCJ9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fZW5oYW5jZSgpfSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwidG9vbGJhclwiKSx0aGlzLnJlZnJlc2goKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsQ2hpbGRNZXRob2QoXCJkZXN0cm95XCIpLHRoaXMuY2hpbGRXaWRnZXRzLnJlbW92ZURhdGEoXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiKSx0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5vcHRpb25zLml0ZW1zLmNvbnRyb2xncm91cExhYmVsJiZ0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMuY29udHJvbGdyb3VwTGFiZWwpLmZpbmQoXCIudWktY29udHJvbGdyb3VwLWxhYmVsLWNvbnRlbnRzXCIpLmNvbnRlbnRzKCkudW53cmFwKCl9LF9pbml0V2lkZ2V0czpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT1bXTt0LmVhY2godGhpcy5vcHRpb25zLml0ZW1zLGZ1bmN0aW9uKHMsbil7dmFyIG8sYT17fTtpZihuKXJldHVyblwiY29udHJvbGdyb3VwTGFiZWxcIj09PXM/KG89ZS5lbGVtZW50LmZpbmQobiksby5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmNoaWxkcmVuKFwiLnVpLWNvbnRyb2xncm91cC1sYWJlbC1jb250ZW50c1wiKS5sZW5ndGh8fGUuY29udGVudHMoKS53cmFwQWxsKFwiPHNwYW4gY2xhc3M9J3VpLWNvbnRyb2xncm91cC1sYWJlbC1jb250ZW50cyc+PC9zcGFuPlwiKX0pLGUuX2FkZENsYXNzKG8sbnVsbCxcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1zdGF0ZS1kZWZhdWx0XCIpLHZvaWQoaT1pLmNvbmNhdChvLmdldCgpKSkpOnZvaWQodC5mbltzXSYmKGE9ZVtcIl9cIitzK1wiT3B0aW9uc1wiXT9lW1wiX1wiK3MrXCJPcHRpb25zXCJdKFwibWlkZGxlXCIpOntjbGFzc2VzOnt9fSxlLmVsZW1lbnQuZmluZChuKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxvPW5bc10oXCJpbnN0YW5jZVwiKSxyPXQud2lkZ2V0LmV4dGVuZCh7fSxhKTtpZihcImJ1dHRvblwiIT09c3x8IW4ucGFyZW50KFwiLnVpLXNwaW5uZXJcIikubGVuZ3RoKXtvfHwobz1uW3NdKClbc10oXCJpbnN0YW5jZVwiKSksbyYmKHIuY2xhc3Nlcz1lLl9yZXNvbHZlQ2xhc3Nlc1ZhbHVlcyhyLmNsYXNzZXMsbykpLG5bc10ocik7dmFyIGg9bltzXShcIndpZGdldFwiKTt0LmRhdGEoaFswXSxcInVpLWNvbnRyb2xncm91cC1kYXRhXCIsb3x8bltzXShcImluc3RhbmNlXCIpKSxpLnB1c2goaFswXSl9fSkpKX0pLHRoaXMuY2hpbGRXaWRnZXRzPXQodC51bmlxdWUoaSkpLHRoaXMuX2FkZENsYXNzKHRoaXMuY2hpbGRXaWRnZXRzLFwidWktY29udHJvbGdyb3VwLWl0ZW1cIil9LF9jYWxsQ2hpbGRNZXRob2Q6ZnVuY3Rpb24oZSl7dGhpcy5jaGlsZFdpZGdldHMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykscz1pLmRhdGEoXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiKTtzJiZzW2VdJiZzW2VdKCl9KX0sX3VwZGF0ZUNvcm5lckNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKGUsXCJsYWJlbFwiKS5jbGFzc2VzLmxhYmVsO3RoaXMuX3JlbW92ZUNsYXNzKHQsbnVsbCxcInVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQgdWktY29ybmVyLWFsbFwiKSx0aGlzLl9hZGRDbGFzcyh0LG51bGwsaSl9LF9idWlsZFNpbXBsZU9wdGlvbnM6ZnVuY3Rpb24odCxlKXt2YXIgaT1cInZlcnRpY2FsXCI9PT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uLHM9e2NsYXNzZXM6e319O3JldHVybiBzLmNsYXNzZXNbZV09e21pZGRsZTpcIlwiLGZpcnN0OlwidWktY29ybmVyLVwiKyhpP1widG9wXCI6XCJsZWZ0XCIpLGxhc3Q6XCJ1aS1jb3JuZXItXCIrKGk/XCJib3R0b21cIjpcInJpZ2h0XCIpLG9ubHk6XCJ1aS1jb3JuZXItYWxsXCJ9W3RdLHN9LF9zcGlubmVyT3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9idWlsZFNpbXBsZU9wdGlvbnModCxcInVpLXNwaW5uZXJcIik7cmV0dXJuIGUuY2xhc3Nlc1tcInVpLXNwaW5uZXItdXBcIl09XCJcIixlLmNsYXNzZXNbXCJ1aS1zcGlubmVyLWRvd25cIl09XCJcIixlfSxfYnV0dG9uT3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKHQsXCJ1aS1idXR0b25cIil9LF9jaGVja2JveHJhZGlvT3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKHQsXCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCIpfSxfc2VsZWN0bWVudU9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9XCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcHRpb25zLmRpcmVjdGlvbjtyZXR1cm57d2lkdGg6ISFlJiZcImF1dG9cIixjbGFzc2VzOnttaWRkbGU6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOlwiXCIsXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcIlwifSxmaXJzdDp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6XCJ1aS1jb3JuZXItXCIrKGU/XCJ0b3BcIjpcInRsXCIpLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItXCIrKGU/XCJ0b3BcIjpcImxlZnRcIil9LGxhc3Q6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOmU/XCJcIjpcInVpLWNvcm5lci10clwiLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItXCIrKGU/XCJib3R0b21cIjpcInJpZ2h0XCIpfSxvbmx5OntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci10b3BcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLWFsbFwifX1bdF19fSxfcmVzb2x2ZUNsYXNzZXNWYWx1ZXM6ZnVuY3Rpb24oZSxpKXt2YXIgcz17fTtyZXR1cm4gdC5lYWNoKGUsZnVuY3Rpb24obil7dmFyIG89aS5vcHRpb25zLmNsYXNzZXNbbl18fFwiXCI7bz10LnRyaW0oby5yZXBsYWNlKGQsXCJcIikpLHNbbl09KG8rXCIgXCIrZVtuXSkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKX0pLHN9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImRpcmVjdGlvblwiPT09dCYmdGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1jb250cm9sZ3JvdXAtXCIrdGhpcy5vcHRpb25zLmRpcmVjdGlvbiksdGhpcy5fc3VwZXIodCxlKSxcImRpc2FibGVkXCI9PT10KXJldHVybiB2b2lkIHRoaXMuX2NhbGxDaGlsZE1ldGhvZChlP1wiZGlzYWJsZVwiOlwiZW5hYmxlXCIpO3RoaXMucmVmcmVzaCgpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktY29udHJvbGdyb3VwIHVpLWNvbnRyb2xncm91cC1cIit0aGlzLm9wdGlvbnMuZGlyZWN0aW9uKSxcImhvcml6b250YWxcIj09PXRoaXMub3B0aW9ucy5kaXJlY3Rpb24mJnRoaXMuX2FkZENsYXNzKG51bGwsXCJ1aS1oZWxwZXItY2xlYXJmaXhcIiksdGhpcy5faW5pdFdpZGdldHMoKSxlPXRoaXMuY2hpbGRXaWRnZXRzLHRoaXMub3B0aW9ucy5vbmx5VmlzaWJsZSYmKGU9ZS5maWx0ZXIoXCI6dmlzaWJsZVwiKSksZS5sZW5ndGgmJih0LmVhY2goW1wiZmlyc3RcIixcImxhc3RcIl0sZnVuY3Rpb24odCxzKXt2YXIgbj1lW3NdKCkuZGF0YShcInVpLWNvbnRyb2xncm91cC1kYXRhXCIpO2lmKG4mJmlbXCJfXCIrbi53aWRnZXROYW1lK1wiT3B0aW9uc1wiXSl7dmFyIG89aVtcIl9cIituLndpZGdldE5hbWUrXCJPcHRpb25zXCJdKDE9PT1lLmxlbmd0aD9cIm9ubHlcIjpzKTtvLmNsYXNzZXM9aS5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoby5jbGFzc2VzLG4pLG4uZWxlbWVudFtuLndpZGdldE5hbWVdKG8pfWVsc2UgaS5fdXBkYXRlQ29ybmVyQ2xhc3MoZVtzXSgpLHMpfSksdGhpcy5fY2FsbENoaWxkTWV0aG9kKFwicmVmcmVzaFwiKSl9fSk7dC53aWRnZXQoXCJ1aS5jaGVja2JveHJhZGlvXCIsW3QudWkuZm9ybVJlc2V0TWl4aW4se3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntkaXNhYmxlZDpudWxsLGxhYmVsOm51bGwsaWNvbjohMCxjbGFzc2VzOntcInVpLWNoZWNrYm94cmFkaW8tbGFiZWxcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLWNoZWNrYm94cmFkaW8taWNvblwiOlwidWktY29ybmVyLWFsbFwifX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgZSxpLHM9dGhpcyxuPXRoaXMuX3N1cGVyKCl8fHt9O3JldHVybiB0aGlzLl9yZWFkVHlwZSgpLGk9dGhpcy5lbGVtZW50LmxhYmVscygpLHRoaXMubGFiZWw9dChpW2kubGVuZ3RoLTFdKSx0aGlzLmxhYmVsLmxlbmd0aHx8dC5lcnJvcihcIk5vIGxhYmVsIGZvdW5kIGZvciBjaGVja2JveHJhZGlvIHdpZGdldFwiKSx0aGlzLm9yaWdpbmFsTGFiZWw9XCJcIix0aGlzLmxhYmVsLmNvbnRlbnRzKCkubm90KHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3Mub3JpZ2luYWxMYWJlbCs9Mz09PXRoaXMubm9kZVR5cGU/dCh0aGlzKS50ZXh0KCk6dGhpcy5vdXRlckhUTUx9KSx0aGlzLm9yaWdpbmFsTGFiZWwmJihuLmxhYmVsPXRoaXMub3JpZ2luYWxMYWJlbCksZT10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQsbnVsbCE9ZSYmKG4uZGlzYWJsZWQ9ZSksbn0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudFswXS5jaGVja2VkO3RoaXMuX2JpbmRGb3JtUmVzZXRIYW5kbGVyKCksbnVsbD09dGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZCksdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2FkZENsYXNzKFwidWktY2hlY2tib3hyYWRpb1wiLFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCIsXCJ1aS1idXR0b24gdWktd2lkZ2V0XCIpLFwicmFkaW9cIj09PXRoaXMudHlwZSYmdGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tcmFkaW8tbGFiZWxcIiksdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLm9wdGlvbnMubGFiZWwhPT10aGlzLm9yaWdpbmFsTGFiZWw/dGhpcy5fdXBkYXRlTGFiZWwoKTp0aGlzLm9yaWdpbmFsTGFiZWwmJih0aGlzLm9wdGlvbnMubGFiZWw9dGhpcy5vcmlnaW5hbExhYmVsKSx0aGlzLl9lbmhhbmNlKCksdCYmKHRoaXMuX2FkZENsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmljb24mJnRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixudWxsLFwidWktc3RhdGUtaG92ZXJcIikpLHRoaXMuX29uKHtjaGFuZ2U6XCJfdG9nZ2xlQ2xhc3Nlc1wiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxudWxsLFwidWktc3RhdGUtZm9jdXMgdWktdmlzdWFsLWZvY3VzXCIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5sYWJlbCxudWxsLFwidWktc3RhdGUtZm9jdXMgdWktdmlzdWFsLWZvY3VzXCIpfX0pfSxfcmVhZFR5cGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLnR5cGU9dGhpcy5lbGVtZW50WzBdLnR5cGUsXCJpbnB1dFwiPT09ZSYmL3JhZGlvfGNoZWNrYm94Ly50ZXN0KHRoaXMudHlwZSl8fHQuZXJyb3IoXCJDYW4ndCBjcmVhdGUgY2hlY2tib3hyYWRpbyBvbiBlbGVtZW50Lm5vZGVOYW1lPVwiK2UrXCIgYW5kIGVsZW1lbnQudHlwZT1cIit0aGlzLnR5cGUpfSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUljb24odGhpcy5lbGVtZW50WzBdLmNoZWNrZWQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbH0sX2dldFJhZGlvR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMuZWxlbWVudFswXS5uYW1lLHM9XCJpbnB1dFtuYW1lPSdcIit0LnVpLmVzY2FwZVNlbGVjdG9yKGkpK1wiJ11cIjtyZXR1cm4gaT8oZT10aGlzLmZvcm0ubGVuZ3RoP3QodGhpcy5mb3JtWzBdLmVsZW1lbnRzKS5maWx0ZXIocyk6dChzKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXQodGhpcykuZm9ybSgpLmxlbmd0aH0pLGUubm90KHRoaXMuZWxlbWVudCkpOnQoW10pfSxfdG9nZ2xlQ2xhc3NlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudFswXS5jaGVja2VkO3RoaXMuX3RvZ2dsZUNsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiLGUpLHRoaXMub3B0aW9ucy5pY29uJiZcImNoZWNrYm94XCI9PT10aGlzLnR5cGUmJnRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktaWNvbi1jaGVjayB1aS1zdGF0ZS1jaGVja2VkXCIsZSkuX3RvZ2dsZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktaWNvbi1ibGFua1wiLCFlKSxcInJhZGlvXCI9PT10aGlzLnR5cGUmJnRoaXMuX2dldFJhZGlvR3JvdXAoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5jaGVja2JveHJhZGlvKFwiaW5zdGFuY2VcIik7ZSYmZS5fcmVtb3ZlQ2xhc3MoZS5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fdW5iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMuaWNvbiYmKHRoaXMuaWNvbi5yZW1vdmUoKSx0aGlzLmljb25TcGFjZS5yZW1vdmUoKSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImxhYmVsXCIhPT10fHxlKXtpZih0aGlzLl9zdXBlcih0LGUpLFwiZGlzYWJsZWRcIj09PXQpcmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMubGFiZWwsbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsZSksdm9pZCh0aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ9ZSk7dGhpcy5yZWZyZXNoKCl9fSxfdXBkYXRlSWNvbjpmdW5jdGlvbihlKXt2YXIgaT1cInVpLWljb24gdWktaWNvbi1iYWNrZ3JvdW5kIFwiO3RoaXMub3B0aW9ucy5pY29uPyh0aGlzLmljb258fCh0aGlzLmljb249dChcIjxzcGFuPlwiKSx0aGlzLmljb25TcGFjZT10KFwiPHNwYW4+IDwvc3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uU3BhY2UsXCJ1aS1jaGVja2JveHJhZGlvLWljb24tc3BhY2VcIikpLFwiY2hlY2tib3hcIj09PXRoaXMudHlwZT8oaSs9ZT9cInVpLWljb24tY2hlY2sgdWktc3RhdGUtY2hlY2tlZFwiOlwidWktaWNvbi1ibGFua1wiLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLGU/XCJ1aS1pY29uLWJsYW5rXCI6XCJ1aS1pY29uLWNoZWNrXCIpKTppKz1cInVpLWljb24tYmxhbmtcIix0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sXCJ1aS1jaGVja2JveHJhZGlvLWljb25cIixpKSxlfHx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLWljb24tY2hlY2sgdWktc3RhdGUtY2hlY2tlZFwiKSx0aGlzLmljb24ucHJlcGVuZFRvKHRoaXMubGFiZWwpLmFmdGVyKHRoaXMuaWNvblNwYWNlKSk6dm9pZCAwIT09dGhpcy5pY29uJiYodGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmljb24pfSxfdXBkYXRlTGFiZWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxhYmVsLmNvbnRlbnRzKCkubm90KHRoaXMuZWxlbWVudFswXSk7dGhpcy5pY29uJiYodD10Lm5vdCh0aGlzLmljb25bMF0pKSx0aGlzLmljb25TcGFjZSYmKHQ9dC5ub3QodGhpcy5pY29uU3BhY2VbMF0pKSx0LnJlbW92ZSgpLHRoaXMubGFiZWwuYXBwZW5kKHRoaXMub3B0aW9ucy5sYWJlbCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnRbMF0uY2hlY2tlZCxlPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZDt0aGlzLl91cGRhdGVJY29uKHQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiLHQpLG51bGwhPT10aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuX3VwZGF0ZUxhYmVsKCksZSE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ZX0pfX1dKTt0LnVpLmNoZWNrYm94cmFkaW87dC53aWRnZXQoXCJ1aS5idXR0b25cIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPGJ1dHRvbj5cIixvcHRpb25zOntjbGFzc2VzOntcInVpLWJ1dHRvblwiOlwidWktY29ybmVyLWFsbFwifSxkaXNhYmxlZDpudWxsLGljb246bnVsbCxpY29uUG9zaXRpb246XCJiZWdpbm5pbmdcIixsYWJlbDpudWxsLHNob3dMYWJlbDohMH0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX3N1cGVyKCl8fHt9O3JldHVybiB0aGlzLmlzSW5wdXQ9dGhpcy5lbGVtZW50LmlzKFwiaW5wdXRcIiksdD10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQsbnVsbCE9dCYmKGUuZGlzYWJsZWQ9dCksdGhpcy5vcmlnaW5hbExhYmVsPXRoaXMuaXNJbnB1dD90aGlzLmVsZW1lbnQudmFsKCk6dGhpcy5lbGVtZW50Lmh0bWwoKSx0aGlzLm9yaWdpbmFsTGFiZWwmJihlLmxhYmVsPXRoaXMub3JpZ2luYWxMYWJlbCksZX0sX2NyZWF0ZTpmdW5jdGlvbigpeyF0aGlzLm9wdGlvbi5zaG93TGFiZWwmIXRoaXMub3B0aW9ucy5pY29uJiYodGhpcy5vcHRpb25zLnNob3dMYWJlbD0hMCksbnVsbD09dGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZHx8ITEpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLHRoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5vcHRpb25zLmxhYmVsIT09dGhpcy5vcmlnaW5hbExhYmVsJiYodGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKTp0aGlzLmVsZW1lbnQuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpKSx0aGlzLl9hZGRDbGFzcyhcInVpLWJ1dHRvblwiLFwidWktd2lkZ2V0XCIpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9lbmhhbmNlKCksdGhpcy5lbGVtZW50LmlzKFwiYVwiKSYmdGhpcy5fb24oe2tleXVwOmZ1bmN0aW9uKGUpe2Uua2V5Q29kZT09PXQudWkua2V5Q29kZS5TUEFDRSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmVsZW1lbnRbMF0uY2xpY2s/dGhpcy5lbGVtZW50WzBdLmNsaWNrKCk6dGhpcy5lbGVtZW50LnRyaWdnZXIoXCJjbGlja1wiKSl9fSl9LF9lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmlzKFwiYnV0dG9uXCIpfHx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcImJ1dHRvblwiKSx0aGlzLm9wdGlvbnMuaWNvbiYmKHRoaXMuX3VwZGF0ZUljb24oXCJpY29uXCIsdGhpcy5vcHRpb25zLmljb24pLHRoaXMuX3VwZGF0ZVRvb2x0aXAoKSl9LF91cGRhdGVUb29sdGlwOmZ1bmN0aW9uKCl7dGhpcy50aXRsZT10aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLHRoaXMub3B0aW9ucy5zaG93TGFiZWx8fHRoaXMudGl0bGV8fHRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIix0aGlzLm9wdGlvbnMubGFiZWwpfSxfdXBkYXRlSWNvbjpmdW5jdGlvbihlLGkpe3ZhciBzPVwiaWNvblBvc2l0aW9uXCIhPT1lLG49cz90aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uOmksbz1cInRvcFwiPT09bnx8XCJib3R0b21cIj09PW47dGhpcy5pY29uP3MmJnRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLHRoaXMub3B0aW9ucy5pY29uKToodGhpcy5pY29uPXQoXCI8c3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLFwidWktYnV0dG9uLWljb25cIixcInVpLWljb25cIiksdGhpcy5vcHRpb25zLnNob3dMYWJlbHx8dGhpcy5fYWRkQ2xhc3MoXCJ1aS1idXR0b24taWNvbi1vbmx5XCIpKSxzJiZ0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sbnVsbCxpKSx0aGlzLl9hdHRhY2hJY29uKG4pLG8/KHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixudWxsLFwidWktd2lkZ2V0LWljb24tYmxvY2tcIiksdGhpcy5pY29uU3BhY2UmJnRoaXMuaWNvblNwYWNlLnJlbW92ZSgpKToodGhpcy5pY29uU3BhY2V8fCh0aGlzLmljb25TcGFjZT10KFwiPHNwYW4+IDwvc3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uU3BhY2UsXCJ1aS1idXR0b24taWNvbi1zcGFjZVwiKSksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS13aWdldC1pY29uLWJsb2NrXCIpLHRoaXMuX2F0dGFjaEljb25TcGFjZShuKSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlXCIpLHRoaXMuaWNvbiYmdGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlJiZ0aGlzLmljb25TcGFjZS5yZW1vdmUoKSx0aGlzLmhhc1RpdGxlfHx0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInRpdGxlXCIpfSxfYXR0YWNoSWNvblNwYWNlOmZ1bmN0aW9uKHQpe3RoaXMuaWNvblsvXig/OmVuZHxib3R0b20pLy50ZXN0KHQpP1wiYmVmb3JlXCI6XCJhZnRlclwiXSh0aGlzLmljb25TcGFjZSl9LF9hdHRhY2hJY29uOmZ1bmN0aW9uKHQpe3RoaXMuZWxlbWVudFsvXig/OmVuZHxib3R0b20pLy50ZXN0KHQpP1wiYXBwZW5kXCI6XCJwcmVwZW5kXCJdKHRoaXMuaWNvbil9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQuc2hvd0xhYmVsP3RoaXMub3B0aW9ucy5zaG93TGFiZWw6dC5zaG93TGFiZWwsaT12b2lkIDA9PT10Lmljb24/dGhpcy5vcHRpb25zLmljb246dC5pY29uO2V8fGl8fCh0LnNob3dMYWJlbD0hMCksdGhpcy5fc3VwZXIodCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcImljb25cIj09PXQmJihlP3RoaXMuX3VwZGF0ZUljb24odCxlKTp0aGlzLmljb24mJih0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UmJnRoaXMuaWNvblNwYWNlLnJlbW92ZSgpKSksXCJpY29uUG9zaXRpb25cIj09PXQmJnRoaXMuX3VwZGF0ZUljb24odCxlKSxcInNob3dMYWJlbFwiPT09dCYmKHRoaXMuX3RvZ2dsZUNsYXNzKFwidWktYnV0dG9uLWljb24tb25seVwiLG51bGwsIWUpLHRoaXMuX3VwZGF0ZVRvb2x0aXAoKSksXCJsYWJlbFwiPT09dCYmKHRoaXMuaXNJbnB1dD90aGlzLmVsZW1lbnQudmFsKGUpOih0aGlzLmVsZW1lbnQuaHRtbChlKSx0aGlzLmljb24mJih0aGlzLl9hdHRhY2hJY29uKHRoaXMub3B0aW9ucy5pY29uUG9zaXRpb24pLHRoaXMuX2F0dGFjaEljb25TcGFjZSh0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uKSkpKSx0aGlzLl9zdXBlcih0LGUpLFwiZGlzYWJsZWRcIj09PXQmJih0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIixlKSx0aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ9ZSxlJiZ0aGlzLmVsZW1lbnQuYmx1cigpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC5pcyhcImlucHV0LCBidXR0b25cIik/dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkOnRoaXMuZWxlbWVudC5oYXNDbGFzcyhcInVpLWJ1dHRvbi1kaXNhYmxlZFwiKTt0IT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDp0fSksdGhpcy5fdXBkYXRlVG9vbHRpcCgpfX0pLCExIT09dC51aUJhY2tDb21wYXQmJih0LndpZGdldChcInVpLmJ1dHRvblwiLHQudWkuYnV0dG9uLHtvcHRpb25zOnt0ZXh0OiEwLGljb25zOntwcmltYXJ5Om51bGwsc2Vjb25kYXJ5Om51bGx9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnNob3dMYWJlbCYmIXRoaXMub3B0aW9ucy50ZXh0JiYodGhpcy5vcHRpb25zLnNob3dMYWJlbD10aGlzLm9wdGlvbnMudGV4dCksIXRoaXMub3B0aW9ucy5zaG93TGFiZWwmJnRoaXMub3B0aW9ucy50ZXh0JiYodGhpcy5vcHRpb25zLnRleHQ9dGhpcy5vcHRpb25zLnNob3dMYWJlbCksdGhpcy5vcHRpb25zLmljb258fCF0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeSYmIXRoaXMub3B0aW9ucy5pY29ucy5zZWNvbmRhcnk/dGhpcy5vcHRpb25zLmljb24mJih0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeT10aGlzLm9wdGlvbnMuaWNvbik6dGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk/dGhpcy5vcHRpb25zLmljb249dGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk6KHRoaXMub3B0aW9ucy5pY29uPXRoaXMub3B0aW9ucy5pY29ucy5zZWNvbmRhcnksdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbj1cImVuZFwiKSx0aGlzLl9zdXBlcigpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJ0ZXh0XCI9PT10KXJldHVybiB2b2lkIHRoaXMuX3N1cGVyKFwic2hvd0xhYmVsXCIsZSk7XCJzaG93TGFiZWxcIj09PXQmJih0aGlzLm9wdGlvbnMudGV4dD1lKSxcImljb25cIj09PXQmJih0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeT1lKSxcImljb25zXCI9PT10JiYoZS5wcmltYXJ5Pyh0aGlzLl9zdXBlcihcImljb25cIixlLnByaW1hcnkpLHRoaXMuX3N1cGVyKFwiaWNvblBvc2l0aW9uXCIsXCJiZWdpbm5pbmdcIikpOmUuc2Vjb25kYXJ5JiYodGhpcy5fc3VwZXIoXCJpY29uXCIsZS5zZWNvbmRhcnkpLHRoaXMuX3N1cGVyKFwiaWNvblBvc2l0aW9uXCIsXCJlbmRcIikpKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSksdC5mbi5idXR0b249ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubGVuZ3RofHx0aGlzLmxlbmd0aCYmXCJJTlBVVFwiIT09dGhpc1swXS50YWdOYW1lfHx0aGlzLmxlbmd0aCYmXCJJTlBVVFwiPT09dGhpc1swXS50YWdOYW1lJiZcImNoZWNrYm94XCIhPT10aGlzLmF0dHIoXCJ0eXBlXCIpJiZcInJhZGlvXCIhPT10aGlzLmF0dHIoXCJ0eXBlXCIpP2UuYXBwbHkodGhpcyxhcmd1bWVudHMpOih0LnVpLmNoZWNrYm94cmFkaW98fHQuZXJyb3IoXCJDaGVja2JveHJhZGlvIHdpZGdldCBtaXNzaW5nXCIpLDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuY2hlY2tib3hyYWRpbyh7aWNvbjohMX0pOnRoaXMuY2hlY2tib3hyYWRpby5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0odC5mbi5idXR0b24pLHQuZm4uYnV0dG9uc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIHQudWkuY29udHJvbGdyb3VwfHx0LmVycm9yKFwiQ29udHJvbGdyb3VwIHdpZGdldCBtaXNzaW5nXCIpLFwib3B0aW9uXCI9PT1hcmd1bWVudHNbMF0mJlwiaXRlbXNcIj09PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzJdP3RoaXMuY29udHJvbGdyb3VwLmFwcGx5KHRoaXMsW2FyZ3VtZW50c1swXSxcIml0ZW1zLmJ1dHRvblwiLGFyZ3VtZW50c1syXV0pOlwib3B0aW9uXCI9PT1hcmd1bWVudHNbMF0mJlwiaXRlbXNcIj09PWFyZ3VtZW50c1sxXT90aGlzLmNvbnRyb2xncm91cC5hcHBseSh0aGlzLFthcmd1bWVudHNbMF0sXCJpdGVtcy5idXR0b25cIl0pOihcIm9iamVjdFwiPT10eXBlb2YgYXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0uaXRlbXMmJihhcmd1bWVudHNbMF0uaXRlbXM9e2J1dHRvbjphcmd1bWVudHNbMF0uaXRlbXN9KSx0aGlzLmNvbnRyb2xncm91cC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSk7dC51aS5idXR0b247dC5leHRlbmQodC51aSx7ZGF0ZXBpY2tlcjp7dmVyc2lvbjpcIjEuMTIuMVwifX0pO3ZhciBwO3QuZXh0ZW5kKHMucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6XCJoYXNEYXRlcGlja2VyXCIsbWF4Um93czo0LF93aWRnZXREYXRlcGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHBEaXZ9LHNldERlZmF1bHRzOmZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX2RlZmF1bHRzLHR8fHt9KSx0aGlzfSxfYXR0YWNoRGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbztzPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxuPVwiZGl2XCI9PT1zfHxcInNwYW5cIj09PXMsZS5pZHx8KHRoaXMudXVpZCs9MSxlLmlkPVwiZHBcIit0aGlzLnV1aWQpLG89dGhpcy5fbmV3SW5zdCh0KGUpLG4pLG8uc2V0dGluZ3M9dC5leHRlbmQoe30saXx8e30pLFwiaW5wdXRcIj09PXM/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIoZSxvKTpuJiZ0aGlzLl9pbmxpbmVEYXRlcGlja2VyKGUsbyl9LF9uZXdJbnN0OmZ1bmN0aW9uKGUsaSl7cmV0dXJue2lkOmVbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05X1xcLV0pL2csXCJcXFxcXFxcXCQxXCIpLGlucHV0OmUsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6aSxkcERpdjppP24odChcIjxkaXYgY2xhc3M9J1wiK3RoaXMuX2lubGluZUNsYXNzK1wiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIikpOnRoaXMuZHBEaXZ9fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KGUpO2kuYXBwZW5kPXQoW10pLGkudHJpZ2dlcj10KFtdKSxzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHRoaXMuX2F0dGFjaG1lbnRzKHMsaSkscy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkub24oXCJrZXlkb3duXCIsdGhpcy5fZG9LZXlEb3duKS5vbihcImtleXByZXNzXCIsdGhpcy5fZG9LZXlQcmVzcykub24oXCJrZXl1cFwiLHRoaXMuX2RvS2V5VXApLHRoaXMuX2F1dG9TaXplKGkpLHQuZGF0YShlLFwiZGF0ZXBpY2tlclwiLGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpKX0sX2F0dGFjaG1lbnRzOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvLGE9dGhpcy5fZ2V0KGksXCJhcHBlbmRUZXh0XCIpLHI9dGhpcy5fZ2V0KGksXCJpc1JUTFwiKTtpLmFwcGVuZCYmaS5hcHBlbmQucmVtb3ZlKCksYSYmKGkuYXBwZW5kPXQoXCI8c3BhbiBjbGFzcz0nXCIrdGhpcy5fYXBwZW5kQ2xhc3MrXCInPlwiK2ErXCI8L3NwYW4+XCIpLGVbcj9cImJlZm9yZVwiOlwiYWZ0ZXJcIl0oaS5hcHBlbmQpKSxlLm9mZihcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLGkudHJpZ2dlciYmaS50cmlnZ2VyLnJlbW92ZSgpLHM9dGhpcy5fZ2V0KGksXCJzaG93T25cIiksXCJmb2N1c1wiIT09cyYmXCJib3RoXCIhPT1zfHxlLm9uKFwiZm9jdXNcIix0aGlzLl9zaG93RGF0ZXBpY2tlciksXCJidXR0b25cIiE9PXMmJlwiYm90aFwiIT09c3x8KG49dGhpcy5fZ2V0KGksXCJidXR0b25UZXh0XCIpLG89dGhpcy5fZ2V0KGksXCJidXR0b25JbWFnZVwiKSxpLnRyaWdnZXI9dCh0aGlzLl9nZXQoaSxcImJ1dHRvbkltYWdlT25seVwiKT90KFwiPGltZy8+XCIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuYXR0cih7c3JjOm8sYWx0Om4sdGl0bGU6bn0pOnQoXCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+XCIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChvP3QoXCI8aW1nLz5cIikuYXR0cih7c3JjOm8sYWx0Om4sdGl0bGU6bn0pOm4pKSxlW3I/XCJiZWZvcmVcIjpcImFmdGVyXCJdKGkudHJpZ2dlciksaS50cmlnZ2VyLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09PWVbMF0/dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fbGFzdElucHV0IT09ZVswXT8odC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLHQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSkpOnQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSksITF9KSl9LF9hdXRvU2l6ZTpmdW5jdGlvbih0KXtpZih0aGlzLl9nZXQodCxcImF1dG9TaXplXCIpJiYhdC5pbmxpbmUpe3ZhciBlLGkscyxuLG89bmV3IERhdGUoMjAwOSwxMSwyMCksYT10aGlzLl9nZXQodCxcImRhdGVGb3JtYXRcIik7YS5tYXRjaCgvW0RNXS8pJiYoZT1mdW5jdGlvbih0KXtmb3IoaT0wLHM9MCxuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXS5sZW5ndGg+aSYmKGk9dFtuXS5sZW5ndGgscz1uKTtyZXR1cm4gc30sby5zZXRNb250aChlKHRoaXMuX2dldCh0LGEubWF0Y2goL01NLyk/XCJtb250aE5hbWVzXCI6XCJtb250aE5hbWVzU2hvcnRcIikpKSxvLnNldERhdGUoZSh0aGlzLl9nZXQodCxhLm1hdGNoKC9ERC8pP1wiZGF5TmFtZXNcIjpcImRheU5hbWVzU2hvcnRcIikpKzIwLW8uZ2V0RGF5KCkpKSx0LmlucHV0LmF0dHIoXCJzaXplXCIsdGhpcy5fZm9ybWF0RGF0ZSh0LG8pLmxlbmd0aCl9fSxfaW5saW5lRGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkpe3ZhciBzPXQoZSk7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fChzLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5hcHBlbmQoaS5kcERpdiksdC5kYXRhKGUsXCJkYXRlcGlja2VyXCIsaSksdGhpcy5fc2V0RGF0ZShpLHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCEwKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSxpLmRwRGl2LmNzcyhcImRpc3BsYXlcIixcImJsb2NrXCIpKX0sX2RpYWxvZ0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpLHMsbixvKXt2YXIgcixoLGwsYyx1LGQ9dGhpcy5fZGlhbG9nSW5zdDtyZXR1cm4gZHx8KHRoaXMudXVpZCs9MSxyPVwiZHBcIit0aGlzLnV1aWQsdGhpcy5fZGlhbG9nSW5wdXQ9dChcIjxpbnB1dCB0eXBlPSd0ZXh0JyBpZD0nXCIrcitcIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+XCIpLHRoaXMuX2RpYWxvZ0lucHV0Lm9uKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93biksdChcImJvZHlcIikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSxkPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSksZC5zZXR0aW5ncz17fSx0LmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sXCJkYXRlcGlja2VyXCIsZCkpLGEoZC5zZXR0aW5ncyxufHx7fSksaT1pJiZpLmNvbnN0cnVjdG9yPT09RGF0ZT90aGlzLl9mb3JtYXREYXRlKGQsaSk6aSx0aGlzLl9kaWFsb2dJbnB1dC52YWwoaSksdGhpcy5fcG9zPW8/by5sZW5ndGg/bzpbby5wYWdlWCxvLnBhZ2VZXTpudWxsLHRoaXMuX3Bvc3x8KGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCxjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0fHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQsdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCx0aGlzLl9wb3M9W2gvMi0xMDArYyxsLzItMTUwK3VdKSx0aGlzLl9kaWFsb2dJbnB1dC5jc3MoXCJsZWZ0XCIsdGhpcy5fcG9zWzBdKzIwK1wicHhcIikuY3NzKFwidG9wXCIsdGhpcy5fcG9zWzFdK1wicHhcIiksZC5zZXR0aW5ncy5vblNlbGVjdD1zLHRoaXMuX2luRGlhbG9nPSEwLHRoaXMuZHBEaXYuYWRkQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSx0LmJsb2NrVUkmJnQuYmxvY2tVSSh0aGlzLmRwRGl2KSx0LmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sXCJkYXRlcGlja2VyXCIsZCksdGhpc30sX2Rlc3Ryb3lEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHM9dChlKSxuPXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHQucmVtb3ZlRGF0YShlLFwiZGF0ZXBpY2tlclwiKSxcImlucHV0XCI9PT1pPyhuLmFwcGVuZC5yZW1vdmUoKSxuLnRyaWdnZXIucmVtb3ZlKCkscy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkub2ZmKFwiZm9jdXNcIix0aGlzLl9zaG93RGF0ZXBpY2tlcikub2ZmKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93bikub2ZmKFwia2V5cHJlc3NcIix0aGlzLl9kb0tleVByZXNzKS5vZmYoXCJrZXl1cFwiLHRoaXMuX2RvS2V5VXApKTpcImRpdlwiIT09aSYmXCJzcGFuXCIhPT1pfHxzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpLHA9PT1uJiYocD1udWxsKSl9LF9lbmFibGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10KGUpLG89dC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXCJpbnB1dFwiPT09aT8oZS5kaXNhYmxlZD0hMSxvLnRyaWdnZXIuZmlsdGVyKFwiYnV0dG9uXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSExfSkuZW5kKCkuZmlsdGVyKFwiaW1nXCIpLmNzcyh7b3BhY2l0eTpcIjEuMFwiLGN1cnNvcjpcIlwifSkpOlwiZGl2XCIhPT1pJiZcInNwYW5cIiE9PWl8fChzPW4uY2hpbGRyZW4oXCIuXCIrdGhpcy5faW5saW5lQ2xhc3MpLHMuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpLHMuZmluZChcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIpLnByb3AoXCJkaXNhYmxlZFwiLCExKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9dC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lP251bGw6dH0pKX0sX2Rpc2FibGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10KGUpLG89dC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXCJpbnB1dFwiPT09aT8oZS5kaXNhYmxlZD0hMCxvLnRyaWdnZXIuZmlsdGVyKFwiYnV0dG9uXCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKFwiaW1nXCIpLmNzcyh7b3BhY2l0eTpcIjAuNVwiLGN1cnNvcjpcImRlZmF1bHRcIn0pKTpcImRpdlwiIT09aSYmXCJzcGFuXCIhPT1pfHwocz1uLmNoaWxkcmVuKFwiLlwiK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSxzLmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhclwiKS5wcm9wKFwiZGlzYWJsZWRcIiwhMCkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPXQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZT9udWxsOnR9KSx0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdPWUpfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTx0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7ZSsrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW2VdPT09dClyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0LmRhdGEoZSxcImRhdGVwaWNrZXJcIil9Y2F0Y2godCl7dGhyb3dcIk1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyXCJ9fSxfb3B0aW9uRGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkscyl7dmFyIG4sbyxyLGgsbD10aGlzLl9nZXRJbnN0KGUpO2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgaSlyZXR1cm5cImRlZmF1bHRzXCI9PT1pP3QuZXh0ZW5kKHt9LHQuZGF0ZXBpY2tlci5fZGVmYXVsdHMpOmw/XCJhbGxcIj09PWk/dC5leHRlbmQoe30sbC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGwsaSk6bnVsbDtuPWl8fHt9LFwic3RyaW5nXCI9PXR5cGVvZiBpJiYobj17fSxuW2ldPXMpLGwmJih0aGlzLl9jdXJJbnN0PT09bCYmdGhpcy5faGlkZURhdGVwaWNrZXIoKSxvPXRoaXMuX2dldERhdGVEYXRlcGlja2VyKGUsITApLHI9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLFwibWluXCIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLFwibWF4XCIpLGEobC5zZXR0aW5ncyxuKSxudWxsIT09ciYmdm9pZCAwIT09bi5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1uLm1pbkRhdGUmJihsLnNldHRpbmdzLm1pbkRhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLHIpKSxudWxsIT09aCYmdm9pZCAwIT09bi5kYXRlRm9ybWF0JiZ2b2lkIDA9PT1uLm1heERhdGUmJihsLnNldHRpbmdzLm1heERhdGU9dGhpcy5fZm9ybWF0RGF0ZShsLGgpKSxcImRpc2FibGVkXCJpbiBuJiYobi5kaXNhYmxlZD90aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKTp0aGlzLl9lbmFibGVEYXRlcGlja2VyKGUpKSx0aGlzLl9hdHRhY2htZW50cyh0KGUpLGwpLHRoaXMuX2F1dG9TaXplKGwpLHRoaXMuX3NldERhdGUobCxvKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihsKSl9LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKHQsZSxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldEluc3QodCk7ZSYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihlKX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SW5zdCh0KTtpJiYodGhpcy5fc2V0RGF0ZShpLGUpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0SW5zdCh0KTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksZSksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG89dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KSxhPSEwLHI9by5kcERpdi5pcyhcIi51aS1kYXRlcGlja2VyLXJ0bFwiKTtpZihvLl9rZXlFdmVudD0hMCx0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgOTp0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksYT0hMTticmVhaztjYXNlIDEzOnJldHVybiBuPXQoXCJ0ZC5cIit0LmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcytcIjpub3QoLlwiK3QuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzK1wiKVwiLG8uZHBEaXYpLG5bMF0mJnQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGUudGFyZ2V0LG8uc2VsZWN0ZWRNb250aCxvLnNlbGVjdGVkWWVhcixuWzBdKSxpPXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJvblNlbGVjdFwiKSxpPyhzPXQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShvKSxpLmFwcGx5KG8uaW5wdXQ/by5pbnB1dFswXTpudWxsLFtzLG9dKSk6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCExO2Nhc2UgMjc6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8tdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBCaWdNb250aHNcIik6LXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDM0OnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/K3QuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwQmlnTW9udGhzXCIpOit0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzNTooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2NsZWFyRGF0ZShlLnRhcmdldCksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM2OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGUudGFyZ2V0KSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/MTotMSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTotdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/LTE6MSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Pyt0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTordC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgNDA6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LDcsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDphPSExfWVsc2UgMzY9PT1lLmtleUNvZGUmJmUuY3RybEtleT90LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOmE9ITE7YSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYodC5kYXRlcGlja2VyLl9nZXQobixcImNvbnN0cmFpbklucHV0XCIpKXJldHVybiBpPXQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycyh0LmRhdGVwaWNrZXIuX2dldChuLFwiZGF0ZUZvcm1hdFwiKSkscz1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWUuY2hhckNvZGU/ZS5rZXlDb2RlOmUuY2hhckNvZGUpLGUuY3RybEtleXx8ZS5tZXRhS2V5fHxzPFwiIFwifHwhaXx8aS5pbmRleE9mKHMpPi0xfSxfZG9LZXlVcDpmdW5jdGlvbihlKXt2YXIgaSxzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT10LmRhdGVwaWNrZXIucGFyc2VEYXRlKHQuZGF0ZXBpY2tlci5fZ2V0KHMsXCJkYXRlRm9ybWF0XCIpLHMuaW5wdXQ/cy5pbnB1dC52YWwoKTpudWxsLHQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKHMpKSxpJiYodC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKHMpLHQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKHMpLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihzKSl9Y2F0Y2godCl7fXJldHVybiEwfSxfc2hvd0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoZT1lLnRhcmdldHx8ZSxcImlucHV0XCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihlPXQoXCJpbnB1dFwiLGUucGFyZW50Tm9kZSlbMF0pLCF0LmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGUpJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PWUpe3ZhciBzLG4sbyxyLGgsbCxjO3M9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUpLHQuZGF0ZXBpY2tlci5fY3VySW5zdCYmdC5kYXRlcGlja2VyLl9jdXJJbnN0IT09cyYmKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxzJiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLG49dC5kYXRlcGlja2VyLl9nZXQocyxcImJlZm9yZVNob3dcIiksbz1uP24uYXBwbHkoZSxbZSxzXSk6e30sITEhPT1vJiYoYShzLnNldHRpbmdzLG8pLHMubGFzdFZhbD1udWxsLHQuZGF0ZXBpY2tlci5fbGFzdElucHV0PWUsdC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKHMpLHQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJihlLnZhbHVlPVwiXCIpLHQuZGF0ZXBpY2tlci5fcG9zfHwodC5kYXRlcGlja2VyLl9wb3M9dC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLHQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCkscj0hMSx0KGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIShyfD1cImZpeGVkXCI9PT10KHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpKX0pLGg9e2xlZnQ6dC5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOnQuZGF0ZXBpY2tlci5fcG9zWzFdfSx0LmRhdGVwaWNrZXIuX3Bvcz1udWxsLHMuZHBEaXYuZW1wdHkoKSxzLmRwRGl2LmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGRpc3BsYXk6XCJibG9ja1wiLHRvcDpcIi0xMDAwcHhcIn0pLFxudC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHMpLGg9dC5kYXRlcGlja2VyLl9jaGVja09mZnNldChzLGgscikscy5kcERpdi5jc3Moe3Bvc2l0aW9uOnQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJnQuYmxvY2tVST9cInN0YXRpY1wiOnI/XCJmaXhlZFwiOlwiYWJzb2x1dGVcIixkaXNwbGF5Olwibm9uZVwiLGxlZnQ6aC5sZWZ0K1wicHhcIix0b3A6aC50b3ArXCJweFwifSkscy5pbmxpbmV8fChsPXQuZGF0ZXBpY2tlci5fZ2V0KHMsXCJzaG93QW5pbVwiKSxjPXQuZGF0ZXBpY2tlci5fZ2V0KHMsXCJkdXJhdGlvblwiKSxzLmRwRGl2LmNzcyhcInotaW5kZXhcIixpKHQoZSkpKzEpLHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsdC5lZmZlY3RzJiZ0LmVmZmVjdHMuZWZmZWN0W2xdP3MuZHBEaXYuc2hvdyhsLHQuZGF0ZXBpY2tlci5fZ2V0KHMsXCJzaG93T3B0aW9uc1wiKSxjKTpzLmRwRGl2W2x8fFwic2hvd1wiXShsP2M6bnVsbCksdC5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KHMpJiZzLmlucHV0LnRyaWdnZXIoXCJmb2N1c1wiKSx0LmRhdGVwaWNrZXIuX2N1ckluc3Q9cykpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQscD1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49c1sxXSxhPWUuZHBEaXYuZmluZChcIi5cIit0aGlzLl9kYXlPdmVyQ2xhc3MrXCIgYVwiKTthLmxlbmd0aD4wJiZvLmFwcGx5KGEuZ2V0KDApKSxlLmRwRGl2LnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTRcIikud2lkdGgoXCJcIiksbj4xJiZlLmRwRGl2LmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS1cIituKS5jc3MoXCJ3aWR0aFwiLDE3Km4rXCJlbVwiKSxlLmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/XCJhZGRcIjpcInJlbW92ZVwiKStcIkNsYXNzXCJdKFwidWktZGF0ZXBpY2tlci1tdWx0aVwiKSxlLmRwRGl2Wyh0aGlzLl9nZXQoZSxcImlzUlRMXCIpP1wiYWRkXCI6XCJyZW1vdmVcIikrXCJDbGFzc1wiXShcInVpLWRhdGVwaWNrZXItcnRsXCIpLGU9PT10LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChlKSYmZS5pbnB1dC50cmlnZ2VyKFwiZm9jdXNcIiksZS55ZWFyc2h0bWwmJihpPWUueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09ZS55ZWFyc2h0bWwmJmUueWVhcnNodG1sJiZlLmRwRGl2LmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0XCIpLnJlcGxhY2VXaXRoKGUueWVhcnNodG1sKSxpPWUueWVhcnNodG1sPW51bGx9LDApKX0sX3Nob3VsZEZvY3VzSW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5wdXQmJnQuaW5wdXQuaXMoXCI6dmlzaWJsZVwiKSYmIXQuaW5wdXQuaXMoXCI6ZGlzYWJsZWRcIikmJiF0LmlucHV0LmlzKFwiOmZvY3VzXCIpfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPWUuZHBEaXYub3V0ZXJXaWR0aCgpLG89ZS5kcERpdi5vdXRlckhlaWdodCgpLGE9ZS5pbnB1dD9lLmlucHV0Lm91dGVyV2lkdGgoKTowLHI9ZS5pbnB1dD9lLmlucHV0Lm91dGVySGVpZ2h0KCk6MCxoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsocz8wOnQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhzPzA6dChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiBpLmxlZnQtPXRoaXMuX2dldChlLFwiaXNSVExcIik/bi1hOjAsaS5sZWZ0LT1zJiZpLmxlZnQ9PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPXMmJmkudG9wPT09ZS5pbnB1dC5vZmZzZXQoKS50b3Arcj90KGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtuPmgmJmg+bj9NYXRoLmFicyhpLmxlZnQrbi1oKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3Arbz5sJiZsPm8/TWF0aC5hYnMobytyKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbihlKXtmb3IodmFyIGkscz10aGlzLl9nZXRJbnN0KGUpLG49dGhpcy5fZ2V0KHMsXCJpc1JUTFwiKTtlJiYoXCJoaWRkZW5cIj09PWUudHlwZXx8MSE9PWUubm9kZVR5cGV8fHQuZXhwci5maWx0ZXJzLmhpZGRlbihlKSk7KWU9ZVtuP1wicHJldmlvdXNTaWJsaW5nXCI6XCJuZXh0U2libGluZ1wiXTtyZXR1cm4gaT10KGUpLm9mZnNldCgpLFtpLmxlZnQsaS50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10aGlzLl9jdXJJbnN0OyFhfHxlJiZhIT09dC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpfHx0aGlzLl9kYXRlcGlja2VyU2hvd2luZyYmKGk9dGhpcy5fZ2V0KGEsXCJzaG93QW5pbVwiKSxzPXRoaXMuX2dldChhLFwiZHVyYXRpb25cIiksbj1mdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyhhKX0sdC5lZmZlY3RzJiYodC5lZmZlY3RzLmVmZmVjdFtpXXx8dC5lZmZlY3RzW2ldKT9hLmRwRGl2LmhpZGUoaSx0LmRhdGVwaWNrZXIuX2dldChhLFwic2hvd09wdGlvbnNcIikscyxuKTphLmRwRGl2W1wic2xpZGVEb3duXCI9PT1pP1wic2xpZGVVcFwiOlwiZmFkZUluXCI9PT1pP1wiZmFkZU91dFwiOlwiaGlkZVwiXShpP3M6bnVsbCxuKSxpfHxuKCksdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsbz10aGlzLl9nZXQoYSxcIm9uQ2xvc2VcIiksbyYmby5hcHBseShhLmlucHV0P2EuaW5wdXRbMF06bnVsbCxbYS5pbnB1dD9hLmlucHV0LnZhbCgpOlwiXCIsYV0pLHRoaXMuX2xhc3RJbnB1dD1udWxsLHRoaXMuX2luRGlhbG9nJiYodGhpcy5fZGlhbG9nSW5wdXQuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDpcIjBcIix0b3A6XCItMTAwcHhcIn0pLHQuYmxvY2tVSSYmKHQudW5ibG9ja1VJKCksdChcImJvZHlcIikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITEpfSxfdGlkeURpYWxvZzpmdW5jdGlvbih0KXt0LmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS5vZmYoXCIudWktZGF0ZXBpY2tlci1jYWxlbmRhclwiKX0sX2NoZWNrRXh0ZXJuYWxDbGljazpmdW5jdGlvbihlKXtpZih0LmRhdGVwaWNrZXIuX2N1ckluc3Qpe3ZhciBpPXQoZS50YXJnZXQpLHM9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGlbMF0pOyhpWzBdLmlkPT09dC5kYXRlcGlja2VyLl9tYWluRGl2SWR8fDAhPT1pLnBhcmVudHMoXCIjXCIrdC5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aHx8aS5oYXNDbGFzcyh0LmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKXx8aS5jbG9zZXN0KFwiLlwiK3QuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGh8fCF0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nfHx0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiZ0LmJsb2NrVUkpJiYoIWkuaGFzQ2xhc3ModC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSl8fHQuZGF0ZXBpY2tlci5fY3VySW5zdD09PXMpfHx0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9fSxfYWRqdXN0RGF0ZTpmdW5jdGlvbihlLGkscyl7dmFyIG49dChlKSxvPXRoaXMuX2dldEluc3QoblswXSk7dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoblswXSl8fCh0aGlzLl9hZGp1c3RJbnN0RGF0ZShvLGkrKFwiTVwiPT09cz90aGlzLl9nZXQobyxcInNob3dDdXJyZW50QXRQb3NcIik6MCkscyksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihvKSl9LF9nb3RvVG9kYXk6ZnVuY3Rpb24oZSl7dmFyIGkscz10KGUpLG49dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9nZXQobixcImdvdG9DdXJyZW50XCIpJiZuLmN1cnJlbnREYXk/KG4uc2VsZWN0ZWREYXk9bi5jdXJyZW50RGF5LG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1uLmN1cnJlbnRNb250aCxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPW4uY3VycmVudFllYXIpOihpPW5ldyBEYXRlLG4uc2VsZWN0ZWREYXk9aS5nZXREYXRlKCksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPWkuZ2V0TW9udGgoKSxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPWkuZ2V0RnVsbFllYXIoKSksdGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUocyl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQoZSksbz10aGlzLl9nZXRJbnN0KG5bMF0pO29bXCJzZWxlY3RlZFwiKyhcIk1cIj09PXM/XCJNb250aFwiOlwiWWVhclwiKV09b1tcImRyYXdcIisoXCJNXCI9PT1zP1wiTW9udGhcIjpcIlllYXJcIildPXBhcnNlSW50KGkub3B0aW9uc1tpLnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UobyksdGhpcy5fYWRqdXN0RGF0ZShuKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLGkscyxuKXt2YXIgbyxhPXQoZSk7dChuKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKGFbMF0pfHwobz10aGlzLl9nZXRJbnN0KGFbMF0pLG8uc2VsZWN0ZWREYXk9by5jdXJyZW50RGF5PXQoXCJhXCIsbikuaHRtbCgpLG8uc2VsZWN0ZWRNb250aD1vLmN1cnJlbnRNb250aD1pLG8uc2VsZWN0ZWRZZWFyPW8uY3VycmVudFllYXI9cyx0aGlzLl9zZWxlY3REYXRlKGUsdGhpcy5fZm9ybWF0RGF0ZShvLG8uY3VycmVudERheSxvLmN1cnJlbnRNb250aCxvLmN1cnJlbnRZZWFyKSkpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSk7dGhpcy5fc2VsZWN0RGF0ZShpLFwiXCIpfSxfc2VsZWN0RGF0ZTpmdW5jdGlvbihlLGkpe3ZhciBzLG49dChlKSxvPXRoaXMuX2dldEluc3QoblswXSk7aT1udWxsIT1pP2k6dGhpcy5fZm9ybWF0RGF0ZShvKSxvLmlucHV0JiZvLmlucHV0LnZhbChpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobykscz10aGlzLl9nZXQobyxcIm9uU2VsZWN0XCIpLHM/cy5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbaSxvXSk6by5pbnB1dCYmby5pbnB1dC50cmlnZ2VyKFwiY2hhbmdlXCIpLG8uaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIobyk6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PW8uaW5wdXRbMF0sXCJvYmplY3RcIiE9dHlwZW9mIG8uaW5wdXRbMF0mJm8uaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbz10aGlzLl9nZXQoZSxcImFsdEZpZWxkXCIpO28mJihpPXRoaXMuX2dldChlLFwiYWx0Rm9ybWF0XCIpfHx0aGlzLl9nZXQoZSxcImRhdGVGb3JtYXRcIikscz10aGlzLl9nZXREYXRlKGUpLG49dGhpcy5mb3JtYXREYXRlKGkscyx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpLHQobykudmFsKG4pKX0sbm9XZWVrZW5kczpmdW5jdGlvbih0KXt2YXIgZT10LmdldERheSgpO3JldHVybltlPjAmJmU8NixcIlwiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24odCl7dmFyIGUsaT1uZXcgRGF0ZSh0LmdldFRpbWUoKSk7cmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKSs0LShpLmdldERheSgpfHw3KSksZT1pLmdldFRpbWUoKSxpLnNldE1vbnRoKDApLGkuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGUtaSkvODY0ZTUpLzcpKzF9LHBhcnNlRGF0ZTpmdW5jdGlvbihlLGkscyl7aWYobnVsbD09ZXx8bnVsbD09aSl0aHJvd1wiSW52YWxpZCBhcmd1bWVudHNcIjtpZihcIlwiPT09KGk9XCJvYmplY3RcIj09dHlwZW9mIGk/aS50b1N0cmluZygpOmkrXCJcIikpcmV0dXJuIG51bGw7dmFyIG4sbyxhLHIsaD0wLGw9KHM/cy5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZixjPVwic3RyaW5nXCIhPXR5cGVvZiBsP2w6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChsLDEwKSx1PShzP3MuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxkPShzP3MuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHA9KHM/cy5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxmPShzP3MubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxnPS0xLG09LTEsXz0tMSx2PS0xLGI9ITEseT1mdW5jdGlvbih0KXt2YXIgaT1uKzE8ZS5sZW5ndGgmJmUuY2hhckF0KG4rMSk9PT10O3JldHVybiBpJiZuKyssaX0sdz1mdW5jdGlvbih0KXt2YXIgZT15KHQpLHM9XCJAXCI9PT10PzE0OlwiIVwiPT09dD8yMDpcInlcIj09PXQmJmU/NDpcIm9cIj09PXQ/MzoyLG49XCJ5XCI9PT10P3M6MSxvPW5ldyBSZWdFeHAoXCJeXFxcXGR7XCIrbitcIixcIitzK1wifVwiKSxhPWkuc3Vic3RyaW5nKGgpLm1hdGNoKG8pO2lmKCFhKXRocm93XCJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiBcIitoO3JldHVybiBoKz1hWzBdLmxlbmd0aCxwYXJzZUludChhWzBdLDEwKX0saz1mdW5jdGlvbihlLHMsbil7dmFyIG89LTEsYT10Lm1hcCh5KGUpP246cyxmdW5jdGlvbih0LGUpe3JldHVybltbZSx0XV19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuLSh0WzFdLmxlbmd0aC1lWzFdLmxlbmd0aCl9KTtpZih0LmVhY2goYSxmdW5jdGlvbih0LGUpe3ZhciBzPWVbMV07aWYoaS5zdWJzdHIoaCxzLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PXMudG9Mb3dlckNhc2UoKSlyZXR1cm4gbz1lWzBdLGgrPXMubGVuZ3RoLCExfSksLTEhPT1vKXJldHVybiBvKzE7dGhyb3dcIlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiBcIitofSx4PWZ1bmN0aW9uKCl7aWYoaS5jaGFyQXQoaCkhPT1lLmNoYXJBdChuKSl0aHJvd1wiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIFwiK2g7aCsrfTtmb3Iobj0wO248ZS5sZW5ndGg7bisrKWlmKGIpXCInXCIhPT1lLmNoYXJBdChuKXx8eShcIidcIik/eCgpOmI9ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQobikpe2Nhc2VcImRcIjpfPXcoXCJkXCIpO2JyZWFrO2Nhc2VcIkRcIjprKFwiRFwiLHUsZCk7YnJlYWs7Y2FzZVwib1wiOnY9dyhcIm9cIik7YnJlYWs7Y2FzZVwibVwiOm09dyhcIm1cIik7YnJlYWs7Y2FzZVwiTVwiOm09ayhcIk1cIixwLGYpO2JyZWFrO2Nhc2VcInlcIjpnPXcoXCJ5XCIpO2JyZWFrO2Nhc2VcIkBcIjpyPW5ldyBEYXRlKHcoXCJAXCIpKSxnPXIuZ2V0RnVsbFllYXIoKSxtPXIuZ2V0TW9udGgoKSsxLF89ci5nZXREYXRlKCk7YnJlYWs7Y2FzZVwiIVwiOnI9bmV3IERhdGUoKHcoXCIhXCIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLGc9ci5nZXRGdWxsWWVhcigpLG09ci5nZXRNb250aCgpKzEsXz1yLmdldERhdGUoKTticmVhaztjYXNlXCInXCI6eShcIidcIik/eCgpOmI9ITA7YnJlYWs7ZGVmYXVsdDp4KCl9aWYoaDxpLmxlbmd0aCYmKGE9aS5zdWJzdHIoaCksIS9eXFxzKy8udGVzdChhKSkpdGhyb3dcIkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogXCIrYTtpZigtMT09PWc/Zz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6ZzwxMDAmJihnKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsoZzw9Yz8wOi0xMDApKSx2Pi0xKWZvcihtPTEsXz12Ozspe2lmKG89dGhpcy5fZ2V0RGF5c0luTW9udGgoZyxtLTEpLF88PW8pYnJlYWs7bSsrLF8tPW99aWYocj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShnLG0tMSxfKSksci5nZXRGdWxsWWVhcigpIT09Z3x8ci5nZXRNb250aCgpKzEhPT1tfHxyLmdldERhdGUoKSE9PV8pdGhyb3dcIkludmFsaWQgZGF0ZVwiO3JldHVybiByfSxBVE9NOlwieXktbW0tZGRcIixDT09LSUU6XCJELCBkZCBNIHl5XCIsSVNPXzg2MDE6XCJ5eS1tbS1kZFwiLFJGQ184MjI6XCJELCBkIE0geVwiLFJGQ184NTA6XCJERCwgZGQtTS15XCIsUkZDXzEwMzY6XCJELCBkIE0geVwiLFJGQ18xMTIzOlwiRCwgZCBNIHl5XCIsUkZDXzI4MjI6XCJELCBkIE0geXlcIixSU1M6XCJELCBkIE0geVwiLFRJQ0tTOlwiIVwiLFRJTUVTVEFNUDpcIkBcIixXM0M6XCJ5eS1tbS1kZFwiLF90aWNrc1RvMTk3MDoyNCooNzE4Njg1K01hdGguZmxvb3IoNDkyLjUpLU1hdGguZmxvb3IoMTkuNykrTWF0aC5mbG9vcig0LjkyNSkpKjYwKjYwKjFlNyxmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxpKXtpZighZSlyZXR1cm5cIlwiO3ZhciBzLG49KGk/aS5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LG89KGk/aS5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsYT0oaT9pLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LHI9KGk/aS5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLGg9ZnVuY3Rpb24oZSl7dmFyIGk9cysxPHQubGVuZ3RoJiZ0LmNoYXJBdChzKzEpPT09ZTtyZXR1cm4gaSYmcysrLGl9LGw9ZnVuY3Rpb24odCxlLGkpe3ZhciBzPVwiXCIrZTtpZihoKHQpKWZvcig7cy5sZW5ndGg8aTspcz1cIjBcIitzO3JldHVybiBzfSxjPWZ1bmN0aW9uKHQsZSxpLHMpe3JldHVybiBoKHQpP3NbZV06aVtlXX0sdT1cIlwiLGQ9ITE7aWYoZSlmb3Iocz0wO3M8dC5sZW5ndGg7cysrKWlmKGQpXCInXCIhPT10LmNoYXJBdChzKXx8aChcIidcIik/dSs9dC5jaGFyQXQocyk6ZD0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChzKSl7Y2FzZVwiZFwiOnUrPWwoXCJkXCIsZS5nZXREYXRlKCksMik7YnJlYWs7Y2FzZVwiRFwiOnUrPWMoXCJEXCIsZS5nZXREYXkoKSxuLG8pO2JyZWFrO2Nhc2VcIm9cIjp1Kz1sKFwib1wiLE1hdGgucm91bmQoKG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlXCJtXCI6dSs9bChcIm1cIixlLmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlXCJNXCI6dSs9YyhcIk1cIixlLmdldE1vbnRoKCksYSxyKTticmVhaztjYXNlXCJ5XCI6dSs9aChcInlcIik/ZS5nZXRGdWxsWWVhcigpOihlLmdldEZ1bGxZZWFyKCklMTAwPDEwP1wiMFwiOlwiXCIpK2UuZ2V0RnVsbFllYXIoKSUxMDA7YnJlYWs7Y2FzZVwiQFwiOnUrPWUuZ2V0VGltZSgpO2JyZWFrO2Nhc2VcIiFcIjp1Kz0xZTQqZS5nZXRUaW1lKCkrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZVwiJ1wiOmgoXCInXCIpP3UrPVwiJ1wiOmQ9ITA7YnJlYWs7ZGVmYXVsdDp1Kz10LmNoYXJBdChzKX1yZXR1cm4gdX0sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGUsaT1cIlwiLHM9ITEsbj1mdW5jdGlvbihpKXt2YXIgcz1lKzE8dC5sZW5ndGgmJnQuY2hhckF0KGUrMSk9PT1pO3JldHVybiBzJiZlKyssc307Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKylpZihzKVwiJ1wiIT09dC5jaGFyQXQoZSl8fG4oXCInXCIpP2krPXQuY2hhckF0KGUpOnM9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoZSkpe2Nhc2VcImRcIjpjYXNlXCJtXCI6Y2FzZVwieVwiOmNhc2VcIkBcIjppKz1cIjAxMjM0NTY3ODlcIjticmVhaztjYXNlXCJEXCI6Y2FzZVwiTVwiOnJldHVybiBudWxsO2Nhc2VcIidcIjpuKFwiJ1wiKT9pKz1cIidcIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9dC5jaGFyQXQoZSl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09dC5zZXR0aW5nc1tlXT90LnNldHRpbmdzW2VdOnRoaXMuX2RlZmF1bHRzW2VdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbih0LGUpe2lmKHQuaW5wdXQudmFsKCkhPT10Lmxhc3RWYWwpe3ZhciBpPXRoaXMuX2dldCh0LFwiZGF0ZUZvcm1hdFwiKSxzPXQubGFzdFZhbD10LmlucHV0P3QuaW5wdXQudmFsKCk6bnVsbCxuPXRoaXMuX2dldERlZmF1bHREYXRlKHQpLG89bixhPXRoaXMuX2dldEZvcm1hdENvbmZpZyh0KTt0cnl7bz10aGlzLnBhcnNlRGF0ZShpLHMsYSl8fG59Y2F0Y2godCl7cz1lP1wiXCI6c310LnNlbGVjdGVkRGF5PW8uZ2V0RGF0ZSgpLHQuZHJhd01vbnRoPXQuc2VsZWN0ZWRNb250aD1vLmdldE1vbnRoKCksdC5kcmF3WWVhcj10LnNlbGVjdGVkWWVhcj1vLmdldEZ1bGxZZWFyKCksdC5jdXJyZW50RGF5PXM/by5nZXREYXRlKCk6MCx0LmN1cnJlbnRNb250aD1zP28uZ2V0TW9udGgoKTowLHQuY3VycmVudFllYXI9cz9vLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZSh0KX19LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgodCx0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsXCJkZWZhdWx0RGF0ZVwiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihlLGkscyl7dmFyIG49bnVsbD09aXx8XCJcIj09PWk/czpcInN0cmluZ1wiPT10eXBlb2YgaT9mdW5jdGlvbihpKXt0cnl7cmV0dXJuIHQuZGF0ZXBpY2tlci5wYXJzZURhdGUodC5kYXRlcGlja2VyLl9nZXQoZSxcImRhdGVGb3JtYXRcIiksaSx0LmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhlKSl9Y2F0Y2godCl7fWZvcih2YXIgcz0oaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pP3QuZGF0ZXBpY2tlci5fZ2V0RGF0ZShlKTpudWxsKXx8bmV3IERhdGUsbj1zLmdldEZ1bGxZZWFyKCksbz1zLmdldE1vbnRoKCksYT1zLmdldERhdGUoKSxyPS8oWytcXC1dP1swLTldKylcXHMqKGR8RHx3fFd8bXxNfHl8WSk/L2csaD1yLmV4ZWMoaSk7aDspe3N3aXRjaChoWzJdfHxcImRcIil7Y2FzZVwiZFwiOmNhc2VcIkRcIjphKz1wYXJzZUludChoWzFdLDEwKTticmVhaztjYXNlXCJ3XCI6Y2FzZVwiV1wiOmErPTcqcGFyc2VJbnQoaFsxXSwxMCk7YnJlYWs7Y2FzZVwibVwiOmNhc2VcIk1cIjpvKz1wYXJzZUludChoWzFdLDEwKSxhPU1hdGgubWluKGEsdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLG8pKTticmVhaztjYXNlXCJ5XCI6Y2FzZVwiWVwiOm4rPXBhcnNlSW50KGhbMV0sMTApLGE9TWF0aC5taW4oYSx0LmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKG4sbykpfWg9ci5leGVjKGkpfXJldHVybiBuZXcgRGF0ZShuLG8sYSl9KGkpOlwibnVtYmVyXCI9PXR5cGVvZiBpP2lzTmFOKGkpP3M6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIGUuc2V0RGF0ZShlLmdldERhdGUoKSt0KSxlfShpKTpuZXcgRGF0ZShpLmdldFRpbWUoKSk7cmV0dXJuIG49biYmXCJJbnZhbGlkIERhdGVcIj09PW4udG9TdHJpbmcoKT9zOm4sbiYmKG4uc2V0SG91cnMoMCksbi5zZXRNaW51dGVzKDApLG4uc2V0U2Vjb25kcygwKSxuLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qobil9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbih0KXtyZXR1cm4gdD8odC5zZXRIb3Vycyh0LmdldEhvdXJzKCk+MTI/dC5nZXRIb3VycygpKzI6MCksdCk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPSFlLG49dC5zZWxlY3RlZE1vbnRoLG89dC5zZWxlY3RlZFllYXIsYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RldGVybWluZURhdGUodCxlLG5ldyBEYXRlKSk7dC5zZWxlY3RlZERheT10LmN1cnJlbnREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPXQuY3VycmVudE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPXQuY3VycmVudFllYXI9YS5nZXRGdWxsWWVhcigpLG49PT10LnNlbGVjdGVkTW9udGgmJm89PT10LnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpLHRoaXMuX2FkanVzdEluc3REYXRlKHQpLHQuaW5wdXQmJnQuaW5wdXQudmFsKHM/XCJcIjp0aGlzLl9mb3JtYXREYXRlKHQpKX0sX2dldERhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIXQuY3VycmVudFllYXJ8fHQuaW5wdXQmJlwiXCI9PT10LmlucHV0LnZhbCgpP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodC5jdXJyZW50WWVhcix0LmN1cnJlbnRNb250aCx0LmN1cnJlbnREYXkpKX0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2dldChlLFwic3RlcE1vbnRoc1wiKSxzPVwiI1wiK2UuaWQucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIik7ZS5kcERpdi5maW5kKFwiW2RhdGEtaGFuZGxlcl1cIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSxcIk1cIil9LG5leHQ6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywraSxcIk1cIil9LGhpZGU6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9nb3RvVG9kYXkocyl9LHNlbGVjdERheTpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdERheShzLCt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9udGhcIiksK3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS15ZWFyXCIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsXCJNXCIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKHMsdGhpcyxcIllcIiksITF9fTt0KHRoaXMpLm9uKHRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1ldmVudFwiKSxlW3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1oYW5kbGVyXCIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbih0KXt2YXIgZSxpLHMsbixvLGEscixoLGwsYyx1LGQscCxmLGcsbSxfLHYsYix5LHcsayx4LEMsRCxJLFQsUCxNLFMsSCx6LE8sQSxOLFcsRSxGLEwsUj1uZXcgRGF0ZSxCPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKFIuZ2V0RnVsbFllYXIoKSxSLmdldE1vbnRoKCksUi5nZXREYXRlKCkpKSxZPXRoaXMuX2dldCh0LFwiaXNSVExcIiksaj10aGlzLl9nZXQodCxcInNob3dCdXR0b25QYW5lbFwiKSxxPXRoaXMuX2dldCh0LFwiaGlkZUlmTm9QcmV2TmV4dFwiKSxLPXRoaXMuX2dldCh0LFwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdFwiKSxVPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLFY9dGhpcy5fZ2V0KHQsXCJzaG93Q3VycmVudEF0UG9zXCIpLCQ9dGhpcy5fZ2V0KHQsXCJzdGVwTW9udGhzXCIpLFg9MSE9PVVbMF18fDEhPT1VWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QodC5jdXJyZW50RGF5P25ldyBEYXRlKHQuY3VycmVudFllYXIsdC5jdXJyZW50TW9udGgsdC5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFE9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWluXCIpLEo9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWF4XCIpLFo9dC5kcmF3TW9udGgtVix0dD10LmRyYXdZZWFyO2lmKFo8MCYmKForPTEyLHR0LS0pLEopZm9yKGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoSi5nZXRGdWxsWWVhcigpLEouZ2V0TW9udGgoKS1VWzBdKlVbMV0rMSxKLmdldERhdGUoKSkpLGU9USYmZTxRP1E6ZTt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaLDEpKT5lOyktLVo8MCYmKFo9MTEsdHQtLSk7Zm9yKHQuZHJhd01vbnRoPVosdC5kcmF3WWVhcj10dCxpPXRoaXMuX2dldCh0LFwicHJldlRleHRcIiksaT1LP3RoaXMuZm9ybWF0RGF0ZShpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHR0LFotJCwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTppLHM9dGhpcy5fY2FuQWRqdXN0TW9udGgodCwtMSx0dCxaKT9cIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdwcmV2JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9J1wiK2krXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhZP1wiZVwiOlwid1wiKStcIic+XCIraStcIjwvc3Bhbj48L2E+XCI6cT9cIlwiOlwiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nXCIraStcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKFk/XCJlXCI6XCJ3XCIpK1wiJz5cIitpK1wiPC9zcGFuPjwvYT5cIixuPXRoaXMuX2dldCh0LFwibmV4dFRleHRcIiksbj1LP3RoaXMuZm9ybWF0RGF0ZShuLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHR0LForJCwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTpuLG89dGhpcy5fY2FuQWRqdXN0TW9udGgodCwxLHR0LFopP1wiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nXCIrbitcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKFk/XCJ3XCI6XCJlXCIpK1wiJz5cIituK1wiPC9zcGFuPjwvYT5cIjpxP1wiXCI6XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSdcIituK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoWT9cIndcIjpcImVcIikrXCInPlwiK24rXCI8L3NwYW4+PC9hPlwiLGE9dGhpcy5fZ2V0KHQsXCJjdXJyZW50VGV4dFwiKSxyPXRoaXMuX2dldCh0LFwiZ290b0N1cnJlbnRcIikmJnQuY3VycmVudERheT9HOkIsYT1LP3RoaXMuZm9ybWF0RGF0ZShhLHIsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTphLGg9dC5pbmxpbmU/XCJcIjpcIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdoaWRlJyBkYXRhLWV2ZW50PSdjbGljayc+XCIrdGhpcy5fZ2V0KHQsXCJjbG9zZVRleHRcIikrXCI8L2J1dHRvbj5cIixsPWo/XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPlwiKyhZP2g6XCJcIikrKHRoaXMuX2lzSW5SYW5nZSh0LHIpP1wiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSd0b2RheScgZGF0YS1ldmVudD0nY2xpY2snPlwiK2ErXCI8L2J1dHRvbj5cIjpcIlwiKSsoWT9cIlwiOmgpK1wiPC9kaXY+XCI6XCJcIixjPXBhcnNlSW50KHRoaXMuX2dldCh0LFwiZmlyc3REYXlcIiksMTApLGM9aXNOYU4oYyk/MDpjLHU9dGhpcy5fZ2V0KHQsXCJzaG93V2Vla1wiKSxkPXRoaXMuX2dldCh0LFwiZGF5TmFtZXNcIikscD10aGlzLl9nZXQodCxcImRheU5hbWVzTWluXCIpLGY9dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzXCIpLGc9dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzU2hvcnRcIiksbT10aGlzLl9nZXQodCxcImJlZm9yZVNob3dEYXlcIiksXz10aGlzLl9nZXQodCxcInNob3dPdGhlck1vbnRoc1wiKSx2PXRoaXMuX2dldCh0LFwic2VsZWN0T3RoZXJNb250aHNcIiksYj10aGlzLl9nZXREZWZhdWx0RGF0ZSh0KSx5PVwiXCIsaz0wO2s8VVswXTtrKyspe2Zvcih4PVwiXCIsdGhpcy5tYXhSb3dzPTQsQz0wO0M8VVsxXTtDKyspe2lmKEQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWix0LnNlbGVjdGVkRGF5KSksST1cIiB1aS1jb3JuZXItYWxsXCIsVD1cIlwiLFgpe2lmKFQrPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1ncm91cFwiLFVbMV0+MSlzd2l0Y2goQyl7Y2FzZSAwOlQrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3RcIixJPVwiIHVpLWNvcm5lci1cIisoWT9cInJpZ2h0XCI6XCJsZWZ0XCIpO2JyZWFrO2Nhc2UgVVsxXS0xOlQrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdFwiLEk9XCIgdWktY29ybmVyLVwiKyhZP1wibGVmdFwiOlwicmlnaHRcIik7YnJlYWs7ZGVmYXVsdDpUKz1cIiB1aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZVwiLEk9XCJcIn1UKz1cIic+XCJ9Zm9yKFQrPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXhcIitJK1wiJz5cIisoL2FsbHxsZWZ0Ly50ZXN0KEkpJiYwPT09az9ZP286czpcIlwiKSsoL2FsbHxyaWdodC8udGVzdChJKSYmMD09PWs/WT9zOm86XCJcIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIodCxaLHR0LFEsSixrPjB8fEM+MCxmLGcpK1wiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+PHRyPlwiLFA9dT9cIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KHQsXCJ3ZWVrSGVhZGVyXCIpK1wiPC90aD5cIjpcIlwiLHc9MDt3PDc7dysrKU09KHcrYyklNyxQKz1cIjx0aCBzY29wZT0nY29sJ1wiKygodytjKzYpJTc+PTU/XCIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnXCI6XCJcIikrXCI+PHNwYW4gdGl0bGU9J1wiK2RbTV0rXCInPlwiK3BbTV0rXCI8L3NwYW4+PC90aD5cIjtmb3IoVCs9UCtcIjwvdHI+PC90aGVhZD48dGJvZHk+XCIsUz10aGlzLl9nZXREYXlzSW5Nb250aCh0dCxaKSx0dD09PXQuc2VsZWN0ZWRZZWFyJiZaPT09dC5zZWxlY3RlZE1vbnRoJiYodC5zZWxlY3RlZERheT1NYXRoLm1pbih0LnNlbGVjdGVkRGF5LFMpKSxIPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgodHQsWiktYys3KSU3LHo9TWF0aC5jZWlsKChIK1MpLzcpLE89WCYmdGhpcy5tYXhSb3dzPno/dGhpcy5tYXhSb3dzOnosdGhpcy5tYXhSb3dzPU8sQT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaLDEtSCkpLE49MDtOPE87TisrKXtmb3IoVCs9XCI8dHI+XCIsVz11P1wiPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz5cIit0aGlzLl9nZXQodCxcImNhbGN1bGF0ZVdlZWtcIikoQSkrXCI8L3RkPlwiOlwiXCIsdz0wO3c8Nzt3KyspRT1tP20uYXBwbHkodC5pbnB1dD90LmlucHV0WzBdOm51bGwsW0FdKTpbITAsXCJcIl0sRj1BLmdldE1vbnRoKCkhPT1aLEw9RiYmIXZ8fCFFWzBdfHxRJiZBPFF8fEomJkE+SixXKz1cIjx0ZCBjbGFzcz0nXCIrKCh3K2MrNiklNz49NT9cIiB1aS1kYXRlcGlja2VyLXdlZWstZW5kXCI6XCJcIikrKEY/XCIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aFwiOlwiXCIpKyhBLmdldFRpbWUoKT09PUQuZ2V0VGltZSgpJiZaPT09dC5zZWxlY3RlZE1vbnRoJiZ0Ll9rZXlFdmVudHx8Yi5nZXRUaW1lKCk9PT1BLmdldFRpbWUoKSYmYi5nZXRUaW1lKCk9PT1ELmdldFRpbWUoKT9cIiBcIit0aGlzLl9kYXlPdmVyQ2xhc3M6XCJcIikrKEw/XCIgXCIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrXCIgdWktc3RhdGUtZGlzYWJsZWRcIjpcIlwiKSsoRiYmIV8/XCJcIjpcIiBcIitFWzFdKyhBLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpP1wiIFwiK3RoaXMuX2N1cnJlbnRDbGFzczpcIlwiKSsoQS5nZXRUaW1lKCk9PT1CLmdldFRpbWUoKT9cIiB1aS1kYXRlcGlja2VyLXRvZGF5XCI6XCJcIikpK1wiJ1wiKyhGJiYhX3x8IUVbMl0/XCJcIjpcIiB0aXRsZT0nXCIrRVsyXS5yZXBsYWNlKC8nL2csXCImIzM5O1wiKStcIidcIikrKEw/XCJcIjpcIiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9J1wiK0EuZ2V0TW9udGgoKStcIicgZGF0YS15ZWFyPSdcIitBLmdldEZ1bGxZZWFyKCkrXCInXCIpK1wiPlwiKyhGJiYhXz9cIiYjeGEwO1wiOkw/XCI8c3BhbiBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCc+XCIrQS5nZXREYXRlKCkrXCI8L3NwYW4+XCI6XCI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdFwiKyhBLmdldFRpbWUoKT09PUIuZ2V0VGltZSgpP1wiIHVpLXN0YXRlLWhpZ2hsaWdodFwiOlwiXCIpKyhBLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpP1wiIHVpLXN0YXRlLWFjdGl2ZVwiOlwiXCIpKyhGP1wiIHVpLXByaW9yaXR5LXNlY29uZGFyeVwiOlwiXCIpK1wiJyBocmVmPScjJz5cIitBLmdldERhdGUoKStcIjwvYT5cIikrXCI8L3RkPlwiLEEuc2V0RGF0ZShBLmdldERhdGUoKSsxKSxBPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEEpO1QrPVcrXCI8L3RyPlwifVorKyxaPjExJiYoWj0wLHR0KyspLFQrPVwiPC90Ym9keT48L3RhYmxlPlwiKyhYP1wiPC9kaXY+XCIrKFVbMF0+MCYmQz09PVVbMV0tMT9cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItcm93LWJyZWFrJz48L2Rpdj5cIjpcIlwiKTpcIlwiKSx4Kz1UfXkrPXh9cmV0dXJuIHkrPWwsdC5fa2V5RXZlbnQ9ITEseX0sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKHQsZSxpLHMsbixvLGEscil7dmFyIGgsbCxjLHUsZCxwLGYsZyxtPXRoaXMuX2dldCh0LFwiY2hhbmdlTW9udGhcIiksXz10aGlzLl9nZXQodCxcImNoYW5nZVllYXJcIiksdj10aGlzLl9nZXQodCxcInNob3dNb250aEFmdGVyWWVhclwiKSxiPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+XCIseT1cIlwiO2lmKG98fCFtKXkrPVwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPlwiK2FbZV0rXCI8L3NwYW4+XCI7ZWxzZXtmb3IoaD1zJiZzLmdldEZ1bGxZZWFyKCk9PT1pLGw9biYmbi5nZXRGdWxsWWVhcigpPT09aSx5Kz1cIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+XCIsYz0wO2M8MTI7YysrKSghaHx8Yz49cy5nZXRNb250aCgpKSYmKCFsfHxjPD1uLmdldE1vbnRoKCkpJiYoeSs9XCI8b3B0aW9uIHZhbHVlPSdcIitjK1wiJ1wiKyhjPT09ZT9cIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCI6XCJcIikrXCI+XCIrcltjXStcIjwvb3B0aW9uPlwiKTt5Kz1cIjwvc2VsZWN0PlwifWlmKHZ8fChiKz15KyghbyYmbSYmXz9cIlwiOlwiJiN4YTA7XCIpKSwhdC55ZWFyc2h0bWwpaWYodC55ZWFyc2h0bWw9XCJcIixvfHwhXyliKz1cIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPlwiK2krXCI8L3NwYW4+XCI7ZWxzZXtmb3IodT10aGlzLl9nZXQodCxcInllYXJSYW5nZVwiKS5zcGxpdChcIjpcIiksZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkscD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9jWytcXC1dLiovKT9pK3BhcnNlSW50KHQuc3Vic3RyaW5nKDEpLDEwKTp0Lm1hdGNoKC9bK1xcLV0uKi8pP2QrcGFyc2VJbnQodCwxMCk6cGFyc2VJbnQodCwxMCk7cmV0dXJuIGlzTmFOKGUpP2Q6ZX0sZj1wKHVbMF0pLGc9TWF0aC5tYXgoZixwKHVbMV18fFwiXCIpKSxmPXM/TWF0aC5tYXgoZixzLmdldEZ1bGxZZWFyKCkpOmYsZz1uP01hdGgubWluKGcsbi5nZXRGdWxsWWVhcigpKTpnLHQueWVhcnNodG1sKz1cIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcicgZGF0YS1oYW5kbGVyPSdzZWxlY3RZZWFyJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiO2Y8PWc7ZisrKXQueWVhcnNodG1sKz1cIjxvcHRpb24gdmFsdWU9J1wiK2YrXCInXCIrKGY9PT1pP1wiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIjpcIlwiKStcIj5cIitmK1wiPC9vcHRpb24+XCI7dC55ZWFyc2h0bWwrPVwiPC9zZWxlY3Q+XCIsYis9dC55ZWFyc2h0bWwsdC55ZWFyc2h0bWw9bnVsbH1yZXR1cm4gYis9dGhpcy5fZ2V0KHQsXCJ5ZWFyU3VmZml4XCIpLHYmJihiKz0oIW8mJm0mJl8/XCJcIjpcIiYjeGEwO1wiKSt5KSxiKz1cIjwvZGl2PlwifSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXQuc2VsZWN0ZWRZZWFyKyhcIllcIj09PWk/ZTowKSxuPXQuc2VsZWN0ZWRNb250aCsoXCJNXCI9PT1pP2U6MCksbz1NYXRoLm1pbih0LnNlbGVjdGVkRGF5LHRoaXMuX2dldERheXNJbk1vbnRoKHMsbikpKyhcIkRcIj09PWk/ZTowKSxhPXRoaXMuX3Jlc3RyaWN0TWluTWF4KHQsdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxuLG8pKSk7dC5zZWxlY3RlZERheT1hLmdldERhdGUoKSx0LmRyYXdNb250aD10LnNlbGVjdGVkTW9udGg9YS5nZXRNb250aCgpLHQuZHJhd1llYXI9dC5zZWxlY3RlZFllYXI9YS5nZXRGdWxsWWVhcigpLFwiTVwiIT09aSYmXCJZXCIhPT1pfHx0aGlzLl9ub3RpZnlDaGFuZ2UodCl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1pblwiKSxzPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1heFwiKSxuPWkmJmU8aT9pOmU7cmV0dXJuIHMmJm4+cz9zOm59LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsXCJvbkNoYW5nZU1vbnRoWWVhclwiKTtlJiZlLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFt0LnNlbGVjdGVkWWVhcix0LnNlbGVjdGVkTW9udGgrMSx0XSl9LF9nZXROdW1iZXJPZk1vbnRoczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXQodCxcIm51bWJlck9mTW9udGhzXCIpO3JldHVybiBudWxsPT1lP1sxLDFdOlwibnVtYmVyXCI9PXR5cGVvZiBlP1sxLGVdOmV9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUodCx0aGlzLl9nZXQodCxlK1wiRGF0ZVwiKSxudWxsKX0sX2dldERheXNJbk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIDMyLXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQsZSwzMikpLmdldERhdGUoKX0sX2dldEZpcnN0RGF5T2ZNb250aDpmdW5jdGlvbih0LGUpe3JldHVybiBuZXcgRGF0ZSh0LGUsMSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbih0LGUsaSxzKXt2YXIgbj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyh0KSxvPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGkscysoZTwwP2U6blswXSpuWzFdKSwxKSk7cmV0dXJuIGU8MCYmby5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKG8uZ2V0RnVsbFllYXIoKSxvLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UodCxvKX0sX2lzSW5SYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtaW5cIiksbz10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtYXhcIiksYT1udWxsLHI9bnVsbCxoPXRoaXMuX2dldCh0LFwieWVhclJhbmdlXCIpO3JldHVybiBoJiYoaT1oLnNwbGl0KFwiOlwiKSxzPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxhPXBhcnNlSW50KGlbMF0sMTApLHI9cGFyc2VJbnQoaVsxXSwxMCksaVswXS5tYXRjaCgvWytcXC1dLiovKSYmKGErPXMpLGlbMV0ubWF0Y2goL1srXFwtXS4qLykmJihyKz1zKSksKCFufHxlLmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIW98fGUuZ2V0VGltZSgpPD1vLmdldFRpbWUoKSkmJighYXx8ZS5nZXRGdWxsWWVhcigpPj1hKSYmKCFyfHxlLmdldEZ1bGxZZWFyKCk8PXIpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LFwic2hvcnRZZWFyQ3V0b2ZmXCIpO3JldHVybiBlPVwic3RyaW5nXCIhPXR5cGVvZiBlP2U6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChlLDEwKSx7c2hvcnRZZWFyQ3V0b2ZmOmUsZGF5TmFtZXNTaG9ydDp0aGlzLl9nZXQodCxcImRheU5hbWVzU2hvcnRcIiksZGF5TmFtZXM6dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc1wiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzU2hvcnRcIiksbW9udGhOYW1lczp0aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNcIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUsaSxzKXtlfHwodC5jdXJyZW50RGF5PXQuc2VsZWN0ZWREYXksdC5jdXJyZW50TW9udGg9dC5zZWxlY3RlZE1vbnRoLHQuY3VycmVudFllYXI9dC5zZWxlY3RlZFllYXIpO3ZhciBuPWU/XCJvYmplY3RcIj09dHlwZW9mIGU/ZTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShzLGksZSkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQuY3VycmVudFllYXIsdC5jdXJyZW50TW9udGgsdC5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQodCxcImRhdGVGb3JtYXRcIiksbix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpfX0pLHQuZm4uZGF0ZXBpY2tlcj1mdW5jdGlvbihlKXtpZighdGhpcy5sZW5ndGgpcmV0dXJuIHRoaXM7dC5kYXRlcGlja2VyLmluaXRpYWxpemVkfHwodChkb2N1bWVudCkub24oXCJtb3VzZWRvd25cIix0LmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljayksdC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSEwKSwwPT09dChcIiNcIit0LmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RoJiZ0KFwiYm9keVwiKS5hcHBlbmQodC5kYXRlcGlja2VyLmRwRGl2KTt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGV8fFwiaXNEaXNhYmxlZFwiIT09ZSYmXCJnZXREYXRlXCIhPT1lJiZcIndpZGdldFwiIT09ZT9cIm9wdGlvblwiPT09ZSYmMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBhcmd1bWVudHNbMV0/dC5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXtcInN0cmluZ1wiPT10eXBlb2YgZT90LmRhdGVwaWNrZXJbXCJfXCIrZStcIkRhdGVwaWNrZXJcIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQoaSkpOnQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGUpfSk6dC5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KGkpKX0sdC5kYXRlcGlja2VyPW5ldyBzLHQuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMSx0LmRhdGVwaWNrZXIudXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSx0LmRhdGVwaWNrZXIudmVyc2lvbj1cIjEuMTIuMVwiO3ZhciBmPSh0LmRhdGVwaWNrZXIsdC51aS5pZT0hIS9tc2llIFtcXHcuXSsvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSwhMSk7dChkb2N1bWVudCkub24oXCJtb3VzZXVwXCIsZnVuY3Rpb24oKXtmPSExfSk7dC53aWRnZXQoXCJ1aS5tb3VzZVwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7Y2FuY2VsOlwiaW5wdXQsIHRleHRhcmVhLCBidXR0b24sIHNlbGVjdCwgb3B0aW9uXCIsZGlzdGFuY2U6MSxkZWxheTowfSxfbW91c2VJbml0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmVsZW1lbnQub24oXCJtb3VzZWRvd24uXCIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKHQpe3JldHVybiBlLl9tb3VzZURvd24odCl9KS5vbihcImNsaWNrLlwiK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihpKXtpZighMD09PXQuZGF0YShpLnRhcmdldCxlLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIikpcmV0dXJuIHQucmVtb3ZlRGF0YShpLnRhcmdldCxlLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIiksaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMX0pLHRoaXMuc3RhcnRlZD0hMX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5vZmYoXCIuXCIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmdGhpcy5kb2N1bWVudC5vZmYoXCJtb3VzZW1vdmUuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5vZmYoXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpfSxfbW91c2VEb3duOmZ1bmN0aW9uKGUpe2lmKCFmKXt0aGlzLl9tb3VzZU1vdmVkPSExLHRoaXMuX21vdXNlU3RhcnRlZCYmdGhpcy5fbW91c2VVcChlKSx0aGlzLl9tb3VzZURvd25FdmVudD1lO3ZhciBpPXRoaXMscz0xPT09ZS53aGljaCxuPSEoXCJzdHJpbmdcIiE9dHlwZW9mIHRoaXMub3B0aW9ucy5jYW5jZWx8fCFlLnRhcmdldC5ub2RlTmFtZSkmJnQoZS50YXJnZXQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLmNhbmNlbCkubGVuZ3RoO3JldHVybiEocyYmIW4mJnRoaXMuX21vdXNlQ2FwdHVyZShlKSl8fCh0aGlzLm1vdXNlRGVsYXlNZXQ9IXRoaXMub3B0aW9ucy5kZWxheSx0aGlzLm1vdXNlRGVsYXlNZXR8fCh0aGlzLl9tb3VzZURlbGF5VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2kubW91c2VEZWxheU1ldD0hMH0sdGhpcy5vcHRpb25zLmRlbGF5KSksdGhpcy5fbW91c2VEaXN0YW5jZU1ldChlKSYmdGhpcy5fbW91c2VEZWxheU1ldChlKSYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSE9PXRoaXMuX21vdXNlU3RhcnQoZSksIXRoaXMuX21vdXNlU3RhcnRlZCk/KGUucHJldmVudERlZmF1bHQoKSwhMCk6KCEwPT09dC5kYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSYmdC5yZW1vdmVEYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbW91c2VNb3ZlKHQpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21vdXNlVXAodCl9LHRoaXMuZG9jdW1lbnQub24oXCJtb3VzZW1vdmUuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5vbihcIm1vdXNldXAuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksZS5wcmV2ZW50RGVmYXVsdCgpLGY9ITAsITApKX19LF9tb3VzZU1vdmU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fbW91c2VNb3ZlZCl7aWYodC51aS5pZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw5KSYmIWUuYnV0dG9uKXJldHVybiB0aGlzLl9tb3VzZVVwKGUpO2lmKCFlLndoaWNoKWlmKGUub3JpZ2luYWxFdmVudC5hbHRLZXl8fGUub3JpZ2luYWxFdmVudC5jdHJsS2V5fHxlLm9yaWdpbmFsRXZlbnQubWV0YUtleXx8ZS5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5KXRoaXMuaWdub3JlTWlzc2luZ1doaWNoPSEwO2Vsc2UgaWYoIXRoaXMuaWdub3JlTWlzc2luZ1doaWNoKXJldHVybiB0aGlzLl9tb3VzZVVwKGUpfXJldHVybihlLndoaWNofHxlLmJ1dHRvbikmJih0aGlzLl9tb3VzZU1vdmVkPSEwKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/KHRoaXMuX21vdXNlRHJhZyhlKSxlLnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGUpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGUpJiYodGhpcy5fbW91c2VTdGFydGVkPSExIT09dGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCxlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/dGhpcy5fbW91c2VEcmFnKGUpOnRoaXMuX21vdXNlVXAoZSkpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpfSxfbW91c2VVcDpmdW5jdGlvbihlKXt0aGlzLmRvY3VtZW50Lm9mZihcIm1vdXNlbW92ZS5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLm9mZihcIm1vdXNldXAuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdGhpcy5fbW91c2VTdGFydGVkJiYodGhpcy5fbW91c2VTdGFydGVkPSExLGUudGFyZ2V0PT09dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0JiZ0LmRhdGEoZS50YXJnZXQsdGhpcy53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIsITApLHRoaXMuX21vdXNlU3RvcChlKSksdGhpcy5fbW91c2VEZWxheVRpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlRGVsYXlUaW1lciksZGVsZXRlIHRoaXMuX21vdXNlRGVsYXlUaW1lciksdGhpcy5pZ25vcmVNaXNzaW5nV2hpY2g9ITEsZj0hMSxlLnByZXZlbnREZWZhdWx0KCl9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC10LnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS10LnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiEwfX0pLHQudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG89dC51aVtlXS5wcm90b3R5cGU7Zm9yKG4gaW4gcylvLnBsdWdpbnNbbl09by5wbHVnaW5zW25dfHxbXSxvLnBsdWdpbnNbbl0ucHVzaChbaSxzW25dXSl9LGNhbGw6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG4sbz10LnBsdWdpbnNbZV07aWYobyYmKHN8fHQuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PXQuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3Iobj0wO248by5sZW5ndGg7bisrKXQub3B0aW9uc1tvW25dWzBdXSYmb1tuXVsxXS5hcHBseSh0LmVsZW1lbnQsaSl9fSx0LnVpLnNhZmVCbHVyPWZ1bmN0aW9uKGUpe2UmJlwiYm9keVwiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZ0KGUpLnRyaWdnZXIoXCJibHVyXCIpfTt0LndpZGdldChcInVpLmRyYWdnYWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcImRyYWdcIixvcHRpb25zOnthZGRDbGFzc2VzOiEwLGFwcGVuZFRvOlwicGFyZW50XCIsYXhpczohMSxjb25uZWN0VG9Tb3J0YWJsZTohMSxjb250YWlubWVudDohMSxjdXJzb3I6XCJhdXRvXCIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOlwib3JpZ2luYWxcIixpZnJhbWVGaXg6ITEsb3BhY2l0eTohMSxyZWZyZXNoUG9zaXRpb25zOiExLHJldmVydDohMSxyZXZlcnREdXJhdGlvbjo1MDAsc2NvcGU6XCJkZWZhdWx0XCIsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ITEsc25hcE1vZGU6XCJib3RoXCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7XCJvcmlnaW5hbFwiPT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5fc2V0UG9zaXRpb25SZWxhdGl2ZSgpLHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzJiZ0aGlzLl9hZGRDbGFzcyhcInVpLWRyYWdnYWJsZVwiKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9tb3VzZUluaXQoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3N1cGVyKHQsZSksXCJoYW5kbGVcIj09PXQmJih0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7aWYoKHRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQpLmlzKFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKSlyZXR1cm4gdm9pZCh0aGlzLmRlc3Ryb3lPbkNsZWFyPSEwKTt0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuISh0aGlzLmhlbHBlcnx8aS5kaXNhYmxlZHx8dChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIpLmxlbmd0aD4wKSYmKHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZShlKSwhIXRoaXMuaGFuZGxlJiYodGhpcy5fYmx1ckFjdGl2ZUVsZW1lbnQoZSksdGhpcy5fYmxvY2tGcmFtZXMoITA9PT1pLmlmcmFtZUZpeD9cImlmcmFtZVwiOmkuaWZyYW1lRml4KSwhMCkpfSxfYmxvY2tGcmFtZXM6ZnVuY3Rpb24oZSl7dGhpcy5pZnJhbWVCbG9ja3M9dGhpcy5kb2N1bWVudC5maW5kKGUpLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIHQoXCI8ZGl2PlwiKS5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIikuYXBwZW5kVG8oZS5wYXJlbnQoKSkub3V0ZXJXaWR0aChlLm91dGVyV2lkdGgoKSkub3V0ZXJIZWlnaHQoZS5vdXRlckhlaWdodCgpKS5vZmZzZXQoZS5vZmZzZXQoKSlbMF19KX0sX3VuYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2NrcyYmKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcyl9LF9ibHVyQWN0aXZlRWxlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pO3QoZS50YXJnZXQpLmNsb3Nlc3QoaSkubGVuZ3RofHx0LnVpLnNhZmVCbHVyKGkpfSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcihlKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcixcInVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdC51aS5kZG1hbmFnZXImJih0LnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuY3NzUG9zaXRpb249dGhpcy5oZWxwZXIuY3NzKFwicG9zaXRpb25cIiksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCEwKSx0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKSx0aGlzLmhhc0ZpeGVkQW5jZXN0b3I9dGhpcy5oZWxwZXIucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVyblwiZml4ZWRcIj09PXQodGhpcykuY3NzKFwicG9zaXRpb25cIil9KS5sZW5ndGg+MCx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLl9yZWZyZXNoT2Zmc2V0cyhlKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUsITEpLHRoaXMub3JpZ2luYWxQYWdlWD1lLnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT1lLnBhZ2VZLGkuY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoaS5jdXJzb3JBdCksdGhpcy5fc2V0Q29udGFpbm1lbnQoKSwhMT09PXRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLGUpPyh0aGlzLl9jbGVhcigpLCExKToodGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHQudWkuZGRtYW5hZ2VyJiYhaS5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGUpLHRoaXMuX21vdXNlRHJhZyhlLCEwKSx0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZ1N0YXJ0KHRoaXMsZSksITApfSxfcmVmcmVzaE9mZnNldHM6ZnVuY3Rpb24odCl7dGhpcy5vZmZzZXQ9e3RvcDp0aGlzLnBvc2l0aW9uQWJzLnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0LHNjcm9sbDohMSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0sdGhpcy5vZmZzZXQuY2xpY2s9e2xlZnQ6dC5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDp0LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH19LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSxpKXtpZih0aGlzLmhhc0ZpeGVkQW5jZXN0b3ImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpLHRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlLCEwKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIiksIWkpe3ZhciBzPXRoaXMuX3VpSGFzaCgpO2lmKCExPT09dGhpcy5fdHJpZ2dlcihcImRyYWdcIixlLHMpKXJldHVybiB0aGlzLl9tb3VzZVVwKG5ldyB0LkV2ZW50KFwibW91c2V1cFwiLGUpKSwhMTt0aGlzLnBvc2l0aW9uPXMucG9zaXRpb259cmV0dXJuIHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0K1wicHhcIix0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArXCJweFwiLHQudWkuZGRtYW5hZ2VyJiZ0LnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsZSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxzPSExO3JldHVybiB0LnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiYocz10LnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsZSkpLHRoaXMuZHJvcHBlZCYmKHM9dGhpcy5kcm9wcGVkLHRoaXMuZHJvcHBlZD0hMSksXCJpbnZhbGlkXCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8XCJ2YWxpZFwiPT09dGhpcy5vcHRpb25zLnJldmVydCYmc3x8ITA9PT10aGlzLm9wdGlvbnMucmV2ZXJ0fHx0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnJldmVydCkmJnRoaXMub3B0aW9ucy5yZXZlcnQuY2FsbCh0aGlzLmVsZW1lbnQscyk/dCh0aGlzLmhlbHBlcikuYW5pbWF0ZSh0aGlzLm9yaWdpbmFsUG9zaXRpb24scGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydER1cmF0aW9uLDEwKSxmdW5jdGlvbigpeyExIT09aS5fdHJpZ2dlcihcInN0b3BcIixlKSYmaS5fY2xlYXIoKX0pOiExIT09dGhpcy5fdHJpZ2dlcihcInN0b3BcIixlKSYmdGhpcy5fY2xlYXIoKSwhMX0sX21vdXNlVXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3VuYmxvY2tGcmFtZXMoKSx0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyxlKSx0aGlzLmhhbmRsZUVsZW1lbnQuaXMoZS50YXJnZXQpJiZ0aGlzLmVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLHQudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcyxlKX0sY2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVscGVyLmlzKFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKT90aGlzLl9tb3VzZVVwKG5ldyB0LkV2ZW50KFwibW91c2V1cFwiLHt0YXJnZXQ6dGhpcy5lbGVtZW50WzBdfSkpOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5vcHRpb25zLmhhbmRsZXx8ISF0KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oYW5kbGUpKS5sZW5ndGh9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZUVsZW1lbnQ9dGhpcy5vcHRpb25zLmhhbmRsZT90aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGFuZGxlKTp0aGlzLmVsZW1lbnQsdGhpcy5fYWRkQ2xhc3ModGhpcy5oYW5kbGVFbGVtZW50LFwidWktZHJhZ2dhYmxlLWhhbmRsZVwiKX0sX3JlbW92ZUhhbmRsZUNsYXNzTmFtZTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaGFuZGxlRWxlbWVudCxcInVpLWRyYWdnYWJsZS1oYW5kbGVcIil9LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dC5pc0Z1bmN0aW9uKGkuaGVscGVyKSxuPXM/dChpLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2VdKSk6XCJjbG9uZVwiPT09aS5oZWxwZXI/dGhpcy5lbGVtZW50LmNsb25lKCkucmVtb3ZlQXR0cihcImlkXCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gbi5wYXJlbnRzKFwiYm9keVwiKS5sZW5ndGh8fG4uYXBwZW5kVG8oXCJwYXJlbnRcIj09PWkuYXBwZW5kVG8/dGhpcy5lbGVtZW50WzBdLnBhcmVudE5vZGU6aS5hcHBlbmRUbykscyYmblswXT09PXRoaXMuZWxlbWVudFswXSYmdGhpcy5fc2V0UG9zaXRpb25SZWxhdGl2ZSgpLG5bMF09PT10aGlzLmVsZW1lbnRbMF18fC8oZml4ZWR8YWJzb2x1dGUpLy50ZXN0KG4uY3NzKFwicG9zaXRpb25cIikpfHxuLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKSxufSxfc2V0UG9zaXRpb25SZWxhdGl2ZTpmdW5jdGlvbigpey9eKD86cnxhfGYpLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSl8fCh0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKX0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoXCIgXCIpKSx0LmlzQXJyYXkoZSkmJihlPXtsZWZ0OitlWzBdLHRvcDorZVsxXXx8MH0pLFwibGVmdFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9ZS5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInJpZ2h0XCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLWUucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLFwidG9wXCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPWUudG9wK3RoaXMubWFyZ2lucy50b3ApLFwiYm90dG9tXCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWUuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfaXNSb290Tm9kZTpmdW5jdGlvbih0KXtyZXR1cm4vKGh0bWx8Ym9keSkvaS50ZXN0KHQudGFnTmFtZSl8fHQ9PT10aGlzLmRvY3VtZW50WzBdfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCksaT10aGlzLmRvY3VtZW50WzBdO3JldHVyblwiYWJzb2x1dGVcIj09PXRoaXMuY3NzUG9zaXRpb24mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09aSYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJihlLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSxcbmUudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksdGhpcy5faXNSb290Tm9kZSh0aGlzLm9mZnNldFBhcmVudFswXSkmJihlPXt0b3A6MCxsZWZ0OjB9KSx7dG9wOmUudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLGxlZnQ6ZS5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKFwicmVsYXRpdmVcIiE9PXRoaXMuY3NzUG9zaXRpb24pcmV0dXJue3RvcDowLGxlZnQ6MH07dmFyIHQ9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCksZT10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOnQudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJ0b3BcIiksMTApfHwwKSsoZT8wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSxsZWZ0OnQubGVmdC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwibGVmdFwiKSwxMCl8fDApKyhlPzA6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpKX19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcyhcIm1hcmdpbkxlZnRcIiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MCxyaWdodDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luUmlnaHRcIiksMTApfHwwLGJvdHRvbTpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luQm90dG9tXCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG49dGhpcy5vcHRpb25zLG89dGhpcy5kb2N1bWVudFswXTtyZXR1cm4gdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/XCJ3aW5kb3dcIj09PW4uY29udGFpbm1lbnQ/dm9pZCh0aGlzLmNvbnRhaW5tZW50PVt0KHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsdCh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLHQod2luZG93KS5zY3JvbGxMZWZ0KCkrdCh3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCx0KHdpbmRvdykuc2Nyb2xsVG9wKCkrKHQod2luZG93KS5oZWlnaHQoKXx8by5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSk6XCJkb2N1bWVudFwiPT09bi5jb250YWlubWVudD92b2lkKHRoaXMuY29udGFpbm1lbnQ9WzAsMCx0KG8pLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwodChvKS5oZWlnaHQoKXx8by5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSk6bi5jb250YWlubWVudC5jb25zdHJ1Y3Rvcj09PUFycmF5P3ZvaWQodGhpcy5jb250YWlubWVudD1uLmNvbnRhaW5tZW50KTooXCJwYXJlbnRcIj09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9dChuLmNvbnRhaW5tZW50KSx2b2lkKChzPWlbMF0pJiYoZT0vKHNjcm9sbHxhdXRvKS8udGVzdChpLmNzcyhcIm92ZXJmbG93XCIpKSx0aGlzLmNvbnRhaW5tZW50PVsocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nTGVmdFwiKSwxMCl8fDApLChwYXJzZUludChpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ1RvcFwiKSwxMCl8fDApLChlP01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyUmlnaHRXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChpLmNzcyhcInBhZGRpbmdSaWdodFwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQtdGhpcy5tYXJnaW5zLnJpZ2h0LChlP01hdGgubWF4KHMuc2Nyb2xsSGVpZ2h0LHMub2Zmc2V0SGVpZ2h0KTpzLm9mZnNldEhlaWdodCktKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcC10aGlzLm1hcmdpbnMuYm90dG9tXSx0aGlzLnJlbGF0aXZlQ29udGFpbmVyPWkpKSk6dm9pZCh0aGlzLmNvbnRhaW5tZW50PW51bGwpfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24odCxlKXtlfHwoZT10aGlzLnBvc2l0aW9uKTt2YXIgaT1cImFic29sdXRlXCI9PT10PzE6LTEscz10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKTtyZXR1cm57dG9wOmUudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCppK3RoaXMub2Zmc2V0LnBhcmVudC50b3AqaS0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpzPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqaSxsZWZ0OmUubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KmkrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqaS0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cz8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSppfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG4sbyxhPXRoaXMub3B0aW9ucyxyPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pLGg9dC5wYWdlWCxsPXQucGFnZVk7cmV0dXJuIHImJnRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfSksZSYmKHRoaXMuY29udGFpbm1lbnQmJih0aGlzLnJlbGF0aXZlQ29udGFpbmVyPyhzPXRoaXMucmVsYXRpdmVDb250YWluZXIub2Zmc2V0KCksaT1bdGhpcy5jb250YWlubWVudFswXStzLmxlZnQsdGhpcy5jb250YWlubWVudFsxXStzLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK3MubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK3MudG9wXSk6aT10aGlzLmNvbnRhaW5tZW50LHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDxpWzBdJiYoaD1pWzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPGlbMV0mJihsPWlbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSx0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXSYmKGg9aVsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdJiYobD1pWzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLGEuZ3JpZCYmKG49YS5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChsLXRoaXMub3JpZ2luYWxQYWdlWSkvYS5ncmlkWzFdKSphLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZLGw9aT9uLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXXx8bi10aGlzLm9mZnNldC5jbGljay50b3A+aVszXT9uOm4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdP24tYS5ncmlkWzFdOm4rYS5ncmlkWzFdOm4sbz1hLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKGgtdGhpcy5vcmlnaW5hbFBhZ2VYKS9hLmdyaWRbMF0pKmEuZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVgsaD1pP28tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXXx8by10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0/bzpvLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF0/by1hLmdyaWRbMF06bythLmdyaWRbMF06byksXCJ5XCI9PT1hLmF4aXMmJihoPXRoaXMub3JpZ2luYWxQYWdlWCksXCJ4XCI9PT1hLmF4aXMmJihsPXRoaXMub3JpZ2luYWxQYWdlWSkpLHt0b3A6bC10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC50b3A6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLGxlZnQ6aC10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnI/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCl9fSxfY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhlbHBlcixcInVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX3RyaWdnZXI6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiBzPXN8fHRoaXMuX3VpSGFzaCgpLHQudWkucGx1Z2luLmNhbGwodGhpcyxlLFtpLHMsdGhpc10sITApLC9eKGRyYWd8c3RhcnR8c3RvcCkvLnRlc3QoZSkmJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIikscy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicyksdC5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmNhbGwodGhpcyxlLGkscyl9LHBsdWdpbnM6e30sX3VpSGFzaDpmdW5jdGlvbigpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJjb25uZWN0VG9Tb3J0YWJsZVwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49dC5leHRlbmQoe30saSx7aXRlbTpzLmVsZW1lbnR9KTtzLnNvcnRhYmxlcz1bXSx0KHMub3B0aW9ucy5jb25uZWN0VG9Tb3J0YWJsZSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuc29ydGFibGUoXCJpbnN0YW5jZVwiKTtpJiYhaS5vcHRpb25zLmRpc2FibGVkJiYocy5zb3J0YWJsZXMucHVzaChpKSxpLnJlZnJlc2hQb3NpdGlvbnMoKSxpLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixlLG4pKX0pfSxzdG9wOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10LmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO3MuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgdD10aGlzO3QuaXNPdmVyPyh0LmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0LmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdC5fc3RvcmVkQ1NTPXtwb3NpdGlvbjp0LnBsYWNlaG9sZGVyLmNzcyhcInBvc2l0aW9uXCIpLHRvcDp0LnBsYWNlaG9sZGVyLmNzcyhcInRvcFwiKSxsZWZ0OnQucGxhY2Vob2xkZXIuY3NzKFwibGVmdFwiKX0sdC5fbW91c2VTdG9wKGUpLHQub3B0aW9ucy5oZWxwZXI9dC5vcHRpb25zLl9oZWxwZXIpOih0LmNhbmNlbEhlbHBlclJlbW92YWw9ITAsdC5fdHJpZ2dlcihcImRlYWN0aXZhdGVcIixlLG4pKX0pfSxkcmFnOmZ1bmN0aW9uKGUsaSxzKXt0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgbj0hMSxvPXRoaXM7by5wb3NpdGlvbkFicz1zLnBvc2l0aW9uQWJzLG8uaGVscGVyUHJvcG9ydGlvbnM9cy5oZWxwZXJQcm9wb3J0aW9ucyxvLm9mZnNldC5jbGljaz1zLm9mZnNldC5jbGljayxvLl9pbnRlcnNlY3RzV2l0aChvLmNvbnRhaW5lckNhY2hlKSYmKG49ITAsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyx0aGlzLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssdGhpcyE9PW8mJnRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyQ2FjaGUpJiZ0LmNvbnRhaW5zKG8uZWxlbWVudFswXSx0aGlzLmVsZW1lbnRbMF0pJiYobj0hMSksbn0pKSxuPyhvLmlzT3Zlcnx8KG8uaXNPdmVyPTEscy5fcGFyZW50PWkuaGVscGVyLnBhcmVudCgpLG8uY3VycmVudEl0ZW09aS5oZWxwZXIuYXBwZW5kVG8oby5lbGVtZW50KS5kYXRhKFwidWktc29ydGFibGUtaXRlbVwiLCEwKSxvLm9wdGlvbnMuX2hlbHBlcj1vLm9wdGlvbnMuaGVscGVyLG8ub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LGUudGFyZ2V0PW8uY3VycmVudEl0ZW1bMF0sby5fbW91c2VDYXB0dXJlKGUsITApLG8uX21vdXNlU3RhcnQoZSwhMCwhMCksby5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCxvLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsby5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LW8ub2Zmc2V0LnBhcmVudC5sZWZ0LG8ub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3Atby5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKFwidG9Tb3J0YWJsZVwiLGUpLHMuZHJvcHBlZD1vLmVsZW1lbnQsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9KSxzLmN1cnJlbnRJdGVtPXMuZWxlbWVudCxvLmZyb21PdXRzaWRlPXMpLG8uY3VycmVudEl0ZW0mJihvLl9tb3VzZURyYWcoZSksaS5wb3NpdGlvbj1vLnBvc2l0aW9uKSk6by5pc092ZXImJihvLmlzT3Zlcj0wLG8uY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCxvLm9wdGlvbnMuX3JldmVydD1vLm9wdGlvbnMucmV2ZXJ0LG8ub3B0aW9ucy5yZXZlcnQ9ITEsby5fdHJpZ2dlcihcIm91dFwiLGUsby5fdWlIYXNoKG8pKSxvLl9tb3VzZVN0b3AoZSwhMCksby5vcHRpb25zLnJldmVydD1vLm9wdGlvbnMuX3JldmVydCxvLm9wdGlvbnMuaGVscGVyPW8ub3B0aW9ucy5faGVscGVyLG8ucGxhY2Vob2xkZXImJm8ucGxhY2Vob2xkZXIucmVtb3ZlKCksaS5oZWxwZXIuYXBwZW5kVG8ocy5fcGFyZW50KSxzLl9yZWZyZXNoT2Zmc2V0cyhlKSxpLnBvc2l0aW9uPXMuX2dlbmVyYXRlUG9zaXRpb24oZSwhMCkscy5fdHJpZ2dlcihcImZyb21Tb3J0YWJsZVwiLGUpLHMuZHJvcHBlZD0hMSx0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pKX0pfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwiY3Vyc29yXCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KFwiYm9keVwiKSxvPXMub3B0aW9ucztuLmNzcyhcImN1cnNvclwiKSYmKG8uX2N1cnNvcj1uLmNzcyhcImN1cnNvclwiKSksbi5jc3MoXCJjdXJzb3JcIixvLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9jdXJzb3ImJnQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLG4uX2N1cnNvcil9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJvcGFjaXR5XCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KGkuaGVscGVyKSxvPXMub3B0aW9ucztuLmNzcyhcIm9wYWNpdHlcIikmJihvLl9vcGFjaXR5PW4uY3NzKFwib3BhY2l0eVwiKSksbi5jc3MoXCJvcGFjaXR5XCIsby5vcGFjaXR5KX0sc3RvcDpmdW5jdGlvbihlLGkscyl7dmFyIG49cy5vcHRpb25zO24uX29wYWNpdHkmJnQoaS5oZWxwZXIpLmNzcyhcIm9wYWNpdHlcIixuLl9vcGFjaXR5KX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInNjcm9sbFwiLHtzdGFydDpmdW5jdGlvbih0LGUsaSl7aS5zY3JvbGxQYXJlbnROb3RIaWRkZW58fChpLnNjcm9sbFBhcmVudE5vdEhpZGRlbj1pLmhlbHBlci5zY3JvbGxQYXJlbnQoITEpKSxpLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXSE9PWkuZG9jdW1lbnRbMF0mJlwiSFRNTFwiIT09aS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0udGFnTmFtZSYmKGkub3ZlcmZsb3dPZmZzZXQ9aS5zY3JvbGxQYXJlbnROb3RIaWRkZW4ub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnMsbz0hMSxhPXMuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdLHI9cy5kb2N1bWVudFswXTthIT09ciYmXCJIVE1MXCIhPT1hLnRhZ05hbWU/KG4uYXhpcyYmXCJ4XCI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LnRvcCthLm9mZnNldEhlaWdodC1lLnBhZ2VZPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YS5zY3JvbGxUb3A9bz1hLnNjcm9sbFRvcCtuLnNjcm9sbFNwZWVkOmUucGFnZVktcy5vdmVyZmxvd09mZnNldC50b3A8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGEuc2Nyb2xsVG9wPW89YS5zY3JvbGxUb3Atbi5zY3JvbGxTcGVlZCkpLG4uYXhpcyYmXCJ5XCI9PT1uLmF4aXN8fChzLm92ZXJmbG93T2Zmc2V0LmxlZnQrYS5vZmZzZXRXaWR0aC1lLnBhZ2VYPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/YS5zY3JvbGxMZWZ0PW89YS5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6ZS5wYWdlWC1zLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGEuc2Nyb2xsTGVmdD1vPWEuc2Nyb2xsTGVmdC1uLnNjcm9sbFNwZWVkKSkpOihuLmF4aXMmJlwieFwiPT09bi5heGlzfHwoZS5wYWdlWS10KHIpLnNjcm9sbFRvcCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/bz10KHIpLnNjcm9sbFRvcCh0KHIpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOnQod2luZG93KS5oZWlnaHQoKS0oZS5wYWdlWS10KHIpLnNjcm9sbFRvcCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYobz10KHIpLnNjcm9sbFRvcCh0KHIpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSksbi5heGlzJiZcInlcIj09PW4uYXhpc3x8KGUucGFnZVgtdChyKS5zY3JvbGxMZWZ0KCk8bi5zY3JvbGxTZW5zaXRpdml0eT9vPXQocikuc2Nyb2xsTGVmdCh0KHIpLnNjcm9sbExlZnQoKS1uLnNjcm9sbFNwZWVkKTp0KHdpbmRvdykud2lkdGgoKS0oZS5wYWdlWC10KHIpLnNjcm9sbExlZnQoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKG89dChyKS5zY3JvbGxMZWZ0KHQocikuc2Nyb2xsTGVmdCgpK24uc2Nyb2xsU3BlZWQpKSkpLCExIT09byYmdC51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHMsZSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzbmFwXCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnM7cy5zbmFwRWxlbWVudHM9W10sdChuLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/bi5zbmFwLml0ZW1zfHxcIjpkYXRhKHVpLWRyYWdnYWJsZSlcIjpuLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5vZmZzZXQoKTt0aGlzIT09cy5lbGVtZW50WzBdJiZzLnNuYXBFbGVtZW50cy5wdXNoKHtpdGVtOnRoaXMsd2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKSx0b3A6aS50b3AsbGVmdDppLmxlZnR9KX0pfSxkcmFnOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGEscixoLGwsYyx1LGQscCxmPXMub3B0aW9ucyxnPWYuc25hcFRvbGVyYW5jZSxtPWkub2Zmc2V0LmxlZnQsXz1tK3MuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsdj1pLm9mZnNldC50b3AsYj12K3MuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0O2ZvcihkPXMuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2Q+PTA7ZC0tKWg9cy5zbmFwRWxlbWVudHNbZF0ubGVmdC1zLm1hcmdpbnMubGVmdCxsPWgrcy5zbmFwRWxlbWVudHNbZF0ud2lkdGgsYz1zLnNuYXBFbGVtZW50c1tkXS50b3Atcy5tYXJnaW5zLnRvcCx1PWMrcy5zbmFwRWxlbWVudHNbZF0uaGVpZ2h0LF88aC1nfHxtPmwrZ3x8YjxjLWd8fHY+dStnfHwhdC5jb250YWlucyhzLnNuYXBFbGVtZW50c1tkXS5pdGVtLm93bmVyRG9jdW1lbnQscy5zbmFwRWxlbWVudHNbZF0uaXRlbSk/KHMuc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlLmNhbGwocy5lbGVtZW50LGUsdC5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2RdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmc9ITEpOihcImlubmVyXCIhPT1mLnNuYXBNb2RlJiYobj1NYXRoLmFicyhjLWIpPD1nLG89TWF0aC5hYnModS12KTw9ZyxhPU1hdGguYWJzKGgtXyk8PWcscj1NYXRoLmFicyhsLW0pPD1nLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDpjLXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOnUsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpoLXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpsfSkubGVmdCkpLHA9bnx8b3x8YXx8cixcIm91dGVyXCIhPT1mLnNuYXBNb2RlJiYobj1NYXRoLmFicyhjLXYpPD1nLG89TWF0aC5hYnModS1iKTw9ZyxhPU1hdGguYWJzKGgtbSk8PWcscj1NYXRoLmFicyhsLV8pPD1nLG4mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDpjLGxlZnQ6MH0pLnRvcCksbyYmKGkucG9zaXRpb24udG9wPXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOnUtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxhJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpofSkubGVmdCksciYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6bC1zLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdCkpLCFzLnNuYXBFbGVtZW50c1tkXS5zbmFwcGluZyYmKG58fG98fGF8fHJ8fHApJiZzLm9wdGlvbnMuc25hcC5zbmFwJiZzLm9wdGlvbnMuc25hcC5zbmFwLmNhbGwocy5lbGVtZW50LGUsdC5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2RdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmc9bnx8b3x8YXx8cnx8cCl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzdGFja1wiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG4sbz1zLm9wdGlvbnMsYT10Lm1ha2VBcnJheSh0KG8uc3RhY2spKS5zb3J0KGZ1bmN0aW9uKGUsaSl7cmV0dXJuKHBhcnNlSW50KHQoZSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCktKHBhcnNlSW50KHQoaSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCl9KTthLmxlbmd0aCYmKG49cGFyc2VJbnQodChhWzBdKS5jc3MoXCJ6SW5kZXhcIiksMTApfHwwLHQoYSkuZWFjaChmdW5jdGlvbihlKXt0KHRoaXMpLmNzcyhcInpJbmRleFwiLG4rZSl9KSx0aGlzLmNzcyhcInpJbmRleFwiLG4rYS5sZW5ndGgpKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInpJbmRleFwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49dChpLmhlbHBlciksbz1zLm9wdGlvbnM7bi5jc3MoXCJ6SW5kZXhcIikmJihvLl96SW5kZXg9bi5jc3MoXCJ6SW5kZXhcIikpLG4uY3NzKFwiekluZGV4XCIsby56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fekluZGV4JiZ0KGkuaGVscGVyKS5jc3MoXCJ6SW5kZXhcIixuLl96SW5kZXgpfX0pO3QudWkuZHJhZ2dhYmxlO3Qud2lkZ2V0KFwidWkucmVzaXphYmxlXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4OlwicmVzaXplXCIsb3B0aW9uczp7YWxzb1Jlc2l6ZTohMSxhbmltYXRlOiExLGFuaW1hdGVEdXJhdGlvbjpcInNsb3dcIixhbmltYXRlRWFzaW5nOlwic3dpbmdcIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjbGFzc2VzOntcInVpLXJlc2l6YWJsZS1zZVwiOlwidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZVwifSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6XCJlLHMsc2VcIixoZWxwZXI6ITEsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTAsbWluV2lkdGg6MTAsekluZGV4OjkwLHJlc2l6ZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfbnVtOmZ1bmN0aW9uKHQpe3JldHVybiBwYXJzZUZsb2F0KHQpfHwwfSxfaXNOdW1iZXI6ZnVuY3Rpb24odCl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQodCkpfSxfaGFzU2Nyb2xsOmZ1bmN0aW9uKGUsaSl7aWYoXCJoaWRkZW5cIj09PXQoZSkuY3NzKFwib3ZlcmZsb3dcIikpcmV0dXJuITE7dmFyIHM9aSYmXCJsZWZ0XCI9PT1pP1wic2Nyb2xsTGVmdFwiOlwic2Nyb2xsVG9wXCIsbj0hMTtyZXR1cm4gZVtzXT4wfHwoZVtzXT0xLG49ZVtzXT4wLGVbc109MCxuKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5vcHRpb25zLHM9dGhpczt0aGlzLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZVwiKSx0LmV4dGVuZCh0aGlzLHtfYXNwZWN0UmF0aW86ISFpLmFzcGVjdFJhdGlvLGFzcGVjdFJhdGlvOmkuYXNwZWN0UmF0aW8sb3JpZ2luYWxFbGVtZW50OnRoaXMuZWxlbWVudCxfcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50czpbXSxfaGVscGVyOmkuaGVscGVyfHxpLmdob3N0fHxpLmFuaW1hdGU/aS5oZWxwZXJ8fFwidWktcmVzaXphYmxlLWhlbHBlclwiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL14oY2FudmFzfHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b258aW1nKSQvaSkmJih0aGlzLmVsZW1lbnQud3JhcCh0KFwiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj5cIikuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKFwicG9zaXRpb25cIiksd2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksdG9wOnRoaXMuZWxlbWVudC5jc3MoXCJ0b3BcIiksbGVmdDp0aGlzLmVsZW1lbnQuY3NzKFwibGVmdFwiKX0pKSx0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoXCJ1aS1yZXNpemFibGVcIix0aGlzLmVsZW1lbnQucmVzaXphYmxlKFwiaW5zdGFuY2VcIikpLHRoaXMuZWxlbWVudElzV3JhcHBlcj0hMCxlPXttYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpblJpZ2h0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpblJpZ2h0XCIpLG1hcmdpbkJvdHRvbTp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5Cb3R0b21cIiksbWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5MZWZ0XCIpfSx0aGlzLmVsZW1lbnQuY3NzKGUpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpblwiLDApLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZT10aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJyZXNpemVcIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwicmVzaXplXCIsXCJub25lXCIpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMucHVzaCh0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOlwic3RhdGljXCIsem9vbToxLGRpc3BsYXk6XCJibG9ja1wifSkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhlKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLl9zZXR1cEhhbmRsZXMoKSxpLmF1dG9IaWRlJiZ0KHRoaXMuZWxlbWVudCkub24oXCJtb3VzZWVudGVyXCIsZnVuY3Rpb24oKXtpLmRpc2FibGVkfHwocy5fcmVtb3ZlQ2xhc3MoXCJ1aS1yZXNpemFibGUtYXV0b2hpZGVcIikscy5faGFuZGxlcy5zaG93KCkpfSkub24oXCJtb3VzZWxlYXZlXCIsZnVuY3Rpb24oKXtpLmRpc2FibGVkfHxzLnJlc2l6aW5nfHwocy5fYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGUtYXV0b2hpZGVcIikscy5faGFuZGxlcy5oaWRlKCkpfSksdGhpcy5fbW91c2VJbml0KCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7dmFyIGUsaT1mdW5jdGlvbihlKXt0KGUpLnJlbW92ZURhdGEoXCJyZXNpemFibGVcIikucmVtb3ZlRGF0YShcInVpLXJlc2l6YWJsZVwiKS5vZmYoXCIucmVzaXphYmxlXCIpLmZpbmQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKS5yZW1vdmUoKX07cmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciYmKGkodGhpcy5lbGVtZW50KSxlPXRoaXMuZWxlbWVudCx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOmUuY3NzKFwicG9zaXRpb25cIiksd2lkdGg6ZS5vdXRlcldpZHRoKCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoKSx0b3A6ZS5jc3MoXCJ0b3BcIiksbGVmdDplLmNzcyhcImxlZnRcIil9KS5pbnNlcnRBZnRlcihlKSxlLnJlbW92ZSgpKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJyZXNpemVcIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLGkodGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtzd2l0Y2godGhpcy5fc3VwZXIodCxlKSx0KXtjYXNlXCJoYW5kbGVzXCI6dGhpcy5fcmVtb3ZlSGFuZGxlcygpLHRoaXMuX3NldHVwSGFuZGxlcygpfX0sX3NldHVwSGFuZGxlczpmdW5jdGlvbigpe3ZhciBlLGkscyxuLG8sYT10aGlzLm9wdGlvbnMscj10aGlzO2lmKHRoaXMuaGFuZGxlcz1hLmhhbmRsZXN8fCh0KFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjpcIi51aS1yZXNpemFibGUtblwiLGU6XCIudWktcmVzaXphYmxlLWVcIixzOlwiLnVpLXJlc2l6YWJsZS1zXCIsdzpcIi51aS1yZXNpemFibGUtd1wiLHNlOlwiLnVpLXJlc2l6YWJsZS1zZVwiLHN3OlwiLnVpLXJlc2l6YWJsZS1zd1wiLG5lOlwiLnVpLXJlc2l6YWJsZS1uZVwiLG53OlwiLnVpLXJlc2l6YWJsZS1ud1wifTpcImUscyxzZVwiKSx0aGlzLl9oYW5kbGVzPXQoKSx0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PT1TdHJpbmcpZm9yKFwiYWxsXCI9PT10aGlzLmhhbmRsZXMmJih0aGlzLmhhbmRsZXM9XCJuLGUscyx3LHNlLHN3LG5lLG53XCIpLHM9dGhpcy5oYW5kbGVzLnNwbGl0KFwiLFwiKSx0aGlzLmhhbmRsZXM9e30saT0wO2k8cy5sZW5ndGg7aSsrKWU9dC50cmltKHNbaV0pLG49XCJ1aS1yZXNpemFibGUtXCIrZSxvPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyhvLFwidWktcmVzaXphYmxlLWhhbmRsZSBcIituKSxvLmNzcyh7ekluZGV4OmEuekluZGV4fSksdGhpcy5oYW5kbGVzW2VdPVwiLnVpLXJlc2l6YWJsZS1cIitlLHRoaXMuZWxlbWVudC5hcHBlbmQobyk7dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbihlKXt2YXIgaSxzLG4sbztlPWV8fHRoaXMuZWxlbWVudDtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpdGhpcy5oYW5kbGVzW2ldLmNvbnN0cnVjdG9yPT09U3RyaW5nP3RoaXMuaGFuZGxlc1tpXT10aGlzLmVsZW1lbnQuY2hpbGRyZW4odGhpcy5oYW5kbGVzW2ldKS5maXJzdCgpLnNob3coKToodGhpcy5oYW5kbGVzW2ldLmpxdWVyeXx8dGhpcy5oYW5kbGVzW2ldLm5vZGVUeXBlKSYmKHRoaXMuaGFuZGxlc1tpXT10KHRoaXMuaGFuZGxlc1tpXSksdGhpcy5fb24odGhpcy5oYW5kbGVzW2ldLHttb3VzZWRvd246ci5fbW91c2VEb3dufSkpLHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL14odGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbikkL2kpJiYocz10KHRoaXMuaGFuZGxlc1tpXSx0aGlzLmVsZW1lbnQpLG89L3N3fG5lfG53fHNlfG58cy8udGVzdChpKT9zLm91dGVySGVpZ2h0KCk6cy5vdXRlcldpZHRoKCksbj1bXCJwYWRkaW5nXCIsL25lfG53fG4vLnRlc3QoaSk/XCJUb3BcIjovc2V8c3d8cy8udGVzdChpKT9cIkJvdHRvbVwiOi9eZSQvLnRlc3QoaSk/XCJSaWdodFwiOlwiTGVmdFwiXS5qb2luKFwiXCIpLGUuY3NzKG4sbyksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmhhbmRsZXNbaV0pfSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz10aGlzLl9oYW5kbGVzLmFkZCh0aGlzLmVsZW1lbnQuZmluZChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIpKSx0aGlzLl9oYW5kbGVzLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm9uKFwibW91c2VvdmVyXCIsZnVuY3Rpb24oKXtyLnJlc2l6aW5nfHwodGhpcy5jbGFzc05hbWUmJihvPXRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSxyLmF4aXM9byYmb1sxXT9vWzFdOlwic2VcIil9KSxhLmF1dG9IaWRlJiYodGhpcy5faGFuZGxlcy5oaWRlKCksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGUtYXV0b2hpZGVcIikpfSxfcmVtb3ZlSGFuZGxlczpmdW5jdGlvbigpe3RoaXMuX2hhbmRsZXMucmVtb3ZlKCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPSExO2ZvcihpIGluIHRoaXMuaGFuZGxlcykoKHM9dCh0aGlzLmhhbmRsZXNbaV0pWzBdKT09PWUudGFyZ2V0fHx0LmNvbnRhaW5zKHMsZS50YXJnZXQpKSYmKG49ITApO3JldHVybiF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJm59LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvPXRoaXMub3B0aW9ucyxhPXRoaXMuZWxlbWVudDtyZXR1cm4gdGhpcy5yZXNpemluZz0hMCx0aGlzLl9yZW5kZXJQcm94eSgpLGk9dGhpcy5fbnVtKHRoaXMuaGVscGVyLmNzcyhcImxlZnRcIikpLHM9dGhpcy5fbnVtKHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSksby5jb250YWlubWVudCYmKGkrPXQoby5jb250YWlubWVudCkuc2Nyb2xsTGVmdCgpfHwwLHMrPXQoby5jb250YWlubWVudCkuc2Nyb2xsVG9wKCl8fDApLHRoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMucG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5zaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6dGhpcy5oZWxwZXIud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIuaGVpZ2h0KCl9Ont3aWR0aDphLndpZHRoKCksaGVpZ2h0OmEuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6YS5vdXRlcldpZHRoKCksaGVpZ2h0OmEub3V0ZXJIZWlnaHQoKX06e3dpZHRoOmEud2lkdGgoKSxoZWlnaHQ6YS5oZWlnaHQoKX0sdGhpcy5zaXplRGlmZj17d2lkdGg6YS5vdXRlcldpZHRoKCktYS53aWR0aCgpLGhlaWdodDphLm91dGVySGVpZ2h0KCktYS5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OmksdG9wOnN9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OmUucGFnZVgsdG9wOmUucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89XCJudW1iZXJcIj09dHlwZW9mIG8uYXNwZWN0UmF0aW8/by5hc3BlY3RSYXRpbzp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aC90aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHR8fDEsbj10KFwiLnVpLXJlc2l6YWJsZS1cIit0aGlzLmF4aXMpLmNzcyhcImN1cnNvclwiKSx0KFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixcImF1dG9cIj09PW4/dGhpcy5heGlzK1wiLXJlc2l6ZVwiOm4pLHRoaXMuX2FkZENsYXNzKFwidWktcmVzaXphYmxlLXJlc2l6aW5nXCIpLHRoaXMuX3Byb3BhZ2F0ZShcInN0YXJ0XCIsZSksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLG89dGhpcy5heGlzLGE9ZS5wYWdlWC1uLmxlZnR8fDAscj1lLnBhZ2VZLW4udG9wfHwwLGg9dGhpcy5fY2hhbmdlW29dO3JldHVybiB0aGlzLl91cGRhdGVQcmV2UHJvcGVydGllcygpLCEhaCYmKGk9aC5hcHBseSh0aGlzLFtlLGEscl0pLHRoaXMuX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzKGUuc2hpZnRLZXkpLCh0aGlzLl9hc3BlY3RSYXRpb3x8ZS5zaGlmdEtleSkmJihpPXRoaXMuX3VwZGF0ZVJhdGlvKGksZSkpLGk9dGhpcy5fcmVzcGVjdFNpemUoaSxlKSx0aGlzLl91cGRhdGVDYWNoZShpKSx0aGlzLl9wcm9wYWdhdGUoXCJyZXNpemVcIixlKSxzPXRoaXMuX2FwcGx5Q2hhbmdlcygpLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLHQuaXNFbXB0eU9iamVjdChzKXx8KHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksdGhpcy5fdHJpZ2dlcihcInJlc2l6ZVwiLGUsdGhpcy51aSgpKSx0aGlzLl9hcHBseUNoYW5nZXMoKSksITEpfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3RoaXMucmVzaXppbmc9ITE7dmFyIGkscyxuLG8sYSxyLGgsbD10aGlzLm9wdGlvbnMsYz10aGlzO3JldHVybiB0aGlzLl9oZWxwZXImJihpPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMscz1pLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChpWzBdLm5vZGVOYW1lKSxuPXMmJnRoaXMuX2hhc1Njcm9sbChpWzBdLFwibGVmdFwiKT8wOmMuc2l6ZURpZmYuaGVpZ2h0LG89cz8wOmMuc2l6ZURpZmYud2lkdGgsYT17d2lkdGg6Yy5oZWxwZXIud2lkdGgoKS1vLGhlaWdodDpjLmhlbHBlci5oZWlnaHQoKS1ufSxyPXBhcnNlRmxvYXQoYy5lbGVtZW50LmNzcyhcImxlZnRcIikpKyhjLnBvc2l0aW9uLmxlZnQtYy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGg9cGFyc2VGbG9hdChjLmVsZW1lbnQuY3NzKFwidG9wXCIpKSsoYy5wb3NpdGlvbi50b3AtYy5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGwsbC5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKHQuZXh0ZW5kKGEse3RvcDpoLGxlZnQ6cn0pKSxjLmhlbHBlci5oZWlnaHQoYy5zaXplLmhlaWdodCksYy5oZWxwZXIud2lkdGgoYy5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFsLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLFwiYXV0b1wiKSx0aGlzLl9yZW1vdmVDbGFzcyhcInVpLXJlc2l6YWJsZS1yZXNpemluZ1wiKSx0aGlzLl9wcm9wYWdhdGUoXCJzdG9wXCIsZSksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVByZXZQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2UG9zaXRpb249e3RvcDp0aGlzLnBvc2l0aW9uLnRvcCxsZWZ0OnRoaXMucG9zaXRpb24ubGVmdH0sdGhpcy5wcmV2U2l6ZT17d2lkdGg6dGhpcy5zaXplLndpZHRoLGhlaWdodDp0aGlzLnNpemUuaGVpZ2h0fX0sX2FwcGx5Q2hhbmdlczpmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0aGlzLnBvc2l0aW9uLnRvcCE9PXRoaXMucHJldlBvc2l0aW9uLnRvcCYmKHQudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIiksdGhpcy5wb3NpdGlvbi5sZWZ0IT09dGhpcy5wcmV2UG9zaXRpb24ubGVmdCYmKHQubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrXCJweFwiKSx0aGlzLnNpemUud2lkdGghPT10aGlzLnByZXZTaXplLndpZHRoJiYodC53aWR0aD10aGlzLnNpemUud2lkdGgrXCJweFwiKSx0aGlzLnNpemUuaGVpZ2h0IT09dGhpcy5wcmV2U2l6ZS5oZWlnaHQmJih0LmhlaWdodD10aGlzLnNpemUuaGVpZ2h0K1wicHhcIiksdGhpcy5oZWxwZXIuY3NzKHQpLHR9LF91cGRhdGVWaXJ0dWFsQm91bmRhcmllczpmdW5jdGlvbih0KXt2YXIgZSxpLHMsbixvLGE9dGhpcy5vcHRpb25zO289e21pbldpZHRoOnRoaXMuX2lzTnVtYmVyKGEubWluV2lkdGgpP2EubWluV2lkdGg6MCxtYXhXaWR0aDp0aGlzLl9pc051bWJlcihhLm1heFdpZHRoKT9hLm1heFdpZHRoOjEvMCxtaW5IZWlnaHQ6dGhpcy5faXNOdW1iZXIoYS5taW5IZWlnaHQpP2EubWluSGVpZ2h0OjAsbWF4SGVpZ2h0OnRoaXMuX2lzTnVtYmVyKGEubWF4SGVpZ2h0KT9hLm1heEhlaWdodDoxLzB9LCh0aGlzLl9hc3BlY3RSYXRpb3x8dCkmJihlPW8ubWluSGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8scz1vLm1pbldpZHRoL3RoaXMuYXNwZWN0UmF0aW8saT1vLm1heEhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLG49by5tYXhXaWR0aC90aGlzLmFzcGVjdFJhdGlvLGU+by5taW5XaWR0aCYmKG8ubWluV2lkdGg9ZSkscz5vLm1pbkhlaWdodCYmKG8ubWluSGVpZ2h0PXMpLGk8by5tYXhXaWR0aCYmKG8ubWF4V2lkdGg9aSksbjxvLm1heEhlaWdodCYmKG8ubWF4SGVpZ2h0PW4pKSx0aGlzLl92Qm91bmRhcmllcz1vfSxfdXBkYXRlQ2FjaGU6ZnVuY3Rpb24odCl7dGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5faXNOdW1iZXIodC5sZWZ0KSYmKHRoaXMucG9zaXRpb24ubGVmdD10LmxlZnQpLHRoaXMuX2lzTnVtYmVyKHQudG9wKSYmKHRoaXMucG9zaXRpb24udG9wPXQudG9wKSx0aGlzLl9pc051bWJlcih0LmhlaWdodCkmJih0aGlzLnNpemUuaGVpZ2h0PXQuaGVpZ2h0KSx0aGlzLl9pc051bWJlcih0LndpZHRoKSYmKHRoaXMuc2l6ZS53aWR0aD10LndpZHRoKX0sX3VwZGF0ZVJhdGlvOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucG9zaXRpb24saT10aGlzLnNpemUscz10aGlzLmF4aXM7cmV0dXJuIHRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KT90LndpZHRoPXQuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW86dGhpcy5faXNOdW1iZXIodC53aWR0aCkmJih0LmhlaWdodD10LndpZHRoL3RoaXMuYXNwZWN0UmF0aW8pLFwic3dcIj09PXMmJih0LmxlZnQ9ZS5sZWZ0KyhpLndpZHRoLXQud2lkdGgpLHQudG9wPW51bGwpLFwibndcIj09PXMmJih0LnRvcD1lLnRvcCsoaS5oZWlnaHQtdC5oZWlnaHQpLHQubGVmdD1lLmxlZnQrKGkud2lkdGgtdC53aWR0aCkpLHR9LF9yZXNwZWN0U2l6ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl92Qm91bmRhcmllcyxpPXRoaXMuYXhpcyxzPXRoaXMuX2lzTnVtYmVyKHQud2lkdGgpJiZlLm1heFdpZHRoJiZlLm1heFdpZHRoPHQud2lkdGgsbj10aGlzLl9pc051bWJlcih0LmhlaWdodCkmJmUubWF4SGVpZ2h0JiZlLm1heEhlaWdodDx0LmhlaWdodCxvPXRoaXMuX2lzTnVtYmVyKHQud2lkdGgpJiZlLm1pbldpZHRoJiZlLm1pbldpZHRoPnQud2lkdGgsYT10aGlzLl9pc051bWJlcih0LmhlaWdodCkmJmUubWluSGVpZ2h0JiZlLm1pbkhlaWdodD50LmhlaWdodCxyPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGg9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLnRvcCt0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQsbD0vc3d8bnd8dy8udGVzdChpKSxjPS9ud3xuZXxuLy50ZXN0KGkpO3JldHVybiBvJiYodC53aWR0aD1lLm1pbldpZHRoKSxhJiYodC5oZWlnaHQ9ZS5taW5IZWlnaHQpLHMmJih0LndpZHRoPWUubWF4V2lkdGgpLG4mJih0LmhlaWdodD1lLm1heEhlaWdodCksbyYmbCYmKHQubGVmdD1yLWUubWluV2lkdGgpLHMmJmwmJih0LmxlZnQ9ci1lLm1heFdpZHRoKSxhJiZjJiYodC50b3A9aC1lLm1pbkhlaWdodCksbiYmYyYmKHQudG9wPWgtZS5tYXhIZWlnaHQpLHQud2lkdGh8fHQuaGVpZ2h0fHx0LmxlZnR8fCF0LnRvcD90LndpZHRofHx0LmhlaWdodHx8dC50b3B8fCF0LmxlZnR8fCh0LmxlZnQ9bnVsbCk6dC50b3A9bnVsbCx0fSxfZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLGk9W10scz1bdC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSx0LmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIiksdC5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSx0LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKV0sbj1bdC5jc3MoXCJwYWRkaW5nVG9wXCIpLHQuY3NzKFwicGFkZGluZ1JpZ2h0XCIpLHQuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSx0LmNzcyhcInBhZGRpbmdMZWZ0XCIpXTtlPDQ7ZSsrKWlbZV09cGFyc2VGbG9hdChzW2VdKXx8MCxpW2VdKz1wYXJzZUZsb2F0KG5bZV0pfHwwO3JldHVybntoZWlnaHQ6aVswXStpWzJdLHdpZHRoOmlbMV0raVszXX19LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKWZvcih2YXIgdCxlPTAsaT10aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50O2U8dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGg7ZSsrKXQ9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1tlXSx0aGlzLm91dGVyRGltZW5zaW9uc3x8KHRoaXMub3V0ZXJEaW1lbnNpb25zPXRoaXMuX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9ucyh0KSksdC5jc3Moe2hlaWdodDppLmhlaWdodCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLmhlaWdodHx8MCx3aWR0aDppLndpZHRoKCktdGhpcy5vdXRlckRpbWVuc2lvbnMud2lkdGh8fDB9KX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LGk9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD1lLm9mZnNldCgpLHRoaXMuX2hlbHBlcj8odGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fHQoXCI8ZGl2IHN0eWxlPSdvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsdGhpcy5faGVscGVyKSx0aGlzLmhlbHBlci5jc3Moe3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHBvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0K1wicHhcIix0b3A6dGhpcy5lbGVtZW50T2Zmc2V0LnRvcCtcInB4XCIsekluZGV4OisraS56SW5kZXh9KSx0aGlzLmhlbHBlci5hcHBlbmRUbyhcImJvZHlcIikuZGlzYWJsZVNlbGVjdGlvbigpKTp0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24odCxlKXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrZX19LHc6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9yaWdpbmFsU2l6ZTtyZXR1cm57bGVmdDp0aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCtlLHdpZHRoOmkud2lkdGgtZX19LG46ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXRoaXMub3JpZ2luYWxTaXplO3JldHVybnt0b3A6dGhpcy5vcmlnaW5hbFBvc2l0aW9uLnRvcCtpLGhlaWdodDpzLmhlaWdodC1pfX0sczpmdW5jdGlvbih0LGUsaSl7cmV0dXJue2hlaWdodDp0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQraX19LHNlOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2UsaSxzXSkpfSxzdzpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtlLGksc10pKX0sbmU6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbZSxpLHNdKSl9LG53OmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW2UsaSxzXSkpfX0sX3Byb3BhZ2F0ZTpmdW5jdGlvbihlLGkpe3QudWkucGx1Z2luLmNhbGwodGhpcyxlLFtpLHRoaXMudWkoKV0pLFwicmVzaXplXCIhPT1lJiZ0aGlzLl90cmlnZ2VyKGUsaSx0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiYW5pbWF0ZVwiLHtzdG9wOmZ1bmN0aW9uKGUpe3ZhciBpPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscz1pLm9wdGlvbnMsbj1pLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLG89bi5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoblswXS5ub2RlTmFtZSksYT1vJiZpLl9oYXNTY3JvbGwoblswXSxcImxlZnRcIik/MDppLnNpemVEaWZmLmhlaWdodCxyPW8/MDppLnNpemVEaWZmLndpZHRoLGg9e3dpZHRoOmkuc2l6ZS53aWR0aC1yLGhlaWdodDppLnNpemUuaGVpZ2h0LWF9LGw9cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwibGVmdFwiKSkrKGkucG9zaXRpb24ubGVmdC1pLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsYz1wYXJzZUZsb2F0KGkuZWxlbWVudC5jc3MoXCJ0b3BcIikpKyhpLnBvc2l0aW9uLnRvcC1pLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbDtpLmVsZW1lbnQuYW5pbWF0ZSh0LmV4dGVuZChoLGMmJmw/e3RvcDpjLGxlZnQ6bH06e30pLHtkdXJhdGlvbjpzLmFuaW1hdGVEdXJhdGlvbixlYXNpbmc6cy5hbmltYXRlRWFzaW5nLHN0ZXA6ZnVuY3Rpb24oKXt2YXIgcz17d2lkdGg6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwid2lkdGhcIikpLGhlaWdodDpwYXJzZUZsb2F0KGkuZWxlbWVudC5jc3MoXCJoZWlnaHRcIikpLHRvcDpwYXJzZUZsb2F0KGkuZWxlbWVudC5jc3MoXCJ0b3BcIikpLGxlZnQ6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwibGVmdFwiKSl9O24mJm4ubGVuZ3RoJiZ0KG5bMF0pLmNzcyh7d2lkdGg6cy53aWR0aCxoZWlnaHQ6cy5oZWlnaHR9KSxpLl91cGRhdGVDYWNoZShzKSxpLl9wcm9wYWdhdGUoXCJyZXNpemVcIixlKX19KX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImNvbnRhaW5tZW50XCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhLHIsaD10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGw9aC5vcHRpb25zLGM9aC5lbGVtZW50LHU9bC5jb250YWlubWVudCxkPXUgaW5zdGFuY2VvZiB0P3UuZ2V0KDApOi9wYXJlbnQvLnRlc3QodSk/Yy5wYXJlbnQoKS5nZXQoMCk6dTtkJiYoaC5jb250YWluZXJFbGVtZW50PXQoZCksL2RvY3VtZW50Ly50ZXN0KHUpfHx1PT09ZG9jdW1lbnQ/KGguY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGguY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0saC5wYXJlbnREYXRhPXtlbGVtZW50OnQoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDp0KGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDp0KGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH0pOihlPXQoZCksaT1bXSx0KFtcIlRvcFwiLFwiUmlnaHRcIixcIkxlZnRcIixcIkJvdHRvbVwiXSkuZWFjaChmdW5jdGlvbih0LHMpe2lbdF09aC5fbnVtKGUuY3NzKFwicGFkZGluZ1wiK3MpKX0pLGguY29udGFpbmVyT2Zmc2V0PWUub2Zmc2V0KCksaC5jb250YWluZXJQb3NpdGlvbj1lLnBvc2l0aW9uKCksaC5jb250YWluZXJTaXplPXtoZWlnaHQ6ZS5pbm5lckhlaWdodCgpLWlbM10sd2lkdGg6ZS5pbm5lcldpZHRoKCktaVsxXX0scz1oLmNvbnRhaW5lck9mZnNldCxuPWguY29udGFpbmVyU2l6ZS5oZWlnaHQsbz1oLmNvbnRhaW5lclNpemUud2lkdGgsYT1oLl9oYXNTY3JvbGwoZCxcImxlZnRcIik/ZC5zY3JvbGxXaWR0aDpvLHI9aC5faGFzU2Nyb2xsKGQpP2Quc2Nyb2xsSGVpZ2h0Om4saC5wYXJlbnREYXRhPXtlbGVtZW50OmQsbGVmdDpzLmxlZnQsdG9wOnMudG9wLHdpZHRoOmEsaGVpZ2h0OnJ9KSl9LHJlc2l6ZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscj1hLm9wdGlvbnMsaD1hLmNvbnRhaW5lck9mZnNldCxsPWEucG9zaXRpb24sYz1hLl9hc3BlY3RSYXRpb3x8ZS5zaGlmdEtleSx1PXt0b3A6MCxsZWZ0OjB9LGQ9YS5jb250YWluZXJFbGVtZW50LHA9ITA7ZFswXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KGQuY3NzKFwicG9zaXRpb25cIikpJiYodT1oKSxsLmxlZnQ8KGEuX2hlbHBlcj9oLmxlZnQ6MCkmJihhLnNpemUud2lkdGg9YS5zaXplLndpZHRoKyhhLl9oZWxwZXI/YS5wb3NpdGlvbi5sZWZ0LWgubGVmdDphLnBvc2l0aW9uLmxlZnQtdS5sZWZ0KSxjJiYoYS5zaXplLmhlaWdodD1hLnNpemUud2lkdGgvYS5hc3BlY3RSYXRpbyxwPSExKSxhLnBvc2l0aW9uLmxlZnQ9ci5oZWxwZXI/aC5sZWZ0OjApLGwudG9wPChhLl9oZWxwZXI/aC50b3A6MCkmJihhLnNpemUuaGVpZ2h0PWEuc2l6ZS5oZWlnaHQrKGEuX2hlbHBlcj9hLnBvc2l0aW9uLnRvcC1oLnRvcDphLnBvc2l0aW9uLnRvcCksYyYmKGEuc2l6ZS53aWR0aD1hLnNpemUuaGVpZ2h0KmEuYXNwZWN0UmF0aW8scD0hMSksYS5wb3NpdGlvbi50b3A9YS5faGVscGVyP2gudG9wOjApLG49YS5jb250YWluZXJFbGVtZW50LmdldCgwKT09PWEuZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksbz0vcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3QoYS5jb250YWluZXJFbGVtZW50LmNzcyhcInBvc2l0aW9uXCIpKSxuJiZvPyhhLm9mZnNldC5sZWZ0PWEucGFyZW50RGF0YS5sZWZ0K2EucG9zaXRpb24ubGVmdCxhLm9mZnNldC50b3A9YS5wYXJlbnREYXRhLnRvcCthLnBvc2l0aW9uLnRvcCk6KGEub2Zmc2V0LmxlZnQ9YS5lbGVtZW50Lm9mZnNldCgpLmxlZnQsYS5vZmZzZXQudG9wPWEuZWxlbWVudC5vZmZzZXQoKS50b3ApLGk9TWF0aC5hYnMoYS5zaXplRGlmZi53aWR0aCsoYS5faGVscGVyP2Eub2Zmc2V0LmxlZnQtdS5sZWZ0OmEub2Zmc2V0LmxlZnQtaC5sZWZ0KSkscz1NYXRoLmFicyhhLnNpemVEaWZmLmhlaWdodCsoYS5faGVscGVyP2Eub2Zmc2V0LnRvcC11LnRvcDphLm9mZnNldC50b3AtaC50b3ApKSxpK2Euc2l6ZS53aWR0aD49YS5wYXJlbnREYXRhLndpZHRoJiYoYS5zaXplLndpZHRoPWEucGFyZW50RGF0YS53aWR0aC1pLGMmJihhLnNpemUuaGVpZ2h0PWEuc2l6ZS53aWR0aC9hLmFzcGVjdFJhdGlvLHA9ITEpKSxzK2Euc2l6ZS5oZWlnaHQ+PWEucGFyZW50RGF0YS5oZWlnaHQmJihhLnNpemUuaGVpZ2h0PWEucGFyZW50RGF0YS5oZWlnaHQtcyxjJiYoYS5zaXplLndpZHRoPWEuc2l6ZS5oZWlnaHQqYS5hc3BlY3RSYXRpbyxwPSExKSkscHx8KGEucG9zaXRpb24ubGVmdD1hLnByZXZQb3NpdGlvbi5sZWZ0LGEucG9zaXRpb24udG9wPWEucHJldlBvc2l0aW9uLnRvcCxhLnNpemUud2lkdGg9YS5wcmV2U2l6ZS53aWR0aCxhLnNpemUuaGVpZ2h0PWEucHJldlNpemUuaGVpZ2h0KX0sc3RvcDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksaT1lLm9wdGlvbnMscz1lLmNvbnRhaW5lck9mZnNldCxuPWUuY29udGFpbmVyUG9zaXRpb24sbz1lLmNvbnRhaW5lckVsZW1lbnQsYT10KGUuaGVscGVyKSxyPWEub2Zmc2V0KCksaD1hLm91dGVyV2lkdGgoKS1lLnNpemVEaWZmLndpZHRoLGw9YS5vdXRlckhlaWdodCgpLWUuc2l6ZURpZmYuaGVpZ2h0O2UuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3JlbGF0aXZlLy50ZXN0KG8uY3NzKFwicG9zaXRpb25cIikpJiZ0KHRoaXMpLmNzcyh7bGVmdDpyLmxlZnQtbi5sZWZ0LXMubGVmdCx3aWR0aDpoLGhlaWdodDpsfSksZS5faGVscGVyJiYhaS5hbmltYXRlJiYvc3RhdGljLy50ZXN0KG8uY3NzKFwicG9zaXRpb25cIikpJiZ0KHRoaXMpLmNzcyh7bGVmdDpyLmxlZnQtbi5sZWZ0LXMubGVmdCx3aWR0aDpoLGhlaWdodDpsfSl9fSksdC51aS5wbHVnaW4uYWRkKFwicmVzaXphYmxlXCIsXCJhbHNvUmVzaXplXCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPWUub3B0aW9uczt0KGkuYWxzb1Jlc2l6ZSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIix7d2lkdGg6cGFyc2VGbG9hdChlLndpZHRoKCkpLGhlaWdodDpwYXJzZUZsb2F0KGUuaGVpZ2h0KCkpLGxlZnQ6cGFyc2VGbG9hdChlLmNzcyhcImxlZnRcIikpLHRvcDpwYXJzZUZsb2F0KGUuY3NzKFwidG9wXCIpKX0pfSl9LHJlc2l6ZTpmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksbj1zLm9wdGlvbnMsbz1zLm9yaWdpbmFsU2l6ZSxhPXMub3JpZ2luYWxQb3NpdGlvbixyPXtoZWlnaHQ6cy5zaXplLmhlaWdodC1vLmhlaWdodHx8MCx3aWR0aDpzLnNpemUud2lkdGgtby53aWR0aHx8MCx0b3A6cy5wb3NpdGlvbi50b3AtYS50b3B8fDAsbGVmdDpzLnBvc2l0aW9uLmxlZnQtYS5sZWZ0fHwwfTt0KG4uYWxzb1Jlc2l6ZSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcykscz10KHRoaXMpLmRhdGEoXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiKSxuPXt9LG89ZS5wYXJlbnRzKGkub3JpZ2luYWxFbGVtZW50WzBdKS5sZW5ndGg/W1wid2lkdGhcIixcImhlaWdodFwiXTpbXCJ3aWR0aFwiLFwiaGVpZ2h0XCIsXCJ0b3BcIixcImxlZnRcIl07dC5lYWNoKG8sZnVuY3Rpb24odCxlKXt2YXIgaT0oc1tlXXx8MCkrKHJbZV18fDApO2kmJmk+PTAmJihuW2VdPWl8fG51bGwpfSksZS5jc3Mobil9KX0sc3RvcDpmdW5jdGlvbigpe3QodGhpcykucmVtb3ZlRGF0YShcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIpfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiZ2hvc3RcIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGk9ZS5zaXplO2UuZ2hvc3Q9ZS5vcmlnaW5hbEVsZW1lbnQuY2xvbmUoKSxlLmdob3N0LmNzcyh7b3BhY2l0eTouMjUsZGlzcGxheTpcImJsb2NrXCIscG9zaXRpb246XCJyZWxhdGl2ZVwiLGhlaWdodDppLmhlaWdodCx3aWR0aDppLndpZHRoLG1hcmdpbjowLGxlZnQ6MCx0b3A6MH0pLGUuX2FkZENsYXNzKGUuZ2hvc3QsXCJ1aS1yZXNpemFibGUtZ2hvc3RcIiksITEhPT10LnVpQmFja0NvbXBhdCYmXCJzdHJpbmdcIj09dHlwZW9mIGUub3B0aW9ucy5naG9zdCYmZS5naG9zdC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZ2hvc3QpLGUuZ2hvc3QuYXBwZW5kVG8oZS5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpO2UuZ2hvc3QmJmUuZ2hvc3QuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsaGVpZ2h0OmUuc2l6ZS5oZWlnaHQsd2lkdGg6ZS5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpO2UuZ2hvc3QmJmUuaGVscGVyJiZlLmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQoZS5naG9zdC5nZXQoMCkpfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiZ3JpZFwiLHtyZXNpemU6ZnVuY3Rpb24oKXt2YXIgZSxpPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscz1pLm9wdGlvbnMsbj1pLnNpemUsbz1pLm9yaWdpbmFsU2l6ZSxhPWkub3JpZ2luYWxQb3NpdGlvbixyPWkuYXhpcyxoPVwibnVtYmVyXCI9PXR5cGVvZiBzLmdyaWQ/W3MuZ3JpZCxzLmdyaWRdOnMuZ3JpZCxsPWhbMF18fDEsYz1oWzFdfHwxLHU9TWF0aC5yb3VuZCgobi53aWR0aC1vLndpZHRoKS9sKSpsLGQ9TWF0aC5yb3VuZCgobi5oZWlnaHQtby5oZWlnaHQpL2MpKmMscD1vLndpZHRoK3UsZj1vLmhlaWdodCtkLGc9cy5tYXhXaWR0aCYmcy5tYXhXaWR0aDxwLG09cy5tYXhIZWlnaHQmJnMubWF4SGVpZ2h0PGYsXz1zLm1pbldpZHRoJiZzLm1pbldpZHRoPnAsdj1zLm1pbkhlaWdodCYmcy5taW5IZWlnaHQ+ZjtzLmdyaWQ9aCxfJiYocCs9bCksdiYmKGYrPWMpLGcmJihwLT1sKSxtJiYoZi09YyksL14oc2V8c3xlKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9Zik6L14obmUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wLWQpOi9eKHN3KSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0LXUpOigoZi1jPD0wfHxwLWw8PTApJiYoZT1pLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnModGhpcykpLGYtYz4wPyhpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9YS50b3AtZCk6KGY9Yy1lLmhlaWdodCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9YS50b3Arby5oZWlnaHQtZikscC1sPjA/KGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1hLmxlZnQtdSk6KHA9bC1lLndpZHRoLGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1hLmxlZnQrby53aWR0aC1wKSl9fSk7dC51aS5yZXNpemFibGU7dC53aWRnZXQoXCJ1aS5kaWFsb2dcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2FwcGVuZFRvOlwiYm9keVwiLGF1dG9PcGVuOiEwLGJ1dHRvbnM6W10sY2xhc3Nlczp7XCJ1aS1kaWFsb2dcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLWRpYWxvZy10aXRsZWJhclwiOlwidWktY29ybmVyLWFsbFwifSxjbG9zZU9uRXNjYXBlOiEwLGNsb3NlVGV4dDpcIkNsb3NlXCIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6XCJhdXRvXCIsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6XCJjZW50ZXJcIixhdDpcImNlbnRlclwiLG9mOndpbmRvdyxjb2xsaXNpb246XCJmaXRcIix1c2luZzpmdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLmNzcyhlKS5vZmZzZXQoKS50b3A7aTwwJiZ0KHRoaXMpLmNzcyhcInRvcFwiLGUudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLG51bGw9PXRoaXMub3B0aW9ucy50aXRsZSYmbnVsbCE9dGhpcy5vcmlnaW5hbFRpdGxlJiYodGhpcy5vcHRpb25zLnRpdGxlPXRoaXMub3JpZ2luYWxUaXRsZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPSExKSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKFwidGl0bGVcIikuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kaWFsb2ctY29udGVudFwiLFwidWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fY3JlYXRlVGl0bGViYXIoKSx0aGlzLl9jcmVhdGVCdXR0b25QYW5lKCksdGhpcy5vcHRpb25zLmRyYWdnYWJsZSYmdC5mbi5kcmFnZ2FibGUmJnRoaXMuX21ha2VEcmFnZ2FibGUoKSx0aGlzLm9wdGlvbnMucmVzaXphYmxlJiZ0LmZuLnJlc2l6YWJsZSYmdGhpcy5fbWFrZVJlc2l6YWJsZSgpLHRoaXMuX2lzT3Blbj0hMSx0aGlzLl90cmFja0ZvY3VzKCl9LFxuX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIGUmJihlLmpxdWVyeXx8ZS5ub2RlVHlwZSk/dChlKTp0aGlzLmRvY3VtZW50LmZpbmQoZXx8XCJib2R5XCIpLmVxKDApfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksdGhpcy5lbGVtZW50LnJlbW92ZVVuaXF1ZUlkKCkuY3NzKHRoaXMub3JpZ2luYWxDc3MpLmRldGFjaCgpLHRoaXMudWlEaWFsb2cucmVtb3ZlKCksdGhpcy5vcmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIsdGhpcy5vcmlnaW5hbFRpdGxlKSx0PWUucGFyZW50LmNoaWxkcmVuKCkuZXEoZS5pbmRleCksdC5sZW5ndGgmJnRbMF0hPT10aGlzLmVsZW1lbnRbMF0/dC5iZWZvcmUodGhpcy5lbGVtZW50KTplLnBhcmVudC5hcHBlbmQodGhpcy5lbGVtZW50KX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlEaWFsb2d9LGRpc2FibGU6dC5ub29wLGVuYWJsZTp0Lm5vb3AsY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpczt0aGlzLl9pc09wZW4mJiExIT09dGhpcy5fdHJpZ2dlcihcImJlZm9yZUNsb3NlXCIsZSkmJih0aGlzLl9pc09wZW49ITEsdGhpcy5fZm9jdXNlZEVsZW1lbnQ9bnVsbCx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMub3BlbmVyLmZpbHRlcihcIjpmb2N1c2FibGVcIikudHJpZ2dlcihcImZvY3VzXCIpLmxlbmd0aHx8dC51aS5zYWZlQmx1cih0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSx0aGlzLl9oaWRlKHRoaXMudWlEaWFsb2csdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtpLl90cmlnZ2VyKFwiY2xvc2VcIixlKX0pKX0saXNPcGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2lzT3Blbn0sbW92ZVRvVG9wOmZ1bmN0aW9uKCl7dGhpcy5fbW92ZVRvVG9wKCl9LF9tb3ZlVG9Ub3A6ZnVuY3Rpb24oZSxpKXt2YXIgcz0hMSxuPXRoaXMudWlEaWFsb2cuc2libGluZ3MoXCIudWktZnJvbnQ6dmlzaWJsZVwiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4rdCh0aGlzKS5jc3MoXCJ6LWluZGV4XCIpfSkuZ2V0KCksbz1NYXRoLm1heC5hcHBseShudWxsLG4pO3JldHVybiBvPj0rdGhpcy51aURpYWxvZy5jc3MoXCJ6LWluZGV4XCIpJiYodGhpcy51aURpYWxvZy5jc3MoXCJ6LWluZGV4XCIsbysxKSxzPSEwKSxzJiYhaSYmdGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsZSksc30sb3BlbjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7aWYodGhpcy5faXNPcGVuKXJldHVybiB2b2lkKHRoaXMuX21vdmVUb1RvcCgpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCkpO3RoaXMuX2lzT3Blbj0hMCx0aGlzLm9wZW5lcj10KHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpLHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbigpLHRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9tb3ZlVG9Ub3AobnVsbCwhMCksdGhpcy5vdmVybGF5JiZ0aGlzLm92ZXJsYXkuY3NzKFwiei1pbmRleFwiLHRoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiKS0xKSx0aGlzLl9zaG93KHRoaXMudWlEaWFsb2csdGhpcy5vcHRpb25zLnNob3csZnVuY3Rpb24oKXtlLl9mb2N1c1RhYmJhYmxlKCksZS5fdHJpZ2dlcihcImZvY3VzXCIpfSksdGhpcy5fbWFrZUZvY3VzVGFyZ2V0KCksdGhpcy5fdHJpZ2dlcihcIm9wZW5cIil9LF9mb2N1c1RhYmJhYmxlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fZm9jdXNlZEVsZW1lbnQ7dHx8KHQ9dGhpcy5lbGVtZW50LmZpbmQoXCJbYXV0b2ZvY3VzXVwiKSksdC5sZW5ndGh8fCh0PXRoaXMuZWxlbWVudC5maW5kKFwiOnRhYmJhYmxlXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZChcIjp0YWJiYWJsZVwiKSksdC5sZW5ndGh8fCh0PXRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmZpbHRlcihcIjp0YWJiYWJsZVwiKSksdC5sZW5ndGh8fCh0PXRoaXMudWlEaWFsb2cpLHQuZXEoMCkudHJpZ2dlcihcImZvY3VzXCIpfSxfa2VlcEZvY3VzOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXt2YXIgZT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pO3RoaXMudWlEaWFsb2dbMF09PT1lfHx0LmNvbnRhaW5zKHRoaXMudWlEaWFsb2dbMF0sZSl8fHRoaXMuX2ZvY3VzVGFiYmFibGUoKX1lLnByZXZlbnREZWZhdWx0KCksaS5jYWxsKHRoaXMpLHRoaXMuX2RlbGF5KGkpfSxfY3JlYXRlV3JhcHBlcjpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2c9dChcIjxkaXY+XCIpLmhpZGUoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOlwiZGlhbG9nXCJ9KS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nLFwidWktZGlhbG9nXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnRcIiksdGhpcy5fb24odGhpcy51aURpYWxvZyx7a2V5ZG93bjpmdW5jdGlvbihlKXtpZih0aGlzLm9wdGlvbnMuY2xvc2VPbkVzY2FwZSYmIWUuaXNEZWZhdWx0UHJldmVudGVkKCkmJmUua2V5Q29kZSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLkVTQ0FQRSlyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgdGhpcy5jbG9zZShlKTtpZihlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVEFCJiYhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGk9dGhpcy51aURpYWxvZy5maW5kKFwiOnRhYmJhYmxlXCIpLHM9aS5maWx0ZXIoXCI6Zmlyc3RcIiksbj1pLmZpbHRlcihcIjpsYXN0XCIpO2UudGFyZ2V0IT09blswXSYmZS50YXJnZXQhPT10aGlzLnVpRGlhbG9nWzBdfHxlLnNoaWZ0S2V5P2UudGFyZ2V0IT09c1swXSYmZS50YXJnZXQhPT10aGlzLnVpRGlhbG9nWzBdfHwhZS5zaGlmdEtleXx8KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bi50cmlnZ2VyKFwiZm9jdXNcIil9KSxlLnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9kZWxheShmdW5jdGlvbigpe3MudHJpZ2dlcihcImZvY3VzXCIpfSksZS5wcmV2ZW50RGVmYXVsdCgpKX19LG1vdXNlZG93bjpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlVG9Ub3AodCkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKX19KSx0aGlzLmVsZW1lbnQuZmluZChcIlthcmlhLWRlc2NyaWJlZGJ5XVwiKS5sZW5ndGh8fHRoaXMudWlEaWFsb2cuYXR0cih7XCJhcmlhLWRlc2NyaWJlZGJ5XCI6dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpfSl9LF9jcmVhdGVUaXRsZWJhcjpmdW5jdGlvbigpe3ZhciBlO3RoaXMudWlEaWFsb2dUaXRsZWJhcj10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZ1RpdGxlYmFyLFwidWktZGlhbG9nLXRpdGxlYmFyXCIsXCJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXIse21vdXNlZG93bjpmdW5jdGlvbihlKXt0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiKXx8dGhpcy51aURpYWxvZy50cmlnZ2VyKFwiZm9jdXNcIil9fSksdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2U9dChcIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj5cIikuYnV0dG9uKHtsYWJlbDp0KFwiPGE+XCIpLnRleHQodGhpcy5vcHRpb25zLmNsb3NlVGV4dCkuaHRtbCgpLGljb246XCJ1aS1pY29uLWNsb3NldGhpY2tcIixzaG93TGFiZWw6ITF9KS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLFwidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLHtjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZSh0KX19KSxlPXQoXCI8c3Bhbj5cIikudW5pcXVlSWQoKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZ1RpdGxlYmFyKSx0aGlzLl9hZGRDbGFzcyhlLFwidWktZGlhbG9nLXRpdGxlXCIpLHRoaXMuX3RpdGxlKGUpLHRoaXMudWlEaWFsb2dUaXRsZWJhci5wcmVwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy51aURpYWxvZy5hdHRyKHtcImFyaWEtbGFiZWxsZWRieVwiOmUuYXR0cihcImlkXCIpfSl9LF90aXRsZTpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMudGl0bGU/dC50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSk6dC5odG1sKFwiJiMxNjA7XCIpfSxfY3JlYXRlQnV0dG9uUGFuZTpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2dCdXR0b25QYW5lPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZSxcInVpLWRpYWxvZy1idXR0b25wYW5lXCIsXCJ1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXhcIiksdGhpcy51aUJ1dHRvblNldD10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlCdXR0b25TZXQsXCJ1aS1kaWFsb2ctYnV0dG9uc2V0XCIpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKX0sX2NyZWF0ZUJ1dHRvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zLmJ1dHRvbnM7aWYodGhpcy51aURpYWxvZ0J1dHRvblBhbmUucmVtb3ZlKCksdGhpcy51aUJ1dHRvblNldC5lbXB0eSgpLHQuaXNFbXB0eU9iamVjdChpKXx8dC5pc0FycmF5KGkpJiYhaS5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy51aURpYWxvZyxcInVpLWRpYWxvZy1idXR0b25zXCIpO3QuZWFjaChpLGZ1bmN0aW9uKGkscyl7dmFyIG4sbztzPXQuaXNGdW5jdGlvbihzKT97Y2xpY2s6cyx0ZXh0Oml9OnMscz10LmV4dGVuZCh7dHlwZTpcImJ1dHRvblwifSxzKSxuPXMuY2xpY2ssbz17aWNvbjpzLmljb24saWNvblBvc2l0aW9uOnMuaWNvblBvc2l0aW9uLHNob3dMYWJlbDpzLnNob3dMYWJlbCxpY29uczpzLmljb25zLHRleHQ6cy50ZXh0fSxkZWxldGUgcy5jbGljayxkZWxldGUgcy5pY29uLGRlbGV0ZSBzLmljb25Qb3NpdGlvbixkZWxldGUgcy5zaG93TGFiZWwsZGVsZXRlIHMuaWNvbnMsXCJib29sZWFuXCI9PXR5cGVvZiBzLnRleHQmJmRlbGV0ZSBzLnRleHQsdChcIjxidXR0b24+PC9idXR0b24+XCIscykuYnV0dG9uKG8pLmFwcGVuZFRvKGUudWlCdXR0b25TZXQpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe24uYXBwbHkoZS5lbGVtZW50WzBdLGFyZ3VtZW50cyl9KX0pLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2csXCJ1aS1kaWFsb2ctYnV0dG9uc1wiKSx0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybntwb3NpdGlvbjp0LnBvc2l0aW9uLG9mZnNldDp0Lm9mZnNldH19dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOlwiLnVpLWRpYWxvZy1jb250ZW50LCAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIsaGFuZGxlOlwiLnVpLWRpYWxvZy10aXRsZWJhclwiLGNvbnRhaW5tZW50OlwiZG9jdW1lbnRcIixzdGFydDpmdW5jdGlvbihzLG4pe2kuX2FkZENsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctZHJhZ2dpbmdcIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwiZHJhZ1N0YXJ0XCIscyxlKG4pKX0sZHJhZzpmdW5jdGlvbih0LHMpe2kuX3RyaWdnZXIoXCJkcmFnXCIsdCxlKHMpKX0sc3RvcDpmdW5jdGlvbihuLG8pe3ZhciBhPW8ub2Zmc2V0LmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscj1vLm9mZnNldC50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLnBvc2l0aW9uPXtteTpcImxlZnQgdG9wXCIsYXQ6XCJsZWZ0XCIrKGE+PTA/XCIrXCI6XCJcIikrYStcIiB0b3BcIisocj49MD9cIitcIjpcIlwiKStyLG9mOmkud2luZG93fSxpLl9yZW1vdmVDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX3VuYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwiZHJhZ1N0b3BcIixuLGUobykpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246dC5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTp0Lm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjp0LnBvc2l0aW9uLHNpemU6dC5zaXplfX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zLG49cy5yZXNpemFibGUsbz10aGlzLnVpRGlhbG9nLmNzcyhcInBvc2l0aW9uXCIpLGE9XCJzdHJpbmdcIj09dHlwZW9mIG4/bjpcIm4sZSxzLHcsc2Usc3csbmUsbndcIjt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOlwiLnVpLWRpYWxvZy1jb250ZW50XCIsY29udGFpbm1lbnQ6XCJkb2N1bWVudFwiLGFsc29SZXNpemU6dGhpcy5lbGVtZW50LG1heFdpZHRoOnMubWF4V2lkdGgsbWF4SGVpZ2h0OnMubWF4SGVpZ2h0LG1pbldpZHRoOnMubWluV2lkdGgsbWluSGVpZ2h0OnRoaXMuX21pbkhlaWdodCgpLGhhbmRsZXM6YSxzdGFydDpmdW5jdGlvbihzLG4pe2kuX2FkZENsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwicmVzaXplU3RhcnRcIixzLGUobikpfSxyZXNpemU6ZnVuY3Rpb24odCxzKXtpLl90cmlnZ2VyKFwicmVzaXplXCIsdCxlKHMpKX0sc3RvcDpmdW5jdGlvbihuLG8pe3ZhciBhPWkudWlEaWFsb2cub2Zmc2V0KCkscj1hLmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCksaD1hLnRvcC1pLmRvY3VtZW50LnNjcm9sbFRvcCgpO3MuaGVpZ2h0PWkudWlEaWFsb2cuaGVpZ2h0KCkscy53aWR0aD1pLnVpRGlhbG9nLndpZHRoKCkscy5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhyPj0wP1wiK1wiOlwiXCIpK3IrXCIgdG9wXCIrKGg+PTA/XCIrXCI6XCJcIikraCxvZjppLndpbmRvd30saS5fcmVtb3ZlQ2xhc3ModCh0aGlzKSxcInVpLWRpYWxvZy1yZXNpemluZ1wiKSxpLl91bmJsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcInJlc2l6ZVN0b3BcIixuLGUobykpfX0pLmNzcyhcInBvc2l0aW9uXCIsbyl9LF90cmFja0ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fb24odGhpcy53aWRnZXQoKSx7Zm9jdXNpbjpmdW5jdGlvbihlKXt0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl9mb2N1c2VkRWxlbWVudD10KGUudGFyZ2V0KX19KX0sX21ha2VGb2N1c1RhcmdldDpmdW5jdGlvbigpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT10LmluQXJyYXkodGhpcyxlKTstMSE9PWkmJmUuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1pbnN0YW5jZXNcIik7cmV0dXJuIHR8fCh0PVtdLHRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1pbnN0YW5jZXNcIix0KSksdH0sX21pbkhlaWdodDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm5cImF1dG9cIj09PXQuaGVpZ2h0P3QubWluSGVpZ2h0Ok1hdGgubWluKHQubWluSGVpZ2h0LHQuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51aURpYWxvZy5pcyhcIjp2aXNpYmxlXCIpO3R8fHRoaXMudWlEaWFsb2cuc2hvdygpLHRoaXMudWlEaWFsb2cucG9zaXRpb24odGhpcy5vcHRpb25zLnBvc2l0aW9uKSx0fHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxzPSExLG49e307dC5lYWNoKGUsZnVuY3Rpb24odCxlKXtpLl9zZXRPcHRpb24odCxlKSx0IGluIGkuc2l6ZVJlbGF0ZWRPcHRpb25zJiYocz0hMCksdCBpbiBpLnJlc2l6YWJsZVJlbGF0ZWRPcHRpb25zJiYoblt0XT1lKX0pLHMmJih0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSksdGhpcy51aURpYWxvZy5pcyhcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIikmJnRoaXMudWlEaWFsb2cucmVzaXphYmxlKFwib3B0aW9uXCIsbil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG89dGhpcy51aURpYWxvZztcImRpc2FibGVkXCIhPT1lJiYodGhpcy5fc3VwZXIoZSxpKSxcImFwcGVuZFRvXCI9PT1lJiZ0aGlzLnVpRGlhbG9nLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiYnV0dG9uc1wiPT09ZSYmdGhpcy5fY3JlYXRlQnV0dG9ucygpLFwiY2xvc2VUZXh0XCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOnQoXCI8YT5cIikudGV4dChcIlwiK3RoaXMub3B0aW9ucy5jbG9zZVRleHQpLmh0bWwoKX0pLFwiZHJhZ2dhYmxlXCI9PT1lJiYocz1vLmlzKFwiOmRhdGEodWktZHJhZ2dhYmxlKVwiKSxzJiYhaSYmby5kcmFnZ2FibGUoXCJkZXN0cm95XCIpLCFzJiZpJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCkpLFwicG9zaXRpb25cIj09PWUmJnRoaXMuX3Bvc2l0aW9uKCksXCJyZXNpemFibGVcIj09PWUmJihuPW8uaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpLG4mJiFpJiZvLnJlc2l6YWJsZShcImRlc3Ryb3lcIiksbiYmXCJzdHJpbmdcIj09dHlwZW9mIGkmJm8ucmVzaXphYmxlKFwib3B0aW9uXCIsXCJoYW5kbGVzXCIsaSksbnx8ITE9PT1pfHx0aGlzLl9tYWtlUmVzaXphYmxlKCkpLFwidGl0bGVcIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKFwiLnVpLWRpYWxvZy10aXRsZVwiKSkpfSxfc2l6ZTpmdW5jdGlvbigpe3ZhciB0LGUsaSxzPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuc2hvdygpLmNzcyh7d2lkdGg6XCJhdXRvXCIsbWluSGVpZ2h0OjAsbWF4SGVpZ2h0Olwibm9uZVwiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSx0PXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6XCJhdXRvXCIsd2lkdGg6cy53aWR0aH0pLm91dGVySGVpZ2h0KCksZT1NYXRoLm1heCgwLHMubWluSGVpZ2h0LXQpLGk9XCJudW1iZXJcIj09dHlwZW9mIHMubWF4SGVpZ2h0P01hdGgubWF4KDAscy5tYXhIZWlnaHQtdCk6XCJub25lXCIsXCJhdXRvXCI9PT1zLmhlaWdodD90aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6ZSxtYXhIZWlnaHQ6aSxoZWlnaHQ6XCJhdXRvXCJ9KTp0aGlzLmVsZW1lbnQuaGVpZ2h0KE1hdGgubWF4KDAscy5oZWlnaHQtdCkpLHRoaXMudWlEaWFsb2cuaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZShcIm9wdGlvblwiLFwibWluSGVpZ2h0XCIsdGhpcy5fbWluSGVpZ2h0KCkpfSxfYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQoXCJpZnJhbWVcIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtyZXR1cm4gdChcIjxkaXY+XCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCl9KS5hcHBlbmRUbyhlLnBhcmVudCgpKS5vZmZzZXQoZS5vZmZzZXQoKSlbMF19KX0sX3VuYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2NrcyYmKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcyl9LF9hbGxvd0ludGVyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiEhdChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1kaWFsb2dcIikubGVuZ3RofHwhIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGF0ZXBpY2tlclwiKS5sZW5ndGh9LF9jcmVhdGVPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsKXt2YXIgZT0hMDt0aGlzLl9kZWxheShmdW5jdGlvbigpe2U9ITF9KSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24odCl7ZXx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbih0KXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fYWRkQ2xhc3ModGhpcy5vdmVybGF5LG51bGwsXCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udFwiKSx0aGlzLl9vbih0aGlzLm92ZXJsYXkse21vdXNlZG93bjpcIl9rZWVwRm9jdXNcIn0pLHRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiLCh0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIil8fDApKzEpfX0sX2Rlc3Ryb3lPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsJiZ0aGlzLm92ZXJsYXkpe3ZhciB0PXRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiKS0xO3Q/dGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIsdCk6KHRoaXMuX29mZih0aGlzLmRvY3VtZW50LFwiZm9jdXNpblwiKSx0aGlzLmRvY3VtZW50LnJlbW92ZURhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIikpLHRoaXMub3ZlcmxheS5yZW1vdmUoKSx0aGlzLm92ZXJsYXk9bnVsbH19fSksITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS5kaWFsb2dcIix0LnVpLmRpYWxvZyx7b3B0aW9uczp7ZGlhbG9nQ2xhc3M6XCJcIn0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiZGlhbG9nQ2xhc3NcIj09PXQmJnRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyhlKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSk7dC51aS5kaWFsb2c7dC53aWRnZXQoXCJ1aS5kcm9wcGFibGVcIix7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4OlwiZHJvcFwiLG9wdGlvbnM6e2FjY2VwdDpcIipcIixhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxzY29wZTpcImRlZmF1bHRcIix0b2xlcmFuY2U6XCJpbnRlcnNlY3RcIixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMscz1pLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PXQuaXNGdW5jdGlvbihzKT9zOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKHMpfSx0aGlzLnByb3BvcnRpb25zPWZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGV8fChlPXt3aWR0aDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KTtlPWFyZ3VtZW50c1swXX0sdGhpcy5fYWRkVG9NYW5hZ2VyKGkuc2NvcGUpLGkuYWRkQ2xhc3NlcyYmdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcm9wcGFibGVcIil9LF9hZGRUb01hbmFnZXI6ZnVuY3Rpb24oZSl7dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXT10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2VdfHxbXSx0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2VdLnB1c2godGhpcyl9LF9zcGxpY2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT09PXRoaXMmJnQuc3BsaWNlKGUsMSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZShlKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe2lmKFwiYWNjZXB0XCI9PT1lKXRoaXMuYWNjZXB0PXQuaXNGdW5jdGlvbihpKT9pOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKGkpfTtlbHNlIGlmKFwic2NvcGVcIj09PWUpe3ZhciBzPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UocyksdGhpcy5fYWRkVG9NYW5hZ2VyKGkpfXRoaXMuX3N1cGVyKGUsaSl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt2YXIgaT10LnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMuX2FkZEFjdGl2ZUNsYXNzKCksaSYmdGhpcy5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLl9yZW1vdmVBY3RpdmVDbGFzcygpLGkmJnRoaXMuX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsZSx0aGlzLnVpKGkpKX0sX292ZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDtpJiYoaS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0saS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KSYmKHRoaXMuX2FkZEhvdmVyQ2xhc3MoKSx0aGlzLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy51aShpKSkpfSxfb3V0OmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLl9yZW1vdmVIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcIm91dFwiLGUsdGhpcy51aShpKSkpfSxfZHJvcDpmdW5jdGlvbihlLGkpe3ZhciBzPWl8fHQudWkuZGRtYW5hZ2VyLmN1cnJlbnQsbj0hMTtyZXR1cm4hKCFzfHwocy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KVswXT09PXRoaXMuZWxlbWVudFswXSkmJih0aGlzLmVsZW1lbnQuZmluZChcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikubm90KFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKS5kcm9wcGFibGUoXCJpbnN0YW5jZVwiKTtpZihpLm9wdGlvbnMuZ3JlZWR5JiYhaS5vcHRpb25zLmRpc2FibGVkJiZpLm9wdGlvbnMuc2NvcGU9PT1zLm9wdGlvbnMuc2NvcGUmJmkuYWNjZXB0LmNhbGwoaS5lbGVtZW50WzBdLHMuY3VycmVudEl0ZW18fHMuZWxlbWVudCkmJmcocyx0LmV4dGVuZChpLHtvZmZzZXQ6aS5lbGVtZW50Lm9mZnNldCgpfSksaS5vcHRpb25zLnRvbGVyYW5jZSxlKSlyZXR1cm4gbj0hMCwhMX0pLCFuJiYoISF0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiYodGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKSx0aGlzLl9yZW1vdmVIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcImRyb3BcIixlLHRoaXMudWkocykpLHRoaXMuZWxlbWVudCkpKX0sdWk6ZnVuY3Rpb24odCl7cmV0dXJue2RyYWdnYWJsZTp0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQsaGVscGVyOnQuaGVscGVyLHBvc2l0aW9uOnQucG9zaXRpb24sb2Zmc2V0OnQucG9zaXRpb25BYnN9fSxfYWRkSG92ZXJDbGFzczpmdW5jdGlvbigpe3RoaXMuX2FkZENsYXNzKFwidWktZHJvcHBhYmxlLWhvdmVyXCIpfSxfcmVtb3ZlSG92ZXJDbGFzczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKFwidWktZHJvcHBhYmxlLWhvdmVyXCIpfSxfYWRkQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9hZGRDbGFzcyhcInVpLWRyb3BwYWJsZS1hY3RpdmVcIil9LF9yZW1vdmVBY3RpdmVDbGFzczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKFwidWktZHJvcHBhYmxlLWFjdGl2ZVwiKX19KTt2YXIgZz10LnVpLmludGVyc2VjdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLGkpe3JldHVybiB0Pj1lJiZ0PGUraX1yZXR1cm4gZnVuY3Rpb24oZSxpLHMsbil7aWYoIWkub2Zmc2V0KXJldHVybiExO3ZhciBvPShlLnBvc2l0aW9uQWJzfHxlLnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0K2UubWFyZ2lucy5sZWZ0LGE9KGUucG9zaXRpb25BYnN8fGUucG9zaXRpb24uYWJzb2x1dGUpLnRvcCtlLm1hcmdpbnMudG9wLHI9bytlLmhlbHBlclByb3BvcnRpb25zLndpZHRoLGg9YStlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsPWkub2Zmc2V0LmxlZnQsYz1pLm9mZnNldC50b3AsdT1sK2kucHJvcG9ydGlvbnMoKS53aWR0aCxkPWMraS5wcm9wb3J0aW9ucygpLmhlaWdodDtzd2l0Y2gocyl7Y2FzZVwiZml0XCI6cmV0dXJuIGw8PW8mJnI8PXUmJmM8PWEmJmg8PWQ7Y2FzZVwiaW50ZXJzZWN0XCI6cmV0dXJuIGw8bytlLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJnItZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPHUmJmM8YStlLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZoLWUuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8ZDtjYXNlXCJwb2ludGVyXCI6cmV0dXJuIHQobi5wYWdlWSxjLGkucHJvcG9ydGlvbnMoKS5oZWlnaHQpJiZ0KG4ucGFnZVgsbCxpLnByb3BvcnRpb25zKCkud2lkdGgpO2Nhc2VcInRvdWNoXCI6cmV0dXJuKGE+PWMmJmE8PWR8fGg+PWMmJmg8PWR8fGE8YyYmaD5kKSYmKG8+PWwmJm88PXV8fHI+PWwmJnI8PXV8fG88bCYmcj51KTtkZWZhdWx0OnJldHVybiExfX19KCk7dC51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOntkZWZhdWx0OltdfSxwcmVwYXJlT2Zmc2V0czpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbz10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV18fFtdLGE9aT9pLnR5cGU6bnVsbCxyPShlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpLmZpbmQoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLmFkZEJhY2soKTt0OmZvcihzPTA7czxvLmxlbmd0aDtzKyspaWYoIShvW3NdLm9wdGlvbnMuZGlzYWJsZWR8fGUmJiFvW3NdLmFjY2VwdC5jYWxsKG9bc10uZWxlbWVudFswXSxlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpKSl7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylpZihyW25dPT09b1tzXS5lbGVtZW50WzBdKXtvW3NdLnByb3BvcnRpb25zKCkuaGVpZ2h0PTA7Y29udGludWUgdH1vW3NdLnZpc2libGU9XCJub25lXCIhPT1vW3NdLmVsZW1lbnQuY3NzKFwiZGlzcGxheVwiKSxvW3NdLnZpc2libGUmJihcIm1vdXNlZG93blwiPT09YSYmb1tzXS5fYWN0aXZhdGUuY2FsbChvW3NdLGkpLG9bc10ub2Zmc2V0PW9bc10uZWxlbWVudC5vZmZzZXQoKSxvW3NdLnByb3BvcnRpb25zKHt3aWR0aDpvW3NdLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0Om9bc10uZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KSl9fSxkcm9wOmZ1bmN0aW9uKGUsaSl7dmFyIHM9ITE7cmV0dXJuIHQuZWFjaCgodC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSkuc2xpY2UoKSxmdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmZyhlLHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSYmKHM9dGhpcy5fZHJvcC5jYWxsKHRoaXMsaSl8fHMpLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50KSYmKHRoaXMuaXNvdXQ9ITAsdGhpcy5pc292ZXI9ITEsdGhpcy5fZGVhY3RpdmF0ZS5jYWxsKHRoaXMsaSkpKX0pLHN9LGRyYWdTdGFydDpmdW5jdGlvbihlLGkpe2UuZWxlbWVudC5wYXJlbnRzVW50aWwoXCJib2R5XCIpLm9uKFwic2Nyb2xsLmRyb3BwYWJsZVwiLGZ1bmN0aW9uKCl7ZS5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGUsaSl9KX0sZHJhZzpmdW5jdGlvbihlLGkpe2Uub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpLHQuZWFjaCh0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmIXRoaXMuZ3JlZWR5Q2hpbGQmJnRoaXMudmlzaWJsZSl7dmFyIHMsbixvLGE9ZyhlLHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSxpKSxyPSFhJiZ0aGlzLmlzb3Zlcj9cImlzb3V0XCI6YSYmIXRoaXMuaXNvdmVyP1wiaXNvdmVyXCI6bnVsbDtyJiYodGhpcy5vcHRpb25zLmdyZWVkeSYmKG49dGhpcy5vcHRpb25zLnNjb3BlLG89dGhpcy5lbGVtZW50LnBhcmVudHMoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0KHRoaXMpLmRyb3BwYWJsZShcImluc3RhbmNlXCIpLm9wdGlvbnMuc2NvcGU9PT1ufSksby5sZW5ndGgmJihzPXQob1swXSkuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIikscy5ncmVlZHlDaGlsZD1cImlzb3ZlclwiPT09cikpLHMmJlwiaXNvdmVyXCI9PT1yJiYocy5pc292ZXI9ITEscy5pc291dD0hMCxzLl9vdXQuY2FsbChzLGkpKSx0aGlzW3JdPSEwLHRoaXNbXCJpc291dFwiPT09cj9cImlzb3ZlclwiOlwiaXNvdXRcIl09ITEsdGhpc1tcImlzb3ZlclwiPT09cj9cIl9vdmVyXCI6XCJfb3V0XCJdLmNhbGwodGhpcyxpKSxzJiZcImlzb3V0XCI9PT1yJiYocy5pc291dD0hMSxzLmlzb3Zlcj0hMCxzLl9vdmVyLmNhbGwocyxpKSkpfX0pfSxkcmFnU3RvcDpmdW5jdGlvbihlLGkpe2UuZWxlbWVudC5wYXJlbnRzVW50aWwoXCJib2R5XCIpLm9mZihcInNjcm9sbC5kcm9wcGFibGVcIiksZS5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGUsaSl9fSwhMSE9PXQudWlCYWNrQ29tcGF0JiZ0LndpZGdldChcInVpLmRyb3BwYWJsZVwiLHQudWkuZHJvcHBhYmxlLHtvcHRpb25zOntob3ZlckNsYXNzOiExLGFjdGl2ZUNsYXNzOiExfSxfYWRkQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyl9LF9yZW1vdmVBY3RpdmVDbGFzczpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKX0sX2FkZEhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpfSxfcmVtb3ZlSG92ZXJDbGFzczpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyl9fSk7dC51aS5kcm9wcGFibGUsdC53aWRnZXQoXCJ1aS5wcm9ncmVzc2JhclwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7Y2xhc3Nlczp7XCJ1aS1wcm9ncmVzc2JhclwiOlwidWktY29ybmVyLWFsbFwiLFwidWktcHJvZ3Jlc3NiYXItdmFsdWVcIjpcInVpLWNvcm5lci1sZWZ0XCIsXCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiOlwidWktY29ybmVyLXJpZ2h0XCJ9LG1heDoxMDAsdmFsdWU6MCxjaGFuZ2U6bnVsbCxjb21wbGV0ZTpudWxsfSxtaW46MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vbGRWYWx1ZT10aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSgpLHRoaXMuZWxlbWVudC5hdHRyKHtyb2xlOlwicHJvZ3Jlc3NiYXJcIixcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm1pbn0pLHRoaXMuX2FkZENsYXNzKFwidWktcHJvZ3Jlc3NiYXJcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLnZhbHVlRGl2PXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMudmFsdWVEaXYsXCJ1aS1wcm9ncmVzc2Jhci12YWx1ZVwiLFwidWktd2lkZ2V0LWhlYWRlclwiKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGUgYXJpYS12YWx1ZW1pbiBhcmlhLXZhbHVlbWF4IGFyaWEtdmFsdWVub3dcIiksdGhpcy52YWx1ZURpdi5yZW1vdmUoKX0sdmFsdWU6ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dClyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlO3RoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfY29uc3RyYWluZWRWYWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9ITE9PT10LFwibnVtYmVyXCIhPXR5cGVvZiB0JiYodD0wKSwhdGhpcy5pbmRldGVybWluYXRlJiZNYXRoLm1pbih0aGlzLm9wdGlvbnMubWF4LE1hdGgubWF4KHRoaXMubWluLHQpKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9dC52YWx1ZTtkZWxldGUgdC52YWx1ZSx0aGlzLl9zdXBlcih0KSx0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wibWF4XCI9PT10JiYoZT1NYXRoLm1heCh0aGlzLm1pbixlKSksdGhpcy5fc3VwZXIodCxlKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLHQpLHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LF9wZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5kZXRlcm1pbmF0ZT8xMDA6MTAwKih0aGlzLm9wdGlvbnMudmFsdWUtdGhpcy5taW4pLyh0aGlzLm9wdGlvbnMubWF4LXRoaXMubWluKX0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy52YWx1ZSxpPXRoaXMuX3BlcmNlbnRhZ2UoKTt0aGlzLnZhbHVlRGl2LnRvZ2dsZSh0aGlzLmluZGV0ZXJtaW5hdGV8fGU+dGhpcy5taW4pLndpZHRoKGkudG9GaXhlZCgwKStcIiVcIiksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy52YWx1ZURpdixcInVpLXByb2dyZXNzYmFyLWNvbXBsZXRlXCIsbnVsbCxlPT09dGhpcy5vcHRpb25zLm1heCkuX3RvZ2dsZUNsYXNzKFwidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZVwiLG51bGwsdGhpcy5pbmRldGVybWluYXRlKSx0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS12YWx1ZW5vd1wiKSx0aGlzLm92ZXJsYXlEaXZ8fCh0aGlzLm92ZXJsYXlEaXY9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpLHRoaXMuX2FkZENsYXNzKHRoaXMub3ZlcmxheURpdixcInVpLXByb2dyZXNzYmFyLW92ZXJsYXlcIikpKToodGhpcy5lbGVtZW50LmF0dHIoe1wiYXJpYS12YWx1ZW1heFwiOnRoaXMub3B0aW9ucy5tYXgsXCJhcmlhLXZhbHVlbm93XCI6ZX0pLHRoaXMub3ZlcmxheURpdiYmKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSx0aGlzLm92ZXJsYXlEaXY9bnVsbCkpLHRoaXMub2xkVmFsdWUhPT1lJiYodGhpcy5vbGRWYWx1ZT1lLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIikpLGU9PT10aGlzLm9wdGlvbnMubWF4JiZ0aGlzLl90cmlnZ2VyKFwiY29tcGxldGVcIil9fSksdC53aWRnZXQoXCJ1aS5zZWxlY3RhYmxlXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2FwcGVuZFRvOlwiYm9keVwiLGF1dG9SZWZyZXNoOiEwLGRpc3RhbmNlOjAsZmlsdGVyOlwiKlwiLHRvbGVyYW5jZTpcInRvdWNoXCIsc2VsZWN0ZWQ6bnVsbCxzZWxlY3Rpbmc6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCx1bnNlbGVjdGVkOm51bGwsdW5zZWxlY3Rpbmc6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1zZWxlY3RhYmxlXCIpLHRoaXMuZHJhZ2dlZD0hMSx0aGlzLnJlZnJlc2g9ZnVuY3Rpb24oKXtlLmVsZW1lbnRQb3M9dChlLmVsZW1lbnRbMF0pLm9mZnNldCgpLGUuc2VsZWN0ZWVzPXQoZS5vcHRpb25zLmZpbHRlcixlLmVsZW1lbnRbMF0pLGUuX2FkZENsYXNzKGUuc2VsZWN0ZWVzLFwidWktc2VsZWN0ZWVcIiksZS5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykscz1pLm9mZnNldCgpLG49e2xlZnQ6cy5sZWZ0LWUuZWxlbWVudFBvcy5sZWZ0LHRvcDpzLnRvcC1lLmVsZW1lbnRQb3MudG9wfTt0LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiLHtlbGVtZW50OnRoaXMsJGVsZW1lbnQ6aSxsZWZ0Om4ubGVmdCx0b3A6bi50b3AscmlnaHQ6bi5sZWZ0K2kub3V0ZXJXaWR0aCgpLGJvdHRvbTpuLnRvcCtpLm91dGVySGVpZ2h0KCksc3RhcnRzZWxlY3RlZDohMSxzZWxlY3RlZDppLmhhc0NsYXNzKFwidWktc2VsZWN0ZWRcIiksc2VsZWN0aW5nOmkuaGFzQ2xhc3MoXCJ1aS1zZWxlY3RpbmdcIiksdW5zZWxlY3Rpbmc6aS5oYXNDbGFzcyhcInVpLXVuc2VsZWN0aW5nXCIpfSl9KX0sdGhpcy5yZWZyZXNoKCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9dChcIjxkaXY+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaGVscGVyLFwidWktc2VsZWN0YWJsZS1oZWxwZXJcIil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZXMucmVtb3ZlRGF0YShcInNlbGVjdGFibGUtaXRlbVwiKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9uczt0aGlzLm9wb3M9W2UucGFnZVgsZS5wYWdlWV0sdGhpcy5lbGVtZW50UG9zPXQodGhpcy5lbGVtZW50WzBdKS5vZmZzZXQoKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCh0aGlzLnNlbGVjdGVlcz10KHMuZmlsdGVyLHRoaXMuZWxlbWVudFswXSksdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsZSksdChzLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDplLnBhZ2VYLHRvcDplLnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxzLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoXCIudWktc2VsZWN0ZWRcIikuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO3Muc3RhcnRzZWxlY3RlZD0hMCxlLm1ldGFLZXl8fGUuY3RybEtleXx8KGkuX3JlbW92ZUNsYXNzKHMuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxzLnNlbGVjdGVkPSExLGkuX2FkZENsYXNzKHMuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxzLnVuc2VsZWN0aW5nPSEwLGkuX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOnMuZWxlbWVudH0pKX0pLHQoZS50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3ZhciBzLG49dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7aWYobilyZXR1cm4gcz0hZS5tZXRhS2V5JiYhZS5jdHJsS2V5fHwhbi4kZWxlbWVudC5oYXNDbGFzcyhcInVpLXNlbGVjdGVkXCIpLGkuX3JlbW92ZUNsYXNzKG4uJGVsZW1lbnQscz9cInVpLXVuc2VsZWN0aW5nXCI6XCJ1aS1zZWxlY3RlZFwiKS5fYWRkQ2xhc3Mobi4kZWxlbWVudCxzP1widWktc2VsZWN0aW5nXCI6XCJ1aS11bnNlbGVjdGluZ1wiKSxuLnVuc2VsZWN0aW5nPSFzLG4uc2VsZWN0aW5nPXMsbi5zZWxlY3RlZD1zLHM/aS5fdHJpZ2dlcihcInNlbGVjdGluZ1wiLGUse3NlbGVjdGluZzpuLmVsZW1lbnR9KTppLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIixlLHt1bnNlbGVjdGluZzpuLmVsZW1lbnR9KSwhMX0pKX0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXtpZih0aGlzLmRyYWdnZWQ9ITAsIXRoaXMub3B0aW9ucy5kaXNhYmxlZCl7dmFyIGkscz10aGlzLG49dGhpcy5vcHRpb25zLG89dGhpcy5vcG9zWzBdLGE9dGhpcy5vcG9zWzFdLHI9ZS5wYWdlWCxoPWUucGFnZVk7cmV0dXJuIG8+ciYmKGk9cixyPW8sbz1pKSxhPmgmJihpPWgsaD1hLGE9aSksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0Om8sdG9wOmEsd2lkdGg6ci1vLGhlaWdodDpoLWF9KSx0aGlzLnNlbGVjdGVlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIiksbD0hMSxjPXt9O2kmJmkuZWxlbWVudCE9PXMuZWxlbWVudFswXSYmKGMubGVmdD1pLmxlZnQrcy5lbGVtZW50UG9zLmxlZnQsYy5yaWdodD1pLnJpZ2h0K3MuZWxlbWVudFBvcy5sZWZ0LGMudG9wPWkudG9wK3MuZWxlbWVudFBvcy50b3AsYy5ib3R0b209aS5ib3R0b20rcy5lbGVtZW50UG9zLnRvcCxcInRvdWNoXCI9PT1uLnRvbGVyYW5jZT9sPSEoYy5sZWZ0PnJ8fGMucmlnaHQ8b3x8Yy50b3A+aHx8Yy5ib3R0b208YSk6XCJmaXRcIj09PW4udG9sZXJhbmNlJiYobD1jLmxlZnQ+byYmYy5yaWdodDxyJiZjLnRvcD5hJiZjLmJvdHRvbTxoKSxsPyhpLnNlbGVjdGVkJiYocy5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGVkXCIpLGkuc2VsZWN0ZWQ9ITEpLGkudW5zZWxlY3RpbmcmJihzLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksaS51bnNlbGVjdGluZz0hMSksaS5zZWxlY3Rpbmd8fChzLl9hZGRDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoXCJzZWxlY3RpbmdcIixlLHtzZWxlY3Rpbmc6aS5lbGVtZW50fSkpKTooaS5zZWxlY3RpbmcmJigoZS5tZXRhS2V5fHxlLmN0cmxLZXkpJiZpLnN0YXJ0c2VsZWN0ZWQ/KHMuX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RpbmdcIiksaS5zZWxlY3Rpbmc9ITEscy5fYWRkQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGVkXCIpLGkuc2VsZWN0ZWQ9ITApOihzLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSExLGkuc3RhcnRzZWxlY3RlZCYmKHMuX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxpLnVuc2VsZWN0aW5nPSEwKSxzLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIixlLHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpLGkuc2VsZWN0ZWQmJihlLm1ldGFLZXl8fGUuY3RybEtleXx8aS5zdGFydHNlbGVjdGVkfHwocy5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGVkXCIpLGkuc2VsZWN0ZWQ9ITEscy5fYWRkQ2xhc3MoaS4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLGkudW5zZWxlY3Rpbmc9ITAscy5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSkpfSksITF9fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7cmV0dXJuIHRoaXMuZHJhZ2dlZD0hMSx0KFwiLnVpLXVuc2VsZWN0aW5nXCIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7aS5fcmVtb3ZlQ2xhc3Mocy4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLHMudW5zZWxlY3Rpbmc9ITEscy5zdGFydHNlbGVjdGVkPSExLGkuX3RyaWdnZXIoXCJ1bnNlbGVjdGVkXCIsZSx7dW5zZWxlY3RlZDpzLmVsZW1lbnR9KX0pLHQoXCIudWktc2VsZWN0aW5nXCIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7aS5fcmVtb3ZlQ2xhc3Mocy4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKS5fYWRkQ2xhc3Mocy4kZWxlbWVudCxcInVpLXNlbGVjdGVkXCIpLHMuc2VsZWN0aW5nPSExLHMuc2VsZWN0ZWQ9ITAscy5zdGFydHNlbGVjdGVkPSEwLGkuX3RyaWdnZXIoXCJzZWxlY3RlZFwiLGUse3NlbGVjdGVkOnMuZWxlbWVudH0pfSksdGhpcy5fdHJpZ2dlcihcInN0b3BcIixlKSx0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX19KSx0LndpZGdldChcInVpLnNlbGVjdG1lbnVcIixbdC51aS5mb3JtUmVzZXRNaXhpbix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPHNlbGVjdD5cIixvcHRpb25zOnthcHBlbmRUbzpudWxsLGNsYXNzZXM6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOlwidWktY29ybmVyLXRvcFwiLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItYWxsXCJ9LGRpc2FibGVkOm51bGwsaWNvbnM6e2J1dHRvbjpcInVpLWljb24tdHJpYW5nbGUtMS1zXCJ9LHBvc2l0aW9uOntteTpcImxlZnQgdG9wXCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcIm5vbmVcIn0sd2lkdGg6ITEsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKTt0aGlzLmlkcz17ZWxlbWVudDplLGJ1dHRvbjplK1wiLWJ1dHRvblwiLG1lbnU6ZStcIi1tZW51XCJ9LHRoaXMuX2RyYXdCdXR0b24oKSx0aGlzLl9kcmF3TWVudSgpLHRoaXMuX2JpbmRGb3JtUmVzZXRIYW5kbGVyKCksdGhpcy5fcmVuZGVyZWQ9ITEsdGhpcy5tZW51SXRlbXM9dCgpfSxfZHJhd0J1dHRvbjpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcyxzPXRoaXMuX3BhcnNlT3B0aW9uKHRoaXMuZWxlbWVudC5maW5kKFwib3B0aW9uOnNlbGVjdGVkXCIpLHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KTt0aGlzLmxhYmVscz10aGlzLmVsZW1lbnQubGFiZWxzKCkuYXR0cihcImZvclwiLHRoaXMuaWRzLmJ1dHRvbiksdGhpcy5fb24odGhpcy5sYWJlbHMse2NsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuYnV0dG9uLmZvY3VzKCksdC5wcmV2ZW50RGVmYXVsdCgpfX0pLHRoaXMuZWxlbWVudC5oaWRlKCksdGhpcy5idXR0b249dChcIjxzcGFuPlwiLHt0YWJpbmRleDp0aGlzLm9wdGlvbnMuZGlzYWJsZWQ/LTE6MCxpZDp0aGlzLmlkcy5idXR0b24scm9sZTpcImNvbWJvYm94XCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1hdXRvY29tcGxldGVcIjpcImxpc3RcIixcImFyaWEtb3duc1wiOnRoaXMuaWRzLm1lbnUsXCJhcmlhLWhhc3BvcHVwXCI6XCJ0cnVlXCIsdGl0bGU6dGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiKX0pLmluc2VydEFmdGVyKHRoaXMuZWxlbWVudCksdGhpcy5fYWRkQ2xhc3ModGhpcy5idXR0b24sXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbiB1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIixcInVpLWJ1dHRvbiB1aS13aWRnZXRcIiksZT10KFwiPHNwYW4+XCIpLmFwcGVuZFRvKHRoaXMuYnV0dG9uKSx0aGlzLl9hZGRDbGFzcyhlLFwidWktc2VsZWN0bWVudS1pY29uXCIsXCJ1aS1pY29uIFwiK3RoaXMub3B0aW9ucy5pY29ucy5idXR0b24pLHRoaXMuYnV0dG9uSXRlbT10aGlzLl9yZW5kZXJCdXR0b25JdGVtKHMpLmFwcGVuZFRvKHRoaXMuYnV0dG9uKSwhMSE9PXRoaXMub3B0aW9ucy53aWR0aCYmdGhpcy5fcmVzaXplQnV0dG9uKCksdGhpcy5fb24odGhpcy5idXR0b24sdGhpcy5fYnV0dG9uRXZlbnRzKSx0aGlzLmJ1dHRvbi5vbmUoXCJmb2N1c2luXCIsZnVuY3Rpb24oKXtpLl9yZW5kZXJlZHx8aS5fcmVmcmVzaE1lbnUoKX0pfSxfZHJhd01lbnU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubWVudT10KFwiPHVsPlwiLHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCIsXCJhcmlhLWxhYmVsbGVkYnlcIjp0aGlzLmlkcy5idXR0b24saWQ6dGhpcy5pZHMubWVudX0pLHRoaXMubWVudVdyYXA9dChcIjxkaXY+XCIpLmFwcGVuZCh0aGlzLm1lbnUpLHRoaXMuX2FkZENsYXNzKHRoaXMubWVudVdyYXAsXCJ1aS1zZWxlY3RtZW51LW1lbnVcIixcInVpLWZyb250XCIpLHRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5tZW51SW5zdGFuY2U9dGhpcy5tZW51Lm1lbnUoe2NsYXNzZXM6e1widWktbWVudVwiOlwidWktY29ybmVyLWJvdHRvbVwifSxyb2xlOlwibGlzdGJveFwiLHNlbGVjdDpmdW5jdGlvbih0LGkpe3QucHJldmVudERlZmF1bHQoKSxlLl9zZXRTZWxlY3Rpb24oKSxlLl9zZWxlY3QoaS5pdGVtLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiksdCl9LGZvY3VzOmZ1bmN0aW9uKHQsaSl7dmFyIHM9aS5pdGVtLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIik7bnVsbCE9ZS5mb2N1c0luZGV4JiZzLmluZGV4IT09ZS5mb2N1c0luZGV4JiYoZS5fdHJpZ2dlcihcImZvY3VzXCIsdCx7aXRlbTpzfSksZS5pc09wZW58fGUuX3NlbGVjdChzLHQpKSxlLmZvY3VzSW5kZXg9cy5pbmRleCxlLmJ1dHRvbi5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsZS5tZW51SXRlbXMuZXEocy5pbmRleCkuYXR0cihcImlkXCIpKX19KS5tZW51KFwiaW5zdGFuY2VcIiksdGhpcy5tZW51SW5zdGFuY2UuX29mZih0aGlzLm1lbnUsXCJtb3VzZWxlYXZlXCIpLHRoaXMubWVudUluc3RhbmNlLl9jbG9zZU9uRG9jdW1lbnRDbGljaz1mdW5jdGlvbigpe3JldHVybiExfSx0aGlzLm1lbnVJbnN0YW5jZS5faXNEaXZpZGVyPWZ1bmN0aW9uKCl7cmV0dXJuITF9fSxyZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLmJ1dHRvbkl0ZW0ucmVwbGFjZVdpdGgodGhpcy5idXR0b25JdGVtPXRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0odGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKXx8e30pKSxudWxsPT09dGhpcy5vcHRpb25zLndpZHRoJiZ0aGlzLl9yZXNpemVCdXR0b24oKX0sX3JlZnJlc2hNZW51OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLmVsZW1lbnQuZmluZChcIm9wdGlvblwiKTt0aGlzLm1lbnUuZW1wdHkoKSx0aGlzLl9wYXJzZU9wdGlvbnMoZSksdGhpcy5fcmVuZGVyTWVudSh0aGlzLm1lbnUsdGhpcy5pdGVtcyksdGhpcy5tZW51SW5zdGFuY2UucmVmcmVzaCgpLHRoaXMubWVudUl0ZW1zPXRoaXMubWVudS5maW5kKFwibGlcIikubm90KFwiLnVpLXNlbGVjdG1lbnUtb3B0Z3JvdXBcIikuZmluZChcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKSx0aGlzLl9yZW5kZXJlZD0hMCxlLmxlbmd0aCYmKHQ9dGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCksdGhpcy5tZW51SW5zdGFuY2UuZm9jdXMobnVsbCx0KSx0aGlzLl9zZXRBcmlhKHQuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKSksdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0aGlzLmVsZW1lbnQucHJvcChcImRpc2FibGVkXCIpKSl9LG9wZW46ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLmRpc2FibGVkfHwodGhpcy5fcmVuZGVyZWQ/KHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMubWVudS5maW5kKFwiLnVpLXN0YXRlLWFjdGl2ZVwiKSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdGhpcy5fZ2V0U2VsZWN0ZWRJdGVtKCkpKTp0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMubWVudUl0ZW1zLmxlbmd0aCYmKHRoaXMuaXNPcGVuPSEwLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLl9yZXNpemVNZW51KCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHRoaXMuX2RvY3VtZW50Q2xpY2spLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIsdCkpKX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dGhpcy5tZW51V3JhcC5wb3NpdGlvbih0LmV4dGVuZCh7b2Y6dGhpcy5idXR0b259LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpfSxjbG9zZTpmdW5jdGlvbih0KXt0aGlzLmlzT3BlbiYmKHRoaXMuaXNPcGVuPSExLHRoaXMuX3RvZ2dsZUF0dHIoKSx0aGlzLnJhbmdlPW51bGwsdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQpLHRoaXMuX3RyaWdnZXIoXCJjbG9zZVwiLHQpKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnV0dG9ufSxtZW51V2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudX0sX3JlbmRlckJ1dHRvbkl0ZW06ZnVuY3Rpb24oZSl7dmFyIGk9dChcIjxzcGFuPlwiKTtyZXR1cm4gdGhpcy5fc2V0VGV4dChpLGUubGFiZWwpLHRoaXMuX2FkZENsYXNzKGksXCJ1aS1zZWxlY3RtZW51LXRleHRcIiksaX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24oZSxpKXt2YXIgcz10aGlzLG49XCJcIjt0LmVhY2goaSxmdW5jdGlvbihpLG8pe3ZhciBhO28ub3B0Z3JvdXAhPT1uJiYoYT10KFwiPGxpPlwiLHt0ZXh0Om8ub3B0Z3JvdXB9KSxzLl9hZGRDbGFzcyhhLFwidWktc2VsZWN0bWVudS1vcHRncm91cFwiLFwidWktbWVudS1kaXZpZGVyXCIrKG8uZWxlbWVudC5wYXJlbnQoXCJvcHRncm91cFwiKS5wcm9wKFwiZGlzYWJsZWRcIik/XCIgdWktc3RhdGUtZGlzYWJsZWRcIjpcIlwiKSksYS5hcHBlbmRUbyhlKSxuPW8ub3B0Z3JvdXApLHMuX3JlbmRlckl0ZW1EYXRhKGUsbyl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0odCxlKS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIsZSl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChcIjxsaT5cIiksbj10KFwiPGRpdj5cIix7dGl0bGU6aS5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiKX0pO3JldHVybiBpLmRpc2FibGVkJiZ0aGlzLl9hZGRDbGFzcyhzLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSx0aGlzLl9zZXRUZXh0KG4saS5sYWJlbCkscy5hcHBlbmQobikuYXBwZW5kVG8oZSl9LF9zZXRUZXh0OmZ1bmN0aW9uKHQsZSl7ZT90LnRleHQoZSk6dC5odG1sKFwiJiMxNjA7XCIpfSxfbW92ZTpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj1cIi51aS1tZW51LWl0ZW1cIjt0aGlzLmlzT3Blbj9pPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCkucGFyZW50KFwibGlcIik6KGk9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLnBhcmVudChcImxpXCIpLG4rPVwiOm5vdCgudWktc3RhdGUtZGlzYWJsZWQpXCIpLHM9XCJmaXJzdFwiPT09dHx8XCJsYXN0XCI9PT10P2lbXCJmaXJzdFwiPT09dD9cInByZXZBbGxcIjpcIm5leHRBbGxcIl0obikuZXEoLTEpOmlbdCtcIkFsbFwiXShuKS5lcSgwKSxzLmxlbmd0aCYmdGhpcy5tZW51SW5zdGFuY2UuZm9jdXMoZSxzKX0sX2dldFNlbGVjdGVkSXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleCkucGFyZW50KFwibGlcIil9LF90b2dnbGU6ZnVuY3Rpb24odCl7dGhpc1t0aGlzLmlzT3Blbj9cImNsb3NlXCI6XCJvcGVuXCJdKHQpfSxfc2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5yYW5nZSYmKHdpbmRvdy5nZXRTZWxlY3Rpb24/KHQ9d2luZG93LmdldFNlbGVjdGlvbigpLHQucmVtb3ZlQWxsUmFuZ2VzKCksdC5hZGRSYW5nZSh0aGlzLnJhbmdlKSk6dGhpcy5yYW5nZS5zZWxlY3QoKSx0aGlzLmJ1dHRvbi5mb2N1cygpKX0sX2RvY3VtZW50Q2xpY2s6e21vdXNlZG93bjpmdW5jdGlvbihlKXt0aGlzLmlzT3BlbiYmKHQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktc2VsZWN0bWVudS1tZW51LCAjXCIrdC51aS5lc2NhcGVTZWxlY3Rvcih0aGlzLmlkcy5idXR0b24pKS5sZW5ndGh8fHRoaXMuY2xvc2UoZSkpfX0sX2J1dHRvbkV2ZW50czp7bW91c2Vkb3duOmZ1bmN0aW9uKCl7dmFyIHQ7d2luZG93LmdldFNlbGVjdGlvbj8odD13aW5kb3cuZ2V0U2VsZWN0aW9uKCksdC5yYW5nZUNvdW50JiYodGhpcy5yYW5nZT10LmdldFJhbmdlQXQoMCkpKTp0aGlzLnJhbmdlPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfSxjbGljazpmdW5jdGlvbih0KXt0aGlzLl9zZXRTZWxlY3Rpb24oKSx0aGlzLl90b2dnbGUodCl9LGtleWRvd246ZnVuY3Rpb24oZSl7dmFyIGk9ITA7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuVEFCOmNhc2UgdC51aS5rZXlDb2RlLkVTQ0FQRTp0aGlzLmNsb3NlKGUpLGk9ITE7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6dGhpcy5pc09wZW4mJnRoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlVQOmUuYWx0S2V5P3RoaXMuX3RvZ2dsZShlKTp0aGlzLl9tb3ZlKFwicHJldlwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046ZS5hbHRLZXk/dGhpcy5fdG9nZ2xlKGUpOnRoaXMuX21vdmUoXCJuZXh0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5pc09wZW4/dGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0oZSk6dGhpcy5fdG9nZ2xlKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkxFRlQ6dGhpcy5fbW92ZShcInByZXZcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5SSUdIVDp0aGlzLl9tb3ZlKFwibmV4dFwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLl9tb3ZlKFwiZmlyc3RcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJsYXN0XCIsZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1lbnUudHJpZ2dlcihlKSxpPSExfWkmJmUucHJldmVudERlZmF1bHQoKX19LF9zZWxlY3RGb2N1c2VkSXRlbTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmZvY3VzSW5kZXgpLnBhcmVudChcImxpXCIpO2UuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKXx8dGhpcy5fc2VsZWN0KGUuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKSx0KX0sX3NlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4O3RoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4PXQuaW5kZXgsdGhpcy5idXR0b25JdGVtLnJlcGxhY2VXaXRoKHRoaXMuYnV0dG9uSXRlbT10aGlzLl9yZW5kZXJCdXR0b25JdGVtKHQpKSx0aGlzLl9zZXRBcmlhKHQpLHRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIixlLHtpdGVtOnR9KSx0LmluZGV4IT09aSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLGUse2l0ZW06dH0pLHRoaXMuY2xvc2UoZSl9LF9zZXRBcmlhOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWVudUl0ZW1zLmVxKHQuaW5kZXgpLmF0dHIoXCJpZFwiKTt0aGlzLmJ1dHRvbi5hdHRyKHtcImFyaWEtbGFiZWxsZWRieVwiOmUsXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIjplfSksdGhpcy5tZW51LmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIixlKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe2lmKFwiaWNvbnNcIj09PXQpe3ZhciBpPXRoaXMuYnV0dG9uLmZpbmQoXCJzcGFuLnVpLWljb25cIik7dGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLHRoaXMub3B0aW9ucy5pY29ucy5idXR0b24pLl9hZGRDbGFzcyhpLG51bGwsZS5idXR0b24pfXRoaXMuX3N1cGVyKHQsZSksXCJhcHBlbmRUb1wiPT09dCYmdGhpcy5tZW51V3JhcC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxcIndpZHRoXCI9PT10JiZ0aGlzLl9yZXNpemVCdXR0b24oKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMubWVudUluc3RhbmNlLm9wdGlvbihcImRpc2FibGVkXCIsdCksdGhpcy5idXR0b24uYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmJ1dHRvbixudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIix0KSx0aGlzLmVsZW1lbnQucHJvcChcImRpc2FibGVkXCIsdCksdD8odGhpcy5idXR0b24uYXR0cihcInRhYmluZGV4XCIsLTEpLHRoaXMuY2xvc2UoKSk6dGhpcy5idXR0b24uYXR0cihcInRhYmluZGV4XCIsMCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gZSYmKGU9ZS5qcXVlcnl8fGUubm9kZVR5cGU/dChlKTp0aGlzLmRvY3VtZW50LmZpbmQoZSkuZXEoMCkpLGUmJmVbMF18fChlPXRoaXMuZWxlbWVudC5jbG9zZXN0KFwiLnVpLWZyb250LCBkaWFsb2dcIikpLGUubGVuZ3RofHwoZT10aGlzLmRvY3VtZW50WzBdLmJvZHkpLGV9LF90b2dnbGVBdHRyOmZ1bmN0aW9uKCl7dGhpcy5idXR0b24uYXR0cihcImFyaWEtZXhwYW5kZWRcIix0aGlzLmlzT3BlbiksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5idXR0b24sXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1cIisodGhpcy5pc09wZW4/XCJjbG9zZWRcIjpcIm9wZW5cIikpLl9hZGRDbGFzcyh0aGlzLmJ1dHRvbixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLVwiKyh0aGlzLmlzT3Blbj9cIm9wZW5cIjpcImNsb3NlZFwiKSkuX3RvZ2dsZUNsYXNzKHRoaXMubWVudVdyYXAsXCJ1aS1zZWxlY3RtZW51LW9wZW5cIixudWxsLHRoaXMuaXNPcGVuKSx0aGlzLm1lbnUuYXR0cihcImFyaWEtaGlkZGVuXCIsIXRoaXMuaXNPcGVuKX0sX3Jlc2l6ZUJ1dHRvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy53aWR0aDtpZighMT09PXQpcmV0dXJuIHZvaWQgdGhpcy5idXR0b24uY3NzKFwid2lkdGhcIixcIlwiKTtudWxsPT09dCYmKHQ9dGhpcy5lbGVtZW50LnNob3coKS5vdXRlcldpZHRoKCksdGhpcy5lbGVtZW50LmhpZGUoKSksdGhpcy5idXR0b24ub3V0ZXJXaWR0aCh0KX0sX3Jlc2l6ZU1lbnU6ZnVuY3Rpb24oKXt0aGlzLm1lbnUub3V0ZXJXaWR0aChNYXRoLm1heCh0aGlzLmJ1dHRvbi5vdXRlcldpZHRoKCksdGhpcy5tZW51LndpZHRoKFwiXCIpLm91dGVyV2lkdGgoKSsxKSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3VwZXIoKTtyZXR1cm4gdC5kaXNhYmxlZD10aGlzLmVsZW1lbnQucHJvcChcImRpc2FibGVkXCIpLHR9LFxuX3BhcnNlT3B0aW9uczpmdW5jdGlvbihlKXt2YXIgaT10aGlzLHM9W107ZS5lYWNoKGZ1bmN0aW9uKGUsbil7cy5wdXNoKGkuX3BhcnNlT3B0aW9uKHQobiksZSkpfSksdGhpcy5pdGVtcz1zfSxfcGFyc2VPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgaT10LnBhcmVudChcIm9wdGdyb3VwXCIpO3JldHVybntlbGVtZW50OnQsaW5kZXg6ZSx2YWx1ZTp0LnZhbCgpLGxhYmVsOnQudGV4dCgpLG9wdGdyb3VwOmkuYXR0cihcImxhYmVsXCIpfHxcIlwiLGRpc2FibGVkOmkucHJvcChcImRpc2FibGVkXCIpfHx0LnByb3AoXCJkaXNhYmxlZFwiKX19LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fdW5iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMubWVudVdyYXAucmVtb3ZlKCksdGhpcy5idXR0b24ucmVtb3ZlKCksdGhpcy5lbGVtZW50LnNob3coKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLmxhYmVscy5hdHRyKFwiZm9yXCIsdGhpcy5pZHMuZWxlbWVudCl9fV0pLHQud2lkZ2V0KFwidWkuc2xpZGVyXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4Olwic2xpZGVcIixvcHRpb25zOnthbmltYXRlOiExLGNsYXNzZXM6e1widWktc2xpZGVyXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1zbGlkZXItaGFuZGxlXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1zbGlkZXItcmFuZ2VcIjpcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LWhlYWRlclwifSxkaXN0YW5jZTowLG1heDoxMDAsbWluOjAsb3JpZW50YXRpb246XCJob3Jpem9udGFsXCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGwsY2hhbmdlOm51bGwsc2xpZGU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sbnVtUGFnZXM6NSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1zbGlkZXIgdWktc2xpZGVyLVwiK3RoaXMub3JpZW50YXRpb24sXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlUmFuZ2UoKSx0aGlzLl9jcmVhdGVIYW5kbGVzKCksdGhpcy5fc2V0dXBFdmVudHMoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2NyZWF0ZUhhbmRsZXM6ZnVuY3Rpb24oKXt2YXIgZSxpLHM9dGhpcy5vcHRpb25zLG49dGhpcy5lbGVtZW50LmZpbmQoXCIudWktc2xpZGVyLWhhbmRsZVwiKSxvPVtdO2ZvcihpPXMudmFsdWVzJiZzLnZhbHVlcy5sZW5ndGh8fDEsbi5sZW5ndGg+aSYmKG4uc2xpY2UoaSkucmVtb3ZlKCksbj1uLnNsaWNlKDAsaSkpLGU9bi5sZW5ndGg7ZTxpO2UrKylvLnB1c2goXCI8c3BhbiB0YWJpbmRleD0nMCc+PC9zcGFuPlwiKTt0aGlzLmhhbmRsZXM9bi5hZGQodChvLmpvaW4oXCJcIikpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLHRoaXMuX2FkZENsYXNzKHRoaXMuaGFuZGxlcyxcInVpLXNsaWRlci1oYW5kbGVcIixcInVpLXN0YXRlLWRlZmF1bHRcIiksdGhpcy5oYW5kbGU9dGhpcy5oYW5kbGVzLmVxKDApLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKGUpe3QodGhpcykuZGF0YShcInVpLXNsaWRlci1oYW5kbGUtaW5kZXhcIixlKS5hdHRyKFwidGFiSW5kZXhcIiwwKX0pfSxfY3JlYXRlUmFuZ2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7ZS5yYW5nZT8oITA9PT1lLnJhbmdlJiYoZS52YWx1ZXM/ZS52YWx1ZXMubGVuZ3RoJiYyIT09ZS52YWx1ZXMubGVuZ3RoP2UudmFsdWVzPVtlLnZhbHVlc1swXSxlLnZhbHVlc1swXV06dC5pc0FycmF5KGUudmFsdWVzKSYmKGUudmFsdWVzPWUudmFsdWVzLnNsaWNlKDApKTplLnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5sZW5ndGg/KHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMucmFuZ2UsXCJ1aS1zbGlkZXItcmFuZ2UtbWluIHVpLXNsaWRlci1yYW5nZS1tYXhcIiksdGhpcy5yYW5nZS5jc3Moe2xlZnQ6XCJcIixib3R0b206XCJcIn0pKToodGhpcy5yYW5nZT10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLl9hZGRDbGFzcyh0aGlzLnJhbmdlLFwidWktc2xpZGVyLXJhbmdlXCIpKSxcIm1pblwiIT09ZS5yYW5nZSYmXCJtYXhcIiE9PWUucmFuZ2V8fHRoaXMuX2FkZENsYXNzKHRoaXMucmFuZ2UsXCJ1aS1zbGlkZXItcmFuZ2UtXCIrZS5yYW5nZSkpOih0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMucmFuZ2U9bnVsbCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbigpe3RoaXMuX29mZih0aGlzLmhhbmRsZXMpLHRoaXMuX29uKHRoaXMuaGFuZGxlcyx0aGlzLl9oYW5kbGVFdmVudHMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhhbmRsZXMpLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhhbmRsZXMpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGEscixoLGw9dGhpcyxjPXRoaXMub3B0aW9ucztyZXR1cm4hYy5kaXNhYmxlZCYmKHRoaXMuZWxlbWVudFNpemU9e3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpfSx0aGlzLmVsZW1lbnRPZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLGk9e3g6ZS5wYWdlWCx5OmUucGFnZVl9LHM9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGkpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKzEsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oZSl7dmFyIGk9TWF0aC5hYnMocy1sLnZhbHVlcyhlKSk7KG4+aXx8bj09PWkmJihlPT09bC5fbGFzdENoYW5nZWRWYWx1ZXx8bC52YWx1ZXMoZSk9PT1jLm1pbikpJiYobj1pLG89dCh0aGlzKSxhPWUpfSksITEhPT10aGlzLl9zdGFydChlLGEpJiYodGhpcy5fbW91c2VTbGlkaW5nPSEwLHRoaXMuX2hhbmRsZUluZGV4PWEsdGhpcy5fYWRkQ2xhc3MobyxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLG8udHJpZ2dlcihcImZvY3VzXCIpLHI9by5vZmZzZXQoKSxoPSF0KGUudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmlzKFwiLnVpLXNsaWRlci1oYW5kbGVcIiksdGhpcy5fY2xpY2tPZmZzZXQ9aD97bGVmdDowLHRvcDowfTp7bGVmdDplLnBhZ2VYLXIubGVmdC1vLndpZHRoKCkvMix0b3A6ZS5wYWdlWS1yLnRvcC1vLmhlaWdodCgpLzItKHBhcnNlSW50KG8uY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQoby5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludChvLmNzcyhcIm1hcmdpblRvcFwiKSwxMCl8fDApfSx0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKXx8dGhpcy5fc2xpZGUoZSxhLHMpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt2YXIgZT17eDp0LnBhZ2VYLHk6dC5wYWdlWX0saT10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoZSk7cmV0dXJuIHRoaXMuX3NsaWRlKHQsdGhpcy5faGFuZGxlSW5kZXgsaSksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaGFuZGxlcyxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9zdG9wKHQsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2NoYW5nZSh0LHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2NsaWNrT2Zmc2V0PW51bGwsdGhpcy5fYW5pbWF0ZU9mZj0hMSwhMX0sX2RldGVjdE9yaWVudGF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5vcmllbnRhdGlvbj1cInZlcnRpY2FsXCI9PT10aGlzLm9wdGlvbnMub3JpZW50YXRpb24/XCJ2ZXJ0aWNhbFwiOlwiaG9yaXpvbnRhbFwifSxfbm9ybVZhbHVlRnJvbU1vdXNlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscyxuLG87cmV0dXJuXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uPyhlPXRoaXMuZWxlbWVudFNpemUud2lkdGgsaT10LngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOihlPXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LGk9dC55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscz1pL2Uscz4xJiYocz0xKSxzPDAmJihzPTApLFwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb24mJihzPTEtcyksbj10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCksbz10aGlzLl92YWx1ZU1pbigpK3Mqbix0aGlzLl90cmltQWxpZ25WYWx1ZShvKX0sX3VpSGFzaDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9e2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0saGFuZGxlSW5kZXg6dCx2YWx1ZTp2b2lkIDAhPT1lP2U6dGhpcy52YWx1ZSgpfTtyZXR1cm4gdGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSYmKHMudmFsdWU9dm9pZCAwIT09ZT9lOnRoaXMudmFsdWVzKHQpLHMudmFsdWVzPWl8fHRoaXMudmFsdWVzKCkpLHN9LF9oYXNNdWx0aXBsZVZhbHVlczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aH0sX3N0YXJ0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLHQsdGhpcy5fdWlIYXNoKGUpKX0sX3NsaWRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuPXRoaXMudmFsdWUoKSxvPXRoaXMudmFsdWVzKCk7dGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSYmKHM9dGhpcy52YWx1ZXMoZT8wOjEpLG49dGhpcy52YWx1ZXMoZSksMj09PXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYhMD09PXRoaXMub3B0aW9ucy5yYW5nZSYmKGk9MD09PWU/TWF0aC5taW4ocyxpKTpNYXRoLm1heChzLGkpKSxvW2VdPWkpLGkhPT1uJiYhMSE9PXRoaXMuX3RyaWdnZXIoXCJzbGlkZVwiLHQsdGhpcy5fdWlIYXNoKGUsaSxvKSkmJih0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpP3RoaXMudmFsdWVzKGUsaSk6dGhpcy52YWx1ZShpKSl9LF9zdG9wOmZ1bmN0aW9uKHQsZSl7dGhpcy5fdHJpZ2dlcihcInN0b3BcIix0LHRoaXMuX3VpSGFzaChlKSl9LF9jaGFuZ2U6ZnVuY3Rpb24odCxlKXt0aGlzLl9rZXlTbGlkaW5nfHx0aGlzLl9tb3VzZVNsaWRpbmd8fCh0aGlzLl9sYXN0Q2hhbmdlZFZhbHVlPWUsdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLHQsdGhpcy5fdWlIYXNoKGUpKSl9LHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdHJpbUFsaWduVmFsdWUodCksdGhpcy5fcmVmcmVzaFZhbHVlKCksdm9pZCB0aGlzLl9jaGFuZ2UobnVsbCwwKSk6dGhpcy5fdmFsdWUoKX0sdmFsdWVzOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlc1tlXT10aGlzLl90cmltQWxpZ25WYWx1ZShpKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx2b2lkIHRoaXMuX2NoYW5nZShudWxsLGUpO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl92YWx1ZXMoKTtpZighdC5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy5fdmFsdWVzKGUpOnRoaXMudmFsdWUoKTtmb3Iocz10aGlzLm9wdGlvbnMudmFsdWVzLG49YXJndW1lbnRzWzBdLG89MDtvPHMubGVuZ3RoO28rPTEpc1tvXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW29dKSx0aGlzLl9jaGFuZ2UobnVsbCxvKTt0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBzLG49MDtzd2l0Y2goXCJyYW5nZVwiPT09ZSYmITA9PT10aGlzLm9wdGlvbnMucmFuZ2UmJihcIm1pblwiPT09aT8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcygwKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpOlwibWF4XCI9PT1pJiYodGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcyh0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aC0xKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpKSx0LmlzQXJyYXkodGhpcy5vcHRpb25zLnZhbHVlcykmJihuPXRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoKSx0aGlzLl9zdXBlcihlLGkpLGUpe2Nhc2VcIm9yaWVudGF0aW9uXCI6dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9yZW1vdmVDbGFzcyhcInVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbFwiKS5fYWRkQ2xhc3MoXCJ1aS1zbGlkZXItXCIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5vcHRpb25zLnJhbmdlJiZ0aGlzLl9yZWZyZXNoUmFuZ2UoaSksdGhpcy5oYW5kbGVzLmNzcyhcImhvcml6b250YWxcIj09PWk/XCJib3R0b21cIjpcImxlZnRcIixcIlwiKTticmVhaztjYXNlXCJ2YWx1ZVwiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJ2YWx1ZXNcIjpmb3IodGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSxzPW4tMTtzPj0wO3MtLSl0aGlzLl9jaGFuZ2UobnVsbCxzKTt0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2VcInN0ZXBcIjpjYXNlXCJtaW5cIjpjYXNlXCJtYXhcIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2NhbGN1bGF0ZU5ld01heCgpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZVwicmFuZ2VcIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9hbmltYXRlT2ZmPSExfX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LF92YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gdD10aGlzLl90cmltQWxpZ25WYWx1ZSh0KX0sX3ZhbHVlczpmdW5jdGlvbih0KXt2YXIgZSxpLHM7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT10aGlzLm9wdGlvbnMudmFsdWVzW3RdLGU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSk7aWYodGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSl7Zm9yKGk9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpLHM9MDtzPGkubGVuZ3RoO3MrPTEpaVtzXT10aGlzLl90cmltQWxpZ25WYWx1ZShpW3NdKTtyZXR1cm4gaX1yZXR1cm5bXX0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQ8PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYodD49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgZT10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsaT0odC10aGlzLl92YWx1ZU1pbigpKSVlLHM9dC1pO3JldHVybiAyKk1hdGguYWJzKGkpPj1lJiYocys9aT4wP2U6LWUpLHBhcnNlRmxvYXQocy50b0ZpeGVkKDUpKX0sX2NhbGN1bGF0ZU5ld01heDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5tYXgsZT10aGlzLl92YWx1ZU1pbigpLGk9dGhpcy5vcHRpb25zLnN0ZXA7dD1NYXRoLnJvdW5kKCh0LWUpL2kpKmkrZSx0PnRoaXMub3B0aW9ucy5tYXgmJih0LT1pKSx0aGlzLm1heD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKHQ9TWF0aC5tYXgodCx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLHR9LF9wcmVjaXNpb25PZjpmdW5jdGlvbih0KXt2YXIgZT10LnRvU3RyaW5nKCksaT1lLmluZGV4T2YoXCIuXCIpO3JldHVybi0xPT09aT8wOmUubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hSYW5nZTpmdW5jdGlvbih0KXtcInZlcnRpY2FsXCI9PT10JiZ0aGlzLnJhbmdlLmNzcyh7d2lkdGg6XCJcIixsZWZ0OlwiXCJ9KSxcImhvcml6b250YWxcIj09PXQmJnRoaXMucmFuZ2UuY3NzKHtoZWlnaHQ6XCJcIixib3R0b206XCJcIn0pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMub3B0aW9ucy5yYW5nZSxyPXRoaXMub3B0aW9ucyxoPXRoaXMsbD0hdGhpcy5fYW5pbWF0ZU9mZiYmci5hbmltYXRlLGM9e307dGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihzKXtpPShoLnZhbHVlcyhzKS1oLl92YWx1ZU1pbigpKS8oaC5fdmFsdWVNYXgoKS1oLl92YWx1ZU1pbigpKSoxMDAsY1tcImhvcml6b250YWxcIj09PWgub3JpZW50YXRpb24/XCJsZWZ0XCI6XCJib3R0b21cIl09aStcIiVcIix0KHRoaXMpLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKGMsci5hbmltYXRlKSwhMD09PWgub3B0aW9ucy5yYW5nZSYmKFwiaG9yaXpvbnRhbFwiPT09aC5vcmllbnRhdGlvbj8oMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2xlZnQ6aStcIiVcIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDppLWUrXCIlXCJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSk6KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtib3R0b206aStcIiVcIn0sci5hbmltYXRlKSwxPT09cyYmaC5yYW5nZVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6aS1lK1wiJVwifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpKSxlPWl9KToocz10aGlzLnZhbHVlKCksbj10aGlzLl92YWx1ZU1pbigpLG89dGhpcy5fdmFsdWVNYXgoKSxpPW8hPT1uPyhzLW4pLyhvLW4pKjEwMDowLGNbXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uP1wibGVmdFwiOlwiYm90dG9tXCJdPWkrXCIlXCIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oYyxyLmFuaW1hdGUpLFwibWluXCI9PT1hJiZcImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe3dpZHRoOmkrXCIlXCJ9LHIuYW5pbWF0ZSksXCJtYXhcIj09PWEmJlwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7d2lkdGg6MTAwLWkrXCIlXCJ9LHIuYW5pbWF0ZSksXCJtaW5cIj09PWEmJlwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2hlaWdodDppK1wiJVwifSxyLmFuaW1hdGUpLFwibWF4XCI9PT1hJiZcInZlcnRpY2FsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6MTAwLWkrXCIlXCJ9LHIuYW5pbWF0ZSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvPXQoZS50YXJnZXQpLmRhdGEoXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIpO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6Y2FzZSB0LnVpLmtleUNvZGUuRU5EOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgdC51aS5rZXlDb2RlLlVQOmNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOmNhc2UgdC51aS5rZXlDb2RlLkRPV046Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDppZihlLnByZXZlbnREZWZhdWx0KCksIXRoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSEwLHRoaXMuX2FkZENsYXNzKHQoZS50YXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksITE9PT10aGlzLl9zdGFydChlLG8pKSlyZXR1cm59c3dpdGNoKG49dGhpcy5vcHRpb25zLnN0ZXAsaT1zPXRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy52YWx1ZXMobyk6dGhpcy52YWx1ZSgpLGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpzPXRoaXMuX3ZhbHVlTWluKCk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOnM9dGhpcy5fdmFsdWVNYXgoKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOnM9dGhpcy5fdHJpbUFsaWduVmFsdWUoaSsodGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046cz10aGlzLl90cmltQWxpZ25WYWx1ZShpLSh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL3RoaXMubnVtUGFnZXMpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlVQOmNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOmlmKGk9PT10aGlzLl92YWx1ZU1heCgpKXJldHVybjtzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrbik7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpjYXNlIHQudWkua2V5Q29kZS5MRUZUOmlmKGk9PT10aGlzLl92YWx1ZU1pbigpKXJldHVybjtzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGktbil9dGhpcy5fc2xpZGUoZSxvLHMpfSxrZXl1cDpmdW5jdGlvbihlKXt2YXIgaT10KGUudGFyZ2V0KS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiKTt0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9zdG9wKGUsaSksdGhpcy5fY2hhbmdlKGUsaSksdGhpcy5fcmVtb3ZlQ2xhc3ModChlLnRhcmdldCksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSl9fX0pLHQud2lkZ2V0KFwidWkuc29ydGFibGVcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzb3J0XCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86XCJwYXJlbnRcIixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjpcImF1dG9cIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOlwib3JpZ2luYWxcIixpdGVtczpcIj4gKlwiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZTpcImRlZmF1bHRcIix0b2xlcmFuY2U6XCJpbnRlcnNlY3RcIix6SW5kZXg6MWUzLGFjdGl2YXRlOm51bGwsYmVmb3JlU3RvcDpudWxsLGNoYW5nZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxvdXQ6bnVsbCxvdmVyOm51bGwscmVjZWl2ZTpudWxsLHJlbW92ZTpudWxsLHNvcnQ6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCx1cGRhdGU6bnVsbH0sX2lzT3ZlckF4aXM6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0Pj1lJiZ0PGUraX0sX2lzRmxvYXRpbmc6ZnVuY3Rpb24odCl7cmV0dXJuL2xlZnR8cmlnaHQvLnRlc3QodC5jc3MoXCJmbG9hdFwiKSl8fC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdCh0LmNzcyhcImRpc3BsYXlcIikpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLl9hZGRDbGFzcyhcInVpLXNvcnRhYmxlXCIpLHRoaXMucmVmcmVzaCgpLHRoaXMub2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLnJlYWR5PSEwfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5fc3VwZXIodCxlKSxcImhhbmRsZVwiPT09dCYmdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCl9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLXNvcnRhYmxlLWhhbmRsZVwiKSxcInVpLXNvcnRhYmxlLWhhbmRsZVwiKSx0LmVhY2godGhpcy5pdGVtcyxmdW5jdGlvbigpe2UuX2FkZENsYXNzKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGU/dGhpcy5pdGVtLmZpbmQodGhpcy5pbnN0YW5jZS5vcHRpb25zLmhhbmRsZSk6dGhpcy5pdGVtLFwidWktc29ydGFibGUtaGFuZGxlXCIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7Zm9yKHZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLTE7dD49MDt0LS0pdGhpcy5pdGVtc1t0XS5pdGVtLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lK1wiLWl0ZW1cIik7cmV0dXJuIHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSxpKXt2YXIgcz1udWxsLG49ITEsbz10aGlzO3JldHVybiF0aGlzLnJldmVydGluZyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJlwic3RhdGljXCIhPT10aGlzLm9wdGlvbnMudHlwZSYmKHRoaXMuX3JlZnJlc2hJdGVtcyhlKSx0KGUudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lmKHQuZGF0YSh0aGlzLG8ud2lkZ2V0TmFtZStcIi1pdGVtXCIpPT09bylyZXR1cm4gcz10KHRoaXMpLCExfSksdC5kYXRhKGUudGFyZ2V0LG8ud2lkZ2V0TmFtZStcIi1pdGVtXCIpPT09byYmKHM9dChlLnRhcmdldCkpLCEhcyYmKCEodGhpcy5vcHRpb25zLmhhbmRsZSYmIWkmJih0KHRoaXMub3B0aW9ucy5oYW5kbGUscykuZmluZChcIipcIikuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT09ZS50YXJnZXQmJihuPSEwKX0pLCFuKSkmJih0aGlzLmN1cnJlbnRJdGVtPXMsdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwhMCkpKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGE9dGhpcy5vcHRpb25zO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcihlKSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sdC5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5oZWxwZXIuY3NzKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLHRoaXMuY3NzUG9zaXRpb249dGhpcy5oZWxwZXIuY3NzKFwicG9zaXRpb25cIiksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSksdGhpcy5vcmlnaW5hbFBhZ2VYPWUucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPWUucGFnZVksYS5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihhLmN1cnNvckF0KSx0aGlzLmRvbVBvc2l0aW9uPXtwcmV2OnRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLHBhcmVudDp0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfSx0aGlzLmhlbHBlclswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuY3VycmVudEl0ZW0uaGlkZSgpLHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCksYS5jb250YWlubWVudCYmdGhpcy5fc2V0Q29udGFpbm1lbnQoKSxhLmN1cnNvciYmXCJhdXRvXCIhPT1hLmN1cnNvciYmKG89dGhpcy5kb2N1bWVudC5maW5kKFwiYm9keVwiKSx0aGlzLnN0b3JlZEN1cnNvcj1vLmNzcyhcImN1cnNvclwiKSxvLmNzcyhcImN1cnNvclwiLGEuY3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQ9dChcIjxzdHlsZT4qeyBjdXJzb3I6IFwiK2EuY3Vyc29yK1wiICFpbXBvcnRhbnQ7IH08L3N0eWxlPlwiKS5hcHBlbmRUbyhvKSksYS5vcGFjaXR5JiYodGhpcy5oZWxwZXIuY3NzKFwib3BhY2l0eVwiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKFwib3BhY2l0eVwiKSksdGhpcy5oZWxwZXIuY3NzKFwib3BhY2l0eVwiLGEub3BhY2l0eSkpLGEuekluZGV4JiYodGhpcy5oZWxwZXIuY3NzKFwiekluZGV4XCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiKSksdGhpcy5oZWxwZXIuY3NzKFwiekluZGV4XCIsYS56SW5kZXgpKSx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJlwiSFRNTFwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSYmKHRoaXMub3ZlcmZsb3dPZmZzZXQ9dGhpcy5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpLHRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnN8fHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSwhcylmb3Iobj10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7bj49MDtuLS0pdGhpcy5jb250YWluZXJzW25dLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSk7cmV0dXJuIHQudWkuZGRtYW5hZ2VyJiYodC51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0LnVpLmRkbWFuYWdlciYmIWEuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuX2FkZENsYXNzKHRoaXMuaGVscGVyLFwidWktc29ydGFibGUtaGVscGVyXCIpLHRoaXMuX21vdXNlRHJhZyhlKSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhPXRoaXMub3B0aW9ucyxyPSExO2Zvcih0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLHRoaXMubGFzdFBvc2l0aW9uQWJzfHwodGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicyksdGhpcy5vcHRpb25zLnNjcm9sbCYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmXCJIVE1MXCIhPT10aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lPyh0aGlzLm92ZXJmbG93T2Zmc2V0LnRvcCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtZS5wYWdlWTxhLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCthLnNjcm9sbFNwZWVkOmUucGFnZVktdGhpcy5vdmVyZmxvd09mZnNldC50b3A8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1hLnNjcm9sbFNwZWVkKSx0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQrdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtZS5wYWdlWDxhLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K2Euc2Nyb2xsU3BlZWQ6ZS5wYWdlWC10aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQ8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWEuc2Nyb2xsU3BlZWQpKTooZS5wYWdlWS10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/cj10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCh0aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpLWEuc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LmhlaWdodCgpLShlLnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkpPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCkrYS5zY3JvbGxTcGVlZCkpLGUucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCk8YS5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKS1hLnNjcm9sbFNwZWVkKTp0aGlzLndpbmRvdy53aWR0aCgpLShlLnBhZ2VYLXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpKTxhLnNjcm9sbFNlbnNpdGl2aXR5JiYocj10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQodGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkrYS5zY3JvbGxTcGVlZCkpKSwhMSE9PXImJnQudWkuZGRtYW5hZ2VyJiYhYS5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGUpKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIiksdGhpcy5vcHRpb25zLmF4aXMmJlwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fCh0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIpLHRoaXMub3B0aW9ucy5heGlzJiZcInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIiksaT10aGlzLml0ZW1zLmxlbmd0aC0xO2k+PTA7aS0tKWlmKHM9dGhpcy5pdGVtc1tpXSxuPXMuaXRlbVswXSwobz10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocykpJiZzLmluc3RhbmNlPT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYhKG49PT10aGlzLmN1cnJlbnRJdGVtWzBdfHx0aGlzLnBsYWNlaG9sZGVyWzE9PT1vP1wibmV4dFwiOlwicHJldlwiXSgpWzBdPT09bnx8dC5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLG4pfHxcInNlbWktZHluYW1pY1wiPT09dGhpcy5vcHRpb25zLnR5cGUmJnQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLG4pKSl7aWYodGhpcy5kaXJlY3Rpb249MT09PW8/XCJkb3duXCI6XCJ1cFwiLFwicG9pbnRlclwiIT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZSYmIXRoaXMuX2ludGVyc2VjdHNXaXRoU2lkZXMocykpYnJlYWs7dGhpcy5fcmVhcnJhbmdlKGUscyksdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLGUsdGhpcy5fdWlIYXNoKCkpO2JyZWFrfXJldHVybiB0aGlzLl9jb250YWN0Q29udGFpbmVycyhlKSx0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLGUpLHRoaXMuX3RyaWdnZXIoXCJzb3J0XCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlLGkpe2lmKGUpe2lmKHQudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyxlKSx0aGlzLm9wdGlvbnMucmV2ZXJ0KXt2YXIgcz10aGlzLG49dGhpcy5wbGFjZWhvbGRlci5vZmZzZXQoKSxvPXRoaXMub3B0aW9ucy5heGlzLGE9e307byYmXCJ4XCIhPT1vfHwoYS5sZWZ0PW4ubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdC10aGlzLm1hcmdpbnMubGVmdCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxMZWZ0KSksbyYmXCJ5XCIhPT1vfHwoYS50b3A9bi50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcC10aGlzLm1hcmdpbnMudG9wKyh0aGlzLm9mZnNldFBhcmVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYm9keT8wOnRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbFRvcCkpLHRoaXMucmV2ZXJ0aW5nPSEwLHQodGhpcy5oZWxwZXIpLmFuaW1hdGUoYSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7cy5fY2xlYXIoZSl9KX1lbHNlIHRoaXMuX2NsZWFyKGUsaSk7cmV0dXJuITF9fSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLl9tb3VzZVVwKG5ldyB0LkV2ZW50KFwibW91c2V1cFwiLHt0YXJnZXQ6bnVsbH0pKSxcIm9yaWdpbmFsXCI9PT10aGlzLm9wdGlvbnMuaGVscGVyPyh0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuY3VycmVudEl0ZW0sXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIikpOnRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5jb250YWluZXJzW2VdLl90cmlnZ2VyKFwiZGVhY3RpdmF0ZVwiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbZV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcihcIm91dFwiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbZV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKX1yZXR1cm4gdGhpcy5wbGFjZWhvbGRlciYmKHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLFwib3JpZ2luYWxcIiE9PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuaGVscGVyJiZ0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0LmV4dGVuZCh0aGlzLHtoZWxwZXI6bnVsbCxkcmFnZ2luZzohMSxyZXZlcnRpbmc6ITEsX25vRmluYWxTb3J0Om51bGx9KSx0aGlzLmRvbVBvc2l0aW9uLnByZXY/dCh0aGlzLmRvbVBvc2l0aW9uLnByZXYpLmFmdGVyKHRoaXMuY3VycmVudEl0ZW0pOnQodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KGUmJmUuY29ubmVjdGVkKSxzPVtdO3JldHVybiBlPWV8fHt9LHQoaSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPSh0KGUuaXRlbXx8dGhpcykuYXR0cihlLmF0dHJpYnV0ZXx8XCJpZFwiKXx8XCJcIikubWF0Y2goZS5leHByZXNzaW9ufHwvKC4rKVtcXC09X10oLispLyk7aSYmcy5wdXNoKChlLmtleXx8aVsxXStcIltdXCIpK1wiPVwiKyhlLmtleSYmZS5leHByZXNzaW9uP2lbMV06aVsyXSkpfSksIXMubGVuZ3RoJiZlLmtleSYmcy5wdXNoKGUua2V5K1wiPVwiKSxzLmpvaW4oXCImXCIpfSx0b0FycmF5OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoZSYmZS5jb25uZWN0ZWQpLHM9W107cmV0dXJuIGU9ZXx8e30saS5lYWNoKGZ1bmN0aW9uKCl7cy5wdXNoKHQoZS5pdGVtfHx0aGlzKS5hdHRyKGUuYXR0cmlidXRlfHxcImlkXCIpfHxcIlwiKX0pLHN9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBvc2l0aW9uQWJzLmxlZnQsaT1lK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscz10aGlzLnBvc2l0aW9uQWJzLnRvcCxuPXMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbz10LmxlZnQsYT1vK3Qud2lkdGgscj10LnRvcCxoPXIrdC5oZWlnaHQsbD10aGlzLm9mZnNldC5jbGljay50b3AsYz10aGlzLm9mZnNldC5jbGljay5sZWZ0LHU9XCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8cytsPnImJnMrbDxoLGQ9XCJ5XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8ZStjPm8mJmUrYzxhLHA9dSYmZDtyZXR1cm5cInBvaW50ZXJcIj09PXRoaXMub3B0aW9ucy50b2xlcmFuY2V8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHxcInBvaW50ZXJcIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJnRoaXMuaGVscGVyUHJvcG9ydGlvbnNbdGhpcy5mbG9hdGluZz9cIndpZHRoXCI6XCJoZWlnaHRcIl0+dFt0aGlzLmZsb2F0aW5nP1wid2lkdGhcIjpcImhlaWdodFwiXT9wOm88ZSt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJmktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPGEmJnI8cyt0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZuLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8aH0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbih0KXt2YXIgZSxpLHM9XCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsdC50b3AsdC5oZWlnaHQpLG49XCJ5XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCx0LmxlZnQsdC53aWR0aCk7cmV0dXJuISghc3x8IW4pJiYoZT10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxpPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCksdGhpcy5mbG9hdGluZz9cInJpZ2h0XCI9PT1pfHxcImRvd25cIj09PWU/MjoxOmUmJihcImRvd25cIj09PWU/MjoxKSl9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLHQudG9wK3QuaGVpZ2h0LzIsdC5oZWlnaHQpLGk9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCx0LmxlZnQrdC53aWR0aC8yLHQud2lkdGgpLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbj10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZuP1wicmlnaHRcIj09PW4mJml8fFwibGVmdFwiPT09biYmIWk6cyYmKFwiZG93blwiPT09cyYmZXx8XCJ1cFwiPT09cyYmIWUpfSxfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO3JldHVybiAwIT09dCYmKHQ+MD9cImRvd25cIjpcInVwXCIpfSxfZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5sYXN0UG9zaXRpb25BYnMubGVmdDtyZXR1cm4gMCE9PXQmJih0PjA/XCJyaWdodFwiOlwibGVmdFwiKX0scmVmcmVzaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVmcmVzaEl0ZW1zKHQpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXN9LF9jb25uZWN0V2l0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm4gdC5jb25uZWN0V2l0aC5jb25zdHJ1Y3Rvcj09PVN0cmluZz9bdC5jb25uZWN0V2l0aF06dC5jb25uZWN0V2l0aH0sX2dldEl0ZW1zQXNqUXVlcnk6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaSgpe3IucHVzaCh0aGlzKX12YXIgcyxuLG8sYSxyPVtdLGg9W10sbD10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGwmJmUpZm9yKHM9bC5sZW5ndGgtMTtzPj0wO3MtLSlmb3Iobz10KGxbc10sdGhpcy5kb2N1bWVudFswXSksbj1vLmxlbmd0aC0xO24+PTA7bi0tKShhPXQuZGF0YShvW25dLHRoaXMud2lkZ2V0RnVsbE5hbWUpKSYmYSE9PXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJmgucHVzaChbdC5pc0Z1bmN0aW9uKGEub3B0aW9ucy5pdGVtcyk/YS5vcHRpb25zLml0ZW1zLmNhbGwoYS5lbGVtZW50KTp0KGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLm5vdChcIi51aS1zb3J0YWJsZS1oZWxwZXJcIikubm90KFwiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIpLGFdKTtmb3IoaC5wdXNoKFt0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnQsbnVsbCx7b3B0aW9uczp0aGlzLm9wdGlvbnMsaXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6dCh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpLm5vdChcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiKSx0aGlzXSkscz1oLmxlbmd0aC0xO3M+PTA7cy0tKWhbc11bMF0uZWFjaChpKTtyZXR1cm4gdChyKX0sX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50SXRlbS5maW5kKFwiOmRhdGEoXCIrdGhpcy53aWRnZXROYW1lK1wiLWl0ZW0pXCIpO3RoaXMuaXRlbXM9dC5ncmVwKHRoaXMuaXRlbXMsZnVuY3Rpb24odCl7Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXT09PXQuaXRlbVswXSlyZXR1cm4hMTtyZXR1cm4hMH0pfSxfcmVmcmVzaEl0ZW1zOmZ1bmN0aW9uKGUpe3RoaXMuaXRlbXM9W10sdGhpcy5jb250YWluZXJzPVt0aGlzXTt2YXIgaSxzLG4sbyxhLHIsaCxsLGM9dGhpcy5pdGVtcyx1PVtbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50WzBdLGUse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCksdGhpc11dLGQ9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihkJiZ0aGlzLnJlYWR5KWZvcihpPWQubGVuZ3RoLTE7aT49MDtpLS0pZm9yKG49dChkW2ldLHRoaXMuZG9jdW1lbnRbMF0pLHM9bi5sZW5ndGgtMTtzPj0wO3MtLSkobz10LmRhdGEobltzXSx0aGlzLndpZGdldEZ1bGxOYW1lKSkmJm8hPT10aGlzJiYhby5vcHRpb25zLmRpc2FibGVkJiYodS5wdXNoKFt0LmlzRnVuY3Rpb24oby5vcHRpb25zLml0ZW1zKT9vLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnRbMF0sZSx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6dChvLm9wdGlvbnMuaXRlbXMsby5lbGVtZW50KSxvXSksdGhpcy5jb250YWluZXJzLnB1c2gobykpO2ZvcihpPXUubGVuZ3RoLTE7aT49MDtpLS0pZm9yKGE9dVtpXVsxXSxyPXVbaV1bMF0scz0wLGw9ci5sZW5ndGg7czxsO3MrKyloPXQocltzXSksaC5kYXRhKHRoaXMud2lkZ2V0TmFtZStcIi1pdGVtXCIsYSksYy5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6YSx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKGUpe3RoaXMuZmxvYXRpbmc9ISF0aGlzLml0ZW1zLmxlbmd0aCYmKFwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKSksdGhpcy5vZmZzZXRQYXJlbnQmJnRoaXMuaGVscGVyJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKTt2YXIgaSxzLG4sbztmb3IoaT10aGlzLml0ZW1zLmxlbmd0aC0xO2k+PTA7aS0tKXM9dGhpcy5pdGVtc1tpXSxzLmluc3RhbmNlIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiZ0aGlzLmN1cnJlbnRDb250YWluZXImJnMuaXRlbVswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF18fChuPXRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50P3QodGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQscy5pdGVtKTpzLml0ZW0sZXx8KHMud2lkdGg9bi5vdXRlcldpZHRoKCkscy5oZWlnaHQ9bi5vdXRlckhlaWdodCgpKSxvPW4ub2Zmc2V0KCkscy5sZWZ0PW8ubGVmdCxzLnRvcD1vLnRvcCk7aWYodGhpcy5vcHRpb25zLmN1c3RvbSYmdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycyl0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzLmNhbGwodGhpcyk7ZWxzZSBmb3IoaT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7aT49MDtpLS0pbz10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vZmZzZXQoKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUubGVmdD1vLmxlZnQsdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLnRvcD1vLnRvcCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUud2lkdGg9dGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub3V0ZXJXaWR0aCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5oZWlnaHQ9dGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTtyZXR1cm4gdGhpc30sX2NyZWF0ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKGUpe2U9ZXx8dGhpczt2YXIgaSxzPWUub3B0aW9ucztzLnBsYWNlaG9sZGVyJiZzLnBsYWNlaG9sZGVyLmNvbnN0cnVjdG9yIT09U3RyaW5nfHwoaT1zLnBsYWNlaG9sZGVyLHMucGxhY2Vob2xkZXI9e2VsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgcz1lLmN1cnJlbnRJdGVtWzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj10KFwiPFwiK3MrXCI+XCIsZS5kb2N1bWVudFswXSk7cmV0dXJuIGUuX2FkZENsYXNzKG4sXCJ1aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiLGl8fGUuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKS5fcmVtb3ZlQ2xhc3MobixcInVpLXNvcnRhYmxlLWhlbHBlclwiKSxcInRib2R5XCI9PT1zP2UuX2NyZWF0ZVRyUGxhY2Vob2xkZXIoZS5jdXJyZW50SXRlbS5maW5kKFwidHJcIikuZXEoMCksdChcIjx0cj5cIixlLmRvY3VtZW50WzBdKS5hcHBlbmRUbyhuKSk6XCJ0clwiPT09cz9lLl9jcmVhdGVUclBsYWNlaG9sZGVyKGUuY3VycmVudEl0ZW0sbik6XCJpbWdcIj09PXMmJm4uYXR0cihcInNyY1wiLGUuY3VycmVudEl0ZW0uYXR0cihcInNyY1wiKSksaXx8bi5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIiksbn0sdXBkYXRlOmZ1bmN0aW9uKHQsbil7aSYmIXMuZm9yY2VQbGFjZWhvbGRlclNpemV8fChuLmhlaWdodCgpfHxuLmhlaWdodChlLmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nVG9wXCIpfHwwLDEwKS1wYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcyhcInBhZGRpbmdCb3R0b21cIil8fDAsMTApKSxuLndpZHRoKCl8fG4ud2lkdGgoZS5jdXJyZW50SXRlbS5pbm5lcldpZHRoKCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nTGVmdFwiKXx8MCwxMCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nUmlnaHRcIil8fDAsMTApKSl9fSksZS5wbGFjZWhvbGRlcj10KHMucGxhY2Vob2xkZXIuZWxlbWVudC5jYWxsKGUuZWxlbWVudCxlLmN1cnJlbnRJdGVtKSksZS5jdXJyZW50SXRlbS5hZnRlcihlLnBsYWNlaG9sZGVyKSxzLnBsYWNlaG9sZGVyLnVwZGF0ZShlLGUucGxhY2Vob2xkZXIpfSxfY3JlYXRlVHJQbGFjZWhvbGRlcjpmdW5jdGlvbihlLGkpe3ZhciBzPXRoaXM7ZS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt0KFwiPHRkPiYjMTYwOzwvdGQ+XCIscy5kb2N1bWVudFswXSkuYXR0cihcImNvbHNwYW5cIix0KHRoaXMpLmF0dHIoXCJjb2xzcGFuXCIpfHwxKS5hcHBlbmRUbyhpKX0pfSxfY29udGFjdENvbnRhaW5lcnM6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYSxyLGgsbCxjLHUsZD1udWxsLHA9bnVsbDtmb3IoaT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7aT49MDtpLS0paWYoIXQuY29udGFpbnModGhpcy5jdXJyZW50SXRlbVswXSx0aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudFswXSkpaWYodGhpcy5faW50ZXJzZWN0c1dpdGgodGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlKSl7aWYoZCYmdC5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudFswXSxkLmVsZW1lbnRbMF0pKWNvbnRpbnVlO2Q9dGhpcy5jb250YWluZXJzW2ldLHA9aX1lbHNlIHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW2ldLl90cmlnZ2VyKFwib3V0XCIsZSx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyPTApO2lmKGQpaWYoMT09PXRoaXMuY29udGFpbmVycy5sZW5ndGgpdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJvdmVyXCIsZSx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTEpO2Vsc2V7Zm9yKG49MWU0LG89bnVsbCxjPWQuZmxvYXRpbmd8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5jdXJyZW50SXRlbSksYT1jP1wibGVmdFwiOlwidG9wXCIscj1jP1wid2lkdGhcIjpcImhlaWdodFwiLHU9Yz9cInBhZ2VYXCI6XCJwYWdlWVwiLHM9dGhpcy5pdGVtcy5sZW5ndGgtMTtzPj0wO3MtLSl0LmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1twXS5lbGVtZW50WzBdLHRoaXMuaXRlbXNbc10uaXRlbVswXSkmJnRoaXMuaXRlbXNbc10uaXRlbVswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJihoPXRoaXMuaXRlbXNbc10uaXRlbS5vZmZzZXQoKVthXSxsPSExLGVbdV0taD50aGlzLml0ZW1zW3NdW3JdLzImJihsPSEwKSxNYXRoLmFicyhlW3VdLWgpPG4mJihuPU1hdGguYWJzKGVbdV0taCksbz10aGlzLml0ZW1zW3NdLHRoaXMuZGlyZWN0aW9uPWw/XCJ1cFwiOlwiZG93blwiKSk7aWYoIW8mJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO2lmKHRoaXMuY3VycmVudENvbnRhaW5lcj09PXRoaXMuY29udGFpbmVyc1twXSlyZXR1cm4gdm9pZCh0aGlzLmN1cnJlbnRDb250YWluZXIuY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLmN1cnJlbnRDb250YWluZXIuY29udGFpbmVyQ2FjaGUub3Zlcj0xKSk7bz90aGlzLl9yZWFycmFuZ2UoZSxvLG51bGwsITApOnRoaXMuX3JlYXJyYW5nZShlLG51bGwsdGhpcy5jb250YWluZXJzW3BdLmVsZW1lbnQsITApLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMuY29udGFpbmVyc1twXSx0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lcix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJvdmVyXCIsZSx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyPTF9fSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxzPXQuaXNGdW5jdGlvbihpLmhlbHBlcik/dChpLmhlbHBlci5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2UsdGhpcy5jdXJyZW50SXRlbV0pKTpcImNsb25lXCI9PT1pLmhlbHBlcj90aGlzLmN1cnJlbnRJdGVtLmNsb25lKCk6dGhpcy5jdXJyZW50SXRlbTtyZXR1cm4gcy5wYXJlbnRzKFwiYm9keVwiKS5sZW5ndGh8fHQoXCJwYXJlbnRcIiE9PWkuYXBwZW5kVG8/aS5hcHBlbmRUbzp0aGlzLmN1cnJlbnRJdGVtWzBdLnBhcmVudE5vZGUpWzBdLmFwcGVuZENoaWxkKHNbMF0pLHNbMF09PT10aGlzLmN1cnJlbnRJdGVtWzBdJiYodGhpcy5fc3RvcmVkQ1NTPXt3aWR0aDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLndpZHRoLGhlaWdodDp0aGlzLmN1cnJlbnRJdGVtWzBdLnN0eWxlLmhlaWdodCxwb3NpdGlvbjp0aGlzLmN1cnJlbnRJdGVtLmNzcyhcInBvc2l0aW9uXCIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcyhcInRvcFwiKSxsZWZ0OnRoaXMuY3VycmVudEl0ZW0uY3NzKFwibGVmdFwiKX0pLHNbMF0uc3R5bGUud2lkdGgmJiFpLmZvcmNlSGVscGVyU2l6ZXx8cy53aWR0aCh0aGlzLmN1cnJlbnRJdGVtLndpZHRoKCkpLHNbMF0uc3R5bGUuaGVpZ2h0JiYhaS5mb3JjZUhlbHBlclNpemV8fHMuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHN9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KFwiIFwiKSksdC5pc0FycmF5KGUpJiYoZT17bGVmdDorZVswXSx0b3A6K2VbMV18fDB9KSxcImxlZnRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWUubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksXCJyaWdodFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInRvcFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD1lLnRvcCt0aGlzLm1hcmdpbnMudG9wKSxcImJvdHRvbVwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1lLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3JldHVyblwiYWJzb2x1dGVcIj09PXRoaXMuY3NzUG9zaXRpb24mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJihlLmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSxlLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLCh0aGlzLm9mZnNldFBhcmVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYm9keXx8dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSYmXCJodG1sXCI9PT10aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnQudWkuaWUpJiYoZT17dG9wOjAsbGVmdDowfSkse3RvcDplLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSxsZWZ0OmUubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZihcInJlbGF0aXZlXCI9PT10aGlzLmNzc1Bvc2l0aW9uKXt2YXIgdD10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDp0LnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwidG9wXCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDp0LmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcImxlZnRcIiksMTApfHwwKSt0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCl9fXJldHVybnt0b3A6MCxsZWZ0OjB9fSxfY2FjaGVNYXJnaW5zOmZ1bmN0aW9uKCl7dGhpcy5tYXJnaW5zPXtsZWZ0OnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKFwibWFyZ2luTGVmdFwiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG49dGhpcy5vcHRpb25zO1wicGFyZW50XCI9PT1uLmNvbnRhaW5tZW50JiYobi5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKSxcImRvY3VtZW50XCIhPT1uLmNvbnRhaW5tZW50JiZcIndpbmRvd1wiIT09bi5jb250YWlubWVudHx8KHRoaXMuY29udGFpbm1lbnQ9WzAtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCwwLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLFwiZG9jdW1lbnRcIj09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC53aWR0aCgpOnRoaXMud2luZG93LndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCwoXCJkb2N1bWVudFwiPT09bi5jb250YWlubWVudD90aGlzLmRvY3VtZW50LmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0OnRoaXMud2luZG93LmhlaWdodCgpfHx0aGlzLmRvY3VtZW50WzBdLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKSwvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3Qobi5jb250YWlubWVudCl8fChlPXQobi5jb250YWlubWVudClbMF0saT10KG4uY29udGFpbm1lbnQpLm9mZnNldCgpLHM9XCJoaWRkZW5cIiE9PXQoZSkuY3NzKFwib3ZlcmZsb3dcIiksdGhpcy5jb250YWlubWVudD1baS5sZWZ0KyhwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludCh0KGUpLmNzcyhcInBhZGRpbmdMZWZ0XCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHBhcnNlSW50KHQoZSkuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQodChlKS5jc3MoXCJwYWRkaW5nVG9wXCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxpLmxlZnQrKHM/TWF0aC5tYXgoZS5zY3JvbGxXaWR0aCxlLm9mZnNldFdpZHRoKTplLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQodChlKS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQodChlKS5jc3MoXCJwYWRkaW5nUmlnaHRcIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhzP01hdGgubWF4KGUuc2Nyb2xsSGVpZ2h0LGUub2Zmc2V0SGVpZ2h0KTplLm9mZnNldEhlaWdodCktKHBhcnNlSW50KHQoZSkuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQodChlKS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24oZSxpKXtpfHwoaT10aGlzLnBvc2l0aW9uKTt2YXIgcz1cImFic29sdXRlXCI9PT1lPzE6LTEsbj1cImFic29sdXRlXCIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LG89LyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTpvPzA6bi5zY3JvbGxUb3AoKSkqcyxsZWZ0OmkubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KnMrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqcy0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOm8/MDpuLnNjcm9sbExlZnQoKSkqc319LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10aGlzLm9wdGlvbnMsbz1lLnBhZ2VYLGE9ZS5wYWdlWSxyPVwiYWJzb2x1dGVcIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsaD0vKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7cmV0dXJuXCJyZWxhdGl2ZVwiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMub2Zmc2V0UGFyZW50WzBdfHwodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uJiYodGhpcy5jb250YWlubWVudCYmKGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdJiYobz10aGlzLmNvbnRhaW5tZW50WzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0mJihhPXRoaXMuY29udGFpbm1lbnRbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXSYmKG89dGhpcy5jb250YWlubWVudFsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxcbmUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihhPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksbi5ncmlkJiYoaT10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoYS10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdLGE9dGhpcy5jb250YWlubWVudD9pLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXSYmaS10aGlzLm9mZnNldC5jbGljay50b3A8PXRoaXMuY29udGFpbm1lbnRbM10/aTppLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49dGhpcy5jb250YWlubWVudFsxXT9pLW4uZ3JpZFsxXTppK24uZ3JpZFsxXTppLHM9dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKG8tdGhpcy5vcmlnaW5hbFBhZ2VYKS9uLmdyaWRbMF0pKm4uZ3JpZFswXSxvPXRoaXMuY29udGFpbm1lbnQ/cy10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj10aGlzLmNvbnRhaW5tZW50WzBdJiZzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8PXRoaXMuY29udGFpbm1lbnRbMl0/czpzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0/cy1uLmdyaWRbMF06cytuLmdyaWRbMF06cykpLHt0b3A6YS10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmg/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0Om8tdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aD8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24odCxlLGkscyl7aT9pWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOmUuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLFwiZG93blwiPT09dGhpcy5kaXJlY3Rpb24/ZS5pdGVtWzBdOmUuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBuPXRoaXMuY291bnRlcjt0aGlzLl9kZWxheShmdW5jdGlvbigpe249PT10aGlzLmNvdW50ZXImJnRoaXMucmVmcmVzaFBvc2l0aW9ucyghcyl9KX0sX2NsZWFyOmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUsaSl7cmV0dXJuIGZ1bmN0aW9uKHMpe2kuX3RyaWdnZXIodCxzLGUuX3VpSGFzaChlKSl9fXRoaXMucmV2ZXJ0aW5nPSExO3ZhciBzLG49W107aWYoIXRoaXMuX25vRmluYWxTb3J0JiZ0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpLmxlbmd0aCYmdGhpcy5wbGFjZWhvbGRlci5iZWZvcmUodGhpcy5jdXJyZW50SXRlbSksdGhpcy5fbm9GaW5hbFNvcnQ9bnVsbCx0aGlzLmhlbHBlclswXT09PXRoaXMuY3VycmVudEl0ZW1bMF0pe2ZvcihzIGluIHRoaXMuX3N0b3JlZENTUylcImF1dG9cIiE9PXRoaXMuX3N0b3JlZENTU1tzXSYmXCJzdGF0aWNcIiE9PXRoaXMuX3N0b3JlZENTU1tzXXx8KHRoaXMuX3N0b3JlZENTU1tzXT1cIlwiKTt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuY3VycmVudEl0ZW0sXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodGhpcy5mcm9tT3V0c2lkZSYmIWUmJm4ucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKFwicmVjZWl2ZVwiLHQsdGhpcy5fdWlIYXNoKHRoaXMuZnJvbU91dHNpZGUpKX0pLCF0aGlzLmZyb21PdXRzaWRlJiZ0aGlzLmRvbVBvc2l0aW9uLnByZXY9PT10aGlzLmN1cnJlbnRJdGVtLnByZXYoKS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpWzBdJiZ0aGlzLmRvbVBvc2l0aW9uLnBhcmVudD09PXRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF18fGV8fG4ucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKFwidXBkYXRlXCIsdCx0aGlzLl91aUhhc2goKSl9KSx0aGlzIT09dGhpcy5jdXJyZW50Q29udGFpbmVyJiYoZXx8KG4ucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKFwicmVtb3ZlXCIsdCx0aGlzLl91aUhhc2goKSl9KSxuLnB1c2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuX3RyaWdnZXIoXCJyZWNlaXZlXCIsZSx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLG4ucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcihcInVwZGF0ZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSkpLHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKWV8fG4ucHVzaChpKFwiZGVhY3RpdmF0ZVwiLHRoaXMsdGhpcy5jb250YWluZXJzW3NdKSksdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXImJihuLnB1c2goaShcIm91dFwiLHRoaXMsdGhpcy5jb250YWluZXJzW3NdKSksdGhpcy5jb250YWluZXJzW3NdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYodGhpcy5zdG9yZWRDdXJzb3ImJih0aGlzLmRvY3VtZW50LmZpbmQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLHRoaXMuc3RvcmVkQ3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQucmVtb3ZlKCkpLHRoaXMuX3N0b3JlZE9wYWNpdHkmJnRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIix0aGlzLl9zdG9yZWRPcGFjaXR5KSx0aGlzLl9zdG9yZWRaSW5kZXgmJnRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiLFwiYXV0b1wiPT09dGhpcy5fc3RvcmVkWkluZGV4P1wiXCI6dGhpcy5fc3RvcmVkWkluZGV4KSx0aGlzLmRyYWdnaW5nPSExLGV8fHRoaXMuX3RyaWdnZXIoXCJiZWZvcmVTdG9wXCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8KHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCksIWUpe2ZvcihzPTA7czxuLmxlbmd0aDtzKyspbltzXS5jYWxsKHRoaXMsdCk7dGhpcy5fdHJpZ2dlcihcInN0b3BcIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfSxfdHJpZ2dlcjpmdW5jdGlvbigpeyExPT09dC5XaWRnZXQucHJvdG90eXBlLl90cmlnZ2VyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbihlKXt2YXIgaT1lfHx0aGlzO3JldHVybntoZWxwZXI6aS5oZWxwZXIscGxhY2Vob2xkZXI6aS5wbGFjZWhvbGRlcnx8dChbXSkscG9zaXRpb246aS5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOmkub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6aS5wb3NpdGlvbkFicyxpdGVtOmkuY3VycmVudEl0ZW0sc2VuZGVyOmU/ZS5lbGVtZW50Om51bGx9fX0pO3Qud2lkZ2V0KFwidWkuc3Bpbm5lclwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8aW5wdXQ+XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzcGluXCIsb3B0aW9uczp7Y2xhc3Nlczp7XCJ1aS1zcGlubmVyXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1zcGlubmVyLWRvd25cIjpcInVpLWNvcm5lci1iclwiLFwidWktc3Bpbm5lci11cFwiOlwidWktY29ybmVyLXRyXCJ9LGN1bHR1cmU6bnVsbCxpY29uczp7ZG93bjpcInVpLWljb24tdHJpYW5nbGUtMS1zXCIsdXA6XCJ1aS1pY29uLXRyaWFuZ2xlLTEtblwifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oXCJtYXhcIix0aGlzLm9wdGlvbnMubWF4KSx0aGlzLl9zZXRPcHRpb24oXCJtaW5cIix0aGlzLm9wdGlvbnMubWluKSx0aGlzLl9zZXRPcHRpb24oXCJzdGVwXCIsdGhpcy5vcHRpb25zLnN0ZXApLFwiXCIhPT10aGlzLnZhbHVlKCkmJnRoaXMuX3ZhbHVlKHRoaXMuZWxlbWVudC52YWwoKSwhMCksdGhpcy5fZHJhdygpLHRoaXMuX29uKHRoaXMuX2V2ZW50cyksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZVwiKX19KX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9zdXBlcigpLGk9dGhpcy5lbGVtZW50O3JldHVybiB0LmVhY2goW1wibWluXCIsXCJtYXhcIixcInN0ZXBcIl0sZnVuY3Rpb24odCxzKXt2YXIgbj1pLmF0dHIocyk7bnVsbCE9biYmbi5sZW5ndGgmJihlW3NdPW4pfSksZX0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLl9zdGFydCh0KSYmdGhpcy5fa2V5ZG93bih0KSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDpcIl9zdG9wXCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbih0KXtpZih0aGlzLmNhbmNlbEJsdXIpcmV0dXJuIHZvaWQgZGVsZXRlIHRoaXMuY2FuY2VsQmx1cjt0aGlzLl9zdG9wKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0KX0sbW91c2V3aGVlbDpmdW5jdGlvbih0LGUpe2lmKGUpe2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQodCkpcmV0dXJuITE7dGhpcy5fc3BpbigoZT4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLHQpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKHQpfSwxMDApLHQucHJldmVudERlZmF1bHQoKX19LFwibW91c2Vkb3duIC51aS1zcGlubmVyLWJ1dHRvblwiOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXt0aGlzLmVsZW1lbnRbMF09PT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pfHwodGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXN9KSl9dmFyIHM7cz10aGlzLmVsZW1lbnRbMF09PT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pP3RoaXMucHJldmlvdXM6dGhpcy5lbGVtZW50LnZhbCgpLGUucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cixpLmNhbGwodGhpcyl9KSwhMSE9PXRoaXMuX3N0YXJ0KGUpJiZ0aGlzLl9yZXBlYXQobnVsbCx0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zcGlubmVyLXVwXCIpPzE6LTEsZSl9LFwibW91c2V1cCAudWktc3Bpbm5lci1idXR0b25cIjpcIl9zdG9wXCIsXCJtb3VzZWVudGVyIC51aS1zcGlubmVyLWJ1dHRvblwiOmZ1bmN0aW9uKGUpe2lmKHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKSlyZXR1cm4hMSE9PXRoaXMuX3N0YXJ0KGUpJiZ2b2lkIHRoaXMuX3JlcGVhdChudWxsLHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcyhcInVpLXNwaW5uZXItdXBcIik/MTotMSxlKX0sXCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvblwiOlwiX3N0b3BcIn0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpLndyYXAoXCI8c3Bhbj5cIikucGFyZW50KCkuYXBwZW5kKFwiPGE+PC9hPjxhPjwvYT5cIil9LF9kcmF3OmZ1bmN0aW9uKCl7dGhpcy5fZW5oYW5jZSgpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlTcGlubmVyLFwidWktc3Bpbm5lclwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX2FkZENsYXNzKFwidWktc3Bpbm5lci1pbnB1dFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInNwaW5idXR0b25cIiksdGhpcy5idXR0b25zPXRoaXMudWlTcGlubmVyLmNoaWxkcmVuKFwiYVwiKS5hdHRyKFwidGFiSW5kZXhcIiwtMSkuYXR0cihcImFyaWEtaGlkZGVuXCIsITApLmJ1dHRvbih7Y2xhc3Nlczp7XCJ1aS1idXR0b25cIjpcIlwifX0pLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuYnV0dG9ucyxcInVpLWNvcm5lci1hbGxcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5idXR0b25zLmZpcnN0KCksXCJ1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9ucy5sYXN0KCksXCJ1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLWRvd25cIiksdGhpcy5idXR0b25zLmZpcnN0KCkuYnV0dG9uKHtpY29uOnRoaXMub3B0aW9ucy5pY29ucy51cCxzaG93TGFiZWw6ITF9KSx0aGlzLmJ1dHRvbnMubGFzdCgpLmJ1dHRvbih7aWNvbjp0aGlzLm9wdGlvbnMuaWNvbnMuZG93bixzaG93TGFiZWw6ITF9KSx0aGlzLmJ1dHRvbnMuaGVpZ2h0KCk+TWF0aC5jZWlsKC41KnRoaXMudWlTcGlubmVyLmhlaWdodCgpKSYmdGhpcy51aVNwaW5uZXIuaGVpZ2h0KCk+MCYmdGhpcy51aVNwaW5uZXIuaGVpZ2h0KHRoaXMudWlTcGlubmVyLmhlaWdodCgpKX0sX2tleWRvd246ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dC51aS5rZXlDb2RlO3N3aXRjaChlLmtleUNvZGUpe2Nhc2Ugcy5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSxlKSwhMDtjYXNlIHMuRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsZSksITA7Y2FzZSBzLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLGkucGFnZSxlKSwhMDtjYXNlIHMuUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtaS5wYWdlLGUpLCEwfXJldHVybiExfSxfc3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuISghdGhpcy5zcGlubmluZyYmITE9PT10aGlzLl90cmlnZ2VyKFwic3RhcnRcIix0KSkmJih0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksdGhpcy5zcGlubmluZz0hMCwhMCl9LF9yZXBlYXQ6ZnVuY3Rpb24odCxlLGkpe3Q9dHx8NTAwLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fcmVwZWF0KDQwLGUsaSl9LHQpLHRoaXMuX3NwaW4oZSp0aGlzLm9wdGlvbnMuc3RlcCxpKX0sX3NwaW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnZhbHVlKCl8fDA7dGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLGk9dGhpcy5fYWRqdXN0VmFsdWUoaSt0KnRoaXMuX2luY3JlbWVudCh0aGlzLmNvdW50ZXIpKSx0aGlzLnNwaW5uaW5nJiYhMT09PXRoaXMuX3RyaWdnZXIoXCJzcGluXCIsZSx7dmFsdWU6aX0pfHwodGhpcy5fdmFsdWUoaSksdGhpcy5jb3VudGVyKyspfSxfaW5jcmVtZW50OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtyZXR1cm4gaT90LmlzRnVuY3Rpb24oaSk/aShlKTpNYXRoLmZsb29yKGUqZSplLzVlNC1lKmUvNTAwKzE3KmUvMjAwKzEpOjF9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIG51bGwhPT10aGlzLm9wdGlvbnMubWluJiYodD1NYXRoLm1heCh0LHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksdH0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKHQpe3ZhciBlPXQudG9TdHJpbmcoKSxpPWUuaW5kZXhPZihcIi5cIik7cmV0dXJuLTE9PT1pPzA6ZS5sZW5ndGgtaS0xfSxfYWRqdXN0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxzPXRoaXMub3B0aW9ucztyZXR1cm4gZT1udWxsIT09cy5taW4/cy5taW46MCxpPXQtZSxpPU1hdGgucm91bmQoaS9zLnN0ZXApKnMuc3RlcCx0PWUraSx0PXBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSksbnVsbCE9PXMubWF4JiZ0PnMubWF4P3MubWF4Om51bGwhPT1zLm1pbiYmdDxzLm1pbj9zLm1pbjp0fSxfc3RvcDpmdW5jdGlvbih0KXt0aGlzLnNwaW5uaW5nJiYoY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5jb3VudGVyPTAsdGhpcy5zcGlubmluZz0hMSx0aGlzLl90cmlnZ2VyKFwic3RvcFwiLHQpKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbjtpZihcImN1bHR1cmVcIj09PXR8fFwibnVtYmVyRm9ybWF0XCI9PT10KXJldHVybiBpPXRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSksdGhpcy5vcHRpb25zW3RdPWUsdm9pZCB0aGlzLmVsZW1lbnQudmFsKHRoaXMuX2Zvcm1hdChpKSk7XCJtYXhcIiE9PXQmJlwibWluXCIhPT10JiZcInN0ZXBcIiE9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLl9wYXJzZShlKSksXCJpY29uc1wiPT09dCYmKHM9dGhpcy5idXR0b25zLmZpcnN0KCkuZmluZChcIi51aS1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKHMsbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMudXApLHRoaXMuX2FkZENsYXNzKHMsbnVsbCxlLnVwKSxuPXRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZChcIi51aS1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKG4sbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuZG93biksdGhpcy5fYWRkQ2xhc3MobixudWxsLGUuZG93bikpLHRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLnVpU3Bpbm5lcixudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwhIXQpLHRoaXMuYnV0dG9ucy5idXR0b24odD9cImRpc2FibGVcIjpcImVuYWJsZVwiKX0sX3NldE9wdGlvbnM6cihmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KX0pLF9wYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQmJih0PXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQodCwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K3QpLFwiXCI9PT10fHxpc05hTih0KT9udWxsOnR9LF9mb3JtYXQ6ZnVuY3Rpb24odCl7cmV0dXJuXCJcIj09PXQ/XCJcIjp3aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5mb3JtYXQodCx0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LHRoaXMub3B0aW9ucy5jdWx0dXJlKTp0fSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm9wdGlvbnMubWluLFwiYXJpYS12YWx1ZW1heFwiOnRoaXMub3B0aW9ucy5tYXgsXCJhcmlhLXZhbHVlbm93XCI6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0pfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZSgpO3JldHVybiBudWxsIT09dCYmdD09PXRoaXMuX2FkanVzdFZhbHVlKHQpfSxfdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaTtcIlwiIT09dCYmbnVsbCE9PShpPXRoaXMuX3BhcnNlKHQpKSYmKGV8fChpPXRoaXMuX2FkanVzdFZhbHVlKGkpKSx0PXRoaXMuX2Zvcm1hdChpKSksdGhpcy5lbGVtZW50LnZhbCh0KSx0aGlzLl9yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLCExKS5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlIHJvbGUgYXJpYS12YWx1ZW1pbiBhcmlhLXZhbHVlbWF4IGFyaWEtdmFsdWVub3dcIiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOnIoZnVuY3Rpb24odCl7dGhpcy5fc3RlcFVwKHQpfSksX3N0ZXBVcDpmdW5jdGlvbih0KXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigodHx8MSkqdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHN0ZXBEb3duOnIoZnVuY3Rpb24odCl7dGhpcy5fc3RlcERvd24odCl9KSxfc3RlcERvd246ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKHR8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0scGFnZVVwOnIoZnVuY3Rpb24odCl7dGhpcy5fc3RlcFVwKCh0fHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBEb3duKCh0fHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKTtyKHRoaXMuX3ZhbHVlKS5jYWxsKHRoaXMsdCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpU3Bpbm5lcn19KSwhMSE9PXQudWlCYWNrQ29tcGF0JiZ0LndpZGdldChcInVpLnNwaW5uZXJcIix0LnVpLnNwaW5uZXIse19lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy51aVNwaW5uZXI9dGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSl9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuXCI8c3Bhbj5cIn0sX2J1dHRvbkh0bWw6ZnVuY3Rpb24oKXtyZXR1cm5cIjxhPjwvYT48YT48L2E+XCJ9fSk7dC51aS5zcGlubmVyO3Qud2lkZ2V0KFwidWkudGFic1wiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNsYXNzZXM6e1widWktdGFic1wiOlwidWktY29ybmVyLWFsbFwiLFwidWktdGFicy1uYXZcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXRhYnMtcGFuZWxcIjpcInVpLWNvcm5lci1ib3R0b21cIixcInVpLXRhYnMtdGFiXCI6XCJ1aS1jb3JuZXItdG9wXCJ9LGNvbGxhcHNpYmxlOiExLGV2ZW50OlwiY2xpY2tcIixoZWlnaHRTdHlsZTpcImNvbnRlbnRcIixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfaXNMb2NhbDpmdW5jdGlvbigpe3ZhciB0PS8jLiokLztyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGkscztpPWUuaHJlZi5yZXBsYWNlKHQsXCJcIikscz1sb2NhdGlvbi5ocmVmLnJlcGxhY2UodCxcIlwiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2godCl7fXRyeXtzPWRlY29kZVVSSUNvbXBvbmVudChzKX1jYXRjaCh0KXt9cmV0dXJuIGUuaGFzaC5sZW5ndGg+MSYmaT09PXN9fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLl9hZGRDbGFzcyhcInVpLXRhYnNcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl90b2dnbGVDbGFzcyhcInVpLXRhYnMtY29sbGFwc2libGVcIixudWxsLGkuY29sbGFwc2libGUpLHRoaXMuX3Byb2Nlc3NUYWJzKCksaS5hY3RpdmU9dGhpcy5faW5pdGlhbEFjdGl2ZSgpLHQuaXNBcnJheShpLmRpc2FibGVkKSYmKGkuZGlzYWJsZWQ9dC51bmlxdWUoaS5kaXNhYmxlZC5jb25jYXQodC5tYXAodGhpcy50YWJzLmZpbHRlcihcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSxmdW5jdGlvbih0KXtyZXR1cm4gZS50YWJzLmluZGV4KHQpfSkpKS5zb3J0KCkpLCExIT09dGhpcy5vcHRpb25zLmFjdGl2ZSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTp0aGlzLmFjdGl2ZT10KCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLHM9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT1lJiYocyYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxuKXtpZih0KG4pLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpPT09cylyZXR1cm4gZT1pLCExfSksbnVsbD09PWUmJihlPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKFwiLnVpLXRhYnMtYWN0aXZlXCIpKSksbnVsbCE9PWUmJi0xIT09ZXx8KGU9ISF0aGlzLnRhYnMubGVuZ3RoJiYwKSksITEhPT1lJiYtMT09PShlPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEoZSkpKSYmKGU9IWkmJjApLCFpJiYhMT09PWUmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJihlPTApLGV9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFiOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSk6dCgpfX0sX3RhYktleWRvd246ZnVuY3Rpb24oZSl7dmFyIGk9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKS5jbG9zZXN0KFwibGlcIikscz10aGlzLnRhYnMuaW5kZXgoaSksbj0hMDtpZighdGhpcy5faGFuZGxlUGFnZU5hdihlKSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpzKys7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDpuPSExLHMtLTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6cz10aGlzLmFuY2hvcnMubGVuZ3RoLTE7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpzPTA7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6cmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx2b2lkIHRoaXMuX2FjdGl2YXRlKHMpO2Nhc2UgdC51aS5rZXlDb2RlLkVOVEVSOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdm9pZCB0aGlzLl9hY3RpdmF0ZShzIT09dGhpcy5vcHRpb25zLmFjdGl2ZSYmcyk7ZGVmYXVsdDpyZXR1cm59ZS5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHM9dGhpcy5fZm9jdXNOZXh0VGFiKHMsbiksZS5jdHJsS2V5fHxlLm1ldGFLZXl8fChpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsXCJmYWxzZVwiKSx0aGlzLnRhYnMuZXEocykuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixcInRydWVcIiksdGhpcy5hY3RpdmF0aW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5vcHRpb24oXCJhY3RpdmVcIixzKX0sdGhpcy5kZWxheSkpfX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9oYW5kbGVQYWdlTmF2KGUpfHxlLmN0cmxLZXkmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5VUCYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS50cmlnZ2VyKFwiZm9jdXNcIikpfSxfaGFuZGxlUGFnZU5hdjpmdW5jdGlvbihlKXtyZXR1cm4gZS5hbHRLZXkmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5QQUdFX1VQPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZS0xLCExKSksITApOmUuYWx0S2V5JiZlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuUEFHRV9ET1dOPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITApOnZvaWQgMH0sX2ZpbmROZXh0VGFiOmZ1bmN0aW9uKGUsaSl7Zm9yKHZhciBzPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PXQuaW5BcnJheShmdW5jdGlvbigpe3JldHVybiBlPnMmJihlPTApLGU8MCYmKGU9cyksZX0oKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQpOyllPWk/ZSsxOmUtMTtyZXR1cm4gZX0sX2ZvY3VzTmV4dFRhYjpmdW5jdGlvbih0LGUpe3JldHVybiB0PXRoaXMuX2ZpbmROZXh0VGFiKHQsZSksdGhpcy50YWJzLmVxKHQpLnRyaWdnZXIoXCJmb2N1c1wiKSx0fSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJhY3RpdmVcIj09PXQpcmV0dXJuIHZvaWQgdGhpcy5fYWN0aXZhdGUoZSk7dGhpcy5fc3VwZXIodCxlKSxcImNvbGxhcHNpYmxlXCI9PT10JiYodGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS10YWJzLWNvbGxhcHNpYmxlXCIsbnVsbCxlKSxlfHwhMSE9PXRoaXMub3B0aW9ucy5hY3RpdmV8fHRoaXMuX2FjdGl2YXRlKDApKSxcImV2ZW50XCI9PT10JiZ0aGlzLl9zZXR1cEV2ZW50cyhlKSxcImhlaWdodFN0eWxlXCI9PT10JiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKGUpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdD90LnJlcGxhY2UoL1shXCIkJSYnKCkqKywuXFwvOjs8PT4/QFxcW1xcXVxcXmB7fH1+XS9nLFwiXFxcXCQmXCIpOlwiXCJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oXCI6aGFzKGFbaHJlZl0pXCIpO2UuZGlzYWJsZWQ9dC5tYXAoaS5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIiksZnVuY3Rpb24odCl7cmV0dXJuIGkuaW5kZXgodCl9KSx0aGlzLl9wcm9jZXNzVGFicygpLCExIT09ZS5hY3RpdmUmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmUubGVuZ3RoJiYhdC5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT1lLmRpc2FibGVkLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLGUuYWN0aXZlLTEpLCExKSk6ZS5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKTooZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9zZXR1cEV2ZW50cyh0aGlzLm9wdGlvbnMuZXZlbnQpLHRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodGhpcy5vcHRpb25zLmhlaWdodFN0eWxlKSx0aGlzLnRhYnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHMubm90KHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKSkuaGlkZSgpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLHRoaXMuYWN0aXZlLmxlbmd0aD8odGhpcy5hY3RpdmUuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pLHRoaXMuX2FkZENsYXNzKHRoaXMuYWN0aXZlLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkuc2hvdygpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCJ9KSk6dGhpcy50YWJzLmVxKDApLmF0dHIoXCJ0YWJJbmRleFwiLDApfSxfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy50YWJzLHM9dGhpcy5hbmNob3JzLG49dGhpcy5wYW5lbHM7dGhpcy50YWJsaXN0PXRoaXMuX2dldExpc3QoKS5hdHRyKFwicm9sZVwiLFwidGFibGlzdFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnRhYmxpc3QsXCJ1aS10YWJzLW5hdlwiLFwidWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyXCIpLHRoaXMudGFibGlzdC5vbihcIm1vdXNlZG93blwiK3RoaXMuZXZlbnROYW1lc3BhY2UsXCI+IGxpXCIsZnVuY3Rpb24oZSl7dCh0aGlzKS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSkub24oXCJmb2N1c1wiK3RoaXMuZXZlbnROYW1lc3BhY2UsXCIudWktdGFicy1hbmNob3JcIixmdW5jdGlvbigpe3QodGhpcykuY2xvc2VzdChcImxpXCIpLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZ0aGlzLmJsdXIoKX0pLHRoaXMudGFicz10aGlzLnRhYmxpc3QuZmluZChcIj4gbGk6aGFzKGFbaHJlZl0pXCIpLmF0dHIoe3JvbGU6XCJ0YWJcIix0YWJJbmRleDotMX0pLHRoaXMuX2FkZENsYXNzKHRoaXMudGFicyxcInVpLXRhYnMtdGFiXCIsXCJ1aS1zdGF0ZS1kZWZhdWx0XCIpLHRoaXMuYW5jaG9ycz10aGlzLnRhYnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHQoXCJhXCIsdGhpcylbMF19KS5hdHRyKHtyb2xlOlwicHJlc2VudGF0aW9uXCIsdGFiSW5kZXg6LTF9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFuY2hvcnMsXCJ1aS10YWJzLWFuY2hvclwiKSx0aGlzLnBhbmVscz10KCksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oaSxzKXt2YXIgbixvLGEscj10KHMpLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpLGg9dChzKS5jbG9zZXN0KFwibGlcIiksbD1oLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpO2UuX2lzTG9jYWwocyk/KG49cy5oYXNoLGE9bi5zdWJzdHJpbmcoMSksbz1lLmVsZW1lbnQuZmluZChlLl9zYW5pdGl6ZVNlbGVjdG9yKG4pKSk6KGE9aC5hdHRyKFwiYXJpYS1jb250cm9sc1wiKXx8dCh7fSkudW5pcXVlSWQoKVswXS5pZCxuPVwiI1wiK2Esbz1lLmVsZW1lbnQuZmluZChuKSxvLmxlbmd0aHx8KG89ZS5fY3JlYXRlUGFuZWwoYSksby5pbnNlcnRBZnRlcihlLnBhbmVsc1tpLTFdfHxlLnRhYmxpc3QpKSxvLmF0dHIoXCJhcmlhLWxpdmVcIixcInBvbGl0ZVwiKSksby5sZW5ndGgmJihlLnBhbmVscz1lLnBhbmVscy5hZGQobykpLGwmJmguZGF0YShcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiLGwpLGguYXR0cih7XCJhcmlhLWNvbnRyb2xzXCI6YSxcImFyaWEtbGFiZWxsZWRieVwiOnJ9KSxvLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixyKX0pLHRoaXMucGFuZWxzLmF0dHIoXCJyb2xlXCIsXCJ0YWJwYW5lbFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnBhbmVscyxcInVpLXRhYnMtcGFuZWxcIixcInVpLXdpZGdldC1jb250ZW50XCIpLGkmJih0aGlzLl9vZmYoaS5ub3QodGhpcy50YWJzKSksdGhpcy5fb2ZmKHMubm90KHRoaXMuYW5jaG9ycykpLHRoaXMuX29mZihuLm5vdCh0aGlzLnBhbmVscykpKX0sX2dldExpc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50YWJsaXN0fHx0aGlzLmVsZW1lbnQuZmluZChcIm9sLCB1bFwiKS5lcSgwKX0sX2NyZWF0ZVBhbmVsOmZ1bmN0aW9uKGUpe3JldHVybiB0KFwiPGRpdj5cIikuYXR0cihcImlkXCIsZSkuZGF0YShcInVpLXRhYnMtZGVzdHJveVwiLCEwKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtmb3IodC5pc0FycmF5KGUpJiYoZS5sZW5ndGg/ZS5sZW5ndGg9PT10aGlzLmFuY2hvcnMubGVuZ3RoJiYoZT0hMCk6ZT0hMSksbj0wO3M9dGhpcy50YWJzW25dO24rKylpPXQocyksITA9PT1lfHwtMSE9PXQuaW5BcnJheShuLGUpPyhpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJ0cnVlXCIpLHRoaXMuX2FkZENsYXNzKGksbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIpKTooaS5yZW1vdmVBdHRyKFwiYXJpYS1kaXNhYmxlZFwiKSx0aGlzLl9yZW1vdmVDbGFzcyhpLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSk7dGhpcy5vcHRpb25zLmRpc2FibGVkPWUsdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy53aWRnZXQoKSx0aGlzLndpZGdldEZ1bGxOYW1lK1wiLWRpc2FibGVkXCIsbnVsbCwhMD09PWUpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24oZSl7dmFyIGk9e307ZSYmdC5lYWNoKGUuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKHQsZSl7aVtlXT1cIl9ldmVudEhhbmRsZXJcIn0pLHRoaXMuX29mZih0aGlzLmFuY2hvcnMuYWRkKHRoaXMudGFicykuYWRkKHRoaXMucGFuZWxzKSksdGhpcy5fb24oITAsdGhpcy5hbmNob3JzLHtjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fSksdGhpcy5fb24odGhpcy5hbmNob3JzLGkpLHRoaXMuX29uKHRoaXMudGFicyx7a2V5ZG93bjpcIl90YWJLZXlkb3duXCJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjpcIl9wYW5lbEtleWRvd25cIn0pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLnRhYnMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpfSxfc2V0dXBIZWlnaHRTdHlsZTpmdW5jdGlvbihlKXt2YXIgaSxzPXRoaXMuZWxlbWVudC5wYXJlbnQoKTtcImZpbGxcIj09PWU/KGk9cy5oZWlnaHQoKSxpLT10aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKS10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKFwiOnZpc2libGVcIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcykscz1lLmNzcyhcInBvc2l0aW9uXCIpO1wiYWJzb2x1dGVcIiE9PXMmJlwiZml4ZWRcIiE9PXMmJihpLT1lLm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtpLT10KHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGktdCh0aGlzKS5pbm5lckhlaWdodCgpK3QodGhpcykuaGVpZ2h0KCkpKX0pLmNzcyhcIm92ZXJmbG93XCIsXCJhdXRvXCIpKTpcImF1dG9cIj09PWUmJihpPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe2k9TWF0aC5tYXgoaSx0KHRoaXMpLmhlaWdodChcIlwiKS5oZWlnaHQoKSl9KS5oZWlnaHQoaSkpfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxzPXRoaXMuYWN0aXZlLG49dChlLmN1cnJlbnRUYXJnZXQpLG89bi5jbG9zZXN0KFwibGlcIiksYT1vWzBdPT09c1swXSxyPWEmJmkuY29sbGFwc2libGUsaD1yP3QoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihvKSxsPXMubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHMpOnQoKSxjPXtvbGRUYWI6cyxvbGRQYW5lbDpsLG5ld1RhYjpyP3QoKTpvLG5ld1BhbmVsOmh9O2UucHJldmVudERlZmF1bHQoKSxvLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIil8fG8uaGFzQ2xhc3MoXCJ1aS10YWJzLWxvYWRpbmdcIil8fHRoaXMucnVubmluZ3x8YSYmIWkuY29sbGFwc2libGV8fCExPT09dGhpcy5fdHJpZ2dlcihcImJlZm9yZUFjdGl2YXRlXCIsZSxjKXx8KGkuYWN0aXZlPSFyJiZ0aGlzLnRhYnMuaW5kZXgobyksdGhpcy5hY3RpdmU9YT90KCk6byx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8aC5sZW5ndGh8fHQuZXJyb3IoXCJqUXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci5cIiksaC5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgobyksZSksdGhpcy5fdG9nZ2xlKGUsYykpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcygpe28ucnVubmluZz0hMSxvLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixlLGkpfWZ1bmN0aW9uIG4oKXtvLl9hZGRDbGFzcyhpLm5ld1RhYi5jbG9zZXN0KFwibGlcIiksXCJ1aS10YWJzLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLGEubGVuZ3RoJiZvLm9wdGlvbnMuc2hvdz9vLl9zaG93KGEsby5vcHRpb25zLnNob3cscyk6KGEuc2hvdygpLHMoKSl9dmFyIG89dGhpcyxhPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7by5fcmVtb3ZlQ2xhc3MoaS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxuKCl9KToodGhpcy5fcmVtb3ZlQ2xhc3MoaS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxyLmhpZGUoKSxuKCkpLHIuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGkub2xkVGFiLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KSxhLmxlbmd0aCYmci5sZW5ndGg/aS5vbGRUYWIuYXR0cihcInRhYkluZGV4XCIsLTEpOmEubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10KHRoaXMpLmF0dHIoXCJ0YWJJbmRleFwiKX0pLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSxhLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIiksaS5uZXdUYWIuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLl9maW5kQWN0aXZlKGUpO3NbMF0hPT10aGlzLmFjdGl2ZVswXSYmKHMubGVuZ3RofHwocz10aGlzLmFjdGl2ZSksaT1zLmZpbmQoXCIudWktdGFicy1hbmNob3JcIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6dC5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/dCgpOnRoaXMudGFicy5lcShlKX0sX2dldEluZGV4OmZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3JzLmZpbHRlcihcIltocmVmJD0nXCIrdC51aS5lc2NhcGVTZWxlY3RvcihlKStcIiddXCIpKSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSx0aGlzLnRhYmxpc3QucmVtb3ZlQXR0cihcInJvbGVcIikub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMuYW5jaG9ycy5yZW1vdmVBdHRyKFwicm9sZSB0YWJJbmRleFwiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMudGFicy5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXt0LmRhdGEodGhpcyxcInVpLXRhYnMtZGVzdHJveVwiKT90KHRoaXMpLnJlbW92ZSgpOnQodGhpcykucmVtb3ZlQXR0cihcInJvbGUgdGFiSW5kZXggYXJpYS1saXZlIGFyaWEtYnVzeSBhcmlhLXNlbGVjdGVkIGFyaWEtbGFiZWxsZWRieSBhcmlhLWhpZGRlbiBhcmlhLWV4cGFuZGVkXCIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5kYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIpO2k/ZS5hdHRyKFwiYXJpYS1jb250cm9sc1wiLGkpLnJlbW92ZURhdGEoXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIik6ZS5yZW1vdmVBdHRyKFwiYXJpYS1jb250cm9sc1wiKX0pLHRoaXMucGFuZWxzLnNob3coKSxcImNvbnRlbnRcIiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdGhpcy5wYW5lbHMuY3NzKFwiaGVpZ2h0XCIsXCJcIil9LGVuYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7ITEhPT1pJiYodm9pZCAwPT09ZT9pPSExOihlPXRoaXMuX2dldEluZGV4KGUpLGk9dC5pc0FycmF5KGkpP3QubWFwKGksZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP3Q6bnVsbH0pOnQubWFwKHRoaXMudGFicyxmdW5jdGlvbih0LGkpe3JldHVybiBpIT09ZT9pOm51bGx9KSksdGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoaSkpfSxkaXNhYmxlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZighMCE9PWkpe2lmKHZvaWQgMD09PWUpaT0hMDtlbHNle2lmKGU9dGhpcy5fZ2V0SW5kZXgoZSksLTEhPT10LmluQXJyYXkoZSxpKSlyZXR1cm47aT10LmlzQXJyYXkoaSk/dC5tZXJnZShbZV0saSkuc29ydCgpOltlXX10aGlzLl9zZXRPcHRpb25EaXNhYmxlZChpKX19LGxvYWQ6ZnVuY3Rpb24oZSxpKXtlPXRoaXMuX2dldEluZGV4KGUpO3ZhciBzPXRoaXMsbj10aGlzLnRhYnMuZXEoZSksbz1uLmZpbmQoXCIudWktdGFicy1hbmNob3JcIiksYT10aGlzLl9nZXRQYW5lbEZvclRhYihuKSxyPXt0YWI6bixwYW5lbDphfSxoPWZ1bmN0aW9uKHQsZSl7XCJhYm9ydFwiPT09ZSYmcy5wYW5lbHMuc3RvcCghMSwhMCkscy5fcmVtb3ZlQ2xhc3MobixcInVpLXRhYnMtbG9hZGluZ1wiKSxhLnJlbW92ZUF0dHIoXCJhcmlhLWJ1c3lcIiksdD09PXMueGhyJiZkZWxldGUgcy54aHJ9O3RoaXMuX2lzTG9jYWwob1swXSl8fCh0aGlzLnhocj10LmFqYXgodGhpcy5fYWpheFNldHRpbmdzKG8saSxyKSksdGhpcy54aHImJlwiY2FuY2VsZWRcIiE9PXRoaXMueGhyLnN0YXR1c1RleHQmJih0aGlzLl9hZGRDbGFzcyhuLFwidWktdGFicy1sb2FkaW5nXCIpLGEuYXR0cihcImFyaWEtYnVzeVwiLFwidHJ1ZVwiKSx0aGlzLnhoci5kb25lKGZ1bmN0aW9uKHQsZSxuKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5odG1sKHQpLHMuX3RyaWdnZXIoXCJsb2FkXCIsaSxyKSxoKG4sZSl9LDEpfSkuZmFpbChmdW5jdGlvbih0LGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtoKHQsZSl9LDEpfSkpKX0sX2FqYXhTZXR0aW5nczpmdW5jdGlvbihlLGkscyl7dmFyIG49dGhpcztyZXR1cm57dXJsOmUuYXR0cihcImhyZWZcIikucmVwbGFjZSgvIy4qJC8sXCJcIiksYmVmb3JlU2VuZDpmdW5jdGlvbihlLG8pe3JldHVybiBuLl90cmlnZ2VyKFwiYmVmb3JlTG9hZFwiLGksdC5leHRlbmQoe2pxWEhSOmUsYWpheFNldHRpbmdzOm99LHMpKX19fSxfZ2V0UGFuZWxGb3JUYWI6ZnVuY3Rpb24oZSl7dmFyIGk9dChlKS5hdHRyKFwiYXJpYS1jb250cm9sc1wiKTtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQodGhpcy5fc2FuaXRpemVTZWxlY3RvcihcIiNcIitpKSl9fSksITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS50YWJzXCIsdC51aS50YWJzLHtfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5fYWRkQ2xhc3ModGhpcy50YWJzLFwidWktdGFiXCIpfX0pO3QudWkudGFiczt0LndpZGdldChcInVpLnRvb2x0aXBcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktdG9vbHRpcFwiOlwidWktY29ybmVyLWFsbCB1aS13aWRnZXQtc2hhZG93XCJ9LGNvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLmF0dHIoXCJ0aXRsZVwiKXx8XCJcIjtyZXR1cm4gdChcIjxhPlwiKS50ZXh0KGUpLmh0bWwoKX0saGlkZTohMCxpdGVtczpcIlt0aXRsZV06bm90KFtkaXNhYmxlZF0pXCIscG9zaXRpb246e215OlwibGVmdCB0b3ArMTVcIixhdDpcImxlZnQgYm90dG9tXCIsY29sbGlzaW9uOlwiZmxpcGZpdCBmbGlwXCJ9LHNob3c6ITAsdHJhY2s6ITEsY2xvc2U6bnVsbCxvcGVuOm51bGx9LF9hZGREZXNjcmliZWRCeTpmdW5jdGlvbihlLGkpe3ZhciBzPShlLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpfHxcIlwiKS5zcGxpdCgvXFxzKy8pO3MucHVzaChpKSxlLmRhdGEoXCJ1aS10b29sdGlwLWlkXCIsaSkuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIix0LnRyaW0ocy5qb2luKFwiIFwiKSkpfSxfcmVtb3ZlRGVzY3JpYmVkQnk6ZnVuY3Rpb24oZSl7dmFyIGk9ZS5kYXRhKFwidWktdG9vbHRpcC1pZFwiKSxzPShlLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpfHxcIlwiKS5zcGxpdCgvXFxzKy8pLG49dC5pbkFycmF5KGkscyk7LTEhPT1uJiZzLnNwbGljZShuLDEpLGUucmVtb3ZlRGF0YShcInVpLXRvb2x0aXAtaWRcIikscz10LnRyaW0ocy5qb2luKFwiIFwiKSkscz9lLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIscyk6ZS5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX29uKHttb3VzZW92ZXI6XCJvcGVuXCIsZm9jdXNpbjpcIm9wZW5cIn0pLHRoaXMudG9vbHRpcHM9e30sdGhpcy5wYXJlbnRzPXt9LHRoaXMubGl2ZVJlZ2lvbj10KFwiPGRpdj5cIikuYXR0cih7cm9sZTpcImxvZ1wiLFwiYXJpYS1saXZlXCI6XCJhc3NlcnRpdmVcIixcImFyaWEtcmVsZXZhbnRcIjpcImFkZGl0aW9uc1wifSkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmxpdmVSZWdpb24sbnVsbCxcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiKSx0aGlzLmRpc2FibGVkVGl0bGVzPXQoW10pfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dGhpczt0aGlzLl9zdXBlcihlLGkpLFwiY29udGVudFwiPT09ZSYmdC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24odCxlKXtzLl91cGRhdGVDb250ZW50KGUuZWxlbWVudCl9KX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXNbdD9cIl9kaXNhYmxlXCI6XCJfZW5hYmxlXCJdKCl9LF9kaXNhYmxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPXQuRXZlbnQoXCJibHVyXCIpO24udGFyZ2V0PW4uY3VycmVudFRhcmdldD1zLmVsZW1lbnRbMF0sZS5jbG9zZShuLCEwKX0pLHRoaXMuZGlzYWJsZWRUaXRsZXM9dGhpcy5kaXNhYmxlZFRpdGxlcy5hZGQodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtpZihlLmlzKFwiW3RpdGxlXVwiKSlyZXR1cm4gZS5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiLGUuYXR0cihcInRpdGxlXCIpKS5yZW1vdmVBdHRyKFwidGl0bGVcIil9KSl9LF9lbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkVGl0bGVzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikmJmUuYXR0cihcInRpdGxlXCIsZS5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSl9KSx0aGlzLmRpc2FibGVkVGl0bGVzPXQoW10pfSxvcGVuOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz10KGU/ZS50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7cy5sZW5ndGgmJiFzLmRhdGEoXCJ1aS10b29sdGlwLWlkXCIpJiYocy5hdHRyKFwidGl0bGVcIikmJnMuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIixzLmF0dHIoXCJ0aXRsZVwiKSkscy5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIsITApLGUmJlwibW91c2VvdmVyXCI9PT1lLnR5cGUmJnMucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgZSxzPXQodGhpcyk7cy5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpJiYoZT10LkV2ZW50KFwiYmx1clwiKSxlLnRhcmdldD1lLmN1cnJlbnRUYXJnZXQ9dGhpcyxpLmNsb3NlKGUsITApKSxzLmF0dHIoXCJ0aXRsZVwiKSYmKHMudW5pcXVlSWQoKSxpLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTpzLmF0dHIoXCJ0aXRsZVwiKX0scy5hdHRyKFwidGl0bGVcIixcIlwiKSl9KSx0aGlzLl9yZWdpc3RlckNsb3NlSGFuZGxlcnMoZSxzKSx0aGlzLl91cGRhdGVDb250ZW50KHMsZSkpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbih0LGUpe3ZhciBpLHM9dGhpcy5vcHRpb25zLmNvbnRlbnQsbj10aGlzLG89ZT9lLnR5cGU6bnVsbDtpZihcInN0cmluZ1wiPT10eXBlb2Ygc3x8cy5ub2RlVHlwZXx8cy5qcXVlcnkpcmV0dXJuIHRoaXMuX29wZW4oZSx0LHMpOyhpPXMuY2FsbCh0WzBdLGZ1bmN0aW9uKGkpe24uX2RlbGF5KGZ1bmN0aW9uKCl7dC5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpJiYoZSYmKGUudHlwZT1vKSx0aGlzLl9vcGVuKGUsdCxpKSl9KX0pKSYmdGhpcy5fb3BlbihlLHQsaSl9LF9vcGVuOmZ1bmN0aW9uKGUsaSxzKXtmdW5jdGlvbiBuKHQpe2wub2Y9dCxhLmlzKFwiOmhpZGRlblwiKXx8YS5wb3NpdGlvbihsKX12YXIgbyxhLHIsaCxsPXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7aWYocyl7aWYobz10aGlzLl9maW5kKGkpKXJldHVybiB2b2lkIG8udG9vbHRpcC5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKHMpO2kuaXMoXCJbdGl0bGVdXCIpJiYoZSYmXCJtb3VzZW92ZXJcIj09PWUudHlwZT9pLmF0dHIoXCJ0aXRsZVwiLFwiXCIpOmkucmVtb3ZlQXR0cihcInRpdGxlXCIpKSxvPXRoaXMuX3Rvb2x0aXAoaSksYT1vLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxhLmF0dHIoXCJpZFwiKSksYS5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKHMpLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSxoPXQoXCI8ZGl2PlwiKS5odG1sKGEuZmluZChcIi51aS10b29sdGlwLWNvbnRlbnRcIikuaHRtbCgpKSxoLnJlbW92ZUF0dHIoXCJuYW1lXCIpLmZpbmQoXCJbbmFtZV1cIikucmVtb3ZlQXR0cihcIm5hbWVcIiksaC5yZW1vdmVBdHRyKFwiaWRcIikuZmluZChcIltpZF1cIikucmVtb3ZlQXR0cihcImlkXCIpLGguYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSx0aGlzLm9wdGlvbnMudHJhY2smJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKT8odGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vtb3ZlOm59KSxuKGUpKTphLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjppfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSxhLmhpZGUoKSx0aGlzLl9zaG93KGEsdGhpcy5vcHRpb25zLnNob3cpLHRoaXMub3B0aW9ucy50cmFjayYmdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7YS5pcyhcIjp2aXNpYmxlXCIpJiYobihsLm9mKSxjbGVhckludGVydmFsKHIpKX0sdC5meC5pbnRlcnZhbCkpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIsZSx7dG9vbHRpcDphfSl9fSxfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzOmZ1bmN0aW9uKGUsaSl7dmFyIHM9e2tleXVwOmZ1bmN0aW9uKGUpe2lmKGUua2V5Q29kZT09PXQudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBzPXQuRXZlbnQoZSk7cy5jdXJyZW50VGFyZ2V0PWlbMF0sdGhpcy5jbG9zZShzLCEwKX19fTtpWzBdIT09dGhpcy5lbGVtZW50WzBdJiYocy5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVUb29sdGlwKHRoaXMuX2ZpbmQoaSkudG9vbHRpcCl9KSxlJiZcIm1vdXNlb3ZlclwiIT09ZS50eXBlfHwocy5tb3VzZWxlYXZlPVwiY2xvc2VcIiksZSYmXCJmb2N1c2luXCIhPT1lLnR5cGV8fChzLmZvY3Vzb3V0PVwiY2xvc2VcIiksdGhpcy5fb24oITAsaSxzKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLG49dChlP2UuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLG89dGhpcy5fZmluZChuKTtpZighbylyZXR1cm4gdm9pZCBuLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLW9wZW5cIik7aT1vLnRvb2x0aXAsby5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxuLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiYhbi5hdHRyKFwidGl0bGVcIikmJm4uYXR0cihcInRpdGxlXCIsbi5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSksdGhpcy5fcmVtb3ZlRGVzY3JpYmVkQnkobiksby5oaWRpbmc9ITAsaS5zdG9wKCEwKSx0aGlzLl9oaWRlKGksdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtzLl9yZW1vdmVUb29sdGlwKHQodGhpcykpfSksbi5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpLHRoaXMuX29mZihuLFwibW91c2VsZWF2ZSBmb2N1c291dCBrZXl1cFwiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobixcInJlbW92ZVwiKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcIm1vdXNlbW92ZVwiKSxlJiZcIm1vdXNlbGVhdmVcIj09PWUudHlwZSYmdC5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbihlLGkpe3QoaS5lbGVtZW50KS5hdHRyKFwidGl0bGVcIixpLnRpdGxlKSxkZWxldGUgcy5wYXJlbnRzW2VdfSksby5jbG9zaW5nPSEwLHRoaXMuX3RyaWdnZXIoXCJjbG9zZVwiLGUse3Rvb2x0aXA6aX0pLG8uaGlkaW5nfHwoby5jbG9zaW5nPSExKSl9LF90b29sdGlwOmZ1bmN0aW9uKGUpe3ZhciBpPXQoXCI8ZGl2PlwiKS5hdHRyKFwicm9sZVwiLFwidG9vbHRpcFwiKSxzPXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyhpKSxuPWkudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7cmV0dXJuIHRoaXMuX2FkZENsYXNzKHMsXCJ1aS10b29sdGlwLWNvbnRlbnRcIiksdGhpcy5fYWRkQ2xhc3MoaSxcInVpLXRvb2x0aXBcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSxpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKGUpKSx0aGlzLnRvb2x0aXBzW25dPXtlbGVtZW50OmUsdG9vbHRpcDppfX0sX2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRhKFwidWktdG9vbHRpcC1pZFwiKTtyZXR1cm4gZT90aGlzLnRvb2x0aXBzW2VdOm51bGx9LF9yZW1vdmVUb29sdGlwOmZ1bmN0aW9uKHQpe3QucmVtb3ZlKCksZGVsZXRlIHRoaXMudG9vbHRpcHNbdC5hdHRyKFwiaWRcIildfSxfYXBwZW5kVG86ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9zZXN0KFwiLnVpLWZyb250LCBkaWFsb2dcIik7cmV0dXJuIGUubGVuZ3RofHwoZT10aGlzLmRvY3VtZW50WzBdLmJvZHkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLHMpe3ZhciBuPXQuRXZlbnQoXCJibHVyXCIpLG89cy5lbGVtZW50O24udGFyZ2V0PW4uY3VycmVudFRhcmdldD1vWzBdLGUuY2xvc2UobiwhMCksdChcIiNcIitpKS5yZW1vdmUoKSxvLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiYoby5hdHRyKFwidGl0bGVcIil8fG8uYXR0cihcInRpdGxlXCIsby5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSksby5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSl9KSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9fSksITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS50b29sdGlwXCIsdC51aS50b29sdGlwLHtvcHRpb25zOnt0b29sdGlwQ2xhc3M6bnVsbH0sX3Rvb2x0aXA6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3MmJnQudG9vbHRpcC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzKSx0fX0pO3QudWkudG9vbHRpcH0pOyIsIiFmdW5jdGlvbihlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSxlKTplKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6d2luZG93LmpRdWVyeXx8d2luZG93LlplcHRvKX0oZnVuY3Rpb24oZSl7dmFyIHQsbixpLG8scixhLHM9ZnVuY3Rpb24oKXt9LGw9ISF3aW5kb3cualF1ZXJ5LGM9ZSh3aW5kb3cpLGQ9ZnVuY3Rpb24oZSxuKXt0LmV2Lm9uKFwibWZwXCIrZStcIi5tZnBcIixuKX0scD1mdW5jdGlvbih0LG4saSxvKXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiByLmNsYXNzTmFtZT1cIm1mcC1cIit0LGkmJihyLmlubmVySFRNTD1pKSxvP24mJm4uYXBwZW5kQ2hpbGQocik6KHI9ZShyKSxuJiZyLmFwcGVuZFRvKG4pKSxyfSx1PWZ1bmN0aW9uKG4saSl7dC5ldi50cmlnZ2VySGFuZGxlcihcIm1mcFwiK24saSksdC5zdC5jYWxsYmFja3MmJihuPW4uY2hhckF0KDApLnRvTG93ZXJDYXNlKCkrbi5zbGljZSgxKSx0LnN0LmNhbGxiYWNrc1tuXSYmdC5zdC5jYWxsYmFja3Nbbl0uYXBwbHkodCxlLmlzQXJyYXkoaSk/aTpbaV0pKX0sZj1mdW5jdGlvbihuKXtyZXR1cm4gbj09PWEmJnQuY3VyclRlbXBsYXRlLmNsb3NlQnRufHwodC5jdXJyVGVtcGxhdGUuY2xvc2VCdG49ZSh0LnN0LmNsb3NlTWFya3VwLnJlcGxhY2UoXCIldGl0bGUlXCIsdC5zdC50Q2xvc2UpKSxhPW4pLHQuY3VyclRlbXBsYXRlLmNsb3NlQnRufSxtPWZ1bmN0aW9uKCl7ZS5tYWduaWZpY1BvcHVwLmluc3RhbmNlfHwodD1uZXcgcyx0LmluaXQoKSxlLm1hZ25pZmljUG9wdXAuaW5zdGFuY2U9dCl9LGc9ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKS5zdHlsZSx0PVtcIm1zXCIsXCJPXCIsXCJNb3pcIixcIldlYmtpdFwiXTtpZih2b2lkIDAhPT1lLnRyYW5zaXRpb24pcmV0dXJuITA7Zm9yKDt0Lmxlbmd0aDspaWYodC5wb3AoKStcIlRyYW5zaXRpb25cImluIGUpcmV0dXJuITA7cmV0dXJuITF9O3MucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzLGluaXQ6ZnVuY3Rpb24oKXt2YXIgbj1uYXZpZ2F0b3IuYXBwVmVyc2lvbjt0LmlzTG93SUU9dC5pc0lFOD1kb2N1bWVudC5hbGwmJiFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLHQuaXNBbmRyb2lkPS9hbmRyb2lkL2dpLnRlc3QobiksdC5pc0lPUz0vaXBob25lfGlwYWR8aXBvZC9naS50ZXN0KG4pLHQuc3VwcG9ydHNUcmFuc2l0aW9uPWcoKSx0LnByb2JhYmx5TW9iaWxlPXQuaXNBbmRyb2lkfHx0LmlzSU9TfHwvKE9wZXJhIE1pbmkpfEtpbmRsZXx3ZWJPU3xCbGFja0JlcnJ5fChPcGVyYSBNb2JpKXwoV2luZG93cyBQaG9uZSl8SUVNb2JpbGUvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGk9ZShkb2N1bWVudCksdC5wb3B1cHNDYWNoZT17fX0sb3BlbjpmdW5jdGlvbihuKXt2YXIgbztpZighMT09PW4uaXNPYmope3QuaXRlbXM9bi5pdGVtcy50b0FycmF5KCksdC5pbmRleD0wO3ZhciBhLHM9bi5pdGVtcztmb3Iobz0wO288cy5sZW5ndGg7bysrKWlmKGE9c1tvXSxhLnBhcnNlZCYmKGE9YS5lbFswXSksYT09PW4uZWxbMF0pe3QuaW5kZXg9bzticmVha319ZWxzZSB0Lml0ZW1zPWUuaXNBcnJheShuLml0ZW1zKT9uLml0ZW1zOltuLml0ZW1zXSx0LmluZGV4PW4uaW5kZXh8fDA7aWYodC5pc09wZW4pcmV0dXJuIHZvaWQgdC51cGRhdGVJdGVtSFRNTCgpO3QudHlwZXM9W10scj1cIlwiLG4ubWFpbkVsJiZuLm1haW5FbC5sZW5ndGg/dC5ldj1uLm1haW5FbC5lcSgwKTp0LmV2PWksbi5rZXk/KHQucG9wdXBzQ2FjaGVbbi5rZXldfHwodC5wb3B1cHNDYWNoZVtuLmtleV09e30pLHQuY3VyclRlbXBsYXRlPXQucG9wdXBzQ2FjaGVbbi5rZXldKTp0LmN1cnJUZW1wbGF0ZT17fSx0LnN0PWUuZXh0ZW5kKCEwLHt9LGUubWFnbmlmaWNQb3B1cC5kZWZhdWx0cyxuKSx0LmZpeGVkQ29udGVudFBvcz1cImF1dG9cIj09PXQuc3QuZml4ZWRDb250ZW50UG9zPyF0LnByb2JhYmx5TW9iaWxlOnQuc3QuZml4ZWRDb250ZW50UG9zLHQuc3QubW9kYWwmJih0LnN0LmNsb3NlT25Db250ZW50Q2xpY2s9ITEsdC5zdC5jbG9zZU9uQmdDbGljaz0hMSx0LnN0LnNob3dDbG9zZUJ0bj0hMSx0LnN0LmVuYWJsZUVzY2FwZUtleT0hMSksdC5iZ092ZXJsYXl8fCh0LmJnT3ZlcmxheT1wKFwiYmdcIikub24oXCJjbGljay5tZnBcIixmdW5jdGlvbigpe3QuY2xvc2UoKX0pLHQud3JhcD1wKFwid3JhcFwiKS5hdHRyKFwidGFiaW5kZXhcIiwtMSkub24oXCJjbGljay5tZnBcIixmdW5jdGlvbihlKXt0Ll9jaGVja0lmQ2xvc2UoZS50YXJnZXQpJiZ0LmNsb3NlKCl9KSx0LmNvbnRhaW5lcj1wKFwiY29udGFpbmVyXCIsdC53cmFwKSksdC5jb250ZW50Q29udGFpbmVyPXAoXCJjb250ZW50XCIpLHQuc3QucHJlbG9hZGVyJiYodC5wcmVsb2FkZXI9cChcInByZWxvYWRlclwiLHQuY29udGFpbmVyLHQuc3QudExvYWRpbmcpKTt2YXIgbD1lLm1hZ25pZmljUG9wdXAubW9kdWxlcztmb3Iobz0wO288bC5sZW5ndGg7bysrKXt2YXIgbT1sW29dO209bS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSttLnNsaWNlKDEpLHRbXCJpbml0XCIrbV0uY2FsbCh0KX11KFwiQmVmb3JlT3BlblwiKSx0LnN0LnNob3dDbG9zZUJ0biYmKHQuc3QuY2xvc2VCdG5JbnNpZGU/KGQoXCJNYXJrdXBQYXJzZVwiLGZ1bmN0aW9uKGUsdCxuLGkpe24uY2xvc2VfcmVwbGFjZVdpdGg9ZihpLnR5cGUpfSkscis9XCIgbWZwLWNsb3NlLWJ0bi1pblwiKTp0LndyYXAuYXBwZW5kKGYoKSkpLHQuc3QuYWxpZ25Ub3AmJihyKz1cIiBtZnAtYWxpZ24tdG9wXCIpLHQuZml4ZWRDb250ZW50UG9zP3Qud3JhcC5jc3Moe292ZXJmbG93OnQuc3Qub3ZlcmZsb3dZLG92ZXJmbG93WDpcImhpZGRlblwiLG92ZXJmbG93WTp0LnN0Lm92ZXJmbG93WX0pOnQud3JhcC5jc3Moe3RvcDpjLnNjcm9sbFRvcCgpLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLCghMT09PXQuc3QuZml4ZWRCZ1Bvc3x8XCJhdXRvXCI9PT10LnN0LmZpeGVkQmdQb3MmJiF0LmZpeGVkQ29udGVudFBvcykmJnQuYmdPdmVybGF5LmNzcyh7aGVpZ2h0OmkuaGVpZ2h0KCkscG9zaXRpb246XCJhYnNvbHV0ZVwifSksdC5zdC5lbmFibGVFc2NhcGVLZXkmJmkub24oXCJrZXl1cC5tZnBcIixmdW5jdGlvbihlKXsyNz09PWUua2V5Q29kZSYmdC5jbG9zZSgpfSksYy5vbihcInJlc2l6ZS5tZnBcIixmdW5jdGlvbigpe3QudXBkYXRlU2l6ZSgpfSksdC5zdC5jbG9zZU9uQ29udGVudENsaWNrfHwocis9XCIgbWZwLWF1dG8tY3Vyc29yXCIpLHImJnQud3JhcC5hZGRDbGFzcyhyKTt2YXIgZz10LndIPWMuaGVpZ2h0KCksdj17fTtpZih0LmZpeGVkQ29udGVudFBvcyYmdC5faGFzU2Nyb2xsQmFyKGcpKXt2YXIgaD10Ll9nZXRTY3JvbGxiYXJTaXplKCk7aCYmKHYubWFyZ2luUmlnaHQ9aCl9dC5maXhlZENvbnRlbnRQb3MmJih0LmlzSUU3P2UoXCJib2R5LCBodG1sXCIpLmNzcyhcIm92ZXJmbG93XCIsXCJoaWRkZW5cIik6di5vdmVyZmxvdz1cImhpZGRlblwiKTt2YXIgQz10LnN0Lm1haW5DbGFzcztyZXR1cm4gdC5pc0lFNyYmKEMrPVwiIG1mcC1pZTdcIiksQyYmdC5fYWRkQ2xhc3NUb01GUChDKSx0LnVwZGF0ZUl0ZW1IVE1MKCksdShcIkJ1aWxkQ29udHJvbHNcIiksZShcImh0bWxcIikuY3NzKHYpLHQuYmdPdmVybGF5LmFkZCh0LndyYXApLnByZXBlbmRUbyh0LnN0LnByZXBlbmRUb3x8ZShkb2N1bWVudC5ib2R5KSksdC5fbGFzdEZvY3VzZWRFbD1kb2N1bWVudC5hY3RpdmVFbGVtZW50LHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmNvbnRlbnQ/KHQuX2FkZENsYXNzVG9NRlAoXCJtZnAtcmVhZHlcIiksdC5fc2V0Rm9jdXMoKSk6dC5iZ092ZXJsYXkuYWRkQ2xhc3MoXCJtZnAtcmVhZHlcIiksaS5vbihcImZvY3VzaW4ubWZwXCIsdC5fb25Gb2N1c0luKX0sMTYpLHQuaXNPcGVuPSEwLHQudXBkYXRlU2l6ZShnKSx1KFwiT3BlblwiKSxufSxjbG9zZTpmdW5jdGlvbigpe3QuaXNPcGVuJiYodShcIkJlZm9yZUNsb3NlXCIpLHQuaXNPcGVuPSExLHQuc3QucmVtb3ZhbERlbGF5JiYhdC5pc0xvd0lFJiZ0LnN1cHBvcnRzVHJhbnNpdGlvbj8odC5fYWRkQ2xhc3NUb01GUChcIm1mcC1yZW1vdmluZ1wiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5fY2xvc2UoKX0sdC5zdC5yZW1vdmFsRGVsYXkpKTp0Ll9jbG9zZSgpKX0sX2Nsb3NlOmZ1bmN0aW9uKCl7dShcIkNsb3NlXCIpO3ZhciBuPVwibWZwLXJlbW92aW5nIG1mcC1yZWFkeSBcIjtpZih0LmJnT3ZlcmxheS5kZXRhY2goKSx0LndyYXAuZGV0YWNoKCksdC5jb250YWluZXIuZW1wdHkoKSx0LnN0Lm1haW5DbGFzcyYmKG4rPXQuc3QubWFpbkNsYXNzK1wiIFwiKSx0Ll9yZW1vdmVDbGFzc0Zyb21NRlAobiksdC5maXhlZENvbnRlbnRQb3Mpe3ZhciBvPXttYXJnaW5SaWdodDpcIlwifTt0LmlzSUU3P2UoXCJib2R5LCBodG1sXCIpLmNzcyhcIm92ZXJmbG93XCIsXCJcIik6by5vdmVyZmxvdz1cIlwiLGUoXCJodG1sXCIpLmNzcyhvKX1pLm9mZihcImtleXVwLm1mcCBmb2N1c2luLm1mcFwiKSx0LmV2Lm9mZihcIi5tZnBcIiksdC53cmFwLmF0dHIoXCJjbGFzc1wiLFwibWZwLXdyYXBcIikucmVtb3ZlQXR0cihcInN0eWxlXCIpLHQuYmdPdmVybGF5LmF0dHIoXCJjbGFzc1wiLFwibWZwLWJnXCIpLHQuY29udGFpbmVyLmF0dHIoXCJjbGFzc1wiLFwibWZwLWNvbnRhaW5lclwiKSwhdC5zdC5zaG93Q2xvc2VCdG58fHQuc3QuY2xvc2VCdG5JbnNpZGUmJiEwIT09dC5jdXJyVGVtcGxhdGVbdC5jdXJySXRlbS50eXBlXXx8dC5jdXJyVGVtcGxhdGUuY2xvc2VCdG4mJnQuY3VyclRlbXBsYXRlLmNsb3NlQnRuLmRldGFjaCgpLHQuc3QuYXV0b0ZvY3VzTGFzdCYmdC5fbGFzdEZvY3VzZWRFbCYmZSh0Ll9sYXN0Rm9jdXNlZEVsKS5mb2N1cygpLHQuY3Vyckl0ZW09bnVsbCx0LmNvbnRlbnQ9bnVsbCx0LmN1cnJUZW1wbGF0ZT1udWxsLHQucHJldkhlaWdodD0wLHUoXCJBZnRlckNsb3NlXCIpfSx1cGRhdGVTaXplOmZ1bmN0aW9uKGUpe2lmKHQuaXNJT1Mpe3ZhciBuPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aC93aW5kb3cuaW5uZXJXaWR0aCxpPXdpbmRvdy5pbm5lckhlaWdodCpuO3Qud3JhcC5jc3MoXCJoZWlnaHRcIixpKSx0LndIPWl9ZWxzZSB0LndIPWV8fGMuaGVpZ2h0KCk7dC5maXhlZENvbnRlbnRQb3N8fHQud3JhcC5jc3MoXCJoZWlnaHRcIix0LndIKSx1KFwiUmVzaXplXCIpfSx1cGRhdGVJdGVtSFRNTDpmdW5jdGlvbigpe3ZhciBuPXQuaXRlbXNbdC5pbmRleF07dC5jb250ZW50Q29udGFpbmVyLmRldGFjaCgpLHQuY29udGVudCYmdC5jb250ZW50LmRldGFjaCgpLG4ucGFyc2VkfHwobj10LnBhcnNlRWwodC5pbmRleCkpO3ZhciBpPW4udHlwZTtpZih1KFwiQmVmb3JlQ2hhbmdlXCIsW3QuY3Vyckl0ZW0/dC5jdXJySXRlbS50eXBlOlwiXCIsaV0pLHQuY3Vyckl0ZW09biwhdC5jdXJyVGVtcGxhdGVbaV0pe3ZhciByPSEhdC5zdFtpXSYmdC5zdFtpXS5tYXJrdXA7dShcIkZpcnN0TWFya3VwUGFyc2VcIixyKSx0LmN1cnJUZW1wbGF0ZVtpXT0hcnx8ZShyKX1vJiZvIT09bi50eXBlJiZ0LmNvbnRhaW5lci5yZW1vdmVDbGFzcyhcIm1mcC1cIitvK1wiLWhvbGRlclwiKTt2YXIgYT10W1wiZ2V0XCIraS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStpLnNsaWNlKDEpXShuLHQuY3VyclRlbXBsYXRlW2ldKTt0LmFwcGVuZENvbnRlbnQoYSxpKSxuLnByZWxvYWRlZD0hMCx1KFwiQ2hhbmdlXCIsbiksbz1uLnR5cGUsdC5jb250YWluZXIucHJlcGVuZCh0LmNvbnRlbnRDb250YWluZXIpLHUoXCJBZnRlckNoYW5nZVwiKX0sYXBwZW5kQ29udGVudDpmdW5jdGlvbihlLG4pe3QuY29udGVudD1lLGU/dC5zdC5zaG93Q2xvc2VCdG4mJnQuc3QuY2xvc2VCdG5JbnNpZGUmJiEwPT09dC5jdXJyVGVtcGxhdGVbbl0/dC5jb250ZW50LmZpbmQoXCIubWZwLWNsb3NlXCIpLmxlbmd0aHx8dC5jb250ZW50LmFwcGVuZChmKCkpOnQuY29udGVudD1lOnQuY29udGVudD1cIlwiLHUoXCJCZWZvcmVBcHBlbmRcIiksdC5jb250YWluZXIuYWRkQ2xhc3MoXCJtZnAtXCIrbitcIi1ob2xkZXJcIiksdC5jb250ZW50Q29udGFpbmVyLmFwcGVuZCh0LmNvbnRlbnQpfSxwYXJzZUVsOmZ1bmN0aW9uKG4pe3ZhciBpLG89dC5pdGVtc1tuXTtpZihvLnRhZ05hbWU/bz17ZWw6ZShvKX06KGk9by50eXBlLG89e2RhdGE6byxzcmM6by5zcmN9KSxvLmVsKXtmb3IodmFyIHI9dC50eXBlcyxhPTA7YTxyLmxlbmd0aDthKyspaWYoby5lbC5oYXNDbGFzcyhcIm1mcC1cIityW2FdKSl7aT1yW2FdO2JyZWFrfW8uc3JjPW8uZWwuYXR0cihcImRhdGEtbWZwLXNyY1wiKSxvLnNyY3x8KG8uc3JjPW8uZWwuYXR0cihcImhyZWZcIikpfXJldHVybiBvLnR5cGU9aXx8dC5zdC50eXBlfHxcImlubGluZVwiLG8uaW5kZXg9bixvLnBhcnNlZD0hMCx0Lml0ZW1zW25dPW8sdShcIkVsZW1lbnRQYXJzZVwiLG8pLHQuaXRlbXNbbl19LGFkZEdyb3VwOmZ1bmN0aW9uKGUsbil7dmFyIGk9ZnVuY3Rpb24oaSl7aS5tZnBFbD10aGlzLHQuX29wZW5DbGljayhpLGUsbil9O258fChuPXt9KTt2YXIgbz1cImNsaWNrLm1hZ25pZmljUG9wdXBcIjtuLm1haW5FbD1lLG4uaXRlbXM/KG4uaXNPYmo9ITAsZS5vZmYobykub24obyxpKSk6KG4uaXNPYmo9ITEsbi5kZWxlZ2F0ZT9lLm9mZihvKS5vbihvLG4uZGVsZWdhdGUsaSk6KG4uaXRlbXM9ZSxlLm9mZihvKS5vbihvLGkpKSl9LF9vcGVuQ2xpY2s6ZnVuY3Rpb24obixpLG8pe2lmKCh2b2lkIDAhPT1vLm1pZENsaWNrP28ubWlkQ2xpY2s6ZS5tYWduaWZpY1BvcHVwLmRlZmF1bHRzLm1pZENsaWNrKXx8ISgyPT09bi53aGljaHx8bi5jdHJsS2V5fHxuLm1ldGFLZXl8fG4uYWx0S2V5fHxuLnNoaWZ0S2V5KSl7dmFyIHI9dm9pZCAwIT09by5kaXNhYmxlT24/by5kaXNhYmxlT246ZS5tYWduaWZpY1BvcHVwLmRlZmF1bHRzLmRpc2FibGVPbjtpZihyKWlmKGUuaXNGdW5jdGlvbihyKSl7aWYoIXIuY2FsbCh0KSlyZXR1cm4hMH1lbHNlIGlmKGMud2lkdGgoKTxyKXJldHVybiEwO24udHlwZSYmKG4ucHJldmVudERlZmF1bHQoKSx0LmlzT3BlbiYmbi5zdG9wUHJvcGFnYXRpb24oKSksby5lbD1lKG4ubWZwRWwpLG8uZGVsZWdhdGUmJihvLml0ZW1zPWkuZmluZChvLmRlbGVnYXRlKSksdC5vcGVuKG8pfX0sdXBkYXRlU3RhdHVzOmZ1bmN0aW9uKGUsaSl7aWYodC5wcmVsb2FkZXIpe24hPT1lJiZ0LmNvbnRhaW5lci5yZW1vdmVDbGFzcyhcIm1mcC1zLVwiK24pLGl8fFwibG9hZGluZ1wiIT09ZXx8KGk9dC5zdC50TG9hZGluZyk7dmFyIG89e3N0YXR1czplLHRleHQ6aX07dShcIlVwZGF0ZVN0YXR1c1wiLG8pLGU9by5zdGF0dXMsaT1vLnRleHQsdC5wcmVsb2FkZXIuaHRtbChpKSx0LnByZWxvYWRlci5maW5kKFwiYVwiKS5vbihcImNsaWNrXCIsZnVuY3Rpb24oZSl7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX0pLHQuY29udGFpbmVyLmFkZENsYXNzKFwibWZwLXMtXCIrZSksbj1lfX0sX2NoZWNrSWZDbG9zZTpmdW5jdGlvbihuKXtpZighZShuKS5oYXNDbGFzcyhcIm1mcC1wcmV2ZW50LWNsb3NlXCIpKXt2YXIgaT10LnN0LmNsb3NlT25Db250ZW50Q2xpY2ssbz10LnN0LmNsb3NlT25CZ0NsaWNrO2lmKGkmJm8pcmV0dXJuITA7aWYoIXQuY29udGVudHx8ZShuKS5oYXNDbGFzcyhcIm1mcC1jbG9zZVwiKXx8dC5wcmVsb2FkZXImJm49PT10LnByZWxvYWRlclswXSlyZXR1cm4hMDtpZihuPT09dC5jb250ZW50WzBdfHxlLmNvbnRhaW5zKHQuY29udGVudFswXSxuKSl7aWYoaSlyZXR1cm4hMH1lbHNlIGlmKG8mJmUuY29udGFpbnMoZG9jdW1lbnQsbikpcmV0dXJuITA7cmV0dXJuITF9fSxfYWRkQ2xhc3NUb01GUDpmdW5jdGlvbihlKXt0LmJnT3ZlcmxheS5hZGRDbGFzcyhlKSx0LndyYXAuYWRkQ2xhc3MoZSl9LF9yZW1vdmVDbGFzc0Zyb21NRlA6ZnVuY3Rpb24oZSl7dGhpcy5iZ092ZXJsYXkucmVtb3ZlQ2xhc3MoZSksdC53cmFwLnJlbW92ZUNsYXNzKGUpfSxfaGFzU2Nyb2xsQmFyOmZ1bmN0aW9uKGUpe3JldHVybih0LmlzSUU3P2kuaGVpZ2h0KCk6ZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpPihlfHxjLmhlaWdodCgpKX0sX3NldEZvY3VzOmZ1bmN0aW9uKCl7KHQuc3QuZm9jdXM/dC5jb250ZW50LmZpbmQodC5zdC5mb2N1cykuZXEoMCk6dC53cmFwKS5mb2N1cygpfSxfb25Gb2N1c0luOmZ1bmN0aW9uKG4pe2lmKG4udGFyZ2V0IT09dC53cmFwWzBdJiYhZS5jb250YWlucyh0LndyYXBbMF0sbi50YXJnZXQpKXJldHVybiB0Ll9zZXRGb2N1cygpLCExfSxfcGFyc2VNYXJrdXA6ZnVuY3Rpb24odCxuLGkpe3ZhciBvO2kuZGF0YSYmKG49ZS5leHRlbmQoaS5kYXRhLG4pKSx1KFwiTWFya3VwUGFyc2VcIixbdCxuLGldKSxlLmVhY2gobixmdW5jdGlvbihuLGkpe2lmKHZvaWQgMD09PWl8fCExPT09aSlyZXR1cm4hMDtpZihvPW4uc3BsaXQoXCJfXCIpLG8ubGVuZ3RoPjEpe3ZhciByPXQuZmluZChcIi5tZnAtXCIrb1swXSk7aWYoci5sZW5ndGg+MCl7dmFyIGE9b1sxXTtcInJlcGxhY2VXaXRoXCI9PT1hP3JbMF0hPT1pWzBdJiZyLnJlcGxhY2VXaXRoKGkpOlwiaW1nXCI9PT1hP3IuaXMoXCJpbWdcIik/ci5hdHRyKFwic3JjXCIsaSk6ci5yZXBsYWNlV2l0aChlKFwiPGltZz5cIikuYXR0cihcInNyY1wiLGkpLmF0dHIoXCJjbGFzc1wiLHIuYXR0cihcImNsYXNzXCIpKSk6ci5hdHRyKG9bMV0saSl9fWVsc2UgdC5maW5kKFwiLm1mcC1cIituKS5odG1sKGkpfSl9LF9nZXRTY3JvbGxiYXJTaXplOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09dC5zY3JvbGxiYXJTaXplKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2Uuc3R5bGUuY3NzVGV4dD1cIndpZHRoOiA5OXB4OyBoZWlnaHQ6IDk5cHg7IG92ZXJmbG93OiBzY3JvbGw7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtOTk5OXB4O1wiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksdC5zY3JvbGxiYXJTaXplPWUub2Zmc2V0V2lkdGgtZS5jbGllbnRXaWR0aCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGUpfXJldHVybiB0LnNjcm9sbGJhclNpemV9fSxlLm1hZ25pZmljUG9wdXA9e2luc3RhbmNlOm51bGwscHJvdG86cy5wcm90b3R5cGUsbW9kdWxlczpbXSxvcGVuOmZ1bmN0aW9uKHQsbil7cmV0dXJuIG0oKSx0PXQ/ZS5leHRlbmQoITAse30sdCk6e30sdC5pc09iaj0hMCx0LmluZGV4PW58fDAsdGhpcy5pbnN0YW5jZS5vcGVuKHQpfSxjbG9zZTpmdW5jdGlvbigpe3JldHVybiBlLm1hZ25pZmljUG9wdXAuaW5zdGFuY2UmJmUubWFnbmlmaWNQb3B1cC5pbnN0YW5jZS5jbG9zZSgpfSxyZWdpc3Rlck1vZHVsZTpmdW5jdGlvbih0LG4pe24ub3B0aW9ucyYmKGUubWFnbmlmaWNQb3B1cC5kZWZhdWx0c1t0XT1uLm9wdGlvbnMpLGUuZXh0ZW5kKHRoaXMucHJvdG8sbi5wcm90byksdGhpcy5tb2R1bGVzLnB1c2godCl9LGRlZmF1bHRzOntkaXNhYmxlT246MCxrZXk6bnVsbCxtaWRDbGljazohMSxtYWluQ2xhc3M6XCJcIixwcmVsb2FkZXI6ITAsZm9jdXM6XCJcIixjbG9zZU9uQ29udGVudENsaWNrOiExLGNsb3NlT25CZ0NsaWNrOiEwLGNsb3NlQnRuSW5zaWRlOiEwLHNob3dDbG9zZUJ0bjohMCxlbmFibGVFc2NhcGVLZXk6ITAsbW9kYWw6ITEsYWxpZ25Ub3A6ITEscmVtb3ZhbERlbGF5OjAscHJlcGVuZFRvOm51bGwsZml4ZWRDb250ZW50UG9zOlwiYXV0b1wiLGZpeGVkQmdQb3M6XCJhdXRvXCIsb3ZlcmZsb3dZOlwiYXV0b1wiLGNsb3NlTWFya3VwOic8YnV0dG9uIHRpdGxlPVwiJXRpdGxlJVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1mcC1jbG9zZVwiPiYjMjE1OzwvYnV0dG9uPicsdENsb3NlOlwiQ2xvc2UgKEVzYylcIix0TG9hZGluZzpcIkxvYWRpbmcuLi5cIixhdXRvRm9jdXNMYXN0OiEwfX0sZS5mbi5tYWduaWZpY1BvcHVwPWZ1bmN0aW9uKG4pe20oKTt2YXIgaT1lKHRoaXMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKWlmKFwib3BlblwiPT09bil7dmFyIG8scj1sP2kuZGF0YShcIm1hZ25pZmljUG9wdXBcIik6aVswXS5tYWduaWZpY1BvcHVwLGE9cGFyc2VJbnQoYXJndW1lbnRzWzFdLDEwKXx8MDtyLml0ZW1zP289ci5pdGVtc1thXToobz1pLHIuZGVsZWdhdGUmJihvPW8uZmluZChyLmRlbGVnYXRlKSksbz1vLmVxKGEpKSx0Ll9vcGVuQ2xpY2soe21mcEVsOm99LGkscil9ZWxzZSB0LmlzT3BlbiYmdFtuXS5hcHBseSh0LEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7ZWxzZSBuPWUuZXh0ZW5kKCEwLHt9LG4pLGw/aS5kYXRhKFwibWFnbmlmaWNQb3B1cFwiLG4pOmlbMF0ubWFnbmlmaWNQb3B1cD1uLHQuYWRkR3JvdXAoaSxuKTtyZXR1cm4gaX07dmFyIHYsaCxDLHk9ZnVuY3Rpb24oKXtDJiYoaC5hZnRlcihDLmFkZENsYXNzKHYpKS5kZXRhY2goKSxDPW51bGwpfTtlLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJpbmxpbmVcIix7b3B0aW9uczp7aGlkZGVuQ2xhc3M6XCJoaWRlXCIsbWFya3VwOlwiXCIsdE5vdEZvdW5kOlwiQ29udGVudCBub3QgZm91bmRcIn0scHJvdG86e2luaXRJbmxpbmU6ZnVuY3Rpb24oKXt0LnR5cGVzLnB1c2goXCJpbmxpbmVcIiksZChcIkNsb3NlLmlubGluZVwiLGZ1bmN0aW9uKCl7eSgpfSl9LGdldElubGluZTpmdW5jdGlvbihuLGkpe2lmKHkoKSxuLnNyYyl7dmFyIG89dC5zdC5pbmxpbmUscj1lKG4uc3JjKTtpZihyLmxlbmd0aCl7dmFyIGE9clswXS5wYXJlbnROb2RlO2EmJmEudGFnTmFtZSYmKGh8fCh2PW8uaGlkZGVuQ2xhc3MsaD1wKHYpLHY9XCJtZnAtXCIrdiksQz1yLmFmdGVyKGgpLmRldGFjaCgpLnJlbW92ZUNsYXNzKHYpKSx0LnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpfWVsc2UgdC51cGRhdGVTdGF0dXMoXCJlcnJvclwiLG8udE5vdEZvdW5kKSxyPWUoXCI8ZGl2PlwiKTtyZXR1cm4gbi5pbmxpbmVFbGVtZW50PXIscn1yZXR1cm4gdC51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKSx0Ll9wYXJzZU1hcmt1cChpLHt9LG4pLGl9fX0pO3ZhciB3LGI9ZnVuY3Rpb24oKXt3JiZlKGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKHcpfSxJPWZ1bmN0aW9uKCl7YigpLHQucmVxJiZ0LnJlcS5hYm9ydCgpfTtlLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJhamF4XCIse29wdGlvbnM6e3NldHRpbmdzOm51bGwsY3Vyc29yOlwibWZwLWFqYXgtY3VyXCIsdEVycm9yOic8YSBocmVmPVwiJXVybCVcIj5UaGUgY29udGVudDwvYT4gY291bGQgbm90IGJlIGxvYWRlZC4nfSxwcm90bzp7aW5pdEFqYXg6ZnVuY3Rpb24oKXt0LnR5cGVzLnB1c2goXCJhamF4XCIpLHc9dC5zdC5hamF4LmN1cnNvcixkKFwiQ2xvc2UuYWpheFwiLEkpLGQoXCJCZWZvcmVDaGFuZ2UuYWpheFwiLEkpfSxnZXRBamF4OmZ1bmN0aW9uKG4pe3cmJmUoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3ModyksdC51cGRhdGVTdGF0dXMoXCJsb2FkaW5nXCIpO3ZhciBpPWUuZXh0ZW5kKHt1cmw6bi5zcmMsc3VjY2VzczpmdW5jdGlvbihpLG8scil7dmFyIGE9e2RhdGE6aSx4aHI6cn07dShcIlBhcnNlQWpheFwiLGEpLHQuYXBwZW5kQ29udGVudChlKGEuZGF0YSksXCJhamF4XCIpLG4uZmluaXNoZWQ9ITAsYigpLHQuX3NldEZvY3VzKCksc2V0VGltZW91dChmdW5jdGlvbigpe3Qud3JhcC5hZGRDbGFzcyhcIm1mcC1yZWFkeVwiKX0sMTYpLHQudXBkYXRlU3RhdHVzKFwicmVhZHlcIiksdShcIkFqYXhDb250ZW50QWRkZWRcIil9LGVycm9yOmZ1bmN0aW9uKCl7YigpLG4uZmluaXNoZWQ9bi5sb2FkRXJyb3I9ITAsdC51cGRhdGVTdGF0dXMoXCJlcnJvclwiLHQuc3QuYWpheC50RXJyb3IucmVwbGFjZShcIiV1cmwlXCIsbi5zcmMpKX19LHQuc3QuYWpheC5zZXR0aW5ncyk7cmV0dXJuIHQucmVxPWUuYWpheChpKSxcIlwifX19KTt2YXIgeCxrPWZ1bmN0aW9uKG4pe2lmKG4uZGF0YSYmdm9pZCAwIT09bi5kYXRhLnRpdGxlKXJldHVybiBuLmRhdGEudGl0bGU7dmFyIGk9dC5zdC5pbWFnZS50aXRsZVNyYztpZihpKXtpZihlLmlzRnVuY3Rpb24oaSkpcmV0dXJuIGkuY2FsbCh0LG4pO2lmKG4uZWwpcmV0dXJuIG4uZWwuYXR0cihpKXx8XCJcIn1yZXR1cm5cIlwifTtlLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJpbWFnZVwiLHtvcHRpb25zOnttYXJrdXA6JzxkaXYgY2xhc3M9XCJtZnAtZmlndXJlXCI+PGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PjxmaWd1cmU+PGRpdiBjbGFzcz1cIm1mcC1pbWdcIj48L2Rpdj48ZmlnY2FwdGlvbj48ZGl2IGNsYXNzPVwibWZwLWJvdHRvbS1iYXJcIj48ZGl2IGNsYXNzPVwibWZwLXRpdGxlXCI+PC9kaXY+PGRpdiBjbGFzcz1cIm1mcC1jb3VudGVyXCI+PC9kaXY+PC9kaXY+PC9maWdjYXB0aW9uPjwvZmlndXJlPjwvZGl2PicsY3Vyc29yOlwibWZwLXpvb20tb3V0LWN1clwiLHRpdGxlU3JjOlwidGl0bGVcIix2ZXJ0aWNhbEZpdDohMCx0RXJyb3I6JzxhIGhyZWY9XCIldXJsJVwiPlRoZSBpbWFnZTwvYT4gY291bGQgbm90IGJlIGxvYWRlZC4nfSxwcm90bzp7aW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIG49dC5zdC5pbWFnZSxpPVwiLmltYWdlXCI7dC50eXBlcy5wdXNoKFwiaW1hZ2VcIiksZChcIk9wZW5cIitpLGZ1bmN0aW9uKCl7XCJpbWFnZVwiPT09dC5jdXJySXRlbS50eXBlJiZuLmN1cnNvciYmZShkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhuLmN1cnNvcil9KSxkKFwiQ2xvc2VcIitpLGZ1bmN0aW9uKCl7bi5jdXJzb3ImJmUoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3Mobi5jdXJzb3IpLGMub2ZmKFwicmVzaXplLm1mcFwiKX0pLGQoXCJSZXNpemVcIitpLHQucmVzaXplSW1hZ2UpLHQuaXNMb3dJRSYmZChcIkFmdGVyQ2hhbmdlXCIsdC5yZXNpemVJbWFnZSl9LHJlc2l6ZUltYWdlOmZ1bmN0aW9uKCl7dmFyIGU9dC5jdXJySXRlbTtpZihlJiZlLmltZyYmdC5zdC5pbWFnZS52ZXJ0aWNhbEZpdCl7dmFyIG49MDt0LmlzTG93SUUmJihuPXBhcnNlSW50KGUuaW1nLmNzcyhcInBhZGRpbmctdG9wXCIpLDEwKStwYXJzZUludChlLmltZy5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwxMCkpLGUuaW1nLmNzcyhcIm1heC1oZWlnaHRcIix0LndILW4pfX0sX29uSW1hZ2VIYXNTaXplOmZ1bmN0aW9uKGUpe2UuaW1nJiYoZS5oYXNTaXplPSEwLHgmJmNsZWFySW50ZXJ2YWwoeCksZS5pc0NoZWNraW5nSW1nU2l6ZT0hMSx1KFwiSW1hZ2VIYXNTaXplXCIsZSksZS5pbWdIaWRkZW4mJih0LmNvbnRlbnQmJnQuY29udGVudC5yZW1vdmVDbGFzcyhcIm1mcC1sb2FkaW5nXCIpLGUuaW1nSGlkZGVuPSExKSl9LGZpbmRJbWFnZVNpemU6ZnVuY3Rpb24oZSl7dmFyIG49MCxpPWUuaW1nWzBdLG89ZnVuY3Rpb24ocil7eCYmY2xlYXJJbnRlcnZhbCh4KSx4PXNldEludGVydmFsKGZ1bmN0aW9uKCl7aWYoaS5uYXR1cmFsV2lkdGg+MClyZXR1cm4gdm9pZCB0Ll9vbkltYWdlSGFzU2l6ZShlKTtuPjIwMCYmY2xlYXJJbnRlcnZhbCh4KSxuKyssMz09PW4/bygxMCk6NDA9PT1uP28oNTApOjEwMD09PW4mJm8oNTAwKX0scil9O28oMSl9LGdldEltYWdlOmZ1bmN0aW9uKG4saSl7dmFyIG89MCxyPWZ1bmN0aW9uKCl7biYmKG4uaW1nWzBdLmNvbXBsZXRlPyhuLmltZy5vZmYoXCIubWZwbG9hZGVyXCIpLG49PT10LmN1cnJJdGVtJiYodC5fb25JbWFnZUhhc1NpemUobiksdC51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKSksbi5oYXNTaXplPSEwLG4ubG9hZGVkPSEwLHUoXCJJbWFnZUxvYWRDb21wbGV0ZVwiKSk6KG8rKyxvPDIwMD9zZXRUaW1lb3V0KHIsMTAwKTphKCkpKX0sYT1mdW5jdGlvbigpe24mJihuLmltZy5vZmYoXCIubWZwbG9hZGVyXCIpLG49PT10LmN1cnJJdGVtJiYodC5fb25JbWFnZUhhc1NpemUobiksdC51cGRhdGVTdGF0dXMoXCJlcnJvclwiLHMudEVycm9yLnJlcGxhY2UoXCIldXJsJVwiLG4uc3JjKSkpLG4uaGFzU2l6ZT0hMCxuLmxvYWRlZD0hMCxuLmxvYWRFcnJvcj0hMCl9LHM9dC5zdC5pbWFnZSxsPWkuZmluZChcIi5tZnAtaW1nXCIpO2lmKGwubGVuZ3RoKXt2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO2MuY2xhc3NOYW1lPVwibWZwLWltZ1wiLG4uZWwmJm4uZWwuZmluZChcImltZ1wiKS5sZW5ndGgmJihjLmFsdD1uLmVsLmZpbmQoXCJpbWdcIikuYXR0cihcImFsdFwiKSksbi5pbWc9ZShjKS5vbihcImxvYWQubWZwbG9hZGVyXCIscikub24oXCJlcnJvci5tZnBsb2FkZXJcIixhKSxjLnNyYz1uLnNyYyxsLmlzKFwiaW1nXCIpJiYobi5pbWc9bi5pbWcuY2xvbmUoKSksYz1uLmltZ1swXSxjLm5hdHVyYWxXaWR0aD4wP24uaGFzU2l6ZT0hMDpjLndpZHRofHwobi5oYXNTaXplPSExKX1yZXR1cm4gdC5fcGFyc2VNYXJrdXAoaSx7dGl0bGU6ayhuKSxpbWdfcmVwbGFjZVdpdGg6bi5pbWd9LG4pLHQucmVzaXplSW1hZ2UoKSxuLmhhc1NpemU/KHgmJmNsZWFySW50ZXJ2YWwoeCksbi5sb2FkRXJyb3I/KGkuYWRkQ2xhc3MoXCJtZnAtbG9hZGluZ1wiKSx0LnVwZGF0ZVN0YXR1cyhcImVycm9yXCIscy50RXJyb3IucmVwbGFjZShcIiV1cmwlXCIsbi5zcmMpKSk6KGkucmVtb3ZlQ2xhc3MoXCJtZnAtbG9hZGluZ1wiKSx0LnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpKSxpKToodC51cGRhdGVTdGF0dXMoXCJsb2FkaW5nXCIpLG4ubG9hZGluZz0hMCxuLmhhc1NpemV8fChuLmltZ0hpZGRlbj0hMCxpLmFkZENsYXNzKFwibWZwLWxvYWRpbmdcIiksdC5maW5kSW1hZ2VTaXplKG4pKSxpKX19fSk7dmFyIFQsXz1mdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT1UJiYoVD12b2lkIDAhPT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwicFwiKS5zdHlsZS5Nb3pUcmFuc2Zvcm0pLFR9O2UubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcInpvb21cIix7b3B0aW9uczp7ZW5hYmxlZDohMSxlYXNpbmc6XCJlYXNlLWluLW91dFwiLGR1cmF0aW9uOjMwMCxvcGVuZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXMoXCJpbWdcIik/ZTplLmZpbmQoXCJpbWdcIil9fSxwcm90bzp7aW5pdFpvb206ZnVuY3Rpb24oKXt2YXIgZSxuPXQuc3Quem9vbSxpPVwiLnpvb21cIjtpZihuLmVuYWJsZWQmJnQuc3VwcG9ydHNUcmFuc2l0aW9uKXt2YXIgbyxyLGE9bi5kdXJhdGlvbixzPWZ1bmN0aW9uKGUpe3ZhciB0PWUuY2xvbmUoKS5yZW1vdmVBdHRyKFwic3R5bGVcIikucmVtb3ZlQXR0cihcImNsYXNzXCIpLmFkZENsYXNzKFwibWZwLWFuaW1hdGVkLWltYWdlXCIpLGk9XCJhbGwgXCIrbi5kdXJhdGlvbi8xZTMrXCJzIFwiK24uZWFzaW5nLG89e3Bvc2l0aW9uOlwiZml4ZWRcIix6SW5kZXg6OTk5OSxsZWZ0OjAsdG9wOjAsXCItd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHlcIjpcImhpZGRlblwifSxyPVwidHJhbnNpdGlvblwiO3JldHVybiBvW1wiLXdlYmtpdC1cIityXT1vW1wiLW1vei1cIityXT1vW1wiLW8tXCIrcl09b1tyXT1pLHQuY3NzKG8pLHR9LGw9ZnVuY3Rpb24oKXt0LmNvbnRlbnQuY3NzKFwidmlzaWJpbGl0eVwiLFwidmlzaWJsZVwiKX07ZChcIkJ1aWxkQ29udHJvbHNcIitpLGZ1bmN0aW9uKCl7aWYodC5fYWxsb3dab29tKCkpe2lmKGNsZWFyVGltZW91dChvKSx0LmNvbnRlbnQuY3NzKFwidmlzaWJpbGl0eVwiLFwiaGlkZGVuXCIpLCEoZT10Ll9nZXRJdGVtVG9ab29tKCkpKXJldHVybiB2b2lkIGwoKTtyPXMoZSksci5jc3ModC5fZ2V0T2Zmc2V0KCkpLHQud3JhcC5hcHBlbmQociksbz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5jc3ModC5fZ2V0T2Zmc2V0KCEwKSksbz1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCgpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLnJlbW92ZSgpLGU9cj1udWxsLHUoXCJab29tQW5pbWF0aW9uRW5kZWRcIil9LDE2KX0sYSl9LDE2KX19KSxkKFwiQmVmb3JlQ2xvc2VcIitpLGZ1bmN0aW9uKCl7aWYodC5fYWxsb3dab29tKCkpe2lmKGNsZWFyVGltZW91dChvKSx0LnN0LnJlbW92YWxEZWxheT1hLCFlKXtpZighKGU9dC5fZ2V0SXRlbVRvWm9vbSgpKSlyZXR1cm47cj1zKGUpfXIuY3NzKHQuX2dldE9mZnNldCghMCkpLHQud3JhcC5hcHBlbmQociksdC5jb250ZW50LmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5jc3ModC5fZ2V0T2Zmc2V0KCkpfSwxNil9fSksZChcIkNsb3NlXCIraSxmdW5jdGlvbigpe3QuX2FsbG93Wm9vbSgpJiYobCgpLHImJnIucmVtb3ZlKCksZT1udWxsKX0pfX0sX2FsbG93Wm9vbTpmdW5jdGlvbigpe3JldHVyblwiaW1hZ2VcIj09PXQuY3Vyckl0ZW0udHlwZX0sX2dldEl0ZW1Ub1pvb206ZnVuY3Rpb24oKXtyZXR1cm4hIXQuY3Vyckl0ZW0uaGFzU2l6ZSYmdC5jdXJySXRlbS5pbWd9LF9nZXRPZmZzZXQ6ZnVuY3Rpb24obil7dmFyIGk7aT1uP3QuY3Vyckl0ZW0uaW1nOnQuc3Quem9vbS5vcGVuZXIodC5jdXJySXRlbS5lbHx8dC5jdXJySXRlbSk7dmFyIG89aS5vZmZzZXQoKSxyPXBhcnNlSW50KGkuY3NzKFwicGFkZGluZy10b3BcIiksMTApLGE9cGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwxMCk7by50b3AtPWUod2luZG93KS5zY3JvbGxUb3AoKS1yO3ZhciBzPXt3aWR0aDppLndpZHRoKCksaGVpZ2h0OihsP2kuaW5uZXJIZWlnaHQoKTppWzBdLm9mZnNldEhlaWdodCktYS1yfTtyZXR1cm4gXygpP3NbXCItbW96LXRyYW5zZm9ybVwiXT1zLnRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIitvLmxlZnQrXCJweCxcIitvLnRvcCtcInB4KVwiOihzLmxlZnQ9by5sZWZ0LHMudG9wPW8udG9wKSxzfX19KTt2YXIgUD1mdW5jdGlvbihlKXtpZih0LmN1cnJUZW1wbGF0ZS5pZnJhbWUpe3ZhciBuPXQuY3VyclRlbXBsYXRlLmlmcmFtZS5maW5kKFwiaWZyYW1lXCIpO24ubGVuZ3RoJiYoZXx8KG5bMF0uc3JjPVwiLy9hYm91dDpibGFua1wiKSx0LmlzSUU4JiZuLmNzcyhcImRpc3BsYXlcIixlP1wiYmxvY2tcIjpcIm5vbmVcIikpfX07ZS5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiaWZyYW1lXCIse29wdGlvbnM6e21hcmt1cDonPGRpdiBjbGFzcz1cIm1mcC1pZnJhbWUtc2NhbGVyXCI+PGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PjxpZnJhbWUgY2xhc3M9XCJtZnAtaWZyYW1lXCIgc3JjPVwiLy9hYm91dDpibGFua1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT48L2Rpdj4nLHNyY0FjdGlvbjpcImlmcmFtZV9zcmNcIixwYXR0ZXJuczp7eW91dHViZTp7aW5kZXg6XCJ5b3V0dWJlLmNvbVwiLGlkOlwidj1cIixzcmM6XCIvL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8laWQlP2F1dG9wbGF5PTFcIn0sdmltZW86e2luZGV4OlwidmltZW8uY29tL1wiLGlkOlwiL1wiLHNyYzpcIi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8laWQlP2F1dG9wbGF5PTFcIn0sZ21hcHM6e2luZGV4OlwiLy9tYXBzLmdvb2dsZS5cIixzcmM6XCIlaWQlJm91dHB1dD1lbWJlZFwifX19LHByb3RvOntpbml0SWZyYW1lOmZ1bmN0aW9uKCl7dC50eXBlcy5wdXNoKFwiaWZyYW1lXCIpLGQoXCJCZWZvcmVDaGFuZ2VcIixmdW5jdGlvbihlLHQsbil7dCE9PW4mJihcImlmcmFtZVwiPT09dD9QKCk6XCJpZnJhbWVcIj09PW4mJlAoITApKX0pLGQoXCJDbG9zZS5pZnJhbWVcIixmdW5jdGlvbigpe1AoKX0pfSxnZXRJZnJhbWU6ZnVuY3Rpb24obixpKXt2YXIgbz1uLnNyYyxyPXQuc3QuaWZyYW1lO2UuZWFjaChyLnBhdHRlcm5zLGZ1bmN0aW9uKCl7aWYoby5pbmRleE9mKHRoaXMuaW5kZXgpPi0xKXJldHVybiB0aGlzLmlkJiYobz1cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5pZD9vLnN1YnN0cihvLmxhc3RJbmRleE9mKHRoaXMuaWQpK3RoaXMuaWQubGVuZ3RoLG8ubGVuZ3RoKTp0aGlzLmlkLmNhbGwodGhpcyxvKSksbz10aGlzLnNyYy5yZXBsYWNlKFwiJWlkJVwiLG8pLCExfSk7dmFyIGE9e307cmV0dXJuIHIuc3JjQWN0aW9uJiYoYVtyLnNyY0FjdGlvbl09byksdC5fcGFyc2VNYXJrdXAoaSxhLG4pLHQudXBkYXRlU3RhdHVzKFwicmVhZHlcIiksaX19fSk7dmFyIFM9ZnVuY3Rpb24oZSl7dmFyIG49dC5pdGVtcy5sZW5ndGg7cmV0dXJuIGU+bi0xP2UtbjplPDA/bitlOmV9LEU9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlLnJlcGxhY2UoLyVjdXJyJS9naSx0KzEpLnJlcGxhY2UoLyV0b3RhbCUvZ2ksbil9O2UubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcImdhbGxlcnlcIix7b3B0aW9uczp7ZW5hYmxlZDohMSxhcnJvd01hcmt1cDonPGJ1dHRvbiB0aXRsZT1cIiV0aXRsZSVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZnAtYXJyb3cgbWZwLWFycm93LSVkaXIlXCI+PC9idXR0b24+JyxwcmVsb2FkOlswLDJdLG5hdmlnYXRlQnlJbWdDbGljazohMCxhcnJvd3M6ITAsdFByZXY6XCJQcmV2aW91cyAoTGVmdCBhcnJvdyBrZXkpXCIsdE5leHQ6XCJOZXh0IChSaWdodCBhcnJvdyBrZXkpXCIsdENvdW50ZXI6XCIlY3VyciUgb2YgJXRvdGFsJVwifSxwcm90bzp7aW5pdEdhbGxlcnk6ZnVuY3Rpb24oKXt2YXIgbj10LnN0LmdhbGxlcnksbz1cIi5tZnAtZ2FsbGVyeVwiO2lmKHQuZGlyZWN0aW9uPSEwLCFufHwhbi5lbmFibGVkKXJldHVybiExO3IrPVwiIG1mcC1nYWxsZXJ5XCIsZChcIk9wZW5cIitvLGZ1bmN0aW9uKCl7bi5uYXZpZ2F0ZUJ5SW1nQ2xpY2smJnQud3JhcC5vbihcImNsaWNrXCIrbyxcIi5tZnAtaW1nXCIsZnVuY3Rpb24oKXtpZih0Lml0ZW1zLmxlbmd0aD4xKXJldHVybiB0Lm5leHQoKSwhMX0pLGkub24oXCJrZXlkb3duXCIrbyxmdW5jdGlvbihlKXszNz09PWUua2V5Q29kZT90LnByZXYoKTozOT09PWUua2V5Q29kZSYmdC5uZXh0KCl9KX0pLGQoXCJVcGRhdGVTdGF0dXNcIitvLGZ1bmN0aW9uKGUsbil7bi50ZXh0JiYobi50ZXh0PUUobi50ZXh0LHQuY3Vyckl0ZW0uaW5kZXgsdC5pdGVtcy5sZW5ndGgpKX0pLGQoXCJNYXJrdXBQYXJzZVwiK28sZnVuY3Rpb24oZSxpLG8scil7dmFyIGE9dC5pdGVtcy5sZW5ndGg7by5jb3VudGVyPWE+MT9FKG4udENvdW50ZXIsci5pbmRleCxhKTpcIlwifSksZChcIkJ1aWxkQ29udHJvbHNcIitvLGZ1bmN0aW9uKCl7aWYodC5pdGVtcy5sZW5ndGg+MSYmbi5hcnJvd3MmJiF0LmFycm93TGVmdCl7dmFyIGk9bi5hcnJvd01hcmt1cCxvPXQuYXJyb3dMZWZ0PWUoaS5yZXBsYWNlKC8ldGl0bGUlL2dpLG4udFByZXYpLnJlcGxhY2UoLyVkaXIlL2dpLFwibGVmdFwiKSkuYWRkQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKSxyPXQuYXJyb3dSaWdodD1lKGkucmVwbGFjZSgvJXRpdGxlJS9naSxuLnROZXh0KS5yZXBsYWNlKC8lZGlyJS9naSxcInJpZ2h0XCIpKS5hZGRDbGFzcyhcIm1mcC1wcmV2ZW50LWNsb3NlXCIpO28uY2xpY2soZnVuY3Rpb24oKXt0LnByZXYoKX0pLHIuY2xpY2soZnVuY3Rpb24oKXt0Lm5leHQoKX0pLHQuY29udGFpbmVyLmFwcGVuZChvLmFkZChyKSl9fSksZChcIkNoYW5nZVwiK28sZnVuY3Rpb24oKXt0Ll9wcmVsb2FkVGltZW91dCYmY2xlYXJUaW1lb3V0KHQuX3ByZWxvYWRUaW1lb3V0KSx0Ll9wcmVsb2FkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5wcmVsb2FkTmVhcmJ5SW1hZ2VzKCksdC5fcHJlbG9hZFRpbWVvdXQ9bnVsbH0sMTYpfSksZChcIkNsb3NlXCIrbyxmdW5jdGlvbigpe2kub2ZmKG8pLHQud3JhcC5vZmYoXCJjbGlja1wiK28pLHQuYXJyb3dSaWdodD10LmFycm93TGVmdD1udWxsfSl9LG5leHQ6ZnVuY3Rpb24oKXt0LmRpcmVjdGlvbj0hMCx0LmluZGV4PVModC5pbmRleCsxKSx0LnVwZGF0ZUl0ZW1IVE1MKCl9LHByZXY6ZnVuY3Rpb24oKXt0LmRpcmVjdGlvbj0hMSx0LmluZGV4PVModC5pbmRleC0xKSx0LnVwZGF0ZUl0ZW1IVE1MKCl9LGdvVG86ZnVuY3Rpb24oZSl7dC5kaXJlY3Rpb249ZT49dC5pbmRleCx0LmluZGV4PWUsdC51cGRhdGVJdGVtSFRNTCgpfSxwcmVsb2FkTmVhcmJ5SW1hZ2VzOmZ1bmN0aW9uKCl7dmFyIGUsbj10LnN0LmdhbGxlcnkucHJlbG9hZCxpPU1hdGgubWluKG5bMF0sdC5pdGVtcy5sZW5ndGgpLG89TWF0aC5taW4oblsxXSx0Lml0ZW1zLmxlbmd0aCk7Zm9yKGU9MTtlPD0odC5kaXJlY3Rpb24/bzppKTtlKyspdC5fcHJlbG9hZEl0ZW0odC5pbmRleCtlKTtmb3IoZT0xO2U8PSh0LmRpcmVjdGlvbj9pOm8pO2UrKyl0Ll9wcmVsb2FkSXRlbSh0LmluZGV4LWUpfSxfcHJlbG9hZEl0ZW06ZnVuY3Rpb24obil7aWYobj1TKG4pLCF0Lml0ZW1zW25dLnByZWxvYWRlZCl7dmFyIGk9dC5pdGVtc1tuXTtpLnBhcnNlZHx8KGk9dC5wYXJzZUVsKG4pKSx1KFwiTGF6eUxvYWRcIixpKSxcImltYWdlXCI9PT1pLnR5cGUmJihpLmltZz1lKCc8aW1nIGNsYXNzPVwibWZwLWltZ1wiIC8+Jykub24oXCJsb2FkLm1mcGxvYWRlclwiLGZ1bmN0aW9uKCl7aS5oYXNTaXplPSEwfSkub24oXCJlcnJvci5tZnBsb2FkZXJcIixmdW5jdGlvbigpe2kuaGFzU2l6ZT0hMCxpLmxvYWRFcnJvcj0hMCx1KFwiTGF6eUxvYWRFcnJvclwiLGkpfSkuYXR0cihcInNyY1wiLGkuc3JjKSksaS5wcmVsb2FkZWQ9ITB9fX19KTtlLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJyZXRpbmFcIix7b3B0aW9uczp7cmVwbGFjZVNyYzpmdW5jdGlvbihlKXtyZXR1cm4gZS5zcmMucmVwbGFjZSgvXFwuXFx3KyQvLGZ1bmN0aW9uKGUpe3JldHVyblwiQDJ4XCIrZX0pfSxyYXRpbzoxfSxwcm90bzp7aW5pdFJldGluYTpmdW5jdGlvbigpe2lmKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvPjEpe3ZhciBlPXQuc3QucmV0aW5hLG49ZS5yYXRpbztuPWlzTmFOKG4pP24oKTpuLG4+MSYmKGQoXCJJbWFnZUhhc1NpemUucmV0aW5hXCIsZnVuY3Rpb24oZSx0KXt0LmltZy5jc3Moe1wibWF4LXdpZHRoXCI6dC5pbWdbMF0ubmF0dXJhbFdpZHRoL24sd2lkdGg6XCIxMDAlXCJ9KX0pLGQoXCJFbGVtZW50UGFyc2UucmV0aW5hXCIsZnVuY3Rpb24odCxpKXtpLnNyYz1lLnJlcGxhY2VTcmMoaSxuKX0pKX19fX0pLG0oKX0pOyIsIiFmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJqcXVlcnlcIikpOnQoalF1ZXJ5KX0oZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxuPWZ1bmN0aW9uKCl7dmFyIG49W1wiYnItd3JhcHBlclwiXTtcIlwiIT09ZS5vcHRpb25zLnRoZW1lJiZuLnB1c2goXCJici10aGVtZS1cIitlLm9wdGlvbnMudGhlbWUpLGUuJGVsZW0ud3JhcCh0KFwiPGRpdiAvPlwiLHtjbGFzczpuLmpvaW4oXCIgXCIpfSkpfSxpPWZ1bmN0aW9uKCl7ZS4kZWxlbS51bndyYXAoKX0sYT1mdW5jdGlvbihuKXtyZXR1cm4gdC5pc051bWVyaWMobikmJihuPU1hdGguZmxvb3IobikpLHQoJ29wdGlvblt2YWx1ZT1cIicrbisnXCJdJyxlLiRlbGVtKX0scj1mdW5jdGlvbigpe3ZhciBuPWUub3B0aW9ucy5pbml0aWFsUmF0aW5nO3JldHVybiBuP2Eobik6dChcIm9wdGlvbjpzZWxlY3RlZFwiLGUuJGVsZW0pfSxvPWZ1bmN0aW9uKCl7dmFyIG49ZS4kZWxlbS5maW5kKCdvcHRpb25bdmFsdWU9XCInK2Uub3B0aW9ucy5lbXB0eVZhbHVlKydcIl0nKTtyZXR1cm4hbi5sZW5ndGgmJmUub3B0aW9ucy5hbGxvd0VtcHR5PyhuPXQoXCI8b3B0aW9uIC8+XCIse3ZhbHVlOmUub3B0aW9ucy5lbXB0eVZhbHVlfSksbi5wcmVwZW5kVG8oZS4kZWxlbSkpOm59LGw9ZnVuY3Rpb24odCl7dmFyIG49ZS4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIpO3JldHVybiB2b2lkIDAhPT10P25bdF06bn0scz1mdW5jdGlvbih0LG4pe251bGwhPT1uJiZcIm9iamVjdFwiPT10eXBlb2Ygbj9lLiRlbGVtLmRhdGEoXCJiYXJyYXRpbmdcIixuKTplLiRlbGVtLmRhdGEoXCJiYXJyYXRpbmdcIilbdF09bn0sdT1mdW5jdGlvbigpe3ZhciB0PXIoKSxuPW8oKSxpPXQudmFsKCksYT10LmRhdGEoXCJodG1sXCIpP3QuZGF0YShcImh0bWxcIik6dC50ZXh0KCksbD1udWxsIT09ZS5vcHRpb25zLmFsbG93RW1wdHk/ZS5vcHRpb25zLmFsbG93RW1wdHk6ISFuLmxlbmd0aCx1PW4ubGVuZ3RoP24udmFsKCk6bnVsbCxkPW4ubGVuZ3RoP24udGV4dCgpOm51bGw7cyhudWxsLHt1c2VyT3B0aW9uczplLm9wdGlvbnMscmF0aW5nVmFsdWU6aSxyYXRpbmdUZXh0OmEsb3JpZ2luYWxSYXRpbmdWYWx1ZTppLG9yaWdpbmFsUmF0aW5nVGV4dDphLGFsbG93RW1wdHk6bCxlbXB0eVJhdGluZ1ZhbHVlOnUsZW1wdHlSYXRpbmdUZXh0OmQscmVhZE9ubHk6ZS5vcHRpb25zLnJlYWRvbmx5LHJhdGluZ01hZGU6ITF9KX0sZD1mdW5jdGlvbigpe2UuJGVsZW0ucmVtb3ZlRGF0YShcImJhcnJhdGluZ1wiKX0sYz1mdW5jdGlvbigpe3JldHVybiBsKFwicmF0aW5nVGV4dFwiKX0sZj1mdW5jdGlvbigpe3JldHVybiBsKFwicmF0aW5nVmFsdWVcIil9LGc9ZnVuY3Rpb24oKXt2YXIgbj10KFwiPGRpdiAvPlwiLHtjbGFzczpcImJyLXdpZGdldFwifSk7cmV0dXJuIGUuJGVsZW0uZmluZChcIm9wdGlvblwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGksYSxyLG87KGk9dCh0aGlzKS52YWwoKSkhPT1sKFwiZW1wdHlSYXRpbmdWYWx1ZVwiKSYmKGE9dCh0aGlzKS50ZXh0KCkscj10KHRoaXMpLmRhdGEoXCJodG1sXCIpLHImJihhPXIpLG89dChcIjxhIC8+XCIse2hyZWY6XCIjXCIsXCJkYXRhLXJhdGluZy12YWx1ZVwiOmksXCJkYXRhLXJhdGluZy10ZXh0XCI6YSxodG1sOmUub3B0aW9ucy5zaG93VmFsdWVzP2E6XCJcIn0pLG4uYXBwZW5kKG8pKX0pLGUub3B0aW9ucy5zaG93U2VsZWN0ZWRSYXRpbmcmJm4uYXBwZW5kKHQoXCI8ZGl2IC8+XCIse3RleHQ6XCJcIixjbGFzczpcImJyLWN1cnJlbnQtcmF0aW5nXCJ9KSksZS5vcHRpb25zLnJldmVyc2UmJm4uYWRkQ2xhc3MoXCJici1yZXZlcnNlXCIpLGUub3B0aW9ucy5yZWFkb25seSYmbi5hZGRDbGFzcyhcImJyLXJlYWRvbmx5XCIpLG59LHA9ZnVuY3Rpb24oKXtyZXR1cm4gbChcInVzZXJPcHRpb25zXCIpLnJldmVyc2U/XCJuZXh0QWxsXCI6XCJwcmV2QWxsXCJ9LGg9ZnVuY3Rpb24odCl7YSh0KS5wcm9wKFwic2VsZWN0ZWRcIiwhMCksZS4kZWxlbS5jaGFuZ2UoKX0sbT1mdW5jdGlvbigpe3QoXCJvcHRpb25cIixlLiRlbGVtKS5wcm9wKFwic2VsZWN0ZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRTZWxlY3RlZH0pLGUuJGVsZW0uY2hhbmdlKCl9LHY9ZnVuY3Rpb24odCl7dD10fHxjKCksdD09bChcImVtcHR5UmF0aW5nVGV4dFwiKSYmKHQ9XCJcIiksZS5vcHRpb25zLnNob3dTZWxlY3RlZFJhdGluZyYmZS4kZWxlbS5wYXJlbnQoKS5maW5kKFwiLmJyLWN1cnJlbnQtcmF0aW5nXCIpLnRleHQodCl9LGI9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5mbG9vcigxMCp0KS8xMCUxKjEwMCl9LHk9ZnVuY3Rpb24oKXtlLiR3aWRnZXQuZmluZChcImFcIikucmVtb3ZlQ2xhc3MoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS5tYXRjaCgvKF58XFxzKWJyLVxcUysvZyl8fFtdKS5qb2luKFwiIFwiKX0pfSx3PWZ1bmN0aW9uKCl7dmFyIG4saSxhPWUuJHdpZGdldC5maW5kKCdhW2RhdGEtcmF0aW5nLXZhbHVlPVwiJytmKCkrJ1wiXScpLHI9bChcInVzZXJPcHRpb25zXCIpLmluaXRpYWxSYXRpbmcsbz10LmlzTnVtZXJpYyhmKCkpP2YoKTowLHM9YihyKTtpZih5KCksYS5hZGRDbGFzcyhcImJyLXNlbGVjdGVkIGJyLWN1cnJlbnRcIilbcCgpXSgpLmFkZENsYXNzKFwiYnItc2VsZWN0ZWRcIiksIWwoXCJyYXRpbmdNYWRlXCIpJiZ0LmlzTnVtZXJpYyhyKSl7aWYobz49cnx8IXMpcmV0dXJuO249ZS4kd2lkZ2V0LmZpbmQoXCJhXCIpLGk9YS5sZW5ndGg/YVtsKFwidXNlck9wdGlvbnNcIikucmV2ZXJzZT9cInByZXZcIjpcIm5leHRcIl0oKTpuW2woXCJ1c2VyT3B0aW9uc1wiKS5yZXZlcnNlP1wibGFzdFwiOlwiZmlyc3RcIl0oKSxpLmFkZENsYXNzKFwiYnItZnJhY3Rpb25hbFwiKSxpLmFkZENsYXNzKFwiYnItZnJhY3Rpb25hbC1cIitzKX19LCQ9ZnVuY3Rpb24odCl7cmV0dXJuISghbChcImFsbG93RW1wdHlcIil8fCFsKFwidXNlck9wdGlvbnNcIikuZGVzZWxlY3RhYmxlKSYmZigpPT10LmF0dHIoXCJkYXRhLXJhdGluZy12YWx1ZVwiKX0seD1mdW5jdGlvbihuKXtuLm9uKFwiY2xpY2suYmFycmF0aW5nXCIsZnVuY3Rpb24obil7dmFyIGksYSxyPXQodGhpcyksbz1sKFwidXNlck9wdGlvbnNcIik7cmV0dXJuIG4ucHJldmVudERlZmF1bHQoKSxpPXIuYXR0cihcImRhdGEtcmF0aW5nLXZhbHVlXCIpLGE9ci5hdHRyKFwiZGF0YS1yYXRpbmctdGV4dFwiKSwkKHIpJiYoaT1sKFwiZW1wdHlSYXRpbmdWYWx1ZVwiKSxhPWwoXCJlbXB0eVJhdGluZ1RleHRcIikpLHMoXCJyYXRpbmdWYWx1ZVwiLGkpLHMoXCJyYXRpbmdUZXh0XCIsYSkscyhcInJhdGluZ01hZGVcIiwhMCksaChpKSx2KGEpLHcoKSxvLm9uU2VsZWN0LmNhbGwoZSxmKCksYygpLG4pLCExfSl9LFI9ZnVuY3Rpb24oZSl7ZS5vbihcIm1vdXNlZW50ZXIuYmFycmF0aW5nXCIsZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3koKSxlLmFkZENsYXNzKFwiYnItYWN0aXZlXCIpW3AoKV0oKS5hZGRDbGFzcyhcImJyLWFjdGl2ZVwiKSx2KGUuYXR0cihcImRhdGEtcmF0aW5nLXRleHRcIikpfSl9LFY9ZnVuY3Rpb24odCl7ZS4kd2lkZ2V0Lm9uKFwibW91c2VsZWF2ZS5iYXJyYXRpbmcgYmx1ci5iYXJyYXRpbmdcIixmdW5jdGlvbigpe3YoKSx3KCl9KX0sTz1mdW5jdGlvbihlKXtlLm9uKFwidG91Y2hzdGFydC5iYXJyYXRpbmdcIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSx0KHRoaXMpLmNsaWNrKCl9KX0sQz1mdW5jdGlvbih0KXt0Lm9uKFwiY2xpY2suYmFycmF0aW5nXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSl9LFM9ZnVuY3Rpb24odCl7eCh0KSxlLm9wdGlvbnMuaG92ZXJTdGF0ZSYmKFIodCksVigpKX0sVD1mdW5jdGlvbih0KXt0Lm9mZihcIi5iYXJyYXRpbmdcIil9LGo9ZnVuY3Rpb24odCl7dmFyIG49ZS4kd2lkZ2V0LmZpbmQoXCJhXCIpO08mJk8obiksdD8oVChuKSxDKG4pKTpTKG4pfTt0aGlzLnNob3c9ZnVuY3Rpb24oKXtsKCl8fChuKCksdSgpLGUuJHdpZGdldD1nKCksZS4kd2lkZ2V0Lmluc2VydEFmdGVyKGUuJGVsZW0pLHcoKSx2KCksaihlLm9wdGlvbnMucmVhZG9ubHkpLGUuJGVsZW0uaGlkZSgpKX0sdGhpcy5yZWFkb25seT1mdW5jdGlvbih0KXtcImJvb2xlYW5cIj09dHlwZW9mIHQmJmwoXCJyZWFkT25seVwiKSE9dCYmKGoodCkscyhcInJlYWRPbmx5XCIsdCksZS4kd2lkZ2V0LnRvZ2dsZUNsYXNzKFwiYnItcmVhZG9ubHlcIikpfSx0aGlzLnNldD1mdW5jdGlvbih0KXt2YXIgbj1sKFwidXNlck9wdGlvbnNcIik7MCE9PWUuJGVsZW0uZmluZCgnb3B0aW9uW3ZhbHVlPVwiJyt0KydcIl0nKS5sZW5ndGgmJihzKFwicmF0aW5nVmFsdWVcIix0KSxzKFwicmF0aW5nVGV4dFwiLGUuJGVsZW0uZmluZCgnb3B0aW9uW3ZhbHVlPVwiJyt0KydcIl0nKS50ZXh0KCkpLHMoXCJyYXRpbmdNYWRlXCIsITApLGgoZigpKSx2KGMoKSksdygpLG4uc2lsZW50fHxuLm9uU2VsZWN0LmNhbGwodGhpcyxmKCksYygpKSl9LHRoaXMuY2xlYXI9ZnVuY3Rpb24oKXt2YXIgdD1sKFwidXNlck9wdGlvbnNcIik7cyhcInJhdGluZ1ZhbHVlXCIsbChcIm9yaWdpbmFsUmF0aW5nVmFsdWVcIikpLHMoXCJyYXRpbmdUZXh0XCIsbChcIm9yaWdpbmFsUmF0aW5nVGV4dFwiKSkscyhcInJhdGluZ01hZGVcIiwhMSksbSgpLHYoYygpKSx3KCksdC5vbkNsZWFyLmNhbGwodGhpcyxmKCksYygpKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9ZigpLG49YygpLGE9bChcInVzZXJPcHRpb25zXCIpO1QoZS4kd2lkZ2V0LmZpbmQoXCJhXCIpKSxlLiR3aWRnZXQucmVtb3ZlKCksZCgpLGkoKSxlLiRlbGVtLnNob3coKSxhLm9uRGVzdHJveS5jYWxsKHRoaXMsdCxuKX19cmV0dXJuIGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy4kZWxlbT10KG4pLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSx0LmZuLmJhcnJhdGluZy5kZWZhdWx0cyxlKSx0aGlzLm9wdGlvbnN9LGV9KCk7dC5mbi5iYXJyYXRpbmc9ZnVuY3Rpb24obixpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9bmV3IGU7aWYodCh0aGlzKS5pcyhcInNlbGVjdFwiKXx8dC5lcnJvcihcIlNvcnJ5LCB0aGlzIHBsdWdpbiBvbmx5IHdvcmtzIHdpdGggc2VsZWN0IGZpZWxkcy5cIiksYS5oYXNPd25Qcm9wZXJ0eShuKSl7aWYoYS5pbml0KGksdGhpcyksXCJzaG93XCI9PT1uKXJldHVybiBhLnNob3coaSk7aWYoYS4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIpKXJldHVybiBhLiR3aWRnZXQ9dCh0aGlzKS5uZXh0KFwiLmJyLXdpZGdldFwiKSxhW25dKGkpfWVsc2V7aWYoXCJvYmplY3RcIj09dHlwZW9mIG58fCFuKXJldHVybiBpPW4sYS5pbml0KGksdGhpcyksYS5zaG93KCk7dC5lcnJvcihcIk1ldGhvZCBcIituK1wiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5iYXJyYXRpbmdcIil9fSl9LHQuZm4uYmFycmF0aW5nLmRlZmF1bHRzPXt0aGVtZTpcIlwiLGluaXRpYWxSYXRpbmc6bnVsbCxhbGxvd0VtcHR5Om51bGwsZW1wdHlWYWx1ZTpcIlwiLHNob3dWYWx1ZXM6ITEsc2hvd1NlbGVjdGVkUmF0aW5nOiEwLGRlc2VsZWN0YWJsZTohMCxyZXZlcnNlOiExLHJlYWRvbmx5OiExLGZhc3RDbGlja3M6ITAsaG92ZXJTdGF0ZTohMCxzaWxlbnQ6ITEsb25TZWxlY3Q6ZnVuY3Rpb24odCxlLG4pe30sb25DbGVhcjpmdW5jdGlvbih0LGUpe30sb25EZXN0cm95OmZ1bmN0aW9uKHQsZSl7fX0sdC5mbi5iYXJyYXRpbmcuQmFyUmF0aW5nPWV9KTsiLCJpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5XCIpOytmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT10LmZuLmpxdWVyeS5zcGxpdChcIiBcIilbMF0uc3BsaXQoXCIuXCIpO2lmKGVbMF08MiYmZVsxXTw5fHwxPT1lWzBdJiY5PT1lWzFdJiZlWzJdPDF8fGVbMF0+Myl0aHJvdyBuZXcgRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeSB2ZXJzaW9uIDEuOS4xIG9yIGhpZ2hlciwgYnV0IGxvd2VyIHRoYW4gdmVyc2lvbiA0XCIpfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYm9vdHN0cmFwXCIpLGU9e1dlYmtpdFRyYW5zaXRpb246XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsTW96VHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIixPVHJhbnNpdGlvbjpcIm9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kXCIsdHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIn07Zm9yKHZhciBpIGluIGUpaWYodm9pZCAwIT09dC5zdHlsZVtpXSlyZXR1cm57ZW5kOmVbaV19O3JldHVybiExfXQuZm4uZW11bGF0ZVRyYW5zaXRpb25FbmQ9ZnVuY3Rpb24oZSl7dmFyIGk9ITEsbz10aGlzO3QodGhpcykub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtpPSEwfSk7dmFyIG49ZnVuY3Rpb24oKXtpfHx0KG8pLnRyaWdnZXIodC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKX07cmV0dXJuIHNldFRpbWVvdXQobixlKSx0aGlzfSx0KGZ1bmN0aW9uKCl7dC5zdXBwb3J0LnRyYW5zaXRpb249ZSgpLHQuc3VwcG9ydC50cmFuc2l0aW9uJiYodC5ldmVudC5zcGVjaWFsLmJzVHJhbnNpdGlvbkVuZD17YmluZFR5cGU6dC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGRlbGVnYXRlVHlwZTp0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsaGFuZGxlOmZ1bmN0aW9uKGUpe2lmKHQoZS50YXJnZXQpLmlzKHRoaXMpKXJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcyksbj1pLmRhdGEoXCJicy5hbGVydFwiKTtufHxpLmRhdGEoXCJicy5hbGVydFwiLG49bmV3IG8odGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuW2VdLmNhbGwoaSl9KX12YXIgaT0nW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJyxvPWZ1bmN0aW9uKGUpe3QoZSkub24oXCJjbGlja1wiLGksdGhpcy5jbG9zZSl9O28uVkVSU0lPTj1cIjMuMy43XCIsby5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxvLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7YS5kZXRhY2goKS50cmlnZ2VyKFwiY2xvc2VkLmJzLmFsZXJ0XCIpLnJlbW92ZSgpfXZhciBuPXQodGhpcykscz1uLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtzfHwocz1uLmF0dHIoXCJocmVmXCIpLHM9cyYmcy5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgYT10KFwiI1wiPT09cz9bXTpzKTtlJiZlLnByZXZlbnREZWZhdWx0KCksYS5sZW5ndGh8fChhPW4uY2xvc2VzdChcIi5hbGVydFwiKSksYS50cmlnZ2VyKGU9dC5FdmVudChcImNsb3NlLmJzLmFsZXJ0XCIpKSxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoYS5yZW1vdmVDbGFzcyhcImluXCIpLHQuc3VwcG9ydC50cmFuc2l0aW9uJiZhLmhhc0NsYXNzKFwiZmFkZVwiKT9hLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGkpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG8uVFJBTlNJVElPTl9EVVJBVElPTik6aSgpKX07dmFyIG49dC5mbi5hbGVydDt0LmZuLmFsZXJ0PWUsdC5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1vLHQuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmFsZXJ0PW4sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5hbGVydC5kYXRhLWFwaVwiLGksby5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBvPXQodGhpcyksbj1vLmRhdGEoXCJicy5idXR0b25cIikscz1cIm9iamVjdFwiPT10eXBlb2YgZSYmZTtufHxvLmRhdGEoXCJicy5idXR0b25cIixuPW5ldyBpKHRoaXMscykpLFwidG9nZ2xlXCI9PWU/bi50b2dnbGUoKTplJiZuLnNldFN0YXRlKGUpfSl9dmFyIGk9ZnVuY3Rpb24oZSxvKXt0aGlzLiRlbGVtZW50PXQoZSksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGkuREVGQVVMVFMsbyksdGhpcy5pc0xvYWRpbmc9ITF9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5ERUZBVUxUUz17bG9hZGluZ1RleHQ6XCJsb2FkaW5nLi4uXCJ9LGkucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciBpPVwiZGlzYWJsZWRcIixvPXRoaXMuJGVsZW1lbnQsbj1vLmlzKFwiaW5wdXRcIik/XCJ2YWxcIjpcImh0bWxcIixzPW8uZGF0YSgpO2UrPVwiVGV4dFwiLG51bGw9PXMucmVzZXRUZXh0JiZvLmRhdGEoXCJyZXNldFRleHRcIixvW25dKCkpLHNldFRpbWVvdXQodC5wcm94eShmdW5jdGlvbigpe29bbl0obnVsbD09c1tlXT90aGlzLm9wdGlvbnNbZV06c1tlXSksXCJsb2FkaW5nVGV4dFwiPT1lPyh0aGlzLmlzTG9hZGluZz0hMCxvLmFkZENsYXNzKGkpLmF0dHIoaSxpKS5wcm9wKGksITApKTp0aGlzLmlzTG9hZGluZyYmKHRoaXMuaXNMb2FkaW5nPSExLG8ucmVtb3ZlQ2xhc3MoaSkucmVtb3ZlQXR0cihpKS5wcm9wKGksITEpKX0sdGhpcyksMCl9LGkucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9dGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9XCJidXR0b25zXCJdJyk7aWYoZS5sZW5ndGgpe3ZhciBpPXRoaXMuJGVsZW1lbnQuZmluZChcImlucHV0XCIpO1wicmFkaW9cIj09aS5wcm9wKFwidHlwZVwiKT8oaS5wcm9wKFwiY2hlY2tlZFwiKSYmKHQ9ITEpLGUuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImFjdGl2ZVwiKSk6XCJjaGVja2JveFwiPT1pLnByb3AoXCJ0eXBlXCIpJiYoaS5wcm9wKFwiY2hlY2tlZFwiKSE9PXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikmJih0PSExKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpKSxpLnByb3AoXCJjaGVja2VkXCIsdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImFjdGl2ZVwiKSksdCYmaS50cmlnZ2VyKFwiY2hhbmdlXCIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIil9O3ZhciBvPXQuZm4uYnV0dG9uO3QuZm4uYnV0dG9uPWUsdC5mbi5idXR0b24uQ29uc3RydWN0b3I9aSx0LmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uYnV0dG9uPW8sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5idXR0b24uZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsZnVuY3Rpb24oaSl7dmFyIG89dChpLnRhcmdldCkuY2xvc2VzdChcIi5idG5cIik7ZS5jYWxsKG8sXCJ0b2dnbGVcIiksdChpLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyl8fChpLnByZXZlbnREZWZhdWx0KCksby5pcyhcImlucHV0LGJ1dHRvblwiKT9vLnRyaWdnZXIoXCJmb2N1c1wiKTpvLmZpbmQoXCJpbnB1dDp2aXNpYmxlLGJ1dHRvbjp2aXNpYmxlXCIpLmZpcnN0KCkudHJpZ2dlcihcImZvY3VzXCIpKX0pLm9uKFwiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGUpe3QoZS50YXJnZXQpLmNsb3Nlc3QoXCIuYnRuXCIpLnRvZ2dsZUNsYXNzKFwiZm9jdXNcIiwvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG89dCh0aGlzKSxuPW8uZGF0YShcImJzLmNhcm91c2VsXCIpLHM9dC5leHRlbmQoe30saS5ERUZBVUxUUyxvLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgZSYmZSksYT1cInN0cmluZ1wiPT10eXBlb2YgZT9lOnMuc2xpZGU7bnx8by5kYXRhKFwiYnMuY2Fyb3VzZWxcIixuPW5ldyBpKHRoaXMscykpLFwibnVtYmVyXCI9PXR5cGVvZiBlP24udG8oZSk6YT9uW2FdKCk6cy5pbnRlcnZhbCYmbi5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgaT1mdW5jdGlvbihlLGkpe3RoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZChcIi5jYXJvdXNlbC1pbmRpY2F0b3JzXCIpLHRoaXMub3B0aW9ucz1pLHRoaXMucGF1c2VkPW51bGwsdGhpcy5zbGlkaW5nPW51bGwsdGhpcy5pbnRlcnZhbD1udWxsLHRoaXMuJGFjdGl2ZT1udWxsLHRoaXMuJGl0ZW1zPW51bGwsdGhpcy5vcHRpb25zLmtleWJvYXJkJiZ0aGlzLiRlbGVtZW50Lm9uKFwia2V5ZG93bi5icy5jYXJvdXNlbFwiLHQucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSxcImhvdmVyXCI9PXRoaXMub3B0aW9ucy5wYXVzZSYmIShcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmdGhpcy4kZWxlbWVudC5vbihcIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWxcIix0LnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKFwibW91c2VsZWF2ZS5icy5jYXJvdXNlbFwiLHQucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5UUkFOU0lUSU9OX0RVUkFUSU9OPTYwMCxpLkRFRkFVTFRTPXtpbnRlcnZhbDo1ZTMscGF1c2U6XCJob3ZlclwiLHdyYXA6ITAsa2V5Ym9hcmQ6ITB9LGkucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpe3N3aXRjaCh0LndoaWNoKXtjYXNlIDM3OnRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dGhpcy5uZXh0KCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dC5wcmV2ZW50RGVmYXVsdCgpfX0saS5wcm90b3R5cGUuY3ljbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwodC5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSksdGhpc30saS5wcm90b3R5cGUuZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLiRpdGVtcz10LnBhcmVudCgpLmNoaWxkcmVuKFwiLml0ZW1cIiksdGhpcy4kaXRlbXMuaW5kZXgodHx8dGhpcy4kYWN0aXZlKX0saS5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0SXRlbUluZGV4KGUpO2lmKChcInByZXZcIj09dCYmMD09PWl8fFwibmV4dFwiPT10JiZpPT10aGlzLiRpdGVtcy5sZW5ndGgtMSkmJiF0aGlzLm9wdGlvbnMud3JhcClyZXR1cm4gZTt2YXIgbz1cInByZXZcIj09dD8tMToxLG49KGkrbykldGhpcy4kaXRlbXMubGVuZ3RoO3JldHVybiB0aGlzLiRpdGVtcy5lcShuKX0saS5wcm90b3R5cGUudG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoXCIuaXRlbS5hY3RpdmVcIikpO2lmKCEodD50aGlzLiRpdGVtcy5sZW5ndGgtMXx8dDwwKSlyZXR1cm4gdGhpcy5zbGlkaW5nP3RoaXMuJGVsZW1lbnQub25lKFwic2xpZC5icy5jYXJvdXNlbFwiLGZ1bmN0aW9uKCl7ZS50byh0KX0pOmk9PXQ/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZSh0Pmk/XCJuZXh0XCI6XCJwcmV2XCIsdGhpcy4kaXRlbXMuZXEodCkpfSxpLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KHRoaXMucGF1c2VkPSEwKSx0aGlzLiRlbGVtZW50LmZpbmQoXCIubmV4dCwgLnByZXZcIikubGVuZ3RoJiZ0LnN1cHBvcnQudHJhbnNpdGlvbiYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcih0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoITApKSx0aGlzLmludGVydmFsPWNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpc30saS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJuZXh0XCIpfSxpLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2xpZGluZylyZXR1cm4gdGhpcy5zbGlkZShcInByZXZcIil9LGkucHJvdG90eXBlLnNsaWRlPWZ1bmN0aW9uKGUsbyl7dmFyIG49dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpLHM9b3x8dGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKGUsbiksYT10aGlzLmludGVydmFsLHI9XCJuZXh0XCI9PWU/XCJsZWZ0XCI6XCJyaWdodFwiLGw9dGhpcztpZihzLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGg9c1swXSxkPXQuRXZlbnQoXCJzbGlkZS5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmgsZGlyZWN0aW9uOnJ9KTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoZCksIWQuaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKHRoaXMuc2xpZGluZz0hMCxhJiZ0aGlzLnBhdXNlKCksdGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgpe3RoaXMuJGluZGljYXRvcnMuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7dmFyIHA9dCh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgocyldKTtwJiZwLmFkZENsYXNzKFwiYWN0aXZlXCIpfXZhciBjPXQuRXZlbnQoXCJzbGlkLmJzLmNhcm91c2VsXCIse3JlbGF0ZWRUYXJnZXQ6aCxkaXJlY3Rpb246cn0pO3JldHVybiB0LnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcInNsaWRlXCIpPyhzLmFkZENsYXNzKGUpLHNbMF0ub2Zmc2V0V2lkdGgsbi5hZGRDbGFzcyhyKSxzLmFkZENsYXNzKHIpLG4ub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtzLnJlbW92ZUNsYXNzKFtlLHJdLmpvaW4oXCIgXCIpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxuLnJlbW92ZUNsYXNzKFtcImFjdGl2ZVwiLHJdLmpvaW4oXCIgXCIpKSxsLnNsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe2wuJGVsZW1lbnQudHJpZ2dlcihjKX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pKToobi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSxzLmFkZENsYXNzKFwiYWN0aXZlXCIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoYykpLGEmJnRoaXMuY3ljbGUoKSx0aGlzfX07dmFyIG89dC5mbi5jYXJvdXNlbDt0LmZuLmNhcm91c2VsPWUsdC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1pLHQuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmNhcm91c2VsPW8sdGhpc307dmFyIG49ZnVuY3Rpb24oaSl7dmFyIG8sbj10KHRoaXMpLHM9dChuLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KG89bi5hdHRyKFwiaHJlZlwiKSkmJm8ucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKSk7aWYocy5oYXNDbGFzcyhcImNhcm91c2VsXCIpKXt2YXIgYT10LmV4dGVuZCh7fSxzLmRhdGEoKSxuLmRhdGEoKSkscj1uLmF0dHIoXCJkYXRhLXNsaWRlLXRvXCIpO3ImJihhLmludGVydmFsPSExKSxlLmNhbGwocyxhKSxyJiZzLmRhdGEoXCJicy5jYXJvdXNlbFwiKS50byhyKSxpLnByZXZlbnREZWZhdWx0KCl9fTt0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZV1cIixuKS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZS10b11cIixuKSx0KHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXt0KCdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKTtlLmNhbGwoaSxpLmRhdGEoKSl9KX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7dmFyIGksbz1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KGk9ZS5hdHRyKFwiaHJlZlwiKSkmJmkucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKTtyZXR1cm4gdChvKX1mdW5jdGlvbiBpKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLG49aS5kYXRhKFwiYnMuY29sbGFwc2VcIikscz10LmV4dGVuZCh7fSxvLkRFRkFVTFRTLGkuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKTshbiYmcy50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoZSkmJihzLnRvZ2dsZT0hMSksbnx8aS5kYXRhKFwiYnMuY29sbGFwc2VcIixuPW5ldyBvKHRoaXMscykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuW2VdKCl9KX12YXIgbz1mdW5jdGlvbihlLGkpe3RoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sby5ERUZBVUxUUyxpKSx0aGlzLiR0cmlnZ2VyPXQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2hyZWY9XCIjJytlLmlkKydcIl0sW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJytlLmlkKydcIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07by5WRVJTSU9OPVwiMy4zLjdcIixvLlRSQU5TSVRJT05fRFVSQVRJT049MzUwLG8uREVGQVVMVFM9e3RvZ2dsZTohMH0sby5wcm90b3R5cGUuZGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJ3aWR0aFwiKT9cIndpZHRoXCI6XCJoZWlnaHRcIn0sby5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIikpe3ZhciBlLG49dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuY2hpbGRyZW4oXCIucGFuZWxcIikuY2hpbGRyZW4oXCIuaW4sIC5jb2xsYXBzaW5nXCIpO2lmKCEobiYmbi5sZW5ndGgmJihlPW4uZGF0YShcImJzLmNvbGxhcHNlXCIpKSYmZS50cmFuc2l0aW9uaW5nKSl7dmFyIHM9dC5FdmVudChcInNob3cuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKHMpLCFzLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtuJiZuLmxlbmd0aCYmKGkuY2FsbChuLFwiaGlkZVwiKSxlfHxuLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpKTt2YXIgYT10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZVwiKS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIilbYV0oMCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgcj1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbYV0oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCF0LnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gci5jYWxsKHRoaXMpO3ZhciBsPXQuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGFdLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkocix0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoby5UUkFOU0lUSU9OX0RVUkFUSU9OKVthXSh0aGlzLiRlbGVtZW50WzBdW2xdKX19fX0sby5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGU9dC5FdmVudChcImhpZGUuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbaV0odGhpcy4kZWxlbWVudFtpXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBpblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKFwiY29sbGFwc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBuPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNpbmdcIikuYWRkQ2xhc3MoXCJjb2xsYXBzZVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfTtpZighdC5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIG4uY2FsbCh0aGlzKTt0aGlzLiRlbGVtZW50W2ldKDApLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkobix0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoby5UUkFOU0lUSU9OX0RVUkFUSU9OKX19fSxvLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKT9cImhpZGVcIjpcInNob3dcIl0oKX0sby5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS1wYXJlbnQ9XCInK3RoaXMub3B0aW9ucy5wYXJlbnQrJ1wiXScpLmVhY2godC5wcm94eShmdW5jdGlvbihpLG8pe3ZhciBuPXQobyk7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoZShuKSxuKX0sdGhpcykpLmVuZCgpfSxvLnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgaT10Lmhhc0NsYXNzKFwiaW5cIik7dC5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLGkpLGUudG9nZ2xlQ2xhc3MoXCJjb2xsYXBzZWRcIiwhaSkuYXR0cihcImFyaWEtZXhwYW5kZWRcIixpKX07dmFyIG49dC5mbi5jb2xsYXBzZTt0LmZuLmNvbGxhcHNlPWksdC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1vLHQuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmNvbGxhcHNlPW4sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsZnVuY3Rpb24obyl7dmFyIG49dCh0aGlzKTtuLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8by5wcmV2ZW50RGVmYXVsdCgpO3ZhciBzPWUobiksYT1zLmRhdGEoXCJicy5jb2xsYXBzZVwiKSxyPWE/XCJ0b2dnbGVcIjpuLmRhdGEoKTtpLmNhbGwocyxyKX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7dmFyIGk9ZS5hdHRyKFwiZGF0YS10YXJnZXRcIik7aXx8KGk9ZS5hdHRyKFwiaHJlZlwiKSxpPWkmJi8jW0EtWmEtel0vLnRlc3QoaSkmJmkucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLyxcIlwiKSk7dmFyIG89aSYmdChpKTtyZXR1cm4gbyYmby5sZW5ndGg/bzplLnBhcmVudCgpfWZ1bmN0aW9uIGkoaSl7aSYmMz09PWkud2hpY2h8fCh0KG4pLnJlbW92ZSgpLHQocykuZWFjaChmdW5jdGlvbigpe3ZhciBvPXQodGhpcyksbj1lKG8pLHM9e3JlbGF0ZWRUYXJnZXQ6dGhpc307bi5oYXNDbGFzcyhcIm9wZW5cIikmJihpJiZcImNsaWNrXCI9PWkudHlwZSYmL2lucHV0fHRleHRhcmVhL2kudGVzdChpLnRhcmdldC50YWdOYW1lKSYmdC5jb250YWlucyhuWzBdLGkudGFyZ2V0KXx8KG4udHJpZ2dlcihpPXQuRXZlbnQoXCJoaWRlLmJzLmRyb3Bkb3duXCIscykpLGkuaXNEZWZhdWx0UHJldmVudGVkKCl8fChvLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKSxuLnJlbW92ZUNsYXNzKFwib3BlblwiKS50cmlnZ2VyKHQuRXZlbnQoXCJoaWRkZW4uYnMuZHJvcGRvd25cIixzKSkpKSl9KSl9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxvPWkuZGF0YShcImJzLmRyb3Bkb3duXCIpO298fGkuZGF0YShcImJzLmRyb3Bkb3duXCIsbz1uZXcgYSh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJm9bZV0uY2FsbChpKX0pfXZhciBuPVwiLmRyb3Bkb3duLWJhY2tkcm9wXCIscz0nW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nLGE9ZnVuY3Rpb24oZSl7dChlKS5vbihcImNsaWNrLmJzLmRyb3Bkb3duXCIsdGhpcy50b2dnbGUpfTthLlZFUlNJT049XCIzLjMuN1wiLGEucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihvKXt2YXIgbj10KHRoaXMpO2lmKCFuLmlzKFwiLmRpc2FibGVkLCA6ZGlzYWJsZWRcIikpe3ZhciBzPWUobiksYT1zLmhhc0NsYXNzKFwib3BlblwiKTtpZihpKCksIWEpe1wib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJiFzLmNsb3Nlc3QoXCIubmF2YmFyLW5hdlwiKS5sZW5ndGgmJnQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuYWRkQ2xhc3MoXCJkcm9wZG93bi1iYWNrZHJvcFwiKS5pbnNlcnRBZnRlcih0KHRoaXMpKS5vbihcImNsaWNrXCIsaSk7dmFyIHI9e3JlbGF0ZWRUYXJnZXQ6dGhpc307aWYocy50cmlnZ2VyKG89dC5FdmVudChcInNob3cuYnMuZHJvcGRvd25cIixyKSksby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47bi50cmlnZ2VyKFwiZm9jdXNcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIikscy50b2dnbGVDbGFzcyhcIm9wZW5cIikudHJpZ2dlcih0LkV2ZW50KFwic2hvd24uYnMuZHJvcGRvd25cIixyKSl9cmV0dXJuITF9fSxhLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKGkpe2lmKC8oMzh8NDB8Mjd8MzIpLy50ZXN0KGkud2hpY2gpJiYhL2lucHV0fHRleHRhcmVhL2kudGVzdChpLnRhcmdldC50YWdOYW1lKSl7dmFyIG89dCh0aGlzKTtpZihpLnByZXZlbnREZWZhdWx0KCksaS5zdG9wUHJvcGFnYXRpb24oKSwhby5pcyhcIi5kaXNhYmxlZCwgOmRpc2FibGVkXCIpKXt2YXIgbj1lKG8pLGE9bi5oYXNDbGFzcyhcIm9wZW5cIik7aWYoIWEmJjI3IT1pLndoaWNofHxhJiYyNz09aS53aGljaClyZXR1cm4gMjc9PWkud2hpY2gmJm4uZmluZChzKS50cmlnZ2VyKFwiZm9jdXNcIiksby50cmlnZ2VyKFwiY2xpY2tcIik7dmFyIHI9bi5maW5kKFwiLmRyb3Bkb3duLW1lbnUgbGk6bm90KC5kaXNhYmxlZCk6dmlzaWJsZSBhXCIpO2lmKHIubGVuZ3RoKXt2YXIgbD1yLmluZGV4KGkudGFyZ2V0KTszOD09aS53aGljaCYmbD4wJiZsLS0sNDA9PWkud2hpY2gmJmw8ci5sZW5ndGgtMSYmbCsrLH5sfHwobD0wKSxyLmVxKGwpLnRyaWdnZXIoXCJmb2N1c1wiKX19fX07dmFyIHI9dC5mbi5kcm9wZG93bjt0LmZuLmRyb3Bkb3duPW8sdC5mbi5kcm9wZG93bi5Db25zdHJ1Y3Rvcj1hLHQuZm4uZHJvcGRvd24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmRyb3Bkb3duPXIsdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLGkpLm9uKFwiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGlcIixcIi5kcm9wZG93biBmb3JtXCIsZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKFwiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGlcIixzLGEucHJvdG90eXBlLnRvZ2dsZSkub24oXCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIscyxhLnByb3RvdHlwZS5rZXlkb3duKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixcIi5kcm9wZG93bi1tZW51XCIsYS5wcm90b3R5cGUua2V5ZG93bil9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlLG8pe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMubW9kYWxcIiksYT10LmV4dGVuZCh7fSxpLkRFRkFVTFRTLG4uZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKTtzfHxuLmRhdGEoXCJicy5tb2RhbFwiLHM9bmV3IGkodGhpcyxhKSksXCJzdHJpbmdcIj09dHlwZW9mIGU/c1tlXShvKTphLnNob3cmJnMuc2hvdyhvKX0pfXZhciBpPWZ1bmN0aW9uKGUsaSl7dGhpcy5vcHRpb25zPWksdGhpcy4kYm9keT10KGRvY3VtZW50LmJvZHkpLHRoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLiRkaWFsb2c9dGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWRpYWxvZ1wiKSx0aGlzLiRiYWNrZHJvcD1udWxsLHRoaXMuaXNTaG93bj1udWxsLHRoaXMub3JpZ2luYWxCb2R5UGFkPW51bGwsdGhpcy5zY3JvbGxiYXJXaWR0aD0wLHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLm9wdGlvbnMucmVtb3RlJiZ0aGlzLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtY29udGVudFwiKS5sb2FkKHRoaXMub3B0aW9ucy5yZW1vdGUsdC5wcm94eShmdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihcImxvYWRlZC5icy5tb2RhbFwiKX0sdGhpcykpfTtpLlZFUlNJT049XCIzLjMuN1wiLGkuVFJBTlNJVElPTl9EVVJBVElPTj0zMDAsaS5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxpLkRFRkFVTFRTPXtiYWNrZHJvcDohMCxrZXlib2FyZDohMCxzaG93OiEwfSxpLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNTaG93bj90aGlzLmhpZGUoKTp0aGlzLnNob3codCl9LGkucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oZSl7dmFyIG89dGhpcyxuPXQuRXZlbnQoXCJzaG93LmJzLm1vZGFsXCIse3JlbGF0ZWRUYXJnZXQ6ZX0pO3RoaXMuJGVsZW1lbnQudHJpZ2dlcihuKSx0aGlzLmlzU2hvd258fG4uaXNEZWZhdWx0UHJldmVudGVkKCl8fCh0aGlzLmlzU2hvd249ITAsdGhpcy5jaGVja1Njcm9sbGJhcigpLHRoaXMuc2V0U2Nyb2xsYmFyKCksdGhpcy4kYm9keS5hZGRDbGFzcyhcIm1vZGFsLW9wZW5cIiksdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsdC5wcm94eSh0aGlzLmhpZGUsdGhpcykpLHRoaXMuJGRpYWxvZy5vbihcIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtvLiRlbGVtZW50Lm9uZShcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKGUpe3QoZS50YXJnZXQpLmlzKG8uJGVsZW1lbnQpJiYoby5pZ25vcmVCYWNrZHJvcENsaWNrPSEwKX0pfSksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3ZhciBuPXQuc3VwcG9ydC50cmFuc2l0aW9uJiZvLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKTtvLiRlbGVtZW50LnBhcmVudCgpLmxlbmd0aHx8by4kZWxlbWVudC5hcHBlbmRUbyhvLiRib2R5KSxvLiRlbGVtZW50LnNob3coKS5zY3JvbGxUb3AoMCksby5hZGp1c3REaWFsb2coKSxuJiZvLiRlbGVtZW50WzBdLm9mZnNldFdpZHRoLG8uJGVsZW1lbnQuYWRkQ2xhc3MoXCJpblwiKSxvLmVuZm9yY2VGb2N1cygpO3ZhciBzPXQuRXZlbnQoXCJzaG93bi5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmV9KTtuP28uJGRpYWxvZy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe28uJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIocyl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pOm8uJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpLnRyaWdnZXIocyl9KSl9LGkucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oZSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLGU9dC5FdmVudChcImhpZGUuYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLHRoaXMuaXNTaG93biYmIWUuaXNEZWZhdWx0UHJldmVudGVkKCkmJih0aGlzLmlzU2hvd249ITEsdGhpcy5lc2NhcGUoKSx0aGlzLnJlc2l6ZSgpLHQoZG9jdW1lbnQpLm9mZihcImZvY3VzaW4uYnMubW9kYWxcIiksdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImluXCIpLm9mZihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIikub2ZmKFwibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsXCIpLHRoaXMuJGRpYWxvZy5vZmYoXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKSx0LnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIix0LnByb3h5KHRoaXMuaGlkZU1vZGFsLHRoaXMpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pOnRoaXMuaGlkZU1vZGFsKCkpfSxpLnByb3RvdHlwZS5lbmZvcmNlRm9jdXM9ZnVuY3Rpb24oKXt0KGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLm9uKFwiZm9jdXNpbi5icy5tb2RhbFwiLHQucHJveHkoZnVuY3Rpb24odCl7ZG9jdW1lbnQ9PT10LnRhcmdldHx8dGhpcy4kZWxlbWVudFswXT09PXQudGFyZ2V0fHx0aGlzLiRlbGVtZW50Lmhhcyh0LnRhcmdldCkubGVuZ3RofHx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0sdGhpcykpfSxpLnByb3RvdHlwZS5lc2NhcGU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5rZXlib2FyZD90aGlzLiRlbGVtZW50Lm9uKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsdC5wcm94eShmdW5jdGlvbih0KXsyNz09dC53aGljaCYmdGhpcy5oaWRlKCl9LHRoaXMpKTp0aGlzLmlzU2hvd258fHRoaXMuJGVsZW1lbnQub2ZmKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIpfSxpLnByb3RvdHlwZS5yZXNpemU9ZnVuY3Rpb24oKXt0aGlzLmlzU2hvd24/dCh3aW5kb3cpLm9uKFwicmVzaXplLmJzLm1vZGFsXCIsdC5wcm94eSh0aGlzLmhhbmRsZVVwZGF0ZSx0aGlzKSk6dCh3aW5kb3cpLm9mZihcInJlc2l6ZS5icy5tb2RhbFwiKX0saS5wcm90b3R5cGUuaGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLiRlbGVtZW50LmhpZGUoKSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7dC4kYm9keS5yZW1vdmVDbGFzcyhcIm1vZGFsLW9wZW5cIiksdC5yZXNldEFkanVzdG1lbnRzKCksdC5yZXNldFNjcm9sbGJhcigpLHQuJGVsZW1lbnQudHJpZ2dlcihcImhpZGRlbi5icy5tb2RhbFwiKX0pfSxpLnByb3RvdHlwZS5yZW1vdmVCYWNrZHJvcD1mdW5jdGlvbigpe3RoaXMuJGJhY2tkcm9wJiZ0aGlzLiRiYWNrZHJvcC5yZW1vdmUoKSx0aGlzLiRiYWNrZHJvcD1udWxsfSxpLnByb3RvdHlwZS5iYWNrZHJvcD1mdW5jdGlvbihlKXt2YXIgbz10aGlzLG49dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik/XCJmYWRlXCI6XCJcIjtpZih0aGlzLmlzU2hvd24mJnRoaXMub3B0aW9ucy5iYWNrZHJvcCl7dmFyIHM9dC5zdXBwb3J0LnRyYW5zaXRpb24mJm47aWYodGhpcy4kYmFja2Ryb3A9dChkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKS5hZGRDbGFzcyhcIm1vZGFsLWJhY2tkcm9wIFwiK24pLmFwcGVuZFRvKHRoaXMuJGJvZHkpLHRoaXMuJGVsZW1lbnQub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsdC5wcm94eShmdW5jdGlvbih0KXtpZih0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2spcmV0dXJuIHZvaWQodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExKTt0LnRhcmdldD09PXQuY3VycmVudFRhcmdldCYmKFwic3RhdGljXCI9PXRoaXMub3B0aW9ucy5iYWNrZHJvcD90aGlzLiRlbGVtZW50WzBdLmZvY3VzKCk6dGhpcy5oaWRlKCkpfSx0aGlzKSkscyYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoXCJpblwiKSwhZSlyZXR1cm47cz90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmUoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcyhcImluXCIpO3ZhciBhPWZ1bmN0aW9uKCl7by5yZW1vdmVCYWNrZHJvcCgpLGUmJmUoKX07dC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGJhY2tkcm9wLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YSgpfWVsc2UgZSYmZSgpfSxpLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmFkanVzdERpYWxvZygpfSxpLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdD90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiF0P3RoaXMuc2Nyb2xsYmFyV2lkdGg6XCJcIn0pfSxpLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OlwiXCIscGFkZGluZ1JpZ2h0OlwiXCJ9KX0saS5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD13aW5kb3cuaW5uZXJXaWR0aDtpZighdCl7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Q9ZS5yaWdodC1NYXRoLmFicyhlLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDx0LHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGkucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciB0PXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiKXx8MCwxMCk7dGhpcy5vcmlnaW5hbEJvZHlQYWQ9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHR8fFwiXCIsdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsdCt0aGlzLnNjcm9sbGJhcldpZHRoKX0saS5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIix0aGlzLm9yaWdpbmFsQm9keVBhZCl9LGkucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NOYW1lPVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0aGlzLiRib2R5LmFwcGVuZCh0KTt2YXIgZT10Lm9mZnNldFdpZHRoLXQuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQodCksZX07dmFyIG89dC5mbi5tb2RhbDt0LmZuLm1vZGFsPWUsdC5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1pLHQuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLm1vZGFsPW8sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5tb2RhbC5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsZnVuY3Rpb24oaSl7dmFyIG89dCh0aGlzKSxuPW8uYXR0cihcImhyZWZcIikscz10KG8uYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxuJiZuLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpLGE9cy5kYXRhKFwiYnMubW9kYWxcIik/XCJ0b2dnbGVcIjp0LmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChuKSYmbn0scy5kYXRhKCksby5kYXRhKCkpO28uaXMoXCJhXCIpJiZpLnByZXZlbnREZWZhdWx0KCkscy5vbmUoXCJzaG93LmJzLm1vZGFsXCIsZnVuY3Rpb24odCl7dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8cy5vbmUoXCJoaWRkZW4uYnMubW9kYWxcIixmdW5jdGlvbigpe28uaXMoXCI6dmlzaWJsZVwiKSYmby50cmlnZ2VyKFwiZm9jdXNcIil9KX0pLGUuY2FsbChzLGEsdGhpcyl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz10KHRoaXMpLG49by5kYXRhKFwiYnMudG9vbHRpcFwiKSxzPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlOyFuJiYvZGVzdHJveXxoaWRlLy50ZXN0KGUpfHwobnx8by5kYXRhKFwiYnMudG9vbHRpcFwiLG49bmV3IGkodGhpcyxzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJm5bZV0oKSl9KX12YXIgaT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1udWxsLHRoaXMub3B0aW9ucz1udWxsLHRoaXMuZW5hYmxlZD1udWxsLHRoaXMudGltZW91dD1udWxsLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMuJGVsZW1lbnQ9bnVsbCx0aGlzLmluU3RhdGU9bnVsbCx0aGlzLmluaXQoXCJ0b29sdGlwXCIsdCxlKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGkuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6XCJ0b3BcIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6XCJob3ZlciBmb2N1c1wiLHRpdGxlOlwiXCIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMSx2aWV3cG9ydDp7c2VsZWN0b3I6XCJib2R5XCIscGFkZGluZzowfX0saS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlLGksbyl7aWYodGhpcy5lbmFibGVkPSEwLHRoaXMudHlwZT1lLHRoaXMuJGVsZW1lbnQ9dChpKSx0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKG8pLHRoaXMuJHZpZXdwb3J0PXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdCh0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZpZXdwb3J0KT90aGlzLm9wdGlvbnMudmlld3BvcnQuY2FsbCh0aGlzLHRoaXMuJGVsZW1lbnQpOnRoaXMub3B0aW9ucy52aWV3cG9ydC5zZWxlY3Rvcnx8dGhpcy5vcHRpb25zLnZpZXdwb3J0KSx0aGlzLmluU3RhdGU9e2NsaWNrOiExLGhvdmVyOiExLGZvY3VzOiExfSx0aGlzLiRlbGVtZW50WzBdaW5zdGFuY2VvZiBkb2N1bWVudC5jb25zdHJ1Y3RvciYmIXRoaXMub3B0aW9ucy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoXCJgc2VsZWN0b3JgIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGluaXRpYWxpemluZyBcIit0aGlzLnR5cGUrXCIgb24gdGhlIHdpbmRvdy5kb2N1bWVudCBvYmplY3QhXCIpO2Zvcih2YXIgbj10aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdChcIiBcIikscz1uLmxlbmd0aDtzLS07KXt2YXIgYT1uW3NdO2lmKFwiY2xpY2tcIj09YSl0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suXCIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3Rvcix0LnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTtlbHNlIGlmKFwibWFudWFsXCIhPWEpe3ZhciByPVwiaG92ZXJcIj09YT9cIm1vdXNlZW50ZXJcIjpcImZvY3VzaW5cIixsPVwiaG92ZXJcIj09YT9cIm1vdXNlbGVhdmVcIjpcImZvY3Vzb3V0XCI7dGhpcy4kZWxlbWVudC5vbihyK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsdC5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGwrXCIuXCIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3Rvcix0LnByb3h5KHRoaXMubGVhdmUsdGhpcykpfX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6XCJtYW51YWxcIixzZWxlY3RvcjpcIlwifSk6dGhpcy5maXhUaXRsZSgpfSxpLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBpLkRFRkFVTFRTfSxpLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxlKSxlLmRlbGF5JiZcIm51bWJlclwiPT10eXBlb2YgZS5kZWxheSYmKGUuZGVsYXk9e3Nob3c6ZS5kZWxheSxoaWRlOmUuZGVsYXl9KSxlfSxpLnByb3RvdHlwZS5nZXREZWxlZ2F0ZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT17fSxpPXRoaXMuZ2V0RGVmYXVsdHMoKTtyZXR1cm4gdGhpcy5fb3B0aW9ucyYmdC5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24odCxvKXtpW3RdIT1vJiYoZVt0XT1vKX0pLGV9LGkucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGUpe3ZhciBpPWUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2U6dChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpO3JldHVybiBpfHwoaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksdChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsaSkpLGUgaW5zdGFuY2VvZiB0LkV2ZW50JiYoaS5pblN0YXRlW1wiZm9jdXNpblwiPT1lLnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ITApLGkudGlwKCkuaGFzQ2xhc3MoXCJpblwiKXx8XCJpblwiPT1pLmhvdmVyU3RhdGU/dm9pZChpLmhvdmVyU3RhdGU9XCJpblwiKTooY2xlYXJUaW1lb3V0KGkudGltZW91dCksaS5ob3ZlclN0YXRlPVwiaW5cIixpLm9wdGlvbnMuZGVsYXkmJmkub3B0aW9ucy5kZWxheS5zaG93P3ZvaWQoaS50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcImluXCI9PWkuaG92ZXJTdGF0ZSYmaS5zaG93KCl9LGkub3B0aW9ucy5kZWxheS5zaG93KSk6aS5zaG93KCkpfSxpLnByb3RvdHlwZS5pc0luU3RhdGVUcnVlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuaW5TdGF0ZSlpZih0aGlzLmluU3RhdGVbdF0pcmV0dXJuITA7cmV0dXJuITF9LGkucHJvdG90eXBlLmxlYXZlPWZ1bmN0aW9uKGUpe3ZhciBpPWUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2U6dChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpO2lmKGl8fChpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSx0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxpKSksZSBpbnN0YW5jZW9mIHQuRXZlbnQmJihpLmluU3RhdGVbXCJmb2N1c291dFwiPT1lLnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ITEpLCFpLmlzSW5TdGF0ZVRydWUoKSl7aWYoY2xlYXJUaW1lb3V0KGkudGltZW91dCksaS5ob3ZlclN0YXRlPVwib3V0XCIsIWkub3B0aW9ucy5kZWxheXx8IWkub3B0aW9ucy5kZWxheS5oaWRlKXJldHVybiBpLmhpZGUoKTtpLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wib3V0XCI9PWkuaG92ZXJTdGF0ZSYmaS5oaWRlKCl9LGkub3B0aW9ucy5kZWxheS5oaWRlKX19LGkucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgZT10LkV2ZW50KFwic2hvdy5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihlKTt2YXIgbz10LmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy4kZWxlbWVudFswXSk7aWYoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IW8pcmV0dXJuO3ZhciBuPXRoaXMscz10aGlzLnRpcCgpLGE9dGhpcy5nZXRVSUQodGhpcy50eXBlKTt0aGlzLnNldENvbnRlbnQoKSxzLmF0dHIoXCJpZFwiLGEpLHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixhKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZzLmFkZENsYXNzKFwiZmFkZVwiKTt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLHNbMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxsPS9cXHM/YXV0bz9cXHM/L2ksaD1sLnRlc3Qocik7aCYmKHI9ci5yZXBsYWNlKGwsXCJcIil8fFwidG9wXCIpLHMuZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheTpcImJsb2NrXCJ9KS5hZGRDbGFzcyhyKS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLHRoaXMpLHRoaXMub3B0aW9ucy5jb250YWluZXI/cy5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTpzLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImluc2VydGVkLmJzLlwiK3RoaXMudHlwZSk7dmFyIGQ9dGhpcy5nZXRQb3NpdGlvbigpLHA9c1swXS5vZmZzZXRXaWR0aCxjPXNbMF0ub2Zmc2V0SGVpZ2h0O2lmKGgpe3ZhciBmPXIsdT10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtyPVwiYm90dG9tXCI9PXImJmQuYm90dG9tK2M+dS5ib3R0b20/XCJ0b3BcIjpcInRvcFwiPT1yJiZkLnRvcC1jPHUudG9wP1wiYm90dG9tXCI6XCJyaWdodFwiPT1yJiZkLnJpZ2h0K3A+dS53aWR0aD9cImxlZnRcIjpcImxlZnRcIj09ciYmZC5sZWZ0LXA8dS5sZWZ0P1wicmlnaHRcIjpyLHMucmVtb3ZlQ2xhc3MoZikuYWRkQ2xhc3Mocil9dmFyIGc9dGhpcy5nZXRDYWxjdWxhdGVkT2Zmc2V0KHIsZCxwLGMpO3RoaXMuYXBwbHlQbGFjZW1lbnQoZyxyKTt2YXIgbT1mdW5jdGlvbigpe3ZhciB0PW4uaG92ZXJTdGF0ZTtuLiRlbGVtZW50LnRyaWdnZXIoXCJzaG93bi5icy5cIituLnR5cGUpLG4uaG92ZXJTdGF0ZT1udWxsLFwib3V0XCI9PXQmJm4ubGVhdmUobil9O3Quc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoXCJmYWRlXCIpP3Mub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsbSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKTptKCl9fSxpLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihlLGkpe3ZhciBvPXRoaXMudGlwKCksbj1vWzBdLm9mZnNldFdpZHRoLHM9b1swXS5vZmZzZXRIZWlnaHQsYT1wYXJzZUludChvLmNzcyhcIm1hcmdpbi10b3BcIiksMTApLHI9cGFyc2VJbnQoby5jc3MoXCJtYXJnaW4tbGVmdFwiKSwxMCk7aXNOYU4oYSkmJihhPTApLGlzTmFOKHIpJiYocj0wKSxlLnRvcCs9YSxlLmxlZnQrPXIsdC5vZmZzZXQuc2V0T2Zmc2V0KG9bMF0sdC5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKHQpe28uY3NzKHt0b3A6TWF0aC5yb3VuZCh0LnRvcCksbGVmdDpNYXRoLnJvdW5kKHQubGVmdCl9KX19LGUpLDApLG8uYWRkQ2xhc3MoXCJpblwiKTt2YXIgbD1vWzBdLm9mZnNldFdpZHRoLGg9b1swXS5vZmZzZXRIZWlnaHQ7XCJ0b3BcIj09aSYmaCE9cyYmKGUudG9wPWUudG9wK3MtaCk7dmFyIGQ9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoaSxlLGwsaCk7ZC5sZWZ0P2UubGVmdCs9ZC5sZWZ0OmUudG9wKz1kLnRvcDt2YXIgcD0vdG9wfGJvdHRvbS8udGVzdChpKSxjPXA/MipkLmxlZnQtbitsOjIqZC50b3AtcytoLGY9cD9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIjtvLm9mZnNldChlKSx0aGlzLnJlcGxhY2VBcnJvdyhjLG9bMF1bZl0scCl9LGkucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbih0LGUsaSl7dGhpcy5hcnJvdygpLmNzcyhpP1wibGVmdFwiOlwidG9wXCIsNTAqKDEtdC9lKStcIiVcIikuY3NzKGk/XCJ0b3BcIjpcImxlZnRcIixcIlwiKX0saS5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudGlwKCksZT10aGlzLmdldFRpdGxlKCk7dC5maW5kKFwiLnRvb2x0aXAtaW5uZXJcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGUpLHQucmVtb3ZlQ2xhc3MoXCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodFwiKX0saS5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihlKXtmdW5jdGlvbiBvKCl7XCJpblwiIT1uLmhvdmVyU3RhdGUmJnMuZGV0YWNoKCksbi4kZWxlbWVudCYmbi4kZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLlwiK24udHlwZSksZSYmZSgpfXZhciBuPXRoaXMscz10KHRoaXMuJHRpcCksYT10LkV2ZW50KFwiaGlkZS5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihhKSwhYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm4gcy5yZW1vdmVDbGFzcyhcImluXCIpLHQuc3VwcG9ydC50cmFuc2l0aW9uJiZzLmhhc0NsYXNzKFwiZmFkZVwiKT9zLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6bygpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXN9LGkucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudDsodC5hdHRyKFwidGl0bGVcIil8fFwic3RyaW5nXCIhPXR5cGVvZiB0LmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpKSYmdC5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiLHQuYXR0cihcInRpdGxlXCIpfHxcIlwiKS5hdHRyKFwidGl0bGVcIixcIlwiKX0saS5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGkucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGUpe2U9ZXx8dGhpcy4kZWxlbWVudDt2YXIgaT1lWzBdLG89XCJCT0RZXCI9PWkudGFnTmFtZSxuPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09bi53aWR0aCYmKG49dC5leHRlbmQoe30sbix7d2lkdGg6bi5yaWdodC1uLmxlZnQsaGVpZ2h0Om4uYm90dG9tLW4udG9wfSkpO3ZhciBzPXdpbmRvdy5TVkdFbGVtZW50JiZpIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQsYT1vP3t0b3A6MCxsZWZ0OjB9OnM/bnVsbDplLm9mZnNldCgpLHI9e3Njcm9sbDpvP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOmUuc2Nyb2xsVG9wKCl9LGw9bz97d2lkdGg6dCh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OnQod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gdC5leHRlbmQoe30sbixyLGwsYSl9LGkucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24odCxlLGksbyl7cmV0dXJuXCJib3R0b21cIj09dD97dG9wOmUudG9wK2UuaGVpZ2h0LGxlZnQ6ZS5sZWZ0K2Uud2lkdGgvMi1pLzJ9OlwidG9wXCI9PXQ/e3RvcDplLnRvcC1vLGxlZnQ6ZS5sZWZ0K2Uud2lkdGgvMi1pLzJ9OlwibGVmdFwiPT10P3t0b3A6ZS50b3ArZS5oZWlnaHQvMi1vLzIsbGVmdDplLmxlZnQtaX06e3RvcDplLnRvcCtlLmhlaWdodC8yLW8vMixsZWZ0OmUubGVmdCtlLndpZHRofX0saS5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhPWZ1bmN0aW9uKHQsZSxpLG8pe3ZhciBuPXt0b3A6MCxsZWZ0OjB9O2lmKCF0aGlzLiR2aWV3cG9ydClyZXR1cm4gbjt2YXIgcz10aGlzLm9wdGlvbnMudmlld3BvcnQmJnRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nfHwwLGE9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7aWYoL3JpZ2h0fGxlZnQvLnRlc3QodCkpe3ZhciByPWUudG9wLXMtYS5zY3JvbGwsbD1lLnRvcCtzLWEuc2Nyb2xsK287cjxhLnRvcD9uLnRvcD1hLnRvcC1yOmw+YS50b3ArYS5oZWlnaHQmJihuLnRvcD1hLnRvcCthLmhlaWdodC1sKX1lbHNle3ZhciBoPWUubGVmdC1zLGQ9ZS5sZWZ0K3MraTtoPGEubGVmdD9uLmxlZnQ9YS5sZWZ0LWg6ZD5hLnJpZ2h0JiYobi5sZWZ0PWEubGVmdCthLndpZHRoLWQpfXJldHVybiBufSxpLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQsZT10aGlzLm9wdGlvbnM7cmV0dXJuIHQuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIil8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRpdGxlP2UudGl0bGUuY2FsbCh0WzBdKTplLnRpdGxlKX0saS5wcm90b3R5cGUuZ2V0VUlEPWZ1bmN0aW9uKHQpe2Rve3QrPX5+KDFlNipNYXRoLnJhbmRvbSgpKX13aGlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSk7cmV0dXJuIHR9LGkucHJvdG90eXBlLnRpcD1mdW5jdGlvbigpe2lmKCF0aGlzLiR0aXAmJih0aGlzLiR0aXA9dCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpLDEhPXRoaXMuJHRpcC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrXCIgYHRlbXBsYXRlYCBvcHRpb24gbXVzdCBjb25zaXN0IG9mIGV4YWN0bHkgMSB0b3AtbGV2ZWwgZWxlbWVudCFcIik7cmV0dXJuIHRoaXMuJHRpcH0saS5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZChcIi50b29sdGlwLWFycm93XCIpfSxpLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGkucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LGkucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0saS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7ZSYmKChpPXQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKSl8fChpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSx0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxpKSkpLGU/KGkuaW5TdGF0ZS5jbGljaz0haS5pblN0YXRlLmNsaWNrLGkuaXNJblN0YXRlVHJ1ZSgpP2kuZW50ZXIoaSk6aS5sZWF2ZShpKSk6aS50aXAoKS5oYXNDbGFzcyhcImluXCIpP2kubGVhdmUoaSk6aS5lbnRlcihpKX0saS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy5oaWRlKGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoXCIuXCIrdC50eXBlKS5yZW1vdmVEYXRhKFwiYnMuXCIrdC50eXBlKSx0LiR0aXAmJnQuJHRpcC5kZXRhY2goKSx0LiR0aXA9bnVsbCx0LiRhcnJvdz1udWxsLHQuJHZpZXdwb3J0PW51bGwsdC4kZWxlbWVudD1udWxsfSl9O3ZhciBvPXQuZm4udG9vbHRpcDt0LmZuLnRvb2x0aXA9ZSx0LmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9aSx0LmZuLnRvb2x0aXAubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLnRvb2x0aXA9byx0aGlzfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz10KHRoaXMpLG49by5kYXRhKFwiYnMucG9wb3ZlclwiKSxzPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlOyFuJiYvZGVzdHJveXxoaWRlLy50ZXN0KGUpfHwobnx8by5kYXRhKFwiYnMucG9wb3ZlclwiLG49bmV3IGkodGhpcyxzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJm5bZV0oKSl9KX12YXIgaT1mdW5jdGlvbih0LGUpe3RoaXMuaW5pdChcInBvcG92ZXJcIix0LGUpfTtpZighdC5mbi50b29sdGlwKXRocm93IG5ldyBFcnJvcihcIlBvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qc1wiKTtpLlZFUlNJT049XCIzLjMuN1wiLGkuREVGQVVMVFM9dC5leHRlbmQoe30sdC5mbi50b29sdGlwLkNvbnN0cnVjdG9yLkRFRkFVTFRTLHtwbGFjZW1lbnQ6XCJyaWdodFwiLHRyaWdnZXI6XCJjbGlja1wiLGNvbnRlbnQ6XCJcIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48L2gzPjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nfSksaS5wcm90b3R5cGU9dC5leHRlbmQoe30sdC5mbi50b29sdGlwLkNvbnN0cnVjdG9yLnByb3RvdHlwZSksaS5wcm90b3R5cGUuY29uc3RydWN0b3I9aSxpLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBpLkRFRkFVTFRTfSxpLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50aXAoKSxlPXRoaXMuZ2V0VGl0bGUoKSxpPXRoaXMuZ2V0Q29udGVudCgpO3QuZmluZChcIi5wb3BvdmVyLXRpdGxlXCIpW3RoaXMub3B0aW9ucy5odG1sP1wiaHRtbFwiOlwidGV4dFwiXShlKSx0LmZpbmQoXCIucG9wb3Zlci1jb250ZW50XCIpLmNoaWxkcmVuKCkuZGV0YWNoKCkuZW5kKClbdGhpcy5vcHRpb25zLmh0bWw/XCJzdHJpbmdcIj09dHlwZW9mIGk/XCJodG1sXCI6XCJhcHBlbmRcIjpcInRleHRcIl0oaSksdC5yZW1vdmVDbGFzcyhcImZhZGUgdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0IGluXCIpLHQuZmluZChcIi5wb3BvdmVyLXRpdGxlXCIpLmh0bWwoKXx8dC5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaGlkZSgpfSxpLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8dGhpcy5nZXRDb250ZW50KCl9LGkucHJvdG90eXBlLmdldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50LGU9dGhpcy5vcHRpb25zO3JldHVybiB0LmF0dHIoXCJkYXRhLWNvbnRlbnRcIil8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNvbnRlbnQ/ZS5jb250ZW50LmNhbGwodFswXSk6ZS5jb250ZW50KX0saS5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZChcIi5hcnJvd1wiKX07dmFyIG89dC5mbi5wb3BvdmVyO3QuZm4ucG9wb3Zlcj1lLHQuZm4ucG9wb3Zlci5Db25zdHJ1Y3Rvcj1pLHQuZm4ucG9wb3Zlci5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4ucG9wb3Zlcj1vLHRoaXN9fShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoaSxvKXt0aGlzLiRib2R5PXQoZG9jdW1lbnQuYm9keSksdGhpcy4kc2Nyb2xsRWxlbWVudD10KHQoaSkuaXMoZG9jdW1lbnQuYm9keSk/d2luZG93OmkpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxlLkRFRkFVTFRTLG8pLHRoaXMuc2VsZWN0b3I9KHRoaXMub3B0aW9ucy50YXJnZXR8fFwiXCIpK1wiIC5uYXYgbGkgPiBhXCIsdGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuc2Nyb2xsSGVpZ2h0PTAsdGhpcy4kc2Nyb2xsRWxlbWVudC5vbihcInNjcm9sbC5icy5zY3JvbGxzcHlcIix0LnByb3h5KHRoaXMucHJvY2Vzcyx0aGlzKSksdGhpcy5yZWZyZXNoKCksdGhpcy5wcm9jZXNzKCl9ZnVuY3Rpb24gaShpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG89dCh0aGlzKSxuPW8uZGF0YShcImJzLnNjcm9sbHNweVwiKSxzPVwib2JqZWN0XCI9PXR5cGVvZiBpJiZpO258fG8uZGF0YShcImJzLnNjcm9sbHNweVwiLG49bmV3IGUodGhpcyxzKSksXCJzdHJpbmdcIj09dHlwZW9mIGkmJm5baV0oKX0pfWUuVkVSU0lPTj1cIjMuMy43XCIsZS5ERUZBVUxUUz17b2Zmc2V0OjEwfSxlLnByb3RvdHlwZS5nZXRTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kc2Nyb2xsRWxlbWVudFswXS5zY3JvbGxIZWlnaHR8fE1hdGgubWF4KHRoaXMuJGJvZHlbMF0uc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQpfSxlLnByb3RvdHlwZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPVwib2Zmc2V0XCIsbz0wO3RoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5zY3JvbGxIZWlnaHQ9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSx0LmlzV2luZG93KHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0pfHwoaT1cInBvc2l0aW9uXCIsbz10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpKSx0aGlzLiRib2R5LmZpbmQodGhpcy5zZWxlY3RvcikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxuPWUuZGF0YShcInRhcmdldFwiKXx8ZS5hdHRyKFwiaHJlZlwiKSxzPS9eIy4vLnRlc3QobikmJnQobik7cmV0dXJuIHMmJnMubGVuZ3RoJiZzLmlzKFwiOnZpc2libGVcIikmJltbc1tpXSgpLnRvcCtvLG5dXXx8bnVsbH0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkuZWFjaChmdW5jdGlvbigpe2Uub2Zmc2V0cy5wdXNoKHRoaXNbMF0pLGUudGFyZ2V0cy5wdXNoKHRoaXNbMV0pfSl9LGUucHJvdG90eXBlLnByb2Nlc3M9ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkrdGhpcy5vcHRpb25zLm9mZnNldCxpPXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksbz10aGlzLm9wdGlvbnMub2Zmc2V0K2ktdGhpcy4kc2Nyb2xsRWxlbWVudC5oZWlnaHQoKSxuPXRoaXMub2Zmc2V0cyxzPXRoaXMudGFyZ2V0cyxhPXRoaXMuYWN0aXZlVGFyZ2V0O2lmKHRoaXMuc2Nyb2xsSGVpZ2h0IT1pJiZ0aGlzLnJlZnJlc2goKSxlPj1vKXJldHVybiBhIT0odD1zW3MubGVuZ3RoLTFdKSYmdGhpcy5hY3RpdmF0ZSh0KTtpZihhJiZlPG5bMF0pcmV0dXJuIHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5jbGVhcigpO2Zvcih0PW4ubGVuZ3RoO3QtLTspYSE9c1t0XSYmZT49blt0XSYmKHZvaWQgMD09PW5bdCsxXXx8ZTxuW3QrMV0pJiZ0aGlzLmFjdGl2YXRlKHNbdF0pfSxlLnByb3RvdHlwZS5hY3RpdmF0ZT1mdW5jdGlvbihlKXtcbnRoaXMuYWN0aXZlVGFyZ2V0PWUsdGhpcy5jbGVhcigpO3ZhciBpPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrZSsnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2UrJ1wiXScsbz10KGkpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtvLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKG89by5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLG8udHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0KHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIG89dC5mbi5zY3JvbGxzcHk7dC5mbi5zY3JvbGxzcHk9aSx0LmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1lLHQuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5zY3JvbGxzcHk9byx0aGlzfSx0KHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7aS5jYWxsKGUsZS5kYXRhKCkpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz10KHRoaXMpLG49by5kYXRhKFwiYnMudGFiXCIpO258fG8uZGF0YShcImJzLnRhYlwiLG49bmV3IGkodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuW2VdKCl9KX12YXIgaT1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQ9dChlKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGkucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQsaT1lLmNsb3Nlc3QoXCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpXCIpLG89ZS5kYXRhKFwidGFyZ2V0XCIpO2lmKG98fChvPWUuYXR0cihcImhyZWZcIiksbz1vJiZvLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sXCJcIikpLCFlLnBhcmVudChcImxpXCIpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXt2YXIgbj1pLmZpbmQoXCIuYWN0aXZlOmxhc3QgYVwiKSxzPXQuRXZlbnQoXCJoaWRlLmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KSxhPXQuRXZlbnQoXCJzaG93LmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0Om5bMF19KTtpZihuLnRyaWdnZXIocyksZS50cmlnZ2VyKGEpLCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhcy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIHI9dChvKTt0aGlzLmFjdGl2YXRlKGUuY2xvc2VzdChcImxpXCIpLGkpLHRoaXMuYWN0aXZhdGUocixyLnBhcmVudCgpLGZ1bmN0aW9uKCl7bi50cmlnZ2VyKHt0eXBlOlwiaGlkZGVuLmJzLnRhYlwiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pLGUudHJpZ2dlcih7dHlwZTpcInNob3duLmJzLnRhYlwiLHJlbGF0ZWRUYXJnZXQ6blswXX0pfSl9fX0saS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZSxvLG4pe2Z1bmN0aW9uIHMoKXthLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLmZpbmQoXCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSxlLmFkZENsYXNzKFwiYWN0aXZlXCIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLHI/KGVbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhcImluXCIpKTplLnJlbW92ZUNsYXNzKFwiZmFkZVwiKSxlLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmZS5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksbiYmbigpfXZhciBhPW8uZmluZChcIj4gLmFjdGl2ZVwiKSxyPW4mJnQuc3VwcG9ydC50cmFuc2l0aW9uJiYoYS5sZW5ndGgmJmEuaGFzQ2xhc3MoXCJmYWRlXCIpfHwhIW8uZmluZChcIj4gLmZhZGVcIikubGVuZ3RoKTthLmxlbmd0aCYmcj9hLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHMpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6cygpLGEucmVtb3ZlQ2xhc3MoXCJpblwiKX07dmFyIG89dC5mbi50YWI7dC5mbi50YWI9ZSx0LmZuLnRhYi5Db25zdHJ1Y3Rvcj1pLHQuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi50YWI9byx0aGlzfTt2YXIgbj1mdW5jdGlvbihpKXtpLnByZXZlbnREZWZhdWx0KCksZS5jYWxsKHQodGhpcyksXCJzaG93XCIpfTt0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nLG4pLm9uKFwiY2xpY2suYnMudGFiLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZT1cInBpbGxcIl0nLG4pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBvPXQodGhpcyksbj1vLmRhdGEoXCJicy5hZmZpeFwiKSxzPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlO258fG8uZGF0YShcImJzLmFmZml4XCIsbj1uZXcgaSh0aGlzLHMpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmbltlXSgpfSl9dmFyIGk9ZnVuY3Rpb24oZSxvKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saS5ERUZBVUxUUyxvKSx0aGlzLiR0YXJnZXQ9dCh0aGlzLm9wdGlvbnMudGFyZ2V0KS5vbihcInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaVwiLHQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKS5vbihcImNsaWNrLmJzLmFmZml4LmRhdGEtYXBpXCIsdC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PXQoZSksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5SRVNFVD1cImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b21cIixpLkRFRkFVTFRTPXtvZmZzZXQ6MCx0YXJnZXQ6d2luZG93fSxpLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbj10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCkscz10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGE9dGhpcy4kdGFyZ2V0LmhlaWdodCgpO2lmKG51bGwhPWkmJlwidG9wXCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gbjxpJiZcInRvcFwiO2lmKFwiYm90dG9tXCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gbnVsbCE9aT8hKG4rdGhpcy51bnBpbjw9cy50b3ApJiZcImJvdHRvbVwiOiEobithPD10LW8pJiZcImJvdHRvbVwiO3ZhciByPW51bGw9PXRoaXMuYWZmaXhlZCxsPXI/bjpzLnRvcCxoPXI/YTplO3JldHVybiBudWxsIT1pJiZuPD1pP1widG9wXCI6bnVsbCE9byYmbCtoPj10LW8mJlwiYm90dG9tXCJ9LGkucHJvdG90eXBlLmdldFBpbm5lZE9mZnNldD1mdW5jdGlvbigpe2lmKHRoaXMucGlubmVkT2Zmc2V0KXJldHVybiB0aGlzLnBpbm5lZE9mZnNldDt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGkuUkVTRVQpLmFkZENsYXNzKFwiYWZmaXhcIik7dmFyIHQ9dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLGU9dGhpcy4kZWxlbWVudC5vZmZzZXQoKTtyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ9ZS50b3AtdH0saS5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbldpdGhFdmVudExvb3A9ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KHQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpLDEpfSxpLnByb3RvdHlwZS5jaGVja1Bvc2l0aW9uPWZ1bmN0aW9uKCl7aWYodGhpcy4kZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpKXt2YXIgZT10aGlzLiRlbGVtZW50LmhlaWdodCgpLG89dGhpcy5vcHRpb25zLm9mZnNldCxuPW8udG9wLHM9by5ib3R0b20sYT1NYXRoLm1heCh0KGRvY3VtZW50KS5oZWlnaHQoKSx0KGRvY3VtZW50LmJvZHkpLmhlaWdodCgpKTtcIm9iamVjdFwiIT10eXBlb2YgbyYmKHM9bj1vKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiYobj1vLnRvcCh0aGlzLiRlbGVtZW50KSksXCJmdW5jdGlvblwiPT10eXBlb2YgcyYmKHM9by5ib3R0b20odGhpcy4kZWxlbWVudCkpO3ZhciByPXRoaXMuZ2V0U3RhdGUoYSxlLG4scyk7aWYodGhpcy5hZmZpeGVkIT1yKXtudWxsIT10aGlzLnVucGluJiZ0aGlzLiRlbGVtZW50LmNzcyhcInRvcFwiLFwiXCIpO3ZhciBsPVwiYWZmaXhcIisocj9cIi1cIityOlwiXCIpLGg9dC5FdmVudChsK1wiLmJzLmFmZml4XCIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihoKSxoLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybjt0aGlzLmFmZml4ZWQ9cix0aGlzLnVucGluPVwiYm90dG9tXCI9PXI/dGhpcy5nZXRQaW5uZWRPZmZzZXQoKTpudWxsLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoaS5SRVNFVCkuYWRkQ2xhc3MobCkudHJpZ2dlcihsLnJlcGxhY2UoXCJhZmZpeFwiLFwiYWZmaXhlZFwiKStcIi5icy5hZmZpeFwiKX1cImJvdHRvbVwiPT1yJiZ0aGlzLiRlbGVtZW50Lm9mZnNldCh7dG9wOmEtZS1zfSl9fTt2YXIgbz10LmZuLmFmZml4O3QuZm4uYWZmaXg9ZSx0LmZuLmFmZml4LkNvbnN0cnVjdG9yPWksdC5mbi5hZmZpeC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uYWZmaXg9byx0aGlzfSx0KHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXt0KCdbZGF0YS1zcHk9XCJhZmZpeFwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLG89aS5kYXRhKCk7by5vZmZzZXQ9by5vZmZzZXR8fHt9LG51bGwhPW8ub2Zmc2V0Qm90dG9tJiYoby5vZmZzZXQuYm90dG9tPW8ub2Zmc2V0Qm90dG9tKSxudWxsIT1vLm9mZnNldFRvcCYmKG8ub2Zmc2V0LnRvcD1vLm9mZnNldFRvcCksZS5jYWxsKGksbyl9KX0pfShqUXVlcnkpOyIsIiFmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQpe2lmKCF0KXJldHVyblwiXCI7dmFyIGUsbz1cIlwiO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKz0xKW8rPUZbdC5jaGFyQXQoZSldfHx0LmNoYXJBdChlKTtyZXR1cm4gb31mdW5jdGlvbiBvKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLFwiXFxcXCQmXCIpfWZ1bmN0aW9uIGkodCl7aWYodCl7aWYodC5zZWxlY3Rpb25TdGFydClyZXR1cm4gdC5zZWxlY3Rpb25TdGFydDtpZihkb2N1bWVudC5zZWxlY3Rpb24pe3QuZm9jdXMoKTt2YXIgZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxvPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQubGVuZ3RoO3JldHVybiBlLm1vdmVTdGFydChcImNoYXJhY3RlclwiLC10LnZhbHVlLmxlbmd0aCksZS50ZXh0Lmxlbmd0aC1vfX19ZnVuY3Rpb24gbih0LGUpe2lmKHQuc2V0U2VsZWN0aW9uUmFuZ2UpdC5mb2N1cygpLHQuc2V0U2VsZWN0aW9uUmFuZ2UoZSxlKTtlbHNlIGlmKHQuY3JlYXRlVGV4dFJhbmdlKXt2YXIgbz10LmNyZWF0ZVRleHRSYW5nZSgpO28uY29sbGFwc2UoITApLG8ubW92ZUVuZChcImNoYXJhY3RlclwiLGUpLG8ubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsZSksby5zZWxlY3QoKX19ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdm9pZCAwIT09dH1mdW5jdGlvbiByKGUsbyxpLG4pe3JldHVybiBhKGUpJiYhdC5pc0FycmF5KGUpP3QuaXNGdW5jdGlvbihlKT9lLmFwcGx5KHRoaXMsbyk6bjphKGkpP3IuY2FsbCh0aGlzLGksbyk6bn1mdW5jdGlvbiBzKHQsZSxvLGkpe3JldHVybiByLmNhbGwodGhpcyxhKHRoaXMuc291cmNlW2VdKSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuc291cmNlW2VdLHQpP3RoaXMuc291cmNlW2VdW3RdOnZvaWQgMCxvLGZ1bmN0aW9uKCl7cmV0dXJuIHIuY2FsbCh0aGlzLGEodGhpc1t0XVtlXSk/dGhpc1t0XVtlXTphKHRoaXNbdF1bMF0pP3RoaXNbdF1bMF06T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMsdCk/dGhpc1t0XTp2b2lkIDAsbyxQW3RdW2VdfHxQW3RdWzBdfHxQW3RdLGkpfSxpKX1mdW5jdGlvbiBsKGUsbyl7cmV0dXJuIGEobyl8fChvPTApLHQuaXNBcnJheSh0aGlzLnNvdXJjZSkmJmEodGhpcy5zb3VyY2Vbb10pJiZhKHRoaXMuc291cmNlW29dW2VdKT90aGlzLnNvdXJjZVtvXVtlXTphKHRoaXNbZV0pP3QuaXNBcnJheSh0aGlzW2VdKT9hKHRoaXNbZV1bb10pP3RoaXNbZV1bb106YSh0aGlzW2VdWzBdKT90aGlzW2VdWzBdOm51bGw6dGhpc1tlXTpudWxsfWZ1bmN0aW9uIGMoZSxvLGksbil7by54aHImJm8ueGhyLmFib3J0KCksby54aHI9dC5hamF4KHQuZXh0ZW5kKCEwLHt1cmw6ZSx0eXBlOlwiR0VUXCIsYXN5bmM6ITAsY2FjaGU6ITEsZGF0YVR5cGU6XCJqc29uXCJ9LG8uYWpheCkpLmRvbmUoZnVuY3Rpb24oZSl7aSYmaS5hcHBseSh0aGlzLHQubWFrZUFycmF5KGFyZ3VtZW50cykpfSkuZmFpbChmdW5jdGlvbih0LGUpe24mJmNvbnNvbGUubG9nKFwiUmVxdWVzdCBmYWlsZWQ6IFwiK2UpfSl9ZnVuY3Rpb24gdSh0LGUpe3ZhciBvLGk9ITE7Zm9yKG89MDtvPHQubGVuZ3RoO28rPTEpaWYoaT1zLmNhbGwodGhpcyxcImZpbmRSaWdodFwiLG8sW3Rbb10sZSxvXSkpcmV0dXJue3JpZ2h0Omksc291cmNlOm99O3JldHVybiExfWZ1bmN0aW9uIGQodCxlKXt2YXIgbztmb3IoaC5jYWxsKHRoaXMsdCxlKSxvPTA7bzx0Lmxlbmd0aDtvKz0xKXRbb109cy5jYWxsKHRoaXMsXCJmaWx0ZXJcIixvLFt0W29dLGUsb10sdFtvXSl9ZnVuY3Rpb24gZihlLG8saSl7dmFyIG4sbD10aGlzO2lmKHQuaXNGdW5jdGlvbihsLnNvdXJjZSkpbC5zb3VyY2UuYXBwbHkobCxbZSxmdW5jdGlvbih0KXtvPVt0XSxyLmNhbGwobCxpLFtlXSl9LG8sMF0pO2Vsc2UgZm9yKG49MDtuPGwuc291cmNlLmxlbmd0aDtuKz0xKWlmKHQuaXNBcnJheShsLnNvdXJjZVtuXSkpb1tuXT1sLnNvdXJjZVtuXTtlbHNlIGlmKHQuaXNGdW5jdGlvbihsLnNvdXJjZVtuXSkpIWZ1bmN0aW9uKG4pe2wuc291cmNlW25dLmFwcGx5KGwsW2UsZnVuY3Rpb24oYSl7aWYob1tuXXx8KG9bbl09W10pLGEmJnQuaXNBcnJheShhKSlzd2l0Y2gobC5hcHBlbmRNZXRob2Qpe2Nhc2VcInJlcGxhY2VcIjpvW25dPWE7YnJlYWs7ZGVmYXVsdDpvW25dPW9bbl0uY29uY2F0KGEpfXIuY2FsbChsLGksW2VdKX0sbyxuXSl9KG4pO2Vsc2Ugc3dpdGNoKGwuc291cmNlW25dLnR5cGUpe2Nhc2VcInJlbW90ZVwiOmlmKGEobC5zb3VyY2Vbbl0udXJsKSYmKCFhKGwuc291cmNlW25dLm1pbkxlbmd0aCl8fGUubGVuZ3RoPj1sLnNvdXJjZVtuXS5taW5MZW5ndGgpKXt2YXIgdT1zLmNhbGwobCxcInJlcGxhY2VcIixuLFtsLnNvdXJjZVtuXS51cmwsZV0sXCJcIik7b1tuXXx8KG9bbl09W10pLGZ1bmN0aW9uKHQpe2ModSxsLnNvdXJjZVt0XSxmdW5jdGlvbihuKXtvW3RdPW4sci5jYWxsKGwsaSxbZV0pfSxsLmRlYnVnKX0obil9YnJlYWs7ZGVmYXVsdDphKGwuc291cmNlW25dLmRhdGEpP29bbl09bC5zb3VyY2Vbbl0uZGF0YTpvW25dPWwuc291cmNlW25dfXIuY2FsbChsLGksW2VdKX1mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciBvPTA7bzx0Lmxlbmd0aDtvKyspdFtvXT1zLmNhbGwodGhpcyxcInByZXBhcnNlXCIsbyxbdFtvXSxlXSx0W29dKX1mdW5jdGlvbiBnKGUsbyl7dmFyIGksbixhLHI9W107Zm9yKGk9MDtpPGUubGVuZ3RoO2krPTEpZm9yKG49MDtuPGVbaV0ubGVuZ3RoJiYhKHIubGVuZ3RoPj10aGlzLmxpbWl0KTtuKz0xKWE9dChzLmNhbGwodGhpcyxcInJlbmRlclwiLGksW2VbaV1bbl0saSxuLG9dLFwiXCIpKSxhLmRhdGEoXCJzb3VyY2VcIixpKSxhLmRhdGEoXCJwaWRcIixuKSxhLmRhdGEoXCJpdGVtXCIsZVtpXVtuXSksci5wdXNoKGEpO3JldHVybiByfWZ1bmN0aW9uIHAodCxlKXtyZXR1cm4hIShhKHQuZGF0YShcInNvdXJjZVwiKSkmJmEodC5kYXRhKFwicGlkXCIpKSYmYShlW3QuZGF0YShcInNvdXJjZVwiKV0pJiZhKGVbdC5kYXRhKFwic291cmNlXCIpXVt0LmRhdGEoXCJwaWRcIildKSkmJmVbdC5kYXRhKFwic291cmNlXCIpXVt0LmRhdGEoXCJwaWRcIildfWZ1bmN0aW9uIHYodCxlKXt2YXIgbz1wKHQsZSk7cmV0dXJuIG8/cy5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLHQuZGF0YShcInNvdXJjZVwiKSxbbyx0LmRhdGEoXCJzb3VyY2VcIildKTphKHQuZGF0YShcInZhbHVlXCIpKT9kZWNvZGVVUklDb21wb25lbnQodC5kYXRhKFwidmFsdWVcIikpOnQuaHRtbCgpfWZ1bmN0aW9uIG0oZSxvKXtmdW5jdGlvbiByKCl7aWYoTy52YWwoKSE9SSl7aWYoST1PLnZhbCgpLEkubGVuZ3RoPG8ubWluTGVuZ3RoKXJldHVybiB2b2lkIE8udHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKTtmLmNhbGwobyxJLEYsZnVuY3Rpb24odCl7aWYodD09SSl7dmFyIGU7aWYoZC5jYWxsKG8sRix0KSxPLnRyaWdnZXIoXCJ1cGRhdGVDb250ZW50Lnhkc29mdFwiKSxvLnNob3dIaW50JiZJLmxlbmd0aCYmSS5sZW5ndGg8PU8ucHJvcChcInNpemVcIikmJihlPXUuY2FsbChvLEYsSSkpKXt2YXIgaT1zLmNhbGwobyxcImdldFRpdGxlXCIsZS5zb3VyY2UsW2UucmlnaHQsZS5zb3VyY2VdKTtpPXQraS5zdWJzdHIodC5sZW5ndGgpLFAudmFsKGkpfWVsc2UgUC52YWwoXCJcIil9fSl9fWZ1bmN0aW9uIGwodCl7dmFyIGUsbj10LmtleUNvZGU7c3dpdGNoKG4pe2Nhc2UgSDpjYXNlIFQ6Y2FzZSBqOmNhc2UgVzpjYXNlIEw6aWYodC5zaGlmdEtleXx8dC5jdHJsS2V5KXJldHVybiEwO2JyZWFrO2Nhc2UgUzpjYXNlIEM6cmV0dXJuITA7Y2FzZSB4OmNhc2UgeTpyZXR1cm4hIShffHxBfHx0LnNoaWZ0S2V5fHx0LmN0cmxLZXkpfHwoSz1PLnZhbCgpLHE9aShPWzBdKSxuIT09eHx8cSE9PUsubGVuZ3RofHwoKGU9dS5jYWxsKG8sRixLKSk/Ty50cmlnZ2VyKFwicGljay54ZHNvZnRcIixbcy5jYWxsKG8sXCJnZXRWYWx1ZVwiLGUuc291cmNlLFtlLnJpZ2h0LGUuc291cmNlXSldKTpPLnRyaWdnZXIoXCJwaWNrLnhkc29mdFwiKSx0LnByZXZlbnREZWZhdWx0KCksITEpKTtjYXNlIGs6cmV0dXJuITA7Y2FzZSB6OnJldHVybiFFfHwoTy50cmlnZ2VyKFwicGljay54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExKTtjYXNlIFI6cmV0dXJuIE8udmFsKEkpLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExO2Nhc2UgdzpjYXNlIGI6aWYoIUUpcmV0dXJuIE8udHJpZ2dlcihcIm9wZW4ueGRzb2Z0XCIpLE8udHJpZ2dlcihcInVwZGF0ZUNvbnRlbnQueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMTtCPW0uZmluZChcImRpdi5hY3RpdmVcIik7dmFyIGE9bj09dz9cIm5leHRcIjpcInByZXZcIixyPSEwO3JldHVybiBCLmxlbmd0aD8oQi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSxCW2FdKCkubGVuZ3RoP0JbYV0oKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTooTy52YWwoSSkscj0hMSkpOm0uY2hpbGRyZW4oKS5lcShuPT13PzA6LTEpLmFkZENsYXNzKFwiYWN0aXZlXCIpLHImJk8udHJpZ2dlcihcInRpbWVwaWNrLnhkc29mdFwiKSxtLnRyaWdnZXIoXCJ1cGRhdGVzY3JvbGwueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMX19aWYoIXQoZSkuaGFzQ2xhc3MoXCJ4ZHNvZnRfaW5wdXRcIikpe3ZhciBjLGg9dCgnPGRpdiBjbGFzcz1cInhkc29mdF9hdXRvY29tcGxldGVcIj48L2Rpdj4nKSxtPXQoJzxkaXYgY2xhc3M9XCJ4ZHNvZnRfYXV0b2NvbXBsZXRlX2Ryb3Bkb3duXCI+PC9kaXY+JyksUD10KCc8aW5wdXQgcmVhZG9ubHkgY2xhc3M9XCJ4ZHNvZnRfYXV0b2NvbXBsZXRlX2hpbnRcIi8+JyksTz10KGUpLEY9W10sRT0hMSxLPVwiXCIsST1cIlwiLFY9XCJcIixCPW51bGwscT0wO08uZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIsbyksbS5vbihcIm1vdXNlZG93blwiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJ1cGRhdGVzY3JvbGwueGRzb2Z0XCIsZnVuY3Rpb24oKXt2YXIgdD1tLmZpbmQoXCIuYWN0aXZlXCIpO2lmKHQubGVuZ3RoKXt2YXIgZT10LnBvc2l0aW9uKCkudG9wLG89dC5vdXRlckhlaWdodCghMCksaT1tLnNjcm9sbFRvcCgpLG49bS5oZWlnaHQoKTtlPDA/bS5zY3JvbGxUb3AoaS1NYXRoLmFicyhlKSk6ZStvPm4mJm0uc2Nyb2xsVG9wKGkrZStvLW4pfX0pLGguY3NzKHtkaXNwbGF5Ok8uY3NzKFwiZGlzcGxheVwiKSx3aWR0aDpPLmNzcyhcIndpZHRoXCIpfSksby5zdHlsZSYmaC5jc3Moby5zdHlsZSksTy5hZGRDbGFzcyhcInhkc29mdF9pbnB1dFwiKS5hdHRyKFwiYXV0b2NvbXBsZXRlXCIsXCJvZmZcIik7dmFyIEQ9bnVsbCxVPW51bGwsTT0hMTttLm9uKFwibW91c2Vtb3ZlXCIsXCJkaXZcIixmdW5jdGlvbigpe2lmKHQodGhpcykuaGFzQ2xhc3MoXCJhY3RpdmVcIikpcmV0dXJuITA7bS5maW5kKFwiZGl2XCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHQodGhpcykuYWRkQ2xhc3MoXCJhY3RpdmVcIil9KS5vbihcIm1vdXNlZG93blwiLFwiZGl2XCIsZnVuY3Rpb24oZSl7bS5maW5kKFwiZGl2XCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHQodGhpcykuYWRkQ2xhc3MoXCJhY3RpdmVcIiksTy50cmlnZ2VyKFwicGljay54ZHNvZnRcIil9KS5vbihcInRvdWNoc3RhcnRcIixcImRpdlwiLGZ1bmN0aW9uKHQpe0Q9dC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCxVPXQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFl9KS5vbihcInRvdWNoZW5kXCIsXCJkaXZcIixmdW5jdGlvbihlKXshMT09PU0mJihtLmZpbmQoXCJkaXZcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdCh0aGlzKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxPLnRyaWdnZXIoXCJwaWNrLnhkc29mdFwiKSksTT0hMX0pLm9uKFwidG91Y2htb3ZlXCIsXCJkaXZcIixmdW5jdGlvbih0KXtpZihEJiZVKXt2YXIgZT10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYLG89dC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WSxpPUQtZSxuPVUtbztNPU1hdGguYWJzKGkpPk1hdGguYWJzKG4pP2k+MD9cImxlZnRcIjpcInJpZ2h0XCI6bj4wP1widG9wXCI6XCJib3R0bVwiLEQ9bnVsbCxVPW51bGx9fSksTy5kYXRhKFwieGRzb2Z0X2F1dG9jb21wbGV0ZVwiLEYpLmFmdGVyKGgpLm9uKFwicGljay54ZHNvZnRcIixmdW5jdGlvbih0LGUpe08udHJpZ2dlcihcInRpbWVwaWNrLnhkc29mdFwiLGUpLFY9ST1PLnZhbCgpLE8udHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKSxCPW0uZmluZChcImRpdi5hY3RpdmVcIikuZXEoMCksQi5sZW5ndGh8fChCPW0uY2hpbGRyZW4oKS5maXJzdCgpKSxPLnRyaWdnZXIoXCJzZWxlY3RlZC54ZHNvZnRcIixbcChCLEYpXSksby5hZnRlclNlbGVjdGVkJiZvLmFmdGVyU2VsZWN0ZWQoKX0pLm9uKFwidGltZXBpY2sueGRzb2Z0XCIsZnVuY3Rpb24odCxlKXtCPW0uZmluZChcImRpdi5hY3RpdmVcIiksQi5sZW5ndGh8fChCPW0uY2hpbGRyZW4oKS5maXJzdCgpKSxCLmxlbmd0aCYmKGEoZSk/Ty52YWwoZSk6Ty52YWwodi5jYWxsKG8sQixGKSksTy50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlZC54ZHNvZnRcIixbcChCLEYpXSksUC52YWwoXCJcIiksbihPWzBdLE8udmFsKCkubGVuZ3RoKSl9KS5vbihcImtleWRvd24ueGRzb2Z0IGlucHV0Lnhkc29mdCBjdXQueGRzb2Z0IHBhc3RlLnhkc29mdFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWwodCk7aWYoITE9PT1lfHwhMD09PWUpcmV0dXJuIGU7c2V0VGltZW91dChmdW5jdGlvbigpe3IoKX0sMSkscigpfSkub24oXCJjaGFuZ2UueGRzb2Z0XCIsZnVuY3Rpb24odCl7ST1PLnZhbCgpfSksST1PLnZhbCgpLGYuY2FsbChvLE8udmFsKCksRixmdW5jdGlvbih0KXtkLmNhbGwobyxGLHQpfSksby5vcGVuT25Gb2N1cyYmTy5vbihcImZvY3VzaW4ueGRzb2Z0XCIsZnVuY3Rpb24oKXtPLnRyaWdnZXIoXCJvcGVuLnhkc29mdFwiKSxPLnRyaWdnZXIoXCJ1cGRhdGVDb250ZW50Lnhkc29mdFwiKX0pLG8uY2xvc2VPbkJsdXImJk8ub24oXCJmb2N1c291dC54ZHNvZnRcIixmdW5jdGlvbigpe08udHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKX0pLGguYXBwZW5kKE8pLmFwcGVuZChtKTt2YXIgTj0hMSxZPTA7Ty5vbihcInVwZGF0ZUhlbHBlclBvc2l0aW9uLnhkc29mdFwiLGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KFkpLFk9c2V0VGltZW91dChmdW5jdGlvbigpe2lmKGguY3NzKHtkaXNwbGF5Ok8uY3NzKFwiZGlzcGxheVwiKSx3aWR0aDpPLmNzcyhcIndpZHRoXCIpfSksbS5jc3ModC5leHRlbmQoITAse2xlZnQ6Ty5wb3NpdGlvbigpLmxlZnQsdG9wOk8ucG9zaXRpb24oKS50b3ArcGFyc2VJbnQoTy5jc3MoXCJtYXJnaW5Ub3BcIikpK3BhcnNlSW50KE9bMF0ub2Zmc2V0SGVpZ2h0KSxtYXJnaW5MZWZ0Ok8uY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDpPLmNzcyhcIm1hcmdpblJpZ2h0XCIpLHdpZHRoOlwiMTAwJVwiPT1vLmRyb3Bkb3duV2lkdGg/T1swXS5vZmZzZXRXaWR0aDpvLmRyb3Bkb3duV2lkdGh9LG8uZHJvcGRvd25TdHlsZSkpLG8uc2hvd0hpbnQpe3ZhciBlPWdldENvbXB1dGVkU3R5bGUoT1swXSxcIlwiKTtQWzBdLnN0eWxlLmNzc1RleHQ9ZS5jc3NUZXh0LFAuY3NzKHtcImJveC1zaXppbmdcIjplLmJveFNpemluZyxib3JkZXJTdHlsZTpcInNvbGlkXCIsYm9yZGVyQ29sbGFwc2U6ZS5ib3JkZXJDb2xsYXBzZSxib3JkZXJMZWZ0V2lkdGg6ZS5ib3JkZXJMZWZ0V2lkdGgsYm9yZGVyUmlnaHRXaWR0aDplLmJvcmRlclJpZ2h0V2lkdGgsYm9yZGVyVG9wV2lkdGg6ZS5ib3JkZXJUb3BXaWR0aCxib3JkZXJCb3R0b21XaWR0aDplLmJvcmRlckJvdHRvbVdpZHRoLHBhZGRpbmdCb3R0b206ZS5wYWRkaW5nQm90dG9tLG1hcmdpbkJvdHRvbTplLm1hcmdpbkJvdHRvbSxwYWRkaW5nVG9wOmUucGFkZGluZ1RvcCxtYXJnaW5Ub3A6ZS5tYXJnaW5Ub3AscGFkZGluZ0xlZnQ6ZS5wYWRkaW5nTGVmdCxtYXJnaW5MZWZ0OmUubWFyZ2luTGVmdCxwYWRkaW5nUmlnaHQ6ZS5wYWRkaW5nUmlnaHQsbWFyZ2luUmlnaHQ6ZS5tYXJnaW5SaWdodCxtYXhIZWlnaHQ6ZS5tYXhIZWlnaHQsbWluSGVpZ2h0OmUubWluSGVpZ2h0LG1heFdpZHRoOmUubWF4V2lkdGgsbWluV2lkdGg6ZS5taW5XaWR0aCx3aWR0aDplLndpZHRoLGxldHRlclNwYWNpbmc6ZS5sZXR0ZXJTcGFjaW5nLGxpbmVIZWlnaHQ6ZS5saW5lSGVpZ2h0LG91dGxpbmVXaWR0aDplLm91dGxpbmVXaWR0aCxmb250RmFtaWx5OmUuZm9udEZhbWlseSxmb250VmFyaWFudDplLmZvbnRWYXJpYW50LGZvbnRTdHlsZTpPLmNzcyhcImZvbnRTdHlsZVwiKSxmb250U2l6ZTpPLmNzcyhcImZvbnRTaXplXCIpLGZvbnRXZWlnaHQ6Ty5jc3MoXCJmb250V2VpZ2h0XCIpLGZsZXg6ZS5mbGV4LGp1c3RpZnlDb250ZW50OmUuanVzdGlmeUNvbnRlbnQsYm9yZGVyUmFkaXVzOmUuYm9yZGVyUmFkaXVzLFwiLXdlYmtpdC1ib3gtc2hhZG93XCI6XCJub25lXCIsXCJib3gtc2hhZG93XCI6XCJub25lXCJ9KSxPLmNzcyhcImZvbnQtc2l6ZVwiLE8uY3NzKFwiZm9udFNpemVcIikpLFAuaW5uZXJIZWlnaHQoTy5pbm5lckhlaWdodCgpKSxQLmNzcyh0LmV4dGVuZCghMCx7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHpJbmRleDpcIjFcIixib3JkZXJDb2xvcjpcInRyYW5zcGFyZW50XCIsb3V0bGluZUNvbG9yOlwidHJhbnNwYXJlbnRcIixsZWZ0Ok8ucG9zaXRpb24oKS5sZWZ0LHRvcDpPLnBvc2l0aW9uKCkudG9wLGJhY2tncm91bmQ6Ty5jc3MoXCJiYWNrZ3JvdW5kXCIpfSxvLmhpbnRTdHlsZSkpLCExIT09Tj9QLmNzcyhcImJhY2tncm91bmRcIixOKTpOPU8uY3NzKFwiYmFja2dyb3VuZFwiKTt0cnl7T1swXS5zdHlsZS5zZXRQcm9wZXJ0eShcImJhY2tncm91bmRcIixcInRyYW5zcGFyZW50XCIsXCJpbXBvcnRhbnRcIil9Y2F0Y2godCl7Ty5jc3MoXCJiYWNrZ3JvdW5kXCIsXCJ0cmFuc3BhcmVudFwiKX1oLmFwcGVuZChQKX19LG8udGltZW91dFVwZGF0ZXx8MSl9KSxPLmlzKFwiOnZpc2libGVcIik/Ty50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpOmM9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtPLmlzKFwiOnZpc2libGVcIikmJihPLnRyaWdnZXIoXCJ1cGRhdGVIZWxwZXJQb3NpdGlvbi54ZHNvZnRcIiksY2xlYXJJbnRlcnZhbChjKSl9LDEwMCksdCh3aW5kb3cpLm9uKFwicmVzaXplXCIsZnVuY3Rpb24oKXtoLmNzcyh7d2lkdGg6XCJhdXRvXCJ9KSxPLnRyaWdnZXIoXCJ1cGRhdGVIZWxwZXJQb3NpdGlvbi54ZHNvZnRcIil9KSxPLm9uKFwiY2xvc2UueGRzb2Z0XCIsZnVuY3Rpb24oKXtFJiYobS5oaWRlKCksUC52YWwoXCJcIiksby5hdXRvc2VsZWN0fHxPLnZhbChJKSxFPSExKX0pLm9uKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIixmdW5jdGlvbigpe3ZhciBlPWcuY2FsbChvLEYsTy52YWwoKSksaT0xMDtpZighZS5sZW5ndGgpcmV0dXJuIHZvaWQgTy50cmlnZ2VyKFwiY2xvc2UueGRzb2Z0XCIpO08udHJpZ2dlcihcIm9wZW4ueGRzb2Z0XCIpLHQoZSkuZWFjaChmdW5jdGlvbigpe3RoaXMuY3NzKHQuZXh0ZW5kKCEwLHtwYWRkaW5nTGVmdDpPLmNzcyhcInBhZGRpbmdMZWZ0XCIpLHBhZGRpbmdSaWdodDpPLmNzcyhcInBhZGRpbmdSaWdodFwiKX0sby5pdGVtU3R5bGUpKX0pLG0uaHRtbChlKSxpPW8udmlzaWJsZUhlaWdodD9vLnZpc2libGVIZWlnaHQ6by52aXNpYmxlTGltaXQqKChlWzBdP2VbMF0ub3V0ZXJIZWlnaHQoITApOjApfHxvLmRlZmF1bHRIZWlnaHRJdGVtKSs1LG0uY3NzKFwibWF4SGVpZ2h0XCIsaStcInB4XCIpfSkub24oXCJvcGVuLnhkc29mdFwiLGZ1bmN0aW9uKCl7RXx8KG0uc2hvdygpLEU9ITApfSkub24oXCJkZXN0cm95Lnhkc29mdFwiLGZ1bmN0aW9uKCl7Ty5yZW1vdmVDbGFzcyhcInhkc29mdFwiKSxoLmFmdGVyKE8pLGgucmVtb3ZlKCksY2xlYXJUaW1lb3V0KDApLGNsZWFyVGltZW91dChjKSxPLmRhdGEoXCJ4ZHNvZnRfYXV0b2NvbXBsZXRlXCIsbnVsbCksTy5vZmYoXCIueGRzb2Z0XCIpfSl9fXZhciB5PTM3LHg9MzksYj0zOCx3PTQwLGs9OSxDPTE3LFM9MTYsej0xMyxSPTI3LEg9NjUsVD02NyxqPTg2LFc9OTAsTD04OSxQPXt9LF89ITEsQT0hMSxPPXt9LEY9e1wi4bqaXCI6XCJhXCIsXCLDgVwiOlwiYVwiLFwiw6FcIjpcImFcIixcIsOAXCI6XCJhXCIsXCLDoFwiOlwiYVwiLFwixIJcIjpcImFcIixcIsSDXCI6XCJhXCIsXCLhuq5cIjpcImFcIixcIuG6r1wiOlwiYVwiLFwi4bqwXCI6XCJhXCIsXCLhurFcIjpcImFcIixcIuG6tFwiOlwiYVwiLFwi4bq1XCI6XCJhXCIsXCLhurJcIjpcImFcIixcIuG6qlwiOlwiYVwiLFwi4bqrXCI6XCJhXCIsXCLhuqhcIjpcImFcIixcIuG6qVwiOlwiYVwiLFwix41cIjpcImFcIixcIseOXCI6XCJhXCIsXCLDhVwiOlwiYVwiLFwiw6VcIjpcImFcIixcIse6XCI6XCJhXCIsXCLHu1wiOlwiYVwiLFwiw4RcIjpcImFcIixcIsOkXCI6XCJhXCIsXCLHnlwiOlwiYVwiLFwix59cIjpcImFcIixcIsODXCI6XCJhXCIsXCLDo1wiOlwiYVwiLFwiyKZcIjpcImFcIixcIsinXCI6XCJhXCIsXCLHoFwiOlwiYVwiLFwix6FcIjpcImFcIixcIsSEXCI6XCJhXCIsXCLEhVwiOlwiYVwiLFwixIBcIjpcImFcIixcIsSBXCI6XCJhXCIsXCLhuqJcIjpcImFcIixcIuG6o1wiOlwiYVwiLFwiyIBcIjpcImFcIixcIsiBXCI6XCJhXCIsXCLIglwiOlwiYVwiLFwiyINcIjpcImFcIixcIuG6oFwiOlwiYVwiLFwi4bqhXCI6XCJhXCIsXCLhurZcIjpcImFcIixcIuG6t1wiOlwiYVwiLFwi4bqsXCI6XCJhXCIsXCLhuq1cIjpcImFcIixcIuG4gFwiOlwiYVwiLFwi4biBXCI6XCJhXCIsXCLIulwiOlwiYVwiLFwi4rGlXCI6XCJhXCIsXCLHvFwiOlwiYVwiLFwix71cIjpcImFcIixcIseiXCI6XCJhXCIsXCLHo1wiOlwiYVwiLFwi4biCXCI6XCJiXCIsXCLhuINcIjpcImJcIixcIuG4hFwiOlwiYlwiLFwi4biFXCI6XCJiXCIsXCLhuIZcIjpcImJcIixcIuG4h1wiOlwiYlwiLFwiyYNcIjpcImJcIixcIsaAXCI6XCJiXCIsXCLhtaxcIjpcImJcIixcIsaBXCI6XCJiXCIsXCLJk1wiOlwiYlwiLFwixoJcIjpcImJcIixcIsaDXCI6XCJiXCIsXCLEhlwiOlwiY1wiLFwixIdcIjpcImNcIixcIsSIXCI6XCJjXCIsXCLEiVwiOlwiY1wiLFwixIxcIjpcImNcIixcIsSNXCI6XCJjXCIsXCLEilwiOlwiY1wiLFwixItcIjpcImNcIixcIsOHXCI6XCJjXCIsXCLDp1wiOlwiY1wiLFwi4biIXCI6XCJjXCIsXCLhuIlcIjpcImNcIixcIsi7XCI6XCJjXCIsXCLIvFwiOlwiY1wiLFwixodcIjpcImNcIixcIsaIXCI6XCJjXCIsXCLJlVwiOlwiY1wiLFwixI5cIjpcImRcIixcIsSPXCI6XCJkXCIsXCLhuIpcIjpcImRcIixcIuG4i1wiOlwiZFwiLFwi4biQXCI6XCJkXCIsXCLhuJFcIjpcImRcIixcIuG4jFwiOlwiZFwiLFwi4biNXCI6XCJkXCIsXCLhuJJcIjpcImRcIixcIuG4k1wiOlwiZFwiLFwi4biOXCI6XCJkXCIsXCLhuI9cIjpcImRcIixcIsSQXCI6XCJkXCIsXCLEkVwiOlwiZFwiLFwi4bWtXCI6XCJkXCIsXCLGiVwiOlwiZFwiLFwiyZZcIjpcImRcIixcIsaKXCI6XCJkXCIsXCLJl1wiOlwiZFwiLFwixotcIjpcImRcIixcIsaMXCI6XCJkXCIsXCLIoVwiOlwiZFwiLFwiw7BcIjpcImRcIixcIsOJXCI6XCJlXCIsXCLGj1wiOlwiZVwiLFwixo5cIjpcImVcIixcIsedXCI6XCJlXCIsXCLDqVwiOlwiZVwiLFwiw4hcIjpcImVcIixcIsOoXCI6XCJlXCIsXCLElFwiOlwiZVwiLFwixJVcIjpcImVcIixcIsOKXCI6XCJlXCIsXCLDqlwiOlwiZVwiLFwi4bq+XCI6XCJlXCIsXCLhur9cIjpcImVcIixcIuG7gFwiOlwiZVwiLFwi4buBXCI6XCJlXCIsXCLhu4RcIjpcImVcIixcIuG7hVwiOlwiZVwiLFwi4buCXCI6XCJlXCIsXCLhu4NcIjpcImVcIixcIsSaXCI6XCJlXCIsXCLEm1wiOlwiZVwiLFwiw4tcIjpcImVcIixcIsOrXCI6XCJlXCIsXCLhurxcIjpcImVcIixcIuG6vVwiOlwiZVwiLFwixJZcIjpcImVcIixcIsSXXCI6XCJlXCIsXCLIqFwiOlwiZVwiLFwiyKlcIjpcImVcIixcIuG4nFwiOlwiZVwiLFwi4bidXCI6XCJlXCIsXCLEmFwiOlwiZVwiLFwixJlcIjpcImVcIixcIsSSXCI6XCJlXCIsXCLEk1wiOlwiZVwiLFwi4biWXCI6XCJlXCIsXCLhuJdcIjpcImVcIixcIuG4lFwiOlwiZVwiLFwi4biVXCI6XCJlXCIsXCLhurpcIjpcImVcIixcIuG6u1wiOlwiZVwiLFwiyIRcIjpcImVcIixcIsiFXCI6XCJlXCIsXCLIhlwiOlwiZVwiLFwiyIdcIjpcImVcIixcIuG6uFwiOlwiZVwiLFwi4bq5XCI6XCJlXCIsXCLhu4ZcIjpcImVcIixcIuG7h1wiOlwiZVwiLFwi4biYXCI6XCJlXCIsXCLhuJlcIjpcImVcIixcIuG4mlwiOlwiZVwiLFwi4bibXCI6XCJlXCIsXCLJhlwiOlwiZVwiLFwiyYdcIjpcImVcIixcIsmaXCI6XCJlXCIsXCLJnVwiOlwiZVwiLFwi4bieXCI6XCJmXCIsXCLhuJ9cIjpcImZcIixcIuG1rlwiOlwiZlwiLFwixpFcIjpcImZcIixcIsaSXCI6XCJmXCIsXCLHtFwiOlwiZ1wiLFwix7VcIjpcImdcIixcIsSeXCI6XCJnXCIsXCLEn1wiOlwiZ1wiLFwixJxcIjpcImdcIixcIsSdXCI6XCJnXCIsXCLHplwiOlwiZ1wiLFwix6dcIjpcImdcIixcIsSgXCI6XCJnXCIsXCLEoVwiOlwiZ1wiLFwixKJcIjpcImdcIixcIsSjXCI6XCJnXCIsXCLhuKBcIjpcImdcIixcIuG4oVwiOlwiZ1wiLFwix6RcIjpcImdcIixcIselXCI6XCJnXCIsXCLGk1wiOlwiZ1wiLFwiyaBcIjpcImdcIixcIsSkXCI6XCJoXCIsXCLEpVwiOlwiaFwiLFwiyJ5cIjpcImhcIixcIsifXCI6XCJoXCIsXCLhuKZcIjpcImhcIixcIuG4p1wiOlwiaFwiLFwi4biiXCI6XCJoXCIsXCLhuKNcIjpcImhcIixcIuG4qFwiOlwiaFwiLFwi4bipXCI6XCJoXCIsXCLhuKRcIjpcImhcIixcIuG4pVwiOlwiaFwiLFwi4biqXCI6XCJoXCIsXCLhuKtcIjpcImhcIixIOlwiaFwiLFwizLFcIjpcImhcIixcIuG6llwiOlwiaFwiLFwixKZcIjpcImhcIixcIsSnXCI6XCJoXCIsXCLisadcIjpcImhcIixcIuKxqFwiOlwiaFwiLFwiw41cIjpcImlcIixcIsOtXCI6XCJpXCIsXCLDjFwiOlwiaVwiLFwiw6xcIjpcImlcIixcIsSsXCI6XCJpXCIsXCLErVwiOlwiaVwiLFwiw45cIjpcImlcIixcIsOuXCI6XCJpXCIsXCLHj1wiOlwiaVwiLFwix5BcIjpcImlcIixcIsOPXCI6XCJpXCIsXCLDr1wiOlwiaVwiLFwi4biuXCI6XCJpXCIsXCLhuK9cIjpcImlcIixcIsSoXCI6XCJpXCIsXCLEqVwiOlwiaVwiLFwixLBcIjpcImlcIixpOlwiaVwiLFwixK5cIjpcImlcIixcIsSvXCI6XCJpXCIsXCLEqlwiOlwiaVwiLFwixKtcIjpcImlcIixcIuG7iFwiOlwiaVwiLFwi4buJXCI6XCJpXCIsXCLIiFwiOlwiaVwiLFwiyIlcIjpcImlcIixcIsiKXCI6XCJpXCIsXCLIi1wiOlwiaVwiLFwi4buKXCI6XCJpXCIsXCLhu4tcIjpcImlcIixcIuG4rFwiOlwiaVwiLFwi4bitXCI6XCJpXCIsSTpcImlcIixcIsSxXCI6XCJpXCIsXCLGl1wiOlwiaVwiLFwiyahcIjpcImlcIixcIsS0XCI6XCJqXCIsXCLEtVwiOlwialwiLEo6XCJqXCIsXCLMjFwiOlwialwiLFwix7BcIjpcImpcIixcIsi3XCI6XCJqXCIsXCLJiFwiOlwialwiLFwiyYlcIjpcImpcIixcIsqdXCI6XCJqXCIsXCLJn1wiOlwialwiLFwiyoRcIjpcImpcIixcIuG4sFwiOlwia1wiLFwi4bixXCI6XCJrXCIsXCLHqFwiOlwia1wiLFwix6lcIjpcImtcIixcIsS2XCI6XCJrXCIsXCLEt1wiOlwia1wiLFwi4biyXCI6XCJrXCIsXCLhuLNcIjpcImtcIixcIuG4tFwiOlwia1wiLFwi4bi1XCI6XCJrXCIsXCLGmFwiOlwia1wiLFwixplcIjpcImtcIixcIuKxqVwiOlwia1wiLFwi4rGqXCI6XCJrXCIsXCLEuVwiOlwiYVwiLFwixLpcIjpcImxcIixcIsS9XCI6XCJsXCIsXCLEvlwiOlwibFwiLFwixLtcIjpcImxcIixcIsS8XCI6XCJsXCIsXCLhuLZcIjpcImxcIixcIuG4t1wiOlwibFwiLFwi4bi4XCI6XCJsXCIsXCLhuLlcIjpcImxcIixcIuG4vFwiOlwibFwiLFwi4bi9XCI6XCJsXCIsXCLhuLpcIjpcImxcIixcIuG4u1wiOlwibFwiLFwixYFcIjpcImxcIixcIsWCXCI6XCJsXCIsXCLMo1wiOlwibFwiLFwixL9cIjpcImxcIixcIsWAXCI6XCJsXCIsXCLIvVwiOlwibFwiLFwixppcIjpcImxcIixcIuKxoFwiOlwibFwiLFwi4rGhXCI6XCJsXCIsXCLisaJcIjpcImxcIixcIsmrXCI6XCJsXCIsXCLJrFwiOlwibFwiLFwiya1cIjpcImxcIixcIsi0XCI6XCJsXCIsXCLhuL5cIjpcIm1cIixcIuG4v1wiOlwibVwiLFwi4bmAXCI6XCJtXCIsXCLhuYFcIjpcIm1cIixcIuG5glwiOlwibVwiLFwi4bmDXCI6XCJtXCIsXCLJsVwiOlwibVwiLFwixYNcIjpcIm5cIixcIsWEXCI6XCJuXCIsXCLHuFwiOlwiblwiLFwix7lcIjpcIm5cIixcIsWHXCI6XCJuXCIsXCLFiFwiOlwiblwiLFwiw5FcIjpcIm5cIixcIsOxXCI6XCJuXCIsXCLhuYRcIjpcIm5cIixcIuG5hVwiOlwiblwiLFwixYVcIjpcIm5cIixcIsWGXCI6XCJuXCIsXCLhuYZcIjpcIm5cIixcIuG5h1wiOlwiblwiLFwi4bmKXCI6XCJuXCIsXCLhuYtcIjpcIm5cIixcIuG5iFwiOlwiblwiLFwi4bmJXCI6XCJuXCIsXCLGnVwiOlwiblwiLFwiybJcIjpcIm5cIixcIsigXCI6XCJuXCIsXCLGnlwiOlwiblwiLFwiybNcIjpcIm5cIixcIsi1XCI6XCJuXCIsTjpcIm5cIixcIsyIXCI6XCJuXCIsbjpcIm5cIixcIsOTXCI6XCJvXCIsXCLDs1wiOlwib1wiLFwiw5JcIjpcIm9cIixcIsOyXCI6XCJvXCIsXCLFjlwiOlwib1wiLFwixY9cIjpcIm9cIixcIsOUXCI6XCJvXCIsXCLDtFwiOlwib1wiLFwi4buQXCI6XCJvXCIsXCLhu5FcIjpcIm9cIixcIuG7klwiOlwib1wiLFwi4buTXCI6XCJvXCIsXCLhu5ZcIjpcIm9cIixcIuG7l1wiOlwib1wiLFwi4buUXCI6XCJvXCIsXCLhu5VcIjpcIm9cIixcIseRXCI6XCJvXCIsXCLHklwiOlwib1wiLFwiw5ZcIjpcIm9cIixcIsO2XCI6XCJvXCIsXCLIqlwiOlwib1wiLFwiyKtcIjpcIm9cIixcIsWQXCI6XCJvXCIsXCLFkVwiOlwib1wiLFwiw5VcIjpcIm9cIixcIsO1XCI6XCJvXCIsXCLhuYxcIjpcIm9cIixcIuG5jVwiOlwib1wiLFwi4bmOXCI6XCJvXCIsXCLhuY9cIjpcIm9cIixcIsisXCI6XCJvXCIsXCLIrVwiOlwib1wiLFwiyK5cIjpcIm9cIixcIsivXCI6XCJvXCIsXCLIsFwiOlwib1wiLFwiyLFcIjpcIm9cIixcIsOYXCI6XCJvXCIsXCLDuFwiOlwib1wiLFwix75cIjpcIm9cIixcIse/XCI6XCJvXCIsXCLHqlwiOlwib1wiLFwix6tcIjpcIm9cIixcIsesXCI6XCJvXCIsXCLHrVwiOlwib1wiLFwixYxcIjpcIm9cIixcIsWNXCI6XCJvXCIsXCLhuZJcIjpcIm9cIixcIuG5k1wiOlwib1wiLFwi4bmQXCI6XCJvXCIsXCLhuZFcIjpcIm9cIixcIuG7jlwiOlwib1wiLFwi4buPXCI6XCJvXCIsXCLIjFwiOlwib1wiLFwiyI1cIjpcIm9cIixcIsiOXCI6XCJvXCIsXCLIj1wiOlwib1wiLFwixqBcIjpcIm9cIixcIsahXCI6XCJvXCIsXCLhu5pcIjpcIm9cIixcIuG7m1wiOlwib1wiLFwi4bucXCI6XCJvXCIsXCLhu51cIjpcIm9cIixcIuG7oFwiOlwib1wiLFwi4buhXCI6XCJvXCIsXCLhu55cIjpcIm9cIixcIuG7n1wiOlwib1wiLFwi4buiXCI6XCJvXCIsXCLhu6NcIjpcIm9cIixcIuG7jFwiOlwib1wiLFwi4buNXCI6XCJvXCIsXCLhu5hcIjpcIm9cIixcIuG7mVwiOlwib1wiLFwixp9cIjpcIm9cIixcIsm1XCI6XCJvXCIsXCLhuZRcIjpcInBcIixcIuG5lVwiOlwicFwiLFwi4bmWXCI6XCJwXCIsXCLhuZdcIjpcInBcIixcIuKxo1wiOlwicFwiLFwixqRcIjpcInBcIixcIsalXCI6XCJwXCIsUDpcInBcIixcIsyDXCI6XCJwXCIscDpcInBcIixcIsqgXCI6XCJxXCIsXCLJilwiOlwicVwiLFwiyYtcIjpcInFcIixcIsWUXCI6XCJyXCIsXCLFlVwiOlwiclwiLFwixZhcIjpcInJcIixcIsWZXCI6XCJyXCIsXCLhuZhcIjpcInJcIixcIuG5mVwiOlwiclwiLFwixZZcIjpcInJcIixcIsWXXCI6XCJyXCIsXCLIkFwiOlwiclwiLFwiyJFcIjpcInJcIixcIsiSXCI6XCJyXCIsXCLIk1wiOlwiclwiLFwi4bmaXCI6XCJyXCIsXCLhuZtcIjpcInJcIixcIuG5nFwiOlwiclwiLFwi4bmdXCI6XCJyXCIsXCLhuZ5cIjpcInJcIixcIuG5n1wiOlwiclwiLFwiyYxcIjpcInJcIixcIsmNXCI6XCJyXCIsXCLhtbJcIjpcInJcIixcIsm8XCI6XCJyXCIsXCLisaRcIjpcInJcIixcIsm9XCI6XCJyXCIsXCLJvlwiOlwiclwiLFwi4bWzXCI6XCJyXCIsXCLDn1wiOlwic1wiLFwixZpcIjpcInNcIixcIsWbXCI6XCJzXCIsXCLhuaRcIjpcInNcIixcIuG5pVwiOlwic1wiLFwixZxcIjpcInNcIixcIsWdXCI6XCJzXCIsXCLFoFwiOlwic1wiLFwixaFcIjpcInNcIixcIuG5plwiOlwic1wiLFwi4bmnXCI6XCJzXCIsXCLhuaBcIjpcInNcIixcIuG5oVwiOlwic1wiLFwi4bqbXCI6XCJzXCIsXCLFnlwiOlwic1wiLFwixZ9cIjpcInNcIixcIuG5olwiOlwic1wiLFwi4bmjXCI6XCJzXCIsXCLhuahcIjpcInNcIixcIuG5qVwiOlwic1wiLFwiyJhcIjpcInNcIixcIsiZXCI6XCJzXCIsXCLKglwiOlwic1wiLFM6XCJzXCIsXCLMqVwiOlwic1wiLHM6XCJzXCIsXCLDnlwiOlwidFwiLFwiw75cIjpcInRcIixcIsWkXCI6XCJ0XCIsXCLFpVwiOlwidFwiLFQ6XCJ0XCIsXCLhupdcIjpcInRcIixcIuG5qlwiOlwidFwiLFwi4bmrXCI6XCJ0XCIsXCLFolwiOlwidFwiLFwixaNcIjpcInRcIixcIuG5rFwiOlwidFwiLFwi4bmtXCI6XCJ0XCIsXCLImlwiOlwidFwiLFwiyJtcIjpcInRcIixcIuG5sFwiOlwidFwiLFwi4bmxXCI6XCJ0XCIsXCLhua5cIjpcInRcIixcIuG5r1wiOlwidFwiLFwixaZcIjpcInRcIixcIsWnXCI6XCJ0XCIsXCLIvlwiOlwidFwiLFwi4rGmXCI6XCJ0XCIsXCLhtbVcIjpcInRcIixcIsarXCI6XCJ0XCIsXCLGrFwiOlwidFwiLFwixq1cIjpcInRcIixcIsauXCI6XCJ0XCIsXCLKiFwiOlwidFwiLFwiyLZcIjpcInRcIixcIsOaXCI6XCJ1XCIsXCLDulwiOlwidVwiLFwiw5lcIjpcInVcIixcIsO5XCI6XCJ1XCIsXCLFrFwiOlwidVwiLFwixa1cIjpcInVcIixcIsObXCI6XCJ1XCIsXCLDu1wiOlwidVwiLFwix5NcIjpcInVcIixcIseUXCI6XCJ1XCIsXCLFrlwiOlwidVwiLFwixa9cIjpcInVcIixcIsOcXCI6XCJ1XCIsXCLDvFwiOlwidVwiLFwix5dcIjpcInVcIixcIseYXCI6XCJ1XCIsXCLHm1wiOlwidVwiLFwix5xcIjpcInVcIixcIseZXCI6XCJ1XCIsXCLHmlwiOlwidVwiLFwix5VcIjpcInVcIixcIseWXCI6XCJ1XCIsXCLFsFwiOlwidVwiLFwixbFcIjpcInVcIixcIsWoXCI6XCJ1XCIsXCLFqVwiOlwidVwiLFwi4bm4XCI6XCJ1XCIsXCLhublcIjpcInVcIixcIsWyXCI6XCJ1XCIsXCLFs1wiOlwidVwiLFwixapcIjpcInVcIixcIsWrXCI6XCJ1XCIsXCLhubpcIjpcInVcIixcIuG5u1wiOlwidVwiLFwi4bumXCI6XCJ1XCIsXCLhu6dcIjpcInVcIixcIsiUXCI6XCJ1XCIsXCLIlVwiOlwidVwiLFwiyJZcIjpcInVcIixcIsiXXCI6XCJ1XCIsXCLGr1wiOlwidVwiLFwixrBcIjpcInVcIixcIuG7qFwiOlwidVwiLFwi4bupXCI6XCJ1XCIsXCLhu6pcIjpcInVcIixcIuG7q1wiOlwidVwiLFwi4buuXCI6XCJ1XCIsXCLhu69cIjpcInVcIixcIuG7rFwiOlwidVwiLFwi4butXCI6XCJ1XCIsXCLhu7BcIjpcInVcIixcIuG7sVwiOlwidVwiLFwi4bukXCI6XCJ1XCIsXCLhu6VcIjpcInVcIixcIuG5slwiOlwidVwiLFwi4bmzXCI6XCJ1XCIsXCLhubZcIjpcInVcIixcIuG5t1wiOlwidVwiLFwi4bm0XCI6XCJ1XCIsXCLhubVcIjpcInVcIixcIsmEXCI6XCJ1XCIsXCLKiVwiOlwidVwiLFwi4bm8XCI6XCJ2XCIsXCLhub1cIjpcInZcIixcIuG5vlwiOlwidlwiLFwi4bm/XCI6XCJ2XCIsXCLGslwiOlwidlwiLFwiyotcIjpcInZcIixcIuG6glwiOlwid1wiLFwi4bqDXCI6XCJ3XCIsXCLhuoBcIjpcIndcIixcIuG6gVwiOlwid1wiLFwixbRcIjpcIndcIixcIsW1XCI6XCJ3XCIsVzpcIndcIixcIsyKXCI6XCJ3XCIsXCLhuphcIjpcIndcIixcIuG6hFwiOlwid1wiLFwi4bqFXCI6XCJ3XCIsXCLhuoZcIjpcIndcIixcIuG6h1wiOlwid1wiLFwi4bqIXCI6XCJ3XCIsXCLhuolcIjpcIndcIixcIuG6jFwiOlwieFwiLFwi4bqNXCI6XCJ4XCIsXCLhuopcIjpcInhcIixcIuG6i1wiOlwieFwiLFwiw51cIjpcInlcIixcIsO9XCI6XCJ5XCIsXCLhu7JcIjpcInlcIixcIuG7s1wiOlwieVwiLFwixbZcIjpcInlcIixcIsW3XCI6XCJ5XCIsWTpcInlcIixcIuG6mVwiOlwieVwiLFwixbhcIjpcInlcIixcIsO/XCI6XCJ5XCIsXCLhu7hcIjpcInlcIixcIuG7uVwiOlwieVwiLFwi4bqOXCI6XCJ5XCIsXCLhuo9cIjpcInlcIixcIsiyXCI6XCJ5XCIsXCLIs1wiOlwieVwiLFwi4bu2XCI6XCJ5XCIsXCLhu7dcIjpcInlcIixcIuG7tFwiOlwieVwiLFwi4bu1XCI6XCJ5XCIsXCLKj1wiOlwieVwiLFwiyY5cIjpcInlcIixcIsmPXCI6XCJ5XCIsXCLGs1wiOlwieVwiLFwixrRcIjpcInlcIixcIsW5XCI6XCJ6XCIsXCLFulwiOlwielwiLFwi4bqQXCI6XCJ6XCIsXCLhupFcIjpcInpcIixcIsW9XCI6XCJ6XCIsXCLFvlwiOlwielwiLFwixbtcIjpcInpcIixcIsW8XCI6XCJ6XCIsXCLhupJcIjpcInpcIixcIuG6k1wiOlwielwiLFwi4bqUXCI6XCJ6XCIsXCLhupVcIjpcInpcIixcIsa1XCI6XCJ6XCIsXCLGtlwiOlwielwiLFwiyKRcIjpcInpcIixcIsilXCI6XCJ6XCIsXCLKkFwiOlwielwiLFwiypFcIjpcInpcIixcIuKxq1wiOlwielwiLFwi4rGsXCI6XCJ6XCIsXCLHrlwiOlwielwiLFwix69cIjpcInpcIixcIsa6XCI6XCJ6XCIsXCLvvJJcIjpcIjJcIixcIu+8llwiOlwiNlwiLFwi77yiXCI6XCJCXCIsXCLvvKZcIjpcIkZcIixcIu+8qlwiOlwiSlwiLFwi77yuXCI6XCJOXCIsXCLvvLJcIjpcIlJcIixcIu+8tlwiOlwiVlwiLFwi77y6XCI6XCJaXCIsXCLvvYJcIjpcImJcIixcIu+9hlwiOlwiZlwiLFwi772KXCI6XCJqXCIsXCLvvY5cIjpcIm5cIixcIu+9klwiOlwiclwiLFwi772WXCI6XCJ2XCIsXCLvvZpcIjpcInpcIixcIu+8kVwiOlwiMVwiLFwi77yVXCI6XCI1XCIsXCLvvJlcIjpcIjlcIixcIu+8oVwiOlwiQVwiLFwi77ylXCI6XCJFXCIsXCLvvKlcIjpcIklcIixcIu+8rVwiOlwiTVwiLFwi77yxXCI6XCJRXCIsXCLvvLVcIjpcIlVcIixcIu+8uVwiOlwiWVwiLFwi772BXCI6XCJhXCIsXCLvvYVcIjpcImVcIixcIu+9iVwiOlwiaVwiLFwi772NXCI6XCJtXCIsXCLvvZFcIjpcInFcIixcIu+9lVwiOlwidVwiLFwi772ZXCI6XCJ5XCIsXCLvvJBcIjpcIjBcIixcIu+8lFwiOlwiNFwiLFwi77yYXCI6XCI4XCIsXCLvvKRcIjpcIkRcIixcIu+8qFwiOlwiSFwiLFwi77ysXCI6XCJMXCIsXCLvvLBcIjpcIlBcIixcIu+8tFwiOlwiVFwiLFwi77y4XCI6XCJYXCIsXCLvvYRcIjpcImRcIixcIu+9iFwiOlwiaFwiLFwi772MXCI6XCJsXCIsXCLvvZBcIjpcInBcIixcIu+9lFwiOlwidFwiLFwi772YXCI6XCJ4XCIsXCLvvJNcIjpcIjNcIixcIu+8l1wiOlwiN1wiLFwi77yjXCI6XCJDXCIsXCLvvKdcIjpcIkdcIixcIu+8q1wiOlwiS1wiLFwi77yvXCI6XCJPXCIsXCLvvLNcIjpcIlNcIixcIu+8t1wiOlwiV1wiLFwi772DXCI6XCJjXCIsXCLvvYdcIjpcImdcIixcIu+9i1wiOlwia1wiLFwi772PXCI6XCJvXCIsXCLvvZNcIjpcInNcIixcIu+9l1wiOlwid1wiLFwi4bqzXCI6XCJhXCIsXCLDglwiOlwiYVwiLFwiw6JcIjpcImFcIixcIuG6pFwiOlwiYVwiLFwi4bqlXCI6XCJhXCIsXCLhuqZcIjpcImFcIixcIuG6p1wiOlwiYVwifTt2b2lkIDA9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSYmKHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlLG8saSxuKXt2YXIgYSxyPW9baV0scz1wYXJzZUZsb2F0KHIpLGw9ci5zcGxpdCgvXFxkLylbMF07cmV0dXJuIG49bnVsbCE9PW4/bjovJXxlbS8udGVzdChsKSYmZS5wYXJlbnRFbGVtZW50P3QoZS5wYXJlbnRFbGVtZW50LGUucGFyZW50RWxlbWVudC5jdXJyZW50U3R5bGUsXCJmb250U2l6ZVwiLG51bGwpOjE2LGE9XCJmb250U2l6ZVwiPT09aT9uOi93aWR0aC9pLnRlc3QoaSk/ZS5jbGllbnRXaWR0aDplLmNsaWVudEhlaWdodCxcImVtXCI9PT1sP3MqbjpcImluXCI9PT1sPzk2KnM6XCJwdFwiPT09bD85NipzLzcyOlwiJVwiPT09bD9zLzEwMCphOnN9ZnVuY3Rpb24gZSh0LGUpe3ZhciBvPVwiYm9yZGVyXCI9PT1lP1wiV2lkdGhcIjpcIlwiLGk9ZStcIlRvcFwiK28sbj1lK1wiUmlnaHRcIitvLGE9ZStcIkJvdHRvbVwiK28scj1lK1wiTGVmdFwiK287dFtlXT0odFtpXT09PXRbbl09PT10W2FdPT09dFtyXT9bdFtpXV06dFtpXT09PXRbYV0mJnRbcl09PT10W25dP1t0W2ldLHRbbl1dOnRbcl09PT10W25dP1t0W2ldLHRbbl0sdFthXV06W3RbaV0sdFtuXSx0W2FdLHRbcl1dKS5qb2luKFwiIFwiKX1mdW5jdGlvbiBvKG8pe3ZhciBpLG49by5jdXJyZW50U3R5bGUsYT10aGlzLHI9dChvLG4sXCJmb250U2l6ZVwiLG51bGwpO2ZvcihpIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4saSkmJigvd2lkdGh8aGVpZ2h0fG1hcmdpbi58cGFkZGluZy58Ym9yZGVyLitXLy50ZXN0KGkpJiZcImF1dG9cIiE9PWFbaV0/YVtpXT10KG8sbixpLHIpK1wicHhcIjpcInN0eWxlRmxvYXRcIj09PWk/YS5mbG9hdD1uW2ldOmFbaV09bltpXSk7cmV0dXJuIGUoYSxcIm1hcmdpblwiKSxlKGEsXCJwYWRkaW5nXCIpLGUoYSxcImJvcmRlclwiKSxhLmZvbnRTaXplPXIrXCJweFwiLGF9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gbmV3IG8odCl9cmV0dXJuIG8ucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpvLGdldFByb3BlcnR5UHJpb3JpdHk6ZnVuY3Rpb24oKXt9LGdldFByb3BlcnR5VmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbdF18fFwiXCJ9LGl0ZW06ZnVuY3Rpb24oKXt9LHJlbW92ZVByb3BlcnR5OmZ1bmN0aW9uKCl7fSxzZXRQcm9wZXJ0eTpmdW5jdGlvbigpe30sZ2V0UHJvcGVydHlDU1NWYWx1ZTpmdW5jdGlvbigpe319LGl9KCkpLHQoZG9jdW1lbnQpLm9uKFwia2V5ZG93bi54ZHNvZnRjdHJsXCIsZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09QyYmKF89ITApLHQua2V5Q29kZT09PVMmJihfPSEwKX0pLm9uKFwia2V5dXAueGRzb2Z0Y3RybFwiLGZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PUMmJihfPSExKSx0LmtleUNvZGU9PT1TJiYoXz0hMSl9KSxQPXttaW5MZW5ndGg6MCx2YWx1ZUtleTpcInZhbHVlXCIsdGl0bGVLZXk6XCJ0aXRsZVwiLGhpZ2hsaWdodDohMCxzaG93SGludDohMCxkcm9wZG93bldpZHRoOlwiMTAwJVwiLGRyb3Bkb3duU3R5bGU6e30saXRlbVN0eWxlOnt9LGhpbnRTdHlsZTohMSxzdHlsZTohMSxkZWJ1ZzohMCxvcGVuT25Gb2N1czohMSxjbG9zZU9uQmx1cjohMCxhdXRvc2VsZWN0OiExLGFjY2VudHM6ITAscmVwbGFjZUFjY2VudHNGb3JSZW1vdGU6ITAsbGltaXQ6MjAsdmlzaWJsZUxpbWl0OjIwLHZpc2libGVIZWlnaHQ6MCxkZWZhdWx0SGVpZ2h0SXRlbTozMCx0aW1lb3V0VXBkYXRlOjEwLGdldDpmdW5jdGlvbih0LGUpe3JldHVybiBsLmNhbGwodGhpcyx0LGUpfSxyZXBsYWNlOltmdW5jdGlvbih0LG8pe3JldHVybiB0aGlzLnJlcGxhY2VBY2NlbnRzRm9yUmVtb3RlJiYobz1lKG8pKSx0LnJlcGxhY2UoXCIlUVVFUlklXCIsZW5jb2RlVVJJQ29tcG9uZW50KG8pKX1dLGVxdWFsOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUudG9Mb3dlckNhc2UoKT09dC5zdWJzdHIoMCxlLmxlbmd0aCkudG9Mb3dlckNhc2UoKX0sZmluZFJpZ2h0OltmdW5jdGlvbih0LGUsbyl7dmFyIGksbj1cIlwiO2lmKHQpZm9yKGk9MDtpPHQubGVuZ3RoO2krPTEpaWYobj1zLmNhbGwodGhpcyxcImdldFZhbHVlXCIsbyxbdFtpXSxvXSkscy5jYWxsKHRoaXMsXCJlcXVhbFwiLG8sW24sZSxvXSwhMSkpcmV0dXJuIHRbaV07cmV0dXJuITF9XSx2YWxpZDpbZnVuY3Rpb24odCxvKXtyZXR1cm4gdGhpcy5hY2NlbnRzJiYodD1lKHQpLG89ZShvKSksLTEhPXQudG9Mb3dlckNhc2UoKS5pbmRleE9mKG8udG9Mb3dlckNhc2UoKSl9XSxmaWx0ZXI6W2Z1bmN0aW9uKHQsZSxvKXt2YXIgaSxuPVtdLHI9XCJcIjtpZih0KWZvcihpPTA7aTx0Lmxlbmd0aDtpKz0xKXI9YSh0W2ldW3RoaXMuZ2V0KFwidmFsdWVLZXlcIixvKV0pP3RbaV1bdGhpcy5nZXQoXCJ2YWx1ZUtleVwiLG8pXTp0W2ldLnRvU3RyaW5nKCkscy5jYWxsKHRoaXMsXCJ2YWxpZFwiLG8sW3IsZV0pJiZuLnB1c2godFtpXSk7cmV0dXJuIG59XSxwcmVwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm4gdH0sZ2V0VmFsdWU6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGEodFt0aGlzLmdldChcInZhbHVlS2V5XCIsZSldKT90W3RoaXMuZ2V0KFwidmFsdWVLZXlcIixlKV06dC50b1N0cmluZygpfV0sZ2V0VGl0bGU6W2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGEodFt0aGlzLmdldChcInRpdGxlS2V5XCIsZSldKT90W3RoaXMuZ2V0KFwidGl0bGVLZXlcIixlKV06dC50b1N0cmluZygpfV0scmVuZGVyOltmdW5jdGlvbih0LGksbixhKXt2YXIgcixsLGMsdT1zLmNhbGwodGhpcyxcImdldFZhbHVlXCIsaSxbdCxpXSxQLmdldFZhbHVlWzBdLmNhbGwodGhpcyx0LGkpKSxkPXMuY2FsbCh0aGlzLFwiZ2V0VGl0bGVcIixpLFt0LGldLFAuZ2V0VGl0bGVbMF0uY2FsbCh0aGlzLHQsaSkpLGY9XCJcIixoPVwiXCIsZz1cIlwiLHA9XCJcIix2PTA7aWYodGhpcy5oaWdobGlnaHQpaWYodGhpcy5hY2NlbnRzKXtmb3IoaD1lKGQpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWzw+XSsvZyxcIlwiKSxmPWUoYSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bPD5dKy9nLFwiXCIpLGc9aC5yZXBsYWNlKG5ldyBSZWdFeHAobyhmKSxcImdcIiksXCI8XCIrZitcIj5cIiksYz0wO2M8Zy5sZW5ndGg7Yys9MSlyPWQuY2hhckF0KHYpLGw9Zy5jaGFyQXQoYyksXCI8XCI9PT1sP3ArPVwiPGI+XCI6XCI+XCI9PT1sP3ArPVwiPC9iPlwiOih2Kz0xLHArPXIpO2Q9cH1lbHNlIGQ9ZC5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXCIrbyhhKStcIilcIixcImlcIiksXCI8Yj4kMTwvYj5cIik7cmV0dXJuXCI8ZGl2IFwiKyh1PT1hPydjbGFzcz1cImFjdGl2ZVwiJzpcIlwiKSsnIGRhdGEtdmFsdWU9XCInK2VuY29kZVVSSUNvbXBvbmVudCh1KSsnXCI+JytkK1wiPC9kaXY+XCJ9XSxhcHBlbmRNZXRob2Q6XCJjb25jYXRcIixzb3VyY2U6W10sYWZ0ZXJTZWxlY3RlZDpmdW5jdGlvbigpe319LE89e2Rlc3Ryb3k6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmlnZ2VyKFwiZGVzdHJveS54ZHNvZnRcIil9LHVwZGF0ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRyaWdnZXIoXCJ1cGRhdGVIZWxwZXJQb3NpdGlvbi54ZHNvZnRcIil9LG9wdGlvbnM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpJiZ0LmlzUGxhaW5PYmplY3QoZSkmJnRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIsdC5leHRlbmQoITAsdGhpcy5kYXRhKFwiYXV0b2NvbXBsZXRlX29wdGlvbnNcIiksZSkpLHRoaXN9LHNldFNvdXJjZTpmdW5jdGlvbihlLG8pe2lmKHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpJiYodC5pc1BsYWluT2JqZWN0KGUpfHx0LmlzRnVuY3Rpb24oZSl8fHQuaXNBcnJheShlKSkpe3ZhciBpPXRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpLG49dGhpcy5kYXRhKFwieGRzb2Z0X2F1dG9jb21wbGV0ZVwiKSxhPWkuc291cmNlO3ZvaWQgMD09PW98fGlzTmFOKG8pP3QuaXNGdW5jdGlvbihlKT90aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKS5zb3VyY2U9ZTp0LmV4dGVuZCghMCxhLGUpOnQuaXNQbGFpbk9iamVjdChlKXx8dC5pc0FycmF5KGUpP2Fbb109dC5leHRlbmQoITAsdC5pc0FycmF5KGUpP1tdOnt9LGUpOmFbb109ZSxmLmNhbGwoaSx0aGlzLnZhbCgpLG4sZnVuY3Rpb24odCl7ZC5jYWxsKGksbix0KX0pfXJldHVybiB0aGlzfSxnZXRTb3VyY2U6ZnVuY3Rpb24odCl7aWYodGhpcy5kYXRhKFwiYXV0b2NvbXBsZXRlX29wdGlvbnNcIikpe3ZhciBlPXRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpLnNvdXJjZTtyZXR1cm4gdm9pZCAwIT09dCYmIWlzTmFOKHQpJiZlW3RdP2VbdF06ZX1yZXR1cm4gbnVsbH19LHQuZm4uYXV0b2NvbXBsZXRlPWZ1bmN0aW9uKGUsbyxpKXtyZXR1cm5cInN0cmluZ1wiPT09dC50eXBlKGUpJiZPW2VdP09bZV0uY2FsbCh0aGlzLG8saSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7bSh0aGlzLHQuZXh0ZW5kKCEwLHt9LFAsZSkpfSl9fShqUXVlcnkpOyIsImZ1bmN0aW9uIHNlYXJjaFN1Y2Nlc3MoZSxhLGMpeyQoXCIjc2VhcmNoLXJlc3VsdHNcIikuaHRtbChlKX0hZnVuY3Rpb24oZSl7ZShcIiNzZWFyY2hcIikua2V5dXAoZnVuY3Rpb24oKXtlLmFqYXgoe3R5cGU6XCJQT1NUXCIsdXJsOlwiL3NlYXJjaC9cIixkYXRhOntzZWFyY2hfdGV4dDplKFwiI3NlYXJjaFwiKS52YWwoKSxjc3JmbWlkZGxld2FyZXRva2VuOmUoXCJpbnB1dFtuYW1lPWNzcmZtaWRkbGV3YXJldG9rZW5dXCIpLnZhbCgpfSxzdWNjZXNzOnNlYXJjaFN1Y2Nlc3MsZGF0YVR5cGU6XCJodG1sXCJ9KX0pfSgkKTsiLCJmdW5jdGlvbiBzaG93T3JIaWRlKGUsdCl7ZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpLGUuY2hlY2tlZD90LnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiOnQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn1mdW5jdGlvbiBfZGlzY291bnQoZSx0KXtpZihcInt9XCI9PUpTT04uc3RyaW5naWZ5KHQpKXJldHVybiAxO2Zvcih2YXIgbj1PYmplY3Qua2V5cyh0KSxhPTAscj1uLmxlbmd0aDthPHI7YSsrKXt2YXIgdT1uW2FdLnNwbGl0KFwiLVwiKTtpZihwYXJzZUludCh1WzBdKTw9ZSYmZTxwYXJzZUZsb2F0KHVbMV0pKXJldHVybiBwYXJzZUZsb2F0KHRbblthXV0pfX1mdW5jdGlvbiBjYWxjdWxhdGUoKXt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZhcmlhbnRfbGVuZ3RoXCIpLnZhbHVlLHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiKSYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiKS52YWx1ZSxuPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzdWx0XCIpLGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmljZV9wZXJfaXRvbVwiKSxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXJ3XCIpLHU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2YXJpYW50c1wiKSYmSlNPTi5wYXJzZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZhcmlhbnRzXCIpLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSksbz1KU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGlzY291bnRfcG9saWN5XCIpLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSksbD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByb2R1Y3Rfc2x1Z1wiKSxjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzdWx0X2l0b2dcIiksZD0wO2lmKDA9PWUmJihkPU1hdGgucm91bmQodVswXS5wcmljZSpfZGlzY291bnQodCxvKSksbi5pbm5lckhUTUw9ZCxhLnZhbHVlPWQsZCo9dCxjLmlubmVySFRNTD1kLHIuaW5uZXJIVE1MPU1hdGgucm91bmQoLjA1KmQpLGwudmFsdWU9dVswXS5zbHVnKSxlPjEpZm9yKHZhciBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRfMFwiKSxtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRfMVwiKSxzPUpTT04ucGFyc2UoaS52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLHA9SlNPTi5wYXJzZShtLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSksZz0wLHY9dS5sZW5ndGg7Zzx2O2crKyl1W2ddLmF0dHJpYnV0ZXNbaS5uYW1lXT09cy5uYW1lJiZ1W2ddLmF0dHJpYnV0ZXNbbS5uYW1lXT09cC5uYW1lJiYoZD1NYXRoLnJvdW5kKHVbZ10ucHJpY2UqX2Rpc2NvdW50KHQsbykpLG4uaW5uZXJIVE1MPWQsYS52YWx1ZT1kLGQqPXQsYy5pbm5lckhUTUw9ZCxyLmlubmVySFRNTD1NYXRoLnJvdW5kKC4wNSpkKSxsLnZhbHVlPXVbZ10uc2x1Zyk7ZWxzZSBmb3IodmFyIGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZF8wXCIpLHM9SlNPTi5wYXJzZShpLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSksZz0wLHY9dS5sZW5ndGg7Zzx2O2crKyl1W2ddLmF0dHJpYnV0ZXNbaS5uYW1lXT09cy5uYW1lJiYoZD1NYXRoLnJvdW5kKHVbZ10ucHJpY2UqX2Rpc2NvdW50KHQsbykpLG4uaW5uZXJIVE1MPWQsYS52YWx1ZT1kLGQqPXQsYy5pbm5lckhUTUw9ZCxyLmlubmVySFRNTD1NYXRoLnJvdW5kKC4wNSpkKSxsLnZhbHVlPXVbZ10uc2x1Zyl9JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7JChcIi5iYXNrZXQtaXRlbXNcIikucmVtb3ZlQ2xhc3MoXCJoaWRkZW5cIil9dmFyIHQ9JChcIiNmb3JtLWJ1eWluZy1wcm9kdWN0c1wiKTt0Lm9uKFwic3VibWl0XCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLCQoXCIjbnVtYmVyXCIpLnZhbCgpO3ZhciBuPSQoXCIjbnVtYmVyXCIpLnZhbCgpLGE9JChcIiNzdWJtaXQtYnRuXCIpLHI9YS5kYXRhKFwicHJvZHVjdHMtaWRcIiksdT0oYS5kYXRhKFwicHJvZHVjdHMtbmFtZVwiKSxhLmRhdGEoXCJwcm9kdWN0cy1wcmljZVwiKSx7fSk7dS5wcm9kdWN0X2lkPXIsdS5ubWI9bjt2YXIgbz0kKCcjZm9ybS1idXlpbmctcHJvZHVjdHMgW25hbWU9XCJjc3JmbWlkZGxld2FyZXRva2VuXCJdJykudmFsKCk7dS5jc3JmbWlkZGxld2FyZXRva2VuPW87dmFyIGw9dC5hdHRyKFwiYWN0aW9uXCIpOyQuYWpheCh7dXJsOmwsdHlwZTpcIlBPU1RcIixkYXRhOnUsY2FjaGU6ITAsc3VjY2VzczpmdW5jdGlvbihlKXtlLnByb2R1Y3RzX3RvdGFsX25tYiYmKCQoXCIjYmFza2V0X3RvdGFsX25tYlwiKS50ZXh0KFwiKFwiK2UucHJvZHVjdHNfdG90YWxfbm1iK1wiKVwiKSwkKFwiLmJhc2tldC1pdGVtcyB1bFwiKS5odG1sKFwiXCIpLCQuZWFjaChlLnByb2R1Y3RzLGZ1bmN0aW9uKGUsdCl7JChcIi5iYXNrZXQtaXRlbXMgdWxcIikuYXBwZW5kKFwiPGxpPlwiK3QubmFtZStcIiwgXCIrdC5ubWIrXCJwYy4gZm9yIFwiK3QucHJpY2VfcGVyX2l0ZW0rXCJydWIuICA8L2xpPlwiKX0pKX0sZXJyb3I6ZnVuY3Rpb24oKXtjb25zb2xlLmxvZyhcImVycm9yXCIpfX0pfSksJChcIi5iYXNrZXQtY29udGFpbmVyXCIpLm1vdXNlb3ZlcihmdW5jdGlvbigpe2UoKX0pLCQoXCIuYmFza2V0LWNvbnRhaW5lclwiKS5tb3VzZW91dChmdW5jdGlvbigpe2UoKX0pLCQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIixcIi5kZWxldGUtaXRlbVwiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSwkKHRoaXMpLmNsb3Nlc3QoXCJsaVwiKS5yZW1vdmUoKX0pfSk7IiwiZnVuY3Rpb24gc2VhcmNoU3VjY2Vzcyh0LGUsaSl7JChcIiNzZWFyY2gtcmVzdWx0c1wiKS5odG1sKHQpfWZ1bmN0aW9uIHNob3dPckhpZGUodCxlKXt0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpLGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksdC5jaGVja2VkP2Uuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI6ZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwifWZ1bmN0aW9uIF9kaXNjb3VudCh0LGUpe2lmKFwie31cIj09SlNPTi5zdHJpbmdpZnkoZSkpcmV0dXJuIDE7Zm9yKHZhciBpPU9iamVjdC5rZXlzKGUpLG49MCxzPWkubGVuZ3RoO248cztuKyspe3ZhciBvPWlbbl0uc3BsaXQoXCItXCIpO2lmKHBhcnNlSW50KG9bMF0pPD10JiZ0PHBhcnNlRmxvYXQob1sxXSkpcmV0dXJuIHBhcnNlRmxvYXQoZVtpW25dXSl9fWZ1bmN0aW9uIGNhbGN1bGF0ZSgpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidmFyaWFudF9sZW5ndGhcIikudmFsdWUsZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIpJiZkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1YW50aXR5XCIpLnZhbHVlLGk9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXN1bHRcIiksbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByaWNlX3Blcl9pdG9tXCIpLHM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlcndcIiksbz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZhcmlhbnRzXCIpJiZKU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidmFyaWFudHNcIikudmFsdWUucmVwbGFjZSgvJy9nLCdcIicpKSxhPUpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkaXNjb3VudF9wb2xpY3lcIikudmFsdWUucmVwbGFjZSgvJy9nLCdcIicpKSxyPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJvZHVjdF9zbHVnXCIpLGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXN1bHRfaXRvZ1wiKSxoPTA7aWYoMD09dCYmKGg9TWF0aC5yb3VuZChvWzBdLnByaWNlKl9kaXNjb3VudChlLGEpKSxpLmlubmVySFRNTD1oLG4udmFsdWU9aCxoKj1lLGwuaW5uZXJIVE1MPWgscy5pbm5lckhUTUw9TWF0aC5yb3VuZCguMDUqaCksci52YWx1ZT1vWzBdLnNsdWcpLHQ+MSlmb3IodmFyIGM9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZF8wXCIpLHU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpZF8xXCIpLGQ9SlNPTi5wYXJzZShjLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSkscD1KU09OLnBhcnNlKHUudmFsdWUucmVwbGFjZSgvJy9nLCdcIicpKSxmPTAsZz1vLmxlbmd0aDtmPGc7ZisrKW9bZl0uYXR0cmlidXRlc1tjLm5hbWVdPT1kLm5hbWUmJm9bZl0uYXR0cmlidXRlc1t1Lm5hbWVdPT1wLm5hbWUmJihoPU1hdGgucm91bmQob1tmXS5wcmljZSpfZGlzY291bnQoZSxhKSksaS5pbm5lckhUTUw9aCxuLnZhbHVlPWgsaCo9ZSxsLmlubmVySFRNTD1oLHMuaW5uZXJIVE1MPU1hdGgucm91bmQoLjA1KmgpLHIudmFsdWU9b1tmXS5zbHVnKTtlbHNlIGZvcihjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRfMFwiKSxkPUpTT04ucGFyc2UoYy52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLGY9MCxnPW8ubGVuZ3RoO2Y8ZztmKyspb1tmXS5hdHRyaWJ1dGVzW2MubmFtZV09PWQubmFtZSYmKGg9TWF0aC5yb3VuZChvW2ZdLnByaWNlKl9kaXNjb3VudChlLGEpKSxpLmlubmVySFRNTD1oLG4udmFsdWU9aCxoKj1lLGwuaW5uZXJIVE1MPWgscy5pbm5lckhUTUw9TWF0aC5yb3VuZCguMDUqaCksci52YWx1ZT1vW2ZdLnNsdWcpfWZ1bmN0aW9uIHNlYXJjaFN1Y2Nlc3ModCxlLGkpeyQoXCIjc2VhcmNoLXJlc3VsdHNcIikuaHRtbCh0KX1mdW5jdGlvbiBzaG93T3JIaWRlKHQsZSl7dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpLHQuY2hlY2tlZD9lLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiOmUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIn1mdW5jdGlvbiBfZGlzY291bnQodCxlKXtpZihcInt9XCI9PUpTT04uc3RyaW5naWZ5KGUpKXJldHVybiAxO2Zvcih2YXIgaT1PYmplY3Qua2V5cyhlKSxuPTAscz1pLmxlbmd0aDtuPHM7bisrKXt2YXIgbz1pW25dLnNwbGl0KFwiLVwiKTtpZihwYXJzZUludChvWzBdKTw9dCYmdDxwYXJzZUZsb2F0KG9bMV0pKXJldHVybiBwYXJzZUZsb2F0KGVbaVtuXV0pfX1mdW5jdGlvbiBjYWxjdWxhdGUoKXt2YXIgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZhcmlhbnRfbGVuZ3RoXCIpLnZhbHVlLGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiKSYmZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWFudGl0eVwiKS52YWx1ZSxpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzdWx0XCIpLG49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmljZV9wZXJfaXRvbVwiKSxzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXJ3XCIpLG89ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2YXJpYW50c1wiKSYmSlNPTi5wYXJzZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInZhcmlhbnRzXCIpLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSksYT1KU09OLnBhcnNlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGlzY291bnRfcG9saWN5XCIpLnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSkscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByb2R1Y3Rfc2x1Z1wiKSxsPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzdWx0X2l0b2dcIiksaD0wO2lmKDA9PXQmJihoPU1hdGgucm91bmQob1swXS5wcmljZSpfZGlzY291bnQoZSxhKSksaS5pbm5lckhUTUw9aCxuLnZhbHVlPWgsaCo9ZSxsLmlubmVySFRNTD1oLHMuaW5uZXJIVE1MPU1hdGgucm91bmQoLjA1KmgpLHIudmFsdWU9b1swXS5zbHVnKSx0PjEpZm9yKHZhciBjPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRfMFwiKSx1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRfMVwiKSxkPUpTT04ucGFyc2UoYy52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLHA9SlNPTi5wYXJzZSh1LnZhbHVlLnJlcGxhY2UoLycvZywnXCInKSksZj0wLGc9by5sZW5ndGg7ZjxnO2YrKylvW2ZdLmF0dHJpYnV0ZXNbYy5uYW1lXT09ZC5uYW1lJiZvW2ZdLmF0dHJpYnV0ZXNbdS5uYW1lXT09cC5uYW1lJiYoaD1NYXRoLnJvdW5kKG9bZl0ucHJpY2UqX2Rpc2NvdW50KGUsYSkpLGkuaW5uZXJIVE1MPWgsbi52YWx1ZT1oLGgqPWUsbC5pbm5lckhUTUw9aCxzLmlubmVySFRNTD1NYXRoLnJvdW5kKC4wNSpoKSxyLnZhbHVlPW9bZl0uc2x1Zyk7ZWxzZSBmb3IoYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXzBcIiksZD1KU09OLnBhcnNlKGMudmFsdWUucmVwbGFjZSgvJy9nLCdcIicpKSxmPTAsZz1vLmxlbmd0aDtmPGc7ZisrKW9bZl0uYXR0cmlidXRlc1tjLm5hbWVdPT1kLm5hbWUmJihoPU1hdGgucm91bmQob1tmXS5wcmljZSpfZGlzY291bnQoZSxhKSksaS5pbm5lckhUTUw9aCxuLnZhbHVlPWgsaCo9ZSxsLmlubmVySFRNTD1oLHMuaW5uZXJIVE1MPU1hdGgucm91bmQoLjA1KmgpLHIudmFsdWU9b1tmXS5zbHVnKX1mdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWUodCxlKXtlfHwoZT13aW5kb3cubG9jYXRpb24uaHJlZiksdD10LnJlcGxhY2UoL1tcXFtcXF1dL2csXCJcXFxcJCZcIik7dmFyIGk9bmV3IFJlZ0V4cChcIls/Jl1cIit0K1wiKD0oW14mI10qKXwmfCN8JClcIikuZXhlYyhlKTtyZXR1cm4gaT9pWzJdP2RlY29kZVVSSUNvbXBvbmVudChpWzJdLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk6XCJcIjpudWxsfWZ1bmN0aW9uIG9uRmFjZXRDaGFuZ2VBcHBsaWVkKCl7dmFyIHQ9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdK1wiP3E9XCIrZ2V0UGFyYW1ldGVyQnlOYW1lKFwicVwiKTtyZXR1cm4gJChcImlucHV0OmNoZWNrYm94LmZhY2V0XCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNoZWNrZWQ/JCh0aGlzKS52YWwoKTpudWxsLGk9dGhpcy5jaGVja2VkPyQodGhpcykuYXR0cihcIm5hbWVcIik6bnVsbDtudWxsIT09ZSYmKHQrPVwiJlwiK2VuY29kZVVSSUNvbXBvbmVudChpKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoZSkpfSksbG9jYXRpb24uaHJlZj10LCEwfWZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zKCl7Zm9yKHZhciB0LGU9e30saT13aW5kb3cubG9jYXRpb24uaHJlZi5zbGljZSh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKFwiP1wiKSsxKS5zcGxpdChcIiZcIiksbj0wO248aS5sZW5ndGg7bisrKWVbKHQ9aVtuXS5zcGxpdChcIj1cIikpWzFdXT10WzBdO3JldHVybiBlfWZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZSh0LGUpe2V8fChlPXdpbmRvdy5sb2NhdGlvbi5ocmVmKSx0PXQucmVwbGFjZSgvW1xcW1xcXV0vZyxcIlxcXFwkJlwiKTt2YXIgaT1uZXcgUmVnRXhwKFwiWz8mXVwiK3QrXCIoPShbXiYjXSopfCZ8I3wkKVwiKS5leGVjKGUpO3JldHVybiBpP2lbMl0/ZGVjb2RlVVJJQ29tcG9uZW50KGlbMl0ucmVwbGFjZSgvXFwrL2csXCIgXCIpKTpcIlwiOm51bGx9ZnVuY3Rpb24gb25GYWNldENoYW5nZUFwcGxpZWQoKXt2YXIgdD13aW5kb3cubG9jYXRpb24uaHJlZi5zcGxpdChcIj9cIilbMF0rXCI/cT1cIitnZXRQYXJhbWV0ZXJCeU5hbWUoXCJxXCIpO3JldHVybiAkKFwiaW5wdXQ6Y2hlY2tib3guZmFjZXRcIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2hlY2tlZD8kKHRoaXMpLnZhbCgpOm51bGwsaT10aGlzLmNoZWNrZWQ/JCh0aGlzKS5hdHRyKFwibmFtZVwiKTpudWxsO251bGwhPT1lJiYodCs9XCImXCIrZW5jb2RlVVJJQ29tcG9uZW50KGkpK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChlKSl9KSxsb2NhdGlvbi5ocmVmPXQsITB9ZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbXMoKXtmb3IodmFyIHQsZT17fSxpPXdpbmRvdy5sb2NhdGlvbi5ocmVmLnNsaWNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCI/XCIpKzEpLnNwbGl0KFwiJlwiKSxuPTA7bjxpLmxlbmd0aDtuKyspZVsodD1pW25dLnNwbGl0KFwiPVwiKSlbMV1dPXRbMF07cmV0dXJuIGV9aWYoZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9dC5kb2N1bWVudD9lKHQsITApOmZ1bmN0aW9uKHQpe2lmKCF0LmRvY3VtZW50KXRocm93IG5ldyBFcnJvcihcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIik7cmV0dXJuIGUodCl9OmUodCl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgbixzPShlPWV8fFopLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7aWYocy50ZXh0PXQsaSlmb3IobiBpbiBwdClpW25dJiYoc1tuXT1pW25dKTtlLmhlYWQuYXBwZW5kQ2hpbGQocykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzKX1mdW5jdGlvbiBuKHQpe3JldHVybiBudWxsPT10P3QrXCJcIjpcIm9iamVjdFwiPT10eXBlb2YgdHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdD9vdFthdC5jYWxsKHQpXXx8XCJvYmplY3RcIjp0eXBlb2YgdH1mdW5jdGlvbiBzKHQpe3ZhciBlPSEhdCYmXCJsZW5ndGhcImluIHQmJnQubGVuZ3RoLGk9bih0KTtyZXR1cm4hdXQodCkmJiFkdCh0KSYmKFwiYXJyYXlcIj09PWl8fDA9PT1lfHxcIm51bWJlclwiPT10eXBlb2YgZSYmZT4wJiZlLTEgaW4gdCl9ZnVuY3Rpb24gbyh0LGUpe3JldHVybiB0Lm5vZGVOYW1lJiZ0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1lLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gYSh0LGUsaSl7cmV0dXJuIHV0KGUpP2Z0LmdyZXAodCxmdW5jdGlvbih0LG4pe3JldHVybiEhZS5jYWxsKHQsbix0KSE9PWl9KTplLm5vZGVUeXBlP2Z0LmdyZXAodCxmdW5jdGlvbih0KXtyZXR1cm4gdD09PWUhPT1pfSk6XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZnQuZ3JlcCh0LGZ1bmN0aW9uKHQpe3JldHVybiBzdC5jYWxsKGUsdCk+LTEhPT1pfSk6ZnQuZmlsdGVyKGUsdCxpKX1mdW5jdGlvbiByKHQsZSl7Zm9yKDsodD10W2VdKSYmMSE9PXQubm9kZVR5cGU7KTtyZXR1cm4gdH1mdW5jdGlvbiBsKHQpe3JldHVybiB0fWZ1bmN0aW9uIGgodCl7dGhyb3cgdH1mdW5jdGlvbiBjKHQsZSxpLG4pe3ZhciBzO3RyeXt0JiZ1dChzPXQucHJvbWlzZSk/cy5jYWxsKHQpLmRvbmUoZSkuZmFpbChpKTp0JiZ1dChzPXQudGhlbik/cy5jYWxsKHQsZSxpKTplLmFwcGx5KHZvaWQgMCxbdF0uc2xpY2UobikpfWNhdGNoKHQpe2kuYXBwbHkodm9pZCAwLFt0XSl9fWZ1bmN0aW9uIHUoKXtaLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsdSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHUpLGZ0LnJlYWR5KCl9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5yZXBsYWNlKFB0LFwibXMtXCIpLnJlcGxhY2UoRXQsZCl9ZnVuY3Rpb24gZigpe3RoaXMuZXhwYW5kbz1mdC5leHBhbmRvK2YudWlkKyt9ZnVuY3Rpb24gZyh0LGUsaSl7dmFyIG47aWYodm9pZCAwPT09aSYmMT09PXQubm9kZVR5cGUpaWYobj1cImRhdGEtXCIrZS5yZXBsYWNlKEh0LFwiLSQmXCIpLnRvTG93ZXJDYXNlKCksXCJzdHJpbmdcIj09dHlwZW9mKGk9dC5nZXRBdHRyaWJ1dGUobikpKXt0cnl7aT1mdW5jdGlvbih0KXtyZXR1cm5cInRydWVcIj09PXR8fFwiZmFsc2VcIiE9PXQmJihcIm51bGxcIj09PXQ/bnVsbDp0PT09K3QrXCJcIj8rdDpOdC50ZXN0KHQpP0pTT04ucGFyc2UodCk6dCl9KGkpfWNhdGNoKHQpe31PdC5zZXQodCxlLGkpfWVsc2UgaT12b2lkIDA7cmV0dXJuIGl9ZnVuY3Rpb24gbSh0LGUsaSxuKXt2YXIgcyxvLGE9MjAscj1uP2Z1bmN0aW9uKCl7cmV0dXJuIG4uY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIGZ0LmNzcyh0LGUsXCJcIil9LGw9cigpLGg9aSYmaVszXXx8KGZ0LmNzc051bWJlcltlXT9cIlwiOlwicHhcIiksYz0oZnQuY3NzTnVtYmVyW2VdfHxcInB4XCIhPT1oJiYrbCkmJkx0LmV4ZWMoZnQuY3NzKHQsZSkpO2lmKGMmJmNbM10hPT1oKXtmb3IobC89MixoPWh8fGNbM10sYz0rbHx8MTthLS07KWZ0LnN0eWxlKHQsZSxjK2gpLCgxLW8pKigxLShvPXIoKS9sfHwuNSkpPD0wJiYoYT0wKSxjLz1vO2MqPTIsZnQuc3R5bGUodCxlLGMraCksaT1pfHxbXX1yZXR1cm4gaSYmKGM9K2N8fCtsfHwwLHM9aVsxXT9jKyhpWzFdKzEpKmlbMl06K2lbMl0sbiYmKG4udW5pdD1oLG4uc3RhcnQ9YyxuLmVuZD1zKSksc31mdW5jdGlvbiB2KHQpe3ZhciBlLGk9dC5vd25lckRvY3VtZW50LG49dC5ub2RlTmFtZSxzPWp0W25dO3JldHVybiBzfHwoZT1pLmJvZHkuYXBwZW5kQ2hpbGQoaS5jcmVhdGVFbGVtZW50KG4pKSxzPWZ0LmNzcyhlLFwiZGlzcGxheVwiKSxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSksXCJub25lXCI9PT1zJiYocz1cImJsb2NrXCIpLGp0W25dPXMscyl9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgaSxuLHM9W10sbz0wLGE9dC5sZW5ndGg7bzxhO28rKykobj10W29dKS5zdHlsZSYmKGk9bi5zdHlsZS5kaXNwbGF5LGU/KFwibm9uZVwiPT09aSYmKHNbb109QXQuZ2V0KG4sXCJkaXNwbGF5XCIpfHxudWxsLHNbb118fChuLnN0eWxlLmRpc3BsYXk9XCJcIikpLFwiXCI9PT1uLnN0eWxlLmRpc3BsYXkmJlJ0KG4pJiYoc1tvXT12KG4pKSk6XCJub25lXCIhPT1pJiYoc1tvXT1cIm5vbmVcIixBdC5zZXQobixcImRpc3BsYXlcIixpKSkpO2ZvcihvPTA7bzxhO28rKyludWxsIT1zW29dJiYodFtvXS5zdHlsZS5kaXNwbGF5PXNbb10pO3JldHVybiB0fWZ1bmN0aW9uIF8odCxlKXt2YXIgaTtyZXR1cm4gaT12b2lkIDAhPT10LmdldEVsZW1lbnRzQnlUYWdOYW1lP3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoZXx8XCIqXCIpOnZvaWQgMCE9PXQucXVlcnlTZWxlY3RvckFsbD90LnF1ZXJ5U2VsZWN0b3JBbGwoZXx8XCIqXCIpOltdLHZvaWQgMD09PWV8fGUmJm8odCxlKT9mdC5tZXJnZShbdF0saSk6aX1mdW5jdGlvbiB5KHQsZSl7Zm9yKHZhciBpPTAsbj10Lmxlbmd0aDtpPG47aSsrKUF0LnNldCh0W2ldLFwiZ2xvYmFsRXZhbFwiLCFlfHxBdC5nZXQoZVtpXSxcImdsb2JhbEV2YWxcIikpfWZ1bmN0aW9uIHcodCxlLGkscyxvKXtmb3IodmFyIGEscixsLGgsYyx1LGQ9ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkscD1bXSxmPTAsZz10Lmxlbmd0aDtmPGc7ZisrKWlmKChhPXRbZl0pfHwwPT09YSlpZihcIm9iamVjdFwiPT09bihhKSlmdC5tZXJnZShwLGEubm9kZVR5cGU/W2FdOmEpO2Vsc2UgaWYoWXQudGVzdChhKSl7Zm9yKHI9cnx8ZC5hcHBlbmRDaGlsZChlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLGw9KEJ0LmV4ZWMoYSl8fFtcIlwiLFwiXCJdKVsxXS50b0xvd2VyQ2FzZSgpLGg9VXRbbF18fFV0Ll9kZWZhdWx0LHIuaW5uZXJIVE1MPWhbMV0rZnQuaHRtbFByZWZpbHRlcihhKStoWzJdLHU9aFswXTt1LS07KXI9ci5sYXN0Q2hpbGQ7ZnQubWVyZ2UocCxyLmNoaWxkTm9kZXMpLChyPWQuZmlyc3RDaGlsZCkudGV4dENvbnRlbnQ9XCJcIn1lbHNlIHAucHVzaChlLmNyZWF0ZVRleHROb2RlKGEpKTtmb3IoZC50ZXh0Q29udGVudD1cIlwiLGY9MDthPXBbZisrXTspaWYocyYmZnQuaW5BcnJheShhLHMpPi0xKW8mJm8ucHVzaChhKTtlbHNlIGlmKGM9ZnQuY29udGFpbnMoYS5vd25lckRvY3VtZW50LGEpLHI9XyhkLmFwcGVuZENoaWxkKGEpLFwic2NyaXB0XCIpLGMmJnkociksaSlmb3IodT0wO2E9clt1KytdOylxdC50ZXN0KGEudHlwZXx8XCJcIikmJmkucHVzaChhKTtyZXR1cm4gZH1mdW5jdGlvbiB4KCl7cmV0dXJuITB9ZnVuY3Rpb24gQygpe3JldHVybiExfWZ1bmN0aW9uIGsoKXt0cnl7cmV0dXJuIFouYWN0aXZlRWxlbWVudH1jYXRjaCh0KXt9fWZ1bmN0aW9uIFQodCxlLGksbixzLG8pe3ZhciBhLHI7aWYoXCJvYmplY3RcIj09dHlwZW9mIGUpe2ZvcihyIGluXCJzdHJpbmdcIiE9dHlwZW9mIGkmJihuPW58fGksaT12b2lkIDApLGUpVCh0LHIsaSxuLGVbcl0sbyk7cmV0dXJuIHR9aWYobnVsbD09biYmbnVsbD09cz8ocz1pLG49aT12b2lkIDApOm51bGw9PXMmJihcInN0cmluZ1wiPT10eXBlb2YgaT8ocz1uLG49dm9pZCAwKToocz1uLG49aSxpPXZvaWQgMCkpLCExPT09cylzPUM7ZWxzZSBpZighcylyZXR1cm4gdDtyZXR1cm4gMT09PW8mJihhPXMsKHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ0KCkub2ZmKHQpLGEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9ZnQuZ3VpZCsrKSksdC5lYWNoKGZ1bmN0aW9uKCl7ZnQuZXZlbnQuYWRkKHRoaXMsZSxzLG4saSl9KX1mdW5jdGlvbiBEKHQsZSl7cmV0dXJuIG8odCxcInRhYmxlXCIpJiZvKDExIT09ZS5ub2RlVHlwZT9lOmUuZmlyc3RDaGlsZCxcInRyXCIpJiZmdCh0KS5jaGlsZHJlbihcInRib2R5XCIpWzBdfHx0fWZ1bmN0aW9uIFModCl7cmV0dXJuIHQudHlwZT0obnVsbCE9PXQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSkrXCIvXCIrdC50eXBlLHR9ZnVuY3Rpb24gSSh0KXtyZXR1cm5cInRydWUvXCI9PT0odC50eXBlfHxcIlwiKS5zbGljZSgwLDUpP3QudHlwZT10LnR5cGUuc2xpY2UoNSk6dC5yZW1vdmVBdHRyaWJ1dGUoXCJ0eXBlXCIpLHR9ZnVuY3Rpb24gUCh0LGUpe3ZhciBpLG4scyxvLGEscixsLGg7aWYoMT09PWUubm9kZVR5cGUpe2lmKEF0Lmhhc0RhdGEodCkmJihvPUF0LmFjY2Vzcyh0KSxhPUF0LnNldChlLG8pLGg9by5ldmVudHMpKWZvcihzIGluIGRlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fSxoKWZvcihpPTAsbj1oW3NdLmxlbmd0aDtpPG47aSsrKWZ0LmV2ZW50LmFkZChlLHMsaFtzXVtpXSk7T3QuaGFzRGF0YSh0KSYmKHI9T3QuYWNjZXNzKHQpLGw9ZnQuZXh0ZW5kKHt9LHIpLE90LnNldChlLGwpKX19ZnVuY3Rpb24gRSh0LGUpe3ZhciBpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcImlucHV0XCI9PT1pJiZGdC50ZXN0KHQudHlwZSk/ZS5jaGVja2VkPXQuY2hlY2tlZDpcImlucHV0XCIhPT1pJiZcInRleHRhcmVhXCIhPT1pfHwoZS5kZWZhdWx0VmFsdWU9dC5kZWZhdWx0VmFsdWUpfWZ1bmN0aW9uIE0odCxlLG4scyl7ZT1pdC5hcHBseShbXSxlKTt2YXIgbyxhLHIsbCxoLGMsdT0wLGQ9dC5sZW5ndGgscD1kLTEsZj1lWzBdLGc9dXQoZik7aWYoZ3x8ZD4xJiZcInN0cmluZ1wiPT10eXBlb2YgZiYmIWN0LmNoZWNrQ2xvbmUmJlp0LnRlc3QoZikpcmV0dXJuIHQuZWFjaChmdW5jdGlvbihpKXt2YXIgbz10LmVxKGkpO2cmJihlWzBdPWYuY2FsbCh0aGlzLGksby5odG1sKCkpKSxNKG8sZSxuLHMpfSk7aWYoZCYmKGE9KG89dyhlLHRbMF0ub3duZXJEb2N1bWVudCwhMSx0LHMpKS5maXJzdENoaWxkLDE9PT1vLmNoaWxkTm9kZXMubGVuZ3RoJiYobz1hKSxhfHxzKSl7Zm9yKGw9KHI9ZnQubWFwKF8obyxcInNjcmlwdFwiKSxTKSkubGVuZ3RoO3U8ZDt1KyspaD1vLHUhPT1wJiYoaD1mdC5jbG9uZShoLCEwLCEwKSxsJiZmdC5tZXJnZShyLF8oaCxcInNjcmlwdFwiKSkpLG4uY2FsbCh0W3VdLGgsdSk7aWYobClmb3IoYz1yW3IubGVuZ3RoLTFdLm93bmVyRG9jdW1lbnQsZnQubWFwKHIsSSksdT0wO3U8bDt1KyspaD1yW3VdLHF0LnRlc3QoaC50eXBlfHxcIlwiKSYmIUF0LmFjY2VzcyhoLFwiZ2xvYmFsRXZhbFwiKSYmZnQuY29udGFpbnMoYyxoKSYmKGguc3JjJiZcIm1vZHVsZVwiIT09KGgudHlwZXx8XCJcIikudG9Mb3dlckNhc2UoKT9mdC5fZXZhbFVybCYmZnQuX2V2YWxVcmwoaC5zcmMpOmkoaC50ZXh0Q29udGVudC5yZXBsYWNlKHRlLFwiXCIpLGMsaCkpfXJldHVybiB0fWZ1bmN0aW9uIEEodCxlLGkpe2Zvcih2YXIgbixzPWU/ZnQuZmlsdGVyKGUsdCk6dCxvPTA7bnVsbCE9KG49c1tvXSk7bysrKWl8fDEhPT1uLm5vZGVUeXBlfHxmdC5jbGVhbkRhdGEoXyhuKSksbi5wYXJlbnROb2RlJiYoaSYmZnQuY29udGFpbnMobi5vd25lckRvY3VtZW50LG4pJiZ5KF8obixcInNjcmlwdFwiKSksbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG4pKTtyZXR1cm4gdH1mdW5jdGlvbiBPKHQsZSxpKXt2YXIgbixzLG8sYSxyPXQuc3R5bGU7cmV0dXJuKGk9aXx8aWUodCkpJiYoXCJcIiE9PShhPWkuZ2V0UHJvcGVydHlWYWx1ZShlKXx8aVtlXSl8fGZ0LmNvbnRhaW5zKHQub3duZXJEb2N1bWVudCx0KXx8KGE9ZnQuc3R5bGUodCxlKSksIWN0LnBpeGVsQm94U3R5bGVzKCkmJmVlLnRlc3QoYSkmJm5lLnRlc3QoZSkmJihuPXIud2lkdGgscz1yLm1pbldpZHRoLG89ci5tYXhXaWR0aCxyLm1pbldpZHRoPXIubWF4V2lkdGg9ci53aWR0aD1hLGE9aS53aWR0aCxyLndpZHRoPW4sci5taW5XaWR0aD1zLHIubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YStcIlwiOmF9ZnVuY3Rpb24gTih0LGUpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdCgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD1lKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1mdW5jdGlvbiBIKHQpe3ZhciBlPWZ0LmNzc1Byb3BzW3RdO3JldHVybiBlfHwoZT1mdC5jc3NQcm9wc1t0XT1mdW5jdGlvbih0KXtpZih0IGluIGhlKXJldHVybiB0O2Zvcih2YXIgZT10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxpPWxlLmxlbmd0aDtpLS07KWlmKCh0PWxlW2ldK2UpaW4gaGUpcmV0dXJuIHR9KHQpfHx0KSxlfWZ1bmN0aW9uIHoodCxlLGkpe3ZhciBuPUx0LmV4ZWMoZSk7cmV0dXJuIG4/TWF0aC5tYXgoMCxuWzJdLShpfHwwKSkrKG5bM118fFwicHhcIik6ZX1mdW5jdGlvbiBMKHQsZSxpLG4scyxvKXt2YXIgYT1cIndpZHRoXCI9PT1lPzE6MCxyPTAsbD0wO2lmKGk9PT0obj9cImJvcmRlclwiOlwiY29udGVudFwiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKVwibWFyZ2luXCI9PT1pJiYobCs9ZnQuY3NzKHQsaStXdFthXSwhMCxzKSksbj8oXCJjb250ZW50XCI9PT1pJiYobC09ZnQuY3NzKHQsXCJwYWRkaW5nXCIrV3RbYV0sITAscykpLFwibWFyZ2luXCIhPT1pJiYobC09ZnQuY3NzKHQsXCJib3JkZXJcIitXdFthXStcIldpZHRoXCIsITAscykpKToobCs9ZnQuY3NzKHQsXCJwYWRkaW5nXCIrV3RbYV0sITAscyksXCJwYWRkaW5nXCIhPT1pP2wrPWZ0LmNzcyh0LFwiYm9yZGVyXCIrV3RbYV0rXCJXaWR0aFwiLCEwLHMpOnIrPWZ0LmNzcyh0LFwiYm9yZGVyXCIrV3RbYV0rXCJXaWR0aFwiLCEwLHMpKTtyZXR1cm4hbiYmbz49MCYmKGwrPU1hdGgubWF4KDAsTWF0aC5jZWlsKHRbXCJvZmZzZXRcIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKV0tby1sLXItLjUpKSksbH1mdW5jdGlvbiBXKHQsZSxpKXt2YXIgbj1pZSh0KSxzPU8odCxlLG4pLG89XCJib3JkZXItYm94XCI9PT1mdC5jc3ModCxcImJveFNpemluZ1wiLCExLG4pLGE9bztpZihlZS50ZXN0KHMpKXtpZighaSlyZXR1cm4gcztzPVwiYXV0b1wifXJldHVybiBhPWEmJihjdC5ib3hTaXppbmdSZWxpYWJsZSgpfHxzPT09dC5zdHlsZVtlXSksKFwiYXV0b1wiPT09c3x8IXBhcnNlRmxvYXQocykmJlwiaW5saW5lXCI9PT1mdC5jc3ModCxcImRpc3BsYXlcIiwhMSxuKSkmJihzPXRbXCJvZmZzZXRcIitlWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKV0sYT0hMCksKHM9cGFyc2VGbG9hdChzKXx8MCkrTCh0LGUsaXx8KG8/XCJib3JkZXJcIjpcImNvbnRlbnRcIiksYSxuLHMpK1wicHhcIn1mdW5jdGlvbiBSKHQsZSxpLG4scyl7cmV0dXJuIG5ldyBSLnByb3RvdHlwZS5pbml0KHQsZSxpLG4scyl9ZnVuY3Rpb24gJCgpe3VlJiYoITE9PT1aLmhpZGRlbiYmdC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/dC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoJCk6dC5zZXRUaW1lb3V0KCQsZnQuZnguaW50ZXJ2YWwpLGZ0LmZ4LnRpY2soKSl9ZnVuY3Rpb24gaigpe3JldHVybiB0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtjZT12b2lkIDB9KSxjZT1EYXRlLm5vdygpfWZ1bmN0aW9uIEYodCxlKXt2YXIgaSxuPTAscz17aGVpZ2h0OnR9O2ZvcihlPWU/MTowO248NDtuKz0yLWUpc1tcIm1hcmdpblwiKyhpPVd0W25dKV09c1tcInBhZGRpbmdcIitpXT10O3JldHVybiBlJiYocy5vcGFjaXR5PXMud2lkdGg9dCksc31mdW5jdGlvbiBCKHQsZSxpKXtmb3IodmFyIG4scz0ocS50d2VlbmVyc1tlXXx8W10pLmNvbmNhdChxLnR3ZWVuZXJzW1wiKlwiXSksbz0wLGE9cy5sZW5ndGg7bzxhO28rKylpZihuPXNbb10uY2FsbChpLGUsdCkpcmV0dXJuIG59ZnVuY3Rpb24gcSh0LGUsaSl7dmFyIG4scyxvPTAsYT1xLnByZWZpbHRlcnMubGVuZ3RoLHI9ZnQuRGVmZXJyZWQoKS5hbHdheXMoZnVuY3Rpb24oKXtkZWxldGUgbC5lbGVtfSksbD1mdW5jdGlvbigpe2lmKHMpcmV0dXJuITE7Zm9yKHZhciBlPWNlfHxqKCksaT1NYXRoLm1heCgwLGguc3RhcnRUaW1lK2guZHVyYXRpb24tZSksbj0xLShpL2guZHVyYXRpb258fDApLG89MCxhPWgudHdlZW5zLmxlbmd0aDtvPGE7bysrKWgudHdlZW5zW29dLnJ1bihuKTtyZXR1cm4gci5ub3RpZnlXaXRoKHQsW2gsbixpXSksbjwxJiZhP2k6KGF8fHIubm90aWZ5V2l0aCh0LFtoLDEsMF0pLHIucmVzb2x2ZVdpdGgodCxbaF0pLCExKX0saD1yLnByb21pc2Uoe2VsZW06dCxwcm9wczpmdC5leHRlbmQoe30sZSksb3B0czpmdC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmZ0LmVhc2luZy5fZGVmYXVsdH0saSksb3JpZ2luYWxQcm9wZXJ0aWVzOmUsb3JpZ2luYWxPcHRpb25zOmksc3RhcnRUaW1lOmNlfHxqKCksZHVyYXRpb246aS5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSxpKXt2YXIgbj1mdC5Ud2Vlbih0LGgub3B0cyxlLGksaC5vcHRzLnNwZWNpYWxFYXNpbmdbZV18fGgub3B0cy5lYXNpbmcpO3JldHVybiBoLnR3ZWVucy5wdXNoKG4pLG59LHN0b3A6ZnVuY3Rpb24oZSl7dmFyIGk9MCxuPWU/aC50d2VlbnMubGVuZ3RoOjA7aWYocylyZXR1cm4gdGhpcztmb3Iocz0hMDtpPG47aSsrKWgudHdlZW5zW2ldLnJ1bigxKTtyZXR1cm4gZT8oci5ub3RpZnlXaXRoKHQsW2gsMSwwXSksci5yZXNvbHZlV2l0aCh0LFtoLGVdKSk6ci5yZWplY3RXaXRoKHQsW2gsZV0pLHRoaXN9fSksYz1oLnByb3BzO2ZvcigoZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsbyxhO2ZvcihpIGluIHQpaWYocz1lW249cChpKV0sbz10W2ldLEFycmF5LmlzQXJyYXkobykmJihzPW9bMV0sbz10W2ldPW9bMF0pLGkhPT1uJiYodFtuXT1vLGRlbGV0ZSB0W2ldKSwoYT1mdC5jc3NIb29rc1tuXSkmJlwiZXhwYW5kXCJpbiBhKWZvcihpIGluIG89YS5leHBhbmQobyksZGVsZXRlIHRbbl0sbylpIGluIHR8fCh0W2ldPW9baV0sZVtpXT1zKTtlbHNlIGVbbl09c30oYyxoLm9wdHMuc3BlY2lhbEVhc2luZykpO288YTtvKyspaWYobj1xLnByZWZpbHRlcnNbb10uY2FsbChoLHQsYyxoLm9wdHMpKXJldHVybiB1dChuLnN0b3ApJiYoZnQuX3F1ZXVlSG9va3MoaC5lbGVtLGgub3B0cy5xdWV1ZSkuc3RvcD1uLnN0b3AuYmluZChuKSksbjtyZXR1cm4gZnQubWFwKGMsQixoKSx1dChoLm9wdHMuc3RhcnQpJiZoLm9wdHMuc3RhcnQuY2FsbCh0LGgpLGgucHJvZ3Jlc3MoaC5vcHRzLnByb2dyZXNzKS5kb25lKGgub3B0cy5kb25lLGgub3B0cy5jb21wbGV0ZSkuZmFpbChoLm9wdHMuZmFpbCkuYWx3YXlzKGgub3B0cy5hbHdheXMpLGZ0LmZ4LnRpbWVyKGZ0LmV4dGVuZChsLHtlbGVtOnQsYW5pbTpoLHF1ZXVlOmgub3B0cy5xdWV1ZX0pKSxofWZ1bmN0aW9uIFUodCl7cmV0dXJuKHQubWF0Y2goVHQpfHxbXSkuam9pbihcIiBcIil9ZnVuY3Rpb24gWSh0KXtyZXR1cm4gdC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCJ9ZnVuY3Rpb24gVih0KXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0KT90Olwic3RyaW5nXCI9PXR5cGVvZiB0JiZ0Lm1hdGNoKFR0KXx8W119ZnVuY3Rpb24gSyh0LGUsaSxzKXt2YXIgbztpZihBcnJheS5pc0FycmF5KGUpKWZ0LmVhY2goZSxmdW5jdGlvbihlLG4pe2l8fGtlLnRlc3QodCk/cyh0LG4pOksodCtcIltcIisoXCJvYmplY3RcIj09dHlwZW9mIG4mJm51bGwhPW4/ZTpcIlwiKStcIl1cIixuLGkscyl9KTtlbHNlIGlmKGl8fFwib2JqZWN0XCIhPT1uKGUpKXModCxlKTtlbHNlIGZvcihvIGluIGUpSyh0K1wiW1wiK28rXCJdXCIsZVtvXSxpLHMpfWZ1bmN0aW9uIFgodCl7cmV0dXJuIGZ1bmN0aW9uKGUsaSl7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihpPWUsZT1cIipcIik7dmFyIG4scz0wLG89ZS50b0xvd2VyQ2FzZSgpLm1hdGNoKFR0KXx8W107aWYodXQoaSkpZm9yKDtuPW9bcysrXTspXCIrXCI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fFwiKlwiLCh0W25dPXRbbl18fFtdKS51bnNoaWZ0KGkpKToodFtuXT10W25dfHxbXSkucHVzaChpKX19ZnVuY3Rpb24gRyh0LGUsaSxuKXtmdW5jdGlvbiBzKHIpe3ZhciBsO3JldHVybiBvW3JdPSEwLGZ0LmVhY2godFtyXXx8W10sZnVuY3Rpb24odCxyKXt2YXIgaD1yKGUsaSxuKTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgaHx8YXx8b1toXT9hPyEobD1oKTp2b2lkIDA6KGUuZGF0YVR5cGVzLnVuc2hpZnQoaCkscyhoKSwhMSl9KSxsfXZhciBvPXt9LGE9dD09PUhlO3JldHVybiBzKGUuZGF0YVR5cGVzWzBdKXx8IW9bXCIqXCJdJiZzKFwiKlwiKX1mdW5jdGlvbiBRKHQsZSl7dmFyIGksbixzPWZ0LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGkgaW4gZSl2b2lkIDAhPT1lW2ldJiYoKHNbaV0/dDpufHwobj17fSkpW2ldPWVbaV0pO3JldHVybiBuJiZmdC5leHRlbmQoITAsdCxuKSx0fXZhciBKPVtdLFo9dC5kb2N1bWVudCx0dD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsZXQ9Si5zbGljZSxpdD1KLmNvbmNhdCxudD1KLnB1c2gsc3Q9Si5pbmRleE9mLG90PXt9LGF0PW90LnRvU3RyaW5nLHJ0PW90Lmhhc093blByb3BlcnR5LGx0PXJ0LnRvU3RyaW5nLGh0PWx0LmNhbGwoT2JqZWN0KSxjdD17fSx1dD1mdW5jdGlvbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZcIm51bWJlclwiIT10eXBlb2YgdC5ub2RlVHlwZX0sZHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJnQ9PT10LndpbmRvd30scHQ9e3R5cGU6ITAsc3JjOiEwLG5vTW9kdWxlOiEwfSxmdD1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgZnQuZm4uaW5pdCh0LGUpfSxndD0vXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7ZnQuZm49ZnQucHJvdG90eXBlPXtqcXVlcnk6XCIzLjMuMVwiLGNvbnN0cnVjdG9yOmZ0LGxlbmd0aDowLHRvQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gZXQuY2FsbCh0aGlzKX0sZ2V0OmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P2V0LmNhbGwodGhpcyk6dDwwP3RoaXNbdCt0aGlzLmxlbmd0aF06dGhpc1t0XX0scHVzaFN0YWNrOmZ1bmN0aW9uKHQpe3ZhciBlPWZ0Lm1lcmdlKHRoaXMuY29uc3RydWN0b3IoKSx0KTtyZXR1cm4gZS5wcmV2T2JqZWN0PXRoaXMsZX0sZWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gZnQuZWFjaCh0aGlzLHQpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0Lm1hcCh0aGlzLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIHQuY2FsbChlLGksZSl9KSl9LHNsaWNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGV0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubGVuZ3RoLGk9K3QrKHQ8MD9lOjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhpPj0wJiZpPGU/W3RoaXNbaV1dOltdKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcigpfSxwdXNoOm50LHNvcnQ6Si5zb3J0LHNwbGljZTpKLnNwbGljZX0sZnQuZXh0ZW5kPWZ0LmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciB0LGUsaSxuLHMsbyxhPWFyZ3VtZW50c1swXXx8e30scj0xLGw9YXJndW1lbnRzLmxlbmd0aCxoPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIGEmJihoPWEsYT1hcmd1bWVudHNbcl18fHt9LHIrKyksXCJvYmplY3RcIj09dHlwZW9mIGF8fHV0KGEpfHwoYT17fSkscj09PWwmJihhPXRoaXMsci0tKTtyPGw7cisrKWlmKG51bGwhPSh0PWFyZ3VtZW50c1tyXSkpZm9yKGUgaW4gdClpPWFbZV0sYSE9PShuPXRbZV0pJiYoaCYmbiYmKGZ0LmlzUGxhaW5PYmplY3Qobil8fChzPUFycmF5LmlzQXJyYXkobikpKT8ocz8ocz0hMSxvPWkmJkFycmF5LmlzQXJyYXkoaSk/aTpbXSk6bz1pJiZmdC5pc1BsYWluT2JqZWN0KGkpP2k6e30sYVtlXT1mdC5leHRlbmQoaCxvLG4pKTp2b2lkIDAhPT1uJiYoYVtlXT1uKSk7cmV0dXJuIGF9LGZ0LmV4dGVuZCh7ZXhwYW5kbzpcImpRdWVyeVwiKyhcIjMuMy4xXCIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXFxEL2csXCJcIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IodCl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24odCl7dmFyIGUsaTtyZXR1cm4hKCF0fHxcIltvYmplY3QgT2JqZWN0XVwiIT09YXQuY2FsbCh0KXx8KGU9dHQodCkpJiYoXCJmdW5jdGlvblwiIT10eXBlb2YoaT1ydC5jYWxsKGUsXCJjb25zdHJ1Y3RvclwiKSYmZS5jb25zdHJ1Y3Rvcil8fGx0LmNhbGwoaSkhPT1odCkpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlIGluIHQpcmV0dXJuITE7cmV0dXJuITB9LGdsb2JhbEV2YWw6ZnVuY3Rpb24odCl7aSh0KX0sZWFjaDpmdW5jdGlvbih0LGUpe3ZhciBpLG49MDtpZihzKHQpKWZvcihpPXQubGVuZ3RoO248aSYmITEhPT1lLmNhbGwodFtuXSxuLHRbbl0pO24rKyk7ZWxzZSBmb3IobiBpbiB0KWlmKCExPT09ZS5jYWxsKHRbbl0sbix0W25dKSlicmVhaztyZXR1cm4gdH0sdHJpbTpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9cIlwiOih0K1wiXCIpLnJlcGxhY2UoZ3QsXCJcIil9LG1ha2VBcnJheTpmdW5jdGlvbih0LGUpe3ZhciBpPWV8fFtdO3JldHVybiBudWxsIT10JiYocyhPYmplY3QodCkpP2Z0Lm1lcmdlKGksXCJzdHJpbmdcIj09dHlwZW9mIHQ/W3RdOnQpOm50LmNhbGwoaSx0KSksaX0saW5BcnJheTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIG51bGw9PWU/LTE6c3QuY2FsbChlLHQsaSl9LG1lcmdlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPStlLmxlbmd0aCxuPTAscz10Lmxlbmd0aDtuPGk7bisrKXRbcysrXT1lW25dO3JldHVybiB0Lmxlbmd0aD1zLHR9LGdyZXA6ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbj1bXSxzPTAsbz10Lmxlbmd0aCxhPSFpO3M8bztzKyspIWUodFtzXSxzKSE9PWEmJm4ucHVzaCh0W3NdKTtyZXR1cm4gbn0sbWFwOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvLGE9MCxyPVtdO2lmKHModCkpZm9yKG49dC5sZW5ndGg7YTxuO2ErKyludWxsIT0obz1lKHRbYV0sYSxpKSkmJnIucHVzaChvKTtlbHNlIGZvcihhIGluIHQpbnVsbCE9KG89ZSh0W2FdLGEsaSkpJiZyLnB1c2gobyk7cmV0dXJuIGl0LmFwcGx5KFtdLHIpfSxndWlkOjEsc3VwcG9ydDpjdH0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmKGZ0LmZuW1N5bWJvbC5pdGVyYXRvcl09SltTeW1ib2wuaXRlcmF0b3JdKSxmdC5lYWNoKFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24odCxlKXtvdFtcIltvYmplY3QgXCIrZStcIl1cIl09ZS50b0xvd2VyQ2FzZSgpfSk7dmFyIG10PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLGksbil7dmFyIHMsbyxhLHIsbCxjLGQscD1lJiZlLm93bmVyRG9jdW1lbnQsZj1lP2Uubm9kZVR5cGU6OTtpZihpPWl8fFtdLFwic3RyaW5nXCIhPXR5cGVvZiB0fHwhdHx8MSE9PWYmJjkhPT1mJiYxMSE9PWYpcmV0dXJuIGk7aWYoIW4mJigoZT9lLm93bmVyRG9jdW1lbnR8fGU6UikhPT1NJiZFKGUpLGU9ZXx8TSxPKSl7aWYoMTEhPT1mJiYobD1ndC5leGVjKHQpKSlpZihzPWxbMV0pe2lmKDk9PT1mKXtpZighKGE9ZS5nZXRFbGVtZW50QnlJZChzKSkpcmV0dXJuIGk7aWYoYS5pZD09PXMpcmV0dXJuIGkucHVzaChhKSxpfWVsc2UgaWYocCYmKGE9cC5nZXRFbGVtZW50QnlJZChzKSkmJkwoZSxhKSYmYS5pZD09PXMpcmV0dXJuIGkucHVzaChhKSxpfWVsc2V7aWYobFsyXSlyZXR1cm4gRy5hcHBseShpLGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCkpLGk7aWYoKHM9bFszXSkmJnkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBHLmFwcGx5KGksZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHMpKSxpfWlmKHkucXNhJiYhcVt0K1wiIFwiXSYmKCFOfHwhTi50ZXN0KHQpKSl7aWYoMSE9PWYpcD1lLGQ9dDtlbHNlIGlmKFwib2JqZWN0XCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcigocj1lLmdldEF0dHJpYnV0ZShcImlkXCIpKT9yPXIucmVwbGFjZShfdCx5dCk6ZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLHI9Vyksbz0oYz1rKHQpKS5sZW5ndGg7by0tOyljW29dPVwiI1wiK3IrXCIgXCIrdShjW29dKTtkPWMuam9pbihcIixcIikscD1tdC50ZXN0KHQpJiZoKGUucGFyZW50Tm9kZSl8fGV9aWYoZCl0cnl7cmV0dXJuIEcuYXBwbHkoaSxwLnF1ZXJ5U2VsZWN0b3JBbGwoZCkpLGl9Y2F0Y2godCl7fWZpbmFsbHl7cj09PVcmJmUucmVtb3ZlQXR0cmlidXRlKFwiaWRcIil9fX1yZXR1cm4gRCh0LnJlcGxhY2Uob3QsXCIkMVwiKSxlLGksbil9ZnVuY3Rpb24gaSgpe3ZhciB0PVtdO3JldHVybiBmdW5jdGlvbiBlKGksbil7cmV0dXJuIHQucHVzaChpK1wiIFwiKT53LmNhY2hlTGVuZ3RoJiZkZWxldGUgZVt0LnNoaWZ0KCldLGVbaStcIiBcIl09bn19ZnVuY3Rpb24gbih0KXtyZXR1cm4gdFtXXT0hMCx0fWZ1bmN0aW9uIHModCl7dmFyIGU9TS5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7dHJ5e3JldHVybiEhdChlKX1jYXRjaCh0KXtyZXR1cm4hMX1maW5hbGx5e2UucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLGU9bnVsbH19ZnVuY3Rpb24gbyh0LGUpe2Zvcih2YXIgaT10LnNwbGl0KFwifFwiKSxuPWkubGVuZ3RoO24tLTspdy5hdHRySGFuZGxlW2lbbl1dPWV9ZnVuY3Rpb24gYSh0LGUpe3ZhciBpPWUmJnQsbj1pJiYxPT09dC5ub2RlVHlwZSYmMT09PWUubm9kZVR5cGUmJnQuc291cmNlSW5kZXgtZS5zb3VyY2VJbmRleDtpZihuKXJldHVybiBuO2lmKGkpZm9yKDtpPWkubmV4dFNpYmxpbmc7KWlmKGk9PT1lKXJldHVybi0xO3JldHVybiB0PzE6LTF9ZnVuY3Rpb24gcih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuXCJmb3JtXCJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkP1wibGFiZWxcImluIGU/XCJsYWJlbFwiaW4gZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5kaXNhYmxlZD09PXQ6ZS5kaXNhYmxlZD09PXQ6ZS5pc0Rpc2FibGVkPT09dHx8ZS5pc0Rpc2FibGVkIT09IXQmJnh0KGUpPT09dDplLmRpc2FibGVkPT09dDpcImxhYmVsXCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gbCh0KXtyZXR1cm4gbihmdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxuKGZ1bmN0aW9uKGksbil7Zm9yKHZhciBzLG89dChbXSxpLmxlbmd0aCxlKSxhPW8ubGVuZ3RoO2EtLTspaVtzPW9bYV1dJiYoaVtzXT0hKG5bc109aVtzXSkpfSl9KX1mdW5jdGlvbiBoKHQpe3JldHVybiB0JiZ2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlUYWdOYW1lJiZ0fWZ1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gdSh0KXtmb3IodmFyIGU9MCxpPXQubGVuZ3RoLG49XCJcIjtlPGk7ZSsrKW4rPXRbZV0udmFsdWU7cmV0dXJuIG59ZnVuY3Rpb24gZCh0LGUsaSl7dmFyIG49ZS5kaXIscz1lLm5leHQsbz1zfHxuLGE9aSYmXCJwYXJlbnROb2RlXCI9PT1vLHI9aisrO3JldHVybiBlLmZpcnN0P2Z1bmN0aW9uKGUsaSxzKXtmb3IoO2U9ZVtuXTspaWYoMT09PWUubm9kZVR5cGV8fGEpcmV0dXJuIHQoZSxpLHMpO3JldHVybiExfTpmdW5jdGlvbihlLGksbCl7dmFyIGgsYyx1LGQ9WyQscl07aWYobCl7Zm9yKDtlPWVbbl07KWlmKCgxPT09ZS5ub2RlVHlwZXx8YSkmJnQoZSxpLGwpKXJldHVybiEwfWVsc2UgZm9yKDtlPWVbbl07KWlmKDE9PT1lLm5vZGVUeXBlfHxhKWlmKGM9KHU9ZVtXXXx8KGVbV109e30pKVtlLnVuaXF1ZUlEXXx8KHVbZS51bmlxdWVJRF09e30pLHMmJnM9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpZT1lW25dfHxlO2Vsc2V7aWYoKGg9Y1tvXSkmJmhbMF09PT0kJiZoWzFdPT09cilyZXR1cm4gZFsyXT1oWzJdO2lmKGNbb109ZCxkWzJdPXQoZSxpLGwpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBwKHQpe3JldHVybiB0Lmxlbmd0aD4xP2Z1bmN0aW9uKGUsaSxuKXtmb3IodmFyIHM9dC5sZW5ndGg7cy0tOylpZighdFtzXShlLGksbikpcmV0dXJuITE7cmV0dXJuITB9OnRbMF19ZnVuY3Rpb24gZih0LGksbil7Zm9yKHZhciBzPTAsbz1pLmxlbmd0aDtzPG87cysrKWUodCxpW3NdLG4pO3JldHVybiBufWZ1bmN0aW9uIGcodCxlLGksbixzKXtmb3IodmFyIG8sYT1bXSxyPTAsbD10Lmxlbmd0aCxoPW51bGwhPWU7cjxsO3IrKykobz10W3JdKSYmKGkmJiFpKG8sbixzKXx8KGEucHVzaChvKSxoJiZlLnB1c2gocikpKTtyZXR1cm4gYX1mdW5jdGlvbiBtKHQsZSxpLHMsbyxhKXtyZXR1cm4gcyYmIXNbV10mJihzPW0ocykpLG8mJiFvW1ddJiYobz1tKG8sYSkpLG4oZnVuY3Rpb24obixhLHIsbCl7dmFyIGgsYyx1LGQ9W10scD1bXSxtPWEubGVuZ3RoLHY9bnx8ZihlfHxcIipcIixyLm5vZGVUeXBlP1tyXTpyLFtdKSxiPSF0fHwhbiYmZT92OmcodixkLHQscixsKSxfPWk/b3x8KG4/dDptfHxzKT9bXTphOmI7aWYoaSYmaShiLF8scixsKSxzKWZvcihoPWcoXyxwKSxzKGgsW10scixsKSxjPWgubGVuZ3RoO2MtLTspKHU9aFtjXSkmJihfW3BbY11dPSEoYltwW2NdXT11KSk7aWYobil7aWYob3x8dCl7aWYobyl7Zm9yKGg9W10sYz1fLmxlbmd0aDtjLS07KSh1PV9bY10pJiZoLnB1c2goYltjXT11KTtvKG51bGwsXz1bXSxoLGwpfWZvcihjPV8ubGVuZ3RoO2MtLTspKHU9X1tjXSkmJihoPW8/SihuLHUpOmRbY10pPi0xJiYobltoXT0hKGFbaF09dSkpfX1lbHNlIF89ZyhfPT09YT9fLnNwbGljZShtLF8ubGVuZ3RoKTpfKSxvP28obnVsbCxhLF8sbCk6Ry5hcHBseShhLF8pfSl9ZnVuY3Rpb24gdih0KXtmb3IodmFyIGUsaSxuLHM9dC5sZW5ndGgsbz13LnJlbGF0aXZlW3RbMF0udHlwZV0sYT1vfHx3LnJlbGF0aXZlW1wiIFwiXSxyPW8/MTowLGw9ZChmdW5jdGlvbih0KXtyZXR1cm4gdD09PWV9LGEsITApLGg9ZChmdW5jdGlvbih0KXtyZXR1cm4gSihlLHQpPi0xfSxhLCEwKSxjPVtmdW5jdGlvbih0LGksbil7dmFyIHM9IW8mJihufHxpIT09Uyl8fCgoZT1pKS5ub2RlVHlwZT9sKHQsaSxuKTpoKHQsaSxuKSk7cmV0dXJuIGU9bnVsbCxzfV07cjxzO3IrKylpZihpPXcucmVsYXRpdmVbdFtyXS50eXBlXSljPVtkKHAoYyksaSldO2Vsc2V7aWYoKGk9dy5maWx0ZXJbdFtyXS50eXBlXS5hcHBseShudWxsLHRbcl0ubWF0Y2hlcykpW1ddKXtmb3Iobj0rK3I7bjxzJiYhdy5yZWxhdGl2ZVt0W25dLnR5cGVdO24rKyk7cmV0dXJuIG0ocj4xJiZwKGMpLHI+MSYmdSh0LnNsaWNlKDAsci0xKS5jb25jYXQoe3ZhbHVlOlwiIFwiPT09dFtyLTJdLnR5cGU/XCIqXCI6XCJcIn0pKS5yZXBsYWNlKG90LFwiJDFcIiksaSxyPG4mJnYodC5zbGljZShyLG4pKSxuPHMmJnYodD10LnNsaWNlKG4pKSxuPHMmJnUodCkpfWMucHVzaChpKX1yZXR1cm4gcChjKX1mdW5jdGlvbiBiKHQsaSl7dmFyIHM9aS5sZW5ndGg+MCxvPXQubGVuZ3RoPjAsYT1mdW5jdGlvbihuLGEscixsLGgpe3ZhciBjLHUsZCxwPTAsZj1cIjBcIixtPW4mJltdLHY9W10sYj1TLF89bnx8byYmdy5maW5kLlRBRyhcIipcIixoKSx5PSQrPW51bGw9PWI/MTpNYXRoLnJhbmRvbSgpfHwuMSx4PV8ubGVuZ3RoO2ZvcihoJiYoUz1hPT09TXx8YXx8aCk7ZiE9PXgmJm51bGwhPShjPV9bZl0pO2YrKyl7aWYobyYmYyl7Zm9yKHU9MCxhfHxjLm93bmVyRG9jdW1lbnQ9PT1NfHwoRShjKSxyPSFPKTtkPXRbdSsrXTspaWYoZChjLGF8fE0scikpe2wucHVzaChjKTticmVha31oJiYoJD15KX1zJiYoKGM9IWQmJmMpJiZwLS0sbiYmbS5wdXNoKGMpKX1pZihwKz1mLHMmJmYhPT1wKXtmb3IodT0wO2Q9aVt1KytdOylkKG0sdixhLHIpO2lmKG4pe2lmKHA+MClmb3IoO2YtLTspbVtmXXx8dltmXXx8KHZbZl09Sy5jYWxsKGwpKTt2PWcodil9Ry5hcHBseShsLHYpLGgmJiFuJiZ2Lmxlbmd0aD4wJiZwK2kubGVuZ3RoPjEmJmUudW5pcXVlU29ydChsKX1yZXR1cm4gaCYmKCQ9eSxTPWIpLG19O3JldHVybiBzP24oYSk6YX12YXIgXyx5LHcseCxDLGssVCxELFMsSSxQLEUsTSxBLE8sTixILHosTCxXPVwic2l6emxlXCIrMSpuZXcgRGF0ZSxSPXQuZG9jdW1lbnQsJD0wLGo9MCxGPWkoKSxCPWkoKSxxPWkoKSxVPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lJiYoUD0hMCksMH0sWT17fS5oYXNPd25Qcm9wZXJ0eSxWPVtdLEs9Vi5wb3AsWD1WLnB1c2gsRz1WLnB1c2gsUT1WLnNsaWNlLEo9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MCxuPXQubGVuZ3RoO2k8bjtpKyspaWYodFtpXT09PWUpcmV0dXJuIGk7cmV0dXJuLTF9LFo9XCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLHR0PVwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixldD1cIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsaXQ9XCJcXFxcW1wiK3R0K1wiKihcIitldCtcIikoPzpcIit0dCtcIiooWypeJHwhfl0/PSlcIit0dCtcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiK2V0K1wiKSl8KVwiK3R0K1wiKlxcXFxdXCIsbnQ9XCI6KFwiK2V0K1wiKSg/OlxcXFwoKCgnKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIitpdCtcIikqKXwuKilcXFxcKXwpXCIsc3Q9bmV3IFJlZ0V4cCh0dCtcIitcIixcImdcIiksb3Q9bmV3IFJlZ0V4cChcIl5cIit0dCtcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIrdHQrXCIrJFwiLFwiZ1wiKSxhdD1uZXcgUmVnRXhwKFwiXlwiK3R0K1wiKixcIit0dCtcIipcIikscnQ9bmV3IFJlZ0V4cChcIl5cIit0dCtcIiooWz4rfl18XCIrdHQrXCIpXCIrdHQrXCIqXCIpLGx0PW5ldyBSZWdFeHAoXCI9XCIrdHQrXCIqKFteXFxcXF0nXFxcIl0qPylcIit0dCtcIipcXFxcXVwiLFwiZ1wiKSxodD1uZXcgUmVnRXhwKG50KSxjdD1uZXcgUmVnRXhwKFwiXlwiK2V0K1wiJFwiKSx1dD17SUQ6bmV3IFJlZ0V4cChcIl4jKFwiK2V0K1wiKVwiKSxDTEFTUzpuZXcgUmVnRXhwKFwiXlxcXFwuKFwiK2V0K1wiKVwiKSxUQUc6bmV3IFJlZ0V4cChcIl4oXCIrZXQrXCJ8WypdKVwiKSxBVFRSOm5ldyBSZWdFeHAoXCJeXCIraXQpLFBTRVVETzpuZXcgUmVnRXhwKFwiXlwiK250KSxDSElMRDpuZXcgUmVnRXhwKFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIit0dCtcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiK3R0K1wiKig/OihbKy1dfClcIit0dCtcIiooXFxcXGQrKXwpKVwiK3R0K1wiKlxcXFwpfClcIixcImlcIiksYm9vbDpuZXcgUmVnRXhwKFwiXig/OlwiK1orXCIpJFwiLFwiaVwiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cChcIl5cIit0dCtcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIrdHQrXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiK3R0K1wiKlxcXFwpfCkoPz1bXi1dfCQpXCIsXCJpXCIpfSxkdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLHB0PS9eaFxcZCQvaSxmdD0vXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLGd0PS9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLG10PS9bK35dLyx2dD1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIrdHQrXCI/fChcIit0dCtcIil8LilcIixcImlnXCIpLGJ0PWZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1cIjB4XCIrZS02NTUzNjtyZXR1cm4gbiE9bnx8aT9lOm48MD9TdHJpbmcuZnJvbUNoYXJDb2RlKG4rNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUobj4+MTB8NTUyOTYsMTAyMyZufDU2MzIwKX0sX3Q9LyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2cseXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9cIlxcMFwiPT09dD9cIu+/vVwiOnQuc2xpY2UoMCwtMSkrXCJcXFxcXCIrdC5jaGFyQ29kZUF0KHQubGVuZ3RoLTEpLnRvU3RyaW5nKDE2KStcIiBcIjpcIlxcXFxcIit0fSx3dD1mdW5jdGlvbigpe0UoKX0seHQ9ZChmdW5jdGlvbih0KXtyZXR1cm4hMD09PXQuZGlzYWJsZWQmJihcImZvcm1cImluIHR8fFwibGFiZWxcImluIHQpfSx7ZGlyOlwicGFyZW50Tm9kZVwiLG5leHQ6XCJsZWdlbmRcIn0pO3RyeXtHLmFwcGx5KFY9US5jYWxsKFIuY2hpbGROb2RlcyksUi5jaGlsZE5vZGVzKSxWW1IuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKHQpe0c9e2FwcGx5OlYubGVuZ3RoP2Z1bmN0aW9uKHQsZSl7WC5hcHBseSh0LFEuY2FsbChlKSl9OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPXQubGVuZ3RoLG49MDt0W2krK109ZVtuKytdOyk7dC5sZW5ndGg9aS0xfX19Zm9yKF8gaW4geT1lLnN1cHBvcnQ9e30sQz1lLmlzWE1MPWZ1bmN0aW9uKHQpe3ZhciBlPXQmJih0Lm93bmVyRG9jdW1lbnR8fHQpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hIWUmJlwiSFRNTFwiIT09ZS5ub2RlTmFtZX0sRT1lLnNldERvY3VtZW50PWZ1bmN0aW9uKHQpe3ZhciBlLGksbj10P3Qub3duZXJEb2N1bWVudHx8dDpSO3JldHVybiBuIT09TSYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVtZW50PyhBPShNPW4pLmRvY3VtZW50RWxlbWVudCxPPSFDKE0pLFIhPT1NJiYoaT1NLmRlZmF1bHRWaWV3KSYmaS50b3AhPT1pJiYoaS5hZGRFdmVudExpc3RlbmVyP2kuYWRkRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLHd0LCExKTppLmF0dGFjaEV2ZW50JiZpLmF0dGFjaEV2ZW50KFwib251bmxvYWRcIix3dCkpLHkuYXR0cmlidXRlcz1zKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZT1cImlcIiwhdC5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSx5LmdldEVsZW1lbnRzQnlUYWdOYW1lPXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTS5jcmVhdGVDb21tZW50KFwiXCIpKSwhdC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RofSkseS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWZ0LnRlc3QoTS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSx5LmdldEJ5SWQ9cyhmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBlbmRDaGlsZCh0KS5pZD1XLCFNLmdldEVsZW1lbnRzQnlOYW1lfHwhTS5nZXRFbGVtZW50c0J5TmFtZShXKS5sZW5ndGh9KSx5LmdldEJ5SWQ/KHcuZmlsdGVyLklEPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZSh2dCxidCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZShcImlkXCIpPT09ZX19LHcuZmluZC5JRD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUuZ2V0RWxlbWVudEJ5SWQmJk8pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQodCk7cmV0dXJuIGk/W2ldOltdfX0pOih3LmZpbHRlci5JRD1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UodnQsYnQpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgaT12b2lkIDAhPT10LmdldEF0dHJpYnV0ZU5vZGUmJnQuZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO3JldHVybiBpJiZpLnZhbHVlPT09ZX19LHcuZmluZC5JRD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUuZ2V0RWxlbWVudEJ5SWQmJk8pe3ZhciBpLG4scyxvPWUuZ2V0RWxlbWVudEJ5SWQodCk7aWYobyl7aWYoKGk9by5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIikpJiZpLnZhbHVlPT09dClyZXR1cm5bb107Zm9yKHM9ZS5nZXRFbGVtZW50c0J5TmFtZSh0KSxuPTA7bz1zW24rK107KWlmKChpPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmaS52YWx1ZT09PXQpcmV0dXJuW29dfXJldHVybltdfX0pLHcuZmluZC5UQUc9eS5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCk6eS5xc2E/ZS5xdWVyeVNlbGVjdG9yQWxsKHQpOnZvaWQgMH06ZnVuY3Rpb24odCxlKXt2YXIgaSxuPVtdLHM9MCxvPWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCk7aWYoXCIqXCI9PT10KXtmb3IoO2k9b1tzKytdOykxPT09aS5ub2RlVHlwZSYmbi5wdXNoKGkpO3JldHVybiBufXJldHVybiBvfSx3LmZpbmQuQ0xBU1M9eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmTylyZXR1cm4gZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHQpfSxIPVtdLE49W10sKHkucXNhPWZ0LnRlc3QoTS5xdWVyeVNlbGVjdG9yQWxsKSkmJihzKGZ1bmN0aW9uKHQpe0EuYXBwZW5kQ2hpbGQodCkuaW5uZXJIVE1MPVwiPGEgaWQ9J1wiK1crXCInPjwvYT48c2VsZWN0IGlkPSdcIitXK1wiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCIsdC5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoJiZOLnB1c2goXCJbKl4kXT1cIit0dCtcIiooPzonJ3xcXFwiXFxcIilcIiksdC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fE4ucHVzaChcIlxcXFxbXCIrdHQrXCIqKD86dmFsdWV8XCIrWitcIilcIiksdC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkfj1cIitXK1wiLV1cIikubGVuZ3RofHxOLnB1c2goXCJ+PVwiKSx0LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGh8fE4ucHVzaChcIjpjaGVja2VkXCIpLHQucXVlcnlTZWxlY3RvckFsbChcImEjXCIrVytcIisqXCIpLmxlbmd0aHx8Ti5wdXNoKFwiLiMuK1srfl1cIil9KSxzKGZ1bmN0aW9uKHQpe3QuaW5uZXJIVE1MPVwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7dmFyIGU9TS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7ZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksdC5hcHBlbmRDaGlsZChlKS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJEXCIpLHQucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCYmTi5wdXNoKFwibmFtZVwiK3R0K1wiKlsqXiR8IX5dPz1cIiksMiE9PXQucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCYmTi5wdXNoKFwiOmVuYWJsZWRcIixcIjpkaXNhYmxlZFwiKSxBLmFwcGVuZENoaWxkKHQpLmRpc2FibGVkPSEwLDIhPT10LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoJiZOLnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLHQucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIiksTi5wdXNoKFwiLC4qOlwiKX0pKSwoeS5tYXRjaGVzU2VsZWN0b3I9ZnQudGVzdCh6PUEubWF0Y2hlc3x8QS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fEEubW96TWF0Y2hlc1NlbGVjdG9yfHxBLm9NYXRjaGVzU2VsZWN0b3J8fEEubXNNYXRjaGVzU2VsZWN0b3IpKSYmcyhmdW5jdGlvbih0KXt5LmRpc2Nvbm5lY3RlZE1hdGNoPXouY2FsbCh0LFwiKlwiKSx6LmNhbGwodCxcIltzIT0nJ106eFwiKSxILnB1c2goXCIhPVwiLG50KX0pLE49Ti5sZW5ndGgmJm5ldyBSZWdFeHAoTi5qb2luKFwifFwiKSksSD1ILmxlbmd0aCYmbmV3IFJlZ0V4cChILmpvaW4oXCJ8XCIpKSxlPWZ0LnRlc3QoQS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksTD1lfHxmdC50ZXN0KEEuY29udGFpbnMpP2Z1bmN0aW9uKHQsZSl7dmFyIGk9OT09PXQubm9kZVR5cGU/dC5kb2N1bWVudEVsZW1lbnQ6dCxuPWUmJmUucGFyZW50Tm9kZTtyZXR1cm4gdD09PW58fCEoIW58fDEhPT1uLm5vZGVUeXBlfHwhKGkuY29udGFpbnM/aS5jb250YWlucyhuKTp0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4pKSl9OmZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IoO2U9ZS5wYXJlbnROb2RlOylpZihlPT09dClyZXR1cm4hMDtyZXR1cm4hMX0sVT1lP2Z1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIFA9ITAsMDt2YXIgaT0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gaXx8KDEmKGk9KHQub3duZXJEb2N1bWVudHx8dCk9PT0oZS5vd25lckRvY3VtZW50fHxlKT90LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpOjEpfHwheS5zb3J0RGV0YWNoZWQmJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk9PT1pP3Q9PT1NfHx0Lm93bmVyRG9jdW1lbnQ9PT1SJiZMKFIsdCk/LTE6ZT09PU18fGUub3duZXJEb2N1bWVudD09PVImJkwoUixlKT8xOkk/SihJLHQpLUooSSxlKTowOjQmaT8tMToxKX06ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gUD0hMCwwO3ZhciBpLG49MCxzPXQucGFyZW50Tm9kZSxvPWUucGFyZW50Tm9kZSxyPVt0XSxsPVtlXTtpZighc3x8IW8pcmV0dXJuIHQ9PT1NPy0xOmU9PT1NPzE6cz8tMTpvPzE6ST9KKEksdCktSihJLGUpOjA7aWYocz09PW8pcmV0dXJuIGEodCxlKTtmb3IoaT10O2k9aS5wYXJlbnROb2RlOylyLnVuc2hpZnQoaSk7Zm9yKGk9ZTtpPWkucGFyZW50Tm9kZTspbC51bnNoaWZ0KGkpO2Zvcig7cltuXT09PWxbbl07KW4rKztyZXR1cm4gbj9hKHJbbl0sbFtuXSk6cltuXT09PVI/LTE6bFtuXT09PVI/MTowfSxNKTpNfSxlLm1hdGNoZXM9ZnVuY3Rpb24odCxpKXtyZXR1cm4gZSh0LG51bGwsbnVsbCxpKX0sZS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24odCxpKXtpZigodC5vd25lckRvY3VtZW50fHx0KSE9PU0mJkUodCksaT1pLnJlcGxhY2UobHQsXCI9JyQxJ11cIikseS5tYXRjaGVzU2VsZWN0b3ImJk8mJiFxW2krXCIgXCJdJiYoIUh8fCFILnRlc3QoaSkpJiYoIU58fCFOLnRlc3QoaSkpKXRyeXt2YXIgbj16LmNhbGwodCxpKTtpZihufHx5LmRpc2Nvbm5lY3RlZE1hdGNofHx0LmRvY3VtZW50JiYxMSE9PXQuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2godCl7fXJldHVybiBlKGksTSxudWxsLFt0XSkubGVuZ3RoPjB9LGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odC5vd25lckRvY3VtZW50fHx0KSE9PU0mJkUodCksTCh0LGUpfSxlLmF0dHI9ZnVuY3Rpb24odCxlKXsodC5vd25lckRvY3VtZW50fHx0KSE9PU0mJkUodCk7dmFyIGk9dy5hdHRySGFuZGxlW2UudG9Mb3dlckNhc2UoKV0sbj1pJiZZLmNhbGwody5hdHRySGFuZGxlLGUudG9Mb3dlckNhc2UoKSk/aSh0LGUsIU8pOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09bj9uOnkuYXR0cmlidXRlc3x8IU8/dC5nZXRBdHRyaWJ1dGUoZSk6KG49dC5nZXRBdHRyaWJ1dGVOb2RlKGUpKSYmbi5zcGVjaWZpZWQ/bi52YWx1ZTpudWxsfSxlLmVzY2FwZT1mdW5jdGlvbih0KXtyZXR1cm4odCtcIlwiKS5yZXBsYWNlKF90LHl0KX0sZS5lcnJvcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIit0KX0sZS51bmlxdWVTb3J0PWZ1bmN0aW9uKHQpe3ZhciBlLGk9W10sbj0wLHM9MDtpZihQPSF5LmRldGVjdER1cGxpY2F0ZXMsST0heS5zb3J0U3RhYmxlJiZ0LnNsaWNlKDApLHQuc29ydChVKSxQKXtmb3IoO2U9dFtzKytdOyllPT09dFtzXSYmKG49aS5wdXNoKHMpKTtmb3IoO24tLTspdC5zcGxpY2UoaVtuXSwxKX1yZXR1cm4gST1udWxsLHR9LHg9ZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLGk9XCJcIixuPTAscz10Lm5vZGVUeXBlO2lmKHMpe2lmKDE9PT1zfHw5PT09c3x8MTE9PT1zKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdC50ZXh0Q29udGVudClyZXR1cm4gdC50ZXh0Q29udGVudDtmb3IodD10LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpaSs9eCh0KX1lbHNlIGlmKDM9PT1zfHw0PT09cylyZXR1cm4gdC5ub2RlVmFsdWV9ZWxzZSBmb3IoO2U9dFtuKytdOylpKz14KGUpO3JldHVybiBpfSwodz1lLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOm4sbWF0Y2g6dXQsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOntcIj5cIjp7ZGlyOlwicGFyZW50Tm9kZVwiLGZpcnN0OiEwfSxcIiBcIjp7ZGlyOlwicGFyZW50Tm9kZVwifSxcIitcIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCIsZmlyc3Q6ITB9LFwiflwiOntkaXI6XCJwcmV2aW91c1NpYmxpbmdcIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbih0KXtyZXR1cm4gdFsxXT10WzFdLnJlcGxhY2UodnQsYnQpLHRbM109KHRbM118fHRbNF18fHRbNV18fFwiXCIpLnJlcGxhY2UodnQsYnQpLFwifj1cIj09PXRbMl0mJih0WzNdPVwiIFwiK3RbM10rXCIgXCIpLHQuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV09dFsxXS50b0xvd2VyQ2FzZSgpLFwibnRoXCI9PT10WzFdLnNsaWNlKDAsMyk/KHRbM118fGUuZXJyb3IodFswXSksdFs0XT0rKHRbNF0/dFs1XSsodFs2XXx8MSk6MiooXCJldmVuXCI9PT10WzNdfHxcIm9kZFwiPT09dFszXSkpLHRbNV09Kyh0WzddK3RbOF18fFwib2RkXCI9PT10WzNdKSk6dFszXSYmZS5lcnJvcih0WzBdKSx0fSxQU0VVRE86ZnVuY3Rpb24odCl7dmFyIGUsaT0hdFs2XSYmdFsyXTtyZXR1cm4gdXQuQ0hJTEQudGVzdCh0WzBdKT9udWxsOih0WzNdP3RbMl09dFs0XXx8dFs1XXx8XCJcIjppJiZodC50ZXN0KGkpJiYoZT1rKGksITApKSYmKGU9aS5pbmRleE9mKFwiKVwiLGkubGVuZ3RoLWUpLWkubGVuZ3RoKSYmKHRbMF09dFswXS5zbGljZSgwLGUpLHRbMl09aS5zbGljZSgwLGUpKSx0LnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKHZ0LGJ0KS50b0xvd2VyQ2FzZSgpO3JldHVyblwiKlwiPT09dD9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZX19LENMQVNTOmZ1bmN0aW9uKHQpe3ZhciBlPUZbdCtcIiBcIl07cmV0dXJuIGV8fChlPW5ldyBSZWdFeHAoXCIoXnxcIit0dCtcIilcIit0K1wiKFwiK3R0K1wifCQpXCIpKSYmRih0LGZ1bmN0aW9uKHQpe3JldHVybiBlLnRlc3QoXCJzdHJpbmdcIj09dHlwZW9mIHQuY2xhc3NOYW1lJiZ0LmNsYXNzTmFtZXx8dm9pZCAwIT09dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpfSl9LEFUVFI6ZnVuY3Rpb24odCxpLG4pe3JldHVybiBmdW5jdGlvbihzKXt2YXIgbz1lLmF0dHIocyx0KTtyZXR1cm4gbnVsbD09bz9cIiE9XCI9PT1pOiFpfHwobys9XCJcIixcIj1cIj09PWk/bz09PW46XCIhPVwiPT09aT9vIT09bjpcIl49XCI9PT1pP24mJjA9PT1vLmluZGV4T2Yobik6XCIqPVwiPT09aT9uJiZvLmluZGV4T2Yobik+LTE6XCIkPVwiPT09aT9uJiZvLnNsaWNlKC1uLmxlbmd0aCk9PT1uOlwifj1cIj09PWk/KFwiIFwiK28ucmVwbGFjZShzdCxcIiBcIikrXCIgXCIpLmluZGV4T2Yobik+LTE6XCJ8PVwiPT09aSYmKG89PT1ufHxvLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uK1wiLVwiKSl9fSxcbkNISUxEOmZ1bmN0aW9uKHQsZSxpLG4scyl7dmFyIG89XCJudGhcIiE9PXQuc2xpY2UoMCwzKSxhPVwibGFzdFwiIT09dC5zbGljZSgtNCkscj1cIm9mLXR5cGVcIj09PWU7cmV0dXJuIDE9PT1uJiYwPT09cz9mdW5jdGlvbih0KXtyZXR1cm4hIXQucGFyZW50Tm9kZX06ZnVuY3Rpb24oZSxpLGwpe3ZhciBoLGMsdSxkLHAsZixnPW8hPT1hP1wibmV4dFNpYmxpbmdcIjpcInByZXZpb3VzU2libGluZ1wiLG09ZS5wYXJlbnROb2RlLHY9ciYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGI9IWwmJiFyLF89ITE7aWYobSl7aWYobyl7Zm9yKDtnOyl7Zm9yKGQ9ZTtkPWRbZ107KWlmKHI/ZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09djoxPT09ZC5ub2RlVHlwZSlyZXR1cm4hMTtmPWc9XCJvbmx5XCI9PT10JiYhZiYmXCJuZXh0U2libGluZ1wifXJldHVybiEwfWlmKGY9W2E/bS5maXJzdENoaWxkOm0ubGFzdENoaWxkXSxhJiZiKXtmb3IoXz0ocD0oaD0oYz0odT0oZD1tKVtXXXx8KGRbV109e30pKVtkLnVuaXF1ZUlEXXx8KHVbZC51bmlxdWVJRF09e30pKVt0XXx8W10pWzBdPT09JCYmaFsxXSkmJmhbMl0sZD1wJiZtLmNoaWxkTm9kZXNbcF07ZD0rK3AmJmQmJmRbZ118fChfPXA9MCl8fGYucG9wKCk7KWlmKDE9PT1kLm5vZGVUeXBlJiYrK18mJmQ9PT1lKXtjW3RdPVskLHAsX107YnJlYWt9fWVsc2UgaWYoYiYmKF89cD0oaD0oYz0odT0oZD1lKVtXXXx8KGRbV109e30pKVtkLnVuaXF1ZUlEXXx8KHVbZC51bmlxdWVJRF09e30pKVt0XXx8W10pWzBdPT09JCYmaFsxXSksITE9PT1fKWZvcig7KGQ9KytwJiZkJiZkW2ddfHwoXz1wPTApfHxmLnBvcCgpKSYmKChyP2Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PXY6MSE9PWQubm9kZVR5cGUpfHwhKytffHwoYiYmKChjPSh1PWRbV118fChkW1ddPXt9KSlbZC51bmlxdWVJRF18fCh1W2QudW5pcXVlSURdPXt9KSlbdF09WyQsX10pLGQhPT1lKSk7KTtyZXR1cm4oXy09cyk9PT1ufHxfJW49PTAmJl8vbj49MH19fSxQU0VVRE86ZnVuY3Rpb24odCxpKXt2YXIgcyxvPXcucHNldWRvc1t0XXx8dy5zZXRGaWx0ZXJzW3QudG9Mb3dlckNhc2UoKV18fGUuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK3QpO3JldHVybiBvW1ddP28oaSk6by5sZW5ndGg+MT8ocz1bdCx0LFwiXCIsaV0sdy5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KHQudG9Mb3dlckNhc2UoKSk/bihmdW5jdGlvbih0LGUpe2Zvcih2YXIgbixzPW8odCxpKSxhPXMubGVuZ3RoO2EtLTspdFtuPUoodCxzW2FdKV09IShlW25dPXNbYV0pfSk6ZnVuY3Rpb24odCl7cmV0dXJuIG8odCwwLHMpfSk6b319LHBzZXVkb3M6e25vdDpuKGZ1bmN0aW9uKHQpe3ZhciBlPVtdLGk9W10scz1UKHQucmVwbGFjZShvdCxcIiQxXCIpKTtyZXR1cm4gc1tXXT9uKGZ1bmN0aW9uKHQsZSxpLG4pe2Zvcih2YXIgbyxhPXModCxudWxsLG4sW10pLHI9dC5sZW5ndGg7ci0tOykobz1hW3JdKSYmKHRbcl09IShlW3JdPW8pKX0pOmZ1bmN0aW9uKHQsbixvKXtyZXR1cm4gZVswXT10LHMoZSxudWxsLG8saSksZVswXT1udWxsLCFpLnBvcCgpfX0pLGhhczpuKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4gZSh0LGkpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOm4oZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHZ0LGJ0KSxmdW5jdGlvbihlKXtyZXR1cm4oZS50ZXh0Q29udGVudHx8ZS5pbm5lclRleHR8fHgoZSkpLmluZGV4T2YodCk+LTF9fSksbGFuZzpuKGZ1bmN0aW9uKHQpe3JldHVybiBjdC50ZXN0KHR8fFwiXCIpfHxlLmVycm9yKFwidW5zdXBwb3J0ZWQgbGFuZzogXCIrdCksdD10LnJlcGxhY2UodnQsYnQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oZSl7dmFyIGk7ZG97aWYoaT1PP2UubGFuZzplLmdldEF0dHJpYnV0ZShcInhtbDpsYW5nXCIpfHxlLmdldEF0dHJpYnV0ZShcImxhbmdcIikpcmV0dXJuKGk9aS50b0xvd2VyQ2FzZSgpKT09PXR8fDA9PT1pLmluZGV4T2YodCtcIi1cIil9d2hpbGUoKGU9ZS5wYXJlbnROb2RlKSYmMT09PWUubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihlKXt2YXIgaT10LmxvY2F0aW9uJiZ0LmxvY2F0aW9uLmhhc2g7cmV0dXJuIGkmJmkuc2xpY2UoMSk9PT1lLmlkfSxyb290OmZ1bmN0aW9uKHQpe3JldHVybiB0PT09QX0sZm9jdXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1NLmFjdGl2ZUVsZW1lbnQmJighTS5oYXNGb2N1c3x8TS5oYXNGb2N1cygpKSYmISEodC50eXBlfHx0LmhyZWZ8fH50LnRhYkluZGV4KX0sZW5hYmxlZDpyKCExKSxkaXNhYmxlZDpyKCEwKSxjaGVja2VkOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1lJiYhIXQuY2hlY2tlZHx8XCJvcHRpb25cIj09PWUmJiEhdC5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsITA9PT10LnNlbGVjdGVkfSxlbXB0eTpmdW5jdGlvbih0KXtmb3IodD10LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpaWYodC5ub2RlVHlwZTw2KXJldHVybiExO3JldHVybiEwfSxwYXJlbnQ6ZnVuY3Rpb24odCl7cmV0dXJuIXcucHNldWRvcy5lbXB0eSh0KX0saGVhZGVyOmZ1bmN0aW9uKHQpe3JldHVybiBwdC50ZXN0KHQubm9kZU5hbWUpfSxpbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gZHQudGVzdCh0Lm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKHQpe3ZhciBlPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImlucHV0XCI9PT1lJiZcImJ1dHRvblwiPT09dC50eXBlfHxcImJ1dHRvblwiPT09ZX0sdGV4dDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm5cImlucHV0XCI9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJlwidGV4dFwiPT09dC50eXBlJiYobnVsbD09KGU9dC5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpKXx8XCJ0ZXh0XCI9PT1lLnRvTG93ZXJDYXNlKCkpfSxmaXJzdDpsKGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpsKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2UtMV19KSxlcTpsKGZ1bmN0aW9uKHQsZSxpKXtyZXR1cm5baTwwP2krZTppXX0pLGV2ZW46bChmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wO2k8ZTtpKz0yKXQucHVzaChpKTtyZXR1cm4gdH0pLG9kZDpsKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTE7aTxlO2krPTIpdC5wdXNoKGkpO3JldHVybiB0fSksbHQ6bChmdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBuPWk8MD9pK2U6aTstLW4+PTA7KXQucHVzaChuKTtyZXR1cm4gdH0pLGd0OmwoZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbj1pPDA/aStlOmk7KytuPGU7KXQucHVzaChuKTtyZXR1cm4gdH0pfX0pLnBzZXVkb3MubnRoPXcucHNldWRvcy5lcSx7cmFkaW86ITAsY2hlY2tib3g6ITAsZmlsZTohMCxwYXNzd29yZDohMCxpbWFnZTohMH0pdy5wc2V1ZG9zW19dPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm5cImlucHV0XCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmUudHlwZT09PXR9fShfKTtmb3IoXyBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KXcucHNldWRvc1tfXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihcImlucHV0XCI9PT1pfHxcImJ1dHRvblwiPT09aSkmJmUudHlwZT09PXR9fShfKTtyZXR1cm4gYy5wcm90b3R5cGU9dy5maWx0ZXJzPXcucHNldWRvcyx3LnNldEZpbHRlcnM9bmV3IGMsaz1lLnRva2VuaXplPWZ1bmN0aW9uKHQsaSl7dmFyIG4scyxvLGEscixsLGgsYz1CW3QrXCIgXCJdO2lmKGMpcmV0dXJuIGk/MDpjLnNsaWNlKDApO2ZvcihyPXQsbD1bXSxoPXcucHJlRmlsdGVyO3I7KXtmb3IoYSBpbiBuJiYhKHM9YXQuZXhlYyhyKSl8fChzJiYocj1yLnNsaWNlKHNbMF0ubGVuZ3RoKXx8ciksbC5wdXNoKG89W10pKSxuPSExLChzPXJ0LmV4ZWMocikpJiYobj1zLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6c1swXS5yZXBsYWNlKG90LFwiIFwiKX0pLHI9ci5zbGljZShuLmxlbmd0aCkpLHcuZmlsdGVyKSEocz11dFthXS5leGVjKHIpKXx8aFthXSYmIShzPWhbYV0ocykpfHwobj1zLnNoaWZ0KCksby5wdXNoKHt2YWx1ZTpuLHR5cGU6YSxtYXRjaGVzOnN9KSxyPXIuc2xpY2Uobi5sZW5ndGgpKTtpZighbilicmVha31yZXR1cm4gaT9yLmxlbmd0aDpyP2UuZXJyb3IodCk6Qih0LGwpLnNsaWNlKDApfSxUPWUuY29tcGlsZT1mdW5jdGlvbih0LGUpe3ZhciBpLG49W10scz1bXSxvPXFbdCtcIiBcIl07aWYoIW8pe2ZvcihlfHwoZT1rKHQpKSxpPWUubGVuZ3RoO2ktLTspKG89dihlW2ldKSlbV10/bi5wdXNoKG8pOnMucHVzaChvKTsobz1xKHQsYihzLG4pKSkuc2VsZWN0b3I9dH1yZXR1cm4gb30sRD1lLnNlbGVjdD1mdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxvLGEscixsLGM9XCJmdW5jdGlvblwiPT10eXBlb2YgdCYmdCxkPSFuJiZrKHQ9Yy5zZWxlY3Rvcnx8dCk7aWYoaT1pfHxbXSwxPT09ZC5sZW5ndGgpe2lmKChvPWRbMF09ZFswXS5zbGljZSgwKSkubGVuZ3RoPjImJlwiSURcIj09PShhPW9bMF0pLnR5cGUmJjk9PT1lLm5vZGVUeXBlJiZPJiZ3LnJlbGF0aXZlW29bMV0udHlwZV0pe2lmKCEoZT0ody5maW5kLklEKGEubWF0Y2hlc1swXS5yZXBsYWNlKHZ0LGJ0KSxlKXx8W10pWzBdKSlyZXR1cm4gaTtjJiYoZT1lLnBhcmVudE5vZGUpLHQ9dC5zbGljZShvLnNoaWZ0KCkudmFsdWUubGVuZ3RoKX1mb3Iocz11dC5uZWVkc0NvbnRleHQudGVzdCh0KT8wOm8ubGVuZ3RoO3MtLSYmKGE9b1tzXSwhdy5yZWxhdGl2ZVtyPWEudHlwZV0pOylpZigobD13LmZpbmRbcl0pJiYobj1sKGEubWF0Y2hlc1swXS5yZXBsYWNlKHZ0LGJ0KSxtdC50ZXN0KG9bMF0udHlwZSkmJmgoZS5wYXJlbnROb2RlKXx8ZSkpKXtpZihvLnNwbGljZShzLDEpLCEodD1uLmxlbmd0aCYmdShvKSkpcmV0dXJuIEcuYXBwbHkoaSxuKSxpO2JyZWFrfX1yZXR1cm4oY3x8VCh0LGQpKShuLGUsIU8saSwhZXx8bXQudGVzdCh0KSYmaChlLnBhcmVudE5vZGUpfHxlKSxpfSx5LnNvcnRTdGFibGU9Vy5zcGxpdChcIlwiKS5zb3J0KFUpLmpvaW4oXCJcIik9PT1XLHkuZGV0ZWN0RHVwbGljYXRlcz0hIVAsRSgpLHkuc29ydERldGFjaGVkPXMoZnVuY3Rpb24odCl7cmV0dXJuIDEmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihNLmNyZWF0ZUVsZW1lbnQoXCJmaWVsZHNldFwiKSl9KSxzKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlubmVySFRNTD1cIjxhIGhyZWY9JyMnPjwvYT5cIixcIiNcIj09PXQuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfSl8fG8oXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsZnVuY3Rpb24odCxlLGkpe2lmKCFpKXJldHVybiB0LmdldEF0dHJpYnV0ZShlLFwidHlwZVwiPT09ZS50b0xvd2VyQ2FzZSgpPzE6Mil9KSx5LmF0dHJpYnV0ZXMmJnMoZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5uZXJIVE1MPVwiPGlucHV0Lz5cIix0LmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKFwidmFsdWVcIixcIlwiKSxcIlwiPT09dC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZShcInZhbHVlXCIpfSl8fG8oXCJ2YWx1ZVwiLGZ1bmN0aW9uKHQsZSxpKXtpZighaSYmXCJpbnB1dFwiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXJldHVybiB0LmRlZmF1bHRWYWx1ZX0pLHMoZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQuZ2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIil9KXx8byhaLGZ1bmN0aW9uKHQsZSxpKXt2YXIgbjtpZighaSlyZXR1cm4hMD09PXRbZV0/ZS50b0xvd2VyQ2FzZSgpOihuPXQuZ2V0QXR0cmlidXRlTm9kZShlKSkmJm4uc3BlY2lmaWVkP24udmFsdWU6bnVsbH0pLGV9KHQpO2Z0LmZpbmQ9bXQsZnQuZXhwcj1tdC5zZWxlY3RvcnMsZnQuZXhwcltcIjpcIl09ZnQuZXhwci5wc2V1ZG9zLGZ0LnVuaXF1ZVNvcnQ9ZnQudW5pcXVlPW10LnVuaXF1ZVNvcnQsZnQudGV4dD1tdC5nZXRUZXh0LGZ0LmlzWE1MRG9jPW10LmlzWE1MLGZ0LmNvbnRhaW5zPW10LmNvbnRhaW5zLGZ0LmVzY2FwZVNlbGVjdG9yPW10LmVzY2FwZTt2YXIgdnQ9ZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbj1bXSxzPXZvaWQgMCE9PWk7KHQ9dFtlXSkmJjkhPT10Lm5vZGVUeXBlOylpZigxPT09dC5ub2RlVHlwZSl7aWYocyYmZnQodCkuaXMoaSkpYnJlYWs7bi5wdXNoKHQpfXJldHVybiBufSxidD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgaT1bXTt0O3Q9dC5uZXh0U2libGluZykxPT09dC5ub2RlVHlwZSYmdCE9PWUmJmkucHVzaCh0KTtyZXR1cm4gaX0sX3Q9ZnQuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQseXQ9L148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2k7ZnQuZmlsdGVyPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1lWzBdO3JldHVybiBpJiYodD1cIjpub3QoXCIrdCtcIilcIiksMT09PWUubGVuZ3RoJiYxPT09bi5ub2RlVHlwZT9mdC5maW5kLm1hdGNoZXNTZWxlY3RvcihuLHQpP1tuXTpbXTpmdC5maW5kLm1hdGNoZXModCxmdC5ncmVwKGUsZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lm5vZGVUeXBlfSkpfSxmdC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMubGVuZ3RoLHM9dGhpcztpZihcInN0cmluZ1wiIT10eXBlb2YgdClyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodCkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKGU9MDtlPG47ZSsrKWlmKGZ0LmNvbnRhaW5zKHNbZV0sdGhpcykpcmV0dXJuITB9KSk7Zm9yKGk9dGhpcy5wdXNoU3RhY2soW10pLGU9MDtlPG47ZSsrKWZ0LmZpbmQodCxzW2VdLGkpO3JldHVybiBuPjE/ZnQudW5pcXVlU29ydChpKTppfSxmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEodGhpcyx0fHxbXSwhMSkpfSxub3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEodGhpcyx0fHxbXSwhMCkpfSxpczpmdW5jdGlvbih0KXtyZXR1cm4hIWEodGhpcyxcInN0cmluZ1wiPT10eXBlb2YgdCYmX3QudGVzdCh0KT9mdCh0KTp0fHxbXSwhMSkubGVuZ3RofX0pO3ZhciB3dCx4dD0vXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLzsoZnQuZm4uaW5pdD1mdW5jdGlvbih0LGUsaSl7dmFyIG4scztpZighdClyZXR1cm4gdGhpcztpZihpPWl8fHd0LFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighKG49XCI8XCI9PT10WzBdJiZcIj5cIj09PXRbdC5sZW5ndGgtMV0mJnQubGVuZ3RoPj0zP1tudWxsLHQsbnVsbF06eHQuZXhlYyh0KSl8fCFuWzFdJiZlKXJldHVybiFlfHxlLmpxdWVyeT8oZXx8aSkuZmluZCh0KTp0aGlzLmNvbnN0cnVjdG9yKGUpLmZpbmQodCk7aWYoblsxXSl7aWYoZT1lIGluc3RhbmNlb2YgZnQ/ZVswXTplLGZ0Lm1lcmdlKHRoaXMsZnQucGFyc2VIVE1MKG5bMV0sZSYmZS5ub2RlVHlwZT9lLm93bmVyRG9jdW1lbnR8fGU6WiwhMCkpLHl0LnRlc3QoblsxXSkmJmZ0LmlzUGxhaW5PYmplY3QoZSkpZm9yKG4gaW4gZSl1dCh0aGlzW25dKT90aGlzW25dKGVbbl0pOnRoaXMuYXR0cihuLGVbbl0pO3JldHVybiB0aGlzfXJldHVybihzPVouZ2V0RWxlbWVudEJ5SWQoblsyXSkpJiYodGhpc1swXT1zLHRoaXMubGVuZ3RoPTEpLHRoaXN9cmV0dXJuIHQubm9kZVR5cGU/KHRoaXNbMF09dCx0aGlzLmxlbmd0aD0xLHRoaXMpOnV0KHQpP3ZvaWQgMCE9PWkucmVhZHk/aS5yZWFkeSh0KTp0KGZ0KTpmdC5tYWtlQXJyYXkodCx0aGlzKX0pLnByb3RvdHlwZT1mdC5mbix3dD1mdChaKTt2YXIgQ3Q9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sa3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07ZnQuZm4uZXh0ZW5kKHtoYXM6ZnVuY3Rpb24odCl7dmFyIGU9ZnQodCx0aGlzKSxpPWUubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgdD0wO3Q8aTt0KyspaWYoZnQuY29udGFpbnModGhpcyxlW3RdKSlyZXR1cm4hMH0pfSxjbG9zZXN0OmZ1bmN0aW9uKHQsZSl7dmFyIGksbj0wLHM9dGhpcy5sZW5ndGgsbz1bXSxhPVwic3RyaW5nXCIhPXR5cGVvZiB0JiZmdCh0KTtpZighX3QudGVzdCh0KSlmb3IoO248cztuKyspZm9yKGk9dGhpc1tuXTtpJiZpIT09ZTtpPWkucGFyZW50Tm9kZSlpZihpLm5vZGVUeXBlPDExJiYoYT9hLmluZGV4KGkpPi0xOjE9PT1pLm5vZGVUeXBlJiZmdC5maW5kLm1hdGNoZXNTZWxlY3RvcihpLHQpKSl7by5wdXNoKGkpO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjayhvLmxlbmd0aD4xP2Z0LnVuaXF1ZVNvcnQobyk6byl9LGluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiB0P1wic3RyaW5nXCI9PXR5cGVvZiB0P3N0LmNhbGwoZnQodCksdGhpc1swXSk6c3QuY2FsbCh0aGlzLHQuanF1ZXJ5P3RbMF06dCk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQudW5pcXVlU29ydChmdC5tZXJnZSh0aGlzLmdldCgpLGZ0KHQsZSkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PXQ/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIodCkpfX0pLGZ0LmVhY2goe3BhcmVudDpmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudE5vZGU7cmV0dXJuIGUmJjExIT09ZS5ub2RlVHlwZT9lOm51bGx9LHBhcmVudHM6ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHQsXCJwYXJlbnROb2RlXCIpfSxwYXJlbnRzVW50aWw6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB2dCh0LFwicGFyZW50Tm9kZVwiLGkpfSxuZXh0OmZ1bmN0aW9uKHQpe3JldHVybiByKHQsXCJuZXh0U2libGluZ1wiKX0scHJldjpmdW5jdGlvbih0KXtyZXR1cm4gcih0LFwicHJldmlvdXNTaWJsaW5nXCIpfSxuZXh0QWxsOmZ1bmN0aW9uKHQpe3JldHVybiB2dCh0LFwibmV4dFNpYmxpbmdcIil9LHByZXZBbGw6ZnVuY3Rpb24odCl7cmV0dXJuIHZ0KHQsXCJwcmV2aW91c1NpYmxpbmdcIil9LG5leHRVbnRpbDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHZ0KHQsXCJuZXh0U2libGluZ1wiLGkpfSxwcmV2VW50aWw6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB2dCh0LFwicHJldmlvdXNTaWJsaW5nXCIsaSl9LHNpYmxpbmdzOmZ1bmN0aW9uKHQpe3JldHVybiBidCgodC5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCx0KX0sY2hpbGRyZW46ZnVuY3Rpb24odCl7cmV0dXJuIGJ0KHQuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsXCJpZnJhbWVcIik/dC5jb250ZW50RG9jdW1lbnQ6KG8odCxcInRlbXBsYXRlXCIpJiYodD10LmNvbnRlbnR8fHQpLGZ0Lm1lcmdlKFtdLHQuY2hpbGROb2RlcykpfX0sZnVuY3Rpb24odCxlKXtmdC5mblt0XT1mdW5jdGlvbihpLG4pe3ZhciBzPWZ0Lm1hcCh0aGlzLGUsaSk7cmV0dXJuXCJVbnRpbFwiIT09dC5zbGljZSgtNSkmJihuPWkpLG4mJlwic3RyaW5nXCI9PXR5cGVvZiBuJiYocz1mdC5maWx0ZXIobixzKSksdGhpcy5sZW5ndGg+MSYmKGt0W3RdfHxmdC51bmlxdWVTb3J0KHMpLEN0LnRlc3QodCkmJnMucmV2ZXJzZSgpKSx0aGlzLnB1c2hTdGFjayhzKX19KTt2YXIgVHQ9L1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nO2Z0LkNhbGxiYWNrcz1mdW5jdGlvbih0KXt0PVwic3RyaW5nXCI9PXR5cGVvZiB0P2Z1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBmdC5lYWNoKHQubWF0Y2goVHQpfHxbXSxmdW5jdGlvbih0LGkpe2VbaV09ITB9KSxlfSh0KTpmdC5leHRlbmQoe30sdCk7dmFyIGUsaSxzLG8sYT1bXSxyPVtdLGw9LTEsaD1mdW5jdGlvbigpe2ZvcihvPW98fHQub25jZSxzPWU9ITA7ci5sZW5ndGg7bD0tMSlmb3IoaT1yLnNoaWZ0KCk7KytsPGEubGVuZ3RoOykhMT09PWFbbF0uYXBwbHkoaVswXSxpWzFdKSYmdC5zdG9wT25GYWxzZSYmKGw9YS5sZW5ndGgsaT0hMSk7dC5tZW1vcnl8fChpPSExKSxlPSExLG8mJihhPWk/W106XCJcIil9LGM9e2FkZDpmdW5jdGlvbigpe3JldHVybiBhJiYoaSYmIWUmJihsPWEubGVuZ3RoLTEsci5wdXNoKGkpKSxmdW5jdGlvbiBlKGkpe2Z0LmVhY2goaSxmdW5jdGlvbihpLHMpe3V0KHMpP3QudW5pcXVlJiZjLmhhcyhzKXx8YS5wdXNoKHMpOnMmJnMubGVuZ3RoJiZcInN0cmluZ1wiIT09bihzKSYmZShzKX0pfShhcmd1bWVudHMpLGkmJiFlJiZoKCkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBmdC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbih0LGUpe2Zvcih2YXIgaTsoaT1mdC5pbkFycmF5KGUsYSxpKSk+LTE7KWEuc3BsaWNlKGksMSksaTw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKHQpe3JldHVybiB0P2Z0LmluQXJyYXkodCxhKT4tMTphLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhJiYoYT1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBvPXI9W10sYT1pPVwiXCIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBvPXI9W10saXx8ZXx8KGE9aT1cIlwiKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99LGZpcmVXaXRoOmZ1bmN0aW9uKHQsaSl7cmV0dXJuIG98fChpPVt0LChpPWl8fFtdKS5zbGljZT9pLnNsaWNlKCk6aV0sci5wdXNoKGkpLGV8fGgoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBjLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhc319O3JldHVybiBjfSxmdC5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGUpe3ZhciBpPVtbXCJub3RpZnlcIixcInByb2dyZXNzXCIsZnQuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLGZ0LkNhbGxiYWNrcyhcIm1lbW9yeVwiKSwyXSxbXCJyZXNvbHZlXCIsXCJkb25lXCIsZnQuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksZnQuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksMCxcInJlc29sdmVkXCJdLFtcInJlamVjdFwiLFwiZmFpbFwiLGZ0LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLGZ0LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLDEsXCJyZWplY3RlZFwiXV0sbj1cInBlbmRpbmdcIixzPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gby5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiBzLnRoZW4obnVsbCx0KX0scGlwZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cztyZXR1cm4gZnQuRGVmZXJyZWQoZnVuY3Rpb24oZSl7ZnQuZWFjaChpLGZ1bmN0aW9uKGksbil7dmFyIHM9dXQodFtuWzRdXSkmJnRbbls0XV07b1tuWzFdXShmdW5jdGlvbigpe3ZhciB0PXMmJnMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3QmJnV0KHQucHJvbWlzZSk/dC5wcm9taXNlKCkucHJvZ3Jlc3MoZS5ub3RpZnkpLmRvbmUoZS5yZXNvbHZlKS5mYWlsKGUucmVqZWN0KTplW25bMF0rXCJXaXRoXCJdKHRoaXMscz9bdF06YXJndW1lbnRzKX0pfSksdD1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKGUsbixzKXtmdW5jdGlvbiBvKGUsaSxuLHMpe3JldHVybiBmdW5jdGlvbigpe3ZhciByPXRoaXMsYz1hcmd1bWVudHMsdT1mdW5jdGlvbigpe3ZhciB0LHU7aWYoIShlPGEpKXtpZigodD1uLmFwcGx5KHIsYykpPT09aS5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiKTt1PXQmJihcIm9iamVjdFwiPT10eXBlb2YgdHx8XCJmdW5jdGlvblwiPT10eXBlb2YgdCkmJnQudGhlbix1dCh1KT9zP3UuY2FsbCh0LG8oYSxpLGwscyksbyhhLGksaCxzKSk6KGErKyx1LmNhbGwodCxvKGEsaSxsLHMpLG8oYSxpLGgscyksbyhhLGksbCxpLm5vdGlmeVdpdGgpKSk6KG4hPT1sJiYocj12b2lkIDAsYz1bdF0pLChzfHxpLnJlc29sdmVXaXRoKShyLGMpKX19LGQ9cz91OmZ1bmN0aW9uKCl7dHJ5e3UoKX1jYXRjaCh0KXtmdC5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZmdC5EZWZlcnJlZC5leGNlcHRpb25Ib29rKHQsZC5zdGFja1RyYWNlKSxlKzE+PWEmJihuIT09aCYmKHI9dm9pZCAwLGM9W3RdKSxpLnJlamVjdFdpdGgocixjKSl9fTtlP2QoKTooZnQuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYoZC5zdGFja1RyYWNlPWZ0LkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSx0LnNldFRpbWVvdXQoZCkpfX12YXIgYT0wO3JldHVybiBmdC5EZWZlcnJlZChmdW5jdGlvbih0KXtpWzBdWzNdLmFkZChvKDAsdCx1dChzKT9zOmwsdC5ub3RpZnlXaXRoKSksaVsxXVszXS5hZGQobygwLHQsdXQoZSk/ZTpsKSksaVsyXVszXS5hZGQobygwLHQsdXQobik/bjpoKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQ/ZnQuZXh0ZW5kKHQscyk6c319LG89e307cmV0dXJuIGZ0LmVhY2goaSxmdW5jdGlvbih0LGUpe3ZhciBhPWVbMl0scj1lWzVdO3NbZVsxXV09YS5hZGQsciYmYS5hZGQoZnVuY3Rpb24oKXtuPXJ9LGlbMy10XVsyXS5kaXNhYmxlLGlbMy10XVszXS5kaXNhYmxlLGlbMF1bMl0ubG9jayxpWzBdWzNdLmxvY2spLGEuYWRkKGVbM10uZmlyZSksb1tlWzBdXT1mdW5jdGlvbigpe3JldHVybiBvW2VbMF0rXCJXaXRoXCJdKHRoaXM9PT1vP3ZvaWQgMDp0aGlzLGFyZ3VtZW50cyksdGhpc30sb1tlWzBdK1wiV2l0aFwiXT1hLmZpcmVXaXRofSkscy5wcm9taXNlKG8pLGUmJmUuY2FsbChvLG8pLG99LHdoZW46ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aCxpPWUsbj1BcnJheShpKSxzPWV0LmNhbGwoYXJndW1lbnRzKSxvPWZ0LkRlZmVycmVkKCksYT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7blt0XT10aGlzLHNbdF09YXJndW1lbnRzLmxlbmd0aD4xP2V0LmNhbGwoYXJndW1lbnRzKTppLC0tZXx8by5yZXNvbHZlV2l0aChuLHMpfX07aWYoZTw9MSYmKGModCxvLmRvbmUoYShpKSkucmVzb2x2ZSxvLnJlamVjdCwhZSksXCJwZW5kaW5nXCI9PT1vLnN0YXRlKCl8fHV0KHNbaV0mJnNbaV0udGhlbikpKXJldHVybiBvLnRoZW4oKTtmb3IoO2ktLTspYyhzW2ldLGEoaSksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgRHQ9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87ZnQuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbihlLGkpe3QuY29uc29sZSYmdC5jb25zb2xlLndhcm4mJmUmJkR0LnRlc3QoZS5uYW1lKSYmdC5jb25zb2xlLndhcm4oXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIitlLm1lc3NhZ2UsZS5zdGFjayxpKX0sZnQucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7dC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgU3Q9ZnQuRGVmZXJyZWQoKTtmdC5mbi5yZWFkeT1mdW5jdGlvbih0KXtyZXR1cm4gU3QudGhlbih0KS5jYXRjaChmdW5jdGlvbih0KXtmdC5yZWFkeUV4Y2VwdGlvbih0KX0pLHRoaXN9LGZ0LmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbih0KXsoITA9PT10Py0tZnQucmVhZHlXYWl0OmZ0LmlzUmVhZHkpfHwoZnQuaXNSZWFkeT0hMCwhMCE9PXQmJi0tZnQucmVhZHlXYWl0PjB8fFN0LnJlc29sdmVXaXRoKFosW2Z0XSkpfX0pLGZ0LnJlYWR5LnRoZW49U3QudGhlbixcImNvbXBsZXRlXCI9PT1aLnJlYWR5U3RhdGV8fFwibG9hZGluZ1wiIT09Wi5yZWFkeVN0YXRlJiYhWi5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/dC5zZXRUaW1lb3V0KGZ0LnJlYWR5KTooWi5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLHUpLHQuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIix1KSk7dmFyIEl0PWZ1bmN0aW9uKHQsZSxpLHMsbyxhLHIpe3ZhciBsPTAsaD10Lmxlbmd0aCxjPW51bGw9PWk7aWYoXCJvYmplY3RcIj09PW4oaSkpZm9yKGwgaW4gbz0hMCxpKUl0KHQsZSxsLGlbbF0sITAsYSxyKTtlbHNlIGlmKHZvaWQgMCE9PXMmJihvPSEwLHV0KHMpfHwocj0hMCksYyYmKHI/KGUuY2FsbCh0LHMpLGU9bnVsbCk6KGM9ZSxlPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gYy5jYWxsKGZ0KHQpLGkpfSkpLGUpKWZvcig7bDxoO2wrKyllKHRbbF0saSxyP3M6cy5jYWxsKHRbbF0sbCxlKHRbbF0saSkpKTtyZXR1cm4gbz90OmM/ZS5jYWxsKHQpOmg/ZSh0WzBdLGkpOmF9LFB0PS9eLW1zLS8sRXQ9Ly0oW2Etel0pL2csTXQ9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10Lm5vZGVUeXBlfHw5PT09dC5ub2RlVHlwZXx8ISt0Lm5vZGVUeXBlfTtmLnVpZD0xLGYucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbih0KXt2YXIgZT10W3RoaXMuZXhwYW5kb107cmV0dXJuIGV8fChlPXt9LE10KHQpJiYodC5ub2RlVHlwZT90W3RoaXMuZXhwYW5kb109ZTpPYmplY3QuZGVmaW5lUHJvcGVydHkodCx0aGlzLmV4cGFuZG8se3ZhbHVlOmUsY29uZmlndXJhYmxlOiEwfSkpKSxlfSxzZXQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLHM9dGhpcy5jYWNoZSh0KTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlzW3AoZSldPWk7ZWxzZSBmb3IobiBpbiBlKXNbcChuKV09ZVtuXTtyZXR1cm4gc30sZ2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/dGhpcy5jYWNoZSh0KTp0W3RoaXMuZXhwYW5kb10mJnRbdGhpcy5leHBhbmRvXVtwKGUpXX0sYWNjZXNzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdm9pZCAwPT09ZXx8ZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUmJnZvaWQgMD09PWk/dGhpcy5nZXQodCxlKToodGhpcy5zZXQodCxlLGkpLHZvaWQgMCE9PWk/aTplKX0scmVtb3ZlOmZ1bmN0aW9uKHQsZSl7dmFyIGksbj10W3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09bil7aWYodm9pZCAwIT09ZSl7ZT1BcnJheS5pc0FycmF5KGUpP2UubWFwKHApOihlPXAoZSkpaW4gbj9bZV06ZS5tYXRjaChUdCl8fFtdLGk9ZS5sZW5ndGg7Zm9yKDtpLS07KWRlbGV0ZSBuW2VbaV1dfSh2b2lkIDA9PT1lfHxmdC5pc0VtcHR5T2JqZWN0KG4pKSYmKHQubm9kZVR5cGU/dFt0aGlzLmV4cGFuZG9dPXZvaWQgMDpkZWxldGUgdFt0aGlzLmV4cGFuZG9dKX19LGhhc0RhdGE6ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmV4cGFuZG9dO3JldHVybiB2b2lkIDAhPT1lJiYhZnQuaXNFbXB0eU9iamVjdChlKX19O3ZhciBBdD1uZXcgZixPdD1uZXcgZixOdD0vXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sSHQ9L1tBLVpdL2c7ZnQuZXh0ZW5kKHtoYXNEYXRhOmZ1bmN0aW9uKHQpe3JldHVybiBPdC5oYXNEYXRhKHQpfHxBdC5oYXNEYXRhKHQpfSxkYXRhOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gT3QuYWNjZXNzKHQsZSxpKX0scmVtb3ZlRGF0YTpmdW5jdGlvbih0LGUpe090LnJlbW92ZSh0LGUpfSxfZGF0YTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIEF0LmFjY2Vzcyh0LGUsaSl9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKHQsZSl7QXQucmVtb3ZlKHQsZSl9fSksZnQuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLG89dGhpc1swXSxhPW8mJm8uYXR0cmlidXRlcztpZih2b2lkIDA9PT10KXtpZih0aGlzLmxlbmd0aCYmKHM9T3QuZ2V0KG8pLDE9PT1vLm5vZGVUeXBlJiYhQXQuZ2V0KG8sXCJoYXNEYXRhQXR0cnNcIikpKXtmb3IoaT1hLmxlbmd0aDtpLS07KWFbaV0mJjA9PT0obj1hW2ldLm5hbWUpLmluZGV4T2YoXCJkYXRhLVwiKSYmKG49cChuLnNsaWNlKDUpKSxnKG8sbixzW25dKSk7QXQuc2V0KG8sXCJoYXNEYXRhQXR0cnNcIiwhMCl9cmV0dXJuIHN9cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7T3Quc2V0KHRoaXMsdCl9KTpJdCh0aGlzLGZ1bmN0aW9uKGUpe3ZhciBpO2lmKG8mJnZvaWQgMD09PWUpe2lmKHZvaWQgMCE9PShpPU90LmdldChvLHQpKSlyZXR1cm4gaTtpZih2b2lkIDAhPT0oaT1nKG8sdCkpKXJldHVybiBpfWVsc2UgdGhpcy5lYWNoKGZ1bmN0aW9uKCl7T3Quc2V0KHRoaXMsdCxlKX0pfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITApfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtPdC5yZW1vdmUodGhpcyx0KX0pfX0pLGZ0LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuO2lmKHQpcmV0dXJuIGU9KGV8fFwiZnhcIikrXCJxdWV1ZVwiLG49QXQuZ2V0KHQsZSksaSYmKCFufHxBcnJheS5pc0FycmF5KGkpP249QXQuYWNjZXNzKHQsZSxmdC5tYWtlQXJyYXkoaSkpOm4ucHVzaChpKSksbnx8W119LGRlcXVldWU6ZnVuY3Rpb24odCxlKXtlPWV8fFwiZnhcIjt2YXIgaT1mdC5xdWV1ZSh0LGUpLG49aS5sZW5ndGgscz1pLnNoaWZ0KCksbz1mdC5fcXVldWVIb29rcyh0LGUpO1wiaW5wcm9ncmVzc1wiPT09cyYmKHM9aS5zaGlmdCgpLG4tLSkscyYmKFwiZnhcIj09PWUmJmkudW5zaGlmdChcImlucHJvZ3Jlc3NcIiksZGVsZXRlIG8uc3RvcCxzLmNhbGwodCxmdW5jdGlvbigpe2Z0LmRlcXVldWUodCxlKX0sbykpLCFuJiZvJiZvLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24odCxlKXt2YXIgaT1lK1wicXVldWVIb29rc1wiO3JldHVybiBBdC5nZXQodCxpKXx8QXQuYWNjZXNzKHQsaSx7ZW1wdHk6ZnQuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIikuYWRkKGZ1bmN0aW9uKCl7QXQucmVtb3ZlKHQsW2UrXCJxdWV1ZVwiLGldKX0pfSl9fSksZnQuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbih0LGUpe3ZhciBpPTI7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJihlPXQsdD1cImZ4XCIsaS0tKSxhcmd1bWVudHMubGVuZ3RoPGk/ZnQucXVldWUodGhpc1swXSx0KTp2b2lkIDA9PT1lP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZnQucXVldWUodGhpcyx0LGUpO2Z0Ll9xdWV1ZUhvb2tzKHRoaXMsdCksXCJmeFwiPT09dCYmXCJpbnByb2dyZXNzXCIhPT1pWzBdJiZmdC5kZXF1ZXVlKHRoaXMsdCl9KX0sZGVxdWV1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnQuZGVxdWV1ZSh0aGlzLHQpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucXVldWUodHx8XCJmeFwiLFtdKX0scHJvbWlzZTpmdW5jdGlvbih0LGUpe3ZhciBpLG49MSxzPWZ0LkRlZmVycmVkKCksbz10aGlzLGE9dGhpcy5sZW5ndGgscj1mdW5jdGlvbigpey0tbnx8cy5yZXNvbHZlV2l0aChvLFtvXSl9O2ZvcihcInN0cmluZ1wiIT10eXBlb2YgdCYmKGU9dCx0PXZvaWQgMCksdD10fHxcImZ4XCI7YS0tOykoaT1BdC5nZXQob1thXSx0K1wicXVldWVIb29rc1wiKSkmJmkuZW1wdHkmJihuKyssaS5lbXB0eS5hZGQocikpO3JldHVybiByKCkscy5wcm9taXNlKGUpfX0pO3ZhciB6dD0vWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLy5zb3VyY2UsTHQ9bmV3IFJlZ0V4cChcIl4oPzooWystXSk9fCkoXCIrenQrXCIpKFthLXolXSopJFwiLFwiaVwiKSxXdD1bXCJUb3BcIixcIlJpZ2h0XCIsXCJCb3R0b21cIixcIkxlZnRcIl0sUnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm5cIm5vbmVcIj09PSh0PWV8fHQpLnN0eWxlLmRpc3BsYXl8fFwiXCI9PT10LnN0eWxlLmRpc3BsYXkmJmZ0LmNvbnRhaW5zKHQub3duZXJEb2N1bWVudCx0KSYmXCJub25lXCI9PT1mdC5jc3ModCxcImRpc3BsYXlcIil9LCR0PWZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzLG8sYT17fTtmb3IobyBpbiBlKWFbb109dC5zdHlsZVtvXSx0LnN0eWxlW29dPWVbb107Zm9yKG8gaW4gcz1pLmFwcGx5KHQsbnx8W10pLGUpdC5zdHlsZVtvXT1hW29dO3JldHVybiBzfSxqdD17fTtmdC5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBiKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24odCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0P3Q/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7UnQodGhpcyk/ZnQodGhpcykuc2hvdygpOmZ0KHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBGdD0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxCdD0vPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSspL2kscXQ9L14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxVdD17b3B0aW9uOlsxLFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLFwiPC9zZWxlY3Q+XCJdLHRoZWFkOlsxLFwiPHRhYmxlPlwiLFwiPC90YWJsZT5cIl0sY29sOlsyLFwiPHRhYmxlPjxjb2xncm91cD5cIixcIjwvY29sZ3JvdXA+PC90YWJsZT5cIl0sdHI6WzIsXCI8dGFibGU+PHRib2R5PlwiLFwiPC90Ym9keT48L3RhYmxlPlwiXSx0ZDpbMyxcIjx0YWJsZT48dGJvZHk+PHRyPlwiLFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCJdLF9kZWZhdWx0OlswLFwiXCIsXCJcIl19O1V0Lm9wdGdyb3VwPVV0Lm9wdGlvbixVdC50Ym9keT1VdC50Zm9vdD1VdC5jb2xncm91cD1VdC5jYXB0aW9uPVV0LnRoZWFkLFV0LnRoPVV0LnRkO3ZhciBZdD0vPHwmIz9cXHcrOy87IWZ1bmN0aW9uKCl7dmFyIHQ9Wi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkuYXBwZW5kQ2hpbGQoWi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxlPVouY3JlYXRlRWxlbWVudChcImlucHV0XCIpO2Uuc2V0QXR0cmlidXRlKFwidHlwZVwiLFwicmFkaW9cIiksZS5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpLGUuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwidFwiKSx0LmFwcGVuZENoaWxkKGUpLGN0LmNoZWNrQ2xvbmU9dC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsdC5pbm5lckhUTUw9XCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCIsY3Qubm9DbG9uZUNoZWNrZWQ9ISF0LmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZX0oKTt2YXIgVnQ9Wi5kb2N1bWVudEVsZW1lbnQsS3Q9L15rZXkvLFh0PS9eKD86bW91c2V8cG9pbnRlcnxjb250ZXh0bWVudXxkcmFnfGRyb3ApfGNsaWNrLyxHdD0vXihbXi5dKikoPzpcXC4oLispfCkvO2Z0LmV2ZW50PXtnbG9iYWw6e30sYWRkOmZ1bmN0aW9uKHQsZSxpLG4scyl7dmFyIG8sYSxyLGwsaCxjLHUsZCxwLGYsZyxtPUF0LmdldCh0KTtpZihtKWZvcihpLmhhbmRsZXImJihpPShvPWkpLmhhbmRsZXIscz1vLnNlbGVjdG9yKSxzJiZmdC5maW5kLm1hdGNoZXNTZWxlY3RvcihWdCxzKSxpLmd1aWR8fChpLmd1aWQ9ZnQuZ3VpZCsrKSwobD1tLmV2ZW50cyl8fChsPW0uZXZlbnRzPXt9KSwoYT1tLmhhbmRsZSl8fChhPW0uaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1mdCYmZnQuZXZlbnQudHJpZ2dlcmVkIT09ZS50eXBlP2Z0LmV2ZW50LmRpc3BhdGNoLmFwcGx5KHQsYXJndW1lbnRzKTp2b2lkIDB9KSxoPShlPShlfHxcIlwiKS5tYXRjaChUdCl8fFtcIlwiXSkubGVuZ3RoO2gtLTspcD1nPShyPUd0LmV4ZWMoZVtoXSl8fFtdKVsxXSxmPShyWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLHAmJih1PWZ0LmV2ZW50LnNwZWNpYWxbcF18fHt9LHA9KHM/dS5kZWxlZ2F0ZVR5cGU6dS5iaW5kVHlwZSl8fHAsdT1mdC5ldmVudC5zcGVjaWFsW3BdfHx7fSxjPWZ0LmV4dGVuZCh7dHlwZTpwLG9yaWdUeXBlOmcsZGF0YTpuLGhhbmRsZXI6aSxndWlkOmkuZ3VpZCxzZWxlY3RvcjpzLG5lZWRzQ29udGV4dDpzJiZmdC5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KHMpLG5hbWVzcGFjZTpmLmpvaW4oXCIuXCIpfSxvKSwoZD1sW3BdKXx8KChkPWxbcF09W10pLmRlbGVnYXRlQ291bnQ9MCx1LnNldHVwJiYhMSE9PXUuc2V0dXAuY2FsbCh0LG4sZixhKXx8dC5hZGRFdmVudExpc3RlbmVyJiZ0LmFkZEV2ZW50TGlzdGVuZXIocCxhKSksdS5hZGQmJih1LmFkZC5jYWxsKHQsYyksYy5oYW5kbGVyLmd1aWR8fChjLmhhbmRsZXIuZ3VpZD1pLmd1aWQpKSxzP2Quc3BsaWNlKGQuZGVsZWdhdGVDb3VudCsrLDAsYyk6ZC5wdXNoKGMpLGZ0LmV2ZW50Lmdsb2JhbFtwXT0hMCl9LHJlbW92ZTpmdW5jdGlvbih0LGUsaSxuLHMpe3ZhciBvLGEscixsLGgsYyx1LGQscCxmLGcsbT1BdC5oYXNEYXRhKHQpJiZBdC5nZXQodCk7aWYobSYmKGw9bS5ldmVudHMpKXtmb3IoaD0oZT0oZXx8XCJcIikubWF0Y2goVHQpfHxbXCJcIl0pLmxlbmd0aDtoLS07KWlmKHA9Zz0ocj1HdC5leGVjKGVbaF0pfHxbXSlbMV0sZj0oclsyXXx8XCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSxwKXtmb3IodT1mdC5ldmVudC5zcGVjaWFsW3BdfHx7fSxkPWxbcD0obj91LmRlbGVnYXRlVHlwZTp1LmJpbmRUeXBlKXx8cF18fFtdLHI9clsyXSYmbmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK2Yuam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpLGE9bz1kLmxlbmd0aDtvLS07KWM9ZFtvXSwhcyYmZyE9PWMub3JpZ1R5cGV8fGkmJmkuZ3VpZCE9PWMuZ3VpZHx8ciYmIXIudGVzdChjLm5hbWVzcGFjZSl8fG4mJm4hPT1jLnNlbGVjdG9yJiYoXCIqKlwiIT09bnx8IWMuc2VsZWN0b3IpfHwoZC5zcGxpY2UobywxKSxjLnNlbGVjdG9yJiZkLmRlbGVnYXRlQ291bnQtLSx1LnJlbW92ZSYmdS5yZW1vdmUuY2FsbCh0LGMpKTthJiYhZC5sZW5ndGgmJih1LnRlYXJkb3duJiYhMSE9PXUudGVhcmRvd24uY2FsbCh0LGYsbS5oYW5kbGUpfHxmdC5yZW1vdmVFdmVudCh0LHAsbS5oYW5kbGUpLGRlbGV0ZSBsW3BdKX1lbHNlIGZvcihwIGluIGwpZnQuZXZlbnQucmVtb3ZlKHQscCtlW2hdLGksbiwhMCk7ZnQuaXNFbXB0eU9iamVjdChsKSYmQXQucmVtb3ZlKHQsXCJoYW5kbGUgZXZlbnRzXCIpfX0sZGlzcGF0Y2g6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbyxhLHI9ZnQuZXZlbnQuZml4KHQpLGw9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgpLGg9KEF0LmdldCh0aGlzLFwiZXZlbnRzXCIpfHx7fSlbci50eXBlXXx8W10sYz1mdC5ldmVudC5zcGVjaWFsW3IudHlwZV18fHt9O2ZvcihsWzBdPXIsZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspbFtlXT1hcmd1bWVudHNbZV07aWYoci5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHwhMSE9PWMucHJlRGlzcGF0Y2guY2FsbCh0aGlzLHIpKXtmb3IoYT1mdC5ldmVudC5oYW5kbGVycy5jYWxsKHRoaXMscixoKSxlPTA7KHM9YVtlKytdKSYmIXIuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZm9yKHIuY3VycmVudFRhcmdldD1zLmVsZW0saT0wOyhvPXMuaGFuZGxlcnNbaSsrXSkmJiFyLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7KXIucm5hbWVzcGFjZSYmIXIucm5hbWVzcGFjZS50ZXN0KG8ubmFtZXNwYWNlKXx8KHIuaGFuZGxlT2JqPW8sci5kYXRhPW8uZGF0YSx2b2lkIDAhPT0obj0oKGZ0LmV2ZW50LnNwZWNpYWxbby5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fG8uaGFuZGxlcikuYXBwbHkocy5lbGVtLGwpKSYmITE9PT0oci5yZXN1bHQ9bikmJihyLnByZXZlbnREZWZhdWx0KCksci5zdG9wUHJvcGFnYXRpb24oKSkpO3JldHVybiBjLnBvc3REaXNwYXRjaCYmYy5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLHIpLHIucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHMsbyxhLHI9W10sbD1lLmRlbGVnYXRlQ291bnQsaD10LnRhcmdldDtpZihsJiZoLm5vZGVUeXBlJiYhKFwiY2xpY2tcIj09PXQudHlwZSYmdC5idXR0b24+PTEpKWZvcig7aCE9PXRoaXM7aD1oLnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PWgubm9kZVR5cGUmJihcImNsaWNrXCIhPT10LnR5cGV8fCEwIT09aC5kaXNhYmxlZCkpe2ZvcihvPVtdLGE9e30saT0wO2k8bDtpKyspdm9pZCAwPT09YVtzPShuPWVbaV0pLnNlbGVjdG9yK1wiIFwiXSYmKGFbc109bi5uZWVkc0NvbnRleHQ/ZnQocyx0aGlzKS5pbmRleChoKT4tMTpmdC5maW5kKHMsdGhpcyxudWxsLFtoXSkubGVuZ3RoKSxhW3NdJiZvLnB1c2gobik7by5sZW5ndGgmJnIucHVzaCh7ZWxlbTpoLGhhbmRsZXJzOm99KX1yZXR1cm4gaD10aGlzLGw8ZS5sZW5ndGgmJnIucHVzaCh7ZWxlbTpoLGhhbmRsZXJzOmUuc2xpY2UobCl9KSxyfSxhZGRQcm9wOmZ1bmN0aW9uKHQsZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ0LkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6dXQoZSk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIGUodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFt0XX0sc2V0OmZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLHQse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX19KX0sZml4OmZ1bmN0aW9uKHQpe3JldHVybiB0W2Z0LmV4cGFuZG9dP3Q6bmV3IGZ0LkV2ZW50KHQpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09aygpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT1rKCkmJnRoaXMuYmx1cilyZXR1cm4gdGhpcy5ibHVyKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3Vzb3V0XCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYoXCJjaGVja2JveFwiPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZvKHRoaXMsXCJpbnB1dFwiKSlyZXR1cm4gdGhpcy5jbGljaygpLCExfSxfZGVmYXVsdDpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LnRhcmdldCxcImFcIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbih0KXt2b2lkIDAhPT10LnJlc3VsdCYmdC5vcmlnaW5hbEV2ZW50JiYodC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPXQucmVzdWx0KX19fX0sZnQucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24odCxlLGkpe3QucmVtb3ZlRXZlbnRMaXN0ZW5lciYmdC5yZW1vdmVFdmVudExpc3RlbmVyKGUsaSl9LGZ0LkV2ZW50PWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgZnQuRXZlbnQpKXJldHVybiBuZXcgZnQuRXZlbnQodCxlKTt0JiZ0LnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD10LHRoaXMudHlwZT10LnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9dC5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT10LmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09dC5yZXR1cm5WYWx1ZT94OkMsdGhpcy50YXJnZXQ9dC50YXJnZXQmJjM9PT10LnRhcmdldC5ub2RlVHlwZT90LnRhcmdldC5wYXJlbnROb2RlOnQudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD10LmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PXQucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPXQsZSYmZnQuZXh0ZW5kKHRoaXMsZSksdGhpcy50aW1lU3RhbXA9dCYmdC50aW1lU3RhbXB8fERhdGUubm93KCksdGhpc1tmdC5leHBhbmRvXT0hMH0sZnQuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpmdC5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6Qyxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpDLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOkMsaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9eCx0JiYhdGhpcy5pc1NpbXVsYXRlZCYmdC5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD14LHQmJiF0aGlzLmlzU2ltdWxhdGVkJiZ0LnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD14LHQmJiF0aGlzLmlzU2ltdWxhdGVkJiZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSxmdC5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLGNoYXI6ITAsY2hhckNvZGU6ITAsa2V5OiEwLGtleUNvZGU6ITAsYnV0dG9uOiEwLGJ1dHRvbnM6ITAsY2xpZW50WDohMCxjbGllbnRZOiEwLG9mZnNldFg6ITAsb2Zmc2V0WTohMCxwb2ludGVySWQ6ITAscG9pbnRlclR5cGU6ITAsc2NyZWVuWDohMCxzY3JlZW5ZOiEwLHRhcmdldFRvdWNoZXM6ITAsdG9FbGVtZW50OiEwLHRvdWNoZXM6ITAsd2hpY2g6ZnVuY3Rpb24odCl7dmFyIGU9dC5idXR0b247cmV0dXJuIG51bGw9PXQud2hpY2gmJkt0LnRlc3QodC50eXBlKT9udWxsIT10LmNoYXJDb2RlP3QuY2hhckNvZGU6dC5rZXlDb2RlOiF0LndoaWNoJiZ2b2lkIDAhPT1lJiZYdC50ZXN0KHQudHlwZSk/MSZlPzE6MiZlPzM6NCZlPzI6MDp0LndoaWNofX0sZnQuZXZlbnQuYWRkUHJvcCksZnQuZWFjaCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHBvaW50ZXJlbnRlcjpcInBvaW50ZXJvdmVyXCIscG9pbnRlcmxlYXZlOlwicG9pbnRlcm91dFwifSxmdW5jdGlvbih0LGUpe2Z0LmV2ZW50LnNwZWNpYWxbdF09e2RlbGVnYXRlVHlwZTplLGJpbmRUeXBlOmUsaGFuZGxlOmZ1bmN0aW9uKHQpe3ZhciBpLG49dC5yZWxhdGVkVGFyZ2V0LHM9dC5oYW5kbGVPYmo7cmV0dXJuIG4mJihuPT09dGhpc3x8ZnQuY29udGFpbnModGhpcyxuKSl8fCh0LnR5cGU9cy5vcmlnVHlwZSxpPXMuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC50eXBlPWUpLGl9fX0pLGZ0LmZuLmV4dGVuZCh7b246ZnVuY3Rpb24odCxlLGksbil7cmV0dXJuIFQodGhpcyx0LGUsaSxuKX0sb25lOmZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiBUKHRoaXMsdCxlLGksbiwxKX0sb2ZmOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzO2lmKHQmJnQucHJldmVudERlZmF1bHQmJnQuaGFuZGxlT2JqKXJldHVybiBuPXQuaGFuZGxlT2JqLGZ0KHQuZGVsZWdhdGVUYXJnZXQpLm9mZihuLm5hbWVzcGFjZT9uLm9yaWdUeXBlK1wiLlwiK24ubmFtZXNwYWNlOm4ub3JpZ1R5cGUsbi5zZWxlY3RvcixuLmhhbmRsZXIpLHRoaXM7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpe2ZvcihzIGluIHQpdGhpcy5vZmYocyxlLHRbc10pO3JldHVybiB0aGlzfXJldHVybiExIT09ZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8KGk9ZSxlPXZvaWQgMCksITE9PT1pJiYoaT1DKSx0aGlzLmVhY2goZnVuY3Rpb24oKXtmdC5ldmVudC5yZW1vdmUodGhpcyx0LGksZSl9KX19KTt2YXIgUXQ9LzwoPyFhcmVhfGJyfGNvbHxlbWJlZHxocnxpbWd8aW5wdXR8bGlua3xtZXRhfHBhcmFtKSgoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKVtePl0qKVxcLz4vZ2ksSnQ9LzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksWnQ9L2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSx0ZT0vXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7ZnQuZXh0ZW5kKHtodG1sUHJlZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0LnJlcGxhY2UoUXQsXCI8JDE+PC8kMj5cIil9LGNsb25lOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG8sYSxyPXQuY2xvbmVOb2RlKCEwKSxsPWZ0LmNvbnRhaW5zKHQub3duZXJEb2N1bWVudCx0KTtpZighKGN0Lm5vQ2xvbmVDaGVja2VkfHwxIT09dC5ub2RlVHlwZSYmMTEhPT10Lm5vZGVUeXBlfHxmdC5pc1hNTERvYyh0KSkpZm9yKGE9XyhyKSxuPTAscz0obz1fKHQpKS5sZW5ndGg7bjxzO24rKylFKG9bbl0sYVtuXSk7aWYoZSlpZihpKWZvcihvPW98fF8odCksYT1hfHxfKHIpLG49MCxzPW8ubGVuZ3RoO248cztuKyspUChvW25dLGFbbl0pO2Vsc2UgUCh0LHIpO3JldHVybihhPV8ocixcInNjcmlwdFwiKSkubGVuZ3RoPjAmJnkoYSwhbCYmXyh0LFwic2NyaXB0XCIpKSxyfSxjbGVhbkRhdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGksbixzPWZ0LmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShpPXRbb10pO28rKylpZihNdChpKSl7aWYoZT1pW0F0LmV4cGFuZG9dKXtpZihlLmV2ZW50cylmb3IobiBpbiBlLmV2ZW50cylzW25dP2Z0LmV2ZW50LnJlbW92ZShpLG4pOmZ0LnJlbW92ZUV2ZW50KGksbixlLmhhbmRsZSk7aVtBdC5leHBhbmRvXT12b2lkIDB9aVtPdC5leHBhbmRvXSYmKGlbT3QuZXhwYW5kb109dm9pZCAwKX19fSksZnQuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIEEodGhpcyx0LCEwKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHRoaXMsdCl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIEl0KHRoaXMsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/ZnQudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD10KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxEKHRoaXMsdCkuYXBwZW5kQ2hpbGQodCl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgZT1EKHRoaXMsdCk7ZS5pbnNlcnRCZWZvcmUodCxlLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gTSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbih0KXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9MDtudWxsIT0odD10aGlzW2VdKTtlKyspMT09PXQubm9kZVR5cGUmJihmdC5jbGVhbkRhdGEoXyh0LCExKSksdC50ZXh0Q29udGVudD1cIlwiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1udWxsIT10JiZ0LGU9bnVsbD09ZT90OmUsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZnQuY2xvbmUodGhpcyx0LGUpfSl9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIEl0KHRoaXMsZnVuY3Rpb24odCl7dmFyIGU9dGhpc1swXXx8e30saT0wLG49dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09dCYmMT09PWUubm9kZVR5cGUpcmV0dXJuIGUuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYhSnQudGVzdCh0KSYmIVV0WyhCdC5leGVjKHQpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe3Q9ZnQuaHRtbFByZWZpbHRlcih0KTt0cnl7Zm9yKDtpPG47aSsrKTE9PT0oZT10aGlzW2ldfHx7fSkubm9kZVR5cGUmJihmdC5jbGVhbkRhdGEoXyhlLCExKSksZS5pbm5lckhUTUw9dCk7ZT0wfWNhdGNoKHQpe319ZSYmdGhpcy5lbXB0eSgpLmFwcGVuZCh0KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMucGFyZW50Tm9kZTtmdC5pbkFycmF5KHRoaXMsdCk8MCYmKGZ0LmNsZWFuRGF0YShfKHRoaXMpKSxpJiZpLnJlcGxhY2VDaGlsZChlLHRoaXMpKX0sdCl9fSksZnQuZWFjaCh7YXBwZW5kVG86XCJhcHBlbmRcIixwcmVwZW5kVG86XCJwcmVwZW5kXCIsaW5zZXJ0QmVmb3JlOlwiYmVmb3JlXCIsaW5zZXJ0QWZ0ZXI6XCJhZnRlclwiLHJlcGxhY2VBbGw6XCJyZXBsYWNlV2l0aFwifSxmdW5jdGlvbih0LGUpe2Z0LmZuW3RdPWZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxuPVtdLHM9ZnQodCksbz1zLmxlbmd0aC0xLGE9MDthPD1vO2ErKylpPWE9PT1vP3RoaXM6dGhpcy5jbG9uZSghMCksZnQoc1thXSlbZV0oaSksbnQuYXBwbHkobixpLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIGVlPW5ldyBSZWdFeHAoXCJeKFwiK3p0K1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLGllPWZ1bmN0aW9uKGUpe3ZhciBpPWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gaSYmaS5vcGVuZXJ8fChpPXQpLGkuZ2V0Q29tcHV0ZWRTdHlsZShlKX0sbmU9bmV3IFJlZ0V4cChXdC5qb2luKFwifFwiKSxcImlcIik7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKGgpe2wuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIixoLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElXCIsVnQuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoaCk7dmFyIGU9dC5nZXRDb21wdXRlZFN0eWxlKGgpO249XCIxJVwiIT09ZS50b3Ascj0xMj09PWkoZS5tYXJnaW5MZWZ0KSxoLnN0eWxlLnJpZ2h0PVwiNjAlXCIsYT0zNj09PWkoZS5yaWdodCkscz0zNj09PWkoZS53aWR0aCksaC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsbz0zNj09PWgub2Zmc2V0V2lkdGh8fFwiYWJzb2x1dGVcIixWdC5yZW1vdmVDaGlsZChsKSxoPW51bGx9fWZ1bmN0aW9uIGkodCl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdCh0KSl9dmFyIG4scyxvLGEscixsPVouY3JlYXRlRWxlbWVudChcImRpdlwiKSxoPVouY3JlYXRlRWxlbWVudChcImRpdlwiKTtoLnN0eWxlJiYoaC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsaC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsY3QuY2xlYXJDbG9uZVN0eWxlPVwiY29udGVudC1ib3hcIj09PWguc3R5bGUuYmFja2dyb3VuZENsaXAsZnQuZXh0ZW5kKGN0LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCksc30scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGF9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCkscn0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksb319KSl9KCk7dmFyIHNlPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxvZT0vXi0tLyxhZT17cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixkaXNwbGF5OlwiYmxvY2tcIn0scmU9e2xldHRlclNwYWNpbmc6XCIwXCIsZm9udFdlaWdodDpcIjQwMFwifSxsZT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0saGU9Wi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlO2Z0LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbih0LGUpe2lmKGUpe3ZhciBpPU8odCxcIm9wYWNpdHlcIik7cmV0dXJuXCJcIj09PWk/XCIxXCI6aX19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7fSxzdHlsZTpmdW5jdGlvbih0LGUsaSxuKXtpZih0JiYzIT09dC5ub2RlVHlwZSYmOCE9PXQubm9kZVR5cGUmJnQuc3R5bGUpe3ZhciBzLG8sYSxyPXAoZSksbD1vZS50ZXN0KGUpLGg9dC5zdHlsZTtpZihsfHwoZT1IKHIpKSxhPWZ0LmNzc0hvb2tzW2VdfHxmdC5jc3NIb29rc1tyXSx2b2lkIDA9PT1pKXJldHVybiBhJiZcImdldFwiaW4gYSYmdm9pZCAwIT09KHM9YS5nZXQodCwhMSxuKSk/czpoW2VdO1wic3RyaW5nXCI9PShvPXR5cGVvZiBpKSYmKHM9THQuZXhlYyhpKSkmJnNbMV0mJihpPW0odCxlLHMpLG89XCJudW1iZXJcIiksbnVsbCE9aSYmaT09aSYmKFwibnVtYmVyXCI9PT1vJiYoaSs9cyYmc1szXXx8KGZ0LmNzc051bWJlcltyXT9cIlwiOlwicHhcIikpLGN0LmNsZWFyQ2xvbmVTdHlsZXx8XCJcIiE9PWl8fDAhPT1lLmluZGV4T2YoXCJiYWNrZ3JvdW5kXCIpfHwoaFtlXT1cImluaGVyaXRcIiksYSYmXCJzZXRcImluIGEmJnZvaWQgMD09PShpPWEuc2V0KHQsaSxuKSl8fChsP2guc2V0UHJvcGVydHkoZSxpKTpoW2VdPWkpKX19LGNzczpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxvLGEscj1wKGUpO3JldHVybiBvZS50ZXN0KGUpfHwoZT1IKHIpKSwoYT1mdC5jc3NIb29rc1tlXXx8ZnQuY3NzSG9va3Nbcl0pJiZcImdldFwiaW4gYSYmKHM9YS5nZXQodCwhMCxpKSksdm9pZCAwPT09cyYmKHM9Tyh0LGUsbikpLFwibm9ybWFsXCI9PT1zJiZlIGluIHJlJiYocz1yZVtlXSksXCJcIj09PWl8fGk/KG89cGFyc2VGbG9hdChzKSwhMD09PWl8fGlzRmluaXRlKG8pP298fDA6cyk6c319KSxmdC5lYWNoKFtcImhlaWdodFwiLFwid2lkdGhcIl0sZnVuY3Rpb24odCxlKXtmdC5jc3NIb29rc1tlXT17Z2V0OmZ1bmN0aW9uKHQsaSxuKXtpZihpKXJldHVybiFzZS50ZXN0KGZ0LmNzcyh0LFwiZGlzcGxheVwiKSl8fHQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/Vyh0LGUsbik6JHQodCxhZSxmdW5jdGlvbigpe3JldHVybiBXKHQsZSxuKX0pfSxzZXQ6ZnVuY3Rpb24odCxpLG4pe3ZhciBzLG89aWUodCksYT1cImJvcmRlci1ib3hcIj09PWZ0LmNzcyh0LFwiYm94U2l6aW5nXCIsITEsbykscj1uJiZMKHQsZSxuLGEsbyk7cmV0dXJuIGEmJmN0LnNjcm9sbGJveFNpemUoKT09PW8ucG9zaXRpb24mJihyLT1NYXRoLmNlaWwodFtcIm9mZnNldFwiK2VbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpXS1wYXJzZUZsb2F0KG9bZV0pLUwodCxlLFwiYm9yZGVyXCIsITEsbyktLjUpKSxyJiYocz1MdC5leGVjKGkpKSYmXCJweFwiIT09KHNbM118fFwicHhcIikmJih0LnN0eWxlW2VdPWksaT1mdC5jc3ModCxlKSkseigwLGkscil9fX0pLGZ0LmNzc0hvb2tzLm1hcmdpbkxlZnQ9TihjdC5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24odCxlKXtpZihlKXJldHVybihwYXJzZUZsb2F0KE8odCxcIm1hcmdpbkxlZnRcIikpfHx0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtJHQodCx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrXCJweFwifSksZnQuZWFjaCh7bWFyZ2luOlwiXCIscGFkZGluZzpcIlwiLGJvcmRlcjpcIldpZHRoXCJ9LGZ1bmN0aW9uKHQsZSl7ZnQuY3NzSG9va3NbdCtlXT17ZXhwYW5kOmZ1bmN0aW9uKGkpe2Zvcih2YXIgbj0wLHM9e30sbz1cInN0cmluZ1wiPT10eXBlb2YgaT9pLnNwbGl0KFwiIFwiKTpbaV07bjw0O24rKylzW3QrV3Rbbl0rZV09b1tuXXx8b1tuLTJdfHxvWzBdO3JldHVybiBzfX0sXCJtYXJnaW5cIiE9PXQmJihmdC5jc3NIb29rc1t0K2VdLnNldD16KX0pLGZ0LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEl0KHRoaXMsZnVuY3Rpb24odCxlLGkpe3ZhciBuLHMsbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKG49aWUodCkscz1lLmxlbmd0aDthPHM7YSsrKW9bZVthXV09ZnQuY3NzKHQsZVthXSwhMSxuKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09aT9mdC5zdHlsZSh0LGUsaSk6ZnQuY3NzKHQsZSl9LHQsZSxhcmd1bWVudHMubGVuZ3RoPjEpfX0pLGZ0LlR3ZWVuPVIsUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlIsaW5pdDpmdW5jdGlvbih0LGUsaSxuLHMsbyl7dGhpcy5lbGVtPXQsdGhpcy5wcm9wPWksdGhpcy5lYXNpbmc9c3x8ZnQuZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1lLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1uLHRoaXMudW5pdD1vfHwoZnQuY3NzTnVtYmVyW2ldP1wiXCI6XCJweFwiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIHQ9Ui5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdCYmdC5nZXQ/dC5nZXQodGhpcyk6Ui5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24odCl7dmFyIGUsaT1SLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9ZT1mdC5lYXNpbmdbdGhpcy5lYXNpbmddKHQsdGhpcy5vcHRpb25zLmR1cmF0aW9uKnQsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9ZT10LHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSplK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLFxuaSYmaS5zZXQ/aS5zZXQodGhpcyk6Ui5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxSLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1SLnByb3RvdHlwZSxSLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMSE9PXQuZWxlbS5ub2RlVHlwZXx8bnVsbCE9dC5lbGVtW3QucHJvcF0mJm51bGw9PXQuZWxlbS5zdHlsZVt0LnByb3BdP3QuZWxlbVt0LnByb3BdOihlPWZ0LmNzcyh0LmVsZW0sdC5wcm9wLFwiXCIpKSYmXCJhdXRvXCIhPT1lP2U6MH0sc2V0OmZ1bmN0aW9uKHQpe2Z0LmZ4LnN0ZXBbdC5wcm9wXT9mdC5meC5zdGVwW3QucHJvcF0odCk6MSE9PXQuZWxlbS5ub2RlVHlwZXx8bnVsbD09dC5lbGVtLnN0eWxlW2Z0LmNzc1Byb3BzW3QucHJvcF1dJiYhZnQuY3NzSG9va3NbdC5wcm9wXT90LmVsZW1bdC5wcm9wXT10Lm5vdzpmdC5zdHlsZSh0LmVsZW0sdC5wcm9wLHQubm93K3QudW5pdCl9fX0sUi5wcm9wSG9va3Muc2Nyb2xsVG9wPVIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbih0KXt0LmVsZW0ubm9kZVR5cGUmJnQuZWxlbS5wYXJlbnROb2RlJiYodC5lbGVtW3QucHJvcF09dC5ub3cpfX0sZnQuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LHN3aW5nOmZ1bmN0aW9uKHQpe3JldHVybi41LU1hdGguY29zKHQqTWF0aC5QSSkvMn0sX2RlZmF1bHQ6XCJzd2luZ1wifSxmdC5meD1SLnByb3RvdHlwZS5pbml0LGZ0LmZ4LnN0ZXA9e307dmFyIGNlLHVlLGRlPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxwZT0vcXVldWVIb29rcyQvO2Z0LkFuaW1hdGlvbj1mdC5leHRlbmQocSx7dHdlZW5lcnM6e1wiKlwiOltmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuY3JlYXRlVHdlZW4odCxlKTtyZXR1cm4gbShpLmVsZW0sdCxMdC5leGVjKGUpLGkpLGl9XX0sdHdlZW5lcjpmdW5jdGlvbih0LGUpe3V0KHQpPyhlPXQsdD1bXCIqXCJdKTp0PXQubWF0Y2goVHQpO2Zvcih2YXIgaSxuPTAscz10Lmxlbmd0aDtuPHM7bisrKWk9dFtuXSxxLnR3ZWVuZXJzW2ldPXEudHdlZW5lcnNbaV18fFtdLHEudHdlZW5lcnNbaV0udW5zaGlmdChlKX0scHJlZmlsdGVyczpbZnVuY3Rpb24odCxlLGkpe3ZhciBuLHMsbyxhLHIsbCxoLGMsdT1cIndpZHRoXCJpbiBlfHxcImhlaWdodFwiaW4gZSxkPXRoaXMscD17fSxmPXQuc3R5bGUsZz10Lm5vZGVUeXBlJiZSdCh0KSxtPUF0LmdldCh0LFwiZnhzaG93XCIpO2ZvcihuIGluIGkucXVldWV8fChudWxsPT0oYT1mdC5fcXVldWVIb29rcyh0LFwiZnhcIikpLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHI9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHIoKX0pLGEudW5xdWV1ZWQrKyxkLmFsd2F5cyhmdW5jdGlvbigpe2QuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLGZ0LnF1ZXVlKHQsXCJmeFwiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSksZSlpZihzPWVbbl0sZGUudGVzdChzKSl7aWYoZGVsZXRlIGVbbl0sbz1vfHxcInRvZ2dsZVwiPT09cyxzPT09KGc/XCJoaWRlXCI6XCJzaG93XCIpKXtpZihcInNob3dcIiE9PXN8fCFtfHx2b2lkIDA9PT1tW25dKWNvbnRpbnVlO2c9ITB9cFtuXT1tJiZtW25dfHxmdC5zdHlsZSh0LG4pfWlmKChsPSFmdC5pc0VtcHR5T2JqZWN0KGUpKXx8IWZ0LmlzRW1wdHlPYmplY3QocCkpZm9yKG4gaW4gdSYmMT09PXQubm9kZVR5cGUmJihpLm92ZXJmbG93PVtmLm92ZXJmbG93LGYub3ZlcmZsb3dYLGYub3ZlcmZsb3dZXSxudWxsPT0oaD1tJiZtLmRpc3BsYXkpJiYoaD1BdC5nZXQodCxcImRpc3BsYXlcIikpLFwibm9uZVwiPT09KGM9ZnQuY3NzKHQsXCJkaXNwbGF5XCIpKSYmKGg/Yz1oOihiKFt0XSwhMCksaD10LnN0eWxlLmRpc3BsYXl8fGgsYz1mdC5jc3ModCxcImRpc3BsYXlcIiksYihbdF0pKSksKFwiaW5saW5lXCI9PT1jfHxcImlubGluZS1ibG9ja1wiPT09YyYmbnVsbCE9aCkmJlwibm9uZVwiPT09ZnQuY3NzKHQsXCJmbG9hdFwiKSYmKGx8fChkLmRvbmUoZnVuY3Rpb24oKXtmLmRpc3BsYXk9aH0pLG51bGw9PWgmJihjPWYuZGlzcGxheSxoPVwibm9uZVwiPT09Yz9cIlwiOmMpKSxmLmRpc3BsYXk9XCJpbmxpbmUtYmxvY2tcIikpLGkub3ZlcmZsb3cmJihmLm92ZXJmbG93PVwiaGlkZGVuXCIsZC5hbHdheXMoZnVuY3Rpb24oKXtmLm92ZXJmbG93PWkub3ZlcmZsb3dbMF0sZi5vdmVyZmxvd1g9aS5vdmVyZmxvd1sxXSxmLm92ZXJmbG93WT1pLm92ZXJmbG93WzJdfSkpLGw9ITEscClsfHwobT9cImhpZGRlblwiaW4gbSYmKGc9bS5oaWRkZW4pOm09QXQuYWNjZXNzKHQsXCJmeHNob3dcIix7ZGlzcGxheTpofSksbyYmKG0uaGlkZGVuPSFnKSxnJiZiKFt0XSwhMCksZC5kb25lKGZ1bmN0aW9uKCl7Zm9yKG4gaW4gZ3x8YihbdF0pLEF0LnJlbW92ZSh0LFwiZnhzaG93XCIpLHApZnQuc3R5bGUodCxuLHBbbl0pfSkpLGw9QihnP21bbl06MCxuLGQpLG4gaW4gbXx8KG1bbl09bC5zdGFydCxnJiYobC5lbmQ9bC5zdGFydCxsLnN0YXJ0PTApKX1dLHByZWZpbHRlcjpmdW5jdGlvbih0LGUpe2U/cS5wcmVmaWx0ZXJzLnVuc2hpZnQodCk6cS5wcmVmaWx0ZXJzLnB1c2godCl9fSksZnQuc3BlZWQ9ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0P2Z0LmV4dGVuZCh7fSx0KTp7Y29tcGxldGU6aXx8IWkmJmV8fHV0KHQpJiZ0LGR1cmF0aW9uOnQsZWFzaW5nOmkmJmV8fGUmJiF1dChlKSYmZX07cmV0dXJuIGZ0LmZ4Lm9mZj9uLmR1cmF0aW9uPTA6XCJudW1iZXJcIiE9dHlwZW9mIG4uZHVyYXRpb24mJihuLmR1cmF0aW9uIGluIGZ0LmZ4LnNwZWVkcz9uLmR1cmF0aW9uPWZ0LmZ4LnNwZWVkc1tuLmR1cmF0aW9uXTpuLmR1cmF0aW9uPWZ0LmZ4LnNwZWVkcy5fZGVmYXVsdCksbnVsbCE9bi5xdWV1ZSYmITAhPT1uLnF1ZXVlfHwobi5xdWV1ZT1cImZ4XCIpLG4ub2xkPW4uY29tcGxldGUsbi5jb21wbGV0ZT1mdW5jdGlvbigpe3V0KG4ub2xkKSYmbi5vbGQuY2FsbCh0aGlzKSxuLnF1ZXVlJiZmdC5kZXF1ZXVlKHRoaXMsbi5xdWV1ZSl9LG59LGZ0LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiB0aGlzLmZpbHRlcihSdCkuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OmV9LHQsaSxuKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcz1mdC5pc0VtcHR5T2JqZWN0KHQpLG89ZnQuc3BlZWQoZSxpLG4pLGE9ZnVuY3Rpb24oKXt2YXIgZT1xKHRoaXMsZnQuZXh0ZW5kKHt9LHQpLG8pOyhzfHxBdC5nZXQodGhpcyxcImZpbmlzaFwiKSkmJmUuc3RvcCghMCl9O3JldHVybiBhLmZpbmlzaD1hLHN8fCExPT09by5xdWV1ZT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShvLnF1ZXVlLGEpfSxzdG9wOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1mdW5jdGlvbih0KXt2YXIgZT10LnN0b3A7ZGVsZXRlIHQuc3RvcCxlKGkpfTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdCYmKGk9ZSxlPXQsdD12b2lkIDApLGUmJiExIT09dCYmdGhpcy5xdWV1ZSh0fHxcImZ4XCIsW10pLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPSEwLHM9bnVsbCE9dCYmdCtcInF1ZXVlSG9va3NcIixvPWZ0LnRpbWVycyxhPUF0LmdldCh0aGlzKTtpZihzKWFbc10mJmFbc10uc3RvcCYmbihhW3NdKTtlbHNlIGZvcihzIGluIGEpYVtzXSYmYVtzXS5zdG9wJiZwZS50ZXN0KHMpJiZuKGFbc10pO2ZvcihzPW8ubGVuZ3RoO3MtLTspb1tzXS5lbGVtIT09dGhpc3x8bnVsbCE9dCYmb1tzXS5xdWV1ZSE9PXR8fChvW3NdLmFuaW0uc3RvcChpKSxlPSExLG8uc3BsaWNlKHMsMSkpOyFlJiZpfHxmdC5kZXF1ZXVlKHRoaXMsdCl9KX0sZmluaXNoOmZ1bmN0aW9uKHQpe3JldHVybiExIT09dCYmKHQ9dHx8XCJmeFwiKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSxpPUF0LmdldCh0aGlzKSxuPWlbdCtcInF1ZXVlXCJdLHM9aVt0K1wicXVldWVIb29rc1wiXSxvPWZ0LnRpbWVycyxhPW4/bi5sZW5ndGg6MDtmb3IoaS5maW5pc2g9ITAsZnQucXVldWUodGhpcyx0LFtdKSxzJiZzLnN0b3AmJnMuc3RvcC5jYWxsKHRoaXMsITApLGU9by5sZW5ndGg7ZS0tOylvW2VdLmVsZW09PT10aGlzJiZvW2VdLnF1ZXVlPT09dCYmKG9bZV0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8YTtlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIGkuZmluaXNofSl9fSksZnQuZWFjaChbXCJ0b2dnbGVcIixcInNob3dcIixcImhpZGVcIl0sZnVuY3Rpb24odCxlKXt2YXIgaT1mdC5mbltlXTtmdC5mbltlXT1mdW5jdGlvbih0LG4scyl7cmV0dXJuIG51bGw9PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdD9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoRihlLCEwKSx0LG4scyl9fSksZnQuZWFjaCh7c2xpZGVEb3duOkYoXCJzaG93XCIpLHNsaWRlVXA6RihcImhpZGVcIiksc2xpZGVUb2dnbGU6RihcInRvZ2dsZVwiKSxmYWRlSW46e29wYWNpdHk6XCJzaG93XCJ9LGZhZGVPdXQ6e29wYWNpdHk6XCJoaWRlXCJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6XCJ0b2dnbGVcIn19LGZ1bmN0aW9uKHQsZSl7ZnQuZm5bdF09ZnVuY3Rpb24odCxpLG4pe3JldHVybiB0aGlzLmFuaW1hdGUoZSx0LGksbil9fSksZnQudGltZXJzPVtdLGZ0LmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgdCxlPTAsaT1mdC50aW1lcnM7Zm9yKGNlPURhdGUubm93KCk7ZTxpLmxlbmd0aDtlKyspKHQ9aVtlXSkoKXx8aVtlXSE9PXR8fGkuc3BsaWNlKGUtLSwxKTtpLmxlbmd0aHx8ZnQuZnguc3RvcCgpLGNlPXZvaWQgMH0sZnQuZngudGltZXI9ZnVuY3Rpb24odCl7ZnQudGltZXJzLnB1c2godCksZnQuZnguc3RhcnQoKX0sZnQuZnguaW50ZXJ2YWw9MTMsZnQuZnguc3RhcnQ9ZnVuY3Rpb24oKXt1ZXx8KHVlPSEwLCQoKSl9LGZ0LmZ4LnN0b3A9ZnVuY3Rpb24oKXt1ZT1udWxsfSxmdC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sZnQuZm4uZGVsYXk9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gZT1mdC5meCYmZnQuZnguc3BlZWRzW2VdfHxlLGk9aXx8XCJmeFwiLHRoaXMucXVldWUoaSxmdW5jdGlvbihpLG4pe3ZhciBzPXQuc2V0VGltZW91dChpLGUpO24uc3RvcD1mdW5jdGlvbigpe3QuY2xlYXJUaW1lb3V0KHMpfX0pfSxmdW5jdGlvbigpe3ZhciB0PVouY3JlYXRlRWxlbWVudChcImlucHV0XCIpLGU9Wi5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpLmFwcGVuZENoaWxkKFouY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKSk7dC50eXBlPVwiY2hlY2tib3hcIixjdC5jaGVja09uPVwiXCIhPT10LnZhbHVlLGN0Lm9wdFNlbGVjdGVkPWUuc2VsZWN0ZWQsKHQ9Wi5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIikpLnZhbHVlPVwidFwiLHQudHlwZT1cInJhZGlvXCIsY3QucmFkaW9WYWx1ZT1cInRcIj09PXQudmFsdWV9KCk7dmFyIGZlLGdlPWZ0LmV4cHIuYXR0ckhhbmRsZTtmdC5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSXQodGhpcyxmdC5hdHRyLHQsZSxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmdC5yZW1vdmVBdHRyKHRoaXMsdCl9KX19KSxmdC5leHRlbmQoe2F0dHI6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLHMsbz10Lm5vZGVUeXBlO2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuIHZvaWQgMD09PXQuZ2V0QXR0cmlidXRlP2Z0LnByb3AodCxlLGkpOigxPT09byYmZnQuaXNYTUxEb2ModCl8fChzPWZ0LmF0dHJIb29rc1tlLnRvTG93ZXJDYXNlKCldfHwoZnQuZXhwci5tYXRjaC5ib29sLnRlc3QoZSk/ZmU6dm9pZCAwKSksdm9pZCAwIT09aT9udWxsPT09aT92b2lkIGZ0LnJlbW92ZUF0dHIodCxlKTpzJiZcInNldFwiaW4gcyYmdm9pZCAwIT09KG49cy5zZXQodCxpLGUpKT9uOih0LnNldEF0dHJpYnV0ZShlLGkrXCJcIiksaSk6cyYmXCJnZXRcImluIHMmJm51bGwhPT0obj1zLmdldCh0LGUpKT9uOm51bGw9PShuPWZ0LmZpbmQuYXR0cih0LGUpKT92b2lkIDA6bil9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKHQsZSl7aWYoIWN0LnJhZGlvVmFsdWUmJlwicmFkaW9cIj09PWUmJm8odCxcImlucHV0XCIpKXt2YXIgaT10LnZhbHVlO3JldHVybiB0LnNldEF0dHJpYnV0ZShcInR5cGVcIixlKSxpJiYodC52YWx1ZT1pKSxlfX19fSxyZW1vdmVBdHRyOmZ1bmN0aW9uKHQsZSl7dmFyIGksbj0wLHM9ZSYmZS5tYXRjaChUdCk7aWYocyYmMT09PXQubm9kZVR5cGUpZm9yKDtpPXNbbisrXTspdC5yZW1vdmVBdHRyaWJ1dGUoaSl9fSksZmU9e3NldDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuITE9PT1lP2Z0LnJlbW92ZUF0dHIodCxpKTp0LnNldEF0dHJpYnV0ZShpLGkpLGl9fSxmdC5lYWNoKGZ0LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1xcdysvZyksZnVuY3Rpb24odCxlKXt2YXIgaT1nZVtlXXx8ZnQuZmluZC5hdHRyO2dlW2VdPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcyxvLGE9ZS50b0xvd2VyQ2FzZSgpO3JldHVybiBufHwobz1nZVthXSxnZVthXT1zLHM9bnVsbCE9aSh0LGUsbik/YTpudWxsLGdlW2FdPW8pLHN9fSk7dmFyIG1lPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksdmU9L14oPzphfGFyZWEpJC9pO2Z0LmZuLmV4dGVuZCh7cHJvcDpmdW5jdGlvbih0LGUpe3JldHVybiBJdCh0aGlzLGZ0LnByb3AsdCxlLGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2Z0LnByb3BGaXhbdF18fHRdfSl9fSksZnQuZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG89dC5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiAxPT09byYmZnQuaXNYTUxEb2ModCl8fChlPWZ0LnByb3BGaXhbZV18fGUscz1mdC5wcm9wSG9va3NbZV0pLHZvaWQgMCE9PWk/cyYmXCJzZXRcImluIHMmJnZvaWQgMCE9PShuPXMuc2V0KHQsaSxlKSk/bjp0W2VdPWk6cyYmXCJnZXRcImluIHMmJm51bGwhPT0obj1zLmdldCh0LGUpKT9uOnRbZV19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbih0KXt2YXIgZT1mdC5maW5kLmF0dHIodCxcInRhYmluZGV4XCIpO3JldHVybiBlP3BhcnNlSW50KGUsMTApOm1lLnRlc3QodC5ub2RlTmFtZSl8fHZlLnRlc3QodC5ub2RlTmFtZSkmJnQuaHJlZj8wOi0xfX19LHByb3BGaXg6e2ZvcjpcImh0bWxGb3JcIixjbGFzczpcImNsYXNzTmFtZVwifX0pLGN0Lm9wdFNlbGVjdGVkfHwoZnQucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnROb2RlO3JldHVybiBlJiZlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LG51bGx9LHNldDpmdW5jdGlvbih0KXt2YXIgZT10LnBhcmVudE5vZGU7ZSYmKGUuc2VsZWN0ZWRJbmRleCxlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4KX19KSxmdC5lYWNoKFtcInRhYkluZGV4XCIsXCJyZWFkT25seVwiLFwibWF4TGVuZ3RoXCIsXCJjZWxsU3BhY2luZ1wiLFwiY2VsbFBhZGRpbmdcIixcInJvd1NwYW5cIixcImNvbFNwYW5cIixcInVzZU1hcFwiLFwiZnJhbWVCb3JkZXJcIixcImNvbnRlbnRFZGl0YWJsZVwiXSxmdW5jdGlvbigpe2Z0LnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksZnQuZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxpLG4scyxvLGEscixsPTA7aWYodXQodCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihlKXtmdCh0aGlzKS5hZGRDbGFzcyh0LmNhbGwodGhpcyxlLFkodGhpcykpKX0pO2lmKChlPVYodCkpLmxlbmd0aClmb3IoO2k9dGhpc1tsKytdOylpZihzPVkoaSksbj0xPT09aS5ub2RlVHlwZSYmXCIgXCIrVShzKStcIiBcIil7Zm9yKGE9MDtvPWVbYSsrXTspbi5pbmRleE9mKFwiIFwiK28rXCIgXCIpPDAmJihuKz1vK1wiIFwiKTtzIT09KHI9VShuKSkmJmkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixyKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbyxhLHIsbD0wO2lmKHV0KHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7ZnQodGhpcykucmVtb3ZlQ2xhc3ModC5jYWxsKHRoaXMsZSxZKHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKFwiY2xhc3NcIixcIlwiKTtpZigoZT1WKHQpKS5sZW5ndGgpZm9yKDtpPXRoaXNbbCsrXTspaWYocz1ZKGkpLG49MT09PWkubm9kZVR5cGUmJlwiIFwiK1UocykrXCIgXCIpe2ZvcihhPTA7bz1lW2ErK107KWZvcig7bi5pbmRleE9mKFwiIFwiK28rXCIgXCIpPi0xOyluPW4ucmVwbGFjZShcIiBcIitvK1wiIFwiLFwiIFwiKTtzIT09KHI9VShuKSkmJmkuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixyKX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24odCxlKXt2YXIgaT10eXBlb2YgdCxuPVwic3RyaW5nXCI9PT1pfHxBcnJheS5pc0FycmF5KHQpO3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgZSYmbj9lP3RoaXMuYWRkQ2xhc3ModCk6dGhpcy5yZW1vdmVDbGFzcyh0KTp1dCh0KT90aGlzLmVhY2goZnVuY3Rpb24oaSl7ZnQodGhpcykudG9nZ2xlQ2xhc3ModC5jYWxsKHRoaXMsaSxZKHRoaXMpLGUpLGUpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUscyxvLGE7aWYobilmb3Iocz0wLG89ZnQodGhpcyksYT1WKHQpO2U9YVtzKytdOylvLmhhc0NsYXNzKGUpP28ucmVtb3ZlQ2xhc3MoZSk6by5hZGRDbGFzcyhlKTtlbHNlIHZvaWQgMCE9PXQmJlwiYm9vbGVhblwiIT09aXx8KChlPVkodGhpcykpJiZBdC5zZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLGV8fCExPT09dD9cIlwiOkF0LmdldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiKXx8XCJcIikpfSl9LGhhc0NsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj0wO2ZvcihlPVwiIFwiK3QrXCIgXCI7aT10aGlzW24rK107KWlmKDE9PT1pLm5vZGVUeXBlJiYoXCIgXCIrVShZKGkpKStcIiBcIikuaW5kZXhPZihlKT4tMSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgYmU9L1xcci9nO2Z0LmZuLmV4dGVuZCh7dmFsOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzPXRoaXNbMF07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dXQodCksdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBzOzE9PT10aGlzLm5vZGVUeXBlJiYobnVsbD09KHM9bj90LmNhbGwodGhpcyxpLGZ0KHRoaXMpLnZhbCgpKTp0KT9zPVwiXCI6XCJudW1iZXJcIj09dHlwZW9mIHM/cys9XCJcIjpBcnJheS5pc0FycmF5KHMpJiYocz1mdC5tYXAocyxmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9cIlwiOnQrXCJcIn0pKSwoZT1mdC52YWxIb29rc1t0aGlzLnR5cGVdfHxmdC52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJzZXRcImluIGUmJnZvaWQgMCE9PWUuc2V0KHRoaXMscyxcInZhbHVlXCIpfHwodGhpcy52YWx1ZT1zKSl9KSk6cz8oZT1mdC52YWxIb29rc1tzLnR5cGVdfHxmdC52YWxIb29rc1tzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKSYmXCJnZXRcImluIGUmJnZvaWQgMCE9PShpPWUuZ2V0KHMsXCJ2YWx1ZVwiKSk/aTpcInN0cmluZ1wiPT10eXBlb2YoaT1zLnZhbHVlKT9pLnJlcGxhY2UoYmUsXCJcIik6bnVsbD09aT9cIlwiOmk6dm9pZCAwfX0pLGZ0LmV4dGVuZCh7dmFsSG9va3M6e29wdGlvbjp7Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPWZ0LmZpbmQuYXR0cih0LFwidmFsdWVcIik7cmV0dXJuIG51bGwhPWU/ZTpVKGZ0LnRleHQodCkpfX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHM9dC5vcHRpb25zLGE9dC5zZWxlY3RlZEluZGV4LHI9XCJzZWxlY3Qtb25lXCI9PT10LnR5cGUsbD1yP251bGw6W10saD1yP2ErMTpzLmxlbmd0aDtmb3Iobj1hPDA/aDpyP2E6MDtuPGg7bisrKWlmKCgoaT1zW25dKS5zZWxlY3RlZHx8bj09PWEpJiYhaS5kaXNhYmxlZCYmKCFpLnBhcmVudE5vZGUuZGlzYWJsZWR8fCFvKGkucGFyZW50Tm9kZSxcIm9wdGdyb3VwXCIpKSl7aWYoZT1mdChpKS52YWwoKSxyKXJldHVybiBlO2wucHVzaChlKX1yZXR1cm4gbH0sc2V0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLG4scz10Lm9wdGlvbnMsbz1mdC5tYWtlQXJyYXkoZSksYT1zLmxlbmd0aDthLS07KSgobj1zW2FdKS5zZWxlY3RlZD1mdC5pbkFycmF5KGZ0LnZhbEhvb2tzLm9wdGlvbi5nZXQobiksbyk+LTEpJiYoaT0hMCk7cmV0dXJuIGl8fCh0LnNlbGVjdGVkSW5kZXg9LTEpLG99fX19KSxmdC5lYWNoKFtcInJhZGlvXCIsXCJjaGVja2JveFwiXSxmdW5jdGlvbigpe2Z0LnZhbEhvb2tzW3RoaXNdPXtzZXQ6ZnVuY3Rpb24odCxlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiB0LmNoZWNrZWQ9ZnQuaW5BcnJheShmdCh0KS52YWwoKSxlKT4tMX19LGN0LmNoZWNrT258fChmdC52YWxIb29rc1t0aGlzXS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PT10LmdldEF0dHJpYnV0ZShcInZhbHVlXCIpP1wib25cIjp0LnZhbHVlfSl9KSxjdC5mb2N1c2luPVwib25mb2N1c2luXCJpbiB0O3ZhciBfZT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8seWU9ZnVuY3Rpb24odCl7dC5zdG9wUHJvcGFnYXRpb24oKX07ZnQuZXh0ZW5kKGZ0LmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKGUsaSxuLHMpe3ZhciBvLGEscixsLGgsYyx1LGQscD1bbnx8Wl0sZj1ydC5jYWxsKGUsXCJ0eXBlXCIpP2UudHlwZTplLGc9cnQuY2FsbChlLFwibmFtZXNwYWNlXCIpP2UubmFtZXNwYWNlLnNwbGl0KFwiLlwiKTpbXTtpZihhPWQ9cj1uPW58fFosMyE9PW4ubm9kZVR5cGUmJjghPT1uLm5vZGVUeXBlJiYhX2UudGVzdChmK2Z0LmV2ZW50LnRyaWdnZXJlZCkmJihmLmluZGV4T2YoXCIuXCIpPi0xJiYoZz1mLnNwbGl0KFwiLlwiKSxmPWcuc2hpZnQoKSxnLnNvcnQoKSksaD1mLmluZGV4T2YoXCI6XCIpPDAmJlwib25cIitmLChlPWVbZnQuZXhwYW5kb10/ZTpuZXcgZnQuRXZlbnQoZixcIm9iamVjdFwiPT10eXBlb2YgZSYmZSkpLmlzVHJpZ2dlcj1zPzI6MyxlLm5hbWVzcGFjZT1nLmpvaW4oXCIuXCIpLGUucm5hbWVzcGFjZT1lLm5hbWVzcGFjZT9uZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrZy5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSxpPW51bGw9PWk/W2VdOmZ0Lm1ha2VBcnJheShpLFtlXSksdT1mdC5ldmVudC5zcGVjaWFsW2ZdfHx7fSxzfHwhdS50cmlnZ2VyfHwhMSE9PXUudHJpZ2dlci5hcHBseShuLGkpKSl7aWYoIXMmJiF1Lm5vQnViYmxlJiYhZHQobikpe2ZvcihsPXUuZGVsZWdhdGVUeXBlfHxmLF9lLnRlc3QobCtmKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKXAucHVzaChhKSxyPWE7cj09PShuLm93bmVyRG9jdW1lbnR8fFopJiZwLnB1c2goci5kZWZhdWx0Vmlld3x8ci5wYXJlbnRXaW5kb3d8fHQpfWZvcihvPTA7KGE9cFtvKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspZD1hLGUudHlwZT1vPjE/bDp1LmJpbmRUeXBlfHxmLChjPShBdC5nZXQoYSxcImV2ZW50c1wiKXx8e30pW2UudHlwZV0mJkF0LmdldChhLFwiaGFuZGxlXCIpKSYmYy5hcHBseShhLGkpLChjPWgmJmFbaF0pJiZjLmFwcGx5JiZNdChhKSYmKGUucmVzdWx0PWMuYXBwbHkoYSxpKSwhMT09PWUucmVzdWx0JiZlLnByZXZlbnREZWZhdWx0KCkpO3JldHVybiBlLnR5cGU9ZixzfHxlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHx1Ll9kZWZhdWx0JiYhMSE9PXUuX2RlZmF1bHQuYXBwbHkocC5wb3AoKSxpKXx8IU10KG4pfHxoJiZ1dChuW2ZdKSYmIWR0KG4pJiYoKHI9bltoXSkmJihuW2hdPW51bGwpLGZ0LmV2ZW50LnRyaWdnZXJlZD1mLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmZC5hZGRFdmVudExpc3RlbmVyKGYseWUpLG5bZl0oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmQucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLHllKSxmdC5ldmVudC50cmlnZ2VyZWQ9dm9pZCAwLHImJihuW2hdPXIpKSxlLnJlc3VsdH19LHNpbXVsYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1mdC5leHRlbmQobmV3IGZ0LkV2ZW50LGkse3R5cGU6dCxpc1NpbXVsYXRlZDohMH0pO2Z0LmV2ZW50LnRyaWdnZXIobixudWxsLGUpfX0pLGZ0LmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmdC5ldmVudC50cmlnZ2VyKHQsZSx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXNbMF07aWYoaSlyZXR1cm4gZnQuZXZlbnQudHJpZ2dlcih0LGUsaSwhMCl9fSksY3QuZm9jdXNpbnx8ZnQuZWFjaCh7Zm9jdXM6XCJmb2N1c2luXCIsYmx1cjpcImZvY3Vzb3V0XCJ9LGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZnVuY3Rpb24odCl7ZnQuZXZlbnQuc2ltdWxhdGUoZSx0LnRhcmdldCxmdC5ldmVudC5maXgodCkpfTtmdC5ldmVudC5zcGVjaWFsW2VdPXtzZXR1cDpmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxzPUF0LmFjY2VzcyhuLGUpO3N8fG4uYWRkRXZlbnRMaXN0ZW5lcih0LGksITApLEF0LmFjY2VzcyhuLGUsKHN8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBuPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcyxzPUF0LmFjY2VzcyhuLGUpLTE7cz9BdC5hY2Nlc3MobixlLHMpOihuLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxpLCEwKSxBdC5yZW1vdmUobixlKSl9fX0pO3ZhciB3ZT10LmxvY2F0aW9uLHhlPURhdGUubm93KCksQ2U9L1xcPy87ZnQucGFyc2VYTUw9ZnVuY3Rpb24oZSl7dmFyIGk7aWYoIWV8fFwic3RyaW5nXCIhPXR5cGVvZiBlKXJldHVybiBudWxsO3RyeXtpPShuZXcgdC5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhlLFwidGV4dC94bWxcIil9Y2F0Y2godCl7aT12b2lkIDB9cmV0dXJuIGkmJiFpLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwicGFyc2VyZXJyb3JcIikubGVuZ3RofHxmdC5lcnJvcihcIkludmFsaWQgWE1MOiBcIitlKSxpfTt2YXIga2U9L1xcW1xcXSQvLFRlPS9cXHI/XFxuL2csRGU9L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFNlPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtmdC5wYXJhbT1mdW5jdGlvbih0LGUpe3ZhciBpLG49W10scz1mdW5jdGlvbih0LGUpe3ZhciBpPXV0KGUpP2UoKTplO25bbi5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudCh0KStcIj1cIitlbmNvZGVVUklDb21wb25lbnQobnVsbD09aT9cIlwiOmkpfTtpZihBcnJheS5pc0FycmF5KHQpfHx0LmpxdWVyeSYmIWZ0LmlzUGxhaW5PYmplY3QodCkpZnQuZWFjaCh0LGZ1bmN0aW9uKCl7cyh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihpIGluIHQpSyhpLHRbaV0sZSxzKTtyZXR1cm4gbi5qb2luKFwiJlwiKX0sZnQuZm4uZXh0ZW5kKHtzZXJpYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gZnQucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgdD1mdC5wcm9wKHRoaXMsXCJlbGVtZW50c1wiKTtyZXR1cm4gdD9mdC5tYWtlQXJyYXkodCk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3ZhciB0PXRoaXMudHlwZTtyZXR1cm4gdGhpcy5uYW1lJiYhZnQodGhpcykuaXMoXCI6ZGlzYWJsZWRcIikmJlNlLnRlc3QodGhpcy5ub2RlTmFtZSkmJiFEZS50ZXN0KHQpJiYodGhpcy5jaGVja2VkfHwhRnQudGVzdCh0KSl9KS5tYXAoZnVuY3Rpb24odCxlKXt2YXIgaT1mdCh0aGlzKS52YWwoKTtyZXR1cm4gbnVsbD09aT9udWxsOkFycmF5LmlzQXJyYXkoaSk/ZnQubWFwKGksZnVuY3Rpb24odCl7cmV0dXJue25hbWU6ZS5uYW1lLHZhbHVlOnQucmVwbGFjZShUZSxcIlxcclxcblwiKX19KTp7bmFtZTplLm5hbWUsdmFsdWU6aS5yZXBsYWNlKFRlLFwiXFxyXFxuXCIpfX0pLmdldCgpfX0pO3ZhciBJZT0vJTIwL2csUGU9LyMuKiQvLEVlPS8oWz8mXSlfPVteJl0qLyxNZT0vXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL2dtLEFlPS9eKD86R0VUfEhFQUQpJC8sT2U9L15cXC9cXC8vLE5lPXt9LEhlPXt9LHplPVwiKi9cIi5jb25jYXQoXCIqXCIpLExlPVouY3JlYXRlRWxlbWVudChcImFcIik7TGUuaHJlZj13ZS5ocmVmLGZ0LmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6d2UuaHJlZix0eXBlOlwiR0VUXCIsaXNMb2NhbDovXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLy50ZXN0KHdlLnByb3RvY29sKSxnbG9iYWw6ITAscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsY29udGVudFR5cGU6XCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixhY2NlcHRzOntcIipcIjp6ZSx0ZXh0OlwidGV4dC9wbGFpblwiLGh0bWw6XCJ0ZXh0L2h0bWxcIix4bWw6XCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsanNvbjpcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwifSxjb250ZW50czp7eG1sOi9cXGJ4bWxcXGIvLGh0bWw6L1xcYmh0bWwvLGpzb246L1xcYmpzb25cXGIvfSxyZXNwb25zZUZpZWxkczp7eG1sOlwicmVzcG9uc2VYTUxcIix0ZXh0OlwicmVzcG9uc2VUZXh0XCIsanNvbjpcInJlc3BvbnNlSlNPTlwifSxjb252ZXJ0ZXJzOntcIiogdGV4dFwiOlN0cmluZyxcInRleHQgaHRtbFwiOiEwLFwidGV4dCBqc29uXCI6SlNPTi5wYXJzZSxcInRleHQgeG1sXCI6ZnQucGFyc2VYTUx9LGZsYXRPcHRpb25zOnt1cmw6ITAsY29udGV4dDohMH19LGFqYXhTZXR1cDpmdW5jdGlvbih0LGUpe3JldHVybiBlP1EoUSh0LGZ0LmFqYXhTZXR0aW5ncyksZSk6UShmdC5hamF4U2V0dGluZ3MsdCl9LGFqYXhQcmVmaWx0ZXI6WChOZSksYWpheFRyYW5zcG9ydDpYKEhlKSxhamF4OmZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gbihlLGksbixyKXt2YXIgaCxkLHAseSx3LHg9aTtjfHwoYz0hMCxsJiZ0LmNsZWFyVGltZW91dChsKSxzPXZvaWQgMCxhPXJ8fFwiXCIsQy5yZWFkeVN0YXRlPWU+MD80OjAsaD1lPj0yMDAmJmU8MzAwfHwzMDQ9PT1lLG4mJih5PWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG4scyxvLGEscj10LmNvbnRlbnRzLGw9dC5kYXRhVHlwZXM7XCIqXCI9PT1sWzBdOylsLnNoaWZ0KCksdm9pZCAwPT09biYmKG49dC5taW1lVHlwZXx8ZS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKSk7aWYobilmb3IocyBpbiByKWlmKHJbc10mJnJbc10udGVzdChuKSl7bC51bnNoaWZ0KHMpO2JyZWFrfWlmKGxbMF1pbiBpKW89bFswXTtlbHNle2ZvcihzIGluIGkpe2lmKCFsWzBdfHx0LmNvbnZlcnRlcnNbcytcIiBcIitsWzBdXSl7bz1zO2JyZWFrfWF8fChhPXMpfW89b3x8YX1pZihvKXJldHVybiBvIT09bFswXSYmbC51bnNoaWZ0KG8pLGlbb119KGYsQyxuKSkseT1mdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxvLGEscixsLGg9e30sYz10LmRhdGFUeXBlcy5zbGljZSgpO2lmKGNbMV0pZm9yKGEgaW4gdC5jb252ZXJ0ZXJzKWhbYS50b0xvd2VyQ2FzZSgpXT10LmNvbnZlcnRlcnNbYV07Zm9yKG89Yy5zaGlmdCgpO287KWlmKHQucmVzcG9uc2VGaWVsZHNbb10mJihpW3QucmVzcG9uc2VGaWVsZHNbb11dPWUpLCFsJiZuJiZ0LmRhdGFGaWx0ZXImJihlPXQuZGF0YUZpbHRlcihlLHQuZGF0YVR5cGUpKSxsPW8sbz1jLnNoaWZ0KCkpaWYoXCIqXCI9PT1vKW89bDtlbHNlIGlmKFwiKlwiIT09bCYmbCE9PW8pe2lmKCEoYT1oW2wrXCIgXCIrb118fGhbXCIqIFwiK29dKSlmb3IocyBpbiBoKWlmKChyPXMuc3BsaXQoXCIgXCIpKVsxXT09PW8mJihhPWhbbCtcIiBcIityWzBdXXx8aFtcIiogXCIrclswXV0pKXshMD09PWE/YT1oW3NdOiEwIT09aFtzXSYmKG89clswXSxjLnVuc2hpZnQoclsxXSkpO2JyZWFrfWlmKCEwIT09YSlpZihhJiZ0LnRocm93cyllPWEoZSk7ZWxzZSB0cnl7ZT1hKGUpfWNhdGNoKHQpe3JldHVybntzdGF0ZTpcInBhcnNlcmVycm9yXCIsZXJyb3I6YT90OlwiTm8gY29udmVyc2lvbiBmcm9tIFwiK2wrXCIgdG8gXCIrb319fXJldHVybntzdGF0ZTpcInN1Y2Nlc3NcIixkYXRhOmV9fShmLHksQyxoKSxoPyhmLmlmTW9kaWZpZWQmJigodz1DLmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKSkmJihmdC5sYXN0TW9kaWZpZWRbb109dyksKHc9Qy5nZXRSZXNwb25zZUhlYWRlcihcImV0YWdcIikpJiYoZnQuZXRhZ1tvXT13KSksMjA0PT09ZXx8XCJIRUFEXCI9PT1mLnR5cGU/eD1cIm5vY29udGVudFwiOjMwND09PWU/eD1cIm5vdG1vZGlmaWVkXCI6KHg9eS5zdGF0ZSxkPXkuZGF0YSxoPSEocD15LmVycm9yKSkpOihwPXgsIWUmJnh8fCh4PVwiZXJyb3JcIixlPDAmJihlPTApKSksQy5zdGF0dXM9ZSxDLnN0YXR1c1RleHQ9KGl8fHgpK1wiXCIsaD92LnJlc29sdmVXaXRoKGcsW2QseCxDXSk6di5yZWplY3RXaXRoKGcsW0MseCxwXSksQy5zdGF0dXNDb2RlKF8pLF89dm9pZCAwLHUmJm0udHJpZ2dlcihoP1wiYWpheFN1Y2Nlc3NcIjpcImFqYXhFcnJvclwiLFtDLGYsaD9kOnBdKSxiLmZpcmVXaXRoKGcsW0MseF0pLHUmJihtLnRyaWdnZXIoXCJhamF4Q29tcGxldGVcIixbQyxmXSksLS1mdC5hY3RpdmV8fGZ0LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RvcFwiKSkpfVwib2JqZWN0XCI9PXR5cGVvZiBlJiYoaT1lLGU9dm9pZCAwKSxpPWl8fHt9O3ZhciBzLG8sYSxyLGwsaCxjLHUsZCxwLGY9ZnQuYWpheFNldHVwKHt9LGkpLGc9Zi5jb250ZXh0fHxmLG09Zi5jb250ZXh0JiYoZy5ub2RlVHlwZXx8Zy5qcXVlcnkpP2Z0KGcpOmZ0LmV2ZW50LHY9ZnQuRGVmZXJyZWQoKSxiPWZ0LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLF89Zi5zdGF0dXNDb2RlfHx7fSx5PXt9LHc9e30seD1cImNhbmNlbGVkXCIsQz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKGMpe2lmKCFyKWZvcihyPXt9O2U9TWUuZXhlYyhhKTspcltlWzFdLnRvTG93ZXJDYXNlKCldPWVbMl07ZT1yW3QudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PWU/bnVsbDplfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9hOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09YyYmKHQ9d1t0LnRvTG93ZXJDYXNlKCldPXdbdC50b0xvd2VyQ2FzZSgpXXx8dCx5W3RdPWUpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PWMmJihmLm1pbWVUeXBlPXQpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24odCl7dmFyIGU7aWYodClpZihjKUMuYWx3YXlzKHRbQy5zdGF0dXNdKTtlbHNlIGZvcihlIGluIHQpX1tlXT1bX1tlXSx0W2VdXTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24odCl7dmFyIGU9dHx8eDtyZXR1cm4gcyYmcy5hYm9ydChlKSxuKDAsZSksdGhpc319O2lmKHYucHJvbWlzZShDKSxmLnVybD0oKGV8fGYudXJsfHx3ZS5ocmVmKStcIlwiKS5yZXBsYWNlKE9lLHdlLnByb3RvY29sK1wiLy9cIiksZi50eXBlPWkubWV0aG9kfHxpLnR5cGV8fGYubWV0aG9kfHxmLnR5cGUsZi5kYXRhVHlwZXM9KGYuZGF0YVR5cGV8fFwiKlwiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFR0KXx8W1wiXCJdLG51bGw9PWYuY3Jvc3NEb21haW4pe2g9Wi5jcmVhdGVFbGVtZW50KFwiYVwiKTt0cnl7aC5ocmVmPWYudXJsLGguaHJlZj1oLmhyZWYsZi5jcm9zc0RvbWFpbj1MZS5wcm90b2NvbCtcIi8vXCIrTGUuaG9zdCE9aC5wcm90b2NvbCtcIi8vXCIraC5ob3N0fWNhdGNoKHQpe2YuY3Jvc3NEb21haW49ITB9fWlmKGYuZGF0YSYmZi5wcm9jZXNzRGF0YSYmXCJzdHJpbmdcIiE9dHlwZW9mIGYuZGF0YSYmKGYuZGF0YT1mdC5wYXJhbShmLmRhdGEsZi50cmFkaXRpb25hbCkpLEcoTmUsZixpLEMpLGMpcmV0dXJuIEM7Zm9yKGQgaW4odT1mdC5ldmVudCYmZi5nbG9iYWwpJiYwPT1mdC5hY3RpdmUrKyYmZnQuZXZlbnQudHJpZ2dlcihcImFqYXhTdGFydFwiKSxmLnR5cGU9Zi50eXBlLnRvVXBwZXJDYXNlKCksZi5oYXNDb250ZW50PSFBZS50ZXN0KGYudHlwZSksbz1mLnVybC5yZXBsYWNlKFBlLFwiXCIpLGYuaGFzQ29udGVudD9mLmRhdGEmJmYucHJvY2Vzc0RhdGEmJjA9PT0oZi5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmKGYuZGF0YT1mLmRhdGEucmVwbGFjZShJZSxcIitcIikpOihwPWYudXJsLnNsaWNlKG8ubGVuZ3RoKSxmLmRhdGEmJihmLnByb2Nlc3NEYXRhfHxcInN0cmluZ1wiPT10eXBlb2YgZi5kYXRhKSYmKG8rPShDZS50ZXN0KG8pP1wiJlwiOlwiP1wiKStmLmRhdGEsZGVsZXRlIGYuZGF0YSksITE9PT1mLmNhY2hlJiYobz1vLnJlcGxhY2UoRWUsXCIkMVwiKSxwPShDZS50ZXN0KG8pP1wiJlwiOlwiP1wiKStcIl89XCIreGUrKytwKSxmLnVybD1vK3ApLGYuaWZNb2RpZmllZCYmKGZ0Lmxhc3RNb2RpZmllZFtvXSYmQy5zZXRSZXF1ZXN0SGVhZGVyKFwiSWYtTW9kaWZpZWQtU2luY2VcIixmdC5sYXN0TW9kaWZpZWRbb10pLGZ0LmV0YWdbb10mJkMuc2V0UmVxdWVzdEhlYWRlcihcIklmLU5vbmUtTWF0Y2hcIixmdC5ldGFnW29dKSksKGYuZGF0YSYmZi5oYXNDb250ZW50JiYhMSE9PWYuY29udGVudFR5cGV8fGkuY29udGVudFR5cGUpJiZDLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIixmLmNvbnRlbnRUeXBlKSxDLnNldFJlcXVlc3RIZWFkZXIoXCJBY2NlcHRcIixmLmRhdGFUeXBlc1swXSYmZi5hY2NlcHRzW2YuZGF0YVR5cGVzWzBdXT9mLmFjY2VwdHNbZi5kYXRhVHlwZXNbMF1dKyhcIipcIiE9PWYuZGF0YVR5cGVzWzBdP1wiLCBcIit6ZStcIjsgcT0wLjAxXCI6XCJcIik6Zi5hY2NlcHRzW1wiKlwiXSksZi5oZWFkZXJzKUMuc2V0UmVxdWVzdEhlYWRlcihkLGYuaGVhZGVyc1tkXSk7aWYoZi5iZWZvcmVTZW5kJiYoITE9PT1mLmJlZm9yZVNlbmQuY2FsbChnLEMsZil8fGMpKXJldHVybiBDLmFib3J0KCk7aWYoeD1cImFib3J0XCIsYi5hZGQoZi5jb21wbGV0ZSksQy5kb25lKGYuc3VjY2VzcyksQy5mYWlsKGYuZXJyb3IpLHM9RyhIZSxmLGksQykpe2lmKEMucmVhZHlTdGF0ZT0xLHUmJm0udHJpZ2dlcihcImFqYXhTZW5kXCIsW0MsZl0pLGMpcmV0dXJuIEM7Zi5hc3luYyYmZi50aW1lb3V0PjAmJihsPXQuc2V0VGltZW91dChmdW5jdGlvbigpe0MuYWJvcnQoXCJ0aW1lb3V0XCIpfSxmLnRpbWVvdXQpKTt0cnl7Yz0hMSxzLnNlbmQoeSxuKX1jYXRjaCh0KXtpZihjKXRocm93IHQ7bigtMSx0KX19ZWxzZSBuKC0xLFwiTm8gVHJhbnNwb3J0XCIpO3JldHVybiBDfSxnZXRKU09OOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gZnQuZ2V0KHQsZSxpLFwianNvblwiKX0sZ2V0U2NyaXB0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ0LmdldCh0LHZvaWQgMCxlLFwic2NyaXB0XCIpfX0pLGZ0LmVhY2goW1wiZ2V0XCIsXCJwb3N0XCJdLGZ1bmN0aW9uKHQsZSl7ZnRbZV09ZnVuY3Rpb24odCxpLG4scyl7cmV0dXJuIHV0KGkpJiYocz1zfHxuLG49aSxpPXZvaWQgMCksZnQuYWpheChmdC5leHRlbmQoe3VybDp0LHR5cGU6ZSxkYXRhVHlwZTpzLGRhdGE6aSxzdWNjZXNzOm59LGZ0LmlzUGxhaW5PYmplY3QodCkmJnQpKX19KSxmdC5fZXZhbFVybD1mdW5jdGlvbih0KXtyZXR1cm4gZnQuYWpheCh7dXJsOnQsdHlwZTpcIkdFVFwiLGRhdGFUeXBlOlwic2NyaXB0XCIsY2FjaGU6ITAsYXN5bmM6ITEsZ2xvYmFsOiExLHRocm93czohMH0pfSxmdC5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIHRoaXNbMF0mJih1dCh0KSYmKHQ9dC5jYWxsKHRoaXNbMF0pKSxlPWZ0KHQsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCksdGhpc1swXS5wYXJlbnROb2RlJiZlLmluc2VydEJlZm9yZSh0aGlzWzBdKSxlLm1hcChmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzO3QuZmlyc3RFbGVtZW50Q2hpbGQ7KXQ9dC5maXJzdEVsZW1lbnRDaGlsZDtyZXR1cm4gdH0pLmFwcGVuZCh0aGlzKSksdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKHQpe3JldHVybiB1dCh0KT90aGlzLmVhY2goZnVuY3Rpb24oZSl7ZnQodGhpcykud3JhcElubmVyKHQuY2FsbCh0aGlzLGUpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPWZ0KHRoaXMpLGk9ZS5jb250ZW50cygpO2kubGVuZ3RoP2kud3JhcEFsbCh0KTplLmFwcGVuZCh0KX0pfSx3cmFwOmZ1bmN0aW9uKHQpe3ZhciBlPXV0KHQpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSl7ZnQodGhpcykud3JhcEFsbChlP3QuY2FsbCh0aGlzLGkpOnQpfSl9LHVud3JhcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wYXJlbnQodCkubm90KFwiYm9keVwiKS5lYWNoKGZ1bmN0aW9uKCl7ZnQodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLHRoaXN9fSksZnQuZXhwci5wc2V1ZG9zLmhpZGRlbj1mdW5jdGlvbih0KXtyZXR1cm4hZnQuZXhwci5wc2V1ZG9zLnZpc2libGUodCl9LGZ0LmV4cHIucHNldWRvcy52aXNpYmxlPWZ1bmN0aW9uKHQpe3JldHVybiEhKHQub2Zmc2V0V2lkdGh8fHQub2Zmc2V0SGVpZ2h0fHx0LmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0sZnQuYWpheFNldHRpbmdzLnhocj1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbmV3IHQuWE1MSHR0cFJlcXVlc3R9Y2F0Y2godCl7fX07dmFyIFdlPXswOjIwMCwxMjIzOjIwNH0sUmU9ZnQuYWpheFNldHRpbmdzLnhocigpO2N0LmNvcnM9ISFSZSYmXCJ3aXRoQ3JlZGVudGlhbHNcImluIFJlLGN0LmFqYXg9UmU9ISFSZSxmdC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKGUpe3ZhciBpLG47aWYoY3QuY29yc3x8UmUmJiFlLmNyb3NzRG9tYWluKXJldHVybntzZW5kOmZ1bmN0aW9uKHMsbyl7dmFyIGEscj1lLnhocigpO2lmKHIub3BlbihlLnR5cGUsZS51cmwsZS5hc3luYyxlLnVzZXJuYW1lLGUucGFzc3dvcmQpLGUueGhyRmllbGRzKWZvcihhIGluIGUueGhyRmllbGRzKXJbYV09ZS54aHJGaWVsZHNbYV07Zm9yKGEgaW4gZS5taW1lVHlwZSYmci5vdmVycmlkZU1pbWVUeXBlJiZyLm92ZXJyaWRlTWltZVR5cGUoZS5taW1lVHlwZSksZS5jcm9zc0RvbWFpbnx8c1tcIlgtUmVxdWVzdGVkLVdpdGhcIl18fChzW1wiWC1SZXF1ZXN0ZWQtV2l0aFwiXT1cIlhNTEh0dHBSZXF1ZXN0XCIpLHMpci5zZXRSZXF1ZXN0SGVhZGVyKGEsc1thXSk7aT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtpJiYoaT1uPXIub25sb2FkPXIub25lcnJvcj1yLm9uYWJvcnQ9ci5vbnRpbWVvdXQ9ci5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxcImFib3J0XCI9PT10P3IuYWJvcnQoKTpcImVycm9yXCI9PT10P1wibnVtYmVyXCIhPXR5cGVvZiByLnN0YXR1cz9vKDAsXCJlcnJvclwiKTpvKHIuc3RhdHVzLHIuc3RhdHVzVGV4dCk6byhXZVtyLnN0YXR1c118fHIuc3RhdHVzLHIuc3RhdHVzVGV4dCxcInRleHRcIiE9PShyLnJlc3BvbnNlVHlwZXx8XCJ0ZXh0XCIpfHxcInN0cmluZ1wiIT10eXBlb2Ygci5yZXNwb25zZVRleHQ/e2JpbmFyeTpyLnJlc3BvbnNlfTp7dGV4dDpyLnJlc3BvbnNlVGV4dH0sci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpfX0sci5vbmxvYWQ9aSgpLG49ci5vbmVycm9yPXIub250aW1lb3V0PWkoXCJlcnJvclwiKSx2b2lkIDAhPT1yLm9uYWJvcnQ/ci5vbmFib3J0PW46ci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT09ci5yZWFkeVN0YXRlJiZ0LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtpJiZuKCl9KX0saT1pKFwiYWJvcnRcIik7dHJ5e3Iuc2VuZChlLmhhc0NvbnRlbnQmJmUuZGF0YXx8bnVsbCl9Y2F0Y2godCl7aWYoaSl0aHJvdyB0fX0sYWJvcnQ6ZnVuY3Rpb24oKXtpJiZpKCl9fX0pLGZ0LmFqYXhQcmVmaWx0ZXIoZnVuY3Rpb24odCl7dC5jcm9zc0RvbWFpbiYmKHQuY29udGVudHMuc2NyaXB0PSExKX0pLGZ0LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OlwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIn0sY29udGVudHM6e3NjcmlwdDovXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi99LGNvbnZlcnRlcnM6e1widGV4dCBzY3JpcHRcIjpmdW5jdGlvbih0KXtyZXR1cm4gZnQuZ2xvYmFsRXZhbCh0KSx0fX19KSxmdC5hamF4UHJlZmlsdGVyKFwic2NyaXB0XCIsZnVuY3Rpb24odCl7dm9pZCAwPT09dC5jYWNoZSYmKHQuY2FjaGU9ITEpLHQuY3Jvc3NEb21haW4mJih0LnR5cGU9XCJHRVRcIil9KSxmdC5hamF4VHJhbnNwb3J0KFwic2NyaXB0XCIsZnVuY3Rpb24odCl7dmFyIGUsaTtpZih0LmNyb3NzRG9tYWluKXJldHVybntzZW5kOmZ1bmN0aW9uKG4scyl7ZT1mdChcIjxzY3JpcHQ+XCIpLnByb3Aoe2NoYXJzZXQ6dC5zY3JpcHRDaGFyc2V0LHNyYzp0LnVybH0pLm9uKFwibG9hZCBlcnJvclwiLGk9ZnVuY3Rpb24odCl7ZS5yZW1vdmUoKSxpPW51bGwsdCYmcyhcImVycm9yXCI9PT10LnR5cGU/NDA0OjIwMCx0LnR5cGUpfSksWi5oZWFkLmFwcGVuZENoaWxkKGVbMF0pfSxhYm9ydDpmdW5jdGlvbigpe2kmJmkoKX19fSk7dmFyICRlPVtdLGplPS8oPSlcXD8oPz0mfCQpfFxcP1xcPy87ZnQuYWpheFNldHVwKHtqc29ucDpcImNhbGxiYWNrXCIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciB0PSRlLnBvcCgpfHxmdC5leHBhbmRvK1wiX1wiK3hlKys7cmV0dXJuIHRoaXNbdF09ITAsdH19KSxmdC5hamF4UHJlZmlsdGVyKFwianNvbiBqc29ucFwiLGZ1bmN0aW9uKGUsaSxuKXt2YXIgcyxvLGEscj0hMSE9PWUuanNvbnAmJihqZS50ZXN0KGUudXJsKT9cInVybFwiOlwic3RyaW5nXCI9PXR5cGVvZiBlLmRhdGEmJjA9PT0oZS5jb250ZW50VHlwZXx8XCJcIikuaW5kZXhPZihcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSYmamUudGVzdChlLmRhdGEpJiZcImRhdGFcIik7aWYocnx8XCJqc29ucFwiPT09ZS5kYXRhVHlwZXNbMF0pcmV0dXJuIHM9ZS5qc29ucENhbGxiYWNrPXV0KGUuanNvbnBDYWxsYmFjayk/ZS5qc29ucENhbGxiYWNrKCk6ZS5qc29ucENhbGxiYWNrLHI/ZVtyXT1lW3JdLnJlcGxhY2UoamUsXCIkMVwiK3MpOiExIT09ZS5qc29ucCYmKGUudXJsKz0oQ2UudGVzdChlLnVybCk/XCImXCI6XCI/XCIpK2UuanNvbnArXCI9XCIrcyksZS5jb252ZXJ0ZXJzW1wic2NyaXB0IGpzb25cIl09ZnVuY3Rpb24oKXtyZXR1cm4gYXx8ZnQuZXJyb3IocytcIiB3YXMgbm90IGNhbGxlZFwiKSxhWzBdfSxlLmRhdGFUeXBlc1swXT1cImpzb25cIixvPXRbc10sdFtzXT1mdW5jdGlvbigpe2E9YXJndW1lbnRzfSxuLmFsd2F5cyhmdW5jdGlvbigpe3ZvaWQgMD09PW8/ZnQodCkucmVtb3ZlUHJvcChzKTp0W3NdPW8sZVtzXSYmKGUuanNvbnBDYWxsYmFjaz1pLmpzb25wQ2FsbGJhY2ssJGUucHVzaChzKSksYSYmdXQobykmJm8oYVswXSksYT1vPXZvaWQgMH0pLFwic2NyaXB0XCJ9KSxjdC5jcmVhdGVIVE1MRG9jdW1lbnQ9ZnVuY3Rpb24oKXt2YXIgdD1aLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcIlwiKS5ib2R5O3JldHVybiB0LmlubmVySFRNTD1cIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCIsMj09PXQuY2hpbGROb2Rlcy5sZW5ndGh9KCksZnQucGFyc2VIVE1MPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgdD9bXTooXCJib29sZWFuXCI9PXR5cGVvZiBlJiYoaT1lLGU9ITEpLGV8fChjdC5jcmVhdGVIVE1MRG9jdW1lbnQ/KChuPShlPVouaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KFwiXCIpKS5jcmVhdGVFbGVtZW50KFwiYmFzZVwiKSkuaHJlZj1aLmxvY2F0aW9uLmhyZWYsZS5oZWFkLmFwcGVuZENoaWxkKG4pKTplPVopLG89IWkmJltdLChzPXl0LmV4ZWModCkpP1tlLmNyZWF0ZUVsZW1lbnQoc1sxXSldOihzPXcoW3RdLGUsbyksbyYmby5sZW5ndGgmJmZ0KG8pLnJlbW92ZSgpLGZ0Lm1lcmdlKFtdLHMuY2hpbGROb2RlcykpKTt2YXIgbixzLG99LGZ0LmZuLmxvYWQ9ZnVuY3Rpb24odCxlLGkpe3ZhciBuLHMsbyxhPXRoaXMscj10LmluZGV4T2YoXCIgXCIpO3JldHVybiByPi0xJiYobj1VKHQuc2xpY2UocikpLHQ9dC5zbGljZSgwLHIpKSx1dChlKT8oaT1lLGU9dm9pZCAwKTplJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmKHM9XCJQT1NUXCIpLGEubGVuZ3RoPjAmJmZ0LmFqYXgoe3VybDp0LHR5cGU6c3x8XCJHRVRcIixkYXRhVHlwZTpcImh0bWxcIixkYXRhOmV9KS5kb25lKGZ1bmN0aW9uKHQpe289YXJndW1lbnRzLGEuaHRtbChuP2Z0KFwiPGRpdj5cIikuYXBwZW5kKGZ0LnBhcnNlSFRNTCh0KSkuZmluZChuKTp0KX0pLmFsd2F5cyhpJiZmdW5jdGlvbih0LGUpe2EuZWFjaChmdW5jdGlvbigpe2kuYXBwbHkodGhpcyxvfHxbdC5yZXNwb25zZVRleHQsZSx0XSl9KX0pLHRoaXN9LGZ0LmVhY2goW1wiYWpheFN0YXJ0XCIsXCJhamF4U3RvcFwiLFwiYWpheENvbXBsZXRlXCIsXCJhamF4RXJyb3JcIixcImFqYXhTdWNjZXNzXCIsXCJhamF4U2VuZFwiXSxmdW5jdGlvbih0LGUpe2Z0LmZuW2VdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uKGUsdCl9fSksZnQuZXhwci5wc2V1ZG9zLmFuaW1hdGVkPWZ1bmN0aW9uKHQpe3JldHVybiBmdC5ncmVwKGZ0LnRpbWVycyxmdW5jdGlvbihlKXtyZXR1cm4gdD09PWUuZWxlbX0pLmxlbmd0aH0sZnQub2Zmc2V0PXtzZXRPZmZzZXQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLHMsbyxhLHIsbCxoPWZ0LmNzcyh0LFwicG9zaXRpb25cIiksYz1mdCh0KSx1PXt9O1wic3RhdGljXCI9PT1oJiYodC5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpLHI9Yy5vZmZzZXQoKSxvPWZ0LmNzcyh0LFwidG9wXCIpLGw9ZnQuY3NzKHQsXCJsZWZ0XCIpLChcImFic29sdXRlXCI9PT1ofHxcImZpeGVkXCI9PT1oKSYmKG8rbCkuaW5kZXhPZihcImF1dG9cIik+LTE/KGE9KG49Yy5wb3NpdGlvbigpKS50b3Ascz1uLmxlZnQpOihhPXBhcnNlRmxvYXQobyl8fDAscz1wYXJzZUZsb2F0KGwpfHwwKSx1dChlKSYmKGU9ZS5jYWxsKHQsaSxmdC5leHRlbmQoe30scikpKSxudWxsIT1lLnRvcCYmKHUudG9wPWUudG9wLXIudG9wK2EpLG51bGwhPWUubGVmdCYmKHUubGVmdD1lLmxlZnQtci5sZWZ0K3MpLFwidXNpbmdcImluIGU/ZS51c2luZy5jYWxsKHQsdSk6Yy5jc3ModSl9fSxmdC5mbi5leHRlbmQoe29mZnNldDpmdW5jdGlvbih0KXtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Z0Lm9mZnNldC5zZXRPZmZzZXQodGhpcyx0LGUpfSk7dmFyIGUsaSxuPXRoaXNbMF07cmV0dXJuIG4/bi5nZXRDbGllbnRSZWN0cygpLmxlbmd0aD8oZT1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGk9bi5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LHt0b3A6ZS50b3AraS5wYWdlWU9mZnNldCxsZWZ0OmUubGVmdCtpLnBhZ2VYT2Zmc2V0fSk6e3RvcDowLGxlZnQ6MH06dm9pZCAwfSxwb3NpdGlvbjpmdW5jdGlvbigpe2lmKHRoaXNbMF0pe3ZhciB0LGUsaSxuPXRoaXNbMF0scz17dG9wOjAsbGVmdDowfTtpZihcImZpeGVkXCI9PT1mdC5jc3MobixcInBvc2l0aW9uXCIpKWU9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle2ZvcihlPXRoaXMub2Zmc2V0KCksaT1uLm93bmVyRG9jdW1lbnQsdD1uLm9mZnNldFBhcmVudHx8aS5kb2N1bWVudEVsZW1lbnQ7dCYmKHQ9PT1pLmJvZHl8fHQ9PT1pLmRvY3VtZW50RWxlbWVudCkmJlwic3RhdGljXCI9PT1mdC5jc3ModCxcInBvc2l0aW9uXCIpOyl0PXQucGFyZW50Tm9kZTt0JiZ0IT09biYmMT09PXQubm9kZVR5cGUmJigocz1mdCh0KS5vZmZzZXQoKSkudG9wKz1mdC5jc3ModCxcImJvcmRlclRvcFdpZHRoXCIsITApLHMubGVmdCs9ZnQuY3NzKHQsXCJib3JkZXJMZWZ0V2lkdGhcIiwhMCkpfXJldHVybnt0b3A6ZS50b3Atcy50b3AtZnQuY3NzKG4sXCJtYXJnaW5Ub3BcIiwhMCksbGVmdDplLmxlZnQtcy5sZWZ0LWZ0LmNzcyhuLFwibWFyZ2luTGVmdFwiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQ7dCYmXCJzdGF0aWNcIj09PWZ0LmNzcyh0LFwicG9zaXRpb25cIik7KXQ9dC5vZmZzZXRQYXJlbnQ7cmV0dXJuIHR8fFZ0fSl9fSksZnQuZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24odCxlKXt2YXIgaT1cInBhZ2VZT2Zmc2V0XCI9PT1lO2Z0LmZuW3RdPWZ1bmN0aW9uKG4pe3JldHVybiBJdCh0aGlzLGZ1bmN0aW9uKHQsbixzKXt2YXIgbztpZihkdCh0KT9vPXQ6OT09PXQubm9kZVR5cGUmJihvPXQuZGVmYXVsdFZpZXcpLHZvaWQgMD09PXMpcmV0dXJuIG8/b1tlXTp0W25dO28/by5zY3JvbGxUbyhpP28ucGFnZVhPZmZzZXQ6cyxpP3M6by5wYWdlWU9mZnNldCk6dFtuXT1zfSx0LG4sYXJndW1lbnRzLmxlbmd0aCl9fSksZnQuZWFjaChbXCJ0b3BcIixcImxlZnRcIl0sZnVuY3Rpb24odCxlKXtmdC5jc3NIb29rc1tlXT1OKGN0LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24odCxpKXtpZihpKXJldHVybiBpPU8odCxlKSxlZS50ZXN0KGkpP2Z0KHQpLnBvc2l0aW9uKClbZV0rXCJweFwiOml9KX0pLGZ0LmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24odCxlKXtmdC5lYWNoKHtwYWRkaW5nOlwiaW5uZXJcIit0LGNvbnRlbnQ6ZSxcIlwiOlwib3V0ZXJcIit0fSxmdW5jdGlvbihpLG4pe2Z0LmZuW25dPWZ1bmN0aW9uKHMsbyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aCYmKGl8fFwiYm9vbGVhblwiIT10eXBlb2Ygcykscj1pfHwoITA9PT1zfHwhMD09PW8/XCJtYXJnaW5cIjpcImJvcmRlclwiKTtyZXR1cm4gSXQodGhpcyxmdW5jdGlvbihlLGkscyl7dmFyIG87cmV0dXJuIGR0KGUpPzA9PT1uLmluZGV4T2YoXCJvdXRlclwiKT9lW1wiaW5uZXJcIit0XTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtcImNsaWVudFwiK3RdOjk9PT1lLm5vZGVUeXBlPyhvPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVtcInNjcm9sbFwiK3RdLG9bXCJzY3JvbGxcIit0XSxlLmJvZHlbXCJvZmZzZXRcIit0XSxvW1wib2Zmc2V0XCIrdF0sb1tcImNsaWVudFwiK3RdKSk6dm9pZCAwPT09cz9mdC5jc3MoZSxpLHIpOmZ0LnN0eWxlKGUsaSxzLHIpfSxlLGE/czp2b2lkIDAsYSl9fSl9KSxmdC5lYWNoKFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbih0LGUpe2Z0LmZuW2VdPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGUsbnVsbCx0LGkpOnRoaXMudHJpZ2dlcihlKX19KSxmdC5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubW91c2VlbnRlcih0KS5tb3VzZWxlYXZlKGV8fHQpfX0pLGZ0LmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMub24odCxudWxsLGUsaSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9mZih0LG51bGwsZSl9LGRlbGVnYXRlOmZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiB0aGlzLm9uKGUsdCxpLG4pfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYodCxcIioqXCIpOnRoaXMub2ZmKGUsdHx8XCIqKlwiLGkpfX0pLGZ0LnByb3h5PWZ1bmN0aW9uKHQsZSl7dmFyIGksbixzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoaT10W2VdLGU9dCx0PWkpLHV0KHQpKXJldHVybiBuPWV0LmNhbGwoYXJndW1lbnRzLDIpLChzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZXx8dGhpcyxuLmNvbmNhdChldC5jYWxsKGFyZ3VtZW50cykpKX0pLmd1aWQ9dC5ndWlkPXQuZ3VpZHx8ZnQuZ3VpZCsrLHN9LGZ0LmhvbGRSZWFkeT1mdW5jdGlvbih0KXt0P2Z0LnJlYWR5V2FpdCsrOmZ0LnJlYWR5KCEwKX0sZnQuaXNBcnJheT1BcnJheS5pc0FycmF5LGZ0LnBhcnNlSlNPTj1KU09OLnBhcnNlLGZ0Lm5vZGVOYW1lPW8sZnQuaXNGdW5jdGlvbj11dCxmdC5pc1dpbmRvdz1kdCxmdC5jYW1lbENhc2U9cCxmdC50eXBlPW4sZnQubm93PURhdGUubm93LGZ0LmlzTnVtZXJpYz1mdW5jdGlvbih0KXt2YXIgZT1mdC50eXBlKHQpO3JldHVybihcIm51bWJlclwiPT09ZXx8XCJzdHJpbmdcIj09PWUpJiYhaXNOYU4odC1wYXJzZUZsb2F0KHQpKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiBmdH0pO3ZhciBGZT10LmpRdWVyeSxCZT10LiQ7cmV0dXJuIGZ0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuJD09PWZ0JiYodC4kPUJlKSxlJiZ0LmpRdWVyeT09PWZ0JiYodC5qUXVlcnk9RmUpLGZ0fSxlfHwodC5qUXVlcnk9dC4kPWZ0KSxmdH0pLGZ1bmN0aW9uKHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLHQpOnQoalF1ZXJ5KX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2N1ckluc3Q9bnVsbCx0aGlzLl9rZXlFdmVudD0hMSx0aGlzLl9kaXNhYmxlZElucHV0cz1bXSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSx0aGlzLl9pbkRpYWxvZz0hMSx0aGlzLl9tYWluRGl2SWQ9XCJ1aS1kYXRlcGlja2VyLWRpdlwiLHRoaXMuX2lubGluZUNsYXNzPVwidWktZGF0ZXBpY2tlci1pbmxpbmVcIix0aGlzLl9hcHBlbmRDbGFzcz1cInVpLWRhdGVwaWNrZXItYXBwZW5kXCIsdGhpcy5fdHJpZ2dlckNsYXNzPVwidWktZGF0ZXBpY2tlci10cmlnZ2VyXCIsdGhpcy5fZGlhbG9nQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRpYWxvZ1wiLHRoaXMuX2Rpc2FibGVDbGFzcz1cInVpLWRhdGVwaWNrZXItZGlzYWJsZWRcIix0aGlzLl91bnNlbGVjdGFibGVDbGFzcz1cInVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlXCIsdGhpcy5fY3VycmVudENsYXNzPVwidWktZGF0ZXBpY2tlci1jdXJyZW50LWRheVwiLHRoaXMuX2RheU92ZXJDbGFzcz1cInVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXJcIix0aGlzLnJlZ2lvbmFsPVtdLHRoaXMucmVnaW9uYWxbXCJcIl09e2Nsb3NlVGV4dDpcIkRvbmVcIixwcmV2VGV4dDpcIlByZXZcIixuZXh0VGV4dDpcIk5leHRcIixjdXJyZW50VGV4dDpcIlRvZGF5XCIsbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sd2Vla0hlYWRlcjpcIldrXCIsZGF0ZUZvcm1hdDpcIm1tL2RkL3l5XCIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDpcIlwifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOlwiZm9jdXNcIixzaG93QW5pbTpcImZhZGVJblwiLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDpcIlwiLGJ1dHRvblRleHQ6XCIuLi5cIixidXR0b25JbWFnZTpcIlwiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6XCJjLTEwOmMrMTBcIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjpcIisxMFwiLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwsZHVyYXRpb246XCJmYXN0XCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOlwiXCIsYWx0Rm9ybWF0OlwiXCIsY29uc3RyYWluSW5wdXQ6ITAsc2hvd0J1dHRvblBhbmVsOiExLGF1dG9TaXplOiExLGRpc2FibGVkOiExfSx0LmV4dGVuZCh0aGlzLl9kZWZhdWx0cyx0aGlzLnJlZ2lvbmFsW1wiXCJdKSx0aGlzLnJlZ2lvbmFsLmVuPXQuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWxbXCJcIl0pLHRoaXMucmVnaW9uYWxbXCJlbi1VU1wiXT10LmV4dGVuZCghMCx7fSx0aGlzLnJlZ2lvbmFsLmVuKSx0aGlzLmRwRGl2PWkodChcIjxkaXYgaWQ9J1wiK3RoaXMuX21haW5EaXZJZCtcIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIikpfWZ1bmN0aW9uIGkoZSl7dmFyIGk9XCJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGFcIjtyZXR1cm4gZS5vbihcIm1vdXNlb3V0XCIsaSxmdW5jdGlvbigpe3QodGhpcykucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLXByZXZcIikmJnQodGhpcykucmVtb3ZlQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1uZXh0XCIpJiZ0KHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIpfSkub24oXCJtb3VzZW92ZXJcIixpLG4pfWZ1bmN0aW9uIG4oKXt0LmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGMuaW5saW5lP2MuZHBEaXYucGFyZW50KClbMF06Yy5pbnB1dFswXSl8fCh0KHRoaXMpLnBhcmVudHMoXCIudWktZGF0ZXBpY2tlci1jYWxlbmRhclwiKS5maW5kKFwiYVwiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLHQodGhpcykuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLXByZXZcIikmJnQodGhpcykuYWRkQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1uZXh0XCIpJiZ0KHRoaXMpLmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIpKX1mdW5jdGlvbiBzKGUsaSl7Zm9yKHZhciBuIGluIHQuZXh0ZW5kKGUsaSksaSludWxsPT1pW25dJiYoZVtuXT1pW25dKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC52YWwoKTt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9yZWZyZXNoKCksZSE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiKX19dC51aT10LnVpfHx7fTt2YXIgYT0odC51aS52ZXJzaW9uPVwiMS4xMi4xXCIsMCkscj1BcnJheS5wcm90b3R5cGUuc2xpY2U7dC5jbGVhbkRhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBuLHMsbztmb3Iobz0wO251bGwhPShzPWlbb10pO28rKyl0cnl7KG49dC5fZGF0YShzLFwiZXZlbnRzXCIpKSYmbi5yZW1vdmUmJnQocykudHJpZ2dlckhhbmRsZXIoXCJyZW1vdmVcIil9Y2F0Y2godCl7fWUoaSl9fSh0LmNsZWFuRGF0YSksdC53aWRnZXQ9ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG8sYSxyPXt9LGw9ZS5zcGxpdChcIi5cIilbMF0saD1sK1wiLVwiKyhlPWUuc3BsaXQoXCIuXCIpWzFdKTtyZXR1cm4gbnx8KG49aSxpPXQuV2lkZ2V0KSx0LmlzQXJyYXkobikmJihuPXQuZXh0ZW5kLmFwcGx5KG51bGwsW3t9XS5jb25jYXQobikpKSx0LmV4cHJbXCI6XCJdW2gudG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24oZSl7cmV0dXJuISF0LmRhdGEoZSxoKX0sdFtsXT10W2xdfHx7fSxzPXRbbF1bZV0sbz10W2xdW2VdPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2NyZWF0ZVdpZGdldClyZXR1cm4gbmV3IG8odCxlKTthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQodCxlKX0sdC5leHRlbmQobyxzLHt2ZXJzaW9uOm4udmVyc2lvbixfcHJvdG86dC5leHRlbmQoe30sbiksX2NoaWxkQ29uc3RydWN0b3JzOltdfSksKGE9bmV3IGkpLm9wdGlvbnM9dC53aWRnZXQuZXh0ZW5kKHt9LGEub3B0aW9ucyksdC5lYWNoKG4sZnVuY3Rpb24oZSxuKXt0LmlzRnVuY3Rpb24obik/cltlXT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtcbnJldHVybiBpLnByb3RvdHlwZVtlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gaS5wcm90b3R5cGVbZV0uYXBwbHkodGhpcyx0KX1yZXR1cm4gZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMuX3N1cGVyLG89dGhpcy5fc3VwZXJBcHBseTtyZXR1cm4gdGhpcy5fc3VwZXI9dCx0aGlzLl9zdXBlckFwcGx5PXMsZT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9zdXBlcj1pLHRoaXMuX3N1cGVyQXBwbHk9byxlfX0oKTpyW2VdPW59KSxvLnByb3RvdHlwZT10LndpZGdldC5leHRlbmQoYSx7d2lkZ2V0RXZlbnRQcmVmaXg6cyYmYS53aWRnZXRFdmVudFByZWZpeHx8ZX0scix7Y29uc3RydWN0b3I6byxuYW1lc3BhY2U6bCx3aWRnZXROYW1lOmUsd2lkZ2V0RnVsbE5hbWU6aH0pLHM/KHQuZWFjaChzLl9jaGlsZENvbnN0cnVjdG9ycyxmdW5jdGlvbihlLGkpe3ZhciBuPWkucHJvdG90eXBlO3Qud2lkZ2V0KG4ubmFtZXNwYWNlK1wiLlwiK24ud2lkZ2V0TmFtZSxvLGkuX3Byb3RvKX0pLGRlbGV0ZSBzLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSx0LndpZGdldC5icmlkZ2UoZSxvKSxvfSx0LndpZGdldC5leHRlbmQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciBpLG4scz1yLmNhbGwoYXJndW1lbnRzLDEpLG89MCxhPXMubGVuZ3RoO288YTtvKyspZm9yKGkgaW4gc1tvXSluPXNbb11baV0sc1tvXS5oYXNPd25Qcm9wZXJ0eShpKSYmdm9pZCAwIT09biYmKHQuaXNQbGFpbk9iamVjdChuKT9lW2ldPXQuaXNQbGFpbk9iamVjdChlW2ldKT90LndpZGdldC5leHRlbmQoe30sZVtpXSxuKTp0LndpZGdldC5leHRlbmQoe30sbik6ZVtpXT1uKTtyZXR1cm4gZX0sdC53aWRnZXQuYnJpZGdlPWZ1bmN0aW9uKGUsaSl7dmFyIG49aS5wcm90b3R5cGUud2lkZ2V0RnVsbE5hbWV8fGU7dC5mbltlXT1mdW5jdGlvbihzKXt2YXIgbz1cInN0cmluZ1wiPT10eXBlb2YgcyxhPXIuY2FsbChhcmd1bWVudHMsMSksbD10aGlzO3JldHVybiBvP3RoaXMubGVuZ3RofHxcImluc3RhbmNlXCIhPT1zP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpLG89dC5kYXRhKHRoaXMsbik7cmV0dXJuXCJpbnN0YW5jZVwiPT09cz8obD1vLCExKTpvP3QuaXNGdW5jdGlvbihvW3NdKSYmXCJfXCIhPT1zLmNoYXJBdCgwKT8oaT1vW3NdLmFwcGx5KG8sYSkpIT09byYmdm9pZCAwIT09aT8obD1pJiZpLmpxdWVyeT9sLnB1c2hTdGFjayhpLmdldCgpKTppLCExKTp2b2lkIDA6dC5lcnJvcihcIm5vIHN1Y2ggbWV0aG9kICdcIitzK1wiJyBmb3IgXCIrZStcIiB3aWRnZXQgaW5zdGFuY2VcIik6dC5lcnJvcihcImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gXCIrZStcIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICdcIitzK1wiJ1wiKX0pOmw9dm9pZCAwOihhLmxlbmd0aCYmKHM9dC53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsW3NdLmNvbmNhdChhKSkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQuZGF0YSh0aGlzLG4pO2U/KGUub3B0aW9uKHN8fHt9KSxlLl9pbml0JiZlLl9pbml0KCkpOnQuZGF0YSh0aGlzLG4sbmV3IGkocyx0aGlzKSl9KSksbH19LHQuV2lkZ2V0PWZ1bmN0aW9uKCl7fSx0LldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sdC5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOlwid2lkZ2V0XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJcIixkZWZhdWx0RWxlbWVudDpcIjxkaXY+XCIsb3B0aW9uczp7Y2xhc3Nlczp7fSxkaXNhYmxlZDohMSxjcmVhdGU6bnVsbH0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbihlLGkpe2k9dChpfHx0aGlzLmRlZmF1bHRFbGVtZW50fHx0aGlzKVswXSx0aGlzLmVsZW1lbnQ9dChpKSx0aGlzLnV1aWQ9YSsrLHRoaXMuZXZlbnROYW1lc3BhY2U9XCIuXCIrdGhpcy53aWRnZXROYW1lK3RoaXMudXVpZCx0aGlzLmJpbmRpbmdzPXQoKSx0aGlzLmhvdmVyYWJsZT10KCksdGhpcy5mb2N1c2FibGU9dCgpLHRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXA9e30saSE9PXRoaXMmJih0LmRhdGEoaSx0aGlzLndpZGdldEZ1bGxOYW1lLHRoaXMpLHRoaXMuX29uKCEwLHRoaXMuZWxlbWVudCx7cmVtb3ZlOmZ1bmN0aW9uKHQpe3QudGFyZ2V0PT09aSYmdGhpcy5kZXN0cm95KCl9fSksdGhpcy5kb2N1bWVudD10KGkuc3R5bGU/aS5vd25lckRvY3VtZW50OmkuZG9jdW1lbnR8fGkpLHRoaXMud2luZG93PXQodGhpcy5kb2N1bWVudFswXS5kZWZhdWx0Vmlld3x8dGhpcy5kb2N1bWVudFswXS5wYXJlbnRXaW5kb3cpKSx0aGlzLm9wdGlvbnM9dC53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksZSksdGhpcy5fY3JlYXRlKCksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3RyaWdnZXIoXCJjcmVhdGVcIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJue319LF9nZXRDcmVhdGVFdmVudERhdGE6dC5ub29wLF9jcmVhdGU6dC5ub29wLF9pbml0OnQubm9vcCxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9kZXN0cm95KCksdC5lYWNoKHRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXAsZnVuY3Rpb24odCxpKXtlLl9yZW1vdmVDbGFzcyhpLHQpfSksdGhpcy5lbGVtZW50Lm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLHRoaXMud2lkZ2V0KCkub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpLHRoaXMuYmluZGluZ3Mub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpfSxfZGVzdHJveTp0Lm5vb3Asd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvLGE9ZTtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpaWYoYT17fSxuPWUuc3BsaXQoXCIuXCIpLGU9bi5zaGlmdCgpLG4ubGVuZ3RoKXtmb3Iocz1hW2VdPXQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbZV0pLG89MDtvPG4ubGVuZ3RoLTE7bysrKXNbbltvXV09c1tuW29dXXx8e30scz1zW25bb11dO2lmKGU9bi5wb3AoKSwxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09c1tlXT9udWxsOnNbZV07c1tlXT1pfWVsc2V7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9uc1tlXT9udWxsOnRoaXMub3B0aW9uc1tlXTthW2VdPWl9cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoYSksdGhpc30sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gdCl0aGlzLl9zZXRPcHRpb24oZSx0W2VdKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3JldHVyblwiY2xhc3Nlc1wiPT09dCYmdGhpcy5fc2V0T3B0aW9uQ2xhc3NlcyhlKSx0aGlzLm9wdGlvbnNbdF09ZSxcImRpc2FibGVkXCI9PT10JiZ0aGlzLl9zZXRPcHRpb25EaXNhYmxlZChlKSx0aGlzfSxfc2V0T3B0aW9uQ2xhc3NlczpmdW5jdGlvbihlKXt2YXIgaSxuLHM7Zm9yKGkgaW4gZSlzPXRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXBbaV0sZVtpXSE9PXRoaXMub3B0aW9ucy5jbGFzc2VzW2ldJiZzJiZzLmxlbmd0aCYmKG49dChzLmdldCgpKSx0aGlzLl9yZW1vdmVDbGFzcyhzLGkpLG4uYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcyh7ZWxlbWVudDpuLGtleXM6aSxjbGFzc2VzOmUsYWRkOiEwfSkpKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3RvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0KCksdGhpcy53aWRnZXRGdWxsTmFtZStcIi1kaXNhYmxlZFwiLG51bGwsISF0KSx0JiYodGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5ob3ZlcmFibGUsbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuZm9jdXNhYmxlLG51bGwsXCJ1aS1zdGF0ZS1mb2N1c1wiKSl9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMX0pfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiEwfSl9LF9jbGFzc2VzOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoaSxvKXt2YXIgYSxyO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspYT1zLmNsYXNzZXNFbGVtZW50TG9va3VwW2lbcl1dfHx0KCksYT10KGUuYWRkP3QudW5pcXVlKGEuZ2V0KCkuY29uY2F0KGUuZWxlbWVudC5nZXQoKSkpOmEubm90KGUuZWxlbWVudCkuZ2V0KCkpLHMuY2xhc3Nlc0VsZW1lbnRMb29rdXBbaVtyXV09YSxuLnB1c2goaVtyXSksbyYmZS5jbGFzc2VzW2lbcl1dJiZuLnB1c2goZS5jbGFzc2VzW2lbcl1dKX12YXIgbj1bXSxzPXRoaXM7cmV0dXJuIGU9dC5leHRlbmQoe2VsZW1lbnQ6dGhpcy5lbGVtZW50LGNsYXNzZXM6dGhpcy5vcHRpb25zLmNsYXNzZXN8fHt9fSxlKSx0aGlzLl9vbihlLmVsZW1lbnQse3JlbW92ZTpcIl91bnRyYWNrQ2xhc3Nlc0VsZW1lbnRcIn0pLGUua2V5cyYmaShlLmtleXMubWF0Y2goL1xcUysvZyl8fFtdLCEwKSxlLmV4dHJhJiZpKGUuZXh0cmEubWF0Y2goL1xcUysvZyl8fFtdKSxuLmpvaW4oXCIgXCIpfSxfdW50cmFja0NsYXNzZXNFbGVtZW50OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7dC5lYWNoKGkuY2xhc3Nlc0VsZW1lbnRMb29rdXAsZnVuY3Rpb24obixzKXstMSE9PXQuaW5BcnJheShlLnRhcmdldCxzKSYmKGkuY2xhc3Nlc0VsZW1lbnRMb29rdXBbbl09dChzLm5vdChlLnRhcmdldCkuZ2V0KCkpKX0pfSxfcmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLl90b2dnbGVDbGFzcyh0LGUsaSwhMSl9LF9hZGRDbGFzczpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKHQsZSxpLCEwKX0sX3RvZ2dsZUNsYXNzOmZ1bmN0aW9uKHQsZSxpLG4pe249XCJib29sZWFuXCI9PXR5cGVvZiBuP246aTt2YXIgcz1cInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbD09PXQsbz17ZXh0cmE6cz9lOmksa2V5czpzP3Q6ZSxlbGVtZW50OnM/dGhpcy5lbGVtZW50OnQsYWRkOm59O3JldHVybiBvLmVsZW1lbnQudG9nZ2xlQ2xhc3ModGhpcy5fY2xhc3NlcyhvKSxuKSx0aGlzfSxfb246ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG89dGhpcztcImJvb2xlYW5cIiE9dHlwZW9mIGUmJihuPWksaT1lLGU9ITEpLG4/KGk9cz10KGkpLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5ncy5hZGQoaSkpOihuPWksaT10aGlzLmVsZW1lbnQscz10aGlzLndpZGdldCgpKSx0LmVhY2gobixmdW5jdGlvbihuLGEpe2Z1bmN0aW9uIHIoKXtpZihlfHwhMCE9PW8ub3B0aW9ucy5kaXNhYmxlZCYmIXQodGhpcykuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSlyZXR1cm4oXCJzdHJpbmdcIj09dHlwZW9mIGE/b1thXTphKS5hcHBseShvLGFyZ3VtZW50cyl9XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihyLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8ci5ndWlkfHx0Lmd1aWQrKyk7dmFyIGw9bi5tYXRjaCgvXihbXFx3Oi1dKilcXHMqKC4qKSQvKSxoPWxbMV0rby5ldmVudE5hbWVzcGFjZSxjPWxbMl07Yz9zLm9uKGgsYyxyKTppLm9uKGgscil9KX0sX29mZjpmdW5jdGlvbihlLGkpe2k9KGl8fFwiXCIpLnNwbGl0KFwiIFwiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrXCIgXCIpK3RoaXMuZXZlbnROYW1lc3BhY2UsZS5vZmYoaSkub2ZmKGkpLHRoaXMuYmluZGluZ3M9dCh0aGlzLmJpbmRpbmdzLm5vdChlKS5nZXQoKSksdGhpcy5mb2N1c2FibGU9dCh0aGlzLmZvY3VzYWJsZS5ub3QoZSkuZ2V0KCkpLHRoaXMuaG92ZXJhYmxlPXQodGhpcy5ob3ZlcmFibGUubm90KGUpLmdldCgpKX0sX2RlbGF5OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcztyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgdD9pW3RdOnQpLmFwcGx5KGksYXJndW1lbnRzKX0sZXx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24oZSl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKGUpLHRoaXMuX29uKGUse21vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7dGhpcy5fYWRkQ2xhc3ModChlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0aGlzLl9yZW1vdmVDbGFzcyh0KGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpfX0pfSxfZm9jdXNhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNhYmxlPXRoaXMuZm9jdXNhYmxlLmFkZChlKSx0aGlzLl9vbihlLHtmb2N1c2luOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZENsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtZm9jdXNcIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlbW92ZUNsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtZm9jdXNcIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcyxvLGE9dGhpcy5vcHRpb25zW2VdO2lmKG49bnx8e30sKGk9dC5FdmVudChpKSkudHlwZT0oZT09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/ZTp0aGlzLndpZGdldEV2ZW50UHJlZml4K2UpLnRvTG93ZXJDYXNlKCksaS50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLG89aS5vcmlnaW5hbEV2ZW50KWZvcihzIGluIG8pcyBpbiBpfHwoaVtzXT1vW3NdKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIoaSxuKSwhKHQuaXNGdW5jdGlvbihhKSYmITE9PT1hLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbaV0uY29uY2F0KG4pKXx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSx0LmVhY2goe3Nob3c6XCJmYWRlSW5cIixoaWRlOlwiZmFkZU91dFwifSxmdW5jdGlvbihlLGkpe3QuV2lkZ2V0LnByb3RvdHlwZVtcIl9cIitlXT1mdW5jdGlvbihuLHMsbyl7XCJzdHJpbmdcIj09dHlwZW9mIHMmJihzPXtlZmZlY3Q6c30pO3ZhciBhLHI9cz8hMD09PXN8fFwibnVtYmVyXCI9PXR5cGVvZiBzP2k6cy5lZmZlY3R8fGk6ZTtcIm51bWJlclwiPT10eXBlb2Yocz1zfHx7fSkmJihzPXtkdXJhdGlvbjpzfSksYT0hdC5pc0VtcHR5T2JqZWN0KHMpLHMuY29tcGxldGU9byxzLmRlbGF5JiZuLmRlbGF5KHMuZGVsYXkpLGEmJnQuZWZmZWN0cyYmdC5lZmZlY3RzLmVmZmVjdFtyXT9uW2VdKHMpOnIhPT1lJiZuW3JdP25bcl0ocy5kdXJhdGlvbixzLmVhc2luZyxvKTpuLnF1ZXVlKGZ1bmN0aW9uKGkpe3QodGhpcylbZV0oKSxvJiZvLmNhbGwoblswXSksaSgpfSl9fSksdC53aWRnZXQsZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQsZSxpKXtyZXR1cm5bcGFyc2VGbG9hdCh0WzBdKSooYy50ZXN0KHRbMF0pP2UvMTAwOjEpLHBhcnNlRmxvYXQodFsxXSkqKGMudGVzdCh0WzFdKT9pLzEwMDoxKV19ZnVuY3Rpb24gaShlLGkpe3JldHVybiBwYXJzZUludCh0LmNzcyhlLGkpLDEwKXx8MH12YXIgbixzPU1hdGgubWF4LG89TWF0aC5hYnMsYT0vbGVmdHxjZW50ZXJ8cmlnaHQvLHI9L3RvcHxjZW50ZXJ8Ym90dG9tLyxsPS9bXFwrXFwtXVxcZCsoXFwuW1xcZF0rKT8lPy8saD0vXlxcdysvLGM9LyUkLyx1PXQuZm4ucG9zaXRpb247dC5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZih2b2lkIDAhPT1uKXJldHVybiBuO3ZhciBlLGkscz10KFwiPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPjxkaXYgc3R5bGU9J2hlaWdodDoxMDBweDt3aWR0aDphdXRvOyc+PC9kaXY+PC9kaXY+XCIpLG89cy5jaGlsZHJlbigpWzBdO3JldHVybiB0KFwiYm9keVwiKS5hcHBlbmQocyksZT1vLm9mZnNldFdpZHRoLHMuY3NzKFwib3ZlcmZsb3dcIixcInNjcm9sbFwiKSxlPT09KGk9by5vZmZzZXRXaWR0aCkmJihpPXNbMF0uY2xpZW50V2lkdGgpLHMucmVtb3ZlKCksbj1lLWl9LGdldFNjcm9sbEluZm86ZnVuY3Rpb24oZSl7dmFyIGk9ZS5pc1dpbmRvd3x8ZS5pc0RvY3VtZW50P1wiXCI6ZS5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXhcIiksbj1lLmlzV2luZG93fHxlLmlzRG9jdW1lbnQ/XCJcIjplLmVsZW1lbnQuY3NzKFwib3ZlcmZsb3cteVwiKSxzPVwic2Nyb2xsXCI9PT1pfHxcImF1dG9cIj09PWkmJmUud2lkdGg8ZS5lbGVtZW50WzBdLnNjcm9sbFdpZHRoO3JldHVybnt3aWR0aDpcInNjcm9sbFwiPT09bnx8XCJhdXRvXCI9PT1uJiZlLmhlaWdodDxlLmVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0P3QucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowLGhlaWdodDpzP3QucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowfX0sZ2V0V2l0aGluSW5mbzpmdW5jdGlvbihlKXt2YXIgaT10KGV8fHdpbmRvdyksbj10LmlzV2luZG93KGlbMF0pLHM9ISFpWzBdJiY5PT09aVswXS5ub2RlVHlwZTtyZXR1cm57ZWxlbWVudDppLGlzV2luZG93Om4saXNEb2N1bWVudDpzLG9mZnNldDpufHxzP3tsZWZ0OjAsdG9wOjB9OnQoZSkub2Zmc2V0KCksc2Nyb2xsTGVmdDppLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6aS5zY3JvbGxUb3AoKSx3aWR0aDppLm91dGVyV2lkdGgoKSxoZWlnaHQ6aS5vdXRlckhlaWdodCgpfX19LHQuZm4ucG9zaXRpb249ZnVuY3Rpb24obil7aWYoIW58fCFuLm9mKXJldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtuPXQuZXh0ZW5kKHt9LG4pO3ZhciBjLGQscCxmLGcsbSx2PXQobi5vZiksYj10LnBvc2l0aW9uLmdldFdpdGhpbkluZm8obi53aXRoaW4pLF89dC5wb3NpdGlvbi5nZXRTY3JvbGxJbmZvKGIpLHk9KG4uY29sbGlzaW9ufHxcImZsaXBcIikuc3BsaXQoXCIgXCIpLHc9e307cmV0dXJuIG09ZnVuY3Rpb24oZSl7dmFyIGk9ZVswXTtyZXR1cm4gOT09PWkubm9kZVR5cGU/e3dpZHRoOmUud2lkdGgoKSxoZWlnaHQ6ZS5oZWlnaHQoKSxvZmZzZXQ6e3RvcDowLGxlZnQ6MH19OnQuaXNXaW5kb3coaSk/e3dpZHRoOmUud2lkdGgoKSxoZWlnaHQ6ZS5oZWlnaHQoKSxvZmZzZXQ6e3RvcDplLnNjcm9sbFRvcCgpLGxlZnQ6ZS5zY3JvbGxMZWZ0KCl9fTppLnByZXZlbnREZWZhdWx0P3t3aWR0aDowLGhlaWdodDowLG9mZnNldDp7dG9wOmkucGFnZVksbGVmdDppLnBhZ2VYfX06e3dpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksb2Zmc2V0OmUub2Zmc2V0KCl9fSh2KSx2WzBdLnByZXZlbnREZWZhdWx0JiYobi5hdD1cImxlZnQgdG9wXCIpLGQ9bS53aWR0aCxwPW0uaGVpZ2h0LGY9bS5vZmZzZXQsZz10LmV4dGVuZCh7fSxmKSx0LmVhY2goW1wibXlcIixcImF0XCJdLGZ1bmN0aW9uKCl7dmFyIHQsZSxpPShuW3RoaXNdfHxcIlwiKS5zcGxpdChcIiBcIik7MT09PWkubGVuZ3RoJiYoaT1hLnRlc3QoaVswXSk/aS5jb25jYXQoW1wiY2VudGVyXCJdKTpyLnRlc3QoaVswXSk/W1wiY2VudGVyXCJdLmNvbmNhdChpKTpbXCJjZW50ZXJcIixcImNlbnRlclwiXSksaVswXT1hLnRlc3QoaVswXSk/aVswXTpcImNlbnRlclwiLGlbMV09ci50ZXN0KGlbMV0pP2lbMV06XCJjZW50ZXJcIix0PWwuZXhlYyhpWzBdKSxlPWwuZXhlYyhpWzFdKSx3W3RoaXNdPVt0P3RbMF06MCxlP2VbMF06MF0sblt0aGlzXT1baC5leGVjKGlbMF0pWzBdLGguZXhlYyhpWzFdKVswXV19KSwxPT09eS5sZW5ndGgmJih5WzFdPXlbMF0pLFwicmlnaHRcIj09PW4uYXRbMF0/Zy5sZWZ0Kz1kOlwiY2VudGVyXCI9PT1uLmF0WzBdJiYoZy5sZWZ0Kz1kLzIpLFwiYm90dG9tXCI9PT1uLmF0WzFdP2cudG9wKz1wOlwiY2VudGVyXCI9PT1uLmF0WzFdJiYoZy50b3ArPXAvMiksYz1lKHcuYXQsZCxwKSxnLmxlZnQrPWNbMF0sZy50b3ArPWNbMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGEscixsPXQodGhpcyksaD1sLm91dGVyV2lkdGgoKSx1PWwub3V0ZXJIZWlnaHQoKSxtPWkodGhpcyxcIm1hcmdpbkxlZnRcIikseD1pKHRoaXMsXCJtYXJnaW5Ub3BcIiksQz1oK20raSh0aGlzLFwibWFyZ2luUmlnaHRcIikrXy53aWR0aCxrPXUreCtpKHRoaXMsXCJtYXJnaW5Cb3R0b21cIikrXy5oZWlnaHQsVD10LmV4dGVuZCh7fSxnKSxEPWUody5teSxsLm91dGVyV2lkdGgoKSxsLm91dGVySGVpZ2h0KCkpO1wicmlnaHRcIj09PW4ubXlbMF0/VC5sZWZ0LT1oOlwiY2VudGVyXCI9PT1uLm15WzBdJiYoVC5sZWZ0LT1oLzIpLFwiYm90dG9tXCI9PT1uLm15WzFdP1QudG9wLT11OlwiY2VudGVyXCI9PT1uLm15WzFdJiYoVC50b3AtPXUvMiksVC5sZWZ0Kz1EWzBdLFQudG9wKz1EWzFdLGE9e21hcmdpbkxlZnQ6bSxtYXJnaW5Ub3A6eH0sdC5lYWNoKFtcImxlZnRcIixcInRvcFwiXSxmdW5jdGlvbihlLGkpe3QudWkucG9zaXRpb25beVtlXV0mJnQudWkucG9zaXRpb25beVtlXV1baV0oVCx7dGFyZ2V0V2lkdGg6ZCx0YXJnZXRIZWlnaHQ6cCxlbGVtV2lkdGg6aCxlbGVtSGVpZ2h0OnUsY29sbGlzaW9uUG9zaXRpb246YSxjb2xsaXNpb25XaWR0aDpDLGNvbGxpc2lvbkhlaWdodDprLG9mZnNldDpbY1swXStEWzBdLGNbMV0rRFsxXV0sbXk6bi5teSxhdDpuLmF0LHdpdGhpbjpiLGVsZW06bH0pfSksbi51c2luZyYmKHI9ZnVuY3Rpb24odCl7dmFyIGU9Zi5sZWZ0LVQubGVmdCxpPWUrZC1oLGE9Zi50b3AtVC50b3Ascj1hK3AtdSxjPXt0YXJnZXQ6e2VsZW1lbnQ6dixsZWZ0OmYubGVmdCx0b3A6Zi50b3Asd2lkdGg6ZCxoZWlnaHQ6cH0sZWxlbWVudDp7ZWxlbWVudDpsLGxlZnQ6VC5sZWZ0LHRvcDpULnRvcCx3aWR0aDpoLGhlaWdodDp1fSxob3Jpem9udGFsOmk8MD9cImxlZnRcIjplPjA/XCJyaWdodFwiOlwiY2VudGVyXCIsdmVydGljYWw6cjwwP1widG9wXCI6YT4wP1wiYm90dG9tXCI6XCJtaWRkbGVcIn07ZDxoJiZvKGUraSk8ZCYmKGMuaG9yaXpvbnRhbD1cImNlbnRlclwiKSxwPHUmJm8oYStyKTxwJiYoYy52ZXJ0aWNhbD1cIm1pZGRsZVwiKSxzKG8oZSksbyhpKSk+cyhvKGEpLG8ocikpP2MuaW1wb3J0YW50PVwiaG9yaXpvbnRhbFwiOmMuaW1wb3J0YW50PVwidmVydGljYWxcIixuLnVzaW5nLmNhbGwodGhpcyx0LGMpfSksbC5vZmZzZXQodC5leHRlbmQoVCx7dXNpbmc6cn0pKX0pfSx0LnVpLnBvc2l0aW9uPXtmaXQ6e2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPWUud2l0aGluLG89bi5pc1dpbmRvdz9uLnNjcm9sbExlZnQ6bi5vZmZzZXQubGVmdCxhPW4ud2lkdGgscj10LmxlZnQtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGw9by1yLGg9citlLmNvbGxpc2lvbldpZHRoLWEtbztlLmNvbGxpc2lvbldpZHRoPmE/bD4wJiZoPD0wPyhpPXQubGVmdCtsK2UuY29sbGlzaW9uV2lkdGgtYS1vLHQubGVmdCs9bC1pKTp0LmxlZnQ9aD4wJiZsPD0wP286bD5oP28rYS1lLmNvbGxpc2lvbldpZHRoOm86bD4wP3QubGVmdCs9bDpoPjA/dC5sZWZ0LT1oOnQubGVmdD1zKHQubGVmdC1yLHQubGVmdCl9LHRvcDpmdW5jdGlvbih0LGUpe3ZhciBpLG49ZS53aXRoaW4sbz1uLmlzV2luZG93P24uc2Nyb2xsVG9wOm4ub2Zmc2V0LnRvcCxhPWUud2l0aGluLmhlaWdodCxyPXQudG9wLWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLGw9by1yLGg9citlLmNvbGxpc2lvbkhlaWdodC1hLW87ZS5jb2xsaXNpb25IZWlnaHQ+YT9sPjAmJmg8PTA/KGk9dC50b3ArbCtlLmNvbGxpc2lvbkhlaWdodC1hLW8sdC50b3ArPWwtaSk6dC50b3A9aD4wJiZsPD0wP286bD5oP28rYS1lLmNvbGxpc2lvbkhlaWdodDpvOmw+MD90LnRvcCs9bDpoPjA/dC50b3AtPWg6dC50b3A9cyh0LnRvcC1yLHQudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHM9ZS53aXRoaW4sYT1zLm9mZnNldC5sZWZ0K3Muc2Nyb2xsTGVmdCxyPXMud2lkdGgsbD1zLmlzV2luZG93P3Muc2Nyb2xsTGVmdDpzLm9mZnNldC5sZWZ0LGg9dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxjPWgtbCx1PWgrZS5jb2xsaXNpb25XaWR0aC1yLWwsZD1cImxlZnRcIj09PWUubXlbMF0/LWUuZWxlbVdpZHRoOlwicmlnaHRcIj09PWUubXlbMF0/ZS5lbGVtV2lkdGg6MCxwPVwibGVmdFwiPT09ZS5hdFswXT9lLnRhcmdldFdpZHRoOlwicmlnaHRcIj09PWUuYXRbMF0/LWUudGFyZ2V0V2lkdGg6MCxmPS0yKmUub2Zmc2V0WzBdO2M8MD8oKGk9dC5sZWZ0K2QrcCtmK2UuY29sbGlzaW9uV2lkdGgtci1hKTwwfHxpPG8oYykpJiYodC5sZWZ0Kz1kK3ArZik6dT4wJiYoKG49dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtkK3ArZi1sKT4wfHxvKG4pPHUpJiYodC5sZWZ0Kz1kK3ArZil9LHRvcDpmdW5jdGlvbih0LGUpe3ZhciBpLG4scz1lLndpdGhpbixhPXMub2Zmc2V0LnRvcCtzLnNjcm9sbFRvcCxyPXMuaGVpZ2h0LGw9cy5pc1dpbmRvdz9zLnNjcm9sbFRvcDpzLm9mZnNldC50b3AsaD10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxjPWgtbCx1PWgrZS5jb2xsaXNpb25IZWlnaHQtci1sLGQ9XCJ0b3BcIj09PWUubXlbMV0/LWUuZWxlbUhlaWdodDpcImJvdHRvbVwiPT09ZS5teVsxXT9lLmVsZW1IZWlnaHQ6MCxwPVwidG9wXCI9PT1lLmF0WzFdP2UudGFyZ2V0SGVpZ2h0OlwiYm90dG9tXCI9PT1lLmF0WzFdPy1lLnRhcmdldEhlaWdodDowLGY9LTIqZS5vZmZzZXRbMV07YzwwPygobj10LnRvcCtkK3ArZitlLmNvbGxpc2lvbkhlaWdodC1yLWEpPDB8fG48byhjKSkmJih0LnRvcCs9ZCtwK2YpOnU+MCYmKChpPXQudG9wLWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wK2QrcCtmLWwpPjB8fG8oaSk8dSkmJih0LnRvcCs9ZCtwK2YpfX0sZmxpcGZpdDp7bGVmdDpmdW5jdGlvbigpe3QudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9wOmZ1bmN0aW9uKCl7dC51aS5wb3NpdGlvbi5mbGlwLnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fX0oKTt2YXIgbD0odC51aS5wb3NpdGlvbix0LmV4dGVuZCh0LmV4cHJbXCI6XCJdLHtkYXRhOnQuZXhwci5jcmVhdGVQc2V1ZG8/dC5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISF0LmRhdGEoaSxlKX19KTpmdW5jdGlvbihlLGksbil7cmV0dXJuISF0LmRhdGEoZSxuWzNdKX19KSx0LmZuLmV4dGVuZCh7ZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciB0PVwib25zZWxlY3RzdGFydFwiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKT9cInNlbGVjdHN0YXJ0XCI6XCJtb3VzZWRvd25cIjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbih0K1wiLnVpLWRpc2FibGVTZWxlY3Rpb25cIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9KX19KCksZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2ZmKFwiLnVpLWRpc2FibGVTZWxlY3Rpb25cIil9fSksXCJ1aS1lZmZlY3RzLWFuaW1hdGVkXCIpLGg9dDt0LmVmZmVjdHM9e2VmZmVjdDp7fX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgbj1jW2UudHlwZV18fHt9O3JldHVybiBudWxsPT10P2l8fCFlLmRlZj9udWxsOmUuZGVmOih0PW4uZmxvb3I/fn50OnBhcnNlRmxvYXQodCksaXNOYU4odCk/ZS5kZWY6bi5tb2Q/KHQrbi5tb2QpJW4ubW9kOjA+dD8wOm4ubWF4PHQ/bi5tYXg6dCl9ZnVuY3Rpb24gbihlKXt2YXIgaT1sKCksbj1pLl9yZ2JhPVtdO3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSxwKHIsZnVuY3Rpb24odCxzKXt2YXIgbyxhPXMucmUuZXhlYyhlKSxyPWEmJnMucGFyc2UoYSksbD1zLnNwYWNlfHxcInJnYmFcIjtpZihyKXJldHVybiBvPWlbbF0ociksaVtoW2xdLmNhY2hlXT1vW2hbbF0uY2FjaGVdLG49aS5fcmdiYT1vLl9yZ2JhLCExfSksbi5sZW5ndGg/KFwiMCwwLDAsMFwiPT09bi5qb2luKCkmJnQuZXh0ZW5kKG4sby50cmFuc3BhcmVudCksaSk6b1tlXX1mdW5jdGlvbiBzKHQsZSxpKXtyZXR1cm4gNiooaT0oaSsxKSUxKTwxP3QrKGUtdCkqaSo2OjIqaTwxP2U6MyppPDI/dCsoZS10KSooMi8zLWkpKjY6dH12YXIgbyxhPS9eKFtcXC0rXSk9XFxzKihcXGQrXFwuP1xcZCopLyxyPVt7cmU6L3JnYmE/XFwoXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMV0sdFsyXSx0WzNdLHRbNF1dfX0se3JlOi9yZ2JhP1xcKFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqKD86LFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqKT9cXCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblsyLjU1KnRbMV0sMi41NSp0WzJdLDIuNTUqdFszXSx0WzRdXX19LHtyZTovIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX19LHtyZTovIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3BhcnNlSW50KHRbMV0rdFsxXSwxNikscGFyc2VJbnQodFsyXSt0WzJdLDE2KSxwYXJzZUludCh0WzNdK3RbM10sMTYpXX19LHtyZTovaHNsYT9cXChcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxzcGFjZTpcImhzbGFcIixwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bdFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdXX19XSxsPXQuQ29sb3I9ZnVuY3Rpb24oZSxpLG4scyl7cmV0dXJuIG5ldyB0LkNvbG9yLmZuLnBhcnNlKGUsaSxuLHMpfSxoPXtyZ2JhOntwcm9wczp7cmVkOntpZHg6MCx0eXBlOlwiYnl0ZVwifSxncmVlbjp7aWR4OjEsdHlwZTpcImJ5dGVcIn0sYmx1ZTp7aWR4OjIsdHlwZTpcImJ5dGVcIn19fSxoc2xhOntwcm9wczp7aHVlOntpZHg6MCx0eXBlOlwiZGVncmVlc1wifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOlwicGVyY2VudFwifSxsaWdodG5lc3M6e2lkeDoyLHR5cGU6XCJwZXJjZW50XCJ9fX19LGM9e2J5dGU6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sdT1sLnN1cHBvcnQ9e30sZD10KFwiPHA+XCIpWzBdLHA9dC5lYWNoO2Quc3R5bGUuY3NzVGV4dD1cImJhY2tncm91bmQtY29sb3I6cmdiYSgxLDEsMSwuNSlcIix1LnJnYmE9ZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZihcInJnYmFcIik+LTEscChoLGZ1bmN0aW9uKHQsZSl7ZS5jYWNoZT1cIl9cIit0LGUucHJvcHMuYWxwaGE9e2lkeDozLHR5cGU6XCJwZXJjZW50XCIsZGVmOjF9fSksbC5mbj10LmV4dGVuZChsLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24oZSxzLGEscil7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpcy5fcmdiYT1bbnVsbCxudWxsLG51bGwsbnVsbF0sdGhpczsoZS5qcXVlcnl8fGUubm9kZVR5cGUpJiYoZT10KGUpLmNzcyhzKSxzPXZvaWQgMCk7dmFyIGM9dGhpcyx1PXQudHlwZShlKSxkPXRoaXMuX3JnYmE9W107cmV0dXJuIHZvaWQgMCE9PXMmJihlPVtlLHMsYSxyXSx1PVwiYXJyYXlcIiksXCJzdHJpbmdcIj09PXU/dGhpcy5wYXJzZShuKGUpfHxvLl9kZWZhdWx0KTpcImFycmF5XCI9PT11PyhwKGgucmdiYS5wcm9wcyxmdW5jdGlvbih0LG4pe2Rbbi5pZHhdPWkoZVtuLmlkeF0sbil9KSx0aGlzKTpcIm9iamVjdFwiPT09dT8ocChoLGUgaW5zdGFuY2VvZiBsP2Z1bmN0aW9uKHQsaSl7ZVtpLmNhY2hlXSYmKGNbaS5jYWNoZV09ZVtpLmNhY2hlXS5zbGljZSgpKX06ZnVuY3Rpb24obixzKXt2YXIgbz1zLmNhY2hlO3Aocy5wcm9wcyxmdW5jdGlvbih0LG4pe2lmKCFjW29dJiZzLnRvKXtpZihcImFscGhhXCI9PT10fHxudWxsPT1lW3RdKXJldHVybjtjW29dPXMudG8oYy5fcmdiYSl9Y1tvXVtuLmlkeF09aShlW3RdLG4sITApfSksY1tvXSYmdC5pbkFycmF5KG51bGwsY1tvXS5zbGljZSgwLDMpKTwwJiYoY1tvXVszXT0xLHMuZnJvbSYmKGMuX3JnYmE9cy5mcm9tKGNbb10pKSl9KSx0aGlzKTp2b2lkIDB9LGlzOmZ1bmN0aW9uKHQpe3ZhciBlPWwodCksaT0hMCxuPXRoaXM7cmV0dXJuIHAoaCxmdW5jdGlvbih0LHMpe3ZhciBvLGE9ZVtzLmNhY2hlXTtyZXR1cm4gYSYmKG89bltzLmNhY2hlXXx8cy50byYmcy50byhuLl9yZ2JhKXx8W10scChzLnByb3BzLGZ1bmN0aW9uKHQsZSl7aWYobnVsbCE9YVtlLmlkeF0pcmV0dXJuIGk9YVtlLmlkeF09PT1vW2UuaWR4XX0pKSxpfSksaX0sX3NwYWNlOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzO3JldHVybiBwKGgsZnVuY3Rpb24oaSxuKXtlW24uY2FjaGVdJiZ0LnB1c2goaSl9KSx0LnBvcCgpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIG49bCh0KSxzPW4uX3NwYWNlKCksbz1oW3NdLGE9MD09PXRoaXMuYWxwaGEoKT9sKFwidHJhbnNwYXJlbnRcIik6dGhpcyxyPWFbby5jYWNoZV18fG8udG8oYS5fcmdiYSksdT1yLnNsaWNlKCk7cmV0dXJuIG49bltvLmNhY2hlXSxwKG8ucHJvcHMsZnVuY3Rpb24odCxzKXt2YXIgbz1zLmlkeCxhPXJbb10sbD1uW29dLGg9Y1tzLnR5cGVdfHx7fTtudWxsIT09bCYmKG51bGw9PT1hP3Vbb109bDooaC5tb2QmJihsLWE+aC5tb2QvMj9hKz1oLm1vZDphLWw+aC5tb2QvMiYmKGEtPWgubW9kKSksdVtvXT1pKChsLWEpKmUrYSxzKSkpfSksdGhpc1tzXSh1KX0sYmxlbmQ6ZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMuX3JnYmFbM10pcmV0dXJuIHRoaXM7dmFyIGk9dGhpcy5fcmdiYS5zbGljZSgpLG49aS5wb3AoKSxzPWwoZSkuX3JnYmE7cmV0dXJuIGwodC5tYXAoaSxmdW5jdGlvbih0LGUpe3JldHVybigxLW4pKnNbZV0rbip0fSkpfSx0b1JnYmFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1cInJnYmEoXCIsaT10Lm1hcCh0aGlzLl9yZ2JhLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQ/ZT4yPzE6MDp0fSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSxlPVwicmdiKFwiKSxlK2kuam9pbigpK1wiKVwifSx0b0hzbGFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT1cImhzbGEoXCIsaT10Lm1hcCh0aGlzLmhzbGEoKSxmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10JiYodD1lPjI/MTowKSxlJiZlPDMmJih0PU1hdGgucm91bmQoMTAwKnQpK1wiJVwiKSx0fSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSxlPVwiaHNsKFwiKSxlK2kuam9pbigpK1wiKVwifSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCksbj1pLnBvcCgpO3JldHVybiBlJiZpLnB1c2gofn4oMjU1Km4pKSxcIiNcIit0Lm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybiAxPT09KHQ9KHR8fDApLnRvU3RyaW5nKDE2KSkubGVuZ3RoP1wiMFwiK3Q6dH0pLmpvaW4oXCJcIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9yZ2JhWzNdP1widHJhbnNwYXJlbnRcIjp0aGlzLnRvUmdiYVN0cmluZygpfX0pLGwuZm4ucGFyc2UucHJvdG90eXBlPWwuZm4saC5oc2xhLnRvPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXRbMF18fG51bGw9PXRbMV18fG51bGw9PXRbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLHRbM11dO3ZhciBlLGksbj10WzBdLzI1NSxzPXRbMV0vMjU1LG89dFsyXS8yNTUsYT10WzNdLHI9TWF0aC5tYXgobixzLG8pLGw9TWF0aC5taW4obixzLG8pLGg9ci1sLGM9citsLHU9LjUqYztyZXR1cm4gZT1sPT09cj8wOm49PT1yPzYwKihzLW8pL2grMzYwOnM9PT1yPzYwKihvLW4pL2grMTIwOjYwKihuLXMpL2grMjQwLGk9MD09PWg/MDp1PD0uNT9oL2M6aC8oMi1jKSxbTWF0aC5yb3VuZChlKSUzNjAsaSx1LG51bGw9PWE/MTphXX0saC5oc2xhLmZyb209ZnVuY3Rpb24odCl7aWYobnVsbD09dFswXXx8bnVsbD09dFsxXXx8bnVsbD09dFsyXSlyZXR1cm5bbnVsbCxudWxsLG51bGwsdFszXV07dmFyIGU9dFswXS8zNjAsaT10WzFdLG49dFsyXSxvPXRbM10sYT1uPD0uNT9uKigxK2kpOm4raS1uKmkscj0yKm4tYTtyZXR1cm5bTWF0aC5yb3VuZCgyNTUqcyhyLGEsZSsxLzMpKSxNYXRoLnJvdW5kKDI1NSpzKHIsYSxlKSksTWF0aC5yb3VuZCgyNTUqcyhyLGEsZS0xLzMpKSxvXX0scChoLGZ1bmN0aW9uKGUsbil7dmFyIHM9bi5wcm9wcyxvPW4uY2FjaGUscj1uLnRvLGg9bi5mcm9tO2wuZm5bZV09ZnVuY3Rpb24oZSl7aWYociYmIXRoaXNbb10mJih0aGlzW29dPXIodGhpcy5fcmdiYSkpLHZvaWQgMD09PWUpcmV0dXJuIHRoaXNbb10uc2xpY2UoKTt2YXIgbixhPXQudHlwZShlKSxjPVwiYXJyYXlcIj09PWF8fFwib2JqZWN0XCI9PT1hP2U6YXJndW1lbnRzLHU9dGhpc1tvXS5zbGljZSgpO3JldHVybiBwKHMsZnVuY3Rpb24odCxlKXt2YXIgbj1jW1wib2JqZWN0XCI9PT1hP3Q6ZS5pZHhdO251bGw9PW4mJihuPXVbZS5pZHhdKSx1W2UuaWR4XT1pKG4sZSl9KSxoPygobj1sKGgodSkpKVtvXT11LG4pOmwodSl9LHAocyxmdW5jdGlvbihpLG4pe2wuZm5baV18fChsLmZuW2ldPWZ1bmN0aW9uKHMpe3ZhciBvLHI9dC50eXBlKHMpLGw9XCJhbHBoYVwiPT09aT90aGlzLl9oc2xhP1wiaHNsYVwiOlwicmdiYVwiOmUsaD10aGlzW2xdKCksYz1oW24uaWR4XTtyZXR1cm5cInVuZGVmaW5lZFwiPT09cj9jOihcImZ1bmN0aW9uXCI9PT1yJiYocz1zLmNhbGwodGhpcyxjKSxyPXQudHlwZShzKSksbnVsbD09cyYmbi5lbXB0eT90aGlzOihcInN0cmluZ1wiPT09ciYmKG89YS5leGVjKHMpKSYmKHM9YytwYXJzZUZsb2F0KG9bMl0pKihcIitcIj09PW9bMV0/MTotMSkpLGhbbi5pZHhdPXMsdGhpc1tsXShoKSkpfSl9KX0pLGwuaG9vaz1mdW5jdGlvbihlKXt2YXIgaT1lLnNwbGl0KFwiIFwiKTtwKGksZnVuY3Rpb24oZSxpKXt0LmNzc0hvb2tzW2ldPXtzZXQ6ZnVuY3Rpb24oZSxzKXt2YXIgbyxhLHI9XCJcIjtpZihcInRyYW5zcGFyZW50XCIhPT1zJiYoXCJzdHJpbmdcIiE9PXQudHlwZShzKXx8KG89bihzKSkpKXtpZihzPWwob3x8cyksIXUucmdiYSYmMSE9PXMuX3JnYmFbM10pe2ZvcihhPVwiYmFja2dyb3VuZENvbG9yXCI9PT1pP2UucGFyZW50Tm9kZTplOyhcIlwiPT09cnx8XCJ0cmFuc3BhcmVudFwiPT09cikmJmEmJmEuc3R5bGU7KXRyeXtyPXQuY3NzKGEsXCJiYWNrZ3JvdW5kQ29sb3JcIiksYT1hLnBhcmVudE5vZGV9Y2F0Y2godCl7fXM9cy5ibGVuZChyJiZcInRyYW5zcGFyZW50XCIhPT1yP3I6XCJfZGVmYXVsdFwiKX1zPXMudG9SZ2JhU3RyaW5nKCl9dHJ5e2Uuc3R5bGVbaV09c31jYXRjaCh0KXt9fX0sdC5meC5zdGVwW2ldPWZ1bmN0aW9uKGUpe2UuY29sb3JJbml0fHwoZS5zdGFydD1sKGUuZWxlbSxpKSxlLmVuZD1sKGUuZW5kKSxlLmNvbG9ySW5pdD0hMCksdC5jc3NIb29rc1tpXS5zZXQoZS5lbGVtLGUuc3RhcnQudHJhbnNpdGlvbihlLmVuZCxlLnBvcykpfX0pfSxsLmhvb2soXCJiYWNrZ3JvdW5kQ29sb3IgYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyTGVmdENvbG9yIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyVG9wQ29sb3IgY29sb3IgY29sdW1uUnVsZUNvbG9yIG91dGxpbmVDb2xvciB0ZXh0RGVjb3JhdGlvbkNvbG9yIHRleHRFbXBoYXNpc0NvbG9yXCIpLHQuY3NzSG9va3MuYm9yZGVyQ29sb3I9e2V4cGFuZDpmdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gcChbXCJUb3BcIixcIlJpZ2h0XCIsXCJCb3R0b21cIixcIkxlZnRcIl0sZnVuY3Rpb24oaSxuKXtlW1wiYm9yZGVyXCIrbitcIkNvbG9yXCJdPXR9KSxlfX0sbz10LkNvbG9yLm5hbWVzPXthcXVhOlwiIzAwZmZmZlwiLGJsYWNrOlwiIzAwMDAwMFwiLGJsdWU6XCIjMDAwMGZmXCIsZnVjaHNpYTpcIiNmZjAwZmZcIixncmF5OlwiIzgwODA4MFwiLGdyZWVuOlwiIzAwODAwMFwiLGxpbWU6XCIjMDBmZjAwXCIsbWFyb29uOlwiIzgwMDAwMFwiLG5hdnk6XCIjMDAwMDgwXCIsb2xpdmU6XCIjODA4MDAwXCIscHVycGxlOlwiIzgwMDA4MFwiLHJlZDpcIiNmZjAwMDBcIixzaWx2ZXI6XCIjYzBjMGMwXCIsdGVhbDpcIiMwMDgwODBcIix3aGl0ZTpcIiNmZmZmZmZcIix5ZWxsb3c6XCIjZmZmZjAwXCIsdHJhbnNwYXJlbnQ6W251bGwsbnVsbCxudWxsLDBdLF9kZWZhdWx0OlwiI2ZmZmZmZlwifX0oaCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZhciBpLG4scz1lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc/ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZSxudWxsKTplLmN1cnJlbnRTdHlsZSxvPXt9O2lmKHMmJnMubGVuZ3RoJiZzWzBdJiZzW3NbMF1dKWZvcihuPXMubGVuZ3RoO24tLTspXCJzdHJpbmdcIj09dHlwZW9mIHNbaT1zW25dXSYmKG9bdC5jYW1lbENhc2UoaSldPXNbaV0pO2Vsc2UgZm9yKGkgaW4gcylcInN0cmluZ1wiPT10eXBlb2Ygc1tpXSYmKG9baV09c1tpXSk7cmV0dXJuIG99ZnVuY3Rpb24gaShlLGkpe3ZhciBuLG8sYT17fTtmb3IobiBpbiBpKW89aVtuXSxlW25dIT09byYmKHNbbl18fCF0LmZ4LnN0ZXBbbl0mJmlzTmFOKHBhcnNlRmxvYXQobykpfHwoYVtuXT1vKSk7cmV0dXJuIGF9dmFyIG49W1wiYWRkXCIsXCJyZW1vdmVcIixcInRvZ2dsZVwiXSxzPXtib3JkZXI6MSxib3JkZXJCb3R0b206MSxib3JkZXJDb2xvcjoxLGJvcmRlckxlZnQ6MSxib3JkZXJSaWdodDoxLGJvcmRlclRvcDoxLGJvcmRlcldpZHRoOjEsbWFyZ2luOjEscGFkZGluZzoxfTt0LmVhY2goW1wiYm9yZGVyTGVmdFN0eWxlXCIsXCJib3JkZXJSaWdodFN0eWxlXCIsXCJib3JkZXJCb3R0b21TdHlsZVwiLFwiYm9yZGVyVG9wU3R5bGVcIl0sZnVuY3Rpb24oZSxpKXt0LmZ4LnN0ZXBbaV09ZnVuY3Rpb24odCl7KFwibm9uZVwiIT09dC5lbmQmJiF0LnNldEF0dHJ8fDE9PT10LnBvcyYmIXQuc2V0QXR0cikmJihoLnN0eWxlKHQuZWxlbSxpLHQuZW5kKSx0LnNldEF0dHI9ITApfX0pLHQuZm4uYWRkQmFja3x8KHQuZm4uYWRkQmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGQobnVsbD09dD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcih0KSl9KSx0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKHMsbyxhLHIpe3ZhciBsPXQuc3BlZWQobyxhLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIG8sYT10KHRoaXMpLHI9YS5hdHRyKFwiY2xhc3NcIil8fFwiXCIsaD1sLmNoaWxkcmVuP2EuZmluZChcIipcIikuYWRkQmFjaygpOmE7aD1oLm1hcChmdW5jdGlvbigpe3JldHVybntlbDp0KHRoaXMpLHN0YXJ0OmUodGhpcyl9fSksKG89ZnVuY3Rpb24oKXt0LmVhY2gobixmdW5jdGlvbih0LGUpe3NbZV0mJmFbZStcIkNsYXNzXCJdKHNbZV0pfSl9KSgpLGg9aC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9ZSh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9aSh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksYS5hdHRyKFwiY2xhc3NcIixyKSxoPWgubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXQuRGVmZXJyZWQoKSxuPXQuZXh0ZW5kKHt9LGwse3F1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7aS5yZXNvbHZlKGUpfX0pO3JldHVybiB0aGlzLmVsLmFuaW1hdGUodGhpcy5kaWZmLG4pLGkucHJvbWlzZSgpfSksdC53aGVuLmFwcGx5KHQsaC5nZXQoKSkuZG9uZShmdW5jdGlvbigpe28oKSx0LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbDt0LmVhY2godGhpcy5kaWZmLGZ1bmN0aW9uKHQpe2UuY3NzKHQsXCJcIil9KX0pLGwuY29tcGxldGUuY2FsbChhWzBdKX0pfSl9LHQuZm4uZXh0ZW5kKHthZGRDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxuLHMsbyl7cmV0dXJuIG4/dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse2FkZDppfSxuLHMsbyk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSh0LmZuLmFkZENsYXNzKSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxuLHMsbyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MT90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7cmVtb3ZlOml9LG4scyxvKTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KHQuZm4ucmVtb3ZlQ2xhc3MpLHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpLG4scyxvLGEpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2Ygbnx8dm9pZCAwPT09bj9zP3QuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLG4/e2FkZDppfTp7cmVtb3ZlOml9LHMsbyxhKTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOml9LG4scyxvKX19KHQuZm4udG9nZ2xlQ2xhc3MpLHN3aXRjaENsYXNzOmZ1bmN0aW9uKGUsaSxuLHMsbyl7cmV0dXJuIHQuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aSxyZW1vdmU6ZX0sbixzLG8pfX0pfSgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLGksbixzKXtyZXR1cm4gdC5pc1BsYWluT2JqZWN0KGUpJiYoaT1lLGU9ZS5lZmZlY3QpLGU9e2VmZmVjdDplfSxudWxsPT1pJiYoaT17fSksdC5pc0Z1bmN0aW9uKGkpJiYocz1pLG49bnVsbCxpPXt9KSwoXCJudW1iZXJcIj09dHlwZW9mIGl8fHQuZnguc3BlZWRzW2ldKSYmKHM9bixuPWksaT17fSksdC5pc0Z1bmN0aW9uKG4pJiYocz1uLG49bnVsbCksaSYmdC5leHRlbmQoZSxpKSxuPW58fGkuZHVyYXRpb24sZS5kdXJhdGlvbj10LmZ4Lm9mZj8wOlwibnVtYmVyXCI9PXR5cGVvZiBuP246biBpbiB0LmZ4LnNwZWVkcz90LmZ4LnNwZWVkc1tuXTp0LmZ4LnNwZWVkcy5fZGVmYXVsdCxlLmNvbXBsZXRlPXN8fGkuY29tcGxldGUsZX1mdW5jdGlvbiBpKGUpe3JldHVybiEoZSYmXCJudW1iZXJcIiE9dHlwZW9mIGUmJiF0LmZ4LnNwZWVkc1tlXSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhdC5lZmZlY3RzLmVmZmVjdFtlXXx8ISF0LmlzRnVuY3Rpb24oZSl8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiYhZS5lZmZlY3R9ZnVuY3Rpb24gbih0LGUpe3ZhciBpPWUub3V0ZXJXaWR0aCgpLG49ZS5vdXRlckhlaWdodCgpLHM9L15yZWN0XFwoKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKVxcKSQvLmV4ZWModCl8fFtcIlwiLDAsaSxuLDBdO3JldHVybnt0b3A6cGFyc2VGbG9hdChzWzFdKXx8MCxyaWdodDpcImF1dG9cIj09PXNbMl0/aTpwYXJzZUZsb2F0KHNbMl0pLGJvdHRvbTpcImF1dG9cIj09PXNbM10/bjpwYXJzZUZsb2F0KHNbM10pLGxlZnQ6cGFyc2VGbG9hdChzWzRdKXx8MH19dC5leHByJiZ0LmV4cHIuZmlsdGVycyYmdC5leHByLmZpbHRlcnMuYW5pbWF0ZWQmJih0LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISF0KGkpLmRhdGEobCl8fGUoaSl9fSh0LmV4cHIuZmlsdGVycy5hbmltYXRlZCkpLCExIT09dC51aUJhY2tDb21wYXQmJnQuZXh0ZW5kKHQuZWZmZWN0cyx7c2F2ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wLG49ZS5sZW5ndGg7aTxuO2krKyludWxsIT09ZVtpXSYmdC5kYXRhKFwidWktZWZmZWN0cy1cIitlW2ldLHRbMF0uc3R5bGVbZVtpXV0pfSxyZXN0b3JlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLG49MCxzPWUubGVuZ3RoO248cztuKyspbnVsbCE9PWVbbl0mJihpPXQuZGF0YShcInVpLWVmZmVjdHMtXCIrZVtuXSksdC5jc3MoZVtuXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInRvZ2dsZVwiPT09ZSYmKGU9dC5pcyhcIjpoaWRkZW5cIik/XCJzaG93XCI6XCJoaWRlXCIpLGV9LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7aWYoZS5wYXJlbnQoKS5pcyhcIi51aS1lZmZlY3RzLXdyYXBwZXJcIikpcmV0dXJuIGUucGFyZW50KCk7dmFyIGk9e3dpZHRoOmUub3V0ZXJXaWR0aCghMCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoITApLGZsb2F0OmUuY3NzKFwiZmxvYXRcIil9LG49dChcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKFwidWktZWZmZWN0cy13cmFwcGVyXCIpLmNzcyh7Zm9udFNpemU6XCIxMDAlXCIsYmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsYm9yZGVyOlwibm9uZVwiLG1hcmdpbjowLHBhZGRpbmc6MH0pLHM9e3dpZHRoOmUud2lkdGgoKSxoZWlnaHQ6ZS5oZWlnaHQoKX0sbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXtvLmlkfWNhdGNoKHQpe289ZG9jdW1lbnQuYm9keX1yZXR1cm4gZS53cmFwKG4pLChlWzBdPT09b3x8dC5jb250YWlucyhlWzBdLG8pKSYmdChvKS50cmlnZ2VyKFwiZm9jdXNcIiksbj1lLnBhcmVudCgpLFwic3RhdGljXCI9PT1lLmNzcyhcInBvc2l0aW9uXCIpPyhuLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwifSksZS5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIn0pKToodC5leHRlbmQoaSx7cG9zaXRpb246ZS5jc3MoXCJwb3NpdGlvblwiKSx6SW5kZXg6ZS5jc3MoXCJ6LWluZGV4XCIpfSksdC5lYWNoKFtcInRvcFwiLFwibGVmdFwiLFwiYm90dG9tXCIsXCJyaWdodFwiXSxmdW5jdGlvbih0LG4pe2lbbl09ZS5jc3MobiksaXNOYU4ocGFyc2VJbnQoaVtuXSwxMCkpJiYoaVtuXT1cImF1dG9cIil9KSxlLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLHRvcDowLGxlZnQ6MCxyaWdodDpcImF1dG9cIixib3R0b206XCJhdXRvXCJ9KSksZS5jc3Mocyksbi5jc3MoaSkuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIGUucGFyZW50KCkuaXMoXCIudWktZWZmZWN0cy13cmFwcGVyXCIpJiYoZS5wYXJlbnQoKS5yZXBsYWNlV2l0aChlKSwoZVswXT09PWl8fHQuY29udGFpbnMoZVswXSxpKSkmJnQoaSkudHJpZ2dlcihcImZvY3VzXCIpKSxlfX0pLHQuZXh0ZW5kKHQuZWZmZWN0cyx7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmluZTpmdW5jdGlvbihlLGksbil7cmV0dXJuIG58fChuPWksaT1cImVmZmVjdFwiKSx0LmVmZmVjdHMuZWZmZWN0W2VdPW4sdC5lZmZlY3RzLmVmZmVjdFtlXS5tb2RlPWksbn0sc2NhbGVkRGltZW5zaW9uczpmdW5jdGlvbih0LGUsaSl7aWYoMD09PWUpcmV0dXJue2hlaWdodDowLHdpZHRoOjAsb3V0ZXJIZWlnaHQ6MCxvdXRlcldpZHRoOjB9O3ZhciBuPVwiaG9yaXpvbnRhbFwiIT09aT8oZXx8MTAwKS8xMDA6MSxzPVwidmVydGljYWxcIiE9PWk/KGV8fDEwMCkvMTAwOjE7cmV0dXJue2hlaWdodDp0LmhlaWdodCgpKnMsd2lkdGg6dC53aWR0aCgpKm4sb3V0ZXJIZWlnaHQ6dC5vdXRlckhlaWdodCgpKnMsb3V0ZXJXaWR0aDp0Lm91dGVyV2lkdGgoKSpufX0sY2xpcFRvQm94OmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDp0LmNsaXAucmlnaHQtdC5jbGlwLmxlZnQsaGVpZ2h0OnQuY2xpcC5ib3R0b20tdC5jbGlwLnRvcCxsZWZ0OnQuY2xpcC5sZWZ0LHRvcDp0LmNsaXAudG9wfX0sdW5zaGlmdDpmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5xdWV1ZSgpO2U+MSYmbi5zcGxpY2UuYXBwbHkobixbMSwwXS5jb25jYXQobi5zcGxpY2UoZSxpKSkpLHQuZGVxdWV1ZSgpfSxzYXZlU3R5bGU6ZnVuY3Rpb24odCl7dC5kYXRhKFwidWktZWZmZWN0cy1zdHlsZVwiLHRbMF0uc3R5bGUuY3NzVGV4dCl9LHJlc3RvcmVTdHlsZTpmdW5jdGlvbih0KXt0WzBdLnN0eWxlLmNzc1RleHQ9dC5kYXRhKFwidWktZWZmZWN0cy1zdHlsZVwiKXx8XCJcIix0LnJlbW92ZURhdGEoXCJ1aS1lZmZlY3RzLXN0eWxlXCIpfSxtb2RlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5pcyhcIjpoaWRkZW5cIik7cmV0dXJuXCJ0b2dnbGVcIj09PWUmJihlPWk/XCJzaG93XCI6XCJoaWRlXCIpLChpP1wiaGlkZVwiPT09ZTpcInNob3dcIj09PWUpJiYoZT1cIm5vbmVcIiksZX0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxuO3N3aXRjaCh0WzBdKXtjYXNlXCJ0b3BcIjppPTA7YnJlYWs7Y2FzZVwibWlkZGxlXCI6aT0uNTticmVhaztjYXNlXCJib3R0b21cIjppPTE7YnJlYWs7ZGVmYXVsdDppPXRbMF0vZS5oZWlnaHR9c3dpdGNoKHRbMV0pe2Nhc2VcImxlZnRcIjpuPTA7YnJlYWs7Y2FzZVwiY2VudGVyXCI6bj0uNTticmVhaztjYXNlXCJyaWdodFwiOm49MTticmVhaztkZWZhdWx0Om49dFsxXS9lLndpZHRofXJldHVybnt4Om4seTppfX0sY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSl7dmFyIGksbj1lLmNzcyhcInBvc2l0aW9uXCIpLHM9ZS5wb3NpdGlvbigpO3JldHVybiBlLmNzcyh7bWFyZ2luVG9wOmUuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpbkJvdHRvbTplLmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OmUuY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDplLmNzcyhcIm1hcmdpblJpZ2h0XCIpfSkub3V0ZXJXaWR0aChlLm91dGVyV2lkdGgoKSkub3V0ZXJIZWlnaHQoZS5vdXRlckhlaWdodCgpKSwvXihzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KG4pJiYobj1cImFic29sdXRlXCIsaT10KFwiPFwiK2VbMF0ubm9kZU5hbWUrXCI+XCIpLmluc2VydEFmdGVyKGUpLmNzcyh7ZGlzcGxheTovXihpbmxpbmV8cnVieSkvLnRlc3QoZS5jc3MoXCJkaXNwbGF5XCIpKT9cImlubGluZS1ibG9ja1wiOlwiYmxvY2tcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsbWFyZ2luVG9wOmUuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpbkJvdHRvbTplLmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OmUuY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDplLmNzcyhcIm1hcmdpblJpZ2h0XCIpLGZsb2F0OmUuY3NzKFwiZmxvYXRcIil9KS5vdXRlcldpZHRoKGUub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodChlLm91dGVySGVpZ2h0KCkpLmFkZENsYXNzKFwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiKSxlLmRhdGEoXCJ1aS1lZmZlY3RzLXBsYWNlaG9sZGVyXCIsaSkpLGUuY3NzKHtwb3NpdGlvbjpuLGxlZnQ6cy5sZWZ0LHRvcDpzLnRvcH0pLGl9LHJlbW92ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiLGk9dC5kYXRhKGUpO2kmJihpLnJlbW92ZSgpLHQucmVtb3ZlRGF0YShlKSl9LGNsZWFuVXA6ZnVuY3Rpb24oZSl7dC5lZmZlY3RzLnJlc3RvcmVTdHlsZShlKSx0LmVmZmVjdHMucmVtb3ZlUGxhY2Vob2xkZXIoZSl9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24oZSxpLG4scyl7cmV0dXJuIHM9c3x8e30sdC5lYWNoKGksZnVuY3Rpb24odCxpKXt2YXIgbz1lLmNzc1VuaXQoaSk7b1swXT4wJiYoc1tpXT1vWzBdKm4rb1sxXSl9KSxzfX0pLHQuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIGkoKXt0LmlzRnVuY3Rpb24oaCkmJmguY2FsbChhWzBdKSx0LmlzRnVuY3Rpb24oZSkmJmUoKX12YXIgYT10KHRoaXMpO24ubW9kZT11LnNoaWZ0KCksITE9PT10LnVpQmFja0NvbXBhdHx8bz9cIm5vbmVcIj09PW4ubW9kZT8oYVtjXSgpLGkoKSk6cy5jYWxsKGFbMF0sbixmdW5jdGlvbigpe2EucmVtb3ZlRGF0YShsKSx0LmVmZmVjdHMuY2xlYW5VcChhKSxcImhpZGVcIj09PW4ubW9kZSYmYS5oaWRlKCksaSgpfSk6KGEuaXMoXCI6aGlkZGVuXCIpP1wiaGlkZVwiPT09YzpcInNob3dcIj09PWMpPyhhW2NdKCksaSgpKTpzLmNhbGwoYVswXSxuLGkpfXZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9dC5lZmZlY3RzLmVmZmVjdFtuLmVmZmVjdF0sbz1zLm1vZGUsYT1uLnF1ZXVlLHI9YXx8XCJmeFwiLGg9bi5jb21wbGV0ZSxjPW4ubW9kZSx1PVtdLGQ9ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKSxuPXQuZWZmZWN0cy5tb2RlKGksYyl8fG87aS5kYXRhKGwsITApLHUucHVzaChuKSxvJiYoXCJzaG93XCI9PT1ufHxuPT09byYmXCJoaWRlXCI9PT1uKSYmaS5zaG93KCksbyYmXCJub25lXCI9PT1ufHx0LmVmZmVjdHMuc2F2ZVN0eWxlKGkpLHQuaXNGdW5jdGlvbihlKSYmZSgpfTtyZXR1cm4gdC5meC5vZmZ8fCFzP2M/dGhpc1tjXShuLmR1cmF0aW9uLGgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2gmJmguY2FsbCh0aGlzKX0pOiExPT09YT90aGlzLmVhY2goZCkuZWFjaChpKTp0aGlzLnF1ZXVlKHIsZCkucXVldWUocixpKX0sc2hvdzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7aWYoaShuKSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMubW9kZT1cInNob3dcIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMscyl9fSh0LmZuLnNob3cpLGhpZGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGkobikpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBzPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBzLm1vZGU9XCJoaWRlXCIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLHMpfX0odC5mbi5oaWRlKSx0b2dnbGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGkobil8fFwiYm9vbGVhblwiPT10eXBlb2YgbilyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMubW9kZT1cInRvZ2dsZVwiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxzKX19KHQuZm4udG9nZ2xlKSxjc3NVbml0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuY3NzKGUpLG49W107cmV0dXJuIHQuZWFjaChbXCJlbVwiLFwicHhcIixcIiVcIixcInB0XCJdLGZ1bmN0aW9uKHQsZSl7aS5pbmRleE9mKGUpPjAmJihuPVtwYXJzZUZsb2F0KGkpLGVdKX0pLG59LGNzc0NsaXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dGhpcy5jc3MoXCJjbGlwXCIsXCJyZWN0KFwiK3QudG9wK1wicHggXCIrdC5yaWdodCtcInB4IFwiK3QuYm90dG9tK1wicHggXCIrdC5sZWZ0K1wicHgpXCIpOm4odGhpcy5jc3MoXCJjbGlwXCIpLHRoaXMpfSx0cmFuc2ZlcjpmdW5jdGlvbihlLGkpe3ZhciBuPXQodGhpcykscz10KGUudG8pLG89XCJmaXhlZFwiPT09cy5jc3MoXCJwb3NpdGlvblwiKSxhPXQoXCJib2R5XCIpLHI9bz9hLnNjcm9sbFRvcCgpOjAsbD1vP2Euc2Nyb2xsTGVmdCgpOjAsaD1zLm9mZnNldCgpLGM9e3RvcDpoLnRvcC1yLGxlZnQ6aC5sZWZ0LWwsaGVpZ2h0OnMuaW5uZXJIZWlnaHQoKSx3aWR0aDpzLmlubmVyV2lkdGgoKX0sdT1uLm9mZnNldCgpLGQ9dChcIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PlwiKS5hcHBlbmRUbyhcImJvZHlcIikuYWRkQ2xhc3MoZS5jbGFzc05hbWUpLmNzcyh7dG9wOnUudG9wLXIsbGVmdDp1LmxlZnQtbCxoZWlnaHQ6bi5pbm5lckhlaWdodCgpLHdpZHRoOm4uaW5uZXJXaWR0aCgpLHBvc2l0aW9uOm8/XCJmaXhlZFwiOlwiYWJzb2x1dGVcIn0pLmFuaW1hdGUoYyxlLmR1cmF0aW9uLGUuZWFzaW5nLGZ1bmN0aW9uKCl7ZC5yZW1vdmUoKSx0LmlzRnVuY3Rpb24oaSkmJmkoKX0pfX0pLHQuZnguc3RlcC5jbGlwPWZ1bmN0aW9uKGUpe2UuY2xpcEluaXR8fChlLnN0YXJ0PXQoZS5lbGVtKS5jc3NDbGlwKCksXCJzdHJpbmdcIj09dHlwZW9mIGUuZW5kJiYoZS5lbmQ9bihlLmVuZCxlLmVsZW0pKSxlLmNsaXBJbml0PSEwKSx0KGUuZWxlbSkuY3NzQ2xpcCh7dG9wOmUucG9zKihlLmVuZC50b3AtZS5zdGFydC50b3ApK2Uuc3RhcnQudG9wLHJpZ2h0OmUucG9zKihlLmVuZC5yaWdodC1lLnN0YXJ0LnJpZ2h0KStlLnN0YXJ0LnJpZ2h0LGJvdHRvbTplLnBvcyooZS5lbmQuYm90dG9tLWUuc3RhcnQuYm90dG9tKStlLnN0YXJ0LmJvdHRvbSxsZWZ0OmUucG9zKihlLmVuZC5sZWZ0LWUuc3RhcnQubGVmdCkrZS5zdGFydC5sZWZ0fSl9fSgpLGZ1bmN0aW9uKCl7dmFyIGU9e307dC5lYWNoKFtcIlF1YWRcIixcIkN1YmljXCIsXCJRdWFydFwiLFwiUXVpbnRcIixcIkV4cG9cIl0sZnVuY3Rpb24odCxpKXtlW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQrMil9fSksdC5leHRlbmQoZSx7U2luZTpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0Kk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX0sRWxhc3RpYzpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR8fDE9PT10P3Q6LU1hdGgucG93KDIsOCoodC0xKSkqTWF0aC5zaW4oKDgwKih0LTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooMyp0LTIpfSxCb3VuY2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9NDt0PCgoZT1NYXRoLnBvdygyLC0taSkpLTEpLzExOyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyplLTIpLzIyLXQsMil9fSksdC5lYWNoKGUsZnVuY3Rpb24oZSxpKXt0LmVhc2luZ1tcImVhc2VJblwiK2VdPWksdC5lYXNpbmdbXCJlYXNlT3V0XCIrZV09ZnVuY3Rpb24odCl7cmV0dXJuIDEtaSgxLXQpfSx0LmVhc2luZ1tcImVhc2VJbk91dFwiK2VdPWZ1bmN0aW9uKHQpe3JldHVybiB0PC41P2koMip0KS8yOjEtaSgtMip0KzIpLzJ9fSl9KCksdC5lZmZlY3RzLHQuZWZmZWN0cy5kZWZpbmUoXCJibGluZFwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49e3VwOltcImJvdHRvbVwiLFwidG9wXCJdLHZlcnRpY2FsOltcImJvdHRvbVwiLFwidG9wXCJdLGRvd246W1widG9wXCIsXCJib3R0b21cIl0sbGVmdDpbXCJyaWdodFwiLFwibGVmdFwiXSxob3Jpem9udGFsOltcInJpZ2h0XCIsXCJsZWZ0XCJdLHJpZ2h0OltcImxlZnRcIixcInJpZ2h0XCJdfSxzPXQodGhpcyksbz1lLmRpcmVjdGlvbnx8XCJ1cFwiLGE9cy5jc3NDbGlwKCkscj17Y2xpcDp0LmV4dGVuZCh7fSxhKX0sbD10LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIocyk7ci5jbGlwW25bb11bMF1dPXIuY2xpcFtuW29dWzFdXSxcInNob3dcIj09PWUubW9kZSYmKHMuY3NzQ2xpcChyLmNsaXApLGwmJmwuY3NzKHQuZWZmZWN0cy5jbGlwVG9Cb3gocikpLHIuY2xpcD1hKSxsJiZsLmFuaW1hdGUodC5lZmZlY3RzLmNsaXBUb0JveChyKSxlLmR1cmF0aW9uLGUuZWFzaW5nKSxzLmFuaW1hdGUocix7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcImJvdW5jZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvLGE9dCh0aGlzKSxyPWUubW9kZSxsPVwiaGlkZVwiPT09cixoPVwic2hvd1wiPT09cixjPWUuZGlyZWN0aW9ufHxcInVwXCIsdT1lLmRpc3RhbmNlLGQ9ZS50aW1lc3x8NSxwPTIqZCsoaHx8bD8xOjApLGY9ZS5kdXJhdGlvbi9wLGc9ZS5lYXNpbmcsbT1cInVwXCI9PT1jfHxcImRvd25cIj09PWM/XCJ0b3BcIjpcImxlZnRcIix2PVwidXBcIj09PWN8fFwibGVmdFwiPT09YyxiPTAsXz1hLnF1ZXVlKCkubGVuZ3RoO2Zvcih0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoYSksbz1hLmNzcyhtKSx1fHwodT1hW1widG9wXCI9PT1tP1wib3V0ZXJIZWlnaHRcIjpcIm91dGVyV2lkdGhcIl0oKS8zKSxoJiYoKHM9e29wYWNpdHk6MX0pW21dPW8sYS5jc3MoXCJvcGFjaXR5XCIsMCkuY3NzKG0sdj8yKi11OjIqdSkuYW5pbWF0ZShzLGYsZykpLGwmJih1Lz1NYXRoLnBvdygyLGQtMSkpLChzPXt9KVttXT1vO2I8ZDtiKyspKG49e30pW21dPSh2P1wiLT1cIjpcIis9XCIpK3UsYS5hbmltYXRlKG4sZixnKS5hbmltYXRlKHMsZixnKSx1PWw/Mip1OnUvMjtsJiYoKG49e29wYWNpdHk6MH0pW21dPSh2P1wiLT1cIjpcIis9XCIpK3UsYS5hbmltYXRlKG4sZixnKSksYS5xdWV1ZShpKSx0LmVmZmVjdHMudW5zaGlmdChhLF8scCsxKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJjbGlwXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgbixzPXt9LG89dCh0aGlzKSxhPWUuZGlyZWN0aW9ufHxcInZlcnRpY2FsXCIscj1cImJvdGhcIj09PWEsbD1yfHxcImhvcml6b250YWxcIj09PWEsaD1yfHxcInZlcnRpY2FsXCI9PT1hO249by5jc3NDbGlwKCkscy5jbGlwPXt0b3A6aD8obi5ib3R0b20tbi50b3ApLzI6bi50b3AscmlnaHQ6bD8obi5yaWdodC1uLmxlZnQpLzI6bi5yaWdodCxib3R0b206aD8obi5ib3R0b20tbi50b3ApLzI6bi5ib3R0b20sbGVmdDpsPyhuLnJpZ2h0LW4ubGVmdCkvMjpuLmxlZnR9LHQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihvKSxcInNob3dcIj09PWUubW9kZSYmKG8uY3NzQ2xpcChzLmNsaXApLHMuY2xpcD1uKSxvLmFuaW1hdGUocyx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcImRyb3BcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBuLHM9dCh0aGlzKSxvPVwic2hvd1wiPT09ZS5tb2RlLGE9ZS5kaXJlY3Rpb258fFwibGVmdFwiLHI9XCJ1cFwiPT09YXx8XCJkb3duXCI9PT1hP1widG9wXCI6XCJsZWZ0XCIsbD1cInVwXCI9PT1hfHxcImxlZnRcIj09PWE/XCItPVwiOlwiKz1cIixoPVwiKz1cIj09PWw/XCItPVwiOlwiKz1cIixjPXtvcGFjaXR5OjB9O3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihzKSxuPWUuZGlzdGFuY2V8fHNbXCJ0b3BcIj09PXI/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSghMCkvMixjW3JdPWwrbixvJiYocy5jc3MoYyksY1tyXT1oK24sYy5vcGFjaXR5PTEpLHMuYW5pbWF0ZShjLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZXhwbG9kZVwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gbigpe1xudi5wdXNoKHRoaXMpLHYubGVuZ3RoPT09Yyp1JiYoZC5jc3Moe3Zpc2liaWxpdHk6XCJ2aXNpYmxlXCJ9KSx0KHYpLnJlbW92ZSgpLGkoKSl9dmFyIHMsbyxhLHIsbCxoLGM9ZS5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQoZS5waWVjZXMpKTozLHU9YyxkPXQodGhpcykscD1cInNob3dcIj09PWUubW9kZSxmPWQuc2hvdygpLmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKS5vZmZzZXQoKSxnPU1hdGguY2VpbChkLm91dGVyV2lkdGgoKS91KSxtPU1hdGguY2VpbChkLm91dGVySGVpZ2h0KCkvYyksdj1bXTtmb3Iocz0wO3M8YztzKyspZm9yKHI9Zi50b3ArcyptLGg9cy0oYy0xKS8yLG89MDtvPHU7bysrKWE9Zi5sZWZ0K28qZyxsPW8tKHUtMSkvMixkLmNsb25lKCkuYXBwZW5kVG8oXCJib2R5XCIpLndyYXAoXCI8ZGl2PjwvZGl2PlwiKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix2aXNpYmlsaXR5OlwidmlzaWJsZVwiLGxlZnQ6LW8qZyx0b3A6LXMqbX0pLnBhcmVudCgpLmFkZENsYXNzKFwidWktZWZmZWN0cy1leHBsb2RlXCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLG92ZXJmbG93OlwiaGlkZGVuXCIsd2lkdGg6ZyxoZWlnaHQ6bSxsZWZ0OmErKHA/bCpnOjApLHRvcDpyKyhwP2gqbTowKSxvcGFjaXR5OnA/MDoxfSkuYW5pbWF0ZSh7bGVmdDphKyhwPzA6bCpnKSx0b3A6cisocD8wOmgqbSksb3BhY2l0eTpwPzE6MH0sZS5kdXJhdGlvbnx8NTAwLGUuZWFzaW5nLG4pfSksdC5lZmZlY3RzLmRlZmluZShcImZhZGVcIixcInRvZ2dsZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49XCJzaG93XCI9PT1lLm1vZGU7dCh0aGlzKS5jc3MoXCJvcGFjaXR5XCIsbj8wOjEpLmFuaW1hdGUoe29wYWNpdHk6bj8xOjB9LHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZm9sZFwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49dCh0aGlzKSxzPWUubW9kZSxvPVwic2hvd1wiPT09cyxhPVwiaGlkZVwiPT09cyxyPWUuc2l6ZXx8MTUsbD0vKFswLTldKyklLy5leGVjKHIpLGg9ZS5ob3JpekZpcnN0P1tcInJpZ2h0XCIsXCJib3R0b21cIl06W1wiYm90dG9tXCIsXCJyaWdodFwiXSxjPWUuZHVyYXRpb24vMix1PXQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKSxkPW4uY3NzQ2xpcCgpLHA9e2NsaXA6dC5leHRlbmQoe30sZCl9LGY9e2NsaXA6dC5leHRlbmQoe30sZCl9LGc9W2RbaFswXV0sZFtoWzFdXV0sbT1uLnF1ZXVlKCkubGVuZ3RoO2wmJihyPXBhcnNlSW50KGxbMV0sMTApLzEwMCpnW2E/MDoxXSkscC5jbGlwW2hbMF1dPXIsZi5jbGlwW2hbMF1dPXIsZi5jbGlwW2hbMV1dPTAsbyYmKG4uY3NzQ2xpcChmLmNsaXApLHUmJnUuY3NzKHQuZWZmZWN0cy5jbGlwVG9Cb3goZikpLGYuY2xpcD1kKSxuLnF1ZXVlKGZ1bmN0aW9uKGkpe3UmJnUuYW5pbWF0ZSh0LmVmZmVjdHMuY2xpcFRvQm94KHApLGMsZS5lYXNpbmcpLmFuaW1hdGUodC5lZmZlY3RzLmNsaXBUb0JveChmKSxjLGUuZWFzaW5nKSxpKCl9KS5hbmltYXRlKHAsYyxlLmVhc2luZykuYW5pbWF0ZShmLGMsZS5lYXNpbmcpLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KG4sbSw0KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJoaWdobGlnaHRcIixcInNob3dcIixmdW5jdGlvbihlLGkpe3ZhciBuPXQodGhpcykscz17YmFja2dyb3VuZENvbG9yOm4uY3NzKFwiYmFja2dyb3VuZENvbG9yXCIpfTtcImhpZGVcIj09PWUubW9kZSYmKHMub3BhY2l0eT0wKSx0LmVmZmVjdHMuc2F2ZVN0eWxlKG4pLG4uY3NzKHtiYWNrZ3JvdW5kSW1hZ2U6XCJub25lXCIsYmFja2dyb3VuZENvbG9yOmUuY29sb3J8fFwiI2ZmZmY5OVwifSkuYW5pbWF0ZShzLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2l6ZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvLGE9dCh0aGlzKSxyPVtcImZvbnRTaXplXCJdLGw9W1wiYm9yZGVyVG9wV2lkdGhcIixcImJvcmRlckJvdHRvbVdpZHRoXCIsXCJwYWRkaW5nVG9wXCIsXCJwYWRkaW5nQm90dG9tXCJdLGg9W1wiYm9yZGVyTGVmdFdpZHRoXCIsXCJib3JkZXJSaWdodFdpZHRoXCIsXCJwYWRkaW5nTGVmdFwiLFwicGFkZGluZ1JpZ2h0XCJdLGM9ZS5tb2RlLHU9XCJlZmZlY3RcIiE9PWMsZD1lLnNjYWxlfHxcImJvdGhcIixwPWUub3JpZ2lufHxbXCJtaWRkbGVcIixcImNlbnRlclwiXSxmPWEuY3NzKFwicG9zaXRpb25cIiksZz1hLnBvc2l0aW9uKCksbT10LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhhKSx2PWUuZnJvbXx8bSxiPWUudG98fHQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKGEsMCk7dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKGEpLFwic2hvd1wiPT09YyYmKG89dix2PWIsYj1vKSxzPXtmcm9tOnt5OnYuaGVpZ2h0L20uaGVpZ2h0LHg6di53aWR0aC9tLndpZHRofSx0bzp7eTpiLmhlaWdodC9tLmhlaWdodCx4OmIud2lkdGgvbS53aWR0aH19LFwiYm94XCIhPT1kJiZcImJvdGhcIiE9PWR8fChzLmZyb20ueSE9PXMudG8ueSYmKHY9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxsLHMuZnJvbS55LHYpLGI9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxsLHMudG8ueSxiKSkscy5mcm9tLnghPT1zLnRvLngmJih2PXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsaCxzLmZyb20ueCx2KSxiPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsaCxzLnRvLngsYikpKSxcImNvbnRlbnRcIiE9PWQmJlwiYm90aFwiIT09ZHx8cy5mcm9tLnkhPT1zLnRvLnkmJih2PXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEscixzLmZyb20ueSx2KSxiPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEscixzLnRvLnksYikpLHAmJihuPXQuZWZmZWN0cy5nZXRCYXNlbGluZShwLG0pLHYudG9wPShtLm91dGVySGVpZ2h0LXYub3V0ZXJIZWlnaHQpKm4ueStnLnRvcCx2LmxlZnQ9KG0ub3V0ZXJXaWR0aC12Lm91dGVyV2lkdGgpKm4ueCtnLmxlZnQsYi50b3A9KG0ub3V0ZXJIZWlnaHQtYi5vdXRlckhlaWdodCkqbi55K2cudG9wLGIubGVmdD0obS5vdXRlcldpZHRoLWIub3V0ZXJXaWR0aCkqbi54K2cubGVmdCksYS5jc3ModiksXCJjb250ZW50XCIhPT1kJiZcImJvdGhcIiE9PWR8fChsPWwuY29uY2F0KFtcIm1hcmdpblRvcFwiLFwibWFyZ2luQm90dG9tXCJdKS5jb25jYXQociksaD1oLmNvbmNhdChbXCJtYXJnaW5MZWZ0XCIsXCJtYXJnaW5SaWdodFwiXSksYS5maW5kKFwiKlt3aWR0aF1cIikuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcyksbj10LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhpKSxvPXtoZWlnaHQ6bi5oZWlnaHQqcy5mcm9tLnksd2lkdGg6bi53aWR0aCpzLmZyb20ueCxvdXRlckhlaWdodDpuLm91dGVySGVpZ2h0KnMuZnJvbS55LG91dGVyV2lkdGg6bi5vdXRlcldpZHRoKnMuZnJvbS54fSxhPXtoZWlnaHQ6bi5oZWlnaHQqcy50by55LHdpZHRoOm4ud2lkdGgqcy50by54LG91dGVySGVpZ2h0Om4uaGVpZ2h0KnMudG8ueSxvdXRlcldpZHRoOm4ud2lkdGgqcy50by54fTtzLmZyb20ueSE9PXMudG8ueSYmKG89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxsLHMuZnJvbS55LG8pLGE9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxsLHMudG8ueSxhKSkscy5mcm9tLnghPT1zLnRvLngmJihvPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksaCxzLmZyb20ueCxvKSxhPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksaCxzLnRvLngsYSkpLHUmJnQuZWZmZWN0cy5zYXZlU3R5bGUoaSksaS5jc3MobyksaS5hbmltYXRlKGEsZS5kdXJhdGlvbixlLmVhc2luZyxmdW5jdGlvbigpe3UmJnQuZWZmZWN0cy5yZXN0b3JlU3R5bGUoaSl9KX0pKSxhLmFuaW1hdGUoYix7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXt2YXIgZT1hLm9mZnNldCgpOzA9PT1iLm9wYWNpdHkmJmEuY3NzKFwib3BhY2l0eVwiLHYub3BhY2l0eSksdXx8KGEuY3NzKFwicG9zaXRpb25cIixcInN0YXRpY1wiPT09Zj9cInJlbGF0aXZlXCI6Zikub2Zmc2V0KGUpLHQuZWZmZWN0cy5zYXZlU3R5bGUoYSkpLGkoKX19KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJzY2FsZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49dCh0aGlzKSxzPWUubW9kZSxvPXBhcnNlSW50KGUucGVyY2VudCwxMCl8fCgwPT09cGFyc2VJbnQoZS5wZXJjZW50LDEwKT8wOlwiZWZmZWN0XCIhPT1zPzA6MTAwKSxhPXQuZXh0ZW5kKCEwLHtmcm9tOnQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKG4pLHRvOnQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKG4sbyxlLmRpcmVjdGlvbnx8XCJib3RoXCIpLG9yaWdpbjplLm9yaWdpbnx8W1wibWlkZGxlXCIsXCJjZW50ZXJcIl19LGUpO2UuZmFkZSYmKGEuZnJvbS5vcGFjaXR5PTEsYS50by5vcGFjaXR5PTApLHQuZWZmZWN0cy5lZmZlY3Quc2l6ZS5jYWxsKHRoaXMsYSxpKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJwdWZmXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgbj10LmV4dGVuZCghMCx7fSxlLHtmYWRlOiEwLHBlcmNlbnQ6cGFyc2VJbnQoZS5wZXJjZW50LDEwKXx8MTUwfSk7dC5lZmZlY3RzLmVmZmVjdC5zY2FsZS5jYWxsKHRoaXMsbixpKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJwdWxzYXRlXCIsXCJzaG93XCIsZnVuY3Rpb24oZSxpKXt2YXIgbj10KHRoaXMpLHM9ZS5tb2RlLG89XCJzaG93XCI9PT1zLGE9b3x8XCJoaWRlXCI9PT1zLHI9MiooZS50aW1lc3x8NSkrKGE/MTowKSxsPWUuZHVyYXRpb24vcixoPTAsYz0xLHU9bi5xdWV1ZSgpLmxlbmd0aDtmb3IoIW8mJm4uaXMoXCI6dmlzaWJsZVwiKXx8KG4uY3NzKFwib3BhY2l0eVwiLDApLnNob3coKSxoPTEpO2M8cjtjKyspbi5hbmltYXRlKHtvcGFjaXR5Omh9LGwsZS5lYXNpbmcpLGg9MS1oO24uYW5pbWF0ZSh7b3BhY2l0eTpofSxsLGUuZWFzaW5nKSxuLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KG4sdSxyKzEpfSksdC5lZmZlY3RzLmRlZmluZShcInNoYWtlXCIsZnVuY3Rpb24oZSxpKXt2YXIgbj0xLHM9dCh0aGlzKSxvPWUuZGlyZWN0aW9ufHxcImxlZnRcIixhPWUuZGlzdGFuY2V8fDIwLHI9ZS50aW1lc3x8MyxsPTIqcisxLGg9TWF0aC5yb3VuZChlLmR1cmF0aW9uL2wpLGM9XCJ1cFwiPT09b3x8XCJkb3duXCI9PT1vP1widG9wXCI6XCJsZWZ0XCIsdT1cInVwXCI9PT1vfHxcImxlZnRcIj09PW8sZD17fSxwPXt9LGY9e30sZz1zLnF1ZXVlKCkubGVuZ3RoO2Zvcih0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIocyksZFtjXT0odT9cIi09XCI6XCIrPVwiKSthLHBbY109KHU/XCIrPVwiOlwiLT1cIikrMiphLGZbY109KHU/XCItPVwiOlwiKz1cIikrMiphLHMuYW5pbWF0ZShkLGgsZS5lYXNpbmcpO248cjtuKyspcy5hbmltYXRlKHAsaCxlLmVhc2luZykuYW5pbWF0ZShmLGgsZS5lYXNpbmcpO3MuYW5pbWF0ZShwLGgsZS5lYXNpbmcpLmFuaW1hdGUoZCxoLzIsZS5lYXNpbmcpLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KHMsZyxsKzEpfSksdC5lZmZlY3RzLmRlZmluZShcInNsaWRlXCIsXCJzaG93XCIsZnVuY3Rpb24oZSxpKXt2YXIgbixzLG89dCh0aGlzKSxhPXt1cDpbXCJib3R0b21cIixcInRvcFwiXSxkb3duOltcInRvcFwiLFwiYm90dG9tXCJdLGxlZnQ6W1wicmlnaHRcIixcImxlZnRcIl0scmlnaHQ6W1wibGVmdFwiLFwicmlnaHRcIl19LHI9ZS5tb2RlLGw9ZS5kaXJlY3Rpb258fFwibGVmdFwiLGg9XCJ1cFwiPT09bHx8XCJkb3duXCI9PT1sP1widG9wXCI6XCJsZWZ0XCIsYz1cInVwXCI9PT1sfHxcImxlZnRcIj09PWwsdT1lLmRpc3RhbmNlfHxvW1widG9wXCI9PT1oP1wib3V0ZXJIZWlnaHRcIjpcIm91dGVyV2lkdGhcIl0oITApLGQ9e307dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKG8pLG49by5jc3NDbGlwKCkscz1vLnBvc2l0aW9uKClbaF0sZFtoXT0oYz8tMToxKSp1K3MsZC5jbGlwPW8uY3NzQ2xpcCgpLGQuY2xpcFthW2xdWzFdXT1kLmNsaXBbYVtsXVswXV0sXCJzaG93XCI9PT1yJiYoby5jc3NDbGlwKGQuY2xpcCksby5jc3MoaCxkW2hdKSxkLmNsaXA9bixkW2hdPXMpLG8uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSwhMSE9PXQudWlCYWNrQ29tcGF0JiZ0LmVmZmVjdHMuZGVmaW5lKFwidHJhbnNmZXJcIixmdW5jdGlvbihlLGkpe3QodGhpcykudHJhbnNmZXIoZSxpKX0pLHQudWkuZm9jdXNhYmxlPWZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvLGEscixsPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImFyZWFcIj09PWw/KHM9KG49ZS5wYXJlbnROb2RlKS5uYW1lLCEoIWUuaHJlZnx8IXN8fFwibWFwXCIhPT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiYobz10KFwiaW1nW3VzZW1hcD0nI1wiK3MrXCInXVwiKSkubGVuZ3RoPjAmJm8uaXMoXCI6dmlzaWJsZVwiKSk6KC9eKGlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b258b2JqZWN0KSQvLnRlc3QobCk/KGE9IWUuZGlzYWJsZWQpJiYocj10KGUpLmNsb3Nlc3QoXCJmaWVsZHNldFwiKVswXSkmJihhPSFyLmRpc2FibGVkKTphPVwiYVwiPT09bCYmZS5ocmVmfHxpLGEmJnQoZSkuaXMoXCI6dmlzaWJsZVwiKSYmZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQuY3NzKFwidmlzaWJpbGl0eVwiKTtcImluaGVyaXRcIj09PWU7KWU9KHQ9dC5wYXJlbnQoKSkuY3NzKFwidmlzaWJpbGl0eVwiKTtyZXR1cm5cImhpZGRlblwiIT09ZX0odChlKSkpfSx0LmV4dGVuZCh0LmV4cHJbXCI6XCJdLHtmb2N1c2FibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHQudWkuZm9jdXNhYmxlKGUsbnVsbCE9dC5hdHRyKGUsXCJ0YWJpbmRleFwiKSl9fSksdC51aS5mb2N1c2FibGUsdC5mbi5mb3JtPWZ1bmN0aW9uKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXNbMF0uZm9ybT90aGlzLmNsb3Nlc3QoXCJmb3JtXCIpOnQodGhpc1swXS5mb3JtKX0sdC51aS5mb3JtUmVzZXRNaXhpbj17X2Zvcm1SZXNldEhhbmRsZXI6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgaT1lLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKTt0LmVhY2goaSxmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSl9KX0sX2JpbmRGb3JtUmVzZXRIYW5kbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5mb3JtPXRoaXMuZWxlbWVudC5mb3JtKCksdGhpcy5mb3JtLmxlbmd0aCl7dmFyIHQ9dGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKXx8W107dC5sZW5ndGh8fHRoaXMuZm9ybS5vbihcInJlc2V0LnVpLWZvcm0tcmVzZXRcIix0aGlzLl9mb3JtUmVzZXRIYW5kbGVyKSx0LnB1c2godGhpcyksdGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiLHQpfX0sX3VuYmluZEZvcm1SZXNldEhhbmRsZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmZvcm0ubGVuZ3RoKXt2YXIgZT10aGlzLmZvcm0uZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIpO2Uuc3BsaWNlKHQuaW5BcnJheSh0aGlzLGUpLDEpLGUubGVuZ3RoP3RoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIixlKTp0aGlzLmZvcm0ucmVtb3ZlRGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIpLm9mZihcInJlc2V0LnVpLWZvcm0tcmVzZXRcIil9fX0sXCIxLjdcIj09PXQuZm4uanF1ZXJ5LnN1YnN0cmluZygwLDMpJiYodC5lYWNoKFtcIldpZHRoXCIsXCJIZWlnaHRcIl0sZnVuY3Rpb24oZSxpKXtmdW5jdGlvbiBuKGUsaSxuLG8pe3JldHVybiB0LmVhY2gocyxmdW5jdGlvbigpe2ktPXBhcnNlRmxvYXQodC5jc3MoZSxcInBhZGRpbmdcIit0aGlzKSl8fDAsbiYmKGktPXBhcnNlRmxvYXQodC5jc3MoZSxcImJvcmRlclwiK3RoaXMrXCJXaWR0aFwiKSl8fDApLG8mJihpLT1wYXJzZUZsb2F0KHQuY3NzKGUsXCJtYXJnaW5cIit0aGlzKSl8fDApfSksaX12YXIgcz1cIldpZHRoXCI9PT1pP1tcIkxlZnRcIixcIlJpZ2h0XCJdOltcIlRvcFwiLFwiQm90dG9tXCJdLG89aS50b0xvd2VyQ2FzZSgpLGE9e2lubmVyV2lkdGg6dC5mbi5pbm5lcldpZHRoLGlubmVySGVpZ2h0OnQuZm4uaW5uZXJIZWlnaHQsb3V0ZXJXaWR0aDp0LmZuLm91dGVyV2lkdGgsb3V0ZXJIZWlnaHQ6dC5mbi5vdXRlckhlaWdodH07dC5mbltcImlubmVyXCIraV09ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/YVtcImlubmVyXCIraV0uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmNzcyhvLG4odGhpcyxlKStcInB4XCIpfSl9LHQuZm5bXCJvdXRlclwiK2ldPWZ1bmN0aW9uKGUscyl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGU/YVtcIm91dGVyXCIraV0uY2FsbCh0aGlzLGUpOnRoaXMuZWFjaChmdW5jdGlvbigpe3QodGhpcykuY3NzKG8sbih0aGlzLGUsITAscykrXCJweFwiKX0pfX0pLHQuZm4uYWRkQmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGQobnVsbD09dD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcih0KSl9KSx0LnVpLmtleUNvZGU9e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fSx0LnVpLmVzY2FwZVNlbGVjdG9yPWZ1bmN0aW9uKCl7dmFyIHQ9LyhbIVwiIyQlJicoKSorLC5cXC86Ozw9Pj9AW1xcXV5ge3x9fl0pL2c7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UodCxcIlxcXFwkMVwiKX19KCksdC5mbi5sYWJlbHM9ZnVuY3Rpb24oKXt2YXIgZSxpLG4scyxvO3JldHVybiB0aGlzWzBdLmxhYmVscyYmdGhpc1swXS5sYWJlbHMubGVuZ3RoP3RoaXMucHVzaFN0YWNrKHRoaXNbMF0ubGFiZWxzKToocz10aGlzLmVxKDApLnBhcmVudHMoXCJsYWJlbFwiKSwobj10aGlzLmF0dHIoXCJpZFwiKSkmJihvPShlPXRoaXMuZXEoMCkucGFyZW50cygpLmxhc3QoKSkuYWRkKGUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLnNpYmxpbmdzKCkpLGk9XCJsYWJlbFtmb3I9J1wiK3QudWkuZXNjYXBlU2VsZWN0b3IobikrXCInXVwiLHM9cy5hZGQoby5maW5kKGkpLmFkZEJhY2soaSkpKSx0aGlzLnB1c2hTdGFjayhzKSl9LHQuZm4uc2Nyb2xsUGFyZW50PWZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuY3NzKFwicG9zaXRpb25cIiksbj1cImFic29sdXRlXCI9PT1pLHM9ZT8vKGF1dG98c2Nyb2xsfGhpZGRlbikvOi8oYXV0b3xzY3JvbGwpLyxvPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuKCFufHxcInN0YXRpY1wiIT09ZS5jc3MoXCJwb3NpdGlvblwiKSkmJnMudGVzdChlLmNzcyhcIm92ZXJmbG93XCIpK2UuY3NzKFwib3ZlcmZsb3cteVwiKStlLmNzcyhcIm92ZXJmbG93LXhcIikpfSkuZXEoMCk7cmV0dXJuXCJmaXhlZFwiIT09aSYmby5sZW5ndGg/bzp0KHRoaXNbMF0ub3duZXJEb2N1bWVudHx8ZG9jdW1lbnQpfSx0LmV4dGVuZCh0LmV4cHJbXCI6XCJdLHt0YWJiYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10LmF0dHIoZSxcInRhYmluZGV4XCIpLG49bnVsbCE9aTtyZXR1cm4oIW58fGk+PTApJiZ0LnVpLmZvY3VzYWJsZShlLG4pfX0pLHQuZm4uZXh0ZW5kKHt1bmlxdWVJZDpmdW5jdGlvbigpe3ZhciB0PTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuaWR8fCh0aGlzLmlkPVwidWktaWQtXCIrICsrdCl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cXGQrJC8udGVzdCh0aGlzLmlkKSYmdCh0aGlzKS5yZW1vdmVBdHRyKFwiaWRcIil9KX19KSx0LndpZGdldChcInVpLmFjY29yZGlvblwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7YWN0aXZlOjAsYW5pbWF0ZTp7fSxjbGFzc2VzOntcInVpLWFjY29yZGlvbi1oZWFkZXJcIjpcInVpLWNvcm5lci10b3BcIixcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1hY2NvcmRpb24tY29udGVudFwiOlwidWktY29ybmVyLWJvdHRvbVwifSxjb2xsYXBzaWJsZTohMSxldmVudDpcImNsaWNrXCIsaGVhZGVyOlwiPiBsaSA+IDpmaXJzdC1jaGlsZCwgPiA6bm90KGxpKTpldmVuXCIsaGVpZ2h0U3R5bGU6XCJhdXRvXCIsaWNvbnM6e2FjdGl2ZUhlYWRlcjpcInVpLWljb24tdHJpYW5nbGUtMS1zXCIsaGVhZGVyOlwidWktaWNvbi10cmlhbmdsZS0xLWVcIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxoaWRlUHJvcHM6e2JvcmRlclRvcFdpZHRoOlwiaGlkZVwiLGJvcmRlckJvdHRvbVdpZHRoOlwiaGlkZVwiLHBhZGRpbmdUb3A6XCJoaWRlXCIscGFkZGluZ0JvdHRvbTpcImhpZGVcIixoZWlnaHQ6XCJoaWRlXCJ9LHNob3dQcm9wczp7Ym9yZGVyVG9wV2lkdGg6XCJzaG93XCIsYm9yZGVyQm90dG9tV2lkdGg6XCJzaG93XCIscGFkZGluZ1RvcDpcInNob3dcIixwYWRkaW5nQm90dG9tOlwic2hvd1wiLGhlaWdodDpcInNob3dcIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLnByZXZTaG93PXRoaXMucHJldkhpZGU9dCgpLHRoaXMuX2FkZENsYXNzKFwidWktYWNjb3JkaW9uXCIsXCJ1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0XCIpLHRoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwidGFibGlzdFwiKSxlLmNvbGxhcHNpYmxlfHwhMSE9PWUuYWN0aXZlJiZudWxsIT1lLmFjdGl2ZXx8KGUuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSxlLmFjdGl2ZTwwJiYoZS5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTp0KCl9fSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgZSxpLG49dGhpcy5vcHRpb25zLmljb25zO24mJihlPXQoXCI8c3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3MoZSxcInVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiLFwidWktaWNvbiBcIituLmhlYWRlciksZS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSxpPXRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhpLG4uaGVhZGVyKS5fYWRkQ2xhc3MoaSxudWxsLG4uYWN0aXZlSGVhZGVyKS5fYWRkQ2xhc3ModGhpcy5oZWFkZXJzLFwidWktYWNjb3JkaW9uLWljb25zXCIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaGVhZGVycyxcInVpLWFjY29yZGlvbi1pY29uc1wiKSx0aGlzLmhlYWRlcnMuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLnJlbW92ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciB0O3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwicm9sZVwiKSx0aGlzLmhlYWRlcnMucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1leHBhbmRlZCBhcmlhLXNlbGVjdGVkIGFyaWEtY29udHJvbHMgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLl9kZXN0cm95SWNvbnMoKSx0PXRoaXMuaGVhZGVycy5uZXh0KCkuY3NzKFwiZGlzcGxheVwiLFwiXCIpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtaGlkZGVuIGFyaWEtbGFiZWxsZWRieVwiKS5yZW1vdmVVbmlxdWVJZCgpLFwiY29udGVudFwiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZ0LmNzcyhcImhlaWdodFwiLFwiXCIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7XCJhY3RpdmVcIiE9PXQ/KFwiZXZlbnRcIj09PXQmJih0aGlzLm9wdGlvbnMuZXZlbnQmJnRoaXMuX29mZih0aGlzLmhlYWRlcnMsdGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEV2ZW50cyhlKSksdGhpcy5fc3VwZXIodCxlKSxcImNvbGxhcHNpYmxlXCIhPT10fHxlfHwhMSE9PXRoaXMub3B0aW9ucy5hY3RpdmV8fHRoaXMuX2FjdGl2YXRlKDApLFwiaWNvbnNcIj09PXQmJih0aGlzLl9kZXN0cm95SWNvbnMoKSxlJiZ0aGlzLl9jcmVhdGVJY29ucygpKSk6dGhpcy5fYWN0aXZhdGUoZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSksbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sX2tleWRvd246ZnVuY3Rpb24oZSl7aWYoIWUuYWx0S2V5JiYhZS5jdHJsS2V5KXt2YXIgaT10LnVpLmtleUNvZGUsbj10aGlzLmhlYWRlcnMubGVuZ3RoLHM9dGhpcy5oZWFkZXJzLmluZGV4KGUudGFyZ2V0KSxvPSExO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgaS5SSUdIVDpjYXNlIGkuRE9XTjpvPXRoaXMuaGVhZGVyc1socysxKSVuXTticmVhaztjYXNlIGkuTEVGVDpjYXNlIGkuVVA6bz10aGlzLmhlYWRlcnNbKHMtMStuKSVuXTticmVhaztjYXNlIGkuU1BBQ0U6Y2FzZSBpLkVOVEVSOnRoaXMuX2V2ZW50SGFuZGxlcihlKTticmVhaztjYXNlIGkuSE9NRTpvPXRoaXMuaGVhZGVyc1swXTticmVhaztjYXNlIGkuRU5EOm89dGhpcy5oZWFkZXJzW24tMV19byYmKHQoZS50YXJnZXQpLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSx0KG8pLmF0dHIoXCJ0YWJJbmRleFwiLDApLHQobykudHJpZ2dlcihcImZvY3VzXCIpLGUucHJldmVudERlZmF1bHQoKSl9fSxfcGFuZWxLZXlEb3duOmZ1bmN0aW9uKGUpe2Uua2V5Q29kZT09PXQudWkua2V5Q29kZS5VUCYmZS5jdHJsS2V5JiZ0KGUuY3VycmVudFRhcmdldCkucHJldigpLnRyaWdnZXIoXCJmb2N1c1wiKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLl9wcm9jZXNzUGFuZWxzKCksITE9PT1lLmFjdGl2ZSYmITA9PT1lLmNvbGxhcHNpYmxlfHwhdGhpcy5oZWFkZXJzLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTohMT09PWUuYWN0aXZlP3RoaXMuX2FjdGl2YXRlKDApOnRoaXMuYWN0aXZlLmxlbmd0aCYmIXQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLmhlYWRlcnMubGVuZ3RoPT09dGhpcy5oZWFkZXJzLmZpbmQoXCIudWktc3RhdGUtZGlzYWJsZWRcIikubGVuZ3RoPyhlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsZS5hY3RpdmUtMSkpOmUuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVhZGVycyxlPXRoaXMucGFuZWxzO3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlYWRlcnMsXCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIsXCJ1aS1zdGF0ZS1kZWZhdWx0XCIpLHRoaXMucGFuZWxzPXRoaXMuaGVhZGVycy5uZXh0KCkuZmlsdGVyKFwiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKVwiKS5oaWRlKCksdGhpcy5fYWRkQ2xhc3ModGhpcy5wYW5lbHMsXCJ1aS1hY2NvcmRpb24tY29udGVudFwiLFwidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50XCIpLGUmJih0aGlzLl9vZmYodC5ub3QodGhpcy5oZWFkZXJzKSksdGhpcy5fb2ZmKGUubm90KHRoaXMucGFuZWxzKSkpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5vcHRpb25zLG49aS5oZWlnaHRTdHlsZSxzPXRoaXMuZWxlbWVudC5wYXJlbnQoKTt0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFjdGl2ZSxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIikuX3JlbW92ZUNsYXNzKHRoaXMuYWN0aXZlLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5hY3RpdmUubmV4dCgpLFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpLHRoaXMuYWN0aXZlLm5leHQoKS5zaG93KCksdGhpcy5oZWFkZXJzLmF0dHIoXCJyb2xlXCIsXCJ0YWJcIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksaT1lLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpLG49ZS5uZXh0KCkscz1uLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpO2UuYXR0cihcImFyaWEtY29udHJvbHNcIixzKSxuLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixpKX0pLm5leHQoKS5hdHRyKFwicm9sZVwiLFwidGFicGFuZWxcIiksdGhpcy5oZWFkZXJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIix0YWJJbmRleDotMX0pLm5leHQoKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KS5oaWRlKCksdGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KS5uZXh0KCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIn0pOnRoaXMuaGVhZGVycy5lcSgwKS5hdHRyKFwidGFiSW5kZXhcIiwwKSx0aGlzLl9jcmVhdGVJY29ucygpLHRoaXMuX3NldHVwRXZlbnRzKGkuZXZlbnQpLFwiZmlsbFwiPT09bj8oZT1zLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncyhcIjp2aXNpYmxlXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLG49aS5jc3MoXCJwb3NpdGlvblwiKTtcImFic29sdXRlXCIhPT1uJiZcImZpeGVkXCIhPT1uJiYoZS09aS5vdXRlckhlaWdodCghMCkpfSksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXtlLT10KHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe3QodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsZS10KHRoaXMpLmlubmVySGVpZ2h0KCkrdCh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIikpOlwiYXV0b1wiPT09biYmKGU9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLmlzKFwiOnZpc2libGVcIik7aXx8dCh0aGlzKS5zaG93KCksZT1NYXRoLm1heChlLHQodGhpcykuY3NzKFwiaGVpZ2h0XCIsXCJcIikuaGVpZ2h0KCkpLGl8fHQodGhpcykuaGlkZSgpfSkuaGVpZ2h0KGUpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2ZpbmRBY3RpdmUoZSlbMF07aSE9PXRoaXMuYWN0aXZlWzBdJiYoaT1pfHx0aGlzLmFjdGl2ZVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDppLGN1cnJlbnRUYXJnZXQ6aSxwcmV2ZW50RGVmYXVsdDp0Lm5vb3B9KSl9LF9maW5kQWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP3RoaXMuaGVhZGVycy5lcShlKTp0KCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbihlKXt2YXIgaT17a2V5ZG93bjpcIl9rZXlkb3duXCJ9O2UmJnQuZWFjaChlLnNwbGl0KFwiIFwiKSxmdW5jdGlvbih0LGUpe2lbZV09XCJfZXZlbnRIYW5kbGVyXCJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLGkpLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246XCJfcGFuZWxLZXlEb3duXCJ9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oZWFkZXJzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oZWFkZXJzKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgaSxuLHM9dGhpcy5vcHRpb25zLG89dGhpcy5hY3RpdmUsYT10KGUuY3VycmVudFRhcmdldCkscj1hWzBdPT09b1swXSxsPXImJnMuY29sbGFwc2libGUsaD1sP3QoKTphLm5leHQoKSxjPW8ubmV4dCgpLHU9e29sZEhlYWRlcjpvLG9sZFBhbmVsOmMsbmV3SGVhZGVyOmw/dCgpOmEsbmV3UGFuZWw6aH07ZS5wcmV2ZW50RGVmYXVsdCgpLHImJiFzLmNvbGxhcHNpYmxlfHwhMT09PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVBY3RpdmF0ZVwiLGUsdSl8fChzLmFjdGl2ZT0hbCYmdGhpcy5oZWFkZXJzLmluZGV4KGEpLHRoaXMuYWN0aXZlPXI/dCgpOmEsdGhpcy5fdG9nZ2xlKHUpLHRoaXMuX3JlbW92ZUNsYXNzKG8sXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLHMuaWNvbnMmJihpPW8uY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCxzLmljb25zLmFjdGl2ZUhlYWRlcikuX2FkZENsYXNzKGksbnVsbCxzLmljb25zLmhlYWRlcikpLHJ8fCh0aGlzLl9yZW1vdmVDbGFzcyhhLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIikuX2FkZENsYXNzKGEsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLHMuaWNvbnMmJihuPWEuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKG4sbnVsbCxzLmljb25zLmhlYWRlcikuX2FkZENsYXNzKG4sbnVsbCxzLmljb25zLmFjdGl2ZUhlYWRlcikpLHRoaXMuX2FkZENsYXNzKGEubmV4dCgpLFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpKSl9LF90b2dnbGU6ZnVuY3Rpb24oZSl7dmFyIGk9ZS5uZXdQYW5lbCxuPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6ZS5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PWksdGhpcy5wcmV2SGlkZT1uLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUoaSxuLGUpOihuLmhpZGUoKSxpLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZShlKSksbi5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KSxuLnByZXYoKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSksaS5sZW5ndGgmJm4ubGVuZ3RoP24ucHJldigpLmF0dHIoe3RhYkluZGV4Oi0xLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pOmkubGVuZ3RoJiZ0aGlzLmhlYWRlcnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1wYXJzZUludCh0KHRoaXMpLmF0dHIoXCJ0YWJJbmRleFwiKSwxMCl9KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksaS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLnByZXYoKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcInRydWVcIix0YWJJbmRleDowfSl9LF9hbmltYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG8sYT10aGlzLHI9MCxsPXQuY3NzKFwiYm94LXNpemluZ1wiKSxoPXQubGVuZ3RoJiYoIWUubGVuZ3RofHx0LmluZGV4KCk8ZS5pbmRleCgpKSxjPXRoaXMub3B0aW9ucy5hbmltYXRlfHx7fSx1PWgmJmMuZG93bnx8YyxkPWZ1bmN0aW9uKCl7YS5fdG9nZ2xlQ29tcGxldGUoaSl9O3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB1JiYobz11KSxcInN0cmluZ1wiPT10eXBlb2YgdSYmKHM9dSkscz1zfHx1LmVhc2luZ3x8Yy5lYXNpbmcsbz1vfHx1LmR1cmF0aW9ufHxjLmR1cmF0aW9uLGUubGVuZ3RoP3QubGVuZ3RoPyhuPXQuc2hvdygpLm91dGVySGVpZ2h0KCksZS5hbmltYXRlKHRoaXMuaGlkZVByb3BzLHtkdXJhdGlvbjpvLGVhc2luZzpzLHN0ZXA6ZnVuY3Rpb24odCxlKXtlLm5vdz1NYXRoLnJvdW5kKHQpfX0pLHZvaWQgdC5oaWRlKCkuYW5pbWF0ZSh0aGlzLnNob3dQcm9wcyx7ZHVyYXRpb246byxlYXNpbmc6cyxjb21wbGV0ZTpkLHN0ZXA6ZnVuY3Rpb24odCxpKXtpLm5vdz1NYXRoLnJvdW5kKHQpLFwiaGVpZ2h0XCIhPT1pLnByb3A/XCJjb250ZW50LWJveFwiPT09bCYmKHIrPWkubm93KTpcImNvbnRlbnRcIiE9PWEub3B0aW9ucy5oZWlnaHRTdHlsZSYmKGkubm93PU1hdGgucm91bmQobi1lLm91dGVySGVpZ2h0KCktcikscj0wKX19KSk6ZS5hbmltYXRlKHRoaXMuaGlkZVByb3BzLG8scyxkKTp0LmFuaW1hdGUodGhpcy5zaG93UHJvcHMsbyxzLGQpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5vbGRQYW5lbCxpPWUucHJldigpO3RoaXMuX3JlbW92ZUNsYXNzKGUsXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIpLl9hZGRDbGFzcyhpLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIiksZS5sZW5ndGgmJihlLnBhcmVudCgpWzBdLmNsYXNzTmFtZT1lLnBhcmVudCgpWzBdLmNsYXNzTmFtZSksdGhpcy5fdHJpZ2dlcihcImFjdGl2YXRlXCIsbnVsbCx0KX19KSx0LnVpLnNhZmVBY3RpdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXQuYWN0aXZlRWxlbWVudH1jYXRjaChpKXtlPXQuYm9keX1yZXR1cm4gZXx8KGU9dC5ib2R5KSxlLm5vZGVOYW1lfHwoZT10LmJvZHkpLGV9LHQud2lkZ2V0KFwidWkubWVudVwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8dWw+XCIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OlwidWktaWNvbi1jYXJldC0xLWVcIn0saXRlbXM6XCI+ICpcIixtZW51czpcInVsXCIscG9zaXRpb246e215OlwibGVmdCB0b3BcIixhdDpcInJpZ2h0IHRvcFwifSxyb2xlOlwibWVudVwiLGJsdXI6bnVsbCxmb2N1czpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVNZW51PXRoaXMuZWxlbWVudCx0aGlzLm1vdXNlSGFuZGxlZD0hMSx0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLHRhYkluZGV4OjB9KSx0aGlzLl9hZGRDbGFzcyhcInVpLW1lbnVcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl9vbih7XCJtb3VzZWRvd24gLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sXCJjbGljayAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24oZSl7dmFyIGk9dChlLnRhcmdldCksbj10KHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpOyF0aGlzLm1vdXNlSGFuZGxlZCYmaS5ub3QoXCIudWktc3RhdGUtZGlzYWJsZWRcIikubGVuZ3RoJiYodGhpcy5zZWxlY3QoZSksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpfHwodGhpcy5tb3VzZUhhbmRsZWQ9ITApLGkuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOiF0aGlzLmVsZW1lbnQuaXMoXCI6Zm9jdXNcIikmJm4uY2xvc2VzdChcIi51aS1tZW51XCIpLmxlbmd0aCYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIixbITBdKSx0aGlzLmFjdGl2ZSYmMT09PXRoaXMuYWN0aXZlLnBhcmVudHMoXCIudWktbWVudVwiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSxcIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnByZXZpb3VzRmlsdGVyKXt2YXIgaT10KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKSxuPXQoZS5jdXJyZW50VGFyZ2V0KTtpWzBdPT09blswXSYmKHRoaXMuX3JlbW92ZUNsYXNzKG4uc2libGluZ3MoKS5jaGlsZHJlbihcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmZvY3VzKGUsbikpfX0sbW91c2VsZWF2ZTpcImNvbGxhcHNlQWxsXCIsXCJtb3VzZWxlYXZlIC51aS1tZW51XCI6XCJjb2xsYXBzZUFsbFwiLGZvY3VzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZXEoMCk7ZXx8dGhpcy5mb2N1cyh0LGkpfSxibHVyOmZ1bmN0aW9uKGUpe3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7IXQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpJiZ0aGlzLmNvbGxhcHNlQWxsKGUpfSl9LGtleWRvd246XCJfa2V5ZG93blwifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fY2xvc2VPbkRvY3VtZW50Q2xpY2sodCkmJnRoaXMuY29sbGFwc2VBbGwodCksdGhpcy5tb3VzZUhhbmRsZWQ9ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1pdGVtXCIpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtZGlzYWJsZWRcIikuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVBdHRyKFwidGFiSW5kZXggcm9sZSBhcmlhLWhhc3BvcHVwXCIpO3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpLmZpbmQoXCIudWktbWVudVwiKS5hZGRCYWNrKCkucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1sYWJlbGxlZGJ5IGFyaWEtZXhwYW5kZWQgYXJpYS1oaWRkZW4gYXJpYS1kaXNhYmxlZCB0YWJJbmRleFwiKS5yZW1vdmVVbmlxdWVJZCgpLnNob3coKSxlLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5kYXRhKFwidWktbWVudS1zdWJtZW51LWNhcmV0XCIpJiZlLnJlbW92ZSgpfSl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvLGE9ITA7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDp0aGlzLnByZXZpb3VzUGFnZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046dGhpcy5uZXh0UGFnZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5IT01FOnRoaXMuX21vdmUoXCJmaXJzdFwiLFwiZmlyc3RcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6dGhpcy5fbW92ZShcImxhc3RcIixcImxhc3RcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZ0aGlzLmV4cGFuZChlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTlRFUjpjYXNlIHQudWkua2V5Q29kZS5TUEFDRTp0aGlzLl9hY3RpdmF0ZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jb2xsYXBzZShlKTticmVhaztkZWZhdWx0OmE9ITEsbj10aGlzLnByZXZpb3VzRmlsdGVyfHxcIlwiLG89ITEscz1lLmtleUNvZGU+PTk2JiZlLmtleUNvZGU8PTEwNT8oZS5rZXlDb2RlLTk2KS50b1N0cmluZygpOlN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lcikscz09PW4/bz0hMDpzPW4rcyxpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhzKSwoaT1vJiYtMSE9PWkuaW5kZXgodGhpcy5hY3RpdmUubmV4dCgpKT90aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKTppKS5sZW5ndGh8fChzPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSxpPXRoaXMuX2ZpbHRlck1lbnVJdGVtcyhzKSksaS5sZW5ndGg/KHRoaXMuZm9jdXMoZSxpKSx0aGlzLnByZXZpb3VzRmlsdGVyPXMsdGhpcy5maWx0ZXJUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfSwxZTMpKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn1hJiZlLnByZXZlbnREZWZhdWx0KCl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiYodGhpcy5hY3RpdmUuY2hpbGRyZW4oXCJbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddXCIpLmxlbmd0aD90aGlzLmV4cGFuZCh0KTp0aGlzLnNlbGVjdCh0KSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSxpLG4scyxvPXRoaXMsYT10aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSxyPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5tZW51cyk7dGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS1tZW51LWljb25zXCIsbnVsbCwhIXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLWljb25cIikubGVuZ3RoKSxpPXIuZmlsdGVyKFwiOm5vdCgudWktbWVudSlcIikuaGlkZSgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5wcmV2KCksbj10KFwiPHNwYW4+XCIpLmRhdGEoXCJ1aS1tZW51LXN1Ym1lbnUtY2FyZXRcIiwhMCk7by5fYWRkQ2xhc3MobixcInVpLW1lbnUtaWNvblwiLFwidWktaWNvbiBcIithKSxpLmF0dHIoXCJhcmlhLWhhc3BvcHVwXCIsXCJ0cnVlXCIpLnByZXBlbmQobiksZS5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIsaS5hdHRyKFwiaWRcIikpfSksdGhpcy5fYWRkQ2xhc3MoaSxcInVpLW1lbnVcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1mcm9udFwiKSwoZT1yLmFkZCh0aGlzLmVsZW1lbnQpLmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSkubm90KFwiLnVpLW1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtvLl9pc0RpdmlkZXIoZSkmJm8uX2FkZENsYXNzKGUsXCJ1aS1tZW51LWRpdmlkZXJcIixcInVpLXdpZGdldC1jb250ZW50XCIpfSkscz0obj1lLm5vdChcIi51aS1tZW51LWl0ZW0sIC51aS1tZW51LWRpdmlkZXJcIikpLmNoaWxkcmVuKCkubm90KFwiLnVpLW1lbnVcIikudW5pcXVlSWQoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSx0aGlzLl9hZGRDbGFzcyhuLFwidWktbWVudS1pdGVtXCIpLl9hZGRDbGFzcyhzLFwidWktbWVudS1pdGVtLXdyYXBwZXJcIiksZS5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIikuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIiksdGhpcy5hY3RpdmUmJiF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSkmJnRoaXMuYmx1cigpfSxfaXRlbVJvbGU6ZnVuY3Rpb24oKXtyZXR1cm57bWVudTpcIm1lbnVpdGVtXCIsbGlzdGJveDpcIm9wdGlvblwifVt0aGlzLm9wdGlvbnMucm9sZV19LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImljb25zXCI9PT10KXt2YXIgaT10aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51LWljb25cIik7dGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLHRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51KS5fYWRkQ2xhc3MoaSxudWxsLGUuc3VibWVudSl9dGhpcy5fc3VwZXIodCxlKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFN0cmluZyh0KSksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sZm9jdXM6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHM7dGhpcy5ibHVyKHQsdCYmXCJmb2N1c1wiPT09dC50eXBlKSx0aGlzLl9zY3JvbGxJbnRvVmlldyhlKSx0aGlzLmFjdGl2ZT1lLmZpcnN0KCksbj10aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKSx0aGlzLl9hZGRDbGFzcyhuLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuZWxlbWVudC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsbi5hdHRyKFwiaWRcIikpLHM9dGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIikuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fYWRkQ2xhc3MocyxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHQmJlwia2V5ZG93blwiPT09dC50eXBlP3RoaXMuX2Nsb3NlKCk6dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCl9LHRoaXMuZGVsYXkpLChpPWUuY2hpbGRyZW4oXCIudWktbWVudVwiKSkubGVuZ3RoJiZ0JiYvXm1vdXNlLy50ZXN0KHQudHlwZSkmJnRoaXMuX3N0YXJ0T3BlbmluZyhpKSx0aGlzLmFjdGl2ZU1lbnU9ZS5wYXJlbnQoKSx0aGlzLl90cmlnZ2VyKFwiZm9jdXNcIix0LHtpdGVtOmV9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvLGEscjt0aGlzLl9oYXNTY3JvbGwoKSYmKGk9cGFyc2VGbG9hdCh0LmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sXCJib3JkZXJUb3BXaWR0aFwiKSl8fDAsbj1wYXJzZUZsb2F0KHQuY3NzKHRoaXMuYWN0aXZlTWVudVswXSxcInBhZGRpbmdUb3BcIikpfHwwLHM9ZS5vZmZzZXQoKS50b3AtdGhpcy5hY3RpdmVNZW51Lm9mZnNldCgpLnRvcC1pLW4sbz10aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKCksYT10aGlzLmFjdGl2ZU1lbnUuaGVpZ2h0KCkscj1lLm91dGVySGVpZ2h0KCksczwwP3RoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AobytzKTpzK3I+YSYmdGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChvK3MtYStyKSl9LGJsdXI6ZnVuY3Rpb24odCxlKXtlfHxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5hY3RpdmUmJih0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuX3RyaWdnZXIoXCJibHVyXCIsdCx7aXRlbTp0aGlzLmFjdGl2ZX0pLHRoaXMuYWN0aXZlPW51bGwpfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxcInRydWVcIj09PXQuYXR0cihcImFyaWEtaGlkZGVuXCIpJiYodGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3Blbih0KX0sdGhpcy5kZWxheSkpfSxfb3BlbjpmdW5jdGlvbihlKXt2YXIgaT10LmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnVcIikubm90KGUucGFyZW50cyhcIi51aS1tZW51XCIpKS5oaWRlKCkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGUuc2hvdygpLnJlbW92ZUF0dHIoXCJhcmlhLWhpZGRlblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKS5wb3NpdGlvbihpKX0sY29sbGFwc2VBbGw6ZnVuY3Rpb24oZSxpKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBuPWk/dGhpcy5lbGVtZW50OnQoZSYmZS50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudVwiKSk7bi5sZW5ndGh8fChuPXRoaXMuZWxlbWVudCksdGhpcy5fY2xvc2UobiksdGhpcy5ibHVyKGUpLHRoaXMuX3JlbW92ZUNsYXNzKG4uZmluZChcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmFjdGl2ZU1lbnU9bn0sdGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbih0KXt0fHwodD10aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZS5wYXJlbnQoKTp0aGlzLmVsZW1lbnQpLHQuZmluZChcIi51aS1tZW51XCIpLmhpZGUoKS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcInRydWVcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpfSxfY2xvc2VPbkRvY3VtZW50Q2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudVwiKS5sZW5ndGh9LF9pc0RpdmlkZXI6ZnVuY3Rpb24odCl7cmV0dXJuIS9bXlxcLVxcdTIwMTRcXHUyMDEzXFxzXS8udGVzdCh0LnRleHQoKSl9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiLHRoaXMuZWxlbWVudCk7ZSYmZS5sZW5ndGgmJih0aGlzLl9jbG9zZSgpLHRoaXMuZm9jdXModCxlKSl9LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudSBcIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7ZSYmZS5sZW5ndGgmJih0aGlzLl9vcGVuKGUucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyh0LGUpfSkpfSxuZXh0OmZ1bmN0aW9uKHQpe3RoaXMuX21vdmUoXCJuZXh0XCIsXCJmaXJzdFwiLHQpfSxwcmV2aW91czpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlKFwicHJldlwiLFwibGFzdFwiLHQpfSxpc0ZpcnN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLnByZXZBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuO3RoaXMuYWN0aXZlJiYobj1cImZpcnN0XCI9PT10fHxcImxhc3RcIj09PXQ/dGhpcy5hY3RpdmVbXCJmaXJzdFwiPT09dD9cInByZXZBbGxcIjpcIm5leHRBbGxcIl0oXCIudWktbWVudS1pdGVtXCIpLmVxKC0xKTp0aGlzLmFjdGl2ZVt0K1wiQWxsXCJdKFwiLnVpLW1lbnUtaXRlbVwiKS5lcSgwKSksbiYmbi5sZW5ndGgmJnRoaXMuYWN0aXZlfHwobj10aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW2VdKCkpLHRoaXMuZm9jdXMoaSxuKX0sbmV4dFBhZ2U6ZnVuY3Rpb24oZSl7dmFyIGksbixzO3RoaXMuYWN0aXZlP3RoaXMuaXNMYXN0SXRlbSgpfHwodGhpcy5faGFzU2Nyb2xsKCk/KG49dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLHM9dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4oaT10KHRoaXMpKS5vZmZzZXQoKS50b3Atbi1zPDB9KSx0aGlzLmZvY3VzKGUsaSkpOnRoaXMuZm9jdXMoZSx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlP1wibGFzdFwiOlwiZmlyc3RcIl0oKSkpOnRoaXMubmV4dChlKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLG4sczt0aGlzLmFjdGl2ZT90aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8obj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Ascz10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3JldHVybihpPXQodGhpcykpLm9mZnNldCgpLnRvcC1uK3M+MH0pLHRoaXMuZm9jdXMoZSxpKSk6dGhpcy5mb2N1cyhlLHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlyc3QoKSkpOnRoaXMubmV4dChlKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcChcInNjcm9sbEhlaWdodFwiKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlPXRoaXMuYWN0aXZlfHx0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKGUsITApLHRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIixlLGkpfSxfZmlsdGVyTWVudUl0ZW1zOmZ1bmN0aW9uKGUpe3ZhciBpPWUucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csXCJcXFxcJCZcIiksbj1uZXcgUmVnRXhwKFwiXlwiK2ksXCJpXCIpO3JldHVybiB0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpbHRlcihcIi51aS1tZW51LWl0ZW1cIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG4udGVzdCh0LnRyaW0odCh0aGlzKS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKS50ZXh0KCkpKX0pfX0pLHQud2lkZ2V0KFwidWkuYXV0b2NvbXBsZXRlXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxpbnB1dD5cIixvcHRpb25zOnthcHBlbmRUbzpudWxsLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OlwibGVmdCB0b3BcIixhdDpcImxlZnQgYm90dG9tXCIsY29sbGlzaW9uOlwibm9uZVwifSxzb3VyY2U6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc3BvbnNlOm51bGwsc2VhcmNoOm51bGwsc2VsZWN0Om51bGx9LHJlcXVlc3RJbmRleDowLHBlbmRpbmc6MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHM9dGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1cInRleHRhcmVhXCI9PT1zLGE9XCJpbnB1dFwiPT09czt0aGlzLmlzTXVsdGlMaW5lPW98fCFhJiZ0aGlzLl9pc0NvbnRlbnRFZGl0YWJsZSh0aGlzLmVsZW1lbnQpLHRoaXMudmFsdWVNZXRob2Q9dGhpcy5lbGVtZW50W298fGE/XCJ2YWxcIjpcInRleHRcIl0sdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fYWRkQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtaW5wdXRcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKSx0aGlzLl9vbih0aGlzLmVsZW1lbnQse2tleWRvd246ZnVuY3Rpb24ocyl7aWYodGhpcy5lbGVtZW50LnByb3AoXCJyZWFkT25seVwiKSlyZXR1cm4gZT0hMCxuPSEwLHZvaWQoaT0hMCk7ZT0hMSxuPSExLGk9ITE7dmFyIG89dC51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugby5QQUdFX1VQOmU9ITAsdGhpcy5fbW92ZShcInByZXZpb3VzUGFnZVwiLHMpO2JyZWFrO2Nhc2Ugby5QQUdFX0RPV046ZT0hMCx0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixzKTticmVhaztjYXNlIG8uVVA6ZT0hMCx0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIscyk7YnJlYWs7Y2FzZSBvLkRPV046ZT0hMCx0aGlzLl9rZXlFdmVudChcIm5leHRcIixzKTticmVhaztjYXNlIG8uRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKGU9ITAscy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QocykpO2JyZWFrO2Nhc2Ugby5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChzKTticmVhaztjYXNlIG8uRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2Uocykscy5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0Omk9ITAsdGhpcy5fc2VhcmNoVGltZW91dChzKX19LGtleXByZXNzOmZ1bmN0aW9uKG4pe2lmKGUpcmV0dXJuIGU9ITEsdm9pZCh0aGlzLmlzTXVsdGlMaW5lJiYhdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKXx8bi5wcmV2ZW50RGVmYXVsdCgpKTtpZighaSl7dmFyIHM9dC51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2Ugcy5QQUdFX1VQOnRoaXMuX21vdmUoXCJwcmV2aW91c1BhZ2VcIixuKTticmVhaztjYXNlIHMuUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJuZXh0UGFnZVwiLG4pO2JyZWFrO2Nhc2Ugcy5VUDp0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIsbik7YnJlYWs7Y2FzZSBzLkRPV046dGhpcy5fa2V5RXZlbnQoXCJuZXh0XCIsbil9fX0saW5wdXQ6ZnVuY3Rpb24odCl7aWYobilyZXR1cm4gbj0hMSx2b2lkIHQucHJldmVudERlZmF1bHQoKTt0aGlzLl9zZWFyY2hUaW1lb3V0KHQpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5wcmV2aW91cz10aGlzLl92YWx1ZSgpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuY2FuY2VsQmx1cj9kZWxldGUgdGhpcy5jYW5jZWxCbHVyOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UodCksdGhpcy5fY2hhbmdlKHQpKX19KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PXQoXCI8dWw+XCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KFwiaW5zdGFuY2VcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5tZW51LmVsZW1lbnQsXCJ1aS1hdXRvY29tcGxldGVcIixcInVpLWZyb250XCIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsdGhpcy5lbGVtZW50WzBdIT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0pfSxtZW51Zm9jdXM6ZnVuY3Rpb24oZSxpKXt2YXIgbixzO2lmKHRoaXMuaXNOZXdNZW51JiYodGhpcy5pc05ld01lbnU9ITEsZS5vcmlnaW5hbEV2ZW50JiYvXm1vdXNlLy50ZXN0KGUub3JpZ2luYWxFdmVudC50eXBlKSkpcmV0dXJuIHRoaXMubWVudS5ibHVyKCksdm9pZCB0aGlzLmRvY3VtZW50Lm9uZShcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7dChlLnRhcmdldCkudHJpZ2dlcihlLm9yaWdpbmFsRXZlbnQpfSk7cz1pLml0ZW0uZGF0YShcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIpLCExIT09dGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsZSx7aXRlbTpzfSkmJmUub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QoZS5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShzLnZhbHVlKSwobj1pLml0ZW0uYXR0cihcImFyaWEtbGFiZWxcIil8fHMudmFsdWUpJiZ0LnRyaW0obikubGVuZ3RoJiYodGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHQoXCI8ZGl2PlwiKS50ZXh0KG4pLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfSxtZW51c2VsZWN0OmZ1bmN0aW9uKGUsaSl7dmFyIG49aS5pdGVtLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiKSxzPXRoaXMucHJldmlvdXM7dGhpcy5lbGVtZW50WzBdIT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIiksdGhpcy5wcmV2aW91cz1zLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1zLHRoaXMuc2VsZWN0ZWRJdGVtPW59KSksITEhPT10aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsZSx7aXRlbTpufSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09bn19KSx0aGlzLmxpdmVSZWdpb249dChcIjxkaXY+XCIse3JvbGU6XCJzdGF0dXNcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fYWRkQ2xhc3ModGhpcy5saXZlUmVnaW9uLG51bGwsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5fc3VwZXIodCxlKSxcInNvdXJjZVwiPT09dCYmdGhpcy5faW5pdFNvdXJjZSgpLFwiYXBwZW5kVG9cIj09PXQmJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiZGlzYWJsZWRcIj09PXQmJmUmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfaXNFdmVudFRhcmdldEluV2lkZ2V0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMubWVudS5lbGVtZW50WzBdO3JldHVybiBlLnRhcmdldD09PXRoaXMuZWxlbWVudFswXXx8ZS50YXJnZXQ9PT1pfHx0LmNvbnRhaW5zKGksZS50YXJnZXQpfSxfY2xvc2VPbkNsaWNrT3V0c2lkZTpmdW5jdGlvbih0KXt0aGlzLl9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQodCl8fHRoaXMuY2xvc2UoKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZT1lLmpxdWVyeXx8ZS5ub2RlVHlwZT90KGUpOnRoaXMuZG9jdW1lbnQuZmluZChlKS5lcSgwKSksZSYmZVswXXx8KGU9dGhpcy5lbGVtZW50LmNsb3Nlc3QoXCIudWktZnJvbnQsIGRpYWxvZ1wiKSksZS5sZW5ndGh8fChlPXRoaXMuZG9jdW1lbnRbMF0uYm9keSksZX0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgZSxpLG49dGhpczt0LmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KGU9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLG4pe24odC51aS5hdXRvY29tcGxldGUuZmlsdGVyKGUsaS50ZXJtKSl9KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5vcHRpb25zLnNvdXJjZT8oaT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGUscyl7bi54aHImJm4ueGhyLmFib3J0KCksbi54aHI9dC5hamF4KHt1cmw6aSxkYXRhOmUsZGF0YVR5cGU6XCJqc29uXCIsc3VjY2VzczpmdW5jdGlvbih0KXtzKHQpfSxlcnJvcjpmdW5jdGlvbigpe3MoW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sX3NlYXJjaFRpbWVvdXQ6ZnVuY3Rpb24odCl7XG5jbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50ZXJtPT09dGhpcy5fdmFsdWUoKSxpPXRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIiksbj10LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fHQuc2hpZnRLZXk7ZSYmKCFlfHxpfHxuKXx8KHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCx0KSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0PW51bGwhPXQ/dDp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHQubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZShlKTohMSE9PXRoaXMuX3RyaWdnZXIoXCJzZWFyY2hcIixlKT90aGlzLl9zZWFyY2godCk6dm9pZCAwfSxfc2VhcmNoOmZ1bmN0aW9uKHQpe3RoaXMucGVuZGluZysrLHRoaXMuX2FkZENsYXNzKFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06dH0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciBlPSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIHQucHJveHkoZnVuY3Rpb24odCl7ZT09PXRoaXMucmVxdWVzdEluZGV4JiZ0aGlzLl9fcmVzcG9uc2UodCksLS10aGlzLnBlbmRpbmd8fHRoaXMuX3JlbW92ZUNsYXNzKFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKHQpe3QmJih0PXRoaXMuX25vcm1hbGl6ZSh0KSksdGhpcy5fdHJpZ2dlcihcInJlc3BvbnNlXCIsbnVsbCx7Y29udGVudDp0fSksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdCYmdC5sZW5ndGgmJiF0aGlzLmNhbmNlbFNlYXJjaD8odGhpcy5fc3VnZ2VzdCh0KSx0aGlzLl90cmlnZ2VyKFwib3BlblwiKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24odCl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UodCl9LF9jbG9zZTpmdW5jdGlvbih0KXt0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcIm1vdXNlZG93blwiKSx0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcihcImNsb3NlXCIsdCkpfSxfY2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMucHJldmlvdXMhPT10aGlzLl92YWx1ZSgpJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsdCx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aCYmZVswXS5sYWJlbCYmZVswXS52YWx1ZT9lOnQubWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/e2xhYmVsOmUsdmFsdWU6ZX06dC5leHRlbmQoe30sZSx7bGFiZWw6ZS5sYWJlbHx8ZS52YWx1ZSx2YWx1ZTplLnZhbHVlfHxlLmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksZSksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbih0LmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlZG93bjpcIl9jbG9zZU9uQ2xpY2tPdXRzaWRlXCJ9KX0sX3Jlc2l6ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1lbnUuZWxlbWVudDt0Lm91dGVyV2lkdGgoTWF0aC5tYXgodC53aWR0aChcIlwiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGUsaSl7dmFyIG49dGhpczt0LmVhY2goaSxmdW5jdGlvbih0LGkpe24uX3JlbmRlckl0ZW1EYXRhKGUsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0odCxlKS5kYXRhKFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIixlKX0sX3JlbmRlckl0ZW06ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdChcIjxsaT5cIikuYXBwZW5kKHQoXCI8ZGl2PlwiKS50ZXh0KGkubGFiZWwpKS5hcHBlbmRUbyhlKX0sX21vdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKT90aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdCh0KXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KHQpPyh0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHZvaWQgdGhpcy5tZW51LmJsdXIoKSk6dm9pZCB0aGlzLm1lbnVbdF0oZSk6dm9pZCB0aGlzLnNlYXJjaChudWxsLGUpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLmlzTXVsdGlMaW5lJiYhdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKXx8KHRoaXMuX21vdmUodCxlKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfaXNDb250ZW50RWRpdGFibGU6ZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKXJldHVybiExO3ZhciBlPXQucHJvcChcImNvbnRlbnRFZGl0YWJsZVwiKTtyZXR1cm5cImluaGVyaXRcIj09PWU/dGhpcy5faXNDb250ZW50RWRpdGFibGUodC5wYXJlbnQoKSk6XCJ0cnVlXCI9PT1lfX0pLHQuZXh0ZW5kKHQudWkuYXV0b2NvbXBsZXRlLHtlc2NhcGVSZWdleDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZyxcIlxcXFwkJlwiKX0sZmlsdGVyOmZ1bmN0aW9uKGUsaSl7dmFyIG49bmV3IFJlZ0V4cCh0LnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChpKSxcImlcIik7cmV0dXJuIHQuZ3JlcChlLGZ1bmN0aW9uKHQpe3JldHVybiBuLnRlc3QodC5sYWJlbHx8dC52YWx1ZXx8dCl9KX19KSx0LndpZGdldChcInVpLmF1dG9jb21wbGV0ZVwiLHQudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOlwiTm8gc2VhcmNoIHJlc3VsdHMuXCIscmVzdWx0czpmdW5jdGlvbih0KXtyZXR1cm4gdCsodD4xP1wiIHJlc3VsdHMgYXJlXCI6XCIgcmVzdWx0IGlzXCIpK1wiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuXCJ9fX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXt2YXIgaTt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmNhbmNlbFNlYXJjaHx8KGk9ZSYmZS5sZW5ndGg/dGhpcy5vcHRpb25zLm1lc3NhZ2VzLnJlc3VsdHMoZS5sZW5ndGgpOnRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHQoXCI8ZGl2PlwiKS50ZXh0KGkpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfX0pO3ZhciBjLHU9KHQudWkuYXV0b2NvbXBsZXRlLC91aS1jb3JuZXItKFthLXpdKXsyLDZ9L2cpO3Qud2lkZ2V0KFwidWkuY29udHJvbGdyb3VwXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxkaXY+XCIsb3B0aW9uczp7ZGlyZWN0aW9uOlwiaG9yaXpvbnRhbFwiLGRpc2FibGVkOm51bGwsb25seVZpc2libGU6ITAsaXRlbXM6e2J1dHRvbjpcImlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgYnV0dG9uLCBhXCIsY29udHJvbGdyb3VwTGFiZWw6XCIudWktY29udHJvbGdyb3VwLWxhYmVsXCIsY2hlY2tib3hyYWRpbzpcImlucHV0W3R5cGU9J2NoZWNrYm94J10sIGlucHV0W3R5cGU9J3JhZGlvJ11cIixzZWxlY3RtZW51Olwic2VsZWN0XCIsc3Bpbm5lcjpcIi51aS1zcGlubmVyLWlucHV0XCJ9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fZW5oYW5jZSgpfSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwidG9vbGJhclwiKSx0aGlzLnJlZnJlc2goKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsQ2hpbGRNZXRob2QoXCJkZXN0cm95XCIpLHRoaXMuY2hpbGRXaWRnZXRzLnJlbW92ZURhdGEoXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiKSx0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5vcHRpb25zLml0ZW1zLmNvbnRyb2xncm91cExhYmVsJiZ0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMuY29udHJvbGdyb3VwTGFiZWwpLmZpbmQoXCIudWktY29udHJvbGdyb3VwLWxhYmVsLWNvbnRlbnRzXCIpLmNvbnRlbnRzKCkudW53cmFwKCl9LF9pbml0V2lkZ2V0czpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT1bXTt0LmVhY2godGhpcy5vcHRpb25zLml0ZW1zLGZ1bmN0aW9uKG4scyl7dmFyIG8sYT17fTtpZihzKXJldHVyblwiY29udHJvbGdyb3VwTGFiZWxcIj09PW4/KChvPWUuZWxlbWVudC5maW5kKHMpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmNoaWxkcmVuKFwiLnVpLWNvbnRyb2xncm91cC1sYWJlbC1jb250ZW50c1wiKS5sZW5ndGh8fGUuY29udGVudHMoKS53cmFwQWxsKFwiPHNwYW4gY2xhc3M9J3VpLWNvbnRyb2xncm91cC1sYWJlbC1jb250ZW50cyc+PC9zcGFuPlwiKX0pLGUuX2FkZENsYXNzKG8sbnVsbCxcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1zdGF0ZS1kZWZhdWx0XCIpLHZvaWQoaT1pLmNvbmNhdChvLmdldCgpKSkpOnZvaWQodC5mbltuXSYmKGE9ZVtcIl9cIituK1wiT3B0aW9uc1wiXT9lW1wiX1wiK24rXCJPcHRpb25zXCJdKFwibWlkZGxlXCIpOntjbGFzc2VzOnt9fSxlLmVsZW1lbnQuZmluZChzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9dCh0aGlzKSxvPXNbbl0oXCJpbnN0YW5jZVwiKSxyPXQud2lkZ2V0LmV4dGVuZCh7fSxhKTtpZihcImJ1dHRvblwiIT09bnx8IXMucGFyZW50KFwiLnVpLXNwaW5uZXJcIikubGVuZ3RoKXtvfHwobz1zW25dKClbbl0oXCJpbnN0YW5jZVwiKSksbyYmKHIuY2xhc3Nlcz1lLl9yZXNvbHZlQ2xhc3Nlc1ZhbHVlcyhyLmNsYXNzZXMsbykpLHNbbl0ocik7dmFyIGw9c1tuXShcIndpZGdldFwiKTt0LmRhdGEobFswXSxcInVpLWNvbnRyb2xncm91cC1kYXRhXCIsb3x8c1tuXShcImluc3RhbmNlXCIpKSxpLnB1c2gobFswXSl9fSkpKX0pLHRoaXMuY2hpbGRXaWRnZXRzPXQodC51bmlxdWUoaSkpLHRoaXMuX2FkZENsYXNzKHRoaXMuY2hpbGRXaWRnZXRzLFwidWktY29udHJvbGdyb3VwLWl0ZW1cIil9LF9jYWxsQ2hpbGRNZXRob2Q6ZnVuY3Rpb24oZSl7dGhpcy5jaGlsZFdpZGdldHMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuZGF0YShcInVpLWNvbnRyb2xncm91cC1kYXRhXCIpO2kmJmlbZV0mJmlbZV0oKX0pfSxfdXBkYXRlQ29ybmVyQ2xhc3M6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9idWlsZFNpbXBsZU9wdGlvbnMoZSxcImxhYmVsXCIpLmNsYXNzZXMubGFiZWw7dGhpcy5fcmVtb3ZlQ2xhc3ModCxudWxsLFwidWktY29ybmVyLXRvcCB1aS1jb3JuZXItYm90dG9tIHVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCB1aS1jb3JuZXItYWxsXCIpLHRoaXMuX2FkZENsYXNzKHQsbnVsbCxpKX0sX2J1aWxkU2ltcGxlT3B0aW9uczpmdW5jdGlvbih0LGUpe3ZhciBpPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5kaXJlY3Rpb24sbj17Y2xhc3Nlczp7fX07cmV0dXJuIG4uY2xhc3Nlc1tlXT17bWlkZGxlOlwiXCIsZmlyc3Q6XCJ1aS1jb3JuZXItXCIrKGk/XCJ0b3BcIjpcImxlZnRcIiksbGFzdDpcInVpLWNvcm5lci1cIisoaT9cImJvdHRvbVwiOlwicmlnaHRcIiksb25seTpcInVpLWNvcm5lci1hbGxcIn1bdF0sbn0sX3NwaW5uZXJPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyh0LFwidWktc3Bpbm5lclwiKTtyZXR1cm4gZS5jbGFzc2VzW1widWktc3Bpbm5lci11cFwiXT1cIlwiLGUuY2xhc3Nlc1tcInVpLXNwaW5uZXItZG93blwiXT1cIlwiLGV9LF9idXR0b25PcHRpb25zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnModCxcInVpLWJ1dHRvblwiKX0sX2NoZWNrYm94cmFkaW9PcHRpb25zOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9idWlsZFNpbXBsZU9wdGlvbnModCxcInVpLWNoZWNrYm94cmFkaW8tbGFiZWxcIil9LF9zZWxlY3RtZW51T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT1cInZlcnRpY2FsXCI9PT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uO3JldHVybnt3aWR0aDohIWUmJlwiYXV0b1wiLGNsYXNzZXM6e21pZGRsZTp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6XCJcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwiXCJ9LGZpcnN0OntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci1cIisoZT9cInRvcFwiOlwidGxcIiksXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcInVpLWNvcm5lci1cIisoZT9cInRvcFwiOlwibGVmdFwiKX0sbGFzdDp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6ZT9cIlwiOlwidWktY29ybmVyLXRyXCIsXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcInVpLWNvcm5lci1cIisoZT9cImJvdHRvbVwiOlwicmlnaHRcIil9LG9ubHk6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOlwidWktY29ybmVyLXRvcFwiLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItYWxsXCJ9fVt0XX19LF9yZXNvbHZlQ2xhc3Nlc1ZhbHVlczpmdW5jdGlvbihlLGkpe3ZhciBuPXt9O3JldHVybiB0LmVhY2goZSxmdW5jdGlvbihzKXt2YXIgbz1pLm9wdGlvbnMuY2xhc3Nlc1tzXXx8XCJcIjtvPXQudHJpbShvLnJlcGxhY2UodSxcIlwiKSksbltzXT0obytcIiBcIitlW3NdKS5yZXBsYWNlKC9cXHMrL2csXCIgXCIpfSksbn0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiZGlyZWN0aW9uXCI9PT10JiZ0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWNvbnRyb2xncm91cC1cIit0aGlzLm9wdGlvbnMuZGlyZWN0aW9uKSx0aGlzLl9zdXBlcih0LGUpLFwiZGlzYWJsZWRcIiE9PXQ/dGhpcy5yZWZyZXNoKCk6dGhpcy5fY2FsbENoaWxkTWV0aG9kKGU/XCJkaXNhYmxlXCI6XCJlbmFibGVcIil9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXM7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1jb250cm9sZ3JvdXAgdWktY29udHJvbGdyb3VwLVwiK3RoaXMub3B0aW9ucy5kaXJlY3Rpb24pLFwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcHRpb25zLmRpcmVjdGlvbiYmdGhpcy5fYWRkQ2xhc3MobnVsbCxcInVpLWhlbHBlci1jbGVhcmZpeFwiKSx0aGlzLl9pbml0V2lkZ2V0cygpLGU9dGhpcy5jaGlsZFdpZGdldHMsdGhpcy5vcHRpb25zLm9ubHlWaXNpYmxlJiYoZT1lLmZpbHRlcihcIjp2aXNpYmxlXCIpKSxlLmxlbmd0aCYmKHQuZWFjaChbXCJmaXJzdFwiLFwibGFzdFwiXSxmdW5jdGlvbih0LG4pe3ZhciBzPWVbbl0oKS5kYXRhKFwidWktY29udHJvbGdyb3VwLWRhdGFcIik7aWYocyYmaVtcIl9cIitzLndpZGdldE5hbWUrXCJPcHRpb25zXCJdKXt2YXIgbz1pW1wiX1wiK3Mud2lkZ2V0TmFtZStcIk9wdGlvbnNcIl0oMT09PWUubGVuZ3RoP1wib25seVwiOm4pO28uY2xhc3Nlcz1pLl9yZXNvbHZlQ2xhc3Nlc1ZhbHVlcyhvLmNsYXNzZXMscykscy5lbGVtZW50W3Mud2lkZ2V0TmFtZV0obyl9ZWxzZSBpLl91cGRhdGVDb3JuZXJDbGFzcyhlW25dKCksbil9KSx0aGlzLl9jYWxsQ2hpbGRNZXRob2QoXCJyZWZyZXNoXCIpKX19KSx0LndpZGdldChcInVpLmNoZWNrYm94cmFkaW9cIixbdC51aS5mb3JtUmVzZXRNaXhpbix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2Rpc2FibGVkOm51bGwsbGFiZWw6bnVsbCxpY29uOiEwLGNsYXNzZXM6e1widWktY2hlY2tib3hyYWRpby1sYWJlbFwiOlwidWktY29ybmVyLWFsbFwiLFwidWktY2hlY2tib3hyYWRpby1pY29uXCI6XCJ1aS1jb3JuZXItYWxsXCJ9fSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciBlLGksbj10aGlzLHM9dGhpcy5fc3VwZXIoKXx8e307cmV0dXJuIHRoaXMuX3JlYWRUeXBlKCksaT10aGlzLmVsZW1lbnQubGFiZWxzKCksdGhpcy5sYWJlbD10KGlbaS5sZW5ndGgtMV0pLHRoaXMubGFiZWwubGVuZ3RofHx0LmVycm9yKFwiTm8gbGFiZWwgZm91bmQgZm9yIGNoZWNrYm94cmFkaW8gd2lkZ2V0XCIpLHRoaXMub3JpZ2luYWxMYWJlbD1cIlwiLHRoaXMubGFiZWwuY29udGVudHMoKS5ub3QodGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7bi5vcmlnaW5hbExhYmVsKz0zPT09dGhpcy5ub2RlVHlwZT90KHRoaXMpLnRleHQoKTp0aGlzLm91dGVySFRNTH0pLHRoaXMub3JpZ2luYWxMYWJlbCYmKHMubGFiZWw9dGhpcy5vcmlnaW5hbExhYmVsKSxudWxsIT0oZT10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQpJiYocy5kaXNhYmxlZD1lKSxzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50WzBdLmNoZWNrZWQ7dGhpcy5fYmluZEZvcm1SZXNldEhhbmRsZXIoKSxudWxsPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJih0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkKSx0aGlzLl9zZXRPcHRpb24oXCJkaXNhYmxlZFwiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1jaGVja2JveHJhZGlvXCIsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tbGFiZWxcIixcInVpLWJ1dHRvbiB1aS13aWRnZXRcIiksXCJyYWRpb1wiPT09dGhpcy50eXBlJiZ0aGlzLl9hZGRDbGFzcyh0aGlzLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1yYWRpby1sYWJlbFwiKSx0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMub3B0aW9ucy5sYWJlbCE9PXRoaXMub3JpZ2luYWxMYWJlbD90aGlzLl91cGRhdGVMYWJlbCgpOnRoaXMub3JpZ2luYWxMYWJlbCYmKHRoaXMub3B0aW9ucy5sYWJlbD10aGlzLm9yaWdpbmFsTGFiZWwpLHRoaXMuX2VuaGFuY2UoKSx0JiYodGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMuaWNvbiYmdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKSksdGhpcy5fb24oe2NoYW5nZTpcIl90b2dnbGVDbGFzc2VzXCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9hZGRDbGFzcyh0aGlzLmxhYmVsLG51bGwsXCJ1aS1zdGF0ZS1mb2N1cyB1aS12aXN1YWwtZm9jdXNcIil9LGJsdXI6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmxhYmVsLG51bGwsXCJ1aS1zdGF0ZS1mb2N1cyB1aS12aXN1YWwtZm9jdXNcIil9fSl9LF9yZWFkVHlwZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3RoaXMudHlwZT10aGlzLmVsZW1lbnRbMF0udHlwZSxcImlucHV0XCI9PT1lJiYvcmFkaW98Y2hlY2tib3gvLnRlc3QodGhpcy50eXBlKXx8dC5lcnJvcihcIkNhbid0IGNyZWF0ZSBjaGVja2JveHJhZGlvIG9uIGVsZW1lbnQubm9kZU5hbWU9XCIrZStcIiBhbmQgZWxlbWVudC50eXBlPVwiK3RoaXMudHlwZSl9LF9lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy5fdXBkYXRlSWNvbih0aGlzLmVsZW1lbnRbMF0uY2hlY2tlZCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxhYmVsfSxfZ2V0UmFkaW9Hcm91cDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudFswXS5uYW1lLGk9XCJpbnB1dFtuYW1lPSdcIit0LnVpLmVzY2FwZVNlbGVjdG9yKGUpK1wiJ11cIjtyZXR1cm4gZT8odGhpcy5mb3JtLmxlbmd0aD90KHRoaXMuZm9ybVswXS5lbGVtZW50cykuZmlsdGVyKGkpOnQoaSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10KHRoaXMpLmZvcm0oKS5sZW5ndGh9KSkubm90KHRoaXMuZWxlbWVudCk6dChbXSl9LF90b2dnbGVDbGFzc2VzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdLmNoZWNrZWQ7dGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIsZSksdGhpcy5vcHRpb25zLmljb24mJlwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIixlKS5fdG9nZ2xlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1pY29uLWJsYW5rXCIsIWUpLFwicmFkaW9cIj09PXRoaXMudHlwZSYmdGhpcy5fZ2V0UmFkaW9Hcm91cCgpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLmNoZWNrYm94cmFkaW8oXCJpbnN0YW5jZVwiKTtlJiZlLl9yZW1vdmVDbGFzcyhlLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIil9KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl91bmJpbmRGb3JtUmVzZXRIYW5kbGVyKCksdGhpcy5pY29uJiYodGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlLnJlbW92ZSgpKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe2lmKFwibGFiZWxcIiE9PXR8fGUpe2lmKHRoaXMuX3N1cGVyKHQsZSksXCJkaXNhYmxlZFwiPT09dClyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5sYWJlbCxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIixlKSx2b2lkKHRoaXMuZWxlbWVudFswXS5kaXNhYmxlZD1lKTt0aGlzLnJlZnJlc2goKX19LF91cGRhdGVJY29uOmZ1bmN0aW9uKGUpe3ZhciBpPVwidWktaWNvbiB1aS1pY29uLWJhY2tncm91bmQgXCI7dGhpcy5vcHRpb25zLmljb24/KHRoaXMuaWNvbnx8KHRoaXMuaWNvbj10KFwiPHNwYW4+XCIpLHRoaXMuaWNvblNwYWNlPXQoXCI8c3Bhbj4gPC9zcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmljb25TcGFjZSxcInVpLWNoZWNrYm94cmFkaW8taWNvbi1zcGFjZVwiKSksXCJjaGVja2JveFwiPT09dGhpcy50eXBlPyhpKz1lP1widWktaWNvbi1jaGVjayB1aS1zdGF0ZS1jaGVja2VkXCI6XCJ1aS1pY29uLWJsYW5rXCIsdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsZT9cInVpLWljb24tYmxhbmtcIjpcInVpLWljb24tY2hlY2tcIikpOmkrPVwidWktaWNvbi1ibGFua1wiLHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixcInVpLWNoZWNrYm94cmFkaW8taWNvblwiLGkpLGV8fHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktaWNvbi1jaGVjayB1aS1zdGF0ZS1jaGVja2VkXCIpLHRoaXMuaWNvbi5wcmVwZW5kVG8odGhpcy5sYWJlbCkuYWZ0ZXIodGhpcy5pY29uU3BhY2UpKTp2b2lkIDAhPT10aGlzLmljb24mJih0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWNvbil9LF91cGRhdGVMYWJlbDpmdW5jdGlvbigpe3ZhciB0PXRoaXMubGFiZWwuY29udGVudHMoKS5ub3QodGhpcy5lbGVtZW50WzBdKTt0aGlzLmljb24mJih0PXQubm90KHRoaXMuaWNvblswXSkpLHRoaXMuaWNvblNwYWNlJiYodD10Lm5vdCh0aGlzLmljb25TcGFjZVswXSkpLHQucmVtb3ZlKCksdGhpcy5sYWJlbC5hcHBlbmQodGhpcy5vcHRpb25zLmxhYmVsKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudFswXS5jaGVja2VkLGU9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkO3RoaXMuX3VwZGF0ZUljb24odCksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIsdCksbnVsbCE9PXRoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5fdXBkYXRlTGFiZWwoKSxlIT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDplfSl9fV0pLHQudWkuY2hlY2tib3hyYWRpbyx0LndpZGdldChcInVpLmJ1dHRvblwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8YnV0dG9uPlwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktYnV0dG9uXCI6XCJ1aS1jb3JuZXItYWxsXCJ9LGRpc2FibGVkOm51bGwsaWNvbjpudWxsLGljb25Qb3NpdGlvbjpcImJlZ2lubmluZ1wiLGxhYmVsOm51bGwsc2hvd0xhYmVsOiEwfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fc3VwZXIoKXx8e307cmV0dXJuIHRoaXMuaXNJbnB1dD10aGlzLmVsZW1lbnQuaXMoXCJpbnB1dFwiKSxudWxsIT0odD10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQpJiYoZS5kaXNhYmxlZD10KSx0aGlzLm9yaWdpbmFsTGFiZWw9dGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwoKTp0aGlzLmVsZW1lbnQuaHRtbCgpLHRoaXMub3JpZ2luYWxMYWJlbCYmKGUubGFiZWw9dGhpcy5vcmlnaW5hbExhYmVsKSxlfSxfY3JlYXRlOmZ1bmN0aW9uKCl7IXRoaXMub3B0aW9uLnNob3dMYWJlbCYhdGhpcy5vcHRpb25zLmljb24mJih0aGlzLm9wdGlvbnMuc2hvd0xhYmVsPSEwKSxudWxsPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJih0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkfHwhMSksdGhpcy5oYXNUaXRsZT0hIXRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIiksdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLm9wdGlvbnMubGFiZWwhPT10aGlzLm9yaWdpbmFsTGFiZWwmJih0aGlzLmlzSW5wdXQ/dGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpOnRoaXMuZWxlbWVudC5odG1sKHRoaXMub3B0aW9ucy5sYWJlbCkpLHRoaXMuX2FkZENsYXNzKFwidWktYnV0dG9uXCIsXCJ1aS13aWRnZXRcIiksdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2VuaGFuY2UoKSx0aGlzLmVsZW1lbnQuaXMoXCJhXCIpJiZ0aGlzLl9vbih7a2V5dXA6ZnVuY3Rpb24oZSl7ZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlNQQUNFJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZWxlbWVudFswXS5jbGljaz90aGlzLmVsZW1lbnRbMF0uY2xpY2soKTp0aGlzLmVsZW1lbnQudHJpZ2dlcihcImNsaWNrXCIpKX19KX0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuaXMoXCJidXR0b25cIil8fHRoaXMuZWxlbWVudC5hdHRyKFwicm9sZVwiLFwiYnV0dG9uXCIpLHRoaXMub3B0aW9ucy5pY29uJiYodGhpcy5fdXBkYXRlSWNvbihcImljb25cIix0aGlzLm9wdGlvbnMuaWNvbiksdGhpcy5fdXBkYXRlVG9vbHRpcCgpKX0sX3VwZGF0ZVRvb2x0aXA6ZnVuY3Rpb24oKXt0aGlzLnRpdGxlPXRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIiksdGhpcy5vcHRpb25zLnNob3dMYWJlbHx8dGhpcy50aXRsZXx8dGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiLHRoaXMub3B0aW9ucy5sYWJlbCl9LF91cGRhdGVJY29uOmZ1bmN0aW9uKGUsaSl7dmFyIG49XCJpY29uUG9zaXRpb25cIiE9PWUscz1uP3RoaXMub3B0aW9ucy5pY29uUG9zaXRpb246aSxvPVwidG9wXCI9PT1zfHxcImJvdHRvbVwiPT09czt0aGlzLmljb24/biYmdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsdGhpcy5vcHRpb25zLmljb24pOih0aGlzLmljb249dChcIjxzcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sXCJ1aS1idXR0b24taWNvblwiLFwidWktaWNvblwiKSx0aGlzLm9wdGlvbnMuc2hvd0xhYmVsfHx0aGlzLl9hZGRDbGFzcyhcInVpLWJ1dHRvbi1pY29uLW9ubHlcIikpLG4mJnRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixudWxsLGkpLHRoaXMuX2F0dGFjaEljb24ocyksbz8odGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS13aWRnZXQtaWNvbi1ibG9ja1wiKSx0aGlzLmljb25TcGFjZSYmdGhpcy5pY29uU3BhY2UucmVtb3ZlKCkpOih0aGlzLmljb25TcGFjZXx8KHRoaXMuaWNvblNwYWNlPXQoXCI8c3Bhbj4gPC9zcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmljb25TcGFjZSxcInVpLWJ1dHRvbi1pY29uLXNwYWNlXCIpKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLXdpZ2V0LWljb24tYmxvY2tcIiksdGhpcy5fYXR0YWNoSWNvblNwYWNlKHMpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5pY29uJiZ0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UmJnRoaXMuaWNvblNwYWNlLnJlbW92ZSgpLHRoaXMuaGFzVGl0bGV8fHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwidGl0bGVcIil9LF9hdHRhY2hJY29uU3BhY2U6ZnVuY3Rpb24odCl7dGhpcy5pY29uWy9eKD86ZW5kfGJvdHRvbSkvLnRlc3QodCk/XCJiZWZvcmVcIjpcImFmdGVyXCJdKHRoaXMuaWNvblNwYWNlKX0sX2F0dGFjaEljb246ZnVuY3Rpb24odCl7dGhpcy5lbGVtZW50Wy9eKD86ZW5kfGJvdHRvbSkvLnRlc3QodCk/XCJhcHBlbmRcIjpcInByZXBlbmRcIl0odGhpcy5pY29uKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9dm9pZCAwPT09dC5zaG93TGFiZWw/dGhpcy5vcHRpb25zLnNob3dMYWJlbDp0LnNob3dMYWJlbCxpPXZvaWQgMD09PXQuaWNvbj90aGlzLm9wdGlvbnMuaWNvbjp0Lmljb247ZXx8aXx8KHQuc2hvd0xhYmVsPSEwKSx0aGlzLl9zdXBlcih0KX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiaWNvblwiPT09dCYmKGU/dGhpcy5fdXBkYXRlSWNvbih0LGUpOnRoaXMuaWNvbiYmKHRoaXMuaWNvbi5yZW1vdmUoKSx0aGlzLmljb25TcGFjZSYmdGhpcy5pY29uU3BhY2UucmVtb3ZlKCkpKSxcImljb25Qb3NpdGlvblwiPT09dCYmdGhpcy5fdXBkYXRlSWNvbih0LGUpLFwic2hvd0xhYmVsXCI9PT10JiYodGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS1idXR0b24taWNvbi1vbmx5XCIsbnVsbCwhZSksdGhpcy5fdXBkYXRlVG9vbHRpcCgpKSxcImxhYmVsXCI9PT10JiYodGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwoZSk6KHRoaXMuZWxlbWVudC5odG1sKGUpLHRoaXMuaWNvbiYmKHRoaXMuX2F0dGFjaEljb24odGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbiksdGhpcy5fYXR0YWNoSWNvblNwYWNlKHRoaXMub3B0aW9ucy5pY29uUG9zaXRpb24pKSkpLHRoaXMuX3N1cGVyKHQsZSksXCJkaXNhYmxlZFwiPT09dCYmKHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLGUpLHRoaXMuZWxlbWVudFswXS5kaXNhYmxlZD1lLGUmJnRoaXMuZWxlbWVudC5ibHVyKCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKFwiaW5wdXQsIGJ1dHRvblwiKT90aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ6dGhpcy5lbGVtZW50Lmhhc0NsYXNzKFwidWktYnV0dG9uLWRpc2FibGVkXCIpO3QhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOnR9KSx0aGlzLl91cGRhdGVUb29sdGlwKCl9fSksITEhPT10LnVpQmFja0NvbXBhdCYmKHQud2lkZ2V0KFwidWkuYnV0dG9uXCIsdC51aS5idXR0b24se29wdGlvbnM6e3RleHQ6ITAsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuc2hvd0xhYmVsJiYhdGhpcy5vcHRpb25zLnRleHQmJih0aGlzLm9wdGlvbnMuc2hvd0xhYmVsPXRoaXMub3B0aW9ucy50ZXh0KSwhdGhpcy5vcHRpb25zLnNob3dMYWJlbCYmdGhpcy5vcHRpb25zLnRleHQmJih0aGlzLm9wdGlvbnMudGV4dD10aGlzLm9wdGlvbnMuc2hvd0xhYmVsKSx0aGlzLm9wdGlvbnMuaWNvbnx8IXRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5JiYhdGhpcy5vcHRpb25zLmljb25zLnNlY29uZGFyeT90aGlzLm9wdGlvbnMuaWNvbiYmKHRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5PXRoaXMub3B0aW9ucy5pY29uKTp0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeT90aGlzLm9wdGlvbnMuaWNvbj10aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeToodGhpcy5vcHRpb25zLmljb249dGhpcy5vcHRpb25zLmljb25zLnNlY29uZGFyeSx0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uPVwiZW5kXCIpLHRoaXMuX3N1cGVyKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcInRleHRcIiE9PXQ/KFwic2hvd0xhYmVsXCI9PT10JiYodGhpcy5vcHRpb25zLnRleHQ9ZSksXCJpY29uXCI9PT10JiYodGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk9ZSksXCJpY29uc1wiPT09dCYmKGUucHJpbWFyeT8odGhpcy5fc3VwZXIoXCJpY29uXCIsZS5wcmltYXJ5KSx0aGlzLl9zdXBlcihcImljb25Qb3NpdGlvblwiLFwiYmVnaW5uaW5nXCIpKTplLnNlY29uZGFyeSYmKHRoaXMuX3N1cGVyKFwiaWNvblwiLGUuc2Vjb25kYXJ5KSx0aGlzLl9zdXBlcihcImljb25Qb3NpdGlvblwiLFwiZW5kXCIpKSksdGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpKTp0aGlzLl9zdXBlcihcInNob3dMYWJlbFwiLGUpfX0pLHQuZm4uYnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiF0aGlzLmxlbmd0aHx8dGhpcy5sZW5ndGgmJlwiSU5QVVRcIiE9PXRoaXNbMF0udGFnTmFtZXx8dGhpcy5sZW5ndGgmJlwiSU5QVVRcIj09PXRoaXNbMF0udGFnTmFtZSYmXCJjaGVja2JveFwiIT09dGhpcy5hdHRyKFwidHlwZVwiKSYmXCJyYWRpb1wiIT09dGhpcy5hdHRyKFwidHlwZVwiKT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKToodC51aS5jaGVja2JveHJhZGlvfHx0LmVycm9yKFwiQ2hlY2tib3hyYWRpbyB3aWRnZXQgbWlzc2luZ1wiKSwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmNoZWNrYm94cmFkaW8oe2ljb246ITF9KTp0aGlzLmNoZWNrYm94cmFkaW8uYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KHQuZm4uYnV0dG9uKSx0LmZuLmJ1dHRvbnNldD1mdW5jdGlvbigpe3JldHVybiB0LnVpLmNvbnRyb2xncm91cHx8dC5lcnJvcihcIkNvbnRyb2xncm91cCB3aWRnZXQgbWlzc2luZ1wiKSxcIm9wdGlvblwiPT09YXJndW1lbnRzWzBdJiZcIml0ZW1zXCI9PT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1syXT90aGlzLmNvbnRyb2xncm91cC5hcHBseSh0aGlzLFthcmd1bWVudHNbMF0sXCJpdGVtcy5idXR0b25cIixhcmd1bWVudHNbMl1dKTpcIm9wdGlvblwiPT09YXJndW1lbnRzWzBdJiZcIml0ZW1zXCI9PT1hcmd1bWVudHNbMV0/dGhpcy5jb250cm9sZ3JvdXAuYXBwbHkodGhpcyxbYXJndW1lbnRzWzBdLFwiaXRlbXMuYnV0dG9uXCJdKTooXCJvYmplY3RcIj09dHlwZW9mIGFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLml0ZW1zJiYoYXJndW1lbnRzWzBdLml0ZW1zPXtidXR0b246YXJndW1lbnRzWzBdLml0ZW1zfSksdGhpcy5jb250cm9sZ3JvdXAuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pLHQudWkuYnV0dG9uLHQuZXh0ZW5kKHQudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246XCIxLjEyLjFcIn19KSx0LmV4dGVuZChlLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOlwiaGFzRGF0ZXBpY2tlclwiLG1heFJvd3M6NCxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtyZXR1cm4gcyh0aGlzLl9kZWZhdWx0cyx0fHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgbixzLG87cz1cImRpdlwiPT09KG49ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXx8XCJzcGFuXCI9PT1uLGUuaWR8fCh0aGlzLnV1aWQrPTEsZS5pZD1cImRwXCIrdGhpcy51dWlkKSwobz10aGlzLl9uZXdJbnN0KHQoZSkscykpLnNldHRpbmdzPXQuZXh0ZW5kKHt9LGl8fHt9KSxcImlucHV0XCI9PT1uP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKGUsbyk6cyYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcihlLG8pfSxfbmV3SW5zdDpmdW5jdGlvbihlLG4pe3JldHVybntpZDplWzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cXC1dKS9nLFwiXFxcXFxcXFwkMVwiKSxpbnB1dDplLHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOm4sZHBEaXY6bj9pKHQoXCI8ZGl2IGNsYXNzPSdcIit0aGlzLl9pbmxpbmVDbGFzcytcIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIG49dChlKTtpLmFwcGVuZD10KFtdKSxpLnRyaWdnZXI9dChbXSksbi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhuLGkpLG4uYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLm9uKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93bikub24oXCJrZXlwcmVzc1wiLHRoaXMuX2RvS2V5UHJlc3MpLm9uKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZShpKSx0LmRhdGEoZSxcImRhdGVwaWNrZXJcIixpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLGkpe3ZhciBuLHMsbyxhPXRoaXMuX2dldChpLFwiYXBwZW5kVGV4dFwiKSxyPXRoaXMuX2dldChpLFwiaXNSVExcIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLGEmJihpLmFwcGVuZD10KFwiPHNwYW4gY2xhc3M9J1wiK3RoaXMuX2FwcGVuZENsYXNzK1wiJz5cIithK1wiPC9zcGFuPlwiKSxlW3I/XCJiZWZvcmVcIjpcImFmdGVyXCJdKGkuYXBwZW5kKSksZS5vZmYoXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxcImZvY3VzXCIhPT0obj10aGlzLl9nZXQoaSxcInNob3dPblwiKSkmJlwiYm90aFwiIT09bnx8ZS5vbihcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLFwiYnV0dG9uXCIhPT1uJiZcImJvdGhcIiE9PW58fChzPXRoaXMuX2dldChpLFwiYnV0dG9uVGV4dFwiKSxvPXRoaXMuX2dldChpLFwiYnV0dG9uSW1hZ2VcIiksaS50cmlnZ2VyPXQodGhpcy5fZ2V0KGksXCJidXR0b25JbWFnZU9ubHlcIik/dChcIjxpbWcvPlwiKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpvLGFsdDpzLHRpdGxlOnN9KTp0KFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmh0bWwobz90KFwiPGltZy8+XCIpLmF0dHIoe3NyYzpvLGFsdDpzLHRpdGxlOnN9KTpzKSksZVtyP1wiYmVmb3JlXCI6XCJhZnRlclwiXShpLnRyaWdnZXIpLGkudHJpZ2dlci5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT1lWzBdP3QuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTp0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PWVbMF0/KHQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSx0LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pKTp0LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24odCl7aWYodGhpcy5fZ2V0KHQsXCJhdXRvU2l6ZVwiKSYmIXQuaW5saW5lKXt2YXIgZSxpLG4scyxvPW5ldyBEYXRlKDIwMDksMTEsMjApLGE9dGhpcy5fZ2V0KHQsXCJkYXRlRm9ybWF0XCIpO2EubWF0Y2goL1tETV0vKSYmKGU9ZnVuY3Rpb24odCl7Zm9yKGk9MCxuPTAscz0wO3M8dC5sZW5ndGg7cysrKXRbc10ubGVuZ3RoPmkmJihpPXRbc10ubGVuZ3RoLG49cyk7cmV0dXJuIG59LG8uc2V0TW9udGgoZSh0aGlzLl9nZXQodCxhLm1hdGNoKC9NTS8pP1wibW9udGhOYW1lc1wiOlwibW9udGhOYW1lc1Nob3J0XCIpKSksby5zZXREYXRlKGUodGhpcy5fZ2V0KHQsYS5tYXRjaCgvREQvKT9cImRheU5hbWVzXCI6XCJkYXlOYW1lc1Nob3J0XCIpKSsyMC1vLmdldERheSgpKSksdC5pbnB1dC5hdHRyKFwic2l6ZVwiLHRoaXMuX2Zvcm1hdERhdGUodCxvKS5sZW5ndGgpfX0sX2lubGluZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgbj10KGUpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwobi5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuYXBwZW5kKGkuZHBEaXYpLHQuZGF0YShlLFwiZGF0ZXBpY2tlclwiLGkpLHRoaXMuX3NldERhdGUoaSx0aGlzLl9nZXREZWZhdWx0RGF0ZShpKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSksaS5kcERpdi5jc3MoXCJkaXNwbGF5XCIsXCJibG9ja1wiKSl9LF9kaWFsb2dEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSxuLG8sYSl7dmFyIHIsbCxoLGMsdSxkPXRoaXMuX2RpYWxvZ0luc3Q7cmV0dXJuIGR8fCh0aGlzLnV1aWQrPTEscj1cImRwXCIrdGhpcy51dWlkLHRoaXMuX2RpYWxvZ0lucHV0PXQoXCI8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J1wiK3IrXCInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPlwiKSx0aGlzLl9kaWFsb2dJbnB1dC5vbihcImtleWRvd25cIix0aGlzLl9kb0tleURvd24pLHQoXCJib2R5XCIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksKGQ9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSkuc2V0dGluZ3M9e30sdC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFwiZGF0ZXBpY2tlclwiLGQpKSxzKGQuc2V0dGluZ3Msb3x8e30pLGk9aSYmaS5jb25zdHJ1Y3Rvcj09PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShkLGkpOmksdGhpcy5fZGlhbG9nSW5wdXQudmFsKGkpLHRoaXMuX3Bvcz1hP2EubGVuZ3RoP2E6W2EucGFnZVgsYS5wYWdlWV06bnVsbCx0aGlzLl9wb3N8fChsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsdGhpcy5fcG9zPVtsLzItMTAwK2MsaC8yLTE1MCt1XSksdGhpcy5fZGlhbG9nSW5wdXQuY3NzKFwibGVmdFwiLHRoaXMuX3Bvc1swXSsyMCtcInB4XCIpLmNzcyhcInRvcFwiLHRoaXMuX3Bvc1sxXStcInB4XCIpLGQuc2V0dGluZ3Mub25TZWxlY3Q9bix0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksdC5ibG9ja1VJJiZ0LmJsb2NrVUkodGhpcy5kcERpdiksdC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFwiZGF0ZXBpY2tlclwiLGQpLHRoaXN9LF9kZXN0cm95RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxuPXQoZSkscz10LmRhdGEoZSxcImRhdGVwaWNrZXJcIik7bi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx0LnJlbW92ZURhdGEoZSxcImRhdGVwaWNrZXJcIiksXCJpbnB1dFwiPT09aT8ocy5hcHBlbmQucmVtb3ZlKCkscy50cmlnZ2VyLnJlbW92ZSgpLG4ucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLm9mZihcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLm9mZihcImtleWRvd25cIix0aGlzLl9kb0tleURvd24pLm9mZihcImtleXByZXNzXCIsdGhpcy5fZG9LZXlQcmVzcykub2ZmKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSk6XCJkaXZcIiE9PWkmJlwic3BhblwiIT09aXx8bi5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKSxjPT09cyYmKGM9bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxuLHM9dChlKSxvPXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKFwiaW5wdXRcIj09PShpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk/KGUuZGlzYWJsZWQ9ITEsby50cmlnZ2VyLmZpbHRlcihcImJ1dHRvblwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcihcImltZ1wiKS5jc3Moe29wYWNpdHk6XCIxLjBcIixjdXJzb3I6XCJcIn0pKTpcImRpdlwiIT09aSYmXCJzcGFuXCIhPT1pfHwoKG49cy5jaGlsZHJlbihcIi5cIit0aGlzLl9pbmxpbmVDbGFzcykpLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSxuLmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhclwiKS5wcm9wKFwiZGlzYWJsZWRcIiwhMSkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPXQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZT9udWxsOnR9KSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxuLHM9dChlKSxvPXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKFwiaW5wdXRcIj09PShpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk/KGUuZGlzYWJsZWQ9ITAsby50cmlnZ2VyLmZpbHRlcihcImJ1dHRvblwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcihcImltZ1wiKS5jc3Moe29wYWNpdHk6XCIwLjVcIixjdXJzb3I6XCJkZWZhdWx0XCJ9KSk6XCJkaXZcIiE9PWkmJlwic3BhblwiIT09aXx8KChuPXMuY2hpbGRyZW4oXCIuXCIrdGhpcy5faW5saW5lQ2xhc3MpKS5jaGlsZHJlbigpLmFkZENsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIiksbi5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJcIikucHJvcChcImRpc2FibGVkXCIsITApKSx0aGlzLl9kaXNhYmxlZElucHV0cz10Lm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09PWU/bnVsbDp0fSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT1lKX0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoO2UrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1tlXT09PXQpcmV0dXJuITA7cmV0dXJuITF9LF9nZXRJbnN0OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpfWNhdGNoKHQpe3Rocm93XCJNaXNzaW5nIGluc3RhbmNlIGRhdGEgZm9yIHRoaXMgZGF0ZXBpY2tlclwifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpLG4pe3ZhciBvLGEscixsLGg9dGhpcy5fZ2V0SW5zdChlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGkpcmV0dXJuXCJkZWZhdWx0c1wiPT09aT90LmV4dGVuZCh7fSx0LmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpoP1wiYWxsXCI9PT1pP3QuZXh0ZW5kKHt9LGguc2V0dGluZ3MpOnRoaXMuX2dldChoLGkpOm51bGw7bz1pfHx7fSxcInN0cmluZ1wiPT10eXBlb2YgaSYmKChvPXt9KVtpXT1uKSxoJiYodGhpcy5fY3VySW5zdD09PWgmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCksYT10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihlLCEwKSxyPXRoaXMuX2dldE1pbk1heERhdGUoaCxcIm1pblwiKSxsPXRoaXMuX2dldE1pbk1heERhdGUoaCxcIm1heFwiKSxzKGguc2V0dGluZ3MsbyksbnVsbCE9PXImJnZvaWQgMCE9PW8uZGF0ZUZvcm1hdCYmdm9pZCAwPT09by5taW5EYXRlJiYoaC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUoaCxyKSksbnVsbCE9PWwmJnZvaWQgMCE9PW8uZGF0ZUZvcm1hdCYmdm9pZCAwPT09by5tYXhEYXRlJiYoaC5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUoaCxsKSksXCJkaXNhYmxlZFwiaW4gbyYmKG8uZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSk6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcihlKSksdGhpcy5fYXR0YWNobWVudHModChlKSxoKSx0aGlzLl9hdXRvU2l6ZShoKSx0aGlzLl9zZXREYXRlKGgsYSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGgpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaCkpfSxfY2hhbmdlRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGUsaSl7dGhpcy5fb3B0aW9uRGF0ZXBpY2tlcih0LGUsaSl9LF9yZWZyZXNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRJbnN0KHQpO2UmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZSl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldEluc3QodCk7aSYmKHRoaXMuX3NldERhdGUoaSxlKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSl9LF9nZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldEluc3QodCk7cmV0dXJuIGkmJiFpLmlubGluZSYmdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChpLGUpLGk/dGhpcy5fZ2V0RGF0ZShpKTpudWxsfSxfZG9LZXlEb3duOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCksYT0hMCxyPW8uZHBEaXYuaXMoXCIudWktZGF0ZXBpY2tlci1ydGxcIik7aWYoby5fa2V5RXZlbnQ9ITAsdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLGE9ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4ocz10KFwidGQuXCIrdC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MrXCI6bm90KC5cIit0LmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcytcIilcIixvLmRwRGl2KSlbMF0mJnQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGUudGFyZ2V0LG8uc2VsZWN0ZWRNb250aCxvLnNlbGVjdGVkWWVhcixzWzBdKSwoaT10LmRhdGVwaWNrZXIuX2dldChvLFwib25TZWxlY3RcIikpPyhuPXQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZShvKSxpLmFwcGx5KG8uaW5wdXQ/by5pbnB1dFswXTpudWxsLFtuLG9dKSk6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLCExO2Nhc2UgMjc6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8tdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBCaWdNb250aHNcIik6LXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDM0OnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/K3QuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwQmlnTW9udGhzXCIpOit0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzNTooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2NsZWFyRGF0ZShlLnRhcmdldCksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM2OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGUudGFyZ2V0KSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/MTotMSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTotdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/LTE6MSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Pyt0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTordC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgNDA6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LDcsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDphPSExfWVsc2UgMzY9PT1lLmtleUNvZGUmJmUuY3RybEtleT90LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOmE9ITE7YSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dmFyIGksbixzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYodC5kYXRlcGlja2VyLl9nZXQocyxcImNvbnN0cmFpbklucHV0XCIpKXJldHVybiBpPXQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycyh0LmRhdGVwaWNrZXIuX2dldChzLFwiZGF0ZUZvcm1hdFwiKSksbj1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWUuY2hhckNvZGU/ZS5rZXlDb2RlOmUuY2hhckNvZGUpLGUuY3RybEtleXx8ZS5tZXRhS2V5fHxuPFwiIFwifHwhaXx8aS5pbmRleE9mKG4pPi0xfSxfZG9LZXlVcDpmdW5jdGlvbihlKXt2YXIgaT10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKGkuaW5wdXQudmFsKCkhPT1pLmxhc3RWYWwpdHJ5e3QuZGF0ZXBpY2tlci5wYXJzZURhdGUodC5kYXRlcGlja2VyLl9nZXQoaSxcImRhdGVGb3JtYXRcIiksaS5pbnB1dD9pLmlucHV0LnZhbCgpOm51bGwsdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoaSkpJiYodC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGkpLHQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKGkpLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSl9Y2F0Y2godCl7fXJldHVybiEwfSxfc2hvd0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGksbixvLGEscixsLGg7XCJpbnB1dFwiIT09KGU9ZS50YXJnZXR8fGUpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihlPXQoXCJpbnB1dFwiLGUucGFyZW50Tm9kZSlbMF0pLHQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoZSl8fHQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09ZXx8KGk9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUpLHQuZGF0ZXBpY2tlci5fY3VySW5zdCYmdC5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLCExIT09KG89KG49dC5kYXRlcGlja2VyLl9nZXQoaSxcImJlZm9yZVNob3dcIikpP24uYXBwbHkoZSxbZSxpXSk6e30pJiYocyhpLnNldHRpbmdzLG8pLGkubGFzdFZhbD1udWxsLHQuZGF0ZXBpY2tlci5fbGFzdElucHV0PWUsdC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGkpLHQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJihlLnZhbHVlPVwiXCIpLHQuZGF0ZXBpY2tlci5fcG9zfHwodC5kYXRlcGlja2VyLl9wb3M9dC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLHQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCksYT0hMSx0KGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIShhfD1cImZpeGVkXCI9PT10KHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpKX0pLHI9e2xlZnQ6dC5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOnQuZGF0ZXBpY2tlci5fcG9zWzFdfSx0LmRhdGVwaWNrZXIuX3Bvcz1udWxsLGkuZHBEaXYuZW1wdHkoKSxpLmRwRGl2LmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGRpc3BsYXk6XCJibG9ja1wiLHRvcDpcIi0xMDAwcHhcIn0pLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSxyPXQuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQoaSxyLGEpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjp0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiZ0LmJsb2NrVUk/XCJzdGF0aWNcIjphP1wiZml4ZWRcIjpcImFic29sdXRlXCIsZGlzcGxheTpcIm5vbmVcIixsZWZ0OnIubGVmdCtcInB4XCIsdG9wOnIudG9wK1wicHhcIn0pLGkuaW5saW5lfHwobD10LmRhdGVwaWNrZXIuX2dldChpLFwic2hvd0FuaW1cIiksaD10LmRhdGVwaWNrZXIuX2dldChpLFwiZHVyYXRpb25cIiksaS5kcERpdi5jc3MoXCJ6LWluZGV4XCIsZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk7dC5sZW5ndGgmJnRbMF0hPT1kb2N1bWVudDspe2lmKChcImFic29sdXRlXCI9PT0oZT10LmNzcyhcInBvc2l0aW9uXCIpKXx8XCJyZWxhdGl2ZVwiPT09ZXx8XCJmaXhlZFwiPT09ZSkmJihpPXBhcnNlSW50KHQuY3NzKFwiekluZGV4XCIpLDEwKSwhaXNOYU4oaSkmJjAhPT1pKSlyZXR1cm4gaTt0PXQucGFyZW50KCl9cmV0dXJuIDB9KHQoZSkpKzEpLHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsdC5lZmZlY3RzJiZ0LmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLHQuZGF0ZXBpY2tlci5fZ2V0KGksXCJzaG93T3B0aW9uc1wiKSxoKTppLmRwRGl2W2x8fFwic2hvd1wiXShsP2g6bnVsbCksdC5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KGkpJiZpLmlucHV0LnRyaWdnZXIoXCJmb2N1c1wiKSx0LmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpKX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQsYz1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG89c1sxXSxhPWUuZHBEaXYuZmluZChcIi5cIit0aGlzLl9kYXlPdmVyQ2xhc3MrXCIgYVwiKTthLmxlbmd0aD4wJiZuLmFwcGx5KGEuZ2V0KDApKSxlLmRwRGl2LnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTRcIikud2lkdGgoXCJcIiksbz4xJiZlLmRwRGl2LmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS1cIitvKS5jc3MoXCJ3aWR0aFwiLDE3Km8rXCJlbVwiKSxlLmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/XCJhZGRcIjpcInJlbW92ZVwiKStcIkNsYXNzXCJdKFwidWktZGF0ZXBpY2tlci1tdWx0aVwiKSxlLmRwRGl2Wyh0aGlzLl9nZXQoZSxcImlzUlRMXCIpP1wiYWRkXCI6XCJyZW1vdmVcIikrXCJDbGFzc1wiXShcInVpLWRhdGVwaWNrZXItcnRsXCIpLGU9PT10LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChlKSYmZS5pbnB1dC50cmlnZ2VyKFwiZm9jdXNcIiksZS55ZWFyc2h0bWwmJihpPWUueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09ZS55ZWFyc2h0bWwmJmUueWVhcnNodG1sJiZlLmRwRGl2LmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0XCIpLnJlcGxhY2VXaXRoKGUueWVhcnNodG1sKSxpPWUueWVhcnNodG1sPW51bGx9LDApKX0sX3Nob3VsZEZvY3VzSW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5wdXQmJnQuaW5wdXQuaXMoXCI6dmlzaWJsZVwiKSYmIXQuaW5wdXQuaXMoXCI6ZGlzYWJsZWRcIikmJiF0LmlucHV0LmlzKFwiOmZvY3VzXCIpfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPWUuZHBEaXYub3V0ZXJXaWR0aCgpLG89ZS5kcERpdi5vdXRlckhlaWdodCgpLGE9ZS5pbnB1dD9lLmlucHV0Lm91dGVyV2lkdGgoKTowLHI9ZS5pbnB1dD9lLmlucHV0Lm91dGVySGVpZ2h0KCk6MCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsobj8wOnQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhuPzA6dChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiBpLmxlZnQtPXRoaXMuX2dldChlLFwiaXNSVExcIik/cy1hOjAsaS5sZWZ0LT1uJiZpLmxlZnQ9PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPW4mJmkudG9wPT09ZS5pbnB1dC5vZmZzZXQoKS50b3Arcj90KGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtzPmwmJmw+cz9NYXRoLmFicyhpLmxlZnQrcy1sKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3Arbz5oJiZoPm8/TWF0aC5hYnMobytyKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbihlKXtmb3IodmFyIGksbj10aGlzLl9nZXRJbnN0KGUpLHM9dGhpcy5fZ2V0KG4sXCJpc1JUTFwiKTtlJiYoXCJoaWRkZW5cIj09PWUudHlwZXx8MSE9PWUubm9kZVR5cGV8fHQuZXhwci5maWx0ZXJzLmhpZGRlbihlKSk7KWU9ZVtzP1wicHJldmlvdXNTaWJsaW5nXCI6XCJuZXh0U2libGluZ1wiXTtyZXR1cm5bKGk9dChlKS5vZmZzZXQoKSkubGVmdCxpLnRvcF19LF9oaWRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbyxhPXRoaXMuX2N1ckluc3Q7IWF8fGUmJmEhPT10LmRhdGEoZSxcImRhdGVwaWNrZXJcIil8fHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nJiYoaT10aGlzLl9nZXQoYSxcInNob3dBbmltXCIpLG49dGhpcy5fZ2V0KGEsXCJkdXJhdGlvblwiKSxzPWZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKGEpfSx0LmVmZmVjdHMmJih0LmVmZmVjdHMuZWZmZWN0W2ldfHx0LmVmZmVjdHNbaV0pP2EuZHBEaXYuaGlkZShpLHQuZGF0ZXBpY2tlci5fZ2V0KGEsXCJzaG93T3B0aW9uc1wiKSxuLHMpOmEuZHBEaXZbXCJzbGlkZURvd25cIj09PWk/XCJzbGlkZVVwXCI6XCJmYWRlSW5cIj09PWk/XCJmYWRlT3V0XCI6XCJoaWRlXCJdKGk/bjpudWxsLHMpLGl8fHMoKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSwobz10aGlzLl9nZXQoYSxcIm9uQ2xvc2VcIikpJiZvLmFwcGx5KGEuaW5wdXQ/YS5pbnB1dFswXTpudWxsLFthLmlucHV0P2EuaW5wdXQudmFsKCk6XCJcIixhXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OlwiMFwiLHRvcDpcIi0xMDBweFwifSksdC5ibG9ja1VJJiYodC51bmJsb2NrVUkoKSx0KFwiYm9keVwiKS5hcHBlbmQodGhpcy5kcERpdikpKSx0aGlzLl9pbkRpYWxvZz0hMSl9LF90aWR5RGlhbG9nOmZ1bmN0aW9uKHQpe3QuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLm9mZihcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKGUpe2lmKHQuZGF0ZXBpY2tlci5fY3VySW5zdCl7dmFyIGk9dChlLnRhcmdldCksbj10LmRhdGVwaWNrZXIuX2dldEluc3QoaVswXSk7KGlbMF0uaWQ9PT10LmRhdGVwaWNrZXIuX21haW5EaXZJZHx8MCE9PWkucGFyZW50cyhcIiNcIit0LmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RofHxpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpfHxpLmNsb3Nlc3QoXCIuXCIrdC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aHx8IXQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmd8fHQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJnQuYmxvY2tVSSkmJighaS5oYXNDbGFzcyh0LmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKXx8dC5kYXRlcGlja2VyLl9jdXJJbnN0PT09bil8fHQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcz10KGUpLG89dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihzWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKG8saSsoXCJNXCI9PT1uP3RoaXMuX2dldChvLFwic2hvd0N1cnJlbnRBdFBvc1wiKTowKSxuKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKG8pKX0sX2dvdG9Ub2RheTpmdW5jdGlvbihlKXt2YXIgaSxuPXQoZSkscz10aGlzLl9nZXRJbnN0KG5bMF0pO3RoaXMuX2dldChzLFwiZ290b0N1cnJlbnRcIikmJnMuY3VycmVudERheT8ocy5zZWxlY3RlZERheT1zLmN1cnJlbnREYXkscy5kcmF3TW9udGg9cy5zZWxlY3RlZE1vbnRoPXMuY3VycmVudE1vbnRoLHMuZHJhd1llYXI9cy5zZWxlY3RlZFllYXI9cy5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUscy5zZWxlY3RlZERheT1pLmdldERhdGUoKSxzLmRyYXdNb250aD1zLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLHMuZHJhd1llYXI9cy5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UocyksdGhpcy5fYWRqdXN0RGF0ZShuKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbihlLGksbil7XG52YXIgcz10KGUpLG89dGhpcy5fZ2V0SW5zdChzWzBdKTtvW1wic2VsZWN0ZWRcIisoXCJNXCI9PT1uP1wiTW9udGhcIjpcIlllYXJcIildPW9bXCJkcmF3XCIrKFwiTVwiPT09bj9cIk1vbnRoXCI6XCJZZWFyXCIpXT1wYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKG8pLHRoaXMuX2FkanVzdERhdGUocyl9LF9zZWxlY3REYXk6ZnVuY3Rpb24oZSxpLG4scyl7dmFyIG8sYT10KGUpO3QocykuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihhWzBdKXx8KChvPXRoaXMuX2dldEluc3QoYVswXSkpLnNlbGVjdGVkRGF5PW8uY3VycmVudERheT10KFwiYVwiLHMpLmh0bWwoKSxvLnNlbGVjdGVkTW9udGg9by5jdXJyZW50TW9udGg9aSxvLnNlbGVjdGVkWWVhcj1vLmN1cnJlbnRZZWFyPW4sdGhpcy5fc2VsZWN0RGF0ZShlLHRoaXMuX2Zvcm1hdERhdGUobyxvLmN1cnJlbnREYXksby5jdXJyZW50TW9udGgsby5jdXJyZW50WWVhcikpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbihlKXt2YXIgaT10KGUpO3RoaXMuX3NlbGVjdERhdGUoaSxcIlwiKX0sX3NlbGVjdERhdGU6ZnVuY3Rpb24oZSxpKXt2YXIgbixzPXQoZSksbz10aGlzLl9nZXRJbnN0KHNbMF0pO2k9bnVsbCE9aT9pOnRoaXMuX2Zvcm1hdERhdGUobyksby5pbnB1dCYmby5pbnB1dC52YWwoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG8pLChuPXRoaXMuX2dldChvLFwib25TZWxlY3RcIikpP24uYXBwbHkoby5pbnB1dD9vLmlucHV0WzBdOm51bGwsW2ksb10pOm8uaW5wdXQmJm8uaW5wdXQudHJpZ2dlcihcImNoYW5nZVwiKSxvLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKG8pOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1vLmlucHV0WzBdLFwib2JqZWN0XCIhPXR5cGVvZiBvLmlucHV0WzBdJiZvLmlucHV0LnRyaWdnZXIoXCJmb2N1c1wiKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG89dGhpcy5fZ2V0KGUsXCJhbHRGaWVsZFwiKTtvJiYoaT10aGlzLl9nZXQoZSxcImFsdEZvcm1hdFwiKXx8dGhpcy5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLG49dGhpcy5fZ2V0RGF0ZShlKSxzPXRoaXMuZm9ybWF0RGF0ZShpLG4sdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSx0KG8pLnZhbChzKSl9LG5vV2Vla2VuZHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm5bZT4wJiZlPDYsXCJcIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKHQpe3ZhciBlLGk9bmV3IERhdGUodC5nZXRUaW1lKCkpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCkrNC0oaS5nZXREYXkoKXx8NykpLGU9aS5nZXRUaW1lKCksaS5zZXRNb250aCgwKSxpLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChlLWkpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24oZSxpLG4pe2lmKG51bGw9PWV8fG51bGw9PWkpdGhyb3dcIkludmFsaWQgYXJndW1lbnRzXCI7aWYoXCJcIj09PShpPVwib2JqZWN0XCI9PXR5cGVvZiBpP2kudG9TdHJpbmcoKTppK1wiXCIpKXJldHVybiBudWxsO3ZhciBzLG8sYSxyLGw9MCxoPShuP24uc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmYsYz1cInN0cmluZ1wiIT10eXBlb2YgaD9oOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQoaCwxMCksdT0obj9uLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsZD0obj9uLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxwPShuP24ubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsZj0obj9uLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsZz0tMSxtPS0xLHY9LTEsYj0tMSxfPSExLHk9ZnVuY3Rpb24odCl7dmFyIGk9cysxPGUubGVuZ3RoJiZlLmNoYXJBdChzKzEpPT09dDtyZXR1cm4gaSYmcysrLGl9LHc9ZnVuY3Rpb24odCl7dmFyIGU9eSh0KSxuPVwiQFwiPT09dD8xNDpcIiFcIj09PXQ/MjA6XCJ5XCI9PT10JiZlPzQ6XCJvXCI9PT10PzM6MixzPW5ldyBSZWdFeHAoXCJeXFxcXGR7XCIrKFwieVwiPT09dD9uOjEpK1wiLFwiK24rXCJ9XCIpLG89aS5zdWJzdHJpbmcobCkubWF0Y2gocyk7aWYoIW8pdGhyb3dcIk1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uIFwiK2w7cmV0dXJuIGwrPW9bMF0ubGVuZ3RoLHBhcnNlSW50KG9bMF0sMTApfSx4PWZ1bmN0aW9uKGUsbixzKXt2YXIgbz0tMSxhPXQubWFwKHkoZSk/czpuLGZ1bmN0aW9uKHQsZSl7cmV0dXJuW1tlLHRdXX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4tKHRbMV0ubGVuZ3RoLWVbMV0ubGVuZ3RoKX0pO2lmKHQuZWFjaChhLGZ1bmN0aW9uKHQsZSl7dmFyIG49ZVsxXTtpZihpLnN1YnN0cihsLG4ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBvPWVbMF0sbCs9bi5sZW5ndGgsITF9KSwtMSE9PW8pcmV0dXJuIG8rMTt0aHJvd1wiVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uIFwiK2x9LEM9ZnVuY3Rpb24oKXtpZihpLmNoYXJBdChsKSE9PWUuY2hhckF0KHMpKXRocm93XCJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gXCIrbDtsKyt9O2ZvcihzPTA7czxlLmxlbmd0aDtzKyspaWYoXylcIidcIiE9PWUuY2hhckF0KHMpfHx5KFwiJ1wiKT9DKCk6Xz0hMTtlbHNlIHN3aXRjaChlLmNoYXJBdChzKSl7Y2FzZVwiZFwiOnY9dyhcImRcIik7YnJlYWs7Y2FzZVwiRFwiOngoXCJEXCIsdSxkKTticmVhaztjYXNlXCJvXCI6Yj13KFwib1wiKTticmVhaztjYXNlXCJtXCI6bT13KFwibVwiKTticmVhaztjYXNlXCJNXCI6bT14KFwiTVwiLHAsZik7YnJlYWs7Y2FzZVwieVwiOmc9dyhcInlcIik7YnJlYWs7Y2FzZVwiQFwiOmc9KHI9bmV3IERhdGUodyhcIkBcIikpKS5nZXRGdWxsWWVhcigpLG09ci5nZXRNb250aCgpKzEsdj1yLmdldERhdGUoKTticmVhaztjYXNlXCIhXCI6Zz0ocj1uZXcgRGF0ZSgodyhcIiFcIiktdGhpcy5fdGlja3NUbzE5NzApLzFlNCkpLmdldEZ1bGxZZWFyKCksbT1yLmdldE1vbnRoKCkrMSx2PXIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2VcIidcIjp5KFwiJ1wiKT9DKCk6Xz0hMDticmVhaztkZWZhdWx0OkMoKX1pZihsPGkubGVuZ3RoJiYoYT1pLnN1YnN0cihsKSwhL15cXHMrLy50ZXN0KGEpKSl0aHJvd1wiRXh0cmEvdW5wYXJzZWQgY2hhcmFjdGVycyBmb3VuZCBpbiBkYXRlOiBcIithO2lmKC0xPT09Zz9nPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTpnPDEwMCYmKGcrPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyhnPD1jPzA6LTEwMCkpLGI+LTEpZm9yKG09MSx2PWI7ISh2PD0obz10aGlzLl9nZXREYXlzSW5Nb250aChnLG0tMSkpKTspbSsrLHYtPW87aWYoKHI9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZyxtLTEsdikpKS5nZXRGdWxsWWVhcigpIT09Z3x8ci5nZXRNb250aCgpKzEhPT1tfHxyLmdldERhdGUoKSE9PXYpdGhyb3dcIkludmFsaWQgZGF0ZVwiO3JldHVybiByfSxBVE9NOlwieXktbW0tZGRcIixDT09LSUU6XCJELCBkZCBNIHl5XCIsSVNPXzg2MDE6XCJ5eS1tbS1kZFwiLFJGQ184MjI6XCJELCBkIE0geVwiLFJGQ184NTA6XCJERCwgZGQtTS15XCIsUkZDXzEwMzY6XCJELCBkIE0geVwiLFJGQ18xMTIzOlwiRCwgZCBNIHl5XCIsUkZDXzI4MjI6XCJELCBkIE0geXlcIixSU1M6XCJELCBkIE0geVwiLFRJQ0tTOlwiIVwiLFRJTUVTVEFNUDpcIkBcIixXM0M6XCJ5eS1tbS1kZFwiLF90aWNrc1RvMTk3MDoyNCooNzE4Njg1K01hdGguZmxvb3IoNDkyLjUpLU1hdGguZmxvb3IoMTkuNykrTWF0aC5mbG9vcig0LjkyNSkpKjYwKjYwKjFlNyxmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxpKXtpZighZSlyZXR1cm5cIlwiO3ZhciBuLHM9KGk/aS5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LG89KGk/aS5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsYT0oaT9pLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LHI9KGk/aS5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLGw9ZnVuY3Rpb24oZSl7dmFyIGk9bisxPHQubGVuZ3RoJiZ0LmNoYXJBdChuKzEpPT09ZTtyZXR1cm4gaSYmbisrLGl9LGg9ZnVuY3Rpb24odCxlLGkpe3ZhciBuPVwiXCIrZTtpZihsKHQpKWZvcig7bi5sZW5ndGg8aTspbj1cIjBcIituO3JldHVybiBufSxjPWZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiBsKHQpP25bZV06aVtlXX0sdT1cIlwiLGQ9ITE7aWYoZSlmb3Iobj0wO248dC5sZW5ndGg7bisrKWlmKGQpXCInXCIhPT10LmNoYXJBdChuKXx8bChcIidcIik/dSs9dC5jaGFyQXQobik6ZD0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChuKSl7Y2FzZVwiZFwiOnUrPWgoXCJkXCIsZS5nZXREYXRlKCksMik7YnJlYWs7Y2FzZVwiRFwiOnUrPWMoXCJEXCIsZS5nZXREYXkoKSxzLG8pO2JyZWFrO2Nhc2VcIm9cIjp1Kz1oKFwib1wiLE1hdGgucm91bmQoKG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlXCJtXCI6dSs9aChcIm1cIixlLmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlXCJNXCI6dSs9YyhcIk1cIixlLmdldE1vbnRoKCksYSxyKTticmVhaztjYXNlXCJ5XCI6dSs9bChcInlcIik/ZS5nZXRGdWxsWWVhcigpOihlLmdldEZ1bGxZZWFyKCklMTAwPDEwP1wiMFwiOlwiXCIpK2UuZ2V0RnVsbFllYXIoKSUxMDA7YnJlYWs7Y2FzZVwiQFwiOnUrPWUuZ2V0VGltZSgpO2JyZWFrO2Nhc2VcIiFcIjp1Kz0xZTQqZS5nZXRUaW1lKCkrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZVwiJ1wiOmwoXCInXCIpP3UrPVwiJ1wiOmQ9ITA7YnJlYWs7ZGVmYXVsdDp1Kz10LmNoYXJBdChuKX1yZXR1cm4gdX0sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24odCl7dmFyIGUsaT1cIlwiLG49ITEscz1mdW5jdGlvbihpKXt2YXIgbj1lKzE8dC5sZW5ndGgmJnQuY2hhckF0KGUrMSk9PT1pO3JldHVybiBuJiZlKyssbn07Zm9yKGU9MDtlPHQubGVuZ3RoO2UrKylpZihuKVwiJ1wiIT09dC5jaGFyQXQoZSl8fHMoXCInXCIpP2krPXQuY2hhckF0KGUpOm49ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQoZSkpe2Nhc2VcImRcIjpjYXNlXCJtXCI6Y2FzZVwieVwiOmNhc2VcIkBcIjppKz1cIjAxMjM0NTY3ODlcIjticmVhaztjYXNlXCJEXCI6Y2FzZVwiTVwiOnJldHVybiBudWxsO2Nhc2VcIidcIjpzKFwiJ1wiKT9pKz1cIidcIjpuPSEwO2JyZWFrO2RlZmF1bHQ6aSs9dC5jaGFyQXQoZSl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwIT09dC5zZXR0aW5nc1tlXT90LnNldHRpbmdzW2VdOnRoaXMuX2RlZmF1bHRzW2VdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbih0LGUpe2lmKHQuaW5wdXQudmFsKCkhPT10Lmxhc3RWYWwpe3ZhciBpPXRoaXMuX2dldCh0LFwiZGF0ZUZvcm1hdFwiKSxuPXQubGFzdFZhbD10LmlucHV0P3QuaW5wdXQudmFsKCk6bnVsbCxzPXRoaXMuX2dldERlZmF1bHREYXRlKHQpLG89cyxhPXRoaXMuX2dldEZvcm1hdENvbmZpZyh0KTt0cnl7bz10aGlzLnBhcnNlRGF0ZShpLG4sYSl8fHN9Y2F0Y2godCl7bj1lP1wiXCI6bn10LnNlbGVjdGVkRGF5PW8uZ2V0RGF0ZSgpLHQuZHJhd01vbnRoPXQuc2VsZWN0ZWRNb250aD1vLmdldE1vbnRoKCksdC5kcmF3WWVhcj10LnNlbGVjdGVkWWVhcj1vLmdldEZ1bGxZZWFyKCksdC5jdXJyZW50RGF5PW4/by5nZXREYXRlKCk6MCx0LmN1cnJlbnRNb250aD1uP28uZ2V0TW9udGgoKTowLHQuY3VycmVudFllYXI9bj9vLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZSh0KX19LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgodCx0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsXCJkZWZhdWx0RGF0ZVwiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihlLGksbil7dmFyIHM9bnVsbD09aXx8XCJcIj09PWk/bjpcInN0cmluZ1wiPT10eXBlb2YgaT9mdW5jdGlvbihpKXt0cnl7cmV0dXJuIHQuZGF0ZXBpY2tlci5wYXJzZURhdGUodC5kYXRlcGlja2VyLl9nZXQoZSxcImRhdGVGb3JtYXRcIiksaSx0LmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhlKSl9Y2F0Y2godCl7fWZvcih2YXIgbj0oaS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pP3QuZGF0ZXBpY2tlci5fZ2V0RGF0ZShlKTpudWxsKXx8bmV3IERhdGUscz1uLmdldEZ1bGxZZWFyKCksbz1uLmdldE1vbnRoKCksYT1uLmdldERhdGUoKSxyPS8oWytcXC1dP1swLTldKylcXHMqKGR8RHx3fFd8bXxNfHl8WSk/L2csbD1yLmV4ZWMoaSk7bDspe3N3aXRjaChsWzJdfHxcImRcIil7Y2FzZVwiZFwiOmNhc2VcIkRcIjphKz1wYXJzZUludChsWzFdLDEwKTticmVhaztjYXNlXCJ3XCI6Y2FzZVwiV1wiOmErPTcqcGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZVwibVwiOmNhc2VcIk1cIjpvKz1wYXJzZUludChsWzFdLDEwKSxhPU1hdGgubWluKGEsdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChzLG8pKTticmVhaztjYXNlXCJ5XCI6Y2FzZVwiWVwiOnMrPXBhcnNlSW50KGxbMV0sMTApLGE9TWF0aC5taW4oYSx0LmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKHMsbykpfWw9ci5leGVjKGkpfXJldHVybiBuZXcgRGF0ZShzLG8sYSl9KGkpOlwibnVtYmVyXCI9PXR5cGVvZiBpP2lzTmFOKGkpP246ZnVuY3Rpb24odCl7dmFyIGU9bmV3IERhdGU7cmV0dXJuIGUuc2V0RGF0ZShlLmdldERhdGUoKSt0KSxlfShpKTpuZXcgRGF0ZShpLmdldFRpbWUoKSk7cmV0dXJuKHM9cyYmXCJJbnZhbGlkIERhdGVcIj09PXMudG9TdHJpbmcoKT9uOnMpJiYocy5zZXRIb3VycygwKSxzLnNldE1pbnV0ZXMoMCkscy5zZXRTZWNvbmRzKDApLHMuc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChzKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKHQpe3JldHVybiB0Pyh0LnNldEhvdXJzKHQuZ2V0SG91cnMoKT4xMj90LmdldEhvdXJzKCkrMjowKSx0KTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG49IWUscz10LnNlbGVjdGVkTW9udGgsbz10LnNlbGVjdGVkWWVhcixhPXRoaXMuX3Jlc3RyaWN0TWluTWF4KHQsdGhpcy5fZGV0ZXJtaW5lRGF0ZSh0LGUsbmV3IERhdGUpKTt0LnNlbGVjdGVkRGF5PXQuY3VycmVudERheT1hLmdldERhdGUoKSx0LmRyYXdNb250aD10LnNlbGVjdGVkTW9udGg9dC5jdXJyZW50TW9udGg9YS5nZXRNb250aCgpLHQuZHJhd1llYXI9dC5zZWxlY3RlZFllYXI9dC5jdXJyZW50WWVhcj1hLmdldEZ1bGxZZWFyKCkscz09PXQuc2VsZWN0ZWRNb250aCYmbz09PXQuc2VsZWN0ZWRZZWFyfHxpfHx0aGlzLl9ub3RpZnlDaGFuZ2UodCksdGhpcy5fYWRqdXN0SW5zdERhdGUodCksdC5pbnB1dCYmdC5pbnB1dC52YWwobj9cIlwiOnRoaXMuX2Zvcm1hdERhdGUodCkpfSxfZ2V0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4hdC5jdXJyZW50WWVhcnx8dC5pbnB1dCYmXCJcIj09PXQuaW5wdXQudmFsKCk/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSkpfSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0KGUsXCJzdGVwTW9udGhzXCIpLG49XCIjXCIrZS5pZC5yZXBsYWNlKC9cXFxcXFxcXC9nLFwiXFxcXFwiKTtlLmRwRGl2LmZpbmQoXCJbZGF0YS1oYW5kbGVyXVwiKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT17cHJldjpmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShuLC1pLFwiTVwiKX0sbmV4dDpmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShuLCtpLFwiTVwiKX0saGlkZTpmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2dvdG9Ub2RheShuKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KG4sK3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1tb250aFwiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXllYXJcIiksdGhpcyksITF9LHNlbGVjdE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKG4sdGhpcyxcIk1cIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIobix0aGlzLFwiWVwiKSwhMX19O3QodGhpcykub24odGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWV2ZW50XCIpLGVbdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLWhhbmRsZXJcIildKX0pfSxfZ2VuZXJhdGVIVE1MOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLG8sYSxyLGwsaCxjLHUsZCxwLGYsZyxtLHYsYixfLHksdyx4LEMsayxULEQsUyxJLFAsRSxNLEEsTyxOLEgseixMLFcsUiwkPW5ldyBEYXRlLGo9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoJC5nZXRGdWxsWWVhcigpLCQuZ2V0TW9udGgoKSwkLmdldERhdGUoKSkpLEY9dGhpcy5fZ2V0KHQsXCJpc1JUTFwiKSxCPXRoaXMuX2dldCh0LFwic2hvd0J1dHRvblBhbmVsXCIpLHE9dGhpcy5fZ2V0KHQsXCJoaWRlSWZOb1ByZXZOZXh0XCIpLFU9dGhpcy5fZ2V0KHQsXCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0XCIpLFk9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksVj10aGlzLl9nZXQodCxcInNob3dDdXJyZW50QXRQb3NcIiksSz10aGlzLl9nZXQodCxcInN0ZXBNb250aHNcIiksWD0xIT09WVswXXx8MSE9PVlbMV0sRz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdCh0LmN1cnJlbnREYXk/bmV3IERhdGUodC5jdXJyZW50WWVhcix0LmN1cnJlbnRNb250aCx0LmN1cnJlbnREYXkpOm5ldyBEYXRlKDk5OTksOSw5KSksUT10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtaW5cIiksSj10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtYXhcIiksWj10LmRyYXdNb250aC1WLHR0PXQuZHJhd1llYXI7aWYoWjwwJiYoWis9MTIsdHQtLSksSilmb3IoZT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShKLmdldEZ1bGxZZWFyKCksSi5nZXRNb250aCgpLVlbMF0qWVsxXSsxLEouZ2V0RGF0ZSgpKSksZT1RJiZlPFE/UTplO3RoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHR0LFosMSkpPmU7KS0tWjwwJiYoWj0xMSx0dC0tKTtmb3IodC5kcmF3TW9udGg9Wix0LmRyYXdZZWFyPXR0LGk9dGhpcy5fZ2V0KHQsXCJwcmV2VGV4dFwiKSxpPVU/dGhpcy5mb3JtYXREYXRlKGksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWi1LLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOmksbj10aGlzLl9jYW5BZGp1c3RNb250aCh0LC0xLHR0LFopP1wiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nXCIraStcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKEY/XCJlXCI6XCJ3XCIpK1wiJz5cIitpK1wiPC9zcGFuPjwvYT5cIjpxP1wiXCI6XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSdcIitpK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoRj9cImVcIjpcIndcIikrXCInPlwiK2krXCI8L3NwYW4+PC9hPlwiLHM9dGhpcy5fZ2V0KHQsXCJuZXh0VGV4dFwiKSxzPVU/dGhpcy5mb3JtYXREYXRlKHMsdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWitLLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOnMsbz10aGlzLl9jYW5BZGp1c3RNb250aCh0LDEsdHQsWik/XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0nbmV4dCcgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSdcIitzK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoRj9cIndcIjpcImVcIikrXCInPlwiK3MrXCI8L3NwYW4+PC9hPlwiOnE/XCJcIjpcIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9J1wiK3MrXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhGP1wid1wiOlwiZVwiKStcIic+XCIrcytcIjwvc3Bhbj48L2E+XCIsYT10aGlzLl9nZXQodCxcImN1cnJlbnRUZXh0XCIpLHI9dGhpcy5fZ2V0KHQsXCJnb3RvQ3VycmVudFwiKSYmdC5jdXJyZW50RGF5P0c6aixhPVU/dGhpcy5mb3JtYXREYXRlKGEscix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOmEsbD10LmlubGluZT9cIlwiOlwiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz5cIit0aGlzLl9nZXQodCxcImNsb3NlVGV4dFwiKStcIjwvYnV0dG9uPlwiLGg9Qj9cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+XCIrKEY/bDpcIlwiKSsodGhpcy5faXNJblJhbmdlKHQscik/XCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY3VycmVudCB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXNlY29uZGFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3RvZGF5JyBkYXRhLWV2ZW50PSdjbGljayc+XCIrYStcIjwvYnV0dG9uPlwiOlwiXCIpKyhGP1wiXCI6bCkrXCI8L2Rpdj5cIjpcIlwiLGM9cGFyc2VJbnQodGhpcy5fZ2V0KHQsXCJmaXJzdERheVwiKSwxMCksYz1pc05hTihjKT8wOmMsdT10aGlzLl9nZXQodCxcInNob3dXZWVrXCIpLGQ9dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc1wiKSxwPXRoaXMuX2dldCh0LFwiZGF5TmFtZXNNaW5cIiksZj10aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNcIiksZz10aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNTaG9ydFwiKSxtPXRoaXMuX2dldCh0LFwiYmVmb3JlU2hvd0RheVwiKSx2PXRoaXMuX2dldCh0LFwic2hvd090aGVyTW9udGhzXCIpLGI9dGhpcy5fZ2V0KHQsXCJzZWxlY3RPdGhlck1vbnRoc1wiKSxfPXRoaXMuX2dldERlZmF1bHREYXRlKHQpLHk9XCJcIix4PTA7eDxZWzBdO3grKyl7Zm9yKEM9XCJcIix0aGlzLm1heFJvd3M9NCxrPTA7azxZWzFdO2srKyl7aWYoVD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaLHQuc2VsZWN0ZWREYXkpKSxEPVwiIHVpLWNvcm5lci1hbGxcIixTPVwiXCIsWCl7aWYoUys9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwXCIsWVsxXT4xKXN3aXRjaChrKXtjYXNlIDA6Uys9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1maXJzdFwiLEQ9XCIgdWktY29ybmVyLVwiKyhGP1wicmlnaHRcIjpcImxlZnRcIik7YnJlYWs7Y2FzZSBZWzFdLTE6Uys9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0XCIsRD1cIiB1aS1jb3JuZXItXCIrKEY/XCJsZWZ0XCI6XCJyaWdodFwiKTticmVhaztkZWZhdWx0OlMrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlXCIsRD1cIlwifVMrPVwiJz5cIn1mb3IoUys9XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeFwiK0QrXCInPlwiKygvYWxsfGxlZnQvLnRlc3QoRCkmJjA9PT14P0Y/bzpuOlwiXCIpKygvYWxsfHJpZ2h0Ly50ZXN0KEQpJiYwPT09eD9GP246bzpcIlwiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcih0LFosdHQsUSxKLHg+MHx8az4wLGYsZykrXCI8L2Rpdj48dGFibGUgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2FsZW5kYXInPjx0aGVhZD48dHI+XCIsST11P1wiPHRoIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz5cIit0aGlzLl9nZXQodCxcIndlZWtIZWFkZXJcIikrXCI8L3RoPlwiOlwiXCIsdz0wO3c8Nzt3KyspSSs9XCI8dGggc2NvcGU9J2NvbCdcIisoKHcrYys2KSU3Pj01P1wiIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstZW5kJ1wiOlwiXCIpK1wiPjxzcGFuIHRpdGxlPSdcIitkW1A9KHcrYyklN10rXCInPlwiK3BbUF0rXCI8L3NwYW4+PC90aD5cIjtmb3IoUys9SStcIjwvdHI+PC90aGVhZD48dGJvZHk+XCIsRT10aGlzLl9nZXREYXlzSW5Nb250aCh0dCxaKSx0dD09PXQuc2VsZWN0ZWRZZWFyJiZaPT09dC5zZWxlY3RlZE1vbnRoJiYodC5zZWxlY3RlZERheT1NYXRoLm1pbih0LnNlbGVjdGVkRGF5LEUpKSxNPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgodHQsWiktYys3KSU3LEE9TWF0aC5jZWlsKChNK0UpLzcpLE89WCYmdGhpcy5tYXhSb3dzPkE/dGhpcy5tYXhSb3dzOkEsdGhpcy5tYXhSb3dzPU8sTj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaLDEtTSkpLEg9MDtIPE87SCsrKXtmb3IoUys9XCI8dHI+XCIsej11P1wiPHRkIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstY29sJz5cIit0aGlzLl9nZXQodCxcImNhbGN1bGF0ZVdlZWtcIikoTikrXCI8L3RkPlwiOlwiXCIsdz0wO3c8Nzt3KyspTD1tP20uYXBwbHkodC5pbnB1dD90LmlucHV0WzBdOm51bGwsW05dKTpbITAsXCJcIl0sUj0oVz1OLmdldE1vbnRoKCkhPT1aKSYmIWJ8fCFMWzBdfHxRJiZOPFF8fEomJk4+Six6Kz1cIjx0ZCBjbGFzcz0nXCIrKCh3K2MrNiklNz49NT9cIiB1aS1kYXRlcGlja2VyLXdlZWstZW5kXCI6XCJcIikrKFc/XCIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aFwiOlwiXCIpKyhOLmdldFRpbWUoKT09PVQuZ2V0VGltZSgpJiZaPT09dC5zZWxlY3RlZE1vbnRoJiZ0Ll9rZXlFdmVudHx8Xy5nZXRUaW1lKCk9PT1OLmdldFRpbWUoKSYmXy5nZXRUaW1lKCk9PT1ULmdldFRpbWUoKT9cIiBcIit0aGlzLl9kYXlPdmVyQ2xhc3M6XCJcIikrKFI/XCIgXCIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrXCIgdWktc3RhdGUtZGlzYWJsZWRcIjpcIlwiKSsoVyYmIXY/XCJcIjpcIiBcIitMWzFdKyhOLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpP1wiIFwiK3RoaXMuX2N1cnJlbnRDbGFzczpcIlwiKSsoTi5nZXRUaW1lKCk9PT1qLmdldFRpbWUoKT9cIiB1aS1kYXRlcGlja2VyLXRvZGF5XCI6XCJcIikpK1wiJ1wiKyhXJiYhdnx8IUxbMl0/XCJcIjpcIiB0aXRsZT0nXCIrTFsyXS5yZXBsYWNlKC8nL2csXCImIzM5O1wiKStcIidcIikrKFI/XCJcIjpcIiBkYXRhLWhhbmRsZXI9J3NlbGVjdERheScgZGF0YS1ldmVudD0nY2xpY2snIGRhdGEtbW9udGg9J1wiK04uZ2V0TW9udGgoKStcIicgZGF0YS15ZWFyPSdcIitOLmdldEZ1bGxZZWFyKCkrXCInXCIpK1wiPlwiKyhXJiYhdj9cIiYjeGEwO1wiOlI/XCI8c3BhbiBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCc+XCIrTi5nZXREYXRlKCkrXCI8L3NwYW4+XCI6XCI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdFwiKyhOLmdldFRpbWUoKT09PWouZ2V0VGltZSgpP1wiIHVpLXN0YXRlLWhpZ2hsaWdodFwiOlwiXCIpKyhOLmdldFRpbWUoKT09PUcuZ2V0VGltZSgpP1wiIHVpLXN0YXRlLWFjdGl2ZVwiOlwiXCIpKyhXP1wiIHVpLXByaW9yaXR5LXNlY29uZGFyeVwiOlwiXCIpK1wiJyBocmVmPScjJz5cIitOLmdldERhdGUoKStcIjwvYT5cIikrXCI8L3RkPlwiLE4uc2V0RGF0ZShOLmdldERhdGUoKSsxKSxOPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KE4pO1MrPXorXCI8L3RyPlwifSsrWj4xMSYmKFo9MCx0dCsrKSxDKz1TKz1cIjwvdGJvZHk+PC90YWJsZT5cIisoWD9cIjwvZGl2PlwiKyhZWzBdPjAmJms9PT1ZWzFdLTE/XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PC9kaXY+XCI6XCJcIik6XCJcIil9eSs9Q31yZXR1cm4geSs9aCx0Ll9rZXlFdmVudD0hMSx5fSxfZ2VuZXJhdGVNb250aFllYXJIZWFkZXI6ZnVuY3Rpb24odCxlLGksbixzLG8sYSxyKXt2YXIgbCxoLGMsdSxkLHAsZixnLG09dGhpcy5fZ2V0KHQsXCJjaGFuZ2VNb250aFwiKSx2PXRoaXMuX2dldCh0LFwiY2hhbmdlWWVhclwiKSxiPXRoaXMuX2dldCh0LFwic2hvd01vbnRoQWZ0ZXJZZWFyXCIpLF89XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXRpdGxlJz5cIix5PVwiXCI7aWYob3x8IW0peSs9XCI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCc+XCIrYVtlXStcIjwvc3Bhbj5cIjtlbHNle2ZvcihsPW4mJm4uZ2V0RnVsbFllYXIoKT09PWksaD1zJiZzLmdldEZ1bGxZZWFyKCk9PT1pLHkrPVwiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCcgZGF0YS1oYW5kbGVyPSdzZWxlY3RNb250aCcgZGF0YS1ldmVudD0nY2hhbmdlJz5cIixjPTA7YzwxMjtjKyspKCFsfHxjPj1uLmdldE1vbnRoKCkpJiYoIWh8fGM8PXMuZ2V0TW9udGgoKSkmJih5Kz1cIjxvcHRpb24gdmFsdWU9J1wiK2MrXCInXCIrKGM9PT1lP1wiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIjpcIlwiKStcIj5cIityW2NdK1wiPC9vcHRpb24+XCIpO3krPVwiPC9zZWxlY3Q+XCJ9aWYoYnx8KF8rPXkrKCFvJiZtJiZ2P1wiXCI6XCImI3hhMDtcIikpLCF0LnllYXJzaHRtbClpZih0LnllYXJzaHRtbD1cIlwiLG98fCF2KV8rPVwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcic+XCIraStcIjwvc3Bhbj5cIjtlbHNle2Zvcih1PXRoaXMuX2dldCh0LFwieWVhclJhbmdlXCIpLnNwbGl0KFwiOlwiKSxkPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSxmPShwPWZ1bmN0aW9uKHQpe3ZhciBlPXQubWF0Y2goL2NbK1xcLV0uKi8pP2krcGFyc2VJbnQodC5zdWJzdHJpbmcoMSksMTApOnQubWF0Y2goL1srXFwtXS4qLyk/ZCtwYXJzZUludCh0LDEwKTpwYXJzZUludCh0LDEwKTtyZXR1cm4gaXNOYU4oZSk/ZDplfSkodVswXSksZz1NYXRoLm1heChmLHAodVsxXXx8XCJcIikpLGY9bj9NYXRoLm1heChmLG4uZ2V0RnVsbFllYXIoKSk6ZixnPXM/TWF0aC5taW4oZyxzLmdldEZ1bGxZZWFyKCkpOmcsdC55ZWFyc2h0bWwrPVwiPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJyBkYXRhLWhhbmRsZXI9J3NlbGVjdFllYXInIGRhdGEtZXZlbnQ9J2NoYW5nZSc+XCI7Zjw9ZztmKyspdC55ZWFyc2h0bWwrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrZitcIidcIisoZj09PWk/XCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJ1wiOlwiXCIpK1wiPlwiK2YrXCI8L29wdGlvbj5cIjt0LnllYXJzaHRtbCs9XCI8L3NlbGVjdD5cIixfKz10LnllYXJzaHRtbCx0LnllYXJzaHRtbD1udWxsfXJldHVybiBfKz10aGlzLl9nZXQodCxcInllYXJTdWZmaXhcIiksYiYmKF8rPSghbyYmbSYmdj9cIlwiOlwiJiN4YTA7XCIpK3kpLF8rXCI8L2Rpdj5cIn0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10LnNlbGVjdGVkWWVhcisoXCJZXCI9PT1pP2U6MCkscz10LnNlbGVjdGVkTW9udGgrKFwiTVwiPT09aT9lOjApLG89TWF0aC5taW4odC5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChuLHMpKSsoXCJEXCI9PT1pP2U6MCksYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG4scyxvKSkpO3Quc2VsZWN0ZWREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPWEuZ2V0RnVsbFllYXIoKSxcIk1cIiE9PWkmJlwiWVwiIT09aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtaW5cIiksbj10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtYXhcIikscz1pJiZlPGk/aTplO3JldHVybiBuJiZzPm4/bjpzfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LFwib25DaGFuZ2VNb250aFllYXJcIik7ZSYmZS5hcHBseSh0LmlucHV0P3QuaW5wdXRbMF06bnVsbCxbdC5zZWxlY3RlZFllYXIsdC5zZWxlY3RlZE1vbnRoKzEsdF0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsXCJudW1iZXJPZk1vbnRoc1wiKTtyZXR1cm4gbnVsbD09ZT9bMSwxXTpcIm51bWJlclwiPT10eXBlb2YgZT9bMSxlXTplfSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsZStcIkRhdGVcIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LGUsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IERhdGUodCxlLDEpLmdldERheSgpfSxfY2FuQWRqdXN0TW9udGg6ZnVuY3Rpb24odCxlLGksbil7dmFyIHM9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksbz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShpLG4rKGU8MD9lOnNbMF0qc1sxXSksMSkpO3JldHVybiBlPDAmJm8uc2V0RGF0ZSh0aGlzLl9nZXREYXlzSW5Nb250aChvLmdldEZ1bGxZZWFyKCksby5nZXRNb250aCgpKSksdGhpcy5faXNJblJhbmdlKHQsbyl9LF9pc0luUmFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHM9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWluXCIpLG89dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWF4XCIpLGE9bnVsbCxyPW51bGwsbD10aGlzLl9nZXQodCxcInllYXJSYW5nZVwiKTtyZXR1cm4gbCYmKGk9bC5zcGxpdChcIjpcIiksbj0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksYT1wYXJzZUludChpWzBdLDEwKSxyPXBhcnNlSW50KGlbMV0sMTApLGlbMF0ubWF0Y2goL1srXFwtXS4qLykmJihhKz1uKSxpWzFdLm1hdGNoKC9bK1xcLV0uKi8pJiYocis9bikpLCghc3x8ZS5nZXRUaW1lKCk+PXMuZ2V0VGltZSgpKSYmKCFvfHxlLmdldFRpbWUoKTw9by5nZXRUaW1lKCkpJiYoIWF8fGUuZ2V0RnVsbFllYXIoKT49YSkmJighcnx8ZS5nZXRGdWxsWWVhcigpPD1yKX0sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXQodCxcInNob3J0WWVhckN1dG9mZlwiKTtyZXR1cm57c2hvcnRZZWFyQ3V0b2ZmOmU9XCJzdHJpbmdcIiE9dHlwZW9mIGU/ZToobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGUsMTApLGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc1Nob3J0XCIpLGRheU5hbWVzOnRoaXMuX2dldCh0LFwiZGF5TmFtZXNcIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldCh0LFwibW9udGhOYW1lc1Nob3J0XCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzXCIpfX0sX2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlLGksbil7ZXx8KHQuY3VycmVudERheT10LnNlbGVjdGVkRGF5LHQuY3VycmVudE1vbnRoPXQuc2VsZWN0ZWRNb250aCx0LmN1cnJlbnRZZWFyPXQuc2VsZWN0ZWRZZWFyKTt2YXIgcz1lP1wib2JqZWN0XCI9PXR5cGVvZiBlP2U6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobixpLGUpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KHQsXCJkYXRlRm9ybWF0XCIpLHMsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKX19KSx0LmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3QuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KHQoZG9jdW1lbnQpLm9uKFwibW91c2Vkb3duXCIsdC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLHQuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMCksMD09PXQoXCIjXCIrdC5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmdChcImJvZHlcIikuYXBwZW5kKHQuZGF0ZXBpY2tlci5kcERpdik7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlfHxcImlzRGlzYWJsZWRcIiE9PWUmJlwiZ2V0RGF0ZVwiIT09ZSYmXCJ3aWRnZXRcIiE9PWU/XCJvcHRpb25cIj09PWUmJjI9PT1hcmd1bWVudHMubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzWzFdP3QuZGF0ZXBpY2tlcltcIl9cIitlK1wiRGF0ZXBpY2tlclwiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGU/dC5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc10uY29uY2F0KGkpKTp0LmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyxlKX0pOnQuZGF0ZXBpY2tlcltcIl9cIitlK1wiRGF0ZXBpY2tlclwiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSl9LHQuZGF0ZXBpY2tlcj1uZXcgZSx0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITEsdC5kYXRlcGlja2VyLnV1aWQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksdC5kYXRlcGlja2VyLnZlcnNpb249XCIxLjEyLjFcIjt2YXIgZD0odC5kYXRlcGlja2VyLHQudWkuaWU9ISEvbXNpZSBbXFx3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksITEpO3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7ZD0hMX0pLHQud2lkZ2V0KFwidWkubW91c2VcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NhbmNlbDpcImlucHV0LCB0ZXh0YXJlYSwgYnV0dG9uLCBzZWxlY3QsIG9wdGlvblwiLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5lbGVtZW50Lm9uKFwibW91c2Vkb3duLlwiK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbih0KXtyZXR1cm4gZS5fbW91c2VEb3duKHQpfSkub24oXCJjbGljay5cIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7aWYoITA9PT10LmRhdGEoaS50YXJnZXQsZS53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpKXJldHVybiB0LnJlbW92ZURhdGEoaS50YXJnZXQsZS53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpLGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITF9KSx0aGlzLnN0YXJ0ZWQ9ITF9LF9tb3VzZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQub2ZmKFwiLlwiK3RoaXMud2lkZ2V0TmFtZSksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUmJnRoaXMuZG9jdW1lbnQub2ZmKFwibW91c2Vtb3ZlLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkub2ZmKFwibW91c2V1cC5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKX0sX21vdXNlRG93bjpmdW5jdGlvbihlKXtpZighZCl7dGhpcy5fbW91c2VNb3ZlZD0hMSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJnRoaXMuX21vdXNlVXAoZSksdGhpcy5fbW91c2VEb3duRXZlbnQ9ZTt2YXIgaT10aGlzLG49MT09PWUud2hpY2gscz0hKFwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsfHwhZS50YXJnZXQubm9kZU5hbWUpJiZ0KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDtyZXR1cm4hKG4mJiFzJiZ0aGlzLl9tb3VzZUNhcHR1cmUoZSkmJih0aGlzLm1vdXNlRGVsYXlNZXQ9IXRoaXMub3B0aW9ucy5kZWxheSx0aGlzLm1vdXNlRGVsYXlNZXR8fCh0aGlzLl9tb3VzZURlbGF5VGltZXI9c2V0VGltZW91dChmdW5jdGlvbigpe2kubW91c2VEZWxheU1ldD0hMH0sdGhpcy5vcHRpb25zLmRlbGF5KSksdGhpcy5fbW91c2VEaXN0YW5jZU1ldChlKSYmdGhpcy5fbW91c2VEZWxheU1ldChlKSYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSE9PXRoaXMuX21vdXNlU3RhcnQoZSksIXRoaXMuX21vdXNlU3RhcnRlZCk/KGUucHJldmVudERlZmF1bHQoKSwwKTooITA9PT10LmRhdGEoZS50YXJnZXQsdGhpcy53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpJiZ0LnJlbW92ZURhdGEoZS50YXJnZXQsdGhpcy53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tb3VzZU1vdmUodCl9LHRoaXMuX21vdXNlVXBEZWxlZ2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbW91c2VVcCh0KX0sdGhpcy5kb2N1bWVudC5vbihcIm1vdXNlbW92ZS5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLm9uKFwibW91c2V1cC5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSxlLnByZXZlbnREZWZhdWx0KCksZD0hMCwwKSkpfX0sX21vdXNlTW92ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9tb3VzZU1vdmVkKXtpZih0LnVpLmllJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlPDkpJiYhZS5idXR0b24pcmV0dXJuIHRoaXMuX21vdXNlVXAoZSk7aWYoIWUud2hpY2gpaWYoZS5vcmlnaW5hbEV2ZW50LmFsdEtleXx8ZS5vcmlnaW5hbEV2ZW50LmN0cmxLZXl8fGUub3JpZ2luYWxFdmVudC5tZXRhS2V5fHxlLm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkpdGhpcy5pZ25vcmVNaXNzaW5nV2hpY2g9ITA7ZWxzZSBpZighdGhpcy5pZ25vcmVNaXNzaW5nV2hpY2gpcmV0dXJuIHRoaXMuX21vdXNlVXAoZSl9cmV0dXJuKGUud2hpY2h8fGUuYnV0dG9uKSYmKHRoaXMuX21vdXNlTW92ZWQ9ITApLHRoaXMuX21vdXNlU3RhcnRlZD8odGhpcy5fbW91c2VEcmFnKGUpLGUucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZSkmJnRoaXMuX21vdXNlRGVsYXlNZXQoZSkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEhPT10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LGUpLHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3VzZURyYWcoZSk6dGhpcy5fbW91c2VVcChlKSksIXRoaXMuX21vdXNlU3RhcnRlZCl9LF9tb3VzZVVwOmZ1bmN0aW9uKGUpe3RoaXMuZG9jdW1lbnQub2ZmKFwibW91c2Vtb3ZlLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkub2ZmKFwibW91c2V1cC5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEsZS50YXJnZXQ9PT10aGlzLl9tb3VzZURvd25FdmVudC50YXJnZXQmJnQuZGF0YShlLnRhcmdldCx0aGlzLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIiwhMCksdGhpcy5fbW91c2VTdG9wKGUpKSx0aGlzLl9tb3VzZURlbGF5VGltZXImJihjbGVhclRpbWVvdXQodGhpcy5fbW91c2VEZWxheVRpbWVyKSxkZWxldGUgdGhpcy5fbW91c2VEZWxheVRpbWVyKSx0aGlzLmlnbm9yZU1pc3NpbmdXaGljaD0hMSxkPSExLGUucHJldmVudERlZmF1bHQoKX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLXQucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLXQucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vdXNlRGVsYXlNZXR9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7fSxfbW91c2VEcmFnOmZ1bmN0aW9uKCl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKCl7fSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSksdC51aS5wbHVnaW49e2FkZDpmdW5jdGlvbihlLGksbil7dmFyIHMsbz10LnVpW2VdLnByb3RvdHlwZTtmb3IocyBpbiBuKW8ucGx1Z2luc1tzXT1vLnBsdWdpbnNbc118fFtdLG8ucGx1Z2luc1tzXS5wdXNoKFtpLG5bc11dKX0sY2FsbDpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxvPXQucGx1Z2luc1tlXTtpZihvJiYobnx8dC5lbGVtZW50WzBdLnBhcmVudE5vZGUmJjExIT09dC5lbGVtZW50WzBdLnBhcmVudE5vZGUubm9kZVR5cGUpKWZvcihzPTA7czxvLmxlbmd0aDtzKyspdC5vcHRpb25zW29bc11bMF1dJiZvW3NdWzFdLmFwcGx5KHQuZWxlbWVudCxpKX19LHQudWkuc2FmZUJsdXI9ZnVuY3Rpb24oZSl7ZSYmXCJib2R5XCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJnQoZSkudHJpZ2dlcihcImJsdXJcIil9LHQud2lkZ2V0KFwidWkuZHJhZ2dhYmxlXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4OlwiZHJhZ1wiLG9wdGlvbnM6e2FkZENsYXNzZXM6ITAsYXBwZW5kVG86XCJwYXJlbnRcIixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjpcImF1dG9cIixjdXJzb3JBdDohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6XCJvcmlnaW5hbFwiLGlmcmFtZUZpeDohMSxvcGFjaXR5OiExLHJlZnJlc2hQb3NpdGlvbnM6ITEscmV2ZXJ0OiExLHJldmVydER1cmF0aW9uOjUwMCxzY29wZTpcImRlZmF1bHRcIixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZTpcImJvdGhcIixzbmFwVG9sZXJhbmNlOjIwLHN0YWNrOiExLHpJbmRleDohMSxkcmFnOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXtcIm9yaWdpbmFsXCI9PT10aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLl9zZXRQb3NpdGlvblJlbGF0aXZlKCksdGhpcy5vcHRpb25zLmFkZENsYXNzZXMmJnRoaXMuX2FkZENsYXNzKFwidWktZHJhZ2dhYmxlXCIpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX21vdXNlSW5pdCgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5fc3VwZXIodCxlKSxcImhhbmRsZVwiPT09dCYmKHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXsodGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudCkuaXMoXCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIpP3RoaXMuZGVzdHJveU9uQ2xlYXI9ITA6KHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX21vdXNlRGVzdHJveSgpKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnM7cmV0dXJuISh0aGlzLmhlbHBlcnx8aS5kaXNhYmxlZHx8dChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIpLmxlbmd0aD4wfHwodGhpcy5oYW5kbGU9dGhpcy5fZ2V0SGFuZGxlKGUpLCF0aGlzLmhhbmRsZXx8KHRoaXMuX2JsdXJBY3RpdmVFbGVtZW50KGUpLHRoaXMuX2Jsb2NrRnJhbWVzKCEwPT09aS5pZnJhbWVGaXg/XCJpZnJhbWVcIjppLmlmcmFtZUZpeCksMCkpKX0sX2Jsb2NrRnJhbWVzOmZ1bmN0aW9uKGUpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZChlKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3JldHVybiB0KFwiPGRpdj5cIikuY3NzKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLmFwcGVuZFRvKGUucGFyZW50KCkpLm91dGVyV2lkdGgoZS5vdXRlcldpZHRoKCkpLm91dGVySGVpZ2h0KGUub3V0ZXJIZWlnaHQoKSkub2Zmc2V0KGUub2Zmc2V0KCkpWzBdfSl9LF91bmJsb2NrRnJhbWVzOmZ1bmN0aW9uKCl7dGhpcy5pZnJhbWVCbG9ja3MmJih0aGlzLmlmcmFtZUJsb2Nrcy5yZW1vdmUoKSxkZWxldGUgdGhpcy5pZnJhbWVCbG9ja3MpfSxfYmx1ckFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKTt0KGUudGFyZ2V0KS5jbG9zZXN0KGkpLmxlbmd0aHx8dC51aS5zYWZlQmx1cihpKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoZSksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHQudWkuZGRtYW5hZ2VyJiYodC51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCghMCksdGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCksdGhpcy5oYXNGaXhlZEFuY2VzdG9yPXRoaXMuaGVscGVyLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm5cImZpeGVkXCI9PT10KHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHMoZSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlLCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksITE9PT10aGlzLl90cmlnZ2VyKFwic3RhcnRcIixlKT8odGhpcy5fY2xlYXIoKSwhMSk6KHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0LnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSx0aGlzLl9tb3VzZURyYWcoZSwhMCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLGUpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLCFpKXt2YXIgbj10aGlzLl91aUhhc2goKTtpZighMT09PXRoaXMuX3RyaWdnZXIoXCJkcmFnXCIsZSxuKSlyZXR1cm4gdGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIixlKSksITE7dGhpcy5wb3NpdGlvbj1uLnBvc2l0aW9ufXJldHVybiB0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIix0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLGUpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMsbj0hMTtyZXR1cm4gdC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmKG49dC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLGUpKSx0aGlzLmRyb3BwZWQmJihuPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpLFwiaW52YWxpZFwiPT09dGhpcy5vcHRpb25zLnJldmVydCYmIW58fFwidmFsaWRcIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJm58fCEwPT09dGhpcy5vcHRpb25zLnJldmVydHx8dC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LG4pP3QodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXshMSE9PWkuX3RyaWdnZXIoXCJzdG9wXCIsZSkmJmkuX2NsZWFyKCl9KTohMSE9PXRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsZSkmJnRoaXMuX2NsZWFyKCksITF9LF9tb3VzZVVwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl91bmJsb2NrRnJhbWVzKCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsZSksdGhpcy5oYW5kbGVFbGVtZW50LmlzKGUudGFyZ2V0KSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0LnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsZSl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcyhcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIik/dGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIix7dGFyZ2V0OnRoaXMuZWxlbWVudFswXX0pKTp0aGlzLl9jbGVhcigpLHRoaXN9LF9nZXRIYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMub3B0aW9ucy5oYW5kbGV8fCEhdChlLnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGFuZGxlKSkubGVuZ3RofSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVFbGVtZW50PXRoaXMub3B0aW9ucy5oYW5kbGU/dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSk6dGhpcy5lbGVtZW50LHRoaXMuX2FkZENsYXNzKHRoaXMuaGFuZGxlRWxlbWVudCxcInVpLWRyYWdnYWJsZS1oYW5kbGVcIil9LF9yZW1vdmVIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhhbmRsZUVsZW1lbnQsXCJ1aS1kcmFnZ2FibGUtaGFuZGxlXCIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxuPXQuaXNGdW5jdGlvbihpLmhlbHBlcikscz1uP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlXSkpOlwiY2xvbmVcIj09PWkuaGVscGVyP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoXCJpZFwiKTp0aGlzLmVsZW1lbnQ7cmV0dXJuIHMucGFyZW50cyhcImJvZHlcIikubGVuZ3RofHxzLmFwcGVuZFRvKFwicGFyZW50XCI9PT1pLmFwcGVuZFRvP3RoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlOmkuYXBwZW5kVG8pLG4mJnNbMF09PT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSxzWzBdPT09dGhpcy5lbGVtZW50WzBdfHwvKGZpeGVkfGFic29sdXRlKS8udGVzdChzLmNzcyhcInBvc2l0aW9uXCIpKXx8cy5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksc30sX3NldFBvc2l0aW9uUmVsYXRpdmU6ZnVuY3Rpb24oKXsvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKFwicG9zaXRpb25cIikpfHwodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KFwiIFwiKSksdC5pc0FycmF5KGUpJiYoZT17bGVmdDorZVswXSx0b3A6K2VbMV18fDB9KSxcImxlZnRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWUubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksXCJyaWdodFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInRvcFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD1lLnRvcCt0aGlzLm1hcmdpbnMudG9wKSxcImJvdHRvbVwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1lLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdCh0LnRhZ05hbWUpfHx0PT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm5cImFic29sdXRlXCI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PWkmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksZS50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSx0aGlzLl9pc1Jvb3ROb2RlKHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKGU9e3RvcDowLGxlZnQ6MH0pLHt0b3A6ZS50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCksbGVmdDplLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoXCJyZWxhdGl2ZVwiIT09dGhpcy5jc3NQb3NpdGlvbilyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgdD10aGlzLmVsZW1lbnQucG9zaXRpb24oKSxlPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6dC50b3AtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSwxMCl8fDApKyhlPzA6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLGxlZnQ6dC5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpLDEwKXx8MCkrKGU/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkpfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luTGVmdFwiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5Ub3BcIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5SaWdodFwiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5Cb3R0b21cIiksMTApfHwwfX0sX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlclByb3BvcnRpb25zPXt3aWR0aDp0aGlzLmhlbHBlci5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCl9fSxfc2V0Q29udGFpbm1lbnQ6ZnVuY3Rpb24oKXt2YXIgZSxpLG4scz10aGlzLm9wdGlvbnMsbz10aGlzLmRvY3VtZW50WzBdO3JldHVybiB0aGlzLnJlbGF0aXZlQ29udGFpbmVyPW51bGwscy5jb250YWlubWVudD9cIndpbmRvd1wiPT09cy5jb250YWlubWVudD92b2lkKHRoaXMuY29udGFpbm1lbnQ9W3Qod2luZG93KS5zY3JvbGxMZWZ0KCktdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCx0KHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsdCh3aW5kb3cpLnNjcm9sbExlZnQoKSt0KHdpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LHQod2luZG93KS5zY3JvbGxUb3AoKSsodCh3aW5kb3cpLmhlaWdodCgpfHxvLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKTpcImRvY3VtZW50XCI9PT1zLmNvbnRhaW5tZW50P3ZvaWQodGhpcy5jb250YWlubWVudD1bMCwwLHQobykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LCh0KG8pLmhlaWdodCgpfHxvLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKTpzLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/dm9pZCh0aGlzLmNvbnRhaW5tZW50PXMuY29udGFpbm1lbnQpOihcInBhcmVudFwiPT09cy5jb250YWlubWVudCYmKHMuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksdm9pZCgobj0oaT10KHMuY29udGFpbm1lbnQpKVswXSkmJihlPS8oc2Nyb2xsfGF1dG8pLy50ZXN0KGkuY3NzKFwib3ZlcmZsb3dcIikpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludChpLmNzcyhcInBhZGRpbmdMZWZ0XCIpLDEwKXx8MCksKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nVG9wXCIpLDEwKXx8MCksKGU/TWF0aC5tYXgobi5zY3JvbGxXaWR0aCxuLm9mZnNldFdpZHRoKTpuLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ1JpZ2h0XCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKGU/TWF0aC5tYXgobi5zY3JvbGxIZWlnaHQsbi5vZmZzZXRIZWlnaHQpOm4ub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChpLmNzcyhcInBhZGRpbmdCb3R0b21cIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wLXRoaXMubWFyZ2lucy5ib3R0b21dLHRoaXMucmVsYXRpdmVDb250YWluZXI9aSkpKTp2b2lkKHRoaXMuY29udGFpbm1lbnQ9bnVsbCl9LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbih0LGUpe2V8fChlPXRoaXMucG9zaXRpb24pO3ZhciBpPVwiYWJzb2x1dGVcIj09PXQ/MTotMSxuPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6ZS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKmkrdGhpcy5vZmZzZXQucGFyZW50LnRvcCppLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOm4/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSppLGxlZnQ6ZS5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqaSt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCppLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwubGVmdDpuPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpKml9fSxfZ2VuZXJhdGVQb3NpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpLG4scyxvLGE9dGhpcy5vcHRpb25zLHI9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSksbD10LnBhZ2VYLGg9dC5wYWdlWTtyZXR1cm4gciYmdGhpcy5vZmZzZXQuc2Nyb2xsfHwodGhpcy5vZmZzZXQuc2Nyb2xsPXt0b3A6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCl9KSxlJiYodGhpcy5jb250YWlubWVudCYmKHRoaXMucmVsYXRpdmVDb250YWluZXI/KG49dGhpcy5yZWxhdGl2ZUNvbnRhaW5lci5vZmZzZXQoKSxpPVt0aGlzLmNvbnRhaW5tZW50WzBdK24ubGVmdCx0aGlzLmNvbnRhaW5tZW50WzFdK24udG9wLHRoaXMuY29udGFpbm1lbnRbMl0rbi5sZWZ0LHRoaXMuY29udGFpbm1lbnRbM10rbi50b3BdKTppPXRoaXMuY29udGFpbm1lbnQsdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PGlbMF0mJihsPWlbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8aVsxXSYmKGg9aVsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdJiYobD1pWzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10mJihoPWlbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksYS5ncmlkJiYocz1hLmdyaWRbMV0/dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKGgtdGhpcy5vcmlnaW5hbFBhZ2VZKS9hLmdyaWRbMV0pKmEuZ3JpZFsxXTp0aGlzLm9yaWdpbmFsUGFnZVksaD1pP3MtdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdfHxzLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdP3M6cy10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV0/cy1hLmdyaWRbMV06cythLmdyaWRbMV06cyxvPWEuZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgobC10aGlzLm9yaWdpbmFsUGFnZVgpL2EuZ3JpZFswXSkqYS5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWCxsPWk/by10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdfHxvLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXT9vOm8tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXT9vLWEuZ3JpZFswXTpvK2EuZ3JpZFswXTpvKSxcInlcIj09PWEuYXhpcyYmKGw9dGhpcy5vcmlnaW5hbFBhZ2VYKSxcblwieFwiPT09YS5heGlzJiYoaD10aGlzLm9yaWdpbmFsUGFnZVkpKSx7dG9wOmgtdGhpcy5vZmZzZXQuY2xpY2sudG9wLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wKyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnI/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSxsZWZ0OmwtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwubGVmdDpyPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiksdGhpcy5oZWxwZXJbMF09PT10aGlzLmVsZW1lbnRbMF18fHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8dGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCx0aGlzLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5kZXN0cm95T25DbGVhciYmdGhpcy5kZXN0cm95KCl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsaSxuKXtyZXR1cm4gbj1ufHx0aGlzLl91aUhhc2goKSx0LnVpLnBsdWdpbi5jYWxsKHRoaXMsZSxbaSxuLHRoaXNdLCEwKSwvXihkcmFnfHN0YXJ0fHN0b3ApLy50ZXN0KGUpJiYodGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLG4ub2Zmc2V0PXRoaXMucG9zaXRpb25BYnMpLHQuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsZSxpLG4pfSxwbHVnaW5zOnt9LF91aUhhc2g6ZnVuY3Rpb24oKXtyZXR1cm57aGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OnRoaXMucG9zaXRpb25BYnN9fX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwiY29ubmVjdFRvU29ydGFibGVcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPXQuZXh0ZW5kKHt9LGkse2l0ZW06bi5lbGVtZW50fSk7bi5zb3J0YWJsZXM9W10sdChuLm9wdGlvbnMuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLnNvcnRhYmxlKFwiaW5zdGFuY2VcIik7aSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmKG4uc29ydGFibGVzLnB1c2goaSksaS5yZWZyZXNoUG9zaXRpb25zKCksaS5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSxzKSl9KX0sc3RvcDpmdW5jdGlvbihlLGksbil7dmFyIHM9dC5leHRlbmQoe30saSx7aXRlbTpuLmVsZW1lbnR9KTtuLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdC5lYWNoKG4uc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmlzT3Zlcj8odC5pc092ZXI9MCxuLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsdC5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHQuX3N0b3JlZENTUz17cG9zaXRpb246dC5wbGFjZWhvbGRlci5jc3MoXCJwb3NpdGlvblwiKSx0b3A6dC5wbGFjZWhvbGRlci5jc3MoXCJ0b3BcIiksbGVmdDp0LnBsYWNlaG9sZGVyLmNzcyhcImxlZnRcIil9LHQuX21vdXNlU3RvcChlKSx0Lm9wdGlvbnMuaGVscGVyPXQub3B0aW9ucy5faGVscGVyKToodC5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHQuX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsZSxzKSl9KX0sZHJhZzpmdW5jdGlvbihlLGksbil7dC5lYWNoKG4uc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIHM9ITEsbz10aGlzO28ucG9zaXRpb25BYnM9bi5wb3NpdGlvbkFicyxvLmhlbHBlclByb3BvcnRpb25zPW4uaGVscGVyUHJvcG9ydGlvbnMsby5vZmZzZXQuY2xpY2s9bi5vZmZzZXQuY2xpY2ssby5faW50ZXJzZWN0c1dpdGgoby5jb250YWluZXJDYWNoZSkmJihzPSEwLHQuZWFjaChuLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uQWJzPW4ucG9zaXRpb25BYnMsdGhpcy5oZWxwZXJQcm9wb3J0aW9ucz1uLmhlbHBlclByb3BvcnRpb25zLHRoaXMub2Zmc2V0LmNsaWNrPW4ub2Zmc2V0LmNsaWNrLHRoaXMhPT1vJiZ0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lckNhY2hlKSYmdC5jb250YWlucyhvLmVsZW1lbnRbMF0sdGhpcy5lbGVtZW50WzBdKSYmKHM9ITEpLHN9KSkscz8oby5pc092ZXJ8fChvLmlzT3Zlcj0xLG4uX3BhcmVudD1pLmhlbHBlci5wYXJlbnQoKSxvLmN1cnJlbnRJdGVtPWkuaGVscGVyLmFwcGVuZFRvKG8uZWxlbWVudCkuZGF0YShcInVpLXNvcnRhYmxlLWl0ZW1cIiwhMCksby5vcHRpb25zLl9oZWxwZXI9by5vcHRpb25zLmhlbHBlcixvLm9wdGlvbnMuaGVscGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuaGVscGVyWzBdfSxlLnRhcmdldD1vLmN1cnJlbnRJdGVtWzBdLG8uX21vdXNlQ2FwdHVyZShlLCEwKSxvLl9tb3VzZVN0YXJ0KGUsITAsITApLG8ub2Zmc2V0LmNsaWNrLnRvcD1uLm9mZnNldC5jbGljay50b3Asby5vZmZzZXQuY2xpY2subGVmdD1uLm9mZnNldC5jbGljay5sZWZ0LG8ub2Zmc2V0LnBhcmVudC5sZWZ0LT1uLm9mZnNldC5wYXJlbnQubGVmdC1vLm9mZnNldC5wYXJlbnQubGVmdCxvLm9mZnNldC5wYXJlbnQudG9wLT1uLm9mZnNldC5wYXJlbnQudG9wLW8ub2Zmc2V0LnBhcmVudC50b3Asbi5fdHJpZ2dlcihcInRvU29ydGFibGVcIixlKSxuLmRyb3BwZWQ9by5lbGVtZW50LHQuZWFjaChuLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMucmVmcmVzaFBvc2l0aW9ucygpfSksbi5jdXJyZW50SXRlbT1uLmVsZW1lbnQsby5mcm9tT3V0c2lkZT1uKSxvLmN1cnJlbnRJdGVtJiYoby5fbW91c2VEcmFnKGUpLGkucG9zaXRpb249by5wb3NpdGlvbikpOm8uaXNPdmVyJiYoby5pc092ZXI9MCxvLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsby5vcHRpb25zLl9yZXZlcnQ9by5vcHRpb25zLnJldmVydCxvLm9wdGlvbnMucmV2ZXJ0PSExLG8uX3RyaWdnZXIoXCJvdXRcIixlLG8uX3VpSGFzaChvKSksby5fbW91c2VTdG9wKGUsITApLG8ub3B0aW9ucy5yZXZlcnQ9by5vcHRpb25zLl9yZXZlcnQsby5vcHRpb25zLmhlbHBlcj1vLm9wdGlvbnMuX2hlbHBlcixvLnBsYWNlaG9sZGVyJiZvLnBsYWNlaG9sZGVyLnJlbW92ZSgpLGkuaGVscGVyLmFwcGVuZFRvKG4uX3BhcmVudCksbi5fcmVmcmVzaE9mZnNldHMoZSksaS5wb3NpdGlvbj1uLl9nZW5lcmF0ZVBvc2l0aW9uKGUsITApLG4uX3RyaWdnZXIoXCJmcm9tU29ydGFibGVcIixlKSxuLmRyb3BwZWQ9ITEsdC5lYWNoKG4uc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9KSl9KX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcImN1cnNvclwiLHtzdGFydDpmdW5jdGlvbihlLGksbil7dmFyIHM9dChcImJvZHlcIiksbz1uLm9wdGlvbnM7cy5jc3MoXCJjdXJzb3JcIikmJihvLl9jdXJzb3I9cy5jc3MoXCJjdXJzb3JcIikpLHMuY3NzKFwiY3Vyc29yXCIsby5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcz1uLm9wdGlvbnM7cy5fY3Vyc29yJiZ0KFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixzLl9jdXJzb3IpfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwib3BhY2l0eVwiLHtzdGFydDpmdW5jdGlvbihlLGksbil7dmFyIHM9dChpLmhlbHBlciksbz1uLm9wdGlvbnM7cy5jc3MoXCJvcGFjaXR5XCIpJiYoby5fb3BhY2l0eT1zLmNzcyhcIm9wYWNpdHlcIikpLHMuY3NzKFwib3BhY2l0eVwiLG8ub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPW4ub3B0aW9ucztzLl9vcGFjaXR5JiZ0KGkuaGVscGVyKS5jc3MoXCJvcGFjaXR5XCIscy5fb3BhY2l0eSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzY3JvbGxcIix7c3RhcnQ6ZnVuY3Rpb24odCxlLGkpe2kuc2Nyb2xsUGFyZW50Tm90SGlkZGVufHwoaS5zY3JvbGxQYXJlbnROb3RIaWRkZW49aS5oZWxwZXIuc2Nyb2xsUGFyZW50KCExKSksaS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0hPT1pLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PWkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdLnRhZ05hbWUmJihpLm92ZXJmbG93T2Zmc2V0PWkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuLm9mZnNldCgpKX0sZHJhZzpmdW5jdGlvbihlLGksbil7dmFyIHM9bi5vcHRpb25zLG89ITEsYT1uLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXSxyPW4uZG9jdW1lbnRbMF07YSE9PXImJlwiSFRNTFwiIT09YS50YWdOYW1lPyhzLmF4aXMmJlwieFwiPT09cy5heGlzfHwobi5vdmVyZmxvd09mZnNldC50b3ArYS5vZmZzZXRIZWlnaHQtZS5wYWdlWTxzLnNjcm9sbFNlbnNpdGl2aXR5P2Euc2Nyb2xsVG9wPW89YS5zY3JvbGxUb3Arcy5zY3JvbGxTcGVlZDplLnBhZ2VZLW4ub3ZlcmZsb3dPZmZzZXQudG9wPHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihhLnNjcm9sbFRvcD1vPWEuc2Nyb2xsVG9wLXMuc2Nyb2xsU3BlZWQpKSxzLmF4aXMmJlwieVwiPT09cy5heGlzfHwobi5vdmVyZmxvd09mZnNldC5sZWZ0K2Eub2Zmc2V0V2lkdGgtZS5wYWdlWDxzLnNjcm9sbFNlbnNpdGl2aXR5P2Euc2Nyb2xsTGVmdD1vPWEuc2Nyb2xsTGVmdCtzLnNjcm9sbFNwZWVkOmUucGFnZVgtbi5vdmVyZmxvd09mZnNldC5sZWZ0PHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihhLnNjcm9sbExlZnQ9bz1hLnNjcm9sbExlZnQtcy5zY3JvbGxTcGVlZCkpKToocy5heGlzJiZcInhcIj09PXMuYXhpc3x8KGUucGFnZVktdChyKS5zY3JvbGxUb3AoKTxzLnNjcm9sbFNlbnNpdGl2aXR5P289dChyKS5zY3JvbGxUb3AodChyKS5zY3JvbGxUb3AoKS1zLnNjcm9sbFNwZWVkKTp0KHdpbmRvdykuaGVpZ2h0KCktKGUucGFnZVktdChyKS5zY3JvbGxUb3AoKSk8cy5zY3JvbGxTZW5zaXRpdml0eSYmKG89dChyKS5zY3JvbGxUb3AodChyKS5zY3JvbGxUb3AoKStzLnNjcm9sbFNwZWVkKSkpLHMuYXhpcyYmXCJ5XCI9PT1zLmF4aXN8fChlLnBhZ2VYLXQocikuc2Nyb2xsTGVmdCgpPHMuc2Nyb2xsU2Vuc2l0aXZpdHk/bz10KHIpLnNjcm9sbExlZnQodChyKS5zY3JvbGxMZWZ0KCktcy5zY3JvbGxTcGVlZCk6dCh3aW5kb3cpLndpZHRoKCktKGUucGFnZVgtdChyKS5zY3JvbGxMZWZ0KCkpPHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihvPXQocikuc2Nyb2xsTGVmdCh0KHIpLnNjcm9sbExlZnQoKStzLnNjcm9sbFNwZWVkKSkpKSwhMSE9PW8mJnQudWkuZGRtYW5hZ2VyJiYhcy5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhuLGUpfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwic25hcFwiLHtzdGFydDpmdW5jdGlvbihlLGksbil7dmFyIHM9bi5vcHRpb25zO24uc25hcEVsZW1lbnRzPVtdLHQocy5zbmFwLmNvbnN0cnVjdG9yIT09U3RyaW5nP3Muc25hcC5pdGVtc3x8XCI6ZGF0YSh1aS1kcmFnZ2FibGUpXCI6cy5zbmFwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUub2Zmc2V0KCk7dGhpcyE9PW4uZWxlbWVudFswXSYmbi5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksdG9wOmkudG9wLGxlZnQ6aS5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbihlLGksbil7dmFyIHMsbyxhLHIsbCxoLGMsdSxkLHAsZj1uLm9wdGlvbnMsZz1mLnNuYXBUb2xlcmFuY2UsbT1pLm9mZnNldC5sZWZ0LHY9bStuLmhlbHBlclByb3BvcnRpb25zLndpZHRoLGI9aS5vZmZzZXQudG9wLF89YituLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IoZD1uLnNuYXBFbGVtZW50cy5sZW5ndGgtMTtkPj0wO2QtLSloPShsPW4uc25hcEVsZW1lbnRzW2RdLmxlZnQtbi5tYXJnaW5zLmxlZnQpK24uc25hcEVsZW1lbnRzW2RdLndpZHRoLHU9KGM9bi5zbmFwRWxlbWVudHNbZF0udG9wLW4ubWFyZ2lucy50b3ApK24uc25hcEVsZW1lbnRzW2RdLmhlaWdodCx2PGwtZ3x8bT5oK2d8fF88Yy1nfHxiPnUrZ3x8IXQuY29udGFpbnMobi5zbmFwRWxlbWVudHNbZF0uaXRlbS5vd25lckRvY3VtZW50LG4uc25hcEVsZW1lbnRzW2RdLml0ZW0pPyhuLnNuYXBFbGVtZW50c1tkXS5zbmFwcGluZyYmbi5vcHRpb25zLnNuYXAucmVsZWFzZSYmbi5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKG4uZWxlbWVudCxlLHQuZXh0ZW5kKG4uX3VpSGFzaCgpLHtzbmFwSXRlbTpuLnNuYXBFbGVtZW50c1tkXS5pdGVtfSkpLG4uc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nPSExKTooXCJpbm5lclwiIT09Zi5zbmFwTW9kZSYmKHM9TWF0aC5hYnMoYy1fKTw9ZyxvPU1hdGguYWJzKHUtYik8PWcsYT1NYXRoLmFicyhsLXYpPD1nLHI9TWF0aC5hYnMoaC1tKTw9ZyxzJiYoaS5wb3NpdGlvbi50b3A9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6Yy1uLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3ApLG8mJihpLnBvc2l0aW9uLnRvcD1uLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDp1LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24ubGVmdD1uLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6bC1uLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdCksciYmKGkucG9zaXRpb24ubGVmdD1uLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6aH0pLmxlZnQpKSxwPXN8fG98fGF8fHIsXCJvdXRlclwiIT09Zi5zbmFwTW9kZSYmKHM9TWF0aC5hYnMoYy1iKTw9ZyxvPU1hdGguYWJzKHUtXyk8PWcsYT1NYXRoLmFicyhsLW0pPD1nLHI9TWF0aC5hYnMoaC12KTw9ZyxzJiYoaS5wb3NpdGlvbi50b3A9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6YyxsZWZ0OjB9KS50b3ApLG8mJihpLnBvc2l0aW9uLnRvcD1uLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDp1LW4uaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24ubGVmdD1uLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6bH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6MCxsZWZ0Omgtbi5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQpKSwhbi5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmcmJihzfHxvfHxhfHxyfHxwKSYmbi5vcHRpb25zLnNuYXAuc25hcCYmbi5vcHRpb25zLnNuYXAuc25hcC5jYWxsKG4uZWxlbWVudCxlLHQuZXh0ZW5kKG4uX3VpSGFzaCgpLHtzbmFwSXRlbTpuLnNuYXBFbGVtZW50c1tkXS5pdGVtfSkpLG4uc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nPXN8fG98fGF8fHJ8fHApfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwic3RhY2tcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG89bi5vcHRpb25zLGE9dC5tYWtlQXJyYXkodChvLnN0YWNrKSkuc29ydChmdW5jdGlvbihlLGkpe3JldHVybihwYXJzZUludCh0KGUpLmNzcyhcInpJbmRleFwiKSwxMCl8fDApLShwYXJzZUludCh0KGkpLmNzcyhcInpJbmRleFwiKSwxMCl8fDApfSk7YS5sZW5ndGgmJihzPXBhcnNlSW50KHQoYVswXSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCx0KGEpLmVhY2goZnVuY3Rpb24oZSl7dCh0aGlzKS5jc3MoXCJ6SW5kZXhcIixzK2UpfSksdGhpcy5jc3MoXCJ6SW5kZXhcIixzK2EubGVuZ3RoKSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJ6SW5kZXhcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPXQoaS5oZWxwZXIpLG89bi5vcHRpb25zO3MuY3NzKFwiekluZGV4XCIpJiYoby5fekluZGV4PXMuY3NzKFwiekluZGV4XCIpKSxzLmNzcyhcInpJbmRleFwiLG8uekluZGV4KX0sc3RvcDpmdW5jdGlvbihlLGksbil7dmFyIHM9bi5vcHRpb25zO3MuX3pJbmRleCYmdChpLmhlbHBlcikuY3NzKFwiekluZGV4XCIscy5fekluZGV4KX19KSx0LnVpLmRyYWdnYWJsZSx0LndpZGdldChcInVpLnJlc2l6YWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcInJlc2l6ZVwiLG9wdGlvbnM6e2Fsc29SZXNpemU6ITEsYW5pbWF0ZTohMSxhbmltYXRlRHVyYXRpb246XCJzbG93XCIsYW5pbWF0ZUVhc2luZzpcInN3aW5nXCIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY2xhc3Nlczp7XCJ1aS1yZXNpemFibGUtc2VcIjpcInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2VcIn0sY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOlwiZSxzLHNlXCIsaGVscGVyOiExLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjEwLG1pbldpZHRoOjEwLHpJbmRleDo5MCxyZXNpemU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX251bTpmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KXx8MH0sX2lzTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHQpKX0sX2hhc1Njcm9sbDpmdW5jdGlvbihlLGkpe2lmKFwiaGlkZGVuXCI9PT10KGUpLmNzcyhcIm92ZXJmbG93XCIpKXJldHVybiExO3ZhciBuPWkmJlwibGVmdFwiPT09aT9cInNjcm9sbExlZnRcIjpcInNjcm9sbFRvcFwiLHM9ITE7cmV0dXJuIGVbbl0+MHx8KGVbbl09MSxzPWVbbl0+MCxlW25dPTAscyl9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMub3B0aW9ucyxuPXRoaXM7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGVcIiksdC5leHRlbmQodGhpcyx7X2FzcGVjdFJhdGlvOiEhaS5hc3BlY3RSYXRpbyxhc3BlY3RSYXRpbzppLmFzcGVjdFJhdGlvLG9yaWdpbmFsRWxlbWVudDp0aGlzLmVsZW1lbnQsX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6W10sX2hlbHBlcjppLmhlbHBlcnx8aS5naG9zdHx8aS5hbmltYXRlP2kuaGVscGVyfHxcInVpLXJlc2l6YWJsZS1oZWxwZXJcIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKGNhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZykkL2kpJiYodGhpcy5lbGVtZW50LndyYXAodChcIjxkaXYgY2xhc3M9J3VpLXdyYXBwZXInIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyc+PC9kaXY+XCIpLmNzcyh7cG9zaXRpb246dGhpcy5lbGVtZW50LmNzcyhcInBvc2l0aW9uXCIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKFwidG9wXCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcyhcImxlZnRcIil9KSksdGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKFwidWktcmVzaXphYmxlXCIsdGhpcy5lbGVtZW50LnJlc2l6YWJsZShcImluc3RhbmNlXCIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsZT17bWFyZ2luVG9wOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpblRvcFwiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5SaWdodFwiKSxtYXJnaW5Cb3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luQm90dG9tXCIpLG1hcmdpbkxlZnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luTGVmdFwiKX0sdGhpcy5lbGVtZW50LmNzcyhlKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5cIiwwKSx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwicmVzaXplXCIpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiLFwibm9uZVwiKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpcInN0YXRpY1wiLHpvb206MSxkaXNwbGF5OlwiYmxvY2tcIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoZSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5fc2V0dXBIYW5kbGVzKCksaS5hdXRvSGlkZSYmdCh0aGlzLmVsZW1lbnQpLm9uKFwibW91c2VlbnRlclwiLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8KG4uX3JlbW92ZUNsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpLG4uX2hhbmRsZXMuc2hvdygpKX0pLm9uKFwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8bi5yZXNpemluZ3x8KG4uX2FkZENsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpLG4uX2hhbmRsZXMuaGlkZSgpKX0pLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciBlLGk9ZnVuY3Rpb24oZSl7dChlKS5yZW1vdmVEYXRhKFwicmVzaXphYmxlXCIpLnJlbW92ZURhdGEoXCJ1aS1yZXNpemFibGVcIikub2ZmKFwiLnJlc2l6YWJsZVwiKS5maW5kKFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIikucmVtb3ZlKCl9O3JldHVybiB0aGlzLmVsZW1lbnRJc1dyYXBwZXImJihpKHRoaXMuZWxlbWVudCksZT10aGlzLmVsZW1lbnQsdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjplLmNzcyhcInBvc2l0aW9uXCIpLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksdG9wOmUuY3NzKFwidG9wXCIpLGxlZnQ6ZS5jc3MoXCJsZWZ0XCIpfSkuaW5zZXJ0QWZ0ZXIoZSksZS5yZW1vdmUoKSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwicmVzaXplXCIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxpKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3N1cGVyKHQsZSksdCl7Y2FzZVwiaGFuZGxlc1wiOnRoaXMuX3JlbW92ZUhhbmRsZXMoKSx0aGlzLl9zZXR1cEhhbmRsZXMoKX19LF9zZXR1cEhhbmRsZXM6ZnVuY3Rpb24oKXt2YXIgZSxpLG4scyxvLGE9dGhpcy5vcHRpb25zLHI9dGhpcztpZih0aGlzLmhhbmRsZXM9YS5oYW5kbGVzfHwodChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIsdGhpcy5lbGVtZW50KS5sZW5ndGg/e246XCIudWktcmVzaXphYmxlLW5cIixlOlwiLnVpLXJlc2l6YWJsZS1lXCIsczpcIi51aS1yZXNpemFibGUtc1wiLHc6XCIudWktcmVzaXphYmxlLXdcIixzZTpcIi51aS1yZXNpemFibGUtc2VcIixzdzpcIi51aS1yZXNpemFibGUtc3dcIixuZTpcIi51aS1yZXNpemFibGUtbmVcIixudzpcIi51aS1yZXNpemFibGUtbndcIn06XCJlLHMsc2VcIiksdGhpcy5faGFuZGxlcz10KCksdGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yPT09U3RyaW5nKWZvcihcImFsbFwiPT09dGhpcy5oYW5kbGVzJiYodGhpcy5oYW5kbGVzPVwibixlLHMsdyxzZSxzdyxuZSxud1wiKSxuPXRoaXMuaGFuZGxlcy5zcGxpdChcIixcIiksdGhpcy5oYW5kbGVzPXt9LGk9MDtpPG4ubGVuZ3RoO2krKylzPVwidWktcmVzaXphYmxlLVwiKyhlPXQudHJpbShuW2ldKSksbz10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3MobyxcInVpLXJlc2l6YWJsZS1oYW5kbGUgXCIrcyksby5jc3Moe3pJbmRleDphLnpJbmRleH0pLHRoaXMuaGFuZGxlc1tlXT1cIi51aS1yZXNpemFibGUtXCIrZSx0aGlzLmVsZW1lbnQuYXBwZW5kKG8pO3RoaXMuX3JlbmRlckF4aXM9ZnVuY3Rpb24oZSl7dmFyIGksbixzLG87Zm9yKGkgaW4gZT1lfHx0aGlzLmVsZW1lbnQsdGhpcy5oYW5kbGVzKXRoaXMuaGFuZGxlc1tpXS5jb25zdHJ1Y3Rvcj09PVN0cmluZz90aGlzLmhhbmRsZXNbaV09dGhpcy5lbGVtZW50LmNoaWxkcmVuKHRoaXMuaGFuZGxlc1tpXSkuZmlyc3QoKS5zaG93KCk6KHRoaXMuaGFuZGxlc1tpXS5qcXVlcnl8fHRoaXMuaGFuZGxlc1tpXS5ub2RlVHlwZSkmJih0aGlzLmhhbmRsZXNbaV09dCh0aGlzLmhhbmRsZXNbaV0pLHRoaXMuX29uKHRoaXMuaGFuZGxlc1tpXSx7bW91c2Vkb3duOnIuX21vdXNlRG93bn0pKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXImJnRoaXMub3JpZ2luYWxFbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24pJC9pKSYmKG49dCh0aGlzLmhhbmRsZXNbaV0sdGhpcy5lbGVtZW50KSxvPS9zd3xuZXxud3xzZXxufHMvLnRlc3QoaSk/bi5vdXRlckhlaWdodCgpOm4ub3V0ZXJXaWR0aCgpLHM9W1wicGFkZGluZ1wiLC9uZXxud3xuLy50ZXN0KGkpP1wiVG9wXCI6L3NlfHN3fHMvLnRlc3QoaSk/XCJCb3R0b21cIjovXmUkLy50ZXN0KGkpP1wiUmlnaHRcIjpcIkxlZnRcIl0uam9pbihcIlwiKSxlLmNzcyhzLG8pLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuX2hhbmRsZXM9dGhpcy5faGFuZGxlcy5hZGQodGhpcy5oYW5kbGVzW2ldKX0sdGhpcy5fcmVuZGVyQXhpcyh0aGlzLmVsZW1lbnQpLHRoaXMuX2hhbmRsZXM9dGhpcy5faGFuZGxlcy5hZGQodGhpcy5lbGVtZW50LmZpbmQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKSksdGhpcy5faGFuZGxlcy5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5vbihcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKCl7ci5yZXNpemluZ3x8KHRoaXMuY2xhc3NOYW1lJiYobz10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKSksci5heGlzPW8mJm9bMV0/b1sxXTpcInNlXCIpfSksYS5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLHRoaXMuX2FkZENsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpKX0sX3JlbW92ZUhhbmRsZXM6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzLnJlbW92ZSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUpe3ZhciBpLG4scz0hMTtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpKChuPXQodGhpcy5oYW5kbGVzW2ldKVswXSk9PT1lLnRhcmdldHx8dC5jb250YWlucyhuLGUudGFyZ2V0KSkmJihzPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZzfSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbz10aGlzLm9wdGlvbnMsYT10aGlzLmVsZW1lbnQ7cmV0dXJuIHRoaXMucmVzaXppbmc9ITAsdGhpcy5fcmVuZGVyUHJveHkoKSxpPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpKSxuPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoXCJ0b3BcIikpLG8uY29udGFpbm1lbnQmJihpKz10KG8uY29udGFpbm1lbnQpLnNjcm9sbExlZnQoKXx8MCxuKz10KG8uY29udGFpbm1lbnQpLnNjcm9sbFRvcCgpfHwwKSx0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLnBvc2l0aW9uPXtsZWZ0OmksdG9wOm59LHRoaXMuc2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOnRoaXMuaGVscGVyLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLmhlaWdodCgpfTp7d2lkdGg6YS53aWR0aCgpLGhlaWdodDphLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsU2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOmEub3V0ZXJXaWR0aCgpLGhlaWdodDphLm91dGVySGVpZ2h0KCl9Ont3aWR0aDphLndpZHRoKCksaGVpZ2h0OmEuaGVpZ2h0KCl9LHRoaXMuc2l6ZURpZmY9e3dpZHRoOmEub3V0ZXJXaWR0aCgpLWEud2lkdGgoKSxoZWlnaHQ6YS5vdXRlckhlaWdodCgpLWEuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17bGVmdDppLHRvcDpufSx0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbj17bGVmdDplLnBhZ2VYLHRvcDplLnBhZ2VZfSx0aGlzLmFzcGVjdFJhdGlvPVwibnVtYmVyXCI9PXR5cGVvZiBvLmFzcGVjdFJhdGlvP28uYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxLHM9dChcIi51aS1yZXNpemFibGUtXCIrdGhpcy5heGlzKS5jc3MoXCJjdXJzb3JcIiksdChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsXCJhdXRvXCI9PT1zP3RoaXMuYXhpcytcIi1yZXNpemVcIjpzKSx0aGlzLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1yZXNpemluZ1wiKSx0aGlzLl9wcm9wYWdhdGUoXCJzdGFydFwiLGUpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciBpLG4scz10aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixvPXRoaXMuYXhpcyxhPWUucGFnZVgtcy5sZWZ0fHwwLHI9ZS5wYWdlWS1zLnRvcHx8MCxsPXRoaXMuX2NoYW5nZVtvXTtyZXR1cm4gdGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSwhIWwmJihpPWwuYXBwbHkodGhpcyxbZSxhLHJdKSx0aGlzLl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyhlLnNoaWZ0S2V5KSwodGhpcy5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXkpJiYoaT10aGlzLl91cGRhdGVSYXRpbyhpLGUpKSxpPXRoaXMuX3Jlc3BlY3RTaXplKGksZSksdGhpcy5fdXBkYXRlQ2FjaGUoaSksdGhpcy5fcHJvcGFnYXRlKFwicmVzaXplXCIsZSksbj10aGlzLl9hcHBseUNoYW5nZXMoKSwhdGhpcy5faGVscGVyJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSx0LmlzRW1wdHlPYmplY3Qobil8fCh0aGlzLl91cGRhdGVQcmV2UHJvcGVydGllcygpLHRoaXMuX3RyaWdnZXIoXCJyZXNpemVcIixlLHRoaXMudWkoKSksdGhpcy5fYXBwbHlDaGFuZ2VzKCkpLCExKX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt0aGlzLnJlc2l6aW5nPSExO3ZhciBpLG4scyxvLGEscixsLGg9dGhpcy5vcHRpb25zLGM9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYocz0obj0oaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzKS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSkpJiZ0aGlzLl9oYXNTY3JvbGwoaVswXSxcImxlZnRcIik/MDpjLnNpemVEaWZmLmhlaWdodCxvPW4/MDpjLnNpemVEaWZmLndpZHRoLGE9e3dpZHRoOmMuaGVscGVyLndpZHRoKCktbyxoZWlnaHQ6Yy5oZWxwZXIuaGVpZ2h0KCktc30scj1wYXJzZUZsb2F0KGMuZWxlbWVudC5jc3MoXCJsZWZ0XCIpKSsoYy5wb3NpdGlvbi5sZWZ0LWMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxsPXBhcnNlRmxvYXQoYy5lbGVtZW50LmNzcyhcInRvcFwiKSkrKGMucG9zaXRpb24udG9wLWMub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsLGguYW5pbWF0ZXx8dGhpcy5lbGVtZW50LmNzcyh0LmV4dGVuZChhLHt0b3A6bCxsZWZ0OnJ9KSksYy5oZWxwZXIuaGVpZ2h0KGMuc2l6ZS5oZWlnaHQpLGMuaGVscGVyLndpZHRoKGMuc2l6ZS53aWR0aCksdGhpcy5faGVscGVyJiYhaC5hbmltYXRlJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0KFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixcImF1dG9cIiksdGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiksdGhpcy5fcHJvcGFnYXRlKFwic3RvcFwiLGUpLHRoaXMuX2hlbHBlciYmdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9LF91cGRhdGVQcmV2UHJvcGVydGllczpmdW5jdGlvbigpe3RoaXMucHJldlBvc2l0aW9uPXt0b3A6dGhpcy5wb3NpdGlvbi50b3AsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnR9LHRoaXMucHJldlNpemU9e3dpZHRoOnRoaXMuc2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5zaXplLmhlaWdodH19LF9hcHBseUNoYW5nZXM6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5wb3NpdGlvbi50b3AhPT10aGlzLnByZXZQb3NpdGlvbi50b3AmJih0LnRvcD10aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIpLHRoaXMucG9zaXRpb24ubGVmdCE9PXRoaXMucHJldlBvc2l0aW9uLmxlZnQmJih0LmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0K1wicHhcIiksdGhpcy5zaXplLndpZHRoIT09dGhpcy5wcmV2U2l6ZS53aWR0aCYmKHQud2lkdGg9dGhpcy5zaXplLndpZHRoK1wicHhcIiksdGhpcy5zaXplLmhlaWdodCE9PXRoaXMucHJldlNpemUuaGVpZ2h0JiYodC5oZWlnaHQ9dGhpcy5zaXplLmhlaWdodCtcInB4XCIpLHRoaXMuaGVscGVyLmNzcyh0KSx0fSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbyxhPXRoaXMub3B0aW9ucztvPXttaW5XaWR0aDp0aGlzLl9pc051bWJlcihhLm1pbldpZHRoKT9hLm1pbldpZHRoOjAsbWF4V2lkdGg6dGhpcy5faXNOdW1iZXIoYS5tYXhXaWR0aCk/YS5tYXhXaWR0aDoxLzAsbWluSGVpZ2h0OnRoaXMuX2lzTnVtYmVyKGEubWluSGVpZ2h0KT9hLm1pbkhlaWdodDowLG1heEhlaWdodDp0aGlzLl9pc051bWJlcihhLm1heEhlaWdodCk/YS5tYXhIZWlnaHQ6MS8wfSwodGhpcy5fYXNwZWN0UmF0aW98fHQpJiYoZT1vLm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLG49by5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9by5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxzPW8ubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxlPm8ubWluV2lkdGgmJihvLm1pbldpZHRoPWUpLG4+by5taW5IZWlnaHQmJihvLm1pbkhlaWdodD1uKSxpPG8ubWF4V2lkdGgmJihvLm1heFdpZHRoPWkpLHM8by5tYXhIZWlnaHQmJihvLm1heEhlaWdodD1zKSksdGhpcy5fdkJvdW5kYXJpZXM9b30sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMuX2lzTnVtYmVyKHQubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9dC5sZWZ0KSx0aGlzLl9pc051bWJlcih0LnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD10LnRvcCksdGhpcy5faXNOdW1iZXIodC5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD10LmhlaWdodCksdGhpcy5faXNOdW1iZXIodC53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9dC53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBvc2l0aW9uLGk9dGhpcy5zaXplLG49dGhpcy5heGlzO3JldHVybiB0aGlzLl9pc051bWJlcih0LmhlaWdodCk/dC53aWR0aD10LmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnRoaXMuX2lzTnVtYmVyKHQud2lkdGgpJiYodC5oZWlnaHQ9dC53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSxcInN3XCI9PT1uJiYodC5sZWZ0PWUubGVmdCsoaS53aWR0aC10LndpZHRoKSx0LnRvcD1udWxsKSxcIm53XCI9PT1uJiYodC50b3A9ZS50b3ArKGkuaGVpZ2h0LXQuaGVpZ2h0KSx0LmxlZnQ9ZS5sZWZ0KyhpLndpZHRoLXQud2lkdGgpKSx0fSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdkJvdW5kYXJpZXMsaT10aGlzLmF4aXMsbj10aGlzLl9pc051bWJlcih0LndpZHRoKSYmZS5tYXhXaWR0aCYmZS5tYXhXaWR0aDx0LndpZHRoLHM9dGhpcy5faXNOdW1iZXIodC5oZWlnaHQpJiZlLm1heEhlaWdodCYmZS5tYXhIZWlnaHQ8dC5oZWlnaHQsbz10aGlzLl9pc051bWJlcih0LndpZHRoKSYmZS5taW5XaWR0aCYmZS5taW5XaWR0aD50LndpZHRoLGE9dGhpcy5faXNOdW1iZXIodC5oZWlnaHQpJiZlLm1pbkhlaWdodCYmZS5taW5IZWlnaHQ+dC5oZWlnaHQscj10aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxsPXRoaXMub3JpZ2luYWxQb3NpdGlvbi50b3ArdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0LGg9L3N3fG53fHcvLnRlc3QoaSksYz0vbnd8bmV8bi8udGVzdChpKTtyZXR1cm4gbyYmKHQud2lkdGg9ZS5taW5XaWR0aCksYSYmKHQuaGVpZ2h0PWUubWluSGVpZ2h0KSxuJiYodC53aWR0aD1lLm1heFdpZHRoKSxzJiYodC5oZWlnaHQ9ZS5tYXhIZWlnaHQpLG8mJmgmJih0LmxlZnQ9ci1lLm1pbldpZHRoKSxuJiZoJiYodC5sZWZ0PXItZS5tYXhXaWR0aCksYSYmYyYmKHQudG9wPWwtZS5taW5IZWlnaHQpLHMmJmMmJih0LnRvcD1sLWUubWF4SGVpZ2h0KSx0LndpZHRofHx0LmhlaWdodHx8dC5sZWZ0fHwhdC50b3A/dC53aWR0aHx8dC5oZWlnaHR8fHQudG9wfHwhdC5sZWZ0fHwodC5sZWZ0PW51bGwpOnQudG9wPW51bGwsdH0sX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9uczpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxpPVtdLG49W3QuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksdC5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLHQuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksdC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIildLHM9W3QuY3NzKFwicGFkZGluZ1RvcFwiKSx0LmNzcyhcInBhZGRpbmdSaWdodFwiKSx0LmNzcyhcInBhZGRpbmdCb3R0b21cIiksdC5jc3MoXCJwYWRkaW5nTGVmdFwiKV07ZTw0O2UrKylpW2VdPXBhcnNlRmxvYXQobltlXSl8fDAsaVtlXSs9cGFyc2VGbG9hdChzW2VdKXx8MDtyZXR1cm57aGVpZ2h0OmlbMF0raVsyXSx3aWR0aDppWzFdK2lbM119fSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aClmb3IodmFyIHQsZT0wLGk9dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudDtlPHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoO2UrKyl0PXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHNbZV0sdGhpcy5vdXRlckRpbWVuc2lvbnN8fCh0aGlzLm91dGVyRGltZW5zaW9ucz10aGlzLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnModCkpLHQuY3NzKHtoZWlnaHQ6aS5oZWlnaHQoKS10aGlzLm91dGVyRGltZW5zaW9ucy5oZWlnaHR8fDAsd2lkdGg6aS53aWR0aCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLndpZHRofHwwfSl9LF9yZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudCxpPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnRPZmZzZXQ9ZS5vZmZzZXQoKSx0aGlzLl9oZWxwZXI/KHRoaXMuaGVscGVyPXRoaXMuaGVscGVyfHx0KFwiPGRpdiBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+PC9kaXY+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaGVscGVyLHRoaXMuX2hlbHBlciksdGhpcy5oZWxwZXIuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSxwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdCtcInB4XCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArXCJweFwiLHpJbmRleDorK2kuekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oXCJib2R5XCIpLmRpc2FibGVTZWxlY3Rpb24oKSk6dGhpcy5oZWxwZXI9dGhpcy5lbGVtZW50fSxfY2hhbmdlOntlOmZ1bmN0aW9uKHQsZSl7cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK2V9fSx3OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5vcmlnaW5hbFNpemU7cmV0dXJue2xlZnQ6dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrZSx3aWR0aDppLndpZHRoLWV9fSxuOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10aGlzLm9yaWdpbmFsU2l6ZTtyZXR1cm57dG9wOnRoaXMub3JpZ2luYWxQb3NpdGlvbi50b3AraSxoZWlnaHQ6bi5oZWlnaHQtaX19LHM6ZnVuY3Rpb24odCxlLGkpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2l9fSxzZTpmdW5jdGlvbihlLGksbil7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtlLGksbl0pKX0sc3c6ZnVuY3Rpb24oZSxpLG4pe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZSxpLG5dKSl9LG5lOmZ1bmN0aW9uKGUsaSxuKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2UsaSxuXSkpfSxudzpmdW5jdGlvbihlLGksbil7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtlLGksbl0pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24oZSxpKXt0LnVpLnBsdWdpbi5jYWxsKHRoaXMsZSxbaSx0aGlzLnVpKCldKSxcInJlc2l6ZVwiIT09ZSYmdGhpcy5fdHJpZ2dlcihlLGksdGhpcy51aSgpKX0scGx1Z2luczp7fSx1aTpmdW5jdGlvbigpe3JldHVybntvcmlnaW5hbEVsZW1lbnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQsZWxlbWVudDp0aGlzLmVsZW1lbnQsaGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sc2l6ZTp0aGlzLnNpemUsb3JpZ2luYWxTaXplOnRoaXMub3JpZ2luYWxTaXplLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9ufX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImFuaW1hdGVcIix7c3RvcDpmdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLG49aS5vcHRpb25zLHM9aS5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxvPXMubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KHNbMF0ubm9kZU5hbWUpLGE9byYmaS5faGFzU2Nyb2xsKHNbMF0sXCJsZWZ0XCIpPzA6aS5zaXplRGlmZi5oZWlnaHQscj1vPzA6aS5zaXplRGlmZi53aWR0aCxsPXt3aWR0aDppLnNpemUud2lkdGgtcixoZWlnaHQ6aS5zaXplLmhlaWdodC1hfSxoPXBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImxlZnRcIikpKyhpLnBvc2l0aW9uLmxlZnQtaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGM9cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwidG9wXCIpKSsoaS5wb3NpdGlvbi50b3AtaS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7aS5lbGVtZW50LmFuaW1hdGUodC5leHRlbmQobCxjJiZoP3t0b3A6YyxsZWZ0Omh9Ont9KSx7ZHVyYXRpb246bi5hbmltYXRlRHVyYXRpb24sZWFzaW5nOm4uYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIG49e3dpZHRoOnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcIndpZHRoXCIpKSxoZWlnaHQ6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwiaGVpZ2h0XCIpKSx0b3A6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwidG9wXCIpKSxsZWZ0OnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImxlZnRcIikpfTtzJiZzLmxlbmd0aCYmdChzWzBdKS5jc3Moe3dpZHRoOm4ud2lkdGgsaGVpZ2h0Om4uaGVpZ2h0fSksaS5fdXBkYXRlQ2FjaGUobiksaS5fcHJvcGFnYXRlKFwicmVzaXplXCIsZSl9fSl9fSksdC51aS5wbHVnaW4uYWRkKFwicmVzaXphYmxlXCIsXCJjb250YWlubWVudFwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlLGksbixzLG8sYSxyLGw9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxoPWwub3B0aW9ucyxjPWwuZWxlbWVudCx1PWguY29udGFpbm1lbnQsZD11IGluc3RhbmNlb2YgdD91LmdldCgwKTovcGFyZW50Ly50ZXN0KHUpP2MucGFyZW50KCkuZ2V0KDApOnU7ZCYmKGwuY29udGFpbmVyRWxlbWVudD10KGQpLC9kb2N1bWVudC8udGVzdCh1KXx8dT09PWRvY3VtZW50PyhsLmNvbnRhaW5lck9mZnNldD17bGVmdDowLHRvcDowfSxsLmNvbnRhaW5lclBvc2l0aW9uPXtsZWZ0OjAsdG9wOjB9LGwucGFyZW50RGF0YT17ZWxlbWVudDp0KGRvY3VtZW50KSxsZWZ0OjAsdG9wOjAsd2lkdGg6dChkb2N1bWVudCkud2lkdGgoKSxoZWlnaHQ6dChkb2N1bWVudCkuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHR9KTooZT10KGQpLGk9W10sdChbXCJUb3BcIixcIlJpZ2h0XCIsXCJMZWZ0XCIsXCJCb3R0b21cIl0pLmVhY2goZnVuY3Rpb24odCxuKXtpW3RdPWwuX251bShlLmNzcyhcInBhZGRpbmdcIituKSl9KSxsLmNvbnRhaW5lck9mZnNldD1lLm9mZnNldCgpLGwuY29udGFpbmVyUG9zaXRpb249ZS5wb3NpdGlvbigpLGwuY29udGFpbmVyU2l6ZT17aGVpZ2h0OmUuaW5uZXJIZWlnaHQoKS1pWzNdLHdpZHRoOmUuaW5uZXJXaWR0aCgpLWlbMV19LG49bC5jb250YWluZXJPZmZzZXQscz1sLmNvbnRhaW5lclNpemUuaGVpZ2h0LG89bC5jb250YWluZXJTaXplLndpZHRoLGE9bC5faGFzU2Nyb2xsKGQsXCJsZWZ0XCIpP2Quc2Nyb2xsV2lkdGg6byxyPWwuX2hhc1Njcm9sbChkKT9kLnNjcm9sbEhlaWdodDpzLGwucGFyZW50RGF0YT17ZWxlbWVudDpkLGxlZnQ6bi5sZWZ0LHRvcDpuLnRvcCx3aWR0aDphLGhlaWdodDpyfSkpfSxyZXNpemU6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG8sYT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHI9YS5vcHRpb25zLGw9YS5jb250YWluZXJPZmZzZXQsaD1hLnBvc2l0aW9uLGM9YS5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXksdT17dG9wOjAsbGVmdDowfSxkPWEuY29udGFpbmVyRWxlbWVudCxwPSEwO2RbMF0hPT1kb2N1bWVudCYmL3N0YXRpYy8udGVzdChkLmNzcyhcInBvc2l0aW9uXCIpKSYmKHU9bCksaC5sZWZ0PChhLl9oZWxwZXI/bC5sZWZ0OjApJiYoYS5zaXplLndpZHRoPWEuc2l6ZS53aWR0aCsoYS5faGVscGVyP2EucG9zaXRpb24ubGVmdC1sLmxlZnQ6YS5wb3NpdGlvbi5sZWZ0LXUubGVmdCksYyYmKGEuc2l6ZS5oZWlnaHQ9YS5zaXplLndpZHRoL2EuYXNwZWN0UmF0aW8scD0hMSksYS5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2wubGVmdDowKSxoLnRvcDwoYS5faGVscGVyP2wudG9wOjApJiYoYS5zaXplLmhlaWdodD1hLnNpemUuaGVpZ2h0KyhhLl9oZWxwZXI/YS5wb3NpdGlvbi50b3AtbC50b3A6YS5wb3NpdGlvbi50b3ApLGMmJihhLnNpemUud2lkdGg9YS5zaXplLmhlaWdodCphLmFzcGVjdFJhdGlvLHA9ITEpLGEucG9zaXRpb24udG9wPWEuX2hlbHBlcj9sLnRvcDowKSxzPWEuY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1hLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLG89L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KGEuY29udGFpbmVyRWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSkscyYmbz8oYS5vZmZzZXQubGVmdD1hLnBhcmVudERhdGEubGVmdCthLnBvc2l0aW9uLmxlZnQsYS5vZmZzZXQudG9wPWEucGFyZW50RGF0YS50b3ArYS5wb3NpdGlvbi50b3ApOihhLm9mZnNldC5sZWZ0PWEuZWxlbWVudC5vZmZzZXQoKS5sZWZ0LGEub2Zmc2V0LnRvcD1hLmVsZW1lbnQub2Zmc2V0KCkudG9wKSxpPU1hdGguYWJzKGEuc2l6ZURpZmYud2lkdGgrKGEuX2hlbHBlcj9hLm9mZnNldC5sZWZ0LXUubGVmdDphLm9mZnNldC5sZWZ0LWwubGVmdCkpLG49TWF0aC5hYnMoYS5zaXplRGlmZi5oZWlnaHQrKGEuX2hlbHBlcj9hLm9mZnNldC50b3AtdS50b3A6YS5vZmZzZXQudG9wLWwudG9wKSksaSthLnNpemUud2lkdGg+PWEucGFyZW50RGF0YS53aWR0aCYmKGEuc2l6ZS53aWR0aD1hLnBhcmVudERhdGEud2lkdGgtaSxjJiYoYS5zaXplLmhlaWdodD1hLnNpemUud2lkdGgvYS5hc3BlY3RSYXRpbyxwPSExKSksbithLnNpemUuaGVpZ2h0Pj1hLnBhcmVudERhdGEuaGVpZ2h0JiYoYS5zaXplLmhlaWdodD1hLnBhcmVudERhdGEuaGVpZ2h0LW4sYyYmKGEuc2l6ZS53aWR0aD1hLnNpemUuaGVpZ2h0KmEuYXNwZWN0UmF0aW8scD0hMSkpLHB8fChhLnBvc2l0aW9uLmxlZnQ9YS5wcmV2UG9zaXRpb24ubGVmdCxhLnBvc2l0aW9uLnRvcD1hLnByZXZQb3NpdGlvbi50b3AsYS5zaXplLndpZHRoPWEucHJldlNpemUud2lkdGgsYS5zaXplLmhlaWdodD1hLnByZXZTaXplLmhlaWdodCl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGk9ZS5vcHRpb25zLG49ZS5jb250YWluZXJPZmZzZXQscz1lLmNvbnRhaW5lclBvc2l0aW9uLG89ZS5jb250YWluZXJFbGVtZW50LGE9dChlLmhlbHBlcikscj1hLm9mZnNldCgpLGw9YS5vdXRlcldpZHRoKCktZS5zaXplRGlmZi53aWR0aCxoPWEub3V0ZXJIZWlnaHQoKS1lLnNpemVEaWZmLmhlaWdodDtlLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChvLmNzcyhcInBvc2l0aW9uXCIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LXMubGVmdC1uLmxlZnQsd2lkdGg6bCxoZWlnaHQ6aH0pLGUuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChvLmNzcyhcInBvc2l0aW9uXCIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LXMubGVmdC1uLmxlZnQsd2lkdGg6bCxoZWlnaHQ6aH0pfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiYWxzb1Jlc2l6ZVwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikub3B0aW9uczt0KGUuYWxzb1Jlc2l6ZSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIix7d2lkdGg6cGFyc2VGbG9hdChlLndpZHRoKCkpLGhlaWdodDpwYXJzZUZsb2F0KGUuaGVpZ2h0KCkpLGxlZnQ6cGFyc2VGbG9hdChlLmNzcyhcImxlZnRcIikpLHRvcDpwYXJzZUZsb2F0KGUuY3NzKFwidG9wXCIpKX0pfSl9LHJlc2l6ZTpmdW5jdGlvbihlLGkpe3ZhciBuPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIikscz1uLm9wdGlvbnMsbz1uLm9yaWdpbmFsU2l6ZSxhPW4ub3JpZ2luYWxQb3NpdGlvbixyPXtoZWlnaHQ6bi5zaXplLmhlaWdodC1vLmhlaWdodHx8MCx3aWR0aDpuLnNpemUud2lkdGgtby53aWR0aHx8MCx0b3A6bi5wb3NpdGlvbi50b3AtYS50b3B8fDAsbGVmdDpuLnBvc2l0aW9uLmxlZnQtYS5sZWZ0fHwwfTt0KHMuYWxzb1Jlc2l6ZSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksbj10KHRoaXMpLmRhdGEoXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiKSxzPXt9LG89ZS5wYXJlbnRzKGkub3JpZ2luYWxFbGVtZW50WzBdKS5sZW5ndGg/W1wid2lkdGhcIixcImhlaWdodFwiXTpbXCJ3aWR0aFwiLFwiaGVpZ2h0XCIsXCJ0b3BcIixcImxlZnRcIl07dC5lYWNoKG8sZnVuY3Rpb24odCxlKXt2YXIgaT0obltlXXx8MCkrKHJbZV18fDApO2kmJmk+PTAmJihzW2VdPWl8fG51bGwpfSksZS5jc3Mocyl9KX0sc3RvcDpmdW5jdGlvbigpe3QodGhpcykucmVtb3ZlRGF0YShcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIpfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiZ2hvc3RcIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGk9ZS5zaXplO2UuZ2hvc3Q9ZS5vcmlnaW5hbEVsZW1lbnQuY2xvbmUoKSxlLmdob3N0LmNzcyh7b3BhY2l0eTouMjUsZGlzcGxheTpcImJsb2NrXCIscG9zaXRpb246XCJyZWxhdGl2ZVwiLGhlaWdodDppLmhlaWdodCx3aWR0aDppLndpZHRoLG1hcmdpbjowLGxlZnQ6MCx0b3A6MH0pLGUuX2FkZENsYXNzKGUuZ2hvc3QsXCJ1aS1yZXNpemFibGUtZ2hvc3RcIiksITEhPT10LnVpQmFja0NvbXBhdCYmXCJzdHJpbmdcIj09dHlwZW9mIGUub3B0aW9ucy5naG9zdCYmZS5naG9zdC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuZ2hvc3QpLGUuZ2hvc3QuYXBwZW5kVG8oZS5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpO2UuZ2hvc3QmJmUuZ2hvc3QuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCIsaGVpZ2h0OmUuc2l6ZS5oZWlnaHQsd2lkdGg6ZS5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpO2UuZ2hvc3QmJmUuaGVscGVyJiZlLmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQoZS5naG9zdC5nZXQoMCkpfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiZ3JpZFwiLHtyZXNpemU6ZnVuY3Rpb24oKXt2YXIgZSxpPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksbj1pLm9wdGlvbnMscz1pLnNpemUsbz1pLm9yaWdpbmFsU2l6ZSxhPWkub3JpZ2luYWxQb3NpdGlvbixyPWkuYXhpcyxsPVwibnVtYmVyXCI9PXR5cGVvZiBuLmdyaWQ/W24uZ3JpZCxuLmdyaWRdOm4uZ3JpZCxoPWxbMF18fDEsYz1sWzFdfHwxLHU9TWF0aC5yb3VuZCgocy53aWR0aC1vLndpZHRoKS9oKSpoLGQ9TWF0aC5yb3VuZCgocy5oZWlnaHQtby5oZWlnaHQpL2MpKmMscD1vLndpZHRoK3UsZj1vLmhlaWdodCtkLGc9bi5tYXhXaWR0aCYmbi5tYXhXaWR0aDxwLG09bi5tYXhIZWlnaHQmJm4ubWF4SGVpZ2h0PGYsdj1uLm1pbldpZHRoJiZuLm1pbldpZHRoPnAsYj1uLm1pbkhlaWdodCYmbi5taW5IZWlnaHQ+ZjtuLmdyaWQ9bCx2JiYocCs9aCksYiYmKGYrPWMpLGcmJihwLT1oKSxtJiYoZi09YyksL14oc2V8c3xlKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9Zik6L14obmUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wLWQpOi9eKHN3KSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0LXUpOigoZi1jPD0wfHxwLWg8PTApJiYoZT1pLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnModGhpcykpLGYtYz4wPyhpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9YS50b3AtZCk6KGY9Yy1lLmhlaWdodCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9YS50b3Arby5oZWlnaHQtZikscC1oPjA/KGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1hLmxlZnQtdSk6KHA9aC1lLndpZHRoLGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1hLmxlZnQrby53aWR0aC1wKSl9fSksdC51aS5yZXNpemFibGUsdC53aWRnZXQoXCJ1aS5kaWFsb2dcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2FwcGVuZFRvOlwiYm9keVwiLGF1dG9PcGVuOiEwLGJ1dHRvbnM6W10sY2xhc3Nlczp7XCJ1aS1kaWFsb2dcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLWRpYWxvZy10aXRsZWJhclwiOlwidWktY29ybmVyLWFsbFwifSxjbG9zZU9uRXNjYXBlOiEwLGNsb3NlVGV4dDpcIkNsb3NlXCIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6XCJhdXRvXCIsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6XCJjZW50ZXJcIixhdDpcImNlbnRlclwiLG9mOndpbmRvdyxjb2xsaXNpb246XCJmaXRcIix1c2luZzpmdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLmNzcyhlKS5vZmZzZXQoKS50b3A7aTwwJiZ0KHRoaXMpLmNzcyhcInRvcFwiLGUudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLG51bGw9PXRoaXMub3B0aW9ucy50aXRsZSYmbnVsbCE9dGhpcy5vcmlnaW5hbFRpdGxlJiYodGhpcy5vcHRpb25zLnRpdGxlPXRoaXMub3JpZ2luYWxUaXRsZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPSExKSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKFwidGl0bGVcIikuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kaWFsb2ctY29udGVudFwiLFwidWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fY3JlYXRlVGl0bGViYXIoKSx0aGlzLl9jcmVhdGVCdXR0b25QYW5lKCksdGhpcy5vcHRpb25zLmRyYWdnYWJsZSYmdC5mbi5kcmFnZ2FibGUmJnRoaXMuX21ha2VEcmFnZ2FibGUoKSx0aGlzLm9wdGlvbnMucmVzaXphYmxlJiZ0LmZuLnJlc2l6YWJsZSYmdGhpcy5fbWFrZVJlc2l6YWJsZSgpLHRoaXMuX2lzT3Blbj0hMSx0aGlzLl90cmFja0ZvY3VzKCl9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZS5qcXVlcnl8fGUubm9kZVR5cGUpP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGV8fFwiYm9keVwiKS5lcSgwKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMub3JpZ2luYWxQb3NpdGlvbjt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSx0aGlzLnVpRGlhbG9nLnJlbW92ZSgpLHRoaXMub3JpZ2luYWxUaXRsZSYmdGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiLHRoaXMub3JpZ2luYWxUaXRsZSksKHQ9ZS5wYXJlbnQuY2hpbGRyZW4oKS5lcShlLmluZGV4KSkubGVuZ3RoJiZ0WzBdIT09dGhpcy5lbGVtZW50WzBdP3QuYmVmb3JlKHRoaXMuZWxlbWVudCk6ZS5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxkaXNhYmxlOnQubm9vcCxlbmFibGU6dC5ub29wLGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7dGhpcy5faXNPcGVuJiYhMSE9PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVDbG9zZVwiLGUpJiYodGhpcy5faXNPcGVuPSExLHRoaXMuX2ZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLm9wZW5lci5maWx0ZXIoXCI6Zm9jdXNhYmxlXCIpLnRyaWdnZXIoXCJmb2N1c1wiKS5sZW5ndGh8fHQudWkuc2FmZUJsdXIodC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSksdGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5fdHJpZ2dlcihcImNsb3NlXCIsZSl9KSl9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbigpe3RoaXMuX21vdmVUb1RvcCgpfSxfbW92ZVRvVG9wOmZ1bmN0aW9uKGUsaSl7dmFyIG49ITEscz10aGlzLnVpRGlhbG9nLnNpYmxpbmdzKFwiLnVpLWZyb250OnZpc2libGVcIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuK3QodGhpcykuY3NzKFwiei1pbmRleFwiKX0pLmdldCgpLG89TWF0aC5tYXguYXBwbHkobnVsbCxzKTtyZXR1cm4gbz49K3RoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiKSYmKHRoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiLG8rMSksbj0hMCksbiYmIWkmJnRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUpLG59LG9wZW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzT3Blbj90aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpOih0aGlzLl9pc09wZW49ITAsdGhpcy5vcGVuZXI9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSx0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fbW92ZVRvVG9wKG51bGwsITApLHRoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmNzcyhcInotaW5kZXhcIix0aGlzLnVpRGlhbG9nLmNzcyhcInotaW5kZXhcIiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7ZS5fZm9jdXNUYWJiYWJsZSgpLGUuX3RyaWdnZXIoXCJmb2N1c1wiKX0pLHRoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mb2N1c2VkRWxlbWVudDt0fHwodD10aGlzLmVsZW1lbnQuZmluZChcIlthdXRvZm9jdXNdXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy5lbGVtZW50LmZpbmQoXCI6dGFiYmFibGVcIikpLHQubGVuZ3RofHwodD10aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5maW5kKFwiOnRhYmJhYmxlXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKFwiOnRhYmJhYmxlXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZyksdC5lcSgwKS50cmlnZ2VyKFwiZm9jdXNcIil9LF9rZWVwRm9jdXM6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaSgpe3ZhciBlPXQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSk7dGhpcy51aURpYWxvZ1swXT09PWV8fHQuY29udGFpbnModGhpcy51aURpYWxvZ1swXSxlKXx8dGhpcy5fZm9jdXNUYWJiYWJsZSgpfWUucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5fZGVsYXkoaSl9LF9jcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZz10KFwiPGRpdj5cIikuaGlkZSgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6XCJkaWFsb2dcIn0pLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2csXCJ1aS1kaWFsb2dcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1mcm9udFwiKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nLHtrZXlkb3duOmZ1bmN0aW9uKGUpe2lmKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmZS5rZXlDb2RlJiZlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuRVNDQVBFKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCB0aGlzLmNsb3NlKGUpO2lmKGUua2V5Q29kZT09PXQudWkua2V5Q29kZS5UQUImJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLnVpRGlhbG9nLmZpbmQoXCI6dGFiYmFibGVcIiksbj1pLmZpbHRlcihcIjpmaXJzdFwiKSxzPWkuZmlsdGVyKFwiOmxhc3RcIik7ZS50YXJnZXQhPT1zWzBdJiZlLnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fGUuc2hpZnRLZXk/ZS50YXJnZXQhPT1uWzBdJiZlLnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fCFlLnNoaWZ0S2V5fHwodGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtzLnRyaWdnZXIoXCJmb2N1c1wiKX0pLGUucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bi50cmlnZ2VyKFwiZm9jdXNcIil9KSxlLnByZXZlbnREZWZhdWx0KCkpfX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVUb1RvcCh0KSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpfX0pLHRoaXMuZWxlbWVudC5maW5kKFwiW2FyaWEtZGVzY3JpYmVkYnldXCIpLmxlbmd0aHx8dGhpcy51aURpYWxvZy5hdHRyKHtcImFyaWEtZGVzY3JpYmVkYnlcIjp0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKFwiaWRcIil9KX0sX2NyZWF0ZVRpdGxlYmFyOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy51aURpYWxvZ1RpdGxlYmFyPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nVGl0bGViYXIsXCJ1aS1kaWFsb2ctdGl0bGViYXJcIixcInVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4XCIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhcix7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3QoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIpfHx0aGlzLnVpRGlhbG9nLnRyaWdnZXIoXCJmb2N1c1wiKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT10KFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiKS5idXR0b24oe2xhYmVsOnQoXCI8YT5cIikudGV4dCh0aGlzLm9wdGlvbnMuY2xvc2VUZXh0KS5odG1sKCksaWNvbjpcInVpLWljb24tY2xvc2V0aGlja1wiLHNob3dMYWJlbDohMX0pLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UsXCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2VcIiksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2Use2NsaWNrOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHQpfX0pLGU9dChcIjxzcGFuPlwiKS51bmlxdWVJZCgpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX2FkZENsYXNzKGUsXCJ1aS1kaWFsb2ctdGl0bGVcIiksdGhpcy5fdGl0bGUoZSksdGhpcy51aURpYWxvZ1RpdGxlYmFyLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLnVpRGlhbG9nLmF0dHIoe1wiYXJpYS1sYWJlbGxlZGJ5XCI6ZS5hdHRyKFwiaWRcIil9KX0sX3RpdGxlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy50aXRsZT90LnRleHQodGhpcy5vcHRpb25zLnRpdGxlKTp0Lmh0bWwoXCImIzE2MDtcIil9LFxuX2NyZWF0ZUJ1dHRvblBhbmU6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZT10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZ0J1dHRvblBhbmUsXCJ1aS1kaWFsb2ctYnV0dG9ucGFuZVwiLFwidWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4XCIpLHRoaXMudWlCdXR0b25TZXQ9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dCdXR0b25QYW5lKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpQnV0dG9uU2V0LFwidWktZGlhbG9nLWJ1dHRvbnNldFwiKSx0aGlzLl9jcmVhdGVCdXR0b25zKCl9LF9jcmVhdGVCdXR0b25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXRoaXMub3B0aW9ucy5idXR0b25zO3RoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSx0LmlzRW1wdHlPYmplY3QoaSl8fHQuaXNBcnJheShpKSYmIWkubGVuZ3RoP3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMudWlEaWFsb2csXCJ1aS1kaWFsb2ctYnV0dG9uc1wiKToodC5lYWNoKGksZnVuY3Rpb24oaSxuKXt2YXIgcyxvO249dC5pc0Z1bmN0aW9uKG4pP3tjbGljazpuLHRleHQ6aX06bixuPXQuZXh0ZW5kKHt0eXBlOlwiYnV0dG9uXCJ9LG4pLHM9bi5jbGljayxvPXtpY29uOm4uaWNvbixpY29uUG9zaXRpb246bi5pY29uUG9zaXRpb24sc2hvd0xhYmVsOm4uc2hvd0xhYmVsLGljb25zOm4uaWNvbnMsdGV4dDpuLnRleHR9LGRlbGV0ZSBuLmNsaWNrLGRlbGV0ZSBuLmljb24sZGVsZXRlIG4uaWNvblBvc2l0aW9uLGRlbGV0ZSBuLnNob3dMYWJlbCxkZWxldGUgbi5pY29ucyxcImJvb2xlYW5cIj09dHlwZW9mIG4udGV4dCYmZGVsZXRlIG4udGV4dCx0KFwiPGJ1dHRvbj48L2J1dHRvbj5cIixuKS5idXR0b24obykuYXBwZW5kVG8oZS51aUJ1dHRvblNldCkub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7cy5hcHBseShlLmVsZW1lbnRbMF0sYXJndW1lbnRzKX0pfSksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZyxcInVpLWRpYWxvZy1idXR0b25zXCIpLHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybntwb3NpdGlvbjp0LnBvc2l0aW9uLG9mZnNldDp0Lm9mZnNldH19dmFyIGk9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOlwiLnVpLWRpYWxvZy1jb250ZW50LCAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIsaGFuZGxlOlwiLnVpLWRpYWxvZy10aXRsZWJhclwiLGNvbnRhaW5tZW50OlwiZG9jdW1lbnRcIixzdGFydDpmdW5jdGlvbihuLHMpe2kuX2FkZENsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctZHJhZ2dpbmdcIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwiZHJhZ1N0YXJ0XCIsbixlKHMpKX0sZHJhZzpmdW5jdGlvbih0LG4pe2kuX3RyaWdnZXIoXCJkcmFnXCIsdCxlKG4pKX0sc3RvcDpmdW5jdGlvbihzLG8pe3ZhciBhPW8ub2Zmc2V0LmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscj1vLm9mZnNldC50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtuLnBvc2l0aW9uPXtteTpcImxlZnQgdG9wXCIsYXQ6XCJsZWZ0XCIrKGE+PTA/XCIrXCI6XCJcIikrYStcIiB0b3BcIisocj49MD9cIitcIjpcIlwiKStyLG9mOmkud2luZG93fSxpLl9yZW1vdmVDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX3VuYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwiZHJhZ1N0b3BcIixzLGUobykpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246dC5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTp0Lm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjp0LnBvc2l0aW9uLHNpemU6dC5zaXplfX12YXIgaT10aGlzLG49dGhpcy5vcHRpb25zLHM9bi5yZXNpemFibGUsbz10aGlzLnVpRGlhbG9nLmNzcyhcInBvc2l0aW9uXCIpLGE9XCJzdHJpbmdcIj09dHlwZW9mIHM/czpcIm4sZSxzLHcsc2Usc3csbmUsbndcIjt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOlwiLnVpLWRpYWxvZy1jb250ZW50XCIsY29udGFpbm1lbnQ6XCJkb2N1bWVudFwiLGFsc29SZXNpemU6dGhpcy5lbGVtZW50LG1heFdpZHRoOm4ubWF4V2lkdGgsbWF4SGVpZ2h0Om4ubWF4SGVpZ2h0LG1pbldpZHRoOm4ubWluV2lkdGgsbWluSGVpZ2h0OnRoaXMuX21pbkhlaWdodCgpLGhhbmRsZXM6YSxzdGFydDpmdW5jdGlvbihuLHMpe2kuX2FkZENsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKFwicmVzaXplU3RhcnRcIixuLGUocykpfSxyZXNpemU6ZnVuY3Rpb24odCxuKXtpLl90cmlnZ2VyKFwicmVzaXplXCIsdCxlKG4pKX0sc3RvcDpmdW5jdGlvbihzLG8pe3ZhciBhPWkudWlEaWFsb2cub2Zmc2V0KCkscj1hLmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCksbD1hLnRvcC1pLmRvY3VtZW50LnNjcm9sbFRvcCgpO24uaGVpZ2h0PWkudWlEaWFsb2cuaGVpZ2h0KCksbi53aWR0aD1pLnVpRGlhbG9nLndpZHRoKCksbi5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhyPj0wP1wiK1wiOlwiXCIpK3IrXCIgdG9wXCIrKGw+PTA/XCIrXCI6XCJcIikrbCxvZjppLndpbmRvd30saS5fcmVtb3ZlQ2xhc3ModCh0aGlzKSxcInVpLWRpYWxvZy1yZXNpemluZ1wiKSxpLl91bmJsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcInJlc2l6ZVN0b3BcIixzLGUobykpfX0pLmNzcyhcInBvc2l0aW9uXCIsbyl9LF90cmFja0ZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fb24odGhpcy53aWRnZXQoKSx7Zm9jdXNpbjpmdW5jdGlvbihlKXt0aGlzLl9tYWtlRm9jdXNUYXJnZXQoKSx0aGlzLl9mb2N1c2VkRWxlbWVudD10KGUudGFyZ2V0KX19KX0sX21ha2VGb2N1c1RhcmdldDpmdW5jdGlvbigpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT10LmluQXJyYXkodGhpcyxlKTstMSE9PWkmJmUuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1pbnN0YW5jZXNcIik7cmV0dXJuIHR8fCh0PVtdLHRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1pbnN0YW5jZXNcIix0KSksdH0sX21pbkhlaWdodDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm5cImF1dG9cIj09PXQuaGVpZ2h0P3QubWluSGVpZ2h0Ok1hdGgubWluKHQubWluSGVpZ2h0LHQuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy51aURpYWxvZy5pcyhcIjp2aXNpYmxlXCIpO3R8fHRoaXMudWlEaWFsb2cuc2hvdygpLHRoaXMudWlEaWFsb2cucG9zaXRpb24odGhpcy5vcHRpb25zLnBvc2l0aW9uKSx0fHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxuPSExLHM9e307dC5lYWNoKGUsZnVuY3Rpb24odCxlKXtpLl9zZXRPcHRpb24odCxlKSx0IGluIGkuc2l6ZVJlbGF0ZWRPcHRpb25zJiYobj0hMCksdCBpbiBpLnJlc2l6YWJsZVJlbGF0ZWRPcHRpb25zJiYoc1t0XT1lKX0pLG4mJih0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSksdGhpcy51aURpYWxvZy5pcyhcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIikmJnRoaXMudWlEaWFsb2cucmVzaXphYmxlKFwib3B0aW9uXCIscyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXt2YXIgbixzLG89dGhpcy51aURpYWxvZztcImRpc2FibGVkXCIhPT1lJiYodGhpcy5fc3VwZXIoZSxpKSxcImFwcGVuZFRvXCI9PT1lJiZ0aGlzLnVpRGlhbG9nLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiYnV0dG9uc1wiPT09ZSYmdGhpcy5fY3JlYXRlQnV0dG9ucygpLFwiY2xvc2VUZXh0XCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOnQoXCI8YT5cIikudGV4dChcIlwiK3RoaXMub3B0aW9ucy5jbG9zZVRleHQpLmh0bWwoKX0pLFwiZHJhZ2dhYmxlXCI9PT1lJiYoKG49by5pcyhcIjpkYXRhKHVpLWRyYWdnYWJsZSlcIikpJiYhaSYmby5kcmFnZ2FibGUoXCJkZXN0cm95XCIpLCFuJiZpJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCkpLFwicG9zaXRpb25cIj09PWUmJnRoaXMuX3Bvc2l0aW9uKCksXCJyZXNpemFibGVcIj09PWUmJigocz1vLmlzKFwiOmRhdGEodWktcmVzaXphYmxlKVwiKSkmJiFpJiZvLnJlc2l6YWJsZShcImRlc3Ryb3lcIikscyYmXCJzdHJpbmdcIj09dHlwZW9mIGkmJm8ucmVzaXphYmxlKFwib3B0aW9uXCIsXCJoYW5kbGVzXCIsaSksc3x8ITE9PT1pfHx0aGlzLl9tYWtlUmVzaXphYmxlKCkpLFwidGl0bGVcIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKFwiLnVpLWRpYWxvZy10aXRsZVwiKSkpfSxfc2l6ZTpmdW5jdGlvbigpe3ZhciB0LGUsaSxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuc2hvdygpLmNzcyh7d2lkdGg6XCJhdXRvXCIsbWluSGVpZ2h0OjAsbWF4SGVpZ2h0Olwibm9uZVwiLGhlaWdodDowfSksbi5taW5XaWR0aD5uLndpZHRoJiYobi53aWR0aD1uLm1pbldpZHRoKSx0PXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6XCJhdXRvXCIsd2lkdGg6bi53aWR0aH0pLm91dGVySGVpZ2h0KCksZT1NYXRoLm1heCgwLG4ubWluSGVpZ2h0LXQpLGk9XCJudW1iZXJcIj09dHlwZW9mIG4ubWF4SGVpZ2h0P01hdGgubWF4KDAsbi5tYXhIZWlnaHQtdCk6XCJub25lXCIsXCJhdXRvXCI9PT1uLmhlaWdodD90aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6ZSxtYXhIZWlnaHQ6aSxoZWlnaHQ6XCJhdXRvXCJ9KTp0aGlzLmVsZW1lbnQuaGVpZ2h0KE1hdGgubWF4KDAsbi5oZWlnaHQtdCkpLHRoaXMudWlEaWFsb2cuaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZShcIm9wdGlvblwiLFwibWluSGVpZ2h0XCIsdGhpcy5fbWluSGVpZ2h0KCkpfSxfYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQoXCJpZnJhbWVcIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtyZXR1cm4gdChcIjxkaXY+XCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCl9KS5hcHBlbmRUbyhlLnBhcmVudCgpKS5vZmZzZXQoZS5vZmZzZXQoKSlbMF19KX0sX3VuYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2NrcyYmKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcyl9LF9hbGxvd0ludGVyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiEhdChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1kaWFsb2dcIikubGVuZ3RofHwhIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGF0ZXBpY2tlclwiKS5sZW5ndGh9LF9jcmVhdGVPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsKXt2YXIgZT0hMDt0aGlzLl9kZWxheShmdW5jdGlvbigpe2U9ITF9KSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24odCl7ZXx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbih0KXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fYWRkQ2xhc3ModGhpcy5vdmVybGF5LG51bGwsXCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udFwiKSx0aGlzLl9vbih0aGlzLm92ZXJsYXkse21vdXNlZG93bjpcIl9rZWVwRm9jdXNcIn0pLHRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiLCh0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIil8fDApKzEpfX0sX2Rlc3Ryb3lPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsJiZ0aGlzLm92ZXJsYXkpe3ZhciB0PXRoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiKS0xO3Q/dGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIsdCk6KHRoaXMuX29mZih0aGlzLmRvY3VtZW50LFwiZm9jdXNpblwiKSx0aGlzLmRvY3VtZW50LnJlbW92ZURhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIikpLHRoaXMub3ZlcmxheS5yZW1vdmUoKSx0aGlzLm92ZXJsYXk9bnVsbH19fSksITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS5kaWFsb2dcIix0LnVpLmRpYWxvZyx7b3B0aW9uczp7ZGlhbG9nQ2xhc3M6XCJcIn0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiZGlhbG9nQ2xhc3NcIj09PXQmJnRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyhlKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSksdC51aS5kaWFsb2csdC53aWRnZXQoXCJ1aS5kcm9wcGFibGVcIix7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4OlwiZHJvcFwiLG9wdGlvbnM6e2FjY2VwdDpcIipcIixhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxzY29wZTpcImRlZmF1bHRcIix0b2xlcmFuY2U6XCJpbnRlcnNlY3RcIixhY3RpdmF0ZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxkcm9wOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMsbj1pLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PXQuaXNGdW5jdGlvbihuKT9uOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKG4pfSx0aGlzLnByb3BvcnRpb25zPWZ1bmN0aW9uKCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGV8fChlPXt3aWR0aDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9KTtlPWFyZ3VtZW50c1swXX0sdGhpcy5fYWRkVG9NYW5hZ2VyKGkuc2NvcGUpLGkuYWRkQ2xhc3NlcyYmdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcm9wcGFibGVcIil9LF9hZGRUb01hbmFnZXI6ZnVuY3Rpb24oZSl7dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXT10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2VdfHxbXSx0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2VdLnB1c2godGhpcyl9LF9zcGxpY2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXT09PXRoaXMmJnQuc3BsaWNlKGUsMSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO3RoaXMuX3NwbGljZShlKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe2lmKFwiYWNjZXB0XCI9PT1lKXRoaXMuYWNjZXB0PXQuaXNGdW5jdGlvbihpKT9pOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKGkpfTtlbHNlIGlmKFwic2NvcGVcIj09PWUpe3ZhciBuPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UobiksdGhpcy5fYWRkVG9NYW5hZ2VyKGkpfXRoaXMuX3N1cGVyKGUsaSl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt2YXIgaT10LnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMuX2FkZEFjdGl2ZUNsYXNzKCksaSYmdGhpcy5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLl9yZW1vdmVBY3RpdmVDbGFzcygpLGkmJnRoaXMuX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsZSx0aGlzLnVpKGkpKX0sX292ZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDtpJiYoaS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0saS5jdXJyZW50SXRlbXx8aS5lbGVtZW50KSYmKHRoaXMuX2FkZEhvdmVyQ2xhc3MoKSx0aGlzLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy51aShpKSkpfSxfb3V0OmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLl9yZW1vdmVIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcIm91dFwiLGUsdGhpcy51aShpKSkpfSxfZHJvcDpmdW5jdGlvbihlLGkpe3ZhciBuPWl8fHQudWkuZGRtYW5hZ2VyLmN1cnJlbnQscz0hMTtyZXR1cm4hKCFufHwobi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KVswXT09PXRoaXMuZWxlbWVudFswXSkmJih0aGlzLmVsZW1lbnQuZmluZChcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikubm90KFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKS5kcm9wcGFibGUoXCJpbnN0YW5jZVwiKTtpZihpLm9wdGlvbnMuZ3JlZWR5JiYhaS5vcHRpb25zLmRpc2FibGVkJiZpLm9wdGlvbnMuc2NvcGU9PT1uLm9wdGlvbnMuc2NvcGUmJmkuYWNjZXB0LmNhbGwoaS5lbGVtZW50WzBdLG4uY3VycmVudEl0ZW18fG4uZWxlbWVudCkmJnAobix0LmV4dGVuZChpLHtvZmZzZXQ6aS5lbGVtZW50Lm9mZnNldCgpfSksaS5vcHRpb25zLnRvbGVyYW5jZSxlKSlyZXR1cm4gcz0hMCwhMX0pLCFzJiYhIXRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLG4uY3VycmVudEl0ZW18fG4uZWxlbWVudCkmJih0aGlzLl9yZW1vdmVBY3RpdmVDbGFzcygpLHRoaXMuX3JlbW92ZUhvdmVyQ2xhc3MoKSx0aGlzLl90cmlnZ2VyKFwiZHJvcFwiLGUsdGhpcy51aShuKSksdGhpcy5lbGVtZW50KSl9LHVpOmZ1bmN0aW9uKHQpe3JldHVybntkcmFnZ2FibGU6dC5jdXJyZW50SXRlbXx8dC5lbGVtZW50LGhlbHBlcjp0LmhlbHBlcixwb3NpdGlvbjp0LnBvc2l0aW9uLG9mZnNldDp0LnBvc2l0aW9uQWJzfX0sX2FkZEhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9hZGRDbGFzcyhcInVpLWRyb3BwYWJsZS1ob3ZlclwiKX0sX3JlbW92ZUhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWRyb3BwYWJsZS1ob3ZlclwiKX0sX2FkZEFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcm9wcGFibGUtYWN0aXZlXCIpfSxfcmVtb3ZlQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWRyb3BwYWJsZS1hY3RpdmVcIil9fSk7dmFyIHA9dC51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxpKXtyZXR1cm4gdD49ZSYmdDxlK2l9cmV0dXJuIGZ1bmN0aW9uKGUsaSxuLHMpe2lmKCFpLm9mZnNldClyZXR1cm4hMTt2YXIgbz0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCtlLm1hcmdpbnMubGVmdCxhPShlLnBvc2l0aW9uQWJzfHxlLnBvc2l0aW9uLmFic29sdXRlKS50b3ArZS5tYXJnaW5zLnRvcCxyPW8rZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxsPWErZS5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsaD1pLm9mZnNldC5sZWZ0LGM9aS5vZmZzZXQudG9wLHU9aCtpLnByb3BvcnRpb25zKCkud2lkdGgsZD1jK2kucHJvcG9ydGlvbnMoKS5oZWlnaHQ7c3dpdGNoKG4pe2Nhc2VcImZpdFwiOnJldHVybiBoPD1vJiZyPD11JiZjPD1hJiZsPD1kO2Nhc2VcImludGVyc2VjdFwiOnJldHVybiBoPG8rZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZyLWUuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjx1JiZjPGErZS5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmbC1lLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGQ7Y2FzZVwicG9pbnRlclwiOnJldHVybiB0KHMucGFnZVksYyxpLnByb3BvcnRpb25zKCkuaGVpZ2h0KSYmdChzLnBhZ2VYLGgsaS5wcm9wb3J0aW9ucygpLndpZHRoKTtjYXNlXCJ0b3VjaFwiOnJldHVybihhPj1jJiZhPD1kfHxsPj1jJiZsPD1kfHxhPGMmJmw+ZCkmJihvPj1oJiZvPD11fHxyPj1oJiZyPD11fHxvPGgmJnI+dSk7ZGVmYXVsdDpyZXR1cm4hMX19fSgpO3QudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7ZGVmYXVsdDpbXX0scHJlcGFyZU9mZnNldHM6ZnVuY3Rpb24oZSxpKXt2YXIgbixzLG89dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSxhPWk/aS50eXBlOm51bGwscj0oZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50KS5maW5kKFwiOmRhdGEodWktZHJvcHBhYmxlKVwiKS5hZGRCYWNrKCk7dDpmb3Iobj0wO248by5sZW5ndGg7bisrKWlmKCEob1tuXS5vcHRpb25zLmRpc2FibGVkfHxlJiYhb1tuXS5hY2NlcHQuY2FsbChvW25dLmVsZW1lbnRbMF0sZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50KSkpe2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYocltzXT09PW9bbl0uZWxlbWVudFswXSl7b1tuXS5wcm9wb3J0aW9ucygpLmhlaWdodD0wO2NvbnRpbnVlIHR9b1tuXS52aXNpYmxlPVwibm9uZVwiIT09b1tuXS5lbGVtZW50LmNzcyhcImRpc3BsYXlcIiksb1tuXS52aXNpYmxlJiYoXCJtb3VzZWRvd25cIj09PWEmJm9bbl0uX2FjdGl2YXRlLmNhbGwob1tuXSxpKSxvW25dLm9mZnNldD1vW25dLmVsZW1lbnQub2Zmc2V0KCksb1tuXS5wcm9wb3J0aW9ucyh7d2lkdGg6b1tuXS5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDpvW25dLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSkpfX0sZHJvcDpmdW5jdGlvbihlLGkpe3ZhciBuPSExO3JldHVybiB0LmVhY2goKHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXXx8W10pLnNsaWNlKCksZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJighdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnAoZSx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkmJihuPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLGkpfHxuKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGUuY3VycmVudEl0ZW18fGUuZWxlbWVudCkmJih0aGlzLmlzb3V0PSEwLHRoaXMuaXNvdmVyPSExLHRoaXMuX2RlYWN0aXZhdGUuY2FsbCh0aGlzLGkpKSl9KSxufSxkcmFnU3RhcnQ6ZnVuY3Rpb24oZSxpKXtlLmVsZW1lbnQucGFyZW50c1VudGlsKFwiYm9keVwiKS5vbihcInNjcm9sbC5kcm9wcGFibGVcIixmdW5jdGlvbigpe2Uub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHx0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpfSl9LGRyYWc6ZnVuY3Rpb24oZSxpKXtlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZSxpKSx0LmVhY2godC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSxmdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJiF0aGlzLmdyZWVkeUNoaWxkJiZ0aGlzLnZpc2libGUpe3ZhciBuLHMsbyxhPXAoZSx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkscj0hYSYmdGhpcy5pc292ZXI/XCJpc291dFwiOmEmJiF0aGlzLmlzb3Zlcj9cImlzb3ZlclwiOm51bGw7ciYmKHRoaXMub3B0aW9ucy5ncmVlZHkmJihzPXRoaXMub3B0aW9ucy5zY29wZSwobz10aGlzLmVsZW1lbnQucGFyZW50cyhcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcykuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIikub3B0aW9ucy5zY29wZT09PXN9KSkubGVuZ3RoJiYoKG49dChvWzBdKS5kcm9wcGFibGUoXCJpbnN0YW5jZVwiKSkuZ3JlZWR5Q2hpbGQ9XCJpc292ZXJcIj09PXIpKSxuJiZcImlzb3ZlclwiPT09ciYmKG4uaXNvdmVyPSExLG4uaXNvdXQ9ITAsbi5fb3V0LmNhbGwobixpKSksdGhpc1tyXT0hMCx0aGlzW1wiaXNvdXRcIj09PXI/XCJpc292ZXJcIjpcImlzb3V0XCJdPSExLHRoaXNbXCJpc292ZXJcIj09PXI/XCJfb3ZlclwiOlwiX291dFwiXS5jYWxsKHRoaXMsaSksbiYmXCJpc291dFwiPT09ciYmKG4uaXNvdXQ9ITEsbi5pc292ZXI9ITAsbi5fb3Zlci5jYWxsKG4saSkpKX19KX0sZHJhZ1N0b3A6ZnVuY3Rpb24oZSxpKXtlLmVsZW1lbnQucGFyZW50c1VudGlsKFwiYm9keVwiKS5vZmYoXCJzY3JvbGwuZHJvcHBhYmxlXCIpLGUub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHx0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpfX0sITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS5kcm9wcGFibGVcIix0LnVpLmRyb3BwYWJsZSx7b3B0aW9uczp7aG92ZXJDbGFzczohMSxhY3RpdmVDbGFzczohMX0sX2FkZEFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpfSxfcmVtb3ZlQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyl9LF9hZGRIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKX0sX3JlbW92ZUhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpfX0pLHQudWkuZHJvcHBhYmxlLHQud2lkZ2V0KFwidWkucHJvZ3Jlc3NiYXJcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktcHJvZ3Jlc3NiYXJcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXByb2dyZXNzYmFyLXZhbHVlXCI6XCJ1aS1jb3JuZXItbGVmdFwiLFwidWktcHJvZ3Jlc3NiYXItY29tcGxldGVcIjpcInVpLWNvcm5lci1yaWdodFwifSxtYXg6MTAwLHZhbHVlOjAsY2hhbmdlOm51bGwsY29tcGxldGU6bnVsbH0sbWluOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub2xkVmFsdWU9dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoKSx0aGlzLmVsZW1lbnQuYXR0cih7cm9sZTpcInByb2dyZXNzYmFyXCIsXCJhcmlhLXZhbHVlbWluXCI6dGhpcy5taW59KSx0aGlzLl9hZGRDbGFzcyhcInVpLXByb2dyZXNzYmFyXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy52YWx1ZURpdj10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLl9hZGRDbGFzcyh0aGlzLnZhbHVlRGl2LFwidWktcHJvZ3Jlc3NiYXItdmFsdWVcIixcInVpLXdpZGdldC1oZWFkZXJcIiksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIpLHRoaXMudmFsdWVEaXYucmVtb3ZlKCl9LHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTt0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSh0KSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2NvbnN0cmFpbmVkVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5pbmRldGVybWluYXRlPSExPT09dCxcIm51bWJlclwiIT10eXBlb2YgdCYmKHQ9MCksIXRoaXMuaW5kZXRlcm1pbmF0ZSYmTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbix0KSl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWU7ZGVsZXRlIHQudmFsdWUsdGhpcy5fc3VwZXIodCksdGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcIm1heFwiPT09dCYmKGU9TWF0aC5tYXgodGhpcy5taW4sZSkpLHRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpfSxfcGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU/MTAwOjEwMCoodGhpcy5vcHRpb25zLnZhbHVlLXRoaXMubWluKS8odGhpcy5vcHRpb25zLm1heC10aGlzLm1pbil9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWUsaT10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy52YWx1ZURpdi50b2dnbGUodGhpcy5pbmRldGVybWluYXRlfHxlPnRoaXMubWluKS53aWR0aChpLnRvRml4ZWQoMCkrXCIlXCIpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMudmFsdWVEaXYsXCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiLG51bGwsZT09PXRoaXMub3B0aW9ucy5tYXgpLl90b2dnbGVDbGFzcyhcInVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGVcIixudWxsLHRoaXMuaW5kZXRlcm1pbmF0ZSksdGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtdmFsdWVub3dcIiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLnZhbHVlRGl2KSx0aGlzLl9hZGRDbGFzcyh0aGlzLm92ZXJsYXlEaXYsXCJ1aS1wcm9ncmVzc2Jhci1vdmVybGF5XCIpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtYXhcIjp0aGlzLm9wdGlvbnMubWF4LFwiYXJpYS12YWx1ZW5vd1wiOmV9KSx0aGlzLm92ZXJsYXlEaXYmJih0aGlzLm92ZXJsYXlEaXYucmVtb3ZlKCksdGhpcy5vdmVybGF5RGl2PW51bGwpKSx0aGlzLm9sZFZhbHVlIT09ZSYmKHRoaXMub2xkVmFsdWU9ZSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIpKSxlPT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcihcImNvbXBsZXRlXCIpfX0pLHQud2lkZ2V0KFwidWkuc2VsZWN0YWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOnthcHBlbmRUbzpcImJvZHlcIixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjpcIipcIix0b2xlcmFuY2U6XCJ0b3VjaFwiLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktc2VsZWN0YWJsZVwiKSx0aGlzLmRyYWdnZWQ9ITEsdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKCl7ZS5lbGVtZW50UG9zPXQoZS5lbGVtZW50WzBdKS5vZmZzZXQoKSxlLnNlbGVjdGVlcz10KGUub3B0aW9ucy5maWx0ZXIsZS5lbGVtZW50WzBdKSxlLl9hZGRDbGFzcyhlLnNlbGVjdGVlcyxcInVpLXNlbGVjdGVlXCIpLGUuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLG49aS5vZmZzZXQoKSxzPXtsZWZ0Om4ubGVmdC1lLmVsZW1lbnRQb3MubGVmdCx0b3A6bi50b3AtZS5lbGVtZW50UG9zLnRvcH07dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OmksbGVmdDpzLmxlZnQsdG9wOnMudG9wLHJpZ2h0OnMubGVmdCtpLm91dGVyV2lkdGgoKSxib3R0b206cy50b3AraS5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6aS5oYXNDbGFzcyhcInVpLXNlbGVjdGVkXCIpLHNlbGVjdGluZzppLmhhc0NsYXNzKFwidWktc2VsZWN0aW5nXCIpLHVuc2VsZWN0aW5nOmkuaGFzQ2xhc3MoXCJ1aS11bnNlbGVjdGluZ1wiKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcixcInVpLXNlbGVjdGFibGUtaGVscGVyXCIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZURhdGEoXCJzZWxlY3RhYmxlLWl0ZW1cIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMsbj10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVtlLnBhZ2VYLGUucGFnZVldLHRoaXMuZWxlbWVudFBvcz10KHRoaXMuZWxlbWVudFswXSkub2Zmc2V0KCksdGhpcy5vcHRpb25zLmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZXM9dChuLmZpbHRlcix0aGlzLmVsZW1lbnRbMF0pLHRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLGUpLHQobi5hcHBlbmRUbykuYXBwZW5kKHRoaXMuaGVscGVyKSx0aGlzLmhlbHBlci5jc3Moe2xlZnQ6ZS5wYWdlWCx0b3A6ZS5wYWdlWSx3aWR0aDowLGhlaWdodDowfSksbi5hdXRvUmVmcmVzaCYmdGhpcy5yZWZyZXNoKCksdGhpcy5zZWxlY3RlZXMuZmlsdGVyKFwiLnVpLXNlbGVjdGVkXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKTtuLnN0YXJ0c2VsZWN0ZWQ9ITAsZS5tZXRhS2V5fHxlLmN0cmxLZXl8fChpLl9yZW1vdmVDbGFzcyhuLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIiksbi5zZWxlY3RlZD0hMSxpLl9hZGRDbGFzcyhuLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksbi51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIixlLHt1bnNlbGVjdGluZzpuLmVsZW1lbnR9KSl9KSx0KGUudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgbixzPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2lmKHMpcmV0dXJuIG49IWUubWV0YUtleSYmIWUuY3RybEtleXx8IXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJ1aS1zZWxlY3RlZFwiKSxpLl9yZW1vdmVDbGFzcyhzLiRlbGVtZW50LG4/XCJ1aS11bnNlbGVjdGluZ1wiOlwidWktc2VsZWN0ZWRcIikuX2FkZENsYXNzKHMuJGVsZW1lbnQsbj9cInVpLXNlbGVjdGluZ1wiOlwidWktdW5zZWxlY3RpbmdcIikscy51bnNlbGVjdGluZz0hbixzLnNlbGVjdGluZz1uLHMuc2VsZWN0ZWQ9bixuP2kuX3RyaWdnZXIoXCJzZWxlY3RpbmdcIixlLHtzZWxlY3Rpbmc6cy5lbGVtZW50fSk6aS5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6cy5lbGVtZW50fSksITF9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLG49dGhpcyxzPXRoaXMub3B0aW9ucyxvPXRoaXMub3Bvc1swXSxhPXRoaXMub3Bvc1sxXSxyPWUucGFnZVgsbD1lLnBhZ2VZO3JldHVybiBvPnImJihpPXIscj1vLG89aSksYT5sJiYoaT1sLGw9YSxhPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDpvLHRvcDphLHdpZHRoOnItbyxoZWlnaHQ6bC1hfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpLGg9ITEsYz17fTtpJiZpLmVsZW1lbnQhPT1uLmVsZW1lbnRbMF0mJihjLmxlZnQ9aS5sZWZ0K24uZWxlbWVudFBvcy5sZWZ0LGMucmlnaHQ9aS5yaWdodCtuLmVsZW1lbnRQb3MubGVmdCxjLnRvcD1pLnRvcCtuLmVsZW1lbnRQb3MudG9wLGMuYm90dG9tPWkuYm90dG9tK24uZWxlbWVudFBvcy50b3AsXCJ0b3VjaFwiPT09cy50b2xlcmFuY2U/aD0hKGMubGVmdD5yfHxjLnJpZ2h0PG98fGMudG9wPmx8fGMuYm90dG9tPGEpOlwiZml0XCI9PT1zLnRvbGVyYW5jZSYmKGg9Yy5sZWZ0Pm8mJmMucmlnaHQ8ciYmYy50b3A+YSYmYy5ib3R0b208bCksaD8oaS5zZWxlY3RlZCYmKG4uX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSExKSxpLnVuc2VsZWN0aW5nJiYobi5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLGkudW5zZWxlY3Rpbmc9ITEpLGkuc2VsZWN0aW5nfHwobi5fYWRkQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKFwic2VsZWN0aW5nXCIsZSx7c2VsZWN0aW5nOmkuZWxlbWVudH0pKSk6KGkuc2VsZWN0aW5nJiYoKGUubWV0YUtleXx8ZS5jdHJsS2V5KSYmaS5zdGFydHNlbGVjdGVkPyhuLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSExLG4uX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSEwKToobi5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMSxpLnN0YXJ0c2VsZWN0ZWQmJihuLl9hZGRDbGFzcyhpLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksaS51bnNlbGVjdGluZz0hMCksbi5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSxpLnNlbGVjdGVkJiYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGkuc3RhcnRzZWxlY3RlZHx8KG4uX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSExLG4uX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxpLnVuc2VsZWN0aW5nPSEwLG4uX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSkpKX0pLCExfX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO3JldHVybiB0aGlzLmRyYWdnZWQ9ITEsdChcIi51aS11bnNlbGVjdGluZ1wiLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2kuX3JlbW92ZUNsYXNzKG4uJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxuLnVuc2VsZWN0aW5nPSExLG4uc3RhcnRzZWxlY3RlZD0hMSxpLl90cmlnZ2VyKFwidW5zZWxlY3RlZFwiLGUse3Vuc2VsZWN0ZWQ6bi5lbGVtZW50fSl9KSx0KFwiLnVpLXNlbGVjdGluZ1wiLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2kuX3JlbW92ZUNsYXNzKG4uJGVsZW1lbnQsXCJ1aS1zZWxlY3RpbmdcIikuX2FkZENsYXNzKG4uJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxuLnNlbGVjdGluZz0hMSxuLnNlbGVjdGVkPSEwLG4uc3RhcnRzZWxlY3RlZD0hMCxpLl90cmlnZ2VyKFwic2VsZWN0ZWRcIixlLHtzZWxlY3RlZDpuLmVsZW1lbnR9KX0pLHRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsZSksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSksdC53aWRnZXQoXCJ1aS5zZWxlY3RtZW51XCIsW3QudWkuZm9ybVJlc2V0TWl4aW4se3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxzZWxlY3Q+XCIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxjbGFzc2VzOntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci10b3BcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLWFsbFwifSxkaXNhYmxlZDpudWxsLGljb25zOntidXR0b246XCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wifSxwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJub25lXCJ9LHdpZHRoOiExLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7dGhpcy5pZHM9e2VsZW1lbnQ6ZSxidXR0b246ZStcIi1idXR0b25cIixtZW51OmUrXCItbWVudVwifSx0aGlzLl9kcmF3QnV0dG9uKCksdGhpcy5fZHJhd01lbnUoKSx0aGlzLl9iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMuX3JlbmRlcmVkPSExLHRoaXMubWVudUl0ZW1zPXQoKX0sX2RyYXdCdXR0b246ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMsbj10aGlzLl9wYXJzZU9wdGlvbih0aGlzLmVsZW1lbnQuZmluZChcIm9wdGlvbjpzZWxlY3RlZFwiKSx0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleCk7dGhpcy5sYWJlbHM9dGhpcy5lbGVtZW50LmxhYmVscygpLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5idXR0b24pLHRoaXMuX29uKHRoaXMubGFiZWxzLHtjbGljazpmdW5jdGlvbih0KXt0aGlzLmJ1dHRvbi5mb2N1cygpLHQucHJldmVudERlZmF1bHQoKX19KSx0aGlzLmVsZW1lbnQuaGlkZSgpLHRoaXMuYnV0dG9uPXQoXCI8c3Bhbj5cIix7dGFiaW5kZXg6dGhpcy5vcHRpb25zLmRpc2FibGVkPy0xOjAsaWQ6dGhpcy5pZHMuYnV0dG9uLHJvbGU6XCJjb21ib2JveFwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIixcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCIsXCJhcmlhLW93bnNcIjp0aGlzLmlkcy5tZW51LFwiYXJpYS1oYXNwb3B1cFwiOlwidHJ1ZVwiLHRpdGxlOnRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIil9KS5pbnNlcnRBZnRlcih0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24gdWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCIsXCJ1aS1idXR0b24gdWktd2lkZ2V0XCIpLGU9dChcIjxzcGFuPlwiKS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fYWRkQ2xhc3MoZSxcInVpLXNlbGVjdG1lbnUtaWNvblwiLFwidWktaWNvbiBcIit0aGlzLm9wdGlvbnMuaWNvbnMuYnV0dG9uKSx0aGlzLmJ1dHRvbkl0ZW09dGhpcy5fcmVuZGVyQnV0dG9uSXRlbShuKS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksITEhPT10aGlzLm9wdGlvbnMud2lkdGgmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpLHRoaXMuX29uKHRoaXMuYnV0dG9uLHRoaXMuX2J1dHRvbkV2ZW50cyksdGhpcy5idXR0b24ub25lKFwiZm9jdXNpblwiLGZ1bmN0aW9uKCl7aS5fcmVuZGVyZWR8fGkuX3JlZnJlc2hNZW51KCl9KX0sX2RyYXdNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm1lbnU9dChcIjx1bD5cIix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1sYWJlbGxlZGJ5XCI6dGhpcy5pZHMuYnV0dG9uLGlkOnRoaXMuaWRzLm1lbnV9KSx0aGlzLm1lbnVXcmFwPXQoXCI8ZGl2PlwiKS5hcHBlbmQodGhpcy5tZW51KSx0aGlzLl9hZGRDbGFzcyh0aGlzLm1lbnVXcmFwLFwidWktc2VsZWN0bWVudS1tZW51XCIsXCJ1aS1mcm9udFwiKSx0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMubWVudUluc3RhbmNlPXRoaXMubWVudS5tZW51KHtjbGFzc2VzOntcInVpLW1lbnVcIjpcInVpLWNvcm5lci1ib3R0b21cIn0scm9sZTpcImxpc3Rib3hcIixzZWxlY3Q6ZnVuY3Rpb24odCxpKXt0LnByZXZlbnREZWZhdWx0KCksZS5fc2V0U2VsZWN0aW9uKCksZS5fc2VsZWN0KGkuaXRlbS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpLHQpfSxmb2N1czpmdW5jdGlvbih0LGkpe3ZhciBuPWkuaXRlbS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpO251bGwhPWUuZm9jdXNJbmRleCYmbi5pbmRleCE9PWUuZm9jdXNJbmRleCYmKGUuX3RyaWdnZXIoXCJmb2N1c1wiLHQse2l0ZW06bn0pLGUuaXNPcGVufHxlLl9zZWxlY3Qobix0KSksZS5mb2N1c0luZGV4PW4uaW5kZXgsZS5idXR0b24uYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUubWVudUl0ZW1zLmVxKG4uaW5kZXgpLmF0dHIoXCJpZFwiKSl9fSkubWVudShcImluc3RhbmNlXCIpLHRoaXMubWVudUluc3RhbmNlLl9vZmYodGhpcy5tZW51LFwibW91c2VsZWF2ZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fY2xvc2VPbkRvY3VtZW50Q2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5tZW51SW5zdGFuY2UuX2lzRGl2aWRlcj1mdW5jdGlvbigpe3JldHVybiExfX0scmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3JlZnJlc2hNZW51KCksdGhpcy5idXR0b25JdGVtLnJlcGxhY2VXaXRoKHRoaXMuYnV0dG9uSXRlbT10aGlzLl9yZW5kZXJCdXR0b25JdGVtKHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIil8fHt9KSksbnVsbD09PXRoaXMub3B0aW9ucy53aWR0aCYmdGhpcy5fcmVzaXplQnV0dG9uKCl9LF9yZWZyZXNoTWVudTpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5lbGVtZW50LmZpbmQoXCJvcHRpb25cIik7dGhpcy5tZW51LmVtcHR5KCksdGhpcy5fcGFyc2VPcHRpb25zKGUpLHRoaXMuX3JlbmRlck1lbnUodGhpcy5tZW51LHRoaXMuaXRlbXMpLHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKSx0aGlzLm1lbnVJdGVtcz10aGlzLm1lbnUuZmluZChcImxpXCIpLm5vdChcIi51aS1zZWxlY3RtZW51LW9wdGdyb3VwXCIpLmZpbmQoXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fcmVuZGVyZWQ9ITAsZS5sZW5ndGgmJih0PXRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdCksdGhpcy5fc2V0QXJpYSh0LmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIikpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSkpfSxvcGVuOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuX3JlbmRlcmVkPyh0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLm1lbnUuZmluZChcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpKSk6dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLm1lbnVJdGVtcy5sZW5ndGgmJih0aGlzLmlzT3Blbj0hMCx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5fcmVzaXplTWVudSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx0aGlzLl9kb2N1bWVudENsaWNrKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiLHQpKSl9LF9wb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucG9zaXRpb24odC5leHRlbmQoe29mOnRoaXMuYnV0dG9ufSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKX0sY2xvc2U6ZnVuY3Rpb24odCl7dGhpcy5pc09wZW4mJih0aGlzLmlzT3Blbj0hMSx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5yYW5nZT1udWxsLHRoaXMuX29mZih0aGlzLmRvY3VtZW50KSx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIix0KSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sbWVudVdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LF9yZW5kZXJCdXR0b25JdGVtOmZ1bmN0aW9uKGUpe3ZhciBpPXQoXCI8c3Bhbj5cIik7cmV0dXJuIHRoaXMuX3NldFRleHQoaSxlLmxhYmVsKSx0aGlzLl9hZGRDbGFzcyhpLFwidWktc2VsZWN0bWVudS10ZXh0XCIpLGl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGUsaSl7dmFyIG49dGhpcyxzPVwiXCI7dC5lYWNoKGksZnVuY3Rpb24oaSxvKXt2YXIgYTtvLm9wdGdyb3VwIT09cyYmKGE9dChcIjxsaT5cIix7dGV4dDpvLm9wdGdyb3VwfSksbi5fYWRkQ2xhc3MoYSxcInVpLXNlbGVjdG1lbnUtb3B0Z3JvdXBcIixcInVpLW1lbnUtZGl2aWRlclwiKyhvLmVsZW1lbnQucGFyZW50KFwib3B0Z3JvdXBcIikucHJvcChcImRpc2FibGVkXCIpP1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikpLGEuYXBwZW5kVG8oZSkscz1vLm9wdGdyb3VwKSxuLl9yZW5kZXJJdGVtRGF0YShlLG8pfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKHQsZSkuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiLGUpfSxfcmVuZGVySXRlbTpmdW5jdGlvbihlLGkpe3ZhciBuPXQoXCI8bGk+XCIpLHM9dChcIjxkaXY+XCIse3RpdGxlOmkuZWxlbWVudC5hdHRyKFwidGl0bGVcIil9KTtyZXR1cm4gaS5kaXNhYmxlZCYmdGhpcy5fYWRkQ2xhc3MobixudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiksdGhpcy5fc2V0VGV4dChzLGkubGFiZWwpLG4uYXBwZW5kKHMpLmFwcGVuZFRvKGUpfSxfc2V0VGV4dDpmdW5jdGlvbih0LGUpe2U/dC50ZXh0KGUpOnQuaHRtbChcIiYjMTYwO1wiKX0sX21vdmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHM9XCIudWktbWVudS1pdGVtXCI7dGhpcy5pc09wZW4/aT10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmZvY3VzSW5kZXgpLnBhcmVudChcImxpXCIpOihpPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KS5wYXJlbnQoXCJsaVwiKSxzKz1cIjpub3QoLnVpLXN0YXRlLWRpc2FibGVkKVwiKSwobj1cImZpcnN0XCI9PT10fHxcImxhc3RcIj09PXQ/aVtcImZpcnN0XCI9PT10P1wicHJldkFsbFwiOlwibmV4dEFsbFwiXShzKS5lcSgtMSk6aVt0K1wiQWxsXCJdKHMpLmVxKDApKS5sZW5ndGgmJnRoaXMubWVudUluc3RhbmNlLmZvY3VzKGUsbil9LF9nZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLnBhcmVudChcImxpXCIpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3RoaXNbdGhpcy5pc09wZW4/XCJjbG9zZVwiOlwib3BlblwiXSh0KX0sX3NldFNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciB0O3RoaXMucmFuZ2UmJih3aW5kb3cuZ2V0U2VsZWN0aW9uPygodD13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpLnJlbW92ZUFsbFJhbmdlcygpLHQuYWRkUmFuZ2UodGhpcy5yYW5nZSkpOnRoaXMucmFuZ2Uuc2VsZWN0KCksdGhpcy5idXR0b24uZm9jdXMoKSl9LF9kb2N1bWVudENsaWNrOnttb3VzZWRvd246ZnVuY3Rpb24oZSl7dGhpcy5pc09wZW4mJih0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLXNlbGVjdG1lbnUtbWVudSwgI1wiK3QudWkuZXNjYXBlU2VsZWN0b3IodGhpcy5pZHMuYnV0dG9uKSkubGVuZ3RofHx0aGlzLmNsb3NlKGUpKX19LF9idXR0b25FdmVudHM6e21vdXNlZG93bjpmdW5jdGlvbigpe3ZhciB0O3dpbmRvdy5nZXRTZWxlY3Rpb24/KHQ9d2luZG93LmdldFNlbGVjdGlvbigpKS5yYW5nZUNvdW50JiYodGhpcy5yYW5nZT10LmdldFJhbmdlQXQoMCkpOnRoaXMucmFuZ2U9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCl9LGNsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX3NldFNlbGVjdGlvbigpLHRoaXMuX3RvZ2dsZSh0KX0sa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT0hMDtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5UQUI6Y2FzZSB0LnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY2xvc2UoZSksaT0hMTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTlRFUjp0aGlzLmlzT3BlbiYmdGhpcy5fc2VsZWN0Rm9jdXNlZEl0ZW0oZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6ZS5hbHRLZXk/dGhpcy5fdG9nZ2xlKGUpOnRoaXMuX21vdmUoXCJwcmV2XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjplLmFsdEtleT90aGlzLl90b2dnbGUoZSk6dGhpcy5fbW92ZShcIm5leHRcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5TUEFDRTp0aGlzLmlzT3Blbj90aGlzLl9zZWxlY3RGb2N1c2VkSXRlbShlKTp0aGlzLl90b2dnbGUoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDp0aGlzLl9tb3ZlKFwicHJldlwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlJJR0hUOnRoaXMuX21vdmUoXCJuZXh0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMuX21vdmUoXCJmaXJzdFwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVORDpjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046dGhpcy5fbW92ZShcImxhc3RcIixlKTticmVhaztkZWZhdWx0OnRoaXMubWVudS50cmlnZ2VyKGUpLGk9ITF9aSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sX3NlbGVjdEZvY3VzZWRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCkucGFyZW50KFwibGlcIik7ZS5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpfHx0aGlzLl9zZWxlY3QoZS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpLHQpfSxfc2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXg7dGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXg9dC5pbmRleCx0aGlzLmJ1dHRvbkl0ZW0ucmVwbGFjZVdpdGgodGhpcy5idXR0b25JdGVtPXRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0odCkpLHRoaXMuX3NldEFyaWEodCksdGhpcy5fdHJpZ2dlcihcInNlbGVjdFwiLGUse2l0ZW06dH0pLHQuaW5kZXghPT1pJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx7aXRlbTp0fSksdGhpcy5jbG9zZShlKX0sX3NldEFyaWE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tZW51SXRlbXMuZXEodC5pbmRleCkuYXR0cihcImlkXCIpO3RoaXMuYnV0dG9uLmF0dHIoe1wiYXJpYS1sYWJlbGxlZGJ5XCI6ZSxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOmV9KSx0aGlzLm1lbnUuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJpY29uc1wiPT09dCl7dmFyIGk9dGhpcy5idXR0b24uZmluZChcInNwYW4udWktaWNvblwiKTt0aGlzLl9yZW1vdmVDbGFzcyhpLG51bGwsdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbikuX2FkZENsYXNzKGksbnVsbCxlLmJ1dHRvbil9dGhpcy5fc3VwZXIodCxlKSxcImFwcGVuZFRvXCI9PT10JiZ0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwid2lkdGhcIj09PXQmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5tZW51SW5zdGFuY2Uub3B0aW9uKFwiZGlzYWJsZWRcIix0KSx0aGlzLmJ1dHRvbi5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLHQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMuYnV0dG9uLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLHQpLHRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIix0KSx0Pyh0aGlzLmJ1dHRvbi5hdHRyKFwidGFiaW5kZXhcIiwtMSksdGhpcy5jbG9zZSgpKTp0aGlzLmJ1dHRvbi5hdHRyKFwidGFiaW5kZXhcIiwwKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZT1lLmpxdWVyeXx8ZS5ub2RlVHlwZT90KGUpOnRoaXMuZG9jdW1lbnQuZmluZChlKS5lcSgwKSksZSYmZVswXXx8KGU9dGhpcy5lbGVtZW50LmNsb3Nlc3QoXCIudWktZnJvbnQsIGRpYWxvZ1wiKSksZS5sZW5ndGh8fChlPXRoaXMuZG9jdW1lbnRbMF0uYm9keSksZX0sX3RvZ2dsZUF0dHI6ZnVuY3Rpb24oKXt0aGlzLmJ1dHRvbi5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLHRoaXMuaXNPcGVuKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmJ1dHRvbixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLVwiKyh0aGlzLmlzT3Blbj9cImNsb3NlZFwiOlwib3BlblwiKSkuX2FkZENsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24tXCIrKHRoaXMuaXNPcGVuP1wib3BlblwiOlwiY2xvc2VkXCIpKS5fdG9nZ2xlQ2xhc3ModGhpcy5tZW51V3JhcCxcInVpLXNlbGVjdG1lbnUtb3BlblwiLG51bGwsdGhpcy5pc09wZW4pLHRoaXMubWVudS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwhdGhpcy5pc09wZW4pfSxfcmVzaXplQnV0dG9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLndpZHRoOyExIT09dD8obnVsbD09PXQmJih0PXRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpLHRoaXMuZWxlbWVudC5oaWRlKCkpLHRoaXMuYnV0dG9uLm91dGVyV2lkdGgodCkpOnRoaXMuYnV0dG9uLmNzcyhcIndpZHRoXCIsXCJcIil9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51Lm91dGVyV2lkdGgoTWF0aC5tYXgodGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLHRoaXMubWVudS53aWR0aChcIlwiKS5vdXRlcldpZHRoKCkrMSkpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1cGVyKCk7cmV0dXJuIHQuZGlzYWJsZWQ9dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSx0fSxfcGFyc2VPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMsbj1bXTtlLmVhY2goZnVuY3Rpb24oZSxzKXtuLnB1c2goaS5fcGFyc2VPcHRpb24odChzKSxlKSl9KSx0aGlzLml0ZW1zPW59LF9wYXJzZU9wdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXQucGFyZW50KFwib3B0Z3JvdXBcIik7cmV0dXJue2VsZW1lbnQ6dCxpbmRleDplLHZhbHVlOnQudmFsKCksbGFiZWw6dC50ZXh0KCksb3B0Z3JvdXA6aS5hdHRyKFwibGFiZWxcIil8fFwiXCIsZGlzYWJsZWQ6aS5wcm9wKFwiZGlzYWJsZWRcIil8fHQucHJvcChcImRpc2FibGVkXCIpfX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl91bmJpbmRGb3JtUmVzZXRIYW5kbGVyKCksdGhpcy5tZW51V3JhcC5yZW1vdmUoKSx0aGlzLmJ1dHRvbi5yZW1vdmUoKSx0aGlzLmVsZW1lbnQuc2hvdygpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLHRoaXMubGFiZWxzLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5lbGVtZW50KX19XSksdC53aWRnZXQoXCJ1aS5zbGlkZXJcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzbGlkZVwiLG9wdGlvbnM6e2FuaW1hdGU6ITEsY2xhc3Nlczp7XCJ1aS1zbGlkZXJcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXNsaWRlci1oYW5kbGVcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXNsaWRlci1yYW5nZVwiOlwidWktY29ybmVyLWFsbCB1aS13aWRnZXQtaGVhZGVyXCJ9LGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjpcImhvcml6b250YWxcIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbCxjaGFuZ2U6bnVsbCxzbGlkZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxudW1QYWdlczo1LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9hZGRDbGFzcyhcInVpLXNsaWRlciB1aS1zbGlkZXItXCIrdGhpcy5vcmllbnRhdGlvbixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVSYW5nZSgpLHRoaXMuX2NyZWF0ZUhhbmRsZXMoKSx0aGlzLl9zZXR1cEV2ZW50cygpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfY3JlYXRlSGFuZGxlczpmdW5jdGlvbigpe3ZhciBlLGksbj10aGlzLm9wdGlvbnMscz10aGlzLmVsZW1lbnQuZmluZChcIi51aS1zbGlkZXItaGFuZGxlXCIpLG89W107Zm9yKGk9bi52YWx1ZXMmJm4udmFsdWVzLmxlbmd0aHx8MSxzLmxlbmd0aD5pJiYocy5zbGljZShpKS5yZW1vdmUoKSxzPXMuc2xpY2UoMCxpKSksZT1zLmxlbmd0aDtlPGk7ZSsrKW8ucHVzaChcIjxzcGFuIHRhYmluZGV4PScwJz48L3NwYW4+XCIpO3RoaXMuaGFuZGxlcz1zLmFkZCh0KG8uam9pbihcIlwiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5fYWRkQ2xhc3ModGhpcy5oYW5kbGVzLFwidWktc2xpZGVyLWhhbmRsZVwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oZSl7dCh0aGlzKS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiLGUpLmF0dHIoXCJ0YWJJbmRleFwiLDApfSl9LF9jcmVhdGVSYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLnJhbmdlPyghMD09PWUucmFuZ2UmJihlLnZhbHVlcz9lLnZhbHVlcy5sZW5ndGgmJjIhPT1lLnZhbHVlcy5sZW5ndGg/ZS52YWx1ZXM9W2UudmFsdWVzWzBdLGUudmFsdWVzWzBdXTp0LmlzQXJyYXkoZS52YWx1ZXMpJiYoZS52YWx1ZXM9ZS52YWx1ZXMuc2xpY2UoMCkpOmUudmFsdWVzPVt0aGlzLl92YWx1ZU1pbigpLHRoaXMuX3ZhbHVlTWluKCldKSx0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLmxlbmd0aD8odGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5yYW5nZSxcInVpLXNsaWRlci1yYW5nZS1taW4gdWktc2xpZGVyLXJhbmdlLW1heFwiKSx0aGlzLnJhbmdlLmNzcyh7bGVmdDpcIlwiLGJvdHRvbTpcIlwifSkpOih0aGlzLnJhbmdlPXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMucmFuZ2UsXCJ1aS1zbGlkZXItcmFuZ2VcIikpLFwibWluXCIhPT1lLnJhbmdlJiZcIm1heFwiIT09ZS5yYW5nZXx8dGhpcy5fYWRkQ2xhc3ModGhpcy5yYW5nZSxcInVpLXNsaWRlci1yYW5nZS1cIitlLnJhbmdlKSk6KHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5yYW5nZT1udWxsKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5fb2ZmKHRoaXMuaGFuZGxlcyksdGhpcy5fb24odGhpcy5oYW5kbGVzLHRoaXMuX2hhbmRsZUV2ZW50cyksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGFuZGxlcyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGFuZGxlcyl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG8sYSxyLGwsaD10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiFjLmRpc2FibGVkJiYodGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9LHRoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksaT17eDplLnBhZ2VYLHk6ZS5wYWdlWX0sbj10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoaSkscz10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkrMSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmFicyhuLWgudmFsdWVzKGUpKTsocz5pfHxzPT09aSYmKGU9PT1oLl9sYXN0Q2hhbmdlZFZhbHVlfHxoLnZhbHVlcyhlKT09PWMubWluKSkmJihzPWksbz10KHRoaXMpLGE9ZSl9KSwhMSE9PXRoaXMuX3N0YXJ0KGUsYSkmJih0aGlzLl9tb3VzZVNsaWRpbmc9ITAsdGhpcy5faGFuZGxlSW5kZXg9YSx0aGlzLl9hZGRDbGFzcyhvLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksby50cmlnZ2VyKFwiZm9jdXNcIikscj1vLm9mZnNldCgpLGw9IXQoZS50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoXCIudWktc2xpZGVyLWhhbmRsZVwiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OmUucGFnZVgtci5sZWZ0LW8ud2lkdGgoKS8yLHRvcDplLnBhZ2VZLXIudG9wLW8uaGVpZ2h0KCkvMi0ocGFyc2VJbnQoby5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChvLmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KG8uY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpfHx0aGlzLl9zbGlkZShlLGEsbiksdGhpcy5fYW5pbWF0ZU9mZj0hMCwhMCkpfSxfbW91c2VTdGFydDpmdW5jdGlvbigpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBlPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxpPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShlKTtyZXR1cm4gdGhpcy5fc2xpZGUodCx0aGlzLl9oYW5kbGVJbmRleCxpKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5oYW5kbGVzLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AodCx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKHQsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj9cInZlcnRpY2FsXCI6XCJob3Jpem9udGFsXCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbztyZXR1cm5cImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24/KGU9dGhpcy5lbGVtZW50U2l6ZS53aWR0aCxcbmk9dC54LXRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC5sZWZ0OjApKTooZT10aGlzLmVsZW1lbnRTaXplLmhlaWdodCxpPXQueS10aGlzLmVsZW1lbnRPZmZzZXQudG9wLSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC50b3A6MCkpLChuPWkvZSk+MSYmKG49MSksbjwwJiYobj0wKSxcInZlcnRpY2FsXCI9PT10aGlzLm9yaWVudGF0aW9uJiYobj0xLW4pLHM9dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLG89dGhpcy5fdmFsdWVNaW4oKStuKnMsdGhpcy5fdHJpbUFsaWduVmFsdWUobyl9LF91aUhhc2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLGhhbmRsZUluZGV4OnQsdmFsdWU6dm9pZCAwIT09ZT9lOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkmJihuLnZhbHVlPXZvaWQgMCE9PWU/ZTp0aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz1pfHx0aGlzLnZhbHVlcygpKSxufSxfaGFzTXVsdGlwbGVWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGh9LF9zdGFydDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmlnZ2VyKFwic3RhcnRcIix0LHRoaXMuX3VpSGFzaChlKSl9LF9zbGlkZTpmdW5jdGlvbih0LGUsaSl7dmFyIG4scz10aGlzLnZhbHVlKCksbz10aGlzLnZhbHVlcygpO3RoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkmJihuPXRoaXMudmFsdWVzKGU/MDoxKSxzPXRoaXMudmFsdWVzKGUpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmITA9PT10aGlzLm9wdGlvbnMucmFuZ2UmJihpPTA9PT1lP01hdGgubWluKG4saSk6TWF0aC5tYXgobixpKSksb1tlXT1pKSxpIT09cyYmITEhPT10aGlzLl90cmlnZ2VyKFwic2xpZGVcIix0LHRoaXMuX3VpSGFzaChlLGksbykpJiYodGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLnZhbHVlcyhlLGkpOnRoaXMudmFsdWUoaSkpfSxfc3RvcDpmdW5jdGlvbih0LGUpe3RoaXMuX3RyaWdnZXIoXCJzdG9wXCIsdCx0aGlzLl91aUhhc2goZSkpfSxfY2hhbmdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5fa2V5U2xpZGluZ3x8dGhpcy5fbW91c2VTbGlkaW5nfHwodGhpcy5fbGFzdENoYW5nZWRWYWx1ZT1lLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHRoaXMuX3VpSGFzaChlKSkpfSx2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHZvaWQgdGhpcy5fY2hhbmdlKG51bGwsMCkpOnRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbihlLGkpe3ZhciBuLHMsbztpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXNbZV09dGhpcy5fdHJpbUFsaWduVmFsdWUoaSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdm9pZCB0aGlzLl9jaGFuZ2UobnVsbCxlKTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdmFsdWVzKCk7aWYoIXQuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpP3RoaXMuX3ZhbHVlcyhlKTp0aGlzLnZhbHVlKCk7Zm9yKG49dGhpcy5vcHRpb25zLnZhbHVlcyxzPWFyZ3VtZW50c1swXSxvPTA7bzxuLmxlbmd0aDtvKz0xKW5bb109dGhpcy5fdHJpbUFsaWduVmFsdWUoc1tvXSksdGhpcy5fY2hhbmdlKG51bGwsbyk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXt2YXIgbixzPTA7c3dpdGNoKFwicmFuZ2VcIj09PWUmJiEwPT09dGhpcy5vcHRpb25zLnJhbmdlJiYoXCJtaW5cIj09PWk/KHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXMoMCksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKTpcIm1heFwiPT09aSYmKHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXModGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgtMSksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKSksdC5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYocz10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksdGhpcy5fc3VwZXIoZSxpKSxlKXtjYXNlXCJvcmllbnRhdGlvblwiOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWxcIikuX2FkZENsYXNzKFwidWktc2xpZGVyLVwiK3RoaXMub3JpZW50YXRpb24pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMub3B0aW9ucy5yYW5nZSYmdGhpcy5fcmVmcmVzaFJhbmdlKGkpLHRoaXMuaGFuZGxlcy5jc3MoXCJob3Jpem9udGFsXCI9PT1pP1wiYm90dG9tXCI6XCJsZWZ0XCIsXCJcIik7YnJlYWs7Y2FzZVwidmFsdWVcIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZVwidmFsdWVzXCI6Zm9yKHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksbj1zLTE7bj49MDtuLS0pdGhpcy5fY2hhbmdlKG51bGwsbik7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJzdGVwXCI6Y2FzZVwibWluXCI6Y2FzZVwibWF4XCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2VcInJhbmdlXCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX19LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHRoaXMuX3RyaW1BbGlnblZhbHVlKHQpfSxfdmFsdWVzOmZ1bmN0aW9uKHQpe3ZhciBlLGksbjtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPXRoaXMub3B0aW9ucy52YWx1ZXNbdF0sdGhpcy5fdHJpbUFsaWduVmFsdWUoZSk7aWYodGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKSl7Zm9yKGk9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpLG49MDtuPGkubGVuZ3RoO24rPTEpaVtuXT10aGlzLl90cmltQWxpZ25WYWx1ZShpW25dKTtyZXR1cm4gaX1yZXR1cm5bXX0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKHQpe2lmKHQ8PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYodD49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgZT10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsaT0odC10aGlzLl92YWx1ZU1pbigpKSVlLG49dC1pO3JldHVybiAyKk1hdGguYWJzKGkpPj1lJiYobis9aT4wP2U6LWUpLHBhcnNlRmxvYXQobi50b0ZpeGVkKDUpKX0sX2NhbGN1bGF0ZU5ld01heDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5tYXgsZT10aGlzLl92YWx1ZU1pbigpLGk9dGhpcy5vcHRpb25zLnN0ZXA7KHQ9TWF0aC5yb3VuZCgodC1lKS9pKSppK2UpPnRoaXMub3B0aW9ucy5tYXgmJih0LT1pKSx0aGlzLm1heD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKHQ9TWF0aC5tYXgodCx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLHR9LF9wcmVjaXNpb25PZjpmdW5jdGlvbih0KXt2YXIgZT10LnRvU3RyaW5nKCksaT1lLmluZGV4T2YoXCIuXCIpO3JldHVybi0xPT09aT8wOmUubGVuZ3RoLWktMX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1heH0sX3JlZnJlc2hSYW5nZTpmdW5jdGlvbih0KXtcInZlcnRpY2FsXCI9PT10JiZ0aGlzLnJhbmdlLmNzcyh7d2lkdGg6XCJcIixsZWZ0OlwiXCJ9KSxcImhvcml6b250YWxcIj09PXQmJnRoaXMucmFuZ2UuY3NzKHtoZWlnaHQ6XCJcIixib3R0b206XCJcIn0pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHMsbyxhPXRoaXMub3B0aW9ucy5yYW5nZSxyPXRoaXMub3B0aW9ucyxsPXRoaXMsaD0hdGhpcy5fYW5pbWF0ZU9mZiYmci5hbmltYXRlLGM9e307dGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihuKXtpPShsLnZhbHVlcyhuKS1sLl92YWx1ZU1pbigpKS8obC5fdmFsdWVNYXgoKS1sLl92YWx1ZU1pbigpKSoxMDAsY1tcImhvcml6b250YWxcIj09PWwub3JpZW50YXRpb24/XCJsZWZ0XCI6XCJib3R0b21cIl09aStcIiVcIix0KHRoaXMpLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKGMsci5hbmltYXRlKSwhMD09PWwub3B0aW9ucy5yYW5nZSYmKFwiaG9yaXpvbnRhbFwiPT09bC5vcmllbnRhdGlvbj8oMD09PW4mJmwucmFuZ2Uuc3RvcCgxLDEpW2g/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2xlZnQ6aStcIiVcIn0sci5hbmltYXRlKSwxPT09biYmbC5yYW5nZVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDppLWUrXCIlXCJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSk6KDA9PT1uJiZsLnJhbmdlLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtib3R0b206aStcIiVcIn0sci5hbmltYXRlKSwxPT09biYmbC5yYW5nZVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6aS1lK1wiJVwifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpKSxlPWl9KToobj10aGlzLnZhbHVlKCkscz10aGlzLl92YWx1ZU1pbigpLG89dGhpcy5fdmFsdWVNYXgoKSxpPW8hPT1zPyhuLXMpLyhvLXMpKjEwMDowLGNbXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uP1wibGVmdFwiOlwiYm90dG9tXCJdPWkrXCIlXCIsdGhpcy5oYW5kbGUuc3RvcCgxLDEpW2g/XCJhbmltYXRlXCI6XCJjc3NcIl0oYyxyLmFuaW1hdGUpLFwibWluXCI9PT1hJiZcImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2g/XCJhbmltYXRlXCI6XCJjc3NcIl0oe3dpZHRoOmkrXCIlXCJ9LHIuYW5pbWF0ZSksXCJtYXhcIj09PWEmJlwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbaD9cImFuaW1hdGVcIjpcImNzc1wiXSh7d2lkdGg6MTAwLWkrXCIlXCJ9LHIuYW5pbWF0ZSksXCJtaW5cIj09PWEmJlwidmVydGljYWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2g/XCJhbmltYXRlXCI6XCJjc3NcIl0oe2hlaWdodDppK1wiJVwifSxyLmFuaW1hdGUpLFwibWF4XCI9PT1hJiZcInZlcnRpY2FsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6MTAwLWkrXCIlXCJ9LHIuYW5pbWF0ZSkpfSxfaGFuZGxlRXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvPXQoZS50YXJnZXQpLmRhdGEoXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIpO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6Y2FzZSB0LnVpLmtleUNvZGUuRU5EOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOmNhc2UgdC51aS5rZXlDb2RlLlVQOmNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOmNhc2UgdC51aS5rZXlDb2RlLkRPV046Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDppZihlLnByZXZlbnREZWZhdWx0KCksIXRoaXMuX2tleVNsaWRpbmcmJih0aGlzLl9rZXlTbGlkaW5nPSEwLHRoaXMuX2FkZENsYXNzKHQoZS50YXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksITE9PT10aGlzLl9zdGFydChlLG8pKSlyZXR1cm59c3dpdGNoKHM9dGhpcy5vcHRpb25zLnN0ZXAsaT1uPXRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy52YWx1ZXMobyk6dGhpcy52YWx1ZSgpLGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpuPXRoaXMuX3ZhbHVlTWluKCk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOm49dGhpcy5fdmFsdWVNYXgoKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOm49dGhpcy5fdHJpbUFsaWduVmFsdWUoaSsodGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046bj10aGlzLl90cmltQWxpZ25WYWx1ZShpLSh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL3RoaXMubnVtUGFnZXMpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlVQOmNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOmlmKGk9PT10aGlzLl92YWx1ZU1heCgpKXJldHVybjtuPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrcyk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpjYXNlIHQudWkua2V5Q29kZS5MRUZUOmlmKGk9PT10aGlzLl92YWx1ZU1pbigpKXJldHVybjtuPXRoaXMuX3RyaW1BbGlnblZhbHVlKGktcyl9dGhpcy5fc2xpZGUoZSxvLG4pfSxrZXl1cDpmdW5jdGlvbihlKXt2YXIgaT10KGUudGFyZ2V0KS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiKTt0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9zdG9wKGUsaSksdGhpcy5fY2hhbmdlKGUsaSksdGhpcy5fcmVtb3ZlQ2xhc3ModChlLnRhcmdldCksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSl9fX0pLHQud2lkZ2V0KFwidWkuc29ydGFibGVcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzb3J0XCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86XCJwYXJlbnRcIixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjpcImF1dG9cIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOlwib3JpZ2luYWxcIixpdGVtczpcIj4gKlwiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZTpcImRlZmF1bHRcIix0b2xlcmFuY2U6XCJpbnRlcnNlY3RcIix6SW5kZXg6MWUzLGFjdGl2YXRlOm51bGwsYmVmb3JlU3RvcDpudWxsLGNoYW5nZTpudWxsLGRlYWN0aXZhdGU6bnVsbCxvdXQ6bnVsbCxvdmVyOm51bGwscmVjZWl2ZTpudWxsLHJlbW92ZTpudWxsLHNvcnQ6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbCx1cGRhdGU6bnVsbH0sX2lzT3ZlckF4aXM6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0Pj1lJiZ0PGUraX0sX2lzRmxvYXRpbmc6ZnVuY3Rpb24odCl7cmV0dXJuL2xlZnR8cmlnaHQvLnRlc3QodC5jc3MoXCJmbG9hdFwiKSl8fC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdCh0LmNzcyhcImRpc3BsYXlcIikpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXJDYWNoZT17fSx0aGlzLl9hZGRDbGFzcyhcInVpLXNvcnRhYmxlXCIpLHRoaXMucmVmcmVzaCgpLHRoaXMub2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLnJlYWR5PSEwfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5fc3VwZXIodCxlKSxcImhhbmRsZVwiPT09dCYmdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCl9LF9zZXRIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLXNvcnRhYmxlLWhhbmRsZVwiKSxcInVpLXNvcnRhYmxlLWhhbmRsZVwiKSx0LmVhY2godGhpcy5pdGVtcyxmdW5jdGlvbigpe2UuX2FkZENsYXNzKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGU/dGhpcy5pdGVtLmZpbmQodGhpcy5pbnN0YW5jZS5vcHRpb25zLmhhbmRsZSk6dGhpcy5pdGVtLFwidWktc29ydGFibGUtaGFuZGxlXCIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7Zm9yKHZhciB0PXRoaXMuaXRlbXMubGVuZ3RoLTE7dD49MDt0LS0pdGhpcy5pdGVtc1t0XS5pdGVtLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lK1wiLWl0ZW1cIik7cmV0dXJuIHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSxpKXt2YXIgbj1udWxsLHM9ITEsbz10aGlzO3JldHVybiEodGhpcy5yZXZlcnRpbmd8fHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8XCJzdGF0aWNcIj09PXRoaXMub3B0aW9ucy50eXBlfHwodGhpcy5fcmVmcmVzaEl0ZW1zKGUpLHQoZS50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7aWYodC5kYXRhKHRoaXMsby53aWRnZXROYW1lK1wiLWl0ZW1cIik9PT1vKXJldHVybiBuPXQodGhpcyksITF9KSx0LmRhdGEoZS50YXJnZXQsby53aWRnZXROYW1lK1wiLWl0ZW1cIik9PT1vJiYobj10KGUudGFyZ2V0KSksIW58fHRoaXMub3B0aW9ucy5oYW5kbGUmJiFpJiYodCh0aGlzLm9wdGlvbnMuaGFuZGxlLG4pLmZpbmQoXCIqXCIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PWUudGFyZ2V0JiYocz0hMCl9KSwhcyl8fCh0aGlzLmN1cnJlbnRJdGVtPW4sdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwwKSkpfSxfbW91c2VTdGFydDpmdW5jdGlvbihlLGksbil7dmFyIHMsbyxhPXRoaXMub3B0aW9ucztpZih0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcyx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoZSksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLHRoaXMub2Zmc2V0PXRoaXMuY3VycmVudEl0ZW0ub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LHQuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDplLnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOmUucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIpLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLHRoaXMub3JpZ2luYWxQYWdlWD1lLnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT1lLnBhZ2VZLGEuY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoYS5jdXJzb3JBdCksdGhpcy5kb21Qb3NpdGlvbj17cHJldjp0aGlzLmN1cnJlbnRJdGVtLnByZXYoKVswXSxwYXJlbnQ6dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXX0sdGhpcy5oZWxwZXJbMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmN1cnJlbnRJdGVtLmhpZGUoKSx0aGlzLl9jcmVhdGVQbGFjZWhvbGRlcigpLGEuY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksYS5jdXJzb3ImJlwiYXV0b1wiIT09YS5jdXJzb3ImJihvPXRoaXMuZG9jdW1lbnQuZmluZChcImJvZHlcIiksdGhpcy5zdG9yZWRDdXJzb3I9by5jc3MoXCJjdXJzb3JcIiksby5jc3MoXCJjdXJzb3JcIixhLmN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0PXQoXCI8c3R5bGU+KnsgY3Vyc29yOiBcIithLmN1cnNvcitcIiAhaW1wb3J0YW50OyB9PC9zdHlsZT5cIikuYXBwZW5kVG8obykpLGEub3BhY2l0eSYmKHRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIikmJih0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIikpLHRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIixhLm9wYWNpdHkpKSxhLnpJbmRleCYmKHRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiKSYmKHRoaXMuX3N0b3JlZFpJbmRleD10aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIikpLHRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiLGEuekluZGV4KSksdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUmJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKFwic3RhcnRcIixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIW4pZm9yKHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXRoaXMuY29udGFpbmVyc1tzXS5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSx0aGlzLl91aUhhc2godGhpcykpO3JldHVybiB0LnVpLmRkbWFuYWdlciYmKHQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdC51aS5kZG1hbmFnZXImJiFhLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsZSksdGhpcy5kcmFnZ2luZz0hMCx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcixcInVpLXNvcnRhYmxlLWhlbHBlclwiKSx0aGlzLl9tb3VzZURyYWcoZSksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG8sYT10aGlzLm9wdGlvbnMscj0hMTtmb3IodGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oXCJhYnNvbHV0ZVwiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpLHRoaXMub3B0aW9ucy5zY3JvbGwmJih0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJlwiSFRNTFwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZT8odGhpcy5vdmVyZmxvd09mZnNldC50b3ArdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LWUucGFnZVk8YS5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3ArYS5zY3JvbGxTcGVlZDplLnBhZ2VZLXRoaXMub3ZlcmZsb3dPZmZzZXQudG9wPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AtYS5zY3JvbGxTcGVlZCksdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0K3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLWUucGFnZVg8YS5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCthLnNjcm9sbFNwZWVkOmUucGFnZVgtdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0PGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1hLnNjcm9sbFNwZWVkKSk6KGUucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKTxhLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKS1hLnNjcm9sbFNwZWVkKTp0aGlzLndpbmRvdy5oZWlnaHQoKS0oZS5wYWdlWS10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpKTxhLnNjcm9sbFNlbnNpdGl2aXR5JiYocj10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCh0aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpK2Euc2Nyb2xsU3BlZWQpKSxlLnBhZ2VYLXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/cj10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQodGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCktYS5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cud2lkdGgoKS0oZS5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSk8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpK2Euc2Nyb2xsU3BlZWQpKSksITEhPT1yJiZ0LnVpLmRkbWFuYWdlciYmIWEuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLHRoaXMub3B0aW9ucy5heGlzJiZcInlcIj09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrXCJweFwiKSx0aGlzLm9wdGlvbnMuYXhpcyYmXCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8KHRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihzPShuPXRoaXMuaXRlbXNbaV0pLml0ZW1bMF0sKG89dGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKG4pKSYmbi5pbnN0YW5jZT09PXRoaXMuY3VycmVudENvbnRhaW5lciYmIShzPT09dGhpcy5jdXJyZW50SXRlbVswXXx8dGhpcy5wbGFjZWhvbGRlclsxPT09bz9cIm5leHRcIjpcInByZXZcIl0oKVswXT09PXN8fHQuY29udGFpbnModGhpcy5wbGFjZWhvbGRlclswXSxzKXx8XCJzZW1pLWR5bmFtaWNcIj09PXRoaXMub3B0aW9ucy50eXBlJiZ0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxzKSkpe2lmKHRoaXMuZGlyZWN0aW9uPTE9PT1vP1wiZG93blwiOlwidXBcIixcInBvaW50ZXJcIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKG4pKWJyZWFrO3RoaXMuX3JlYXJyYW5nZShlLG4pLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHRoaXMuX3VpSGFzaCgpKTticmVha31yZXR1cm4gdGhpcy5fY29udGFjdENvbnRhaW5lcnMoZSksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxlKSx0aGlzLl90cmlnZ2VyKFwic29ydFwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMsITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSxpKXtpZihlKXtpZih0LnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsZSksdGhpcy5vcHRpb25zLnJldmVydCl7dmFyIG49dGhpcyxzPXRoaXMucGxhY2Vob2xkZXIub2Zmc2V0KCksbz10aGlzLm9wdGlvbnMuYXhpcyxhPXt9O28mJlwieFwiIT09b3x8KGEubGVmdD1zLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLG8mJlwieVwiIT09b3x8KGEudG9wPXMudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApKSx0aGlzLnJldmVydGluZz0hMCx0KHRoaXMuaGVscGVyKS5hbmltYXRlKGEscGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydCwxMCl8fDUwMCxmdW5jdGlvbigpe24uX2NsZWFyKGUpfSl9ZWxzZSB0aGlzLl9jbGVhcihlLGkpO3JldHVybiExfX0sY2FuY2VsOmZ1bmN0aW9uKCl7aWYodGhpcy5kcmFnZ2luZyl7dGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIix7dGFyZ2V0Om51bGx9KSksXCJvcmlnaW5hbFwiPT09dGhpcy5vcHRpb25zLmhlbHBlcj8odGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmN1cnJlbnRJdGVtLFwidWktc29ydGFibGUtaGVscGVyXCIpKTp0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodmFyIGU9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcihcImRlYWN0aXZhdGVcIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoXCJvdXRcIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSxcIm9yaWdpbmFsXCIhPT10aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLmhlbHBlciYmdGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdC5leHRlbmQodGhpcyx7aGVscGVyOm51bGwsZHJhZ2dpbmc6ITEscmV2ZXJ0aW5nOiExLF9ub0ZpbmFsU29ydDpudWxsfSksdGhpcy5kb21Qb3NpdGlvbi5wcmV2P3QodGhpcy5kb21Qb3NpdGlvbi5wcmV2KS5hZnRlcih0aGlzLmN1cnJlbnRJdGVtKTp0KHRoaXMuZG9tUG9zaXRpb24ucGFyZW50KS5wcmVwZW5kKHRoaXMuY3VycmVudEl0ZW0pKSx0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeShlJiZlLmNvbm5lY3RlZCksbj1bXTtyZXR1cm4gZT1lfHx7fSx0KGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT0odChlLml0ZW18fHRoaXMpLmF0dHIoZS5hdHRyaWJ1dGV8fFwiaWRcIil8fFwiXCIpLm1hdGNoKGUuZXhwcmVzc2lvbnx8LyguKylbXFwtPV9dKC4rKS8pO2kmJm4ucHVzaCgoZS5rZXl8fGlbMV0rXCJbXVwiKStcIj1cIisoZS5rZXkmJmUuZXhwcmVzc2lvbj9pWzFdOmlbMl0pKX0pLCFuLmxlbmd0aCYmZS5rZXkmJm4ucHVzaChlLmtleStcIj1cIiksbi5qb2luKFwiJlwiKX0sdG9BcnJheTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KGUmJmUuY29ubmVjdGVkKSxuPVtdO3JldHVybiBlPWV8fHt9LGkuZWFjaChmdW5jdGlvbigpe24ucHVzaCh0KGUuaXRlbXx8dGhpcykuYXR0cihlLmF0dHJpYnV0ZXx8XCJpZFwiKXx8XCJcIil9KSxufSxfaW50ZXJzZWN0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LGk9ZSt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLG49dGhpcy5wb3NpdGlvbkFicy50b3Ascz1uK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LG89dC5sZWZ0LGE9byt0LndpZHRoLHI9dC50b3AsbD1yK3QuaGVpZ2h0LGg9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGM9dGhpcy5vZmZzZXQuY2xpY2subGVmdCx1PVwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fG4raD5yJiZuK2g8bCxkPVwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fGUrYz5vJiZlK2M8YSxwPXUmJmQ7cmV0dXJuXCJwb2ludGVyXCI9PT10aGlzLm9wdGlvbnMudG9sZXJhbmNlfHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8XCJwb2ludGVyXCIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJdPnRbdGhpcy5mbG9hdGluZz9cIndpZHRoXCI6XCJoZWlnaHRcIl0/cDpvPGUrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjxhJiZyPG4rdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmcy10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGx9LF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPVwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLHQudG9wLHQuaGVpZ2h0KSxzPVwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0LHQud2lkdGgpO3JldHVybiEoIW58fCFzKSYmKGU9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksaT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpLHRoaXMuZmxvYXRpbmc/XCJyaWdodFwiPT09aXx8XCJkb3duXCI9PT1lPzI6MTplJiYoXCJkb3duXCI9PT1lPzI6MSkpfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxpPXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0K3Qud2lkdGgvMix0LndpZHRoKSxuPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLHM9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mbG9hdGluZyYmcz9cInJpZ2h0XCI9PT1zJiZpfHxcImxlZnRcIj09PXMmJiFpOm4mJihcImRvd25cIj09PW4mJmV8fFwidXBcIj09PW4mJiFlKX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PXQmJih0PjA/XCJkb3duXCI6XCJ1cFwiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIDAhPT10JiYodD4wP1wicmlnaHRcIjpcImxlZnRcIil9LHJlZnJlc2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZnJlc2hJdGVtcyh0KSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzfSxfY29ubmVjdFdpdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHQuY29ubmVjdFdpdGguY29uc3RydWN0b3I9PT1TdHJpbmc/W3QuY29ubmVjdFdpdGhdOnQuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtyLnB1c2godGhpcyl9dmFyIG4scyxvLGEscj1bXSxsPVtdLGg9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihoJiZlKWZvcihuPWgubGVuZ3RoLTE7bj49MDtuLS0pZm9yKHM9KG89dChoW25dLHRoaXMuZG9jdW1lbnRbMF0pKS5sZW5ndGgtMTtzPj0wO3MtLSkoYT10LmRhdGEob1tzXSx0aGlzLndpZGdldEZ1bGxOYW1lKSkmJmEhPT10aGlzJiYhYS5vcHRpb25zLmRpc2FibGVkJiZsLnB1c2goW3QuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudCk6dChhLm9wdGlvbnMuaXRlbXMsYS5lbGVtZW50KS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpLm5vdChcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiKSxhXSk7Zm9yKGwucHVzaChbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KFwiLnVpLXNvcnRhYmxlLWhlbHBlclwiKS5ub3QoXCIudWktc29ydGFibGUtcGxhY2Vob2xkZXJcIiksdGhpc10pLG49bC5sZW5ndGgtMTtuPj0wO24tLSlsW25dWzBdLmVhY2goaSk7cmV0dXJuIHQocil9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0uZmluZChcIjpkYXRhKFwiK3RoaXMud2lkZ2V0TmFtZStcIi1pdGVtKVwiKTt0aGlzLml0ZW1zPXQuZ3JlcCh0aGlzLml0ZW1zLGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV09PT10Lml0ZW1bMF0pcmV0dXJuITE7cmV0dXJuITB9KX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihlKXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGksbixzLG8sYSxyLGwsaCxjPXRoaXMuaXRlbXMsdT1bW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSxlLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxkPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoZCYmdGhpcy5yZWFkeSlmb3IoaT1kLmxlbmd0aC0xO2k+PTA7aS0tKWZvcihuPShzPXQoZFtpXSx0aGlzLmRvY3VtZW50WzBdKSkubGVuZ3RoLTE7bj49MDtuLS0pKG89dC5kYXRhKHNbbl0sdGhpcy53aWRnZXRGdWxsTmFtZSkpJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmKHUucHVzaChbdC5pc0Z1bmN0aW9uKG8ub3B0aW9ucy5pdGVtcyk/by5vcHRpb25zLml0ZW1zLmNhbGwoby5lbGVtZW50WzBdLGUse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCksb10pLHRoaXMuY29udGFpbmVycy5wdXNoKG8pKTtmb3IoaT11Lmxlbmd0aC0xO2k+PTA7aS0tKWZvcihhPXVbaV1bMV0sbj0wLGg9KHI9dVtpXVswXSkubGVuZ3RoO248aDtuKyspKGw9dChyW25dKSkuZGF0YSh0aGlzLndpZGdldE5hbWUrXCItaXRlbVwiLGEpLGMucHVzaCh7aXRlbTpsLGluc3RhbmNlOmEsd2lkdGg6MCxoZWlnaHQ6MCxsZWZ0OjAsdG9wOjB9KX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbztmb3IodGhpcy5mbG9hdGluZz0hIXRoaXMuaXRlbXMubGVuZ3RoJiYoXCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5faXNGbG9hdGluZyh0aGlzLml0ZW1zWzBdLml0ZW0pKSx0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSkobj10aGlzLml0ZW1zW2ldKS5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZuLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdfHwocz10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD90KHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LG4uaXRlbSk6bi5pdGVtLGV8fChuLndpZHRoPXMub3V0ZXJXaWR0aCgpLG4uaGVpZ2h0PXMub3V0ZXJIZWlnaHQoKSksbz1zLm9mZnNldCgpLG4ubGVmdD1vLmxlZnQsbi50b3A9by50b3ApO2lmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKHRoaXMpO2Vsc2UgZm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKW89dGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmxlZnQ9by5sZWZ0LHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS50b3A9by50b3AsdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLndpZHRoPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVyV2lkdGgoKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVySGVpZ2h0KCk7cmV0dXJuIHRoaXN9LF9jcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbihlKXt2YXIgaSxuPShlPWV8fHRoaXMpLm9wdGlvbnM7bi5wbGFjZWhvbGRlciYmbi5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciE9PVN0cmluZ3x8KGk9bi5wbGFjZWhvbGRlcixuLnBsYWNlaG9sZGVyPXtlbGVtZW50OmZ1bmN0aW9uKCl7dmFyIG49ZS5jdXJyZW50SXRlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHM9dChcIjxcIituK1wiPlwiLGUuZG9jdW1lbnRbMF0pO3JldHVybiBlLl9hZGRDbGFzcyhzLFwidWktc29ydGFibGUtcGxhY2Vob2xkZXJcIixpfHxlLmN1cnJlbnRJdGVtWzBdLmNsYXNzTmFtZSkuX3JlbW92ZUNsYXNzKHMsXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiksXCJ0Ym9keVwiPT09bj9lLl9jcmVhdGVUclBsYWNlaG9sZGVyKGUuY3VycmVudEl0ZW0uZmluZChcInRyXCIpLmVxKDApLHQoXCI8dHI+XCIsZS5kb2N1bWVudFswXSkuYXBwZW5kVG8ocykpOlwidHJcIj09PW4/ZS5fY3JlYXRlVHJQbGFjZWhvbGRlcihlLmN1cnJlbnRJdGVtLHMpOlwiaW1nXCI9PT1uJiZzLmF0dHIoXCJzcmNcIixlLmN1cnJlbnRJdGVtLmF0dHIoXCJzcmNcIikpLGl8fHMuY3NzKFwidmlzaWJpbGl0eVwiLFwiaGlkZGVuXCIpLHN9LHVwZGF0ZTpmdW5jdGlvbih0LHMpe2kmJiFuLmZvcmNlUGxhY2Vob2xkZXJTaXplfHwocy5oZWlnaHQoKXx8cy5oZWlnaHQoZS5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1RvcFwiKXx8MCwxMCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpfHwwLDEwKSkscy53aWR0aCgpfHxzLndpZHRoKGUuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ0xlZnRcIil8fDAsMTApLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1JpZ2h0XCIpfHwwLDEwKSkpfX0pLGUucGxhY2Vob2xkZXI9dChuLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbChlLmVsZW1lbnQsZS5jdXJyZW50SXRlbSkpLGUuY3VycmVudEl0ZW0uYWZ0ZXIoZS5wbGFjZWhvbGRlciksbi5wbGFjZWhvbGRlci51cGRhdGUoZSxlLnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSxpKXt2YXIgbj10aGlzO2UuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dChcIjx0ZD4mIzE2MDs8L3RkPlwiLG4uZG9jdW1lbnRbMF0pLmF0dHIoXCJjb2xzcGFuXCIsdCh0aGlzKS5hdHRyKFwiY29sc3BhblwiKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvLGEscixsLGgsYyx1LGQ9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCF0LmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGQmJnQuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sZC5lbGVtZW50WzBdKSljb250aW51ZTtkPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcihcIm91dFwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZihkKWlmKDE9PT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoKXRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyfHwodGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xKTtlbHNle2ZvcihzPTFlNCxvPW51bGwsYT0oYz1kLmZsb2F0aW5nfHx0aGlzLl9pc0Zsb2F0aW5nKHRoaXMuY3VycmVudEl0ZW0pKT9cImxlZnRcIjpcInRvcFwiLHI9Yz9cIndpZHRoXCI6XCJoZWlnaHRcIix1PWM/XCJwYWdlWFwiOlwicGFnZVlcIixuPXRoaXMuaXRlbXMubGVuZ3RoLTE7bj49MDtuLS0pdC5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW25dLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW25dLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYobD10aGlzLml0ZW1zW25dLml0ZW0ub2Zmc2V0KClbYV0saD0hMSxlW3VdLWw+dGhpcy5pdGVtc1tuXVtyXS8yJiYoaD0hMCksTWF0aC5hYnMoZVt1XS1sKTxzJiYocz1NYXRoLmFicyhlW3VdLWwpLG89dGhpcy5pdGVtc1tuXSx0aGlzLmRpcmVjdGlvbj1oP1widXBcIjpcImRvd25cIikpO2lmKCFvJiYhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5KXJldHVybjtpZih0aGlzLmN1cnJlbnRDb250YWluZXI9PT10aGlzLmNvbnRhaW5lcnNbcF0pcmV0dXJuIHZvaWQodGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJvdmVyXCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXI9MSkpO28/dGhpcy5fcmVhcnJhbmdlKGUsbyxudWxsLCEwKTp0aGlzLl9yZWFycmFuZ2UoZSxudWxsLHRoaXMuY29udGFpbmVyc1twXS5lbGVtZW50LCEwKSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcF0sdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xfX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMsbj10LmlzRnVuY3Rpb24oaS5oZWxwZXIpP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlLHRoaXMuY3VycmVudEl0ZW1dKSk6XCJjbG9uZVwiPT09aS5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpOnRoaXMuY3VycmVudEl0ZW07cmV0dXJuIG4ucGFyZW50cyhcImJvZHlcIikubGVuZ3RofHx0KFwicGFyZW50XCIhPT1pLmFwcGVuZFRvP2kuYXBwZW5kVG86dGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChuWzBdKSxuWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSYmKHRoaXMuX3N0b3JlZENTUz17d2lkdGg6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQscG9zaXRpb246dGhpcy5jdXJyZW50SXRlbS5jc3MoXCJwb3NpdGlvblwiKSx0b3A6dGhpcy5jdXJyZW50SXRlbS5jc3MoXCJ0b3BcIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcyhcImxlZnRcIil9KSxuWzBdLnN0eWxlLndpZHRoJiYhaS5mb3JjZUhlbHBlclNpemV8fG4ud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSxuWzBdLnN0eWxlLmhlaWdodCYmIWkuZm9yY2VIZWxwZXJTaXplfHxuLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSxufSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9ZS5zcGxpdChcIiBcIikpLHQuaXNBcnJheShlKSYmKGU9e2xlZnQ6K2VbMF0sdG9wOitlWzFdfHwwfSksXCJsZWZ0XCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD1lLmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLFwicmlnaHRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtZS5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksXCJ0b3BcImluIGUmJih0aGlzLm9mZnNldC5jbGljay50b3A9ZS50b3ArdGhpcy5tYXJnaW5zLnRvcCksXCJib3R0b21cImluIGUmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtZS5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgZT10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTtyZXR1cm5cImFic29sdXRlXCI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksZS50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJlwiaHRtbFwiPT09dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZ0LnVpLmllKSYmKGU9e3RvcDowLGxlZnQ6MH0pLHt0b3A6ZS50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCksbGVmdDplLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoXCJyZWxhdGl2ZVwiPT09dGhpcy5jc3NQb3NpdGlvbil7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5wb3NpdGlvbigpO3JldHVybnt0b3A6dC50b3AtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dC5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcyhcIm1hcmdpbkxlZnRcIiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcyhcIm1hcmdpblRvcFwiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBlLGksbixzPXRoaXMub3B0aW9ucztcInBhcmVudFwiPT09cy5jb250YWlubWVudCYmKHMuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksXCJkb2N1bWVudFwiIT09cy5jb250YWlubWVudCYmXCJ3aW5kb3dcIiE9PXMuY29udGFpbm1lbnR8fCh0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxcImRvY3VtZW50XCI9PT1zLmNvbnRhaW5tZW50P3RoaXMuZG9jdW1lbnQud2lkdGgoKTp0aGlzLndpbmRvdy53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKFwiZG9jdW1lbnRcIj09PXMuY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodDp0aGlzLndpbmRvdy5oZWlnaHQoKXx8dGhpcy5kb2N1bWVudFswXS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSksL14oZG9jdW1lbnR8d2luZG93fHBhcmVudCkkLy50ZXN0KHMuY29udGFpbm1lbnQpfHwoZT10KHMuY29udGFpbm1lbnQpWzBdLGk9dChzLmNvbnRhaW5tZW50KS5vZmZzZXQoKSxuPVwiaGlkZGVuXCIhPT10KGUpLmNzcyhcIm92ZXJmbG93XCIpLHRoaXMuY29udGFpbm1lbnQ9W2kubGVmdCsocGFyc2VJbnQodChlKS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQodChlKS5jc3MoXCJwYWRkaW5nTGVmdFwiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ1RvcFwiKSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3AsaS5sZWZ0KyhuP01hdGgubWF4KGUuc2Nyb2xsV2lkdGgsZS5vZmZzZXRXaWR0aCk6ZS5vZmZzZXRXaWR0aCktKHBhcnNlSW50KHQoZSkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ1JpZ2h0XCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxpLnRvcCsobj9NYXRoLm1heChlLnNjcm9sbEhlaWdodCxlLm9mZnNldEhlaWdodCk6ZS5vZmZzZXRIZWlnaHQpLShwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGUsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIG49XCJhYnNvbHV0ZVwiPT09ZT8xOi0xLHM9XCJhYnNvbHV0ZVwiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZ0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxvPS8oaHRtbHxib2R5KS9pLnRlc3Qoc1swXS50YWdOYW1lKTtyZXR1cm57dG9wOmkudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpuK3RoaXMub2Zmc2V0LnBhcmVudC50b3Aqbi0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bz8wOnMuc2Nyb2xsVG9wKCkpKm4sbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpuK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0Km4tKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpvPzA6cy5zY3JvbGxMZWZ0KCkpKm59fSxfZ2VuZXJhdGVQb3NpdGlvbjpmdW5jdGlvbihlKXt2YXIgaSxuLHM9dGhpcy5vcHRpb25zLG89ZS5wYWdlWCxhPWUucGFnZVkscj1cImFic29sdXRlXCIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGw9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpO3JldHVyblwicmVsYXRpdmVcIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJihlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKG89dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYoYT10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihvPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSYmKGE9dGhpcy5jb250YWlubWVudFszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxzLmdyaWQmJihpPXRoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChhLXRoaXMub3JpZ2luYWxQYWdlWSkvcy5ncmlkWzFdKSpzLmdyaWRbMV0sYT10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdJiZpLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDw9dGhpcy5jb250YWlubWVudFszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdP2ktcy5ncmlkWzFdOmkrcy5ncmlkWzFdOmksbj10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVgpL3MuZ3JpZFswXSkqcy5ncmlkWzBdLG89dGhpcy5jb250YWlubWVudD9uLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0mJm4tdGhpcy5vZmZzZXQuY2xpY2subGVmdDw9dGhpcy5jb250YWlubWVudFsyXT9uOm4tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXT9uLXMuZ3JpZFswXTpuK3MuZ3JpZFswXTpuKSkse3RvcDphLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bD8wOnIuc2Nyb2xsVG9wKCkpLGxlZnQ6by10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpsPzA6ci5zY3JvbGxMZWZ0KCkpfX0sX3JlYXJyYW5nZTpmdW5jdGlvbih0LGUsaSxuKXtpP2lbMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk6ZS5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sXCJkb3duXCI9PT10aGlzLmRpcmVjdGlvbj9lLml0ZW1bMF06ZS5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIHM9dGhpcy5jb3VudGVyO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7cz09PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFuKX0pfSxfY2xlYXI6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obil7aS5fdHJpZ2dlcih0LG4sZS5fdWlIYXNoKGUpKX19dGhpcy5yZXZlcnRpbmc9ITE7dmFyIG4scz1bXTtpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsLHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKG4gaW4gdGhpcy5fc3RvcmVkQ1NTKVwiYXV0b1wiIT09dGhpcy5fc3RvcmVkQ1NTW25dJiZcInN0YXRpY1wiIT09dGhpcy5fc3RvcmVkQ1NTW25dfHwodGhpcy5fc3RvcmVkQ1NTW25dPVwiXCIpO3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUyksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5jdXJyZW50SXRlbSxcInVpLXNvcnRhYmxlLWhlbHBlclwiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih0aGlzLmZyb21PdXRzaWRlJiYhZSYmcy5wdXNoKGZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXIoXCJyZWNlaXZlXCIsdCx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksIXRoaXMuZnJvbU91dHNpZGUmJnRoaXMuZG9tUG9zaXRpb24ucHJldj09PXRoaXMuY3VycmVudEl0ZW0ucHJldigpLm5vdChcIi51aS1zb3J0YWJsZS1oZWxwZXJcIilbMF0mJnRoaXMuZG9tUG9zaXRpb24ucGFyZW50PT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXXx8ZXx8cy5wdXNoKGZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIix0LHRoaXMuX3VpSGFzaCgpKX0pLHRoaXMhPT10aGlzLmN1cnJlbnRDb250YWluZXImJihlfHwocy5wdXNoKGZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIix0LHRoaXMuX3VpSGFzaCgpKX0pLHMucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcihcInJlY2VpdmVcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkscy5wdXNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0Ll90cmlnZ2VyKFwidXBkYXRlXCIsZSx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpKSksbj10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7bj49MDtuLS0pZXx8cy5wdXNoKGkoXCJkZWFjdGl2YXRlXCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbbl0pKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHMucHVzaChpKFwib3V0XCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbbl0pKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZih0aGlzLnN0b3JlZEN1cnNvciYmKHRoaXMuZG9jdW1lbnQuZmluZChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsdGhpcy5zdG9yZWRDdXJzb3IpLHRoaXMuc3RvcmVkU3R5bGVzaGVldC5yZW1vdmUoKSksdGhpcy5fc3RvcmVkT3BhY2l0eSYmdGhpcy5oZWxwZXIuY3NzKFwib3BhY2l0eVwiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKFwiekluZGV4XCIsXCJhdXRvXCI9PT10aGlzLl9zdG9yZWRaSW5kZXg/XCJcIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITEsZXx8dGhpcy5fdHJpZ2dlcihcImJlZm9yZVN0b3BcIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHwodGhpcy5oZWxwZXJbMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsKSwhZSl7Zm9yKG49MDtuPHMubGVuZ3RoO24rKylzW25dLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKFwic3RvcFwiLHQsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWx9LF90cmlnZ2VyOmZ1bmN0aW9uKCl7ITE9PT10LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpJiZ0aGlzLmNhbmNlbCgpfSxfdWlIYXNoOmZ1bmN0aW9uKGUpe3ZhciBpPWV8fHRoaXM7cmV0dXJue2hlbHBlcjppLmhlbHBlcixwbGFjZWhvbGRlcjppLnBsYWNlaG9sZGVyfHx0KFtdKSxwb3NpdGlvbjppLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246aS5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDppLnBvc2l0aW9uQWJzLGl0ZW06aS5jdXJyZW50SXRlbSxzZW5kZXI6ZT9lLmVsZW1lbnQ6bnVsbH19fSksdC53aWRnZXQoXCJ1aS5zcGlubmVyXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxpbnB1dD5cIix3aWRnZXRFdmVudFByZWZpeDpcInNwaW5cIixvcHRpb25zOntjbGFzc2VzOntcInVpLXNwaW5uZXJcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXNwaW5uZXItZG93blwiOlwidWktY29ybmVyLWJyXCIsXCJ1aS1zcGlubmVyLXVwXCI6XCJ1aS1jb3JuZXItdHJcIn0sY3VsdHVyZTpudWxsLGljb25zOntkb3duOlwidWktaWNvbi10cmlhbmdsZS0xLXNcIix1cDpcInVpLWljb24tdHJpYW5nbGUtMS1uXCJ9LGluY3JlbWVudGFsOiEwLG1heDpudWxsLG1pbjpudWxsLG51bWJlckZvcm1hdDpudWxsLHBhZ2U6MTAsc3RlcDoxLGNoYW5nZTpudWxsLHNwaW46bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbihcIm1heFwiLHRoaXMub3B0aW9ucy5tYXgpLHRoaXMuX3NldE9wdGlvbihcIm1pblwiLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbihcInN0ZXBcIix0aGlzLm9wdGlvbnMuc3RlcCksXCJcIiE9PXRoaXMudmFsdWUoKSYmdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpLCEwKSx0aGlzLl9kcmF3KCksdGhpcy5fb24odGhpcy5fZXZlbnRzKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe1xudGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIil9fSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc3VwZXIoKSxpPXRoaXMuZWxlbWVudDtyZXR1cm4gdC5lYWNoKFtcIm1pblwiLFwibWF4XCIsXCJzdGVwXCJdLGZ1bmN0aW9uKHQsbil7dmFyIHM9aS5hdHRyKG4pO251bGwhPXMmJnMubGVuZ3RoJiYoZVtuXT1zKX0pLGV9LF9ldmVudHM6e2tleWRvd246ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQodCkmJnRoaXMuX2tleWRvd24odCkmJnQucHJldmVudERlZmF1bHQoKX0sa2V5dXA6XCJfc3RvcFwiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24odCl7dGhpcy5jYW5jZWxCbHVyP2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXI6KHRoaXMuX3N0b3AoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLHQpKX0sbW91c2V3aGVlbDpmdW5jdGlvbih0LGUpe2lmKGUpe2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQodCkpcmV0dXJuITE7dGhpcy5fc3BpbigoZT4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLHQpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKHQpfSwxMDApLHQucHJldmVudERlZmF1bHQoKX19LFwibW91c2Vkb3duIC51aS1zcGlubmVyLWJ1dHRvblwiOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXt0aGlzLmVsZW1lbnRbMF09PT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pfHwodGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0aGlzLnByZXZpb3VzPW4sdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPW59KSl9dmFyIG47bj10aGlzLmVsZW1lbnRbMF09PT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pP3RoaXMucHJldmlvdXM6dGhpcy5lbGVtZW50LnZhbCgpLGUucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cixpLmNhbGwodGhpcyl9KSwhMSE9PXRoaXMuX3N0YXJ0KGUpJiZ0aGlzLl9yZXBlYXQobnVsbCx0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zcGlubmVyLXVwXCIpPzE6LTEsZSl9LFwibW91c2V1cCAudWktc3Bpbm5lci1idXR0b25cIjpcIl9zdG9wXCIsXCJtb3VzZWVudGVyIC51aS1zcGlubmVyLWJ1dHRvblwiOmZ1bmN0aW9uKGUpe2lmKHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcyhcInVpLXN0YXRlLWFjdGl2ZVwiKSlyZXR1cm4hMSE9PXRoaXMuX3N0YXJ0KGUpJiZ2b2lkIHRoaXMuX3JlcGVhdChudWxsLHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcyhcInVpLXNwaW5uZXItdXBcIik/MTotMSxlKX0sXCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvblwiOlwiX3N0b3BcIn0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpLndyYXAoXCI8c3Bhbj5cIikucGFyZW50KCkuYXBwZW5kKFwiPGE+PC9hPjxhPjwvYT5cIil9LF9kcmF3OmZ1bmN0aW9uKCl7dGhpcy5fZW5oYW5jZSgpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlTcGlubmVyLFwidWktc3Bpbm5lclwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX2FkZENsYXNzKFwidWktc3Bpbm5lci1pbnB1dFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInNwaW5idXR0b25cIiksdGhpcy5idXR0b25zPXRoaXMudWlTcGlubmVyLmNoaWxkcmVuKFwiYVwiKS5hdHRyKFwidGFiSW5kZXhcIiwtMSkuYXR0cihcImFyaWEtaGlkZGVuXCIsITApLmJ1dHRvbih7Y2xhc3Nlczp7XCJ1aS1idXR0b25cIjpcIlwifX0pLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuYnV0dG9ucyxcInVpLWNvcm5lci1hbGxcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5idXR0b25zLmZpcnN0KCksXCJ1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9ucy5sYXN0KCksXCJ1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLWRvd25cIiksdGhpcy5idXR0b25zLmZpcnN0KCkuYnV0dG9uKHtpY29uOnRoaXMub3B0aW9ucy5pY29ucy51cCxzaG93TGFiZWw6ITF9KSx0aGlzLmJ1dHRvbnMubGFzdCgpLmJ1dHRvbih7aWNvbjp0aGlzLm9wdGlvbnMuaWNvbnMuZG93bixzaG93TGFiZWw6ITF9KSx0aGlzLmJ1dHRvbnMuaGVpZ2h0KCk+TWF0aC5jZWlsKC41KnRoaXMudWlTcGlubmVyLmhlaWdodCgpKSYmdGhpcy51aVNwaW5uZXIuaGVpZ2h0KCk+MCYmdGhpcy51aVNwaW5uZXIuaGVpZ2h0KHRoaXMudWlTcGlubmVyLmhlaWdodCgpKX0sX2tleWRvd246ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLG49dC51aS5rZXlDb2RlO3N3aXRjaChlLmtleUNvZGUpe2Nhc2Ugbi5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSxlKSwhMDtjYXNlIG4uRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsZSksITA7Y2FzZSBuLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLGkucGFnZSxlKSwhMDtjYXNlIG4uUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtaS5wYWdlLGUpLCEwfXJldHVybiExfSxfc3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuISghdGhpcy5zcGlubmluZyYmITE9PT10aGlzLl90cmlnZ2VyKFwic3RhcnRcIix0KXx8KHRoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSx0aGlzLnNwaW5uaW5nPSEwLDApKX0sX3JlcGVhdDpmdW5jdGlvbih0LGUsaSl7dD10fHw1MDAsY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9yZXBlYXQoNDAsZSxpKX0sdCksdGhpcy5fc3BpbihlKnRoaXMub3B0aW9ucy5zdGVwLGkpfSxfc3BpbjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMudmFsdWUoKXx8MDt0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksaT10aGlzLl9hZGp1c3RWYWx1ZShpK3QqdGhpcy5faW5jcmVtZW50KHRoaXMuY291bnRlcikpLHRoaXMuc3Bpbm5pbmcmJiExPT09dGhpcy5fdHJpZ2dlcihcInNwaW5cIixlLHt2YWx1ZTppfSl8fCh0aGlzLl92YWx1ZShpKSx0aGlzLmNvdW50ZXIrKyl9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBpP3QuaXNGdW5jdGlvbihpKT9pKGUpOk1hdGguZmxvb3IoZSplKmUvNWU0LWUqZS81MDArMTcqZS8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJih0PU1hdGgubWF4KHQsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSx0fSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygpLGk9ZS5pbmRleE9mKFwiLlwiKTtyZXR1cm4tMT09PWk/MDplLmxlbmd0aC1pLTF9LF9hZGp1c3RWYWx1ZTpmdW5jdGlvbih0KXt2YXIgZSxpLG49dGhpcy5vcHRpb25zO3JldHVybiBpPXQtKGU9bnVsbCE9PW4ubWluP24ubWluOjApLHQ9ZSsoaT1NYXRoLnJvdW5kKGkvbi5zdGVwKSpuLnN0ZXApLHQ9cGFyc2VGbG9hdCh0LnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKSxudWxsIT09bi5tYXgmJnQ+bi5tYXg/bi5tYXg6bnVsbCE9PW4ubWluJiZ0PG4ubWluP24ubWluOnR9LF9zdG9wOmZ1bmN0aW9uKHQpe3RoaXMuc3Bpbm5pbmcmJihjbGVhclRpbWVvdXQodGhpcy50aW1lciksY2xlYXJUaW1lb3V0KHRoaXMubW91c2V3aGVlbFRpbWVyKSx0aGlzLmNvdW50ZXI9MCx0aGlzLnNwaW5uaW5nPSExLHRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsdCkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzO2lmKFwiY3VsdHVyZVwiPT09dHx8XCJudW1iZXJGb3JtYXRcIj09PXQpcmV0dXJuIGk9dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKSx0aGlzLm9wdGlvbnNbdF09ZSx2b2lkIHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KGkpKTtcIm1heFwiIT09dCYmXCJtaW5cIiE9PXQmJlwic3RlcFwiIT09dHx8XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPXRoaXMuX3BhcnNlKGUpKSxcImljb25zXCI9PT10JiYobj10aGlzLmJ1dHRvbnMuZmlyc3QoKS5maW5kKFwiLnVpLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MobixudWxsLHRoaXMub3B0aW9ucy5pY29ucy51cCksdGhpcy5fYWRkQ2xhc3MobixudWxsLGUudXApLHM9dGhpcy5idXR0b25zLmxhc3QoKS5maW5kKFwiLnVpLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MocyxudWxsLHRoaXMub3B0aW9ucy5pY29ucy5kb3duKSx0aGlzLl9hZGRDbGFzcyhzLG51bGwsZS5kb3duKSksdGhpcy5fc3VwZXIodCxlKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMudWlTcGlubmVyLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCksdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLCEhdCksdGhpcy5idXR0b25zLmJ1dHRvbih0P1wiZGlzYWJsZVwiOlwiZW5hYmxlXCIpfSxfc2V0T3B0aW9uczpvKGZ1bmN0aW9uKHQpe3RoaXMuX3N1cGVyKHQpfSksX3BhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiZcIlwiIT09dCYmKHQ9d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUucGFyc2VGbG9hdCh0LDEwLHRoaXMub3B0aW9ucy5jdWx0dXJlKTordCksXCJcIj09PXR8fGlzTmFOKHQpP251bGw6dH0sX2Zvcm1hdDpmdW5jdGlvbih0KXtyZXR1cm5cIlwiPT09dD9cIlwiOndpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLmZvcm1hdCh0LHRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQsdGhpcy5vcHRpb25zLmN1bHR1cmUpOnR9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmF0dHIoe1wiYXJpYS12YWx1ZW1pblwiOnRoaXMub3B0aW9ucy5taW4sXCJhcmlhLXZhbHVlbWF4XCI6dGhpcy5vcHRpb25zLm1heCxcImFyaWEtdmFsdWVub3dcIjp0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpfSl9LGlzVmFsaWQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnZhbHVlKCk7cmV0dXJuIG51bGwhPT10JiZ0PT09dGhpcy5fYWRqdXN0VmFsdWUodCl9LF92YWx1ZTpmdW5jdGlvbih0LGUpe3ZhciBpO1wiXCIhPT10JiZudWxsIT09KGk9dGhpcy5fcGFyc2UodCkpJiYoZXx8KGk9dGhpcy5fYWRqdXN0VmFsdWUoaSkpLHQ9dGhpcy5fZm9ybWF0KGkpKSx0aGlzLmVsZW1lbnQudmFsKHQpLHRoaXMuX3JlZnJlc2goKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucHJvcChcImRpc2FibGVkXCIsITEpLnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGUgcm9sZSBhcmlhLXZhbHVlbWluIGFyaWEtdmFsdWVtYXggYXJpYS12YWx1ZW5vd1wiKSx0aGlzLnVpU3Bpbm5lci5yZXBsYWNlV2l0aCh0aGlzLmVsZW1lbnQpfSxzdGVwVXA6byhmdW5jdGlvbih0KXt0aGlzLl9zdGVwVXAodCl9KSxfc3RlcFVwOmZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0KCkmJih0aGlzLl9zcGluKCh0fHwxKSp0aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0sc3RlcERvd246byhmdW5jdGlvbih0KXt0aGlzLl9zdGVwRG93bih0KX0pLF9zdGVwRG93bjpmdW5jdGlvbih0KXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigodHx8MSkqLXRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl9zdG9wKCkpfSxwYWdlVXA6byhmdW5jdGlvbih0KXt0aGlzLl9zdGVwVXAoKHR8fDEpKnRoaXMub3B0aW9ucy5wYWdlKX0pLHBhZ2VEb3duOm8oZnVuY3Rpb24odCl7dGhpcy5fc3RlcERvd24oKHR8fDEpKnRoaXMub3B0aW9ucy5wYWdlKX0pLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO28odGhpcy5fdmFsdWUpLmNhbGwodGhpcyx0KX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlTcGlubmVyfX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkuc3Bpbm5lclwiLHQudWkuc3Bpbm5lcix7X2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpLndyYXAodGhpcy5fdWlTcGlubmVySHRtbCgpKS5wYXJlbnQoKS5hcHBlbmQodGhpcy5fYnV0dG9uSHRtbCgpKX0sX3VpU3Bpbm5lckh0bWw6ZnVuY3Rpb24oKXtyZXR1cm5cIjxzcGFuPlwifSxfYnV0dG9uSHRtbDpmdW5jdGlvbigpe3JldHVyblwiPGE+PC9hPjxhPjwvYT5cIn19KSx0LnVpLnNwaW5uZXIsdC53aWRnZXQoXCJ1aS50YWJzXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWxheTozMDAsb3B0aW9uczp7YWN0aXZlOm51bGwsY2xhc3Nlczp7XCJ1aS10YWJzXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS10YWJzLW5hdlwiOlwidWktY29ybmVyLWFsbFwiLFwidWktdGFicy1wYW5lbFwiOlwidWktY29ybmVyLWJvdHRvbVwiLFwidWktdGFicy10YWJcIjpcInVpLWNvcm5lci10b3BcIn0sY29sbGFwc2libGU6ITEsZXZlbnQ6XCJjbGlja1wiLGhlaWdodFN0eWxlOlwiY29udGVudFwiLGhpZGU6bnVsbCxzaG93Om51bGwsYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsLGJlZm9yZUxvYWQ6bnVsbCxsb2FkOm51bGx9LF9pc0xvY2FsOmZ1bmN0aW9uKCl7dmFyIHQ9LyMuKiQvO3JldHVybiBmdW5jdGlvbihlKXt2YXIgaSxuO2k9ZS5ocmVmLnJlcGxhY2UodCxcIlwiKSxuPWxvY2F0aW9uLmhyZWYucmVwbGFjZSh0LFwiXCIpO3RyeXtpPWRlY29kZVVSSUNvbXBvbmVudChpKX1jYXRjaCh0KXt9dHJ5e249ZGVjb2RlVVJJQ29tcG9uZW50KG4pfWNhdGNoKHQpe31yZXR1cm4gZS5oYXNoLmxlbmd0aD4xJiZpPT09bn19KCksX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10aGlzLm9wdGlvbnM7dGhpcy5ydW5uaW5nPSExLHRoaXMuX2FkZENsYXNzKFwidWktdGFic1wiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX3RvZ2dsZUNsYXNzKFwidWktdGFicy1jb2xsYXBzaWJsZVwiLG51bGwsaS5jb2xsYXBzaWJsZSksdGhpcy5fcHJvY2Vzc1RhYnMoKSxpLmFjdGl2ZT10aGlzLl9pbml0aWFsQWN0aXZlKCksdC5pc0FycmF5KGkuZGlzYWJsZWQpJiYoaS5kaXNhYmxlZD10LnVuaXF1ZShpLmRpc2FibGVkLmNvbmNhdCh0Lm1hcCh0aGlzLnRhYnMuZmlsdGVyKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLGZ1bmN0aW9uKHQpe3JldHVybiBlLnRhYnMuaW5kZXgodCl9KSkpLnNvcnQoKSksITEhPT10aGlzLm9wdGlvbnMuYWN0aXZlJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuYWN0aXZlPXRoaXMuX2ZpbmRBY3RpdmUoaS5hY3RpdmUpOnRoaXMuYWN0aXZlPXQoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5hY3RpdmUubGVuZ3RoJiZ0aGlzLmxvYWQoaS5hY3RpdmUpfSxfaW5pdGlhbEFjdGl2ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5hY3RpdmUsaT10aGlzLm9wdGlvbnMuY29sbGFwc2libGUsbj1sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTtyZXR1cm4gbnVsbD09PWUmJihuJiZ0aGlzLnRhYnMuZWFjaChmdW5jdGlvbihpLHMpe2lmKHQocykuYXR0cihcImFyaWEtY29udHJvbHNcIik9PT1uKXJldHVybiBlPWksITF9KSxudWxsPT09ZSYmKGU9dGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5maWx0ZXIoXCIudWktdGFicy1hY3RpdmVcIikpKSxudWxsIT09ZSYmLTEhPT1lfHwoZT0hIXRoaXMudGFicy5sZW5ndGgmJjApKSwhMSE9PWUmJi0xPT09KGU9dGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcShlKSkpJiYoZT0haSYmMCksIWkmJiExPT09ZSYmdGhpcy5hbmNob3JzLmxlbmd0aCYmKGU9MCksZX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybnt0YWI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKTp0KCl9fSxfdGFiS2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT10KHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpLmNsb3Nlc3QoXCJsaVwiKSxuPXRoaXMudGFicy5pbmRleChpKSxzPSEwO2lmKCF0aGlzLl9oYW5kbGVQYWdlTmF2KGUpKXtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5SSUdIVDpjYXNlIHQudWkua2V5Q29kZS5ET1dOOm4rKzticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5MRUZUOnM9ITEsbi0tO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVORDpuPXRoaXMuYW5jaG9ycy5sZW5ndGgtMTticmVhaztjYXNlIHQudWkua2V5Q29kZS5IT01FOm49MDticmVhaztjYXNlIHQudWkua2V5Q29kZS5TUEFDRTpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHZvaWQgdGhpcy5fYWN0aXZhdGUobik7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6cmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx2b2lkIHRoaXMuX2FjdGl2YXRlKG4hPT10aGlzLm9wdGlvbnMuYWN0aXZlJiZuKTtkZWZhdWx0OnJldHVybn1lLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksbj10aGlzLl9mb2N1c05leHRUYWIobixzKSxlLmN0cmxLZXl8fGUubWV0YUtleXx8KGkuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixcImZhbHNlXCIpLHRoaXMudGFicy5lcShuKS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLFwidHJ1ZVwiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbihcImFjdGl2ZVwiLG4pfSx0aGlzLmRlbGF5KSl9fSxfcGFuZWxLZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZVBhZ2VOYXYoZSl8fGUuY3RybEtleSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlVQJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlLnRyaWdnZXIoXCJmb2N1c1wiKSl9LF9oYW5kbGVQYWdlTmF2OmZ1bmN0aW9uKGUpe3JldHVybiBlLmFsdEtleSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlBBR0VfVVA/KHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlLTEsITEpKSwhMCk6ZS5hbHRLZXkmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5QQUdFX0RPV04/KHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlKzEsITApKSwhMCk6dm9pZCAwfSxfZmluZE5leHRUYWI6ZnVuY3Rpb24oZSxpKXtmb3IodmFyIG49dGhpcy50YWJzLmxlbmd0aC0xOy0xIT09dC5pbkFycmF5KChlPm4mJihlPTApLGU8MCYmKGU9biksZSksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspZT1pP2UrMTplLTE7cmV0dXJuIGV9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10aGlzLl9maW5kTmV4dFRhYih0LGUpLHRoaXMudGFicy5lcSh0KS50cmlnZ2VyKFwiZm9jdXNcIiksdH0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiYWN0aXZlXCIhPT10Pyh0aGlzLl9zdXBlcih0LGUpLFwiY29sbGFwc2libGVcIj09PXQmJih0aGlzLl90b2dnbGVDbGFzcyhcInVpLXRhYnMtY29sbGFwc2libGVcIixudWxsLGUpLGV8fCExIT09dGhpcy5vcHRpb25zLmFjdGl2ZXx8dGhpcy5fYWN0aXZhdGUoMCkpLFwiZXZlbnRcIj09PXQmJnRoaXMuX3NldHVwRXZlbnRzKGUpLFwiaGVpZ2h0U3R5bGVcIj09PXQmJnRoaXMuX3NldHVwSGVpZ2h0U3R5bGUoZSkpOnRoaXMuX2FjdGl2YXRlKGUpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdD90LnJlcGxhY2UoL1shXCIkJSYnKCkqKywuXFwvOjs8PT4/QFxcW1xcXVxcXmB7fH1+XS9nLFwiXFxcXCQmXCIpOlwiXCJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oXCI6aGFzKGFbaHJlZl0pXCIpO2UuZGlzYWJsZWQ9dC5tYXAoaS5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIiksZnVuY3Rpb24odCl7cmV0dXJuIGkuaW5kZXgodCl9KSx0aGlzLl9wcm9jZXNzVGFicygpLCExIT09ZS5hY3RpdmUmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmUubGVuZ3RoJiYhdC5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT1lLmRpc2FibGVkLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLGUuYWN0aXZlLTEpLCExKSk6ZS5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKTooZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9zZXR1cEV2ZW50cyh0aGlzLm9wdGlvbnMuZXZlbnQpLHRoaXMuX3NldHVwSGVpZ2h0U3R5bGUodGhpcy5vcHRpb25zLmhlaWdodFN0eWxlKSx0aGlzLnRhYnMubm90KHRoaXMuYWN0aXZlKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHMubm90KHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKSkuaGlkZSgpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIn0pLHRoaXMuYWN0aXZlLmxlbmd0aD8odGhpcy5hY3RpdmUuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pLHRoaXMuX2FkZENsYXNzKHRoaXMuYWN0aXZlLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkuc2hvdygpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCJ9KSk6dGhpcy50YWJzLmVxKDApLmF0dHIoXCJ0YWJJbmRleFwiLDApfSxfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy50YWJzLG49dGhpcy5hbmNob3JzLHM9dGhpcy5wYW5lbHM7dGhpcy50YWJsaXN0PXRoaXMuX2dldExpc3QoKS5hdHRyKFwicm9sZVwiLFwidGFibGlzdFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnRhYmxpc3QsXCJ1aS10YWJzLW5hdlwiLFwidWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyXCIpLHRoaXMudGFibGlzdC5vbihcIm1vdXNlZG93blwiK3RoaXMuZXZlbnROYW1lc3BhY2UsXCI+IGxpXCIsZnVuY3Rpb24oZSl7dCh0aGlzKS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSkub24oXCJmb2N1c1wiK3RoaXMuZXZlbnROYW1lc3BhY2UsXCIudWktdGFicy1hbmNob3JcIixmdW5jdGlvbigpe3QodGhpcykuY2xvc2VzdChcImxpXCIpLmlzKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpJiZ0aGlzLmJsdXIoKX0pLHRoaXMudGFicz10aGlzLnRhYmxpc3QuZmluZChcIj4gbGk6aGFzKGFbaHJlZl0pXCIpLmF0dHIoe3JvbGU6XCJ0YWJcIix0YWJJbmRleDotMX0pLHRoaXMuX2FkZENsYXNzKHRoaXMudGFicyxcInVpLXRhYnMtdGFiXCIsXCJ1aS1zdGF0ZS1kZWZhdWx0XCIpLHRoaXMuYW5jaG9ycz10aGlzLnRhYnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHQoXCJhXCIsdGhpcylbMF19KS5hdHRyKHtyb2xlOlwicHJlc2VudGF0aW9uXCIsdGFiSW5kZXg6LTF9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFuY2hvcnMsXCJ1aS10YWJzLWFuY2hvclwiKSx0aGlzLnBhbmVscz10KCksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oaSxuKXt2YXIgcyxvLGEscj10KG4pLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpLGw9dChuKS5jbG9zZXN0KFwibGlcIiksaD1sLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpO2UuX2lzTG9jYWwobik/KGE9KHM9bi5oYXNoKS5zdWJzdHJpbmcoMSksbz1lLmVsZW1lbnQuZmluZChlLl9zYW5pdGl6ZVNlbGVjdG9yKHMpKSk6KHM9XCIjXCIrKGE9bC5hdHRyKFwiYXJpYS1jb250cm9sc1wiKXx8dCh7fSkudW5pcXVlSWQoKVswXS5pZCksKG89ZS5lbGVtZW50LmZpbmQocykpLmxlbmd0aHx8KG89ZS5fY3JlYXRlUGFuZWwoYSkpLmluc2VydEFmdGVyKGUucGFuZWxzW2ktMV18fGUudGFibGlzdCksby5hdHRyKFwiYXJpYS1saXZlXCIsXCJwb2xpdGVcIikpLG8ubGVuZ3RoJiYoZS5wYW5lbHM9ZS5wYW5lbHMuYWRkKG8pKSxoJiZsLmRhdGEoXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIixoKSxsLmF0dHIoe1wiYXJpYS1jb250cm9sc1wiOmEsXCJhcmlhLWxhYmVsbGVkYnlcIjpyfSksby5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIscil9KSx0aGlzLnBhbmVscy5hdHRyKFwicm9sZVwiLFwidGFicGFuZWxcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5wYW5lbHMsXCJ1aS10YWJzLXBhbmVsXCIsXCJ1aS13aWRnZXQtY29udGVudFwiKSxpJiYodGhpcy5fb2ZmKGkubm90KHRoaXMudGFicykpLHRoaXMuX29mZihuLm5vdCh0aGlzLmFuY2hvcnMpKSx0aGlzLl9vZmYocy5ub3QodGhpcy5wYW5lbHMpKSl9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGlzdHx8dGhpcy5lbGVtZW50LmZpbmQoXCJvbCwgdWxcIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbihlKXtyZXR1cm4gdChcIjxkaXY+XCIpLmF0dHIoXCJpZFwiLGUpLmRhdGEoXCJ1aS10YWJzLWRlc3Ryb3lcIiwhMCl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbihlKXt2YXIgaSxuLHM7Zm9yKHQuaXNBcnJheShlKSYmKGUubGVuZ3RoP2UubGVuZ3RoPT09dGhpcy5hbmNob3JzLmxlbmd0aCYmKGU9ITApOmU9ITEpLHM9MDtuPXRoaXMudGFic1tzXTtzKyspaT10KG4pLCEwPT09ZXx8LTEhPT10LmluQXJyYXkocyxlKT8oaS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSx0aGlzLl9hZGRDbGFzcyhpLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSk6KGkucmVtb3ZlQXR0cihcImFyaWEtZGlzYWJsZWRcIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIikpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD1lLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0KCksdGhpcy53aWRnZXRGdWxsTmFtZStcIi1kaXNhYmxlZFwiLG51bGwsITA9PT1lKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKGUpe3ZhciBpPXt9O2UmJnQuZWFjaChlLnNwbGl0KFwiIFwiKSxmdW5jdGlvbih0LGUpe2lbZV09XCJfZXZlbnRIYW5kbGVyXCJ9KSx0aGlzLl9vZmYodGhpcy5hbmNob3JzLmFkZCh0aGlzLnRhYnMpLmFkZCh0aGlzLnBhbmVscykpLHRoaXMuX29uKCEwLHRoaXMuYW5jaG9ycyx7Y2xpY2s6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfX0pLHRoaXMuX29uKHRoaXMuYW5jaG9ycyxpKSx0aGlzLl9vbih0aGlzLnRhYnMse2tleWRvd246XCJfdGFiS2V5ZG93blwifSksdGhpcy5fb24odGhpcy5wYW5lbHMse2tleWRvd246XCJfcGFuZWxLZXlkb3duXCJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24oZSl7dmFyIGksbj10aGlzLmVsZW1lbnQucGFyZW50KCk7XCJmaWxsXCI9PT1lPyhpPW4uaGVpZ2h0KCksaS09dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCktdGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncyhcIjp2aXNpYmxlXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLG49ZS5jc3MoXCJwb3NpdGlvblwiKTtcImFic29sdXRlXCIhPT1uJiZcImZpeGVkXCIhPT1uJiYoaS09ZS5vdXRlckhlaWdodCghMCkpfSksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7aS09dCh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxpLXQodGhpcykuaW5uZXJIZWlnaHQoKSt0KHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoXCJvdmVyZmxvd1wiLFwiYXV0b1wiKSk6XCJhdXRvXCI9PT1lJiYoaT0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtpPU1hdGgubWF4KGksdCh0aGlzKS5oZWlnaHQoXCJcIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KGkpKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMsbj10aGlzLmFjdGl2ZSxzPXQoZS5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwibGlcIiksbz1zWzBdPT09blswXSxhPW8mJmkuY29sbGFwc2libGUscj1hP3QoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihzKSxsPW4ubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKG4pOnQoKSxoPXtvbGRUYWI6bixvbGRQYW5lbDpsLG5ld1RhYjphP3QoKTpzLG5ld1BhbmVsOnJ9O2UucHJldmVudERlZmF1bHQoKSxzLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIil8fHMuaGFzQ2xhc3MoXCJ1aS10YWJzLWxvYWRpbmdcIil8fHRoaXMucnVubmluZ3x8byYmIWkuY29sbGFwc2libGV8fCExPT09dGhpcy5fdHJpZ2dlcihcImJlZm9yZUFjdGl2YXRlXCIsZSxoKXx8KGkuYWN0aXZlPSFhJiZ0aGlzLnRhYnMuaW5kZXgocyksdGhpcy5hY3RpdmU9bz90KCk6cyx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8ci5sZW5ndGh8fHQuZXJyb3IoXCJqUXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci5cIiksci5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgocyksZSksdGhpcy5fdG9nZ2xlKGUsaCkpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gbigpe28ucnVubmluZz0hMSxvLl90cmlnZ2VyKFwiYWN0aXZhdGVcIixlLGkpfWZ1bmN0aW9uIHMoKXtvLl9hZGRDbGFzcyhpLm5ld1RhYi5jbG9zZXN0KFwibGlcIiksXCJ1aS10YWJzLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLGEubGVuZ3RoJiZvLm9wdGlvbnMuc2hvdz9vLl9zaG93KGEsby5vcHRpb25zLnNob3csbik6KGEuc2hvdygpLG4oKSl9dmFyIG89dGhpcyxhPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7by5fcmVtb3ZlQ2xhc3MoaS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxzKCl9KToodGhpcy5fcmVtb3ZlQ2xhc3MoaS5vbGRUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxyLmhpZGUoKSxzKCkpLHIuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLGkub2xkVGFiLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KSxhLmxlbmd0aCYmci5sZW5ndGg/aS5vbGRUYWIuYXR0cihcInRhYkluZGV4XCIsLTEpOmEubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10KHRoaXMpLmF0dHIoXCJ0YWJJbmRleFwiKX0pLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSxhLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIiksaS5uZXdUYWIuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGksbj10aGlzLl9maW5kQWN0aXZlKGUpO25bMF0hPT10aGlzLmFjdGl2ZVswXSYmKG4ubGVuZ3RofHwobj10aGlzLmFjdGl2ZSksaT1uLmZpbmQoXCIudWktdGFicy1hbmNob3JcIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6dC5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PWU/dCgpOnRoaXMudGFicy5lcShlKX0sX2dldEluZGV4OmZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3JzLmZpbHRlcihcIltocmVmJD0nXCIrdC51aS5lc2NhcGVTZWxlY3RvcihlKStcIiddXCIpKSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSx0aGlzLnRhYmxpc3QucmVtb3ZlQXR0cihcInJvbGVcIikub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpLHRoaXMuYW5jaG9ycy5yZW1vdmVBdHRyKFwicm9sZSB0YWJJbmRleFwiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMudGFicy5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXt0LmRhdGEodGhpcyxcInVpLXRhYnMtZGVzdHJveVwiKT90KHRoaXMpLnJlbW92ZSgpOnQodGhpcykucmVtb3ZlQXR0cihcInJvbGUgdGFiSW5kZXggYXJpYS1saXZlIGFyaWEtYnVzeSBhcmlhLXNlbGVjdGVkIGFyaWEtbGFiZWxsZWRieSBhcmlhLWhpZGRlbiBhcmlhLWV4cGFuZGVkXCIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5kYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIpO2k/ZS5hdHRyKFwiYXJpYS1jb250cm9sc1wiLGkpLnJlbW92ZURhdGEoXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIik6ZS5yZW1vdmVBdHRyKFwiYXJpYS1jb250cm9sc1wiKX0pLHRoaXMucGFuZWxzLnNob3coKSxcImNvbnRlbnRcIiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdGhpcy5wYW5lbHMuY3NzKFwiaGVpZ2h0XCIsXCJcIil9LGVuYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7ITEhPT1pJiYodm9pZCAwPT09ZT9pPSExOihlPXRoaXMuX2dldEluZGV4KGUpLGk9dC5pc0FycmF5KGkpP3QubWFwKGksZnVuY3Rpb24odCl7cmV0dXJuIHQhPT1lP3Q6bnVsbH0pOnQubWFwKHRoaXMudGFicyxmdW5jdGlvbih0LGkpe3JldHVybiBpIT09ZT9pOm51bGx9KSksdGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoaSkpfSxkaXNhYmxlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZighMCE9PWkpe2lmKHZvaWQgMD09PWUpaT0hMDtlbHNle2lmKGU9dGhpcy5fZ2V0SW5kZXgoZSksLTEhPT10LmluQXJyYXkoZSxpKSlyZXR1cm47aT10LmlzQXJyYXkoaSk/dC5tZXJnZShbZV0saSkuc29ydCgpOltlXX10aGlzLl9zZXRPcHRpb25EaXNhYmxlZChpKX19LGxvYWQ6ZnVuY3Rpb24oZSxpKXtlPXRoaXMuX2dldEluZGV4KGUpO3ZhciBuPXRoaXMscz10aGlzLnRhYnMuZXEoZSksbz1zLmZpbmQoXCIudWktdGFicy1hbmNob3JcIiksYT10aGlzLl9nZXRQYW5lbEZvclRhYihzKSxyPXt0YWI6cyxwYW5lbDphfSxsPWZ1bmN0aW9uKHQsZSl7XCJhYm9ydFwiPT09ZSYmbi5wYW5lbHMuc3RvcCghMSwhMCksbi5fcmVtb3ZlQ2xhc3MocyxcInVpLXRhYnMtbG9hZGluZ1wiKSxhLnJlbW92ZUF0dHIoXCJhcmlhLWJ1c3lcIiksdD09PW4ueGhyJiZkZWxldGUgbi54aHJ9O3RoaXMuX2lzTG9jYWwob1swXSl8fCh0aGlzLnhocj10LmFqYXgodGhpcy5fYWpheFNldHRpbmdzKG8saSxyKSksdGhpcy54aHImJlwiY2FuY2VsZWRcIiE9PXRoaXMueGhyLnN0YXR1c1RleHQmJih0aGlzLl9hZGRDbGFzcyhzLFwidWktdGFicy1sb2FkaW5nXCIpLGEuYXR0cihcImFyaWEtYnVzeVwiLFwidHJ1ZVwiKSx0aGlzLnhoci5kb25lKGZ1bmN0aW9uKHQsZSxzKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5odG1sKHQpLG4uX3RyaWdnZXIoXCJsb2FkXCIsaSxyKSxsKHMsZSl9LDEpfSkuZmFpbChmdW5jdGlvbih0LGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtsKHQsZSl9LDEpfSkpKX0sX2FqYXhTZXR0aW5nczpmdW5jdGlvbihlLGksbil7dmFyIHM9dGhpcztyZXR1cm57dXJsOmUuYXR0cihcImhyZWZcIikucmVwbGFjZSgvIy4qJC8sXCJcIiksYmVmb3JlU2VuZDpmdW5jdGlvbihlLG8pe3JldHVybiBzLl90cmlnZ2VyKFwiYmVmb3JlTG9hZFwiLGksdC5leHRlbmQoe2pxWEhSOmUsYWpheFNldHRpbmdzOm99LG4pKX19fSxfZ2V0UGFuZWxGb3JUYWI6ZnVuY3Rpb24oZSl7dmFyIGk9dChlKS5hdHRyKFwiYXJpYS1jb250cm9sc1wiKTtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQodGhpcy5fc2FuaXRpemVTZWxlY3RvcihcIiNcIitpKSl9fSksITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS50YWJzXCIsdC51aS50YWJzLHtfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5fYWRkQ2xhc3ModGhpcy50YWJzLFwidWktdGFiXCIpfX0pLHQudWkudGFicyx0LndpZGdldChcInVpLnRvb2x0aXBcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktdG9vbHRpcFwiOlwidWktY29ybmVyLWFsbCB1aS13aWRnZXQtc2hhZG93XCJ9LGNvbnRlbnQ6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLmF0dHIoXCJ0aXRsZVwiKXx8XCJcIjtyZXR1cm4gdChcIjxhPlwiKS50ZXh0KGUpLmh0bWwoKX0saGlkZTohMCxpdGVtczpcIlt0aXRsZV06bm90KFtkaXNhYmxlZF0pXCIscG9zaXRpb246e215OlwibGVmdCB0b3ArMTVcIixhdDpcImxlZnQgYm90dG9tXCIsY29sbGlzaW9uOlwiZmxpcGZpdCBmbGlwXCJ9LHNob3c6ITAsdHJhY2s6ITEsY2xvc2U6bnVsbCxvcGVuOm51bGx9LF9hZGREZXNjcmliZWRCeTpmdW5jdGlvbihlLGkpe3ZhciBuPShlLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpfHxcIlwiKS5zcGxpdCgvXFxzKy8pO24ucHVzaChpKSxlLmRhdGEoXCJ1aS10b29sdGlwLWlkXCIsaSkuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIix0LnRyaW0obi5qb2luKFwiIFwiKSkpfSxfcmVtb3ZlRGVzY3JpYmVkQnk6ZnVuY3Rpb24oZSl7dmFyIGk9ZS5kYXRhKFwidWktdG9vbHRpcC1pZFwiKSxuPShlLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpfHxcIlwiKS5zcGxpdCgvXFxzKy8pLHM9dC5pbkFycmF5KGksbik7LTEhPT1zJiZuLnNwbGljZShzLDEpLGUucmVtb3ZlRGF0YShcInVpLXRvb2x0aXAtaWRcIiksKG49dC50cmltKG4uam9pbihcIiBcIikpKT9lLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsbik6ZS5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX29uKHttb3VzZW92ZXI6XCJvcGVuXCIsZm9jdXNpbjpcIm9wZW5cIn0pLHRoaXMudG9vbHRpcHM9e30sdGhpcy5wYXJlbnRzPXt9LHRoaXMubGl2ZVJlZ2lvbj10KFwiPGRpdj5cIikuYXR0cih7cm9sZTpcImxvZ1wiLFwiYXJpYS1saXZlXCI6XCJhc3NlcnRpdmVcIixcImFyaWEtcmVsZXZhbnRcIjpcImFkZGl0aW9uc1wifSkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmxpdmVSZWdpb24sbnVsbCxcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiKSx0aGlzLmRpc2FibGVkVGl0bGVzPXQoW10pfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIG49dGhpczt0aGlzLl9zdXBlcihlLGkpLFwiY29udGVudFwiPT09ZSYmdC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24odCxlKXtuLl91cGRhdGVDb250ZW50KGUuZWxlbWVudCl9KX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXNbdD9cIl9kaXNhYmxlXCI6XCJfZW5hYmxlXCJdKCl9LF9kaXNhYmxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0LmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihpLG4pe3ZhciBzPXQuRXZlbnQoXCJibHVyXCIpO3MudGFyZ2V0PXMuY3VycmVudFRhcmdldD1uLmVsZW1lbnRbMF0sZS5jbG9zZShzLCEwKX0pLHRoaXMuZGlzYWJsZWRUaXRsZXM9dGhpcy5kaXNhYmxlZFRpdGxlcy5hZGQodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5hZGRCYWNrKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtpZihlLmlzKFwiW3RpdGxlXVwiKSlyZXR1cm4gZS5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiLGUuYXR0cihcInRpdGxlXCIpKS5yZW1vdmVBdHRyKFwidGl0bGVcIil9KSl9LF9lbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkVGl0bGVzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikmJmUuYXR0cihcInRpdGxlXCIsZS5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSl9KSx0aGlzLmRpc2FibGVkVGl0bGVzPXQoW10pfSxvcGVuOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMsbj10KGU/ZS50YXJnZXQ6dGhpcy5lbGVtZW50KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5pdGVtcyk7bi5sZW5ndGgmJiFuLmRhdGEoXCJ1aS10b29sdGlwLWlkXCIpJiYobi5hdHRyKFwidGl0bGVcIikmJm4uZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIixuLmF0dHIoXCJ0aXRsZVwiKSksbi5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIsITApLGUmJlwibW91c2VvdmVyXCI9PT1lLnR5cGUmJm4ucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgZSxuPXQodGhpcyk7bi5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpJiYoKGU9dC5FdmVudChcImJsdXJcIikpLnRhcmdldD1lLmN1cnJlbnRUYXJnZXQ9dGhpcyxpLmNsb3NlKGUsITApKSxuLmF0dHIoXCJ0aXRsZVwiKSYmKG4udW5pcXVlSWQoKSxpLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTpuLmF0dHIoXCJ0aXRsZVwiKX0sbi5hdHRyKFwidGl0bGVcIixcIlwiKSl9KSx0aGlzLl9yZWdpc3RlckNsb3NlSGFuZGxlcnMoZSxuKSx0aGlzLl91cGRhdGVDb250ZW50KG4sZSkpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbih0LGUpe3ZhciBpLG49dGhpcy5vcHRpb25zLmNvbnRlbnQscz10aGlzLG89ZT9lLnR5cGU6bnVsbDtpZihcInN0cmluZ1wiPT10eXBlb2Ygbnx8bi5ub2RlVHlwZXx8bi5qcXVlcnkpcmV0dXJuIHRoaXMuX29wZW4oZSx0LG4pOyhpPW4uY2FsbCh0WzBdLGZ1bmN0aW9uKGkpe3MuX2RlbGF5KGZ1bmN0aW9uKCl7dC5kYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpJiYoZSYmKGUudHlwZT1vKSx0aGlzLl9vcGVuKGUsdCxpKSl9KX0pKSYmdGhpcy5fb3BlbihlLHQsaSl9LF9vcGVuOmZ1bmN0aW9uKGUsaSxuKXtmdW5jdGlvbiBzKHQpe2gub2Y9dCxhLmlzKFwiOmhpZGRlblwiKXx8YS5wb3NpdGlvbihoKX12YXIgbyxhLHIsbCxoPXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7aWYobil7aWYobz10aGlzLl9maW5kKGkpKXJldHVybiB2b2lkIG8udG9vbHRpcC5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKG4pO2kuaXMoXCJbdGl0bGVdXCIpJiYoZSYmXCJtb3VzZW92ZXJcIj09PWUudHlwZT9pLmF0dHIoXCJ0aXRsZVwiLFwiXCIpOmkucmVtb3ZlQXR0cihcInRpdGxlXCIpKSxvPXRoaXMuX3Rvb2x0aXAoaSksYT1vLnRvb2x0aXAsdGhpcy5fYWRkRGVzY3JpYmVkQnkoaSxhLmF0dHIoXCJpZFwiKSksYS5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKG4pLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSwobD10KFwiPGRpdj5cIikuaHRtbChhLmZpbmQoXCIudWktdG9vbHRpcC1jb250ZW50XCIpLmh0bWwoKSkpLnJlbW92ZUF0dHIoXCJuYW1lXCIpLmZpbmQoXCJbbmFtZV1cIikucmVtb3ZlQXR0cihcIm5hbWVcIiksbC5yZW1vdmVBdHRyKFwiaWRcIikuZmluZChcIltpZF1cIikucmVtb3ZlQXR0cihcImlkXCIpLGwuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSx0aGlzLm9wdGlvbnMudHJhY2smJmUmJi9ebW91c2UvLnRlc3QoZS50eXBlKT8odGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vtb3ZlOnN9KSxzKGUpKTphLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjppfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSxhLmhpZGUoKSx0aGlzLl9zaG93KGEsdGhpcy5vcHRpb25zLnNob3cpLHRoaXMub3B0aW9ucy50cmFjayYmdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYocj10aGlzLmRlbGF5ZWRTaG93PXNldEludGVydmFsKGZ1bmN0aW9uKCl7YS5pcyhcIjp2aXNpYmxlXCIpJiYocyhoLm9mKSxjbGVhckludGVydmFsKHIpKX0sdC5meC5pbnRlcnZhbCkpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIsZSx7dG9vbHRpcDphfSl9fSxfcmVnaXN0ZXJDbG9zZUhhbmRsZXJzOmZ1bmN0aW9uKGUsaSl7dmFyIG49e2tleXVwOmZ1bmN0aW9uKGUpe2lmKGUua2V5Q29kZT09PXQudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBuPXQuRXZlbnQoZSk7bi5jdXJyZW50VGFyZ2V0PWlbMF0sdGhpcy5jbG9zZShuLCEwKX19fTtpWzBdIT09dGhpcy5lbGVtZW50WzBdJiYobi5yZW1vdmU9ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVUb29sdGlwKHRoaXMuX2ZpbmQoaSkudG9vbHRpcCl9KSxlJiZcIm1vdXNlb3ZlclwiIT09ZS50eXBlfHwobi5tb3VzZWxlYXZlPVwiY2xvc2VcIiksZSYmXCJmb2N1c2luXCIhPT1lLnR5cGV8fChuLmZvY3Vzb3V0PVwiY2xvc2VcIiksdGhpcy5fb24oITAsaSxuKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIGksbj10aGlzLHM9dChlP2UuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLG89dGhpcy5fZmluZChzKTtvPyhpPW8udG9vbHRpcCxvLmNsb3Npbmd8fChjbGVhckludGVydmFsKHRoaXMuZGVsYXllZFNob3cpLHMuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikmJiFzLmF0dHIoXCJ0aXRsZVwiKSYmcy5hdHRyKFwidGl0bGVcIixzLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKSx0aGlzLl9yZW1vdmVEZXNjcmliZWRCeShzKSxvLmhpZGluZz0hMCxpLnN0b3AoITApLHRoaXMuX2hpZGUoaSx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24uX3JlbW92ZVRvb2x0aXAodCh0aGlzKSl9KSxzLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLW9wZW5cIiksdGhpcy5fb2ZmKHMsXCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwXCIpLHNbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuX29mZihzLFwicmVtb3ZlXCIpLHRoaXMuX29mZih0aGlzLmRvY3VtZW50LFwibW91c2Vtb3ZlXCIpLGUmJlwibW91c2VsZWF2ZVwiPT09ZS50eXBlJiZ0LmVhY2godGhpcy5wYXJlbnRzLGZ1bmN0aW9uKGUsaSl7dChpLmVsZW1lbnQpLmF0dHIoXCJ0aXRsZVwiLGkudGl0bGUpLGRlbGV0ZSBuLnBhcmVudHNbZV19KSxvLmNsb3Npbmc9ITAsdGhpcy5fdHJpZ2dlcihcImNsb3NlXCIsZSx7dG9vbHRpcDppfSksby5oaWRpbmd8fChvLmNsb3Npbmc9ITEpKSk6cy5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpfSxfdG9vbHRpcDpmdW5jdGlvbihlKXt2YXIgaT10KFwiPGRpdj5cIikuYXR0cihcInJvbGVcIixcInRvb2x0aXBcIiksbj10KFwiPGRpdj5cIikuYXBwZW5kVG8oaSkscz1pLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpO3JldHVybiB0aGlzLl9hZGRDbGFzcyhuLFwidWktdG9vbHRpcC1jb250ZW50XCIpLHRoaXMuX2FkZENsYXNzKGksXCJ1aS10b29sdGlwXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksaS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbyhlKSksdGhpcy50b29sdGlwc1tzXT17ZWxlbWVudDplLHRvb2x0aXA6aX19LF9maW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YShcInVpLXRvb2x0aXAtaWRcIik7cmV0dXJuIGU/dGhpcy50b29sdGlwc1tlXTpudWxsfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbih0KXt0LnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW3QuYXR0cihcImlkXCIpXX0sX2FwcGVuZFRvOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvc2VzdChcIi51aS1mcm9udCwgZGlhbG9nXCIpO3JldHVybiBlLmxlbmd0aHx8KGU9dGhpcy5kb2N1bWVudFswXS5ib2R5KSxlfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxuKXt2YXIgcz10LkV2ZW50KFwiYmx1clwiKSxvPW4uZWxlbWVudDtzLnRhcmdldD1zLmN1cnJlbnRUYXJnZXQ9b1swXSxlLmNsb3NlKHMsITApLHQoXCIjXCIraSkucmVtb3ZlKCksby5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSYmKG8uYXR0cihcInRpdGxlXCIpfHxvLmF0dHIoXCJ0aXRsZVwiLG8uZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpLG8ucmVtb3ZlRGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpfSksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkudG9vbHRpcFwiLHQudWkudG9vbHRpcCx7b3B0aW9uczp7dG9vbHRpcENsYXNzOm51bGx9LF90b29sdGlwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpO3JldHVybiB0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzJiZ0LnRvb2x0aXAuYWRkQ2xhc3ModGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyksdH19KSx0LnVpLnRvb2x0aXB9KSxmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSx0KTp0KFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3JlcXVpcmUoXCJqcXVlcnlcIik6d2luZG93LmpRdWVyeXx8d2luZG93LlplcHRvKX0oZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbyxhLHI9ZnVuY3Rpb24oKXt9LGw9ISF3aW5kb3cualF1ZXJ5LGg9dCh3aW5kb3cpLGM9ZnVuY3Rpb24odCxpKXtlLmV2Lm9uKFwibWZwXCIrdCtcIi5tZnBcIixpKX0sdT1mdW5jdGlvbihlLGksbixzKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBvLmNsYXNzTmFtZT1cIm1mcC1cIitlLG4mJihvLmlubmVySFRNTD1uKSxzP2kmJmkuYXBwZW5kQ2hpbGQobyk6KG89dChvKSxpJiZvLmFwcGVuZFRvKGkpKSxvfSxkPWZ1bmN0aW9uKGksbil7ZS5ldi50cmlnZ2VySGFuZGxlcihcIm1mcFwiK2ksbiksZS5zdC5jYWxsYmFja3MmJihpPWkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkraS5zbGljZSgxKSxlLnN0LmNhbGxiYWNrc1tpXSYmZS5zdC5jYWxsYmFja3NbaV0uYXBwbHkoZSx0LmlzQXJyYXkobik/bjpbbl0pKX0scD1mdW5jdGlvbihpKXtyZXR1cm4gaT09PWEmJmUuY3VyclRlbXBsYXRlLmNsb3NlQnRufHwoZS5jdXJyVGVtcGxhdGUuY2xvc2VCdG49dChlLnN0LmNsb3NlTWFya3VwLnJlcGxhY2UoXCIldGl0bGUlXCIsZS5zdC50Q2xvc2UpKSxhPWkpLGUuY3VyclRlbXBsYXRlLmNsb3NlQnRufSxmPWZ1bmN0aW9uKCl7dC5tYWduaWZpY1BvcHVwLmluc3RhbmNlfHwoKGU9bmV3IHIpLmluaXQoKSx0Lm1hZ25pZmljUG9wdXAuaW5zdGFuY2U9ZSl9O3IucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpyLGluaXQ6ZnVuY3Rpb24oKXt2YXIgaT1uYXZpZ2F0b3IuYXBwVmVyc2lvbjtlLmlzTG93SUU9ZS5pc0lFOD1kb2N1bWVudC5hbGwmJiFkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLGUuaXNBbmRyb2lkPS9hbmRyb2lkL2dpLnRlc3QoaSksZS5pc0lPUz0vaXBob25lfGlwYWR8aXBvZC9naS50ZXN0KGkpLGUuc3VwcG9ydHNUcmFuc2l0aW9uPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIikuc3R5bGUsZT1bXCJtc1wiLFwiT1wiLFwiTW96XCIsXCJXZWJraXRcIl07aWYodm9pZCAwIT09dC50cmFuc2l0aW9uKXJldHVybiEwO2Zvcig7ZS5sZW5ndGg7KWlmKGUucG9wKCkrXCJUcmFuc2l0aW9uXCJpbiB0KXJldHVybiEwO3JldHVybiExfSgpLGUucHJvYmFibHlNb2JpbGU9ZS5pc0FuZHJvaWR8fGUuaXNJT1N8fC8oT3BlcmEgTWluaSl8S2luZGxlfHdlYk9TfEJsYWNrQmVycnl8KE9wZXJhIE1vYmkpfChXaW5kb3dzIFBob25lKXxJRU1vYmlsZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj10KGRvY3VtZW50KSxlLnBvcHVwc0NhY2hlPXt9fSxvcGVuOmZ1bmN0aW9uKGkpe3ZhciBzO2lmKCExPT09aS5pc09iail7ZS5pdGVtcz1pLml0ZW1zLnRvQXJyYXkoKSxlLmluZGV4PTA7dmFyIGEscj1pLml0ZW1zO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGE9cltzXSkucGFyc2VkJiYoYT1hLmVsWzBdKSxhPT09aS5lbFswXSl7ZS5pbmRleD1zO2JyZWFrfX1lbHNlIGUuaXRlbXM9dC5pc0FycmF5KGkuaXRlbXMpP2kuaXRlbXM6W2kuaXRlbXNdLGUuaW5kZXg9aS5pbmRleHx8MDtpZighZS5pc09wZW4pe2UudHlwZXM9W10sbz1cIlwiLGkubWFpbkVsJiZpLm1haW5FbC5sZW5ndGg/ZS5ldj1pLm1haW5FbC5lcSgwKTplLmV2PW4saS5rZXk/KGUucG9wdXBzQ2FjaGVbaS5rZXldfHwoZS5wb3B1cHNDYWNoZVtpLmtleV09e30pLGUuY3VyclRlbXBsYXRlPWUucG9wdXBzQ2FjaGVbaS5rZXldKTplLmN1cnJUZW1wbGF0ZT17fSxlLnN0PXQuZXh0ZW5kKCEwLHt9LHQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cyxpKSxlLmZpeGVkQ29udGVudFBvcz1cImF1dG9cIj09PWUuc3QuZml4ZWRDb250ZW50UG9zPyFlLnByb2JhYmx5TW9iaWxlOmUuc3QuZml4ZWRDb250ZW50UG9zLGUuc3QubW9kYWwmJihlLnN0LmNsb3NlT25Db250ZW50Q2xpY2s9ITEsZS5zdC5jbG9zZU9uQmdDbGljaz0hMSxlLnN0LnNob3dDbG9zZUJ0bj0hMSxlLnN0LmVuYWJsZUVzY2FwZUtleT0hMSksZS5iZ092ZXJsYXl8fChlLmJnT3ZlcmxheT11KFwiYmdcIikub24oXCJjbGljay5tZnBcIixmdW5jdGlvbigpe2UuY2xvc2UoKX0pLGUud3JhcD11KFwid3JhcFwiKS5hdHRyKFwidGFiaW5kZXhcIiwtMSkub24oXCJjbGljay5tZnBcIixmdW5jdGlvbih0KXtlLl9jaGVja0lmQ2xvc2UodC50YXJnZXQpJiZlLmNsb3NlKCl9KSxlLmNvbnRhaW5lcj11KFwiY29udGFpbmVyXCIsZS53cmFwKSksZS5jb250ZW50Q29udGFpbmVyPXUoXCJjb250ZW50XCIpLGUuc3QucHJlbG9hZGVyJiYoZS5wcmVsb2FkZXI9dShcInByZWxvYWRlclwiLGUuY29udGFpbmVyLGUuc3QudExvYWRpbmcpKTt2YXIgbD10Lm1hZ25pZmljUG9wdXAubW9kdWxlcztmb3Iocz0wO3M8bC5sZW5ndGg7cysrKXt2YXIgZj1sW3NdO2Y9Zi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStmLnNsaWNlKDEpLGVbXCJpbml0XCIrZl0uY2FsbChlKX1kKFwiQmVmb3JlT3BlblwiKSxlLnN0LnNob3dDbG9zZUJ0biYmKGUuc3QuY2xvc2VCdG5JbnNpZGU/KGMoXCJNYXJrdXBQYXJzZVwiLGZ1bmN0aW9uKHQsZSxpLG4pe2kuY2xvc2VfcmVwbGFjZVdpdGg9cChuLnR5cGUpfSksbys9XCIgbWZwLWNsb3NlLWJ0bi1pblwiKTplLndyYXAuYXBwZW5kKHAoKSkpLGUuc3QuYWxpZ25Ub3AmJihvKz1cIiBtZnAtYWxpZ24tdG9wXCIpLGUuZml4ZWRDb250ZW50UG9zP2Uud3JhcC5jc3Moe292ZXJmbG93OmUuc3Qub3ZlcmZsb3dZLG92ZXJmbG93WDpcImhpZGRlblwiLG92ZXJmbG93WTplLnN0Lm92ZXJmbG93WX0pOmUud3JhcC5jc3Moe3RvcDpoLnNjcm9sbFRvcCgpLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLCghMT09PWUuc3QuZml4ZWRCZ1Bvc3x8XCJhdXRvXCI9PT1lLnN0LmZpeGVkQmdQb3MmJiFlLmZpeGVkQ29udGVudFBvcykmJmUuYmdPdmVybGF5LmNzcyh7aGVpZ2h0Om4uaGVpZ2h0KCkscG9zaXRpb246XCJhYnNvbHV0ZVwifSksZS5zdC5lbmFibGVFc2NhcGVLZXkmJm4ub24oXCJrZXl1cC5tZnBcIixmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmZS5jbG9zZSgpfSksaC5vbihcInJlc2l6ZS5tZnBcIixmdW5jdGlvbigpe2UudXBkYXRlU2l6ZSgpfSksZS5zdC5jbG9zZU9uQ29udGVudENsaWNrfHwobys9XCIgbWZwLWF1dG8tY3Vyc29yXCIpLG8mJmUud3JhcC5hZGRDbGFzcyhvKTt2YXIgZz1lLndIPWguaGVpZ2h0KCksbT17fTtpZihlLmZpeGVkQ29udGVudFBvcyYmZS5faGFzU2Nyb2xsQmFyKGcpKXt2YXIgdj1lLl9nZXRTY3JvbGxiYXJTaXplKCk7diYmKG0ubWFyZ2luUmlnaHQ9dil9ZS5maXhlZENvbnRlbnRQb3MmJihlLmlzSUU3P3QoXCJib2R5LCBodG1sXCIpLmNzcyhcIm92ZXJmbG93XCIsXCJoaWRkZW5cIik6bS5vdmVyZmxvdz1cImhpZGRlblwiKTt2YXIgYj1lLnN0Lm1haW5DbGFzcztyZXR1cm4gZS5pc0lFNyYmKGIrPVwiIG1mcC1pZTdcIiksYiYmZS5fYWRkQ2xhc3NUb01GUChiKSxlLnVwZGF0ZUl0ZW1IVE1MKCksZChcIkJ1aWxkQ29udHJvbHNcIiksdChcImh0bWxcIikuY3NzKG0pLGUuYmdPdmVybGF5LmFkZChlLndyYXApLnByZXBlbmRUbyhlLnN0LnByZXBlbmRUb3x8dChkb2N1bWVudC5ib2R5KSksZS5fbGFzdEZvY3VzZWRFbD1kb2N1bWVudC5hY3RpdmVFbGVtZW50LHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNvbnRlbnQ/KGUuX2FkZENsYXNzVG9NRlAoXCJtZnAtcmVhZHlcIiksZS5fc2V0Rm9jdXMoKSk6ZS5iZ092ZXJsYXkuYWRkQ2xhc3MoXCJtZnAtcmVhZHlcIiksbi5vbihcImZvY3VzaW4ubWZwXCIsZS5fb25Gb2N1c0luKX0sMTYpLGUuaXNPcGVuPSEwLGUudXBkYXRlU2l6ZShnKSxkKFwiT3BlblwiKSxpfWUudXBkYXRlSXRlbUhUTUwoKX0sY2xvc2U6ZnVuY3Rpb24oKXtlLmlzT3BlbiYmKGQoXCJCZWZvcmVDbG9zZVwiKSxlLmlzT3Blbj0hMSxlLnN0LnJlbW92YWxEZWxheSYmIWUuaXNMb3dJRSYmZS5zdXBwb3J0c1RyYW5zaXRpb24/KGUuX2FkZENsYXNzVG9NRlAoXCJtZnAtcmVtb3ZpbmdcIiksc2V0VGltZW91dChmdW5jdGlvbigpe2UuX2Nsb3NlKCl9LGUuc3QucmVtb3ZhbERlbGF5KSk6ZS5fY2xvc2UoKSl9LF9jbG9zZTpmdW5jdGlvbigpe2QoXCJDbG9zZVwiKTt2YXIgaT1cIm1mcC1yZW1vdmluZyBtZnAtcmVhZHkgXCI7aWYoZS5iZ092ZXJsYXkuZGV0YWNoKCksZS53cmFwLmRldGFjaCgpLGUuY29udGFpbmVyLmVtcHR5KCksZS5zdC5tYWluQ2xhc3MmJihpKz1lLnN0Lm1haW5DbGFzcytcIiBcIiksZS5fcmVtb3ZlQ2xhc3NGcm9tTUZQKGkpLGUuZml4ZWRDb250ZW50UG9zKXt2YXIgcz17bWFyZ2luUmlnaHQ6XCJcIn07ZS5pc0lFNz90KFwiYm9keSwgaHRtbFwiKS5jc3MoXCJvdmVyZmxvd1wiLFwiXCIpOnMub3ZlcmZsb3c9XCJcIix0KFwiaHRtbFwiKS5jc3Mocyl9bi5vZmYoXCJrZXl1cC5tZnAgZm9jdXNpbi5tZnBcIiksZS5ldi5vZmYoXCIubWZwXCIpLGUud3JhcC5hdHRyKFwiY2xhc3NcIixcIm1mcC13cmFwXCIpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKSxlLmJnT3ZlcmxheS5hdHRyKFwiY2xhc3NcIixcIm1mcC1iZ1wiKSxlLmNvbnRhaW5lci5hdHRyKFwiY2xhc3NcIixcIm1mcC1jb250YWluZXJcIiksIWUuc3Quc2hvd0Nsb3NlQnRufHxlLnN0LmNsb3NlQnRuSW5zaWRlJiYhMCE9PWUuY3VyclRlbXBsYXRlW2UuY3Vyckl0ZW0udHlwZV18fGUuY3VyclRlbXBsYXRlLmNsb3NlQnRuJiZlLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bi5kZXRhY2goKSxlLnN0LmF1dG9Gb2N1c0xhc3QmJmUuX2xhc3RGb2N1c2VkRWwmJnQoZS5fbGFzdEZvY3VzZWRFbCkuZm9jdXMoKSxlLmN1cnJJdGVtPW51bGwsZS5jb250ZW50PW51bGwsZS5jdXJyVGVtcGxhdGU9bnVsbCxlLnByZXZIZWlnaHQ9MCxkKFwiQWZ0ZXJDbG9zZVwiKX0sdXBkYXRlU2l6ZTpmdW5jdGlvbih0KXtpZihlLmlzSU9TKXt2YXIgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgvd2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQqaTtlLndyYXAuY3NzKFwiaGVpZ2h0XCIsbiksZS53SD1ufWVsc2UgZS53SD10fHxoLmhlaWdodCgpO2UuZml4ZWRDb250ZW50UG9zfHxlLndyYXAuY3NzKFwiaGVpZ2h0XCIsZS53SCksZChcIlJlc2l6ZVwiKX0sdXBkYXRlSXRlbUhUTUw6ZnVuY3Rpb24oKXt2YXIgaT1lLml0ZW1zW2UuaW5kZXhdO2UuY29udGVudENvbnRhaW5lci5kZXRhY2goKSxlLmNvbnRlbnQmJmUuY29udGVudC5kZXRhY2goKSxpLnBhcnNlZHx8KGk9ZS5wYXJzZUVsKGUuaW5kZXgpKTt2YXIgbj1pLnR5cGU7aWYoZChcIkJlZm9yZUNoYW5nZVwiLFtlLmN1cnJJdGVtP2UuY3Vyckl0ZW0udHlwZTpcIlwiLG5dKSxlLmN1cnJJdGVtPWksIWUuY3VyclRlbXBsYXRlW25dKXt2YXIgbz0hIWUuc3Rbbl0mJmUuc3Rbbl0ubWFya3VwO2QoXCJGaXJzdE1hcmt1cFBhcnNlXCIsbyksZS5jdXJyVGVtcGxhdGVbbl09IW98fHQobyl9cyYmcyE9PWkudHlwZSYmZS5jb250YWluZXIucmVtb3ZlQ2xhc3MoXCJtZnAtXCIrcytcIi1ob2xkZXJcIik7dmFyIGE9ZVtcImdldFwiK24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKV0oaSxlLmN1cnJUZW1wbGF0ZVtuXSk7ZS5hcHBlbmRDb250ZW50KGEsbiksaS5wcmVsb2FkZWQ9ITAsZChcIkNoYW5nZVwiLGkpLHM9aS50eXBlLGUuY29udGFpbmVyLnByZXBlbmQoZS5jb250ZW50Q29udGFpbmVyKSxkKFwiQWZ0ZXJDaGFuZ2VcIil9LGFwcGVuZENvbnRlbnQ6ZnVuY3Rpb24odCxpKXtlLmNvbnRlbnQ9dCx0P2Uuc3Quc2hvd0Nsb3NlQnRuJiZlLnN0LmNsb3NlQnRuSW5zaWRlJiYhMD09PWUuY3VyclRlbXBsYXRlW2ldP2UuY29udGVudC5maW5kKFwiLm1mcC1jbG9zZVwiKS5sZW5ndGh8fGUuY29udGVudC5hcHBlbmQocCgpKTplLmNvbnRlbnQ9dDplLmNvbnRlbnQ9XCJcIixkKFwiQmVmb3JlQXBwZW5kXCIpLGUuY29udGFpbmVyLmFkZENsYXNzKFwibWZwLVwiK2krXCItaG9sZGVyXCIpLGUuY29udGVudENvbnRhaW5lci5hcHBlbmQoZS5jb250ZW50KX0scGFyc2VFbDpmdW5jdGlvbihpKXt2YXIgbixzPWUuaXRlbXNbaV07aWYocy50YWdOYW1lP3M9e2VsOnQocyl9OihuPXMudHlwZSxzPXtkYXRhOnMsc3JjOnMuc3JjfSkscy5lbCl7Zm9yKHZhciBvPWUudHlwZXMsYT0wO2E8by5sZW5ndGg7YSsrKWlmKHMuZWwuaGFzQ2xhc3MoXCJtZnAtXCIrb1thXSkpe249b1thXTticmVha31zLnNyYz1zLmVsLmF0dHIoXCJkYXRhLW1mcC1zcmNcIikscy5zcmN8fChzLnNyYz1zLmVsLmF0dHIoXCJocmVmXCIpKX1yZXR1cm4gcy50eXBlPW58fGUuc3QudHlwZXx8XCJpbmxpbmVcIixzLmluZGV4PWkscy5wYXJzZWQ9ITAsZS5pdGVtc1tpXT1zLGQoXCJFbGVtZW50UGFyc2VcIixzKSxlLml0ZW1zW2ldfSxhZGRHcm91cDpmdW5jdGlvbih0LGkpe3ZhciBuPWZ1bmN0aW9uKG4pe24ubWZwRWw9dGhpcyxlLl9vcGVuQ2xpY2sobix0LGkpfTtpfHwoaT17fSk7dmFyIHM9XCJjbGljay5tYWduaWZpY1BvcHVwXCI7aS5tYWluRWw9dCxpLml0ZW1zPyhpLmlzT2JqPSEwLHQub2ZmKHMpLm9uKHMsbikpOihpLmlzT2JqPSExLGkuZGVsZWdhdGU/dC5vZmYocykub24ocyxpLmRlbGVnYXRlLG4pOihpLml0ZW1zPXQsdC5vZmYocykub24ocyxuKSkpfSxfb3BlbkNsaWNrOmZ1bmN0aW9uKGksbixzKXtpZigodm9pZCAwIT09cy5taWRDbGljaz9zLm1pZENsaWNrOnQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5taWRDbGljayl8fCEoMj09PWkud2hpY2h8fGkuY3RybEtleXx8aS5tZXRhS2V5fHxpLmFsdEtleXx8aS5zaGlmdEtleSkpe3ZhciBvPXZvaWQgMCE9PXMuZGlzYWJsZU9uP3MuZGlzYWJsZU9uOnQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5kaXNhYmxlT247aWYobylpZih0LmlzRnVuY3Rpb24obykpe2lmKCFvLmNhbGwoZSkpcmV0dXJuITB9ZWxzZSBpZihoLndpZHRoKCk8bylyZXR1cm4hMDtpLnR5cGUmJihpLnByZXZlbnREZWZhdWx0KCksZS5pc09wZW4mJmkuc3RvcFByb3BhZ2F0aW9uKCkpLHMuZWw9dChpLm1mcEVsKSxzLmRlbGVnYXRlJiYocy5pdGVtcz1uLmZpbmQocy5kZWxlZ2F0ZSkpLGUub3BlbihzKX19LHVwZGF0ZVN0YXR1czpmdW5jdGlvbih0LG4pe2lmKGUucHJlbG9hZGVyKXtpIT09dCYmZS5jb250YWluZXIucmVtb3ZlQ2xhc3MoXCJtZnAtcy1cIitpKSxufHxcImxvYWRpbmdcIiE9PXR8fChuPWUuc3QudExvYWRpbmcpO3ZhciBzPXtzdGF0dXM6dCx0ZXh0Om59O2QoXCJVcGRhdGVTdGF0dXNcIixzKSx0PXMuc3RhdHVzLG49cy50ZXh0LGUucHJlbG9hZGVyLmh0bWwobiksZS5wcmVsb2FkZXIuZmluZChcImFcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9KSxlLmNvbnRhaW5lci5hZGRDbGFzcyhcIm1mcC1zLVwiK3QpLGk9dH19LF9jaGVja0lmQ2xvc2U6ZnVuY3Rpb24oaSl7aWYoIXQoaSkuaGFzQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKSl7dmFyIG49ZS5zdC5jbG9zZU9uQ29udGVudENsaWNrLHM9ZS5zdC5jbG9zZU9uQmdDbGljaztpZihuJiZzKXJldHVybiEwO2lmKCFlLmNvbnRlbnR8fHQoaSkuaGFzQ2xhc3MoXCJtZnAtY2xvc2VcIil8fGUucHJlbG9hZGVyJiZpPT09ZS5wcmVsb2FkZXJbMF0pcmV0dXJuITA7aWYoaT09PWUuY29udGVudFswXXx8dC5jb250YWlucyhlLmNvbnRlbnRbMF0saSkpe2lmKG4pcmV0dXJuITB9ZWxzZSBpZihzJiZ0LmNvbnRhaW5zKGRvY3VtZW50LGkpKXJldHVybiEwO3JldHVybiExfX0sX2FkZENsYXNzVG9NRlA6ZnVuY3Rpb24odCl7ZS5iZ092ZXJsYXkuYWRkQ2xhc3ModCksZS53cmFwLmFkZENsYXNzKHQpfSxfcmVtb3ZlQ2xhc3NGcm9tTUZQOmZ1bmN0aW9uKHQpe3RoaXMuYmdPdmVybGF5LnJlbW92ZUNsYXNzKHQpLGUud3JhcC5yZW1vdmVDbGFzcyh0KX0sX2hhc1Njcm9sbEJhcjpmdW5jdGlvbih0KXtyZXR1cm4oZS5pc0lFNz9uLmhlaWdodCgpOmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KT4odHx8aC5oZWlnaHQoKSl9LF9zZXRGb2N1czpmdW5jdGlvbigpeyhlLnN0LmZvY3VzP2UuY29udGVudC5maW5kKGUuc3QuZm9jdXMpLmVxKDApOmUud3JhcCkuZm9jdXMoKX0sX29uRm9jdXNJbjpmdW5jdGlvbihpKXtpZihpLnRhcmdldCE9PWUud3JhcFswXSYmIXQuY29udGFpbnMoZS53cmFwWzBdLGkudGFyZ2V0KSlyZXR1cm4gZS5fc2V0Rm9jdXMoKSwhMX0sXG5fcGFyc2VNYXJrdXA6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzO24uZGF0YSYmKGk9dC5leHRlbmQobi5kYXRhLGkpKSxkKFwiTWFya3VwUGFyc2VcIixbZSxpLG5dKSx0LmVhY2goaSxmdW5jdGlvbihpLG4pe2lmKHZvaWQgMD09PW58fCExPT09bilyZXR1cm4hMDtpZigocz1pLnNwbGl0KFwiX1wiKSkubGVuZ3RoPjEpe3ZhciBvPWUuZmluZChcIi5tZnAtXCIrc1swXSk7aWYoby5sZW5ndGg+MCl7dmFyIGE9c1sxXTtcInJlcGxhY2VXaXRoXCI9PT1hP29bMF0hPT1uWzBdJiZvLnJlcGxhY2VXaXRoKG4pOlwiaW1nXCI9PT1hP28uaXMoXCJpbWdcIik/by5hdHRyKFwic3JjXCIsbik6by5yZXBsYWNlV2l0aCh0KFwiPGltZz5cIikuYXR0cihcInNyY1wiLG4pLmF0dHIoXCJjbGFzc1wiLG8uYXR0cihcImNsYXNzXCIpKSk6by5hdHRyKHNbMV0sbil9fWVsc2UgZS5maW5kKFwiLm1mcC1cIitpKS5odG1sKG4pfSl9LF9nZXRTY3JvbGxiYXJTaXplOmZ1bmN0aW9uKCl7aWYodm9pZCAwPT09ZS5zY3JvbGxiYXJTaXplKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3Quc3R5bGUuY3NzVGV4dD1cIndpZHRoOiA5OXB4OyBoZWlnaHQ6IDk5cHg7IG92ZXJmbG93OiBzY3JvbGw7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtOTk5OXB4O1wiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCksZS5zY3JvbGxiYXJTaXplPXQub2Zmc2V0V2lkdGgtdC5jbGllbnRXaWR0aCxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpfXJldHVybiBlLnNjcm9sbGJhclNpemV9fSx0Lm1hZ25pZmljUG9wdXA9e2luc3RhbmNlOm51bGwscHJvdG86ci5wcm90b3R5cGUsbW9kdWxlczpbXSxvcGVuOmZ1bmN0aW9uKGUsaSl7cmV0dXJuIGYoKSwoZT1lP3QuZXh0ZW5kKCEwLHt9LGUpOnt9KS5pc09iaj0hMCxlLmluZGV4PWl8fDAsdGhpcy5pbnN0YW5jZS5vcGVuKGUpfSxjbG9zZTpmdW5jdGlvbigpe3JldHVybiB0Lm1hZ25pZmljUG9wdXAuaW5zdGFuY2UmJnQubWFnbmlmaWNQb3B1cC5pbnN0YW5jZS5jbG9zZSgpfSxyZWdpc3Rlck1vZHVsZTpmdW5jdGlvbihlLGkpe2kub3B0aW9ucyYmKHQubWFnbmlmaWNQb3B1cC5kZWZhdWx0c1tlXT1pLm9wdGlvbnMpLHQuZXh0ZW5kKHRoaXMucHJvdG8saS5wcm90byksdGhpcy5tb2R1bGVzLnB1c2goZSl9LGRlZmF1bHRzOntkaXNhYmxlT246MCxrZXk6bnVsbCxtaWRDbGljazohMSxtYWluQ2xhc3M6XCJcIixwcmVsb2FkZXI6ITAsZm9jdXM6XCJcIixjbG9zZU9uQ29udGVudENsaWNrOiExLGNsb3NlT25CZ0NsaWNrOiEwLGNsb3NlQnRuSW5zaWRlOiEwLHNob3dDbG9zZUJ0bjohMCxlbmFibGVFc2NhcGVLZXk6ITAsbW9kYWw6ITEsYWxpZ25Ub3A6ITEscmVtb3ZhbERlbGF5OjAscHJlcGVuZFRvOm51bGwsZml4ZWRDb250ZW50UG9zOlwiYXV0b1wiLGZpeGVkQmdQb3M6XCJhdXRvXCIsb3ZlcmZsb3dZOlwiYXV0b1wiLGNsb3NlTWFya3VwOic8YnV0dG9uIHRpdGxlPVwiJXRpdGxlJVwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1mcC1jbG9zZVwiPiYjMjE1OzwvYnV0dG9uPicsdENsb3NlOlwiQ2xvc2UgKEVzYylcIix0TG9hZGluZzpcIkxvYWRpbmcuLi5cIixhdXRvRm9jdXNMYXN0OiEwfX0sdC5mbi5tYWduaWZpY1BvcHVwPWZ1bmN0aW9uKGkpe2YoKTt2YXIgbj10KHRoaXMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpKWlmKFwib3BlblwiPT09aSl7dmFyIHMsbz1sP24uZGF0YShcIm1hZ25pZmljUG9wdXBcIik6blswXS5tYWduaWZpY1BvcHVwLGE9cGFyc2VJbnQoYXJndW1lbnRzWzFdLDEwKXx8MDtvLml0ZW1zP3M9by5pdGVtc1thXToocz1uLG8uZGVsZWdhdGUmJihzPXMuZmluZChvLmRlbGVnYXRlKSkscz1zLmVxKGEpKSxlLl9vcGVuQ2xpY2soe21mcEVsOnN9LG4sbyl9ZWxzZSBlLmlzT3BlbiYmZVtpXS5hcHBseShlLEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSk7ZWxzZSBpPXQuZXh0ZW5kKCEwLHt9LGkpLGw/bi5kYXRhKFwibWFnbmlmaWNQb3B1cFwiLGkpOm5bMF0ubWFnbmlmaWNQb3B1cD1pLGUuYWRkR3JvdXAobixpKTtyZXR1cm4gbn07dmFyIGcsbSx2LGI9ZnVuY3Rpb24oKXt2JiYobS5hZnRlcih2LmFkZENsYXNzKGcpKS5kZXRhY2goKSx2PW51bGwpfTt0Lm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJpbmxpbmVcIix7b3B0aW9uczp7aGlkZGVuQ2xhc3M6XCJoaWRlXCIsbWFya3VwOlwiXCIsdE5vdEZvdW5kOlwiQ29udGVudCBub3QgZm91bmRcIn0scHJvdG86e2luaXRJbmxpbmU6ZnVuY3Rpb24oKXtlLnR5cGVzLnB1c2goXCJpbmxpbmVcIiksYyhcIkNsb3NlLmlubGluZVwiLGZ1bmN0aW9uKCl7YigpfSl9LGdldElubGluZTpmdW5jdGlvbihpLG4pe2lmKGIoKSxpLnNyYyl7dmFyIHM9ZS5zdC5pbmxpbmUsbz10KGkuc3JjKTtpZihvLmxlbmd0aCl7dmFyIGE9b1swXS5wYXJlbnROb2RlO2EmJmEudGFnTmFtZSYmKG18fChnPXMuaGlkZGVuQ2xhc3MsbT11KGcpLGc9XCJtZnAtXCIrZyksdj1vLmFmdGVyKG0pLmRldGFjaCgpLnJlbW92ZUNsYXNzKGcpKSxlLnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpfWVsc2UgZS51cGRhdGVTdGF0dXMoXCJlcnJvclwiLHMudE5vdEZvdW5kKSxvPXQoXCI8ZGl2PlwiKTtyZXR1cm4gaS5pbmxpbmVFbGVtZW50PW8sb31yZXR1cm4gZS51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKSxlLl9wYXJzZU1hcmt1cChuLHt9LGkpLG59fX0pO3ZhciBfLHk9ZnVuY3Rpb24oKXtfJiZ0KGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKF8pfSx3PWZ1bmN0aW9uKCl7eSgpLGUucmVxJiZlLnJlcS5hYm9ydCgpfTt0Lm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJhamF4XCIse29wdGlvbnM6e3NldHRpbmdzOm51bGwsY3Vyc29yOlwibWZwLWFqYXgtY3VyXCIsdEVycm9yOic8YSBocmVmPVwiJXVybCVcIj5UaGUgY29udGVudDwvYT4gY291bGQgbm90IGJlIGxvYWRlZC4nfSxwcm90bzp7aW5pdEFqYXg6ZnVuY3Rpb24oKXtlLnR5cGVzLnB1c2goXCJhamF4XCIpLF89ZS5zdC5hamF4LmN1cnNvcixjKFwiQ2xvc2UuYWpheFwiLHcpLGMoXCJCZWZvcmVDaGFuZ2UuYWpheFwiLHcpfSxnZXRBamF4OmZ1bmN0aW9uKGkpe18mJnQoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3MoXyksZS51cGRhdGVTdGF0dXMoXCJsb2FkaW5nXCIpO3ZhciBuPXQuZXh0ZW5kKHt1cmw6aS5zcmMsc3VjY2VzczpmdW5jdGlvbihuLHMsbyl7dmFyIGE9e2RhdGE6bix4aHI6b307ZChcIlBhcnNlQWpheFwiLGEpLGUuYXBwZW5kQ29udGVudCh0KGEuZGF0YSksXCJhamF4XCIpLGkuZmluaXNoZWQ9ITAseSgpLGUuX3NldEZvY3VzKCksc2V0VGltZW91dChmdW5jdGlvbigpe2Uud3JhcC5hZGRDbGFzcyhcIm1mcC1yZWFkeVwiKX0sMTYpLGUudXBkYXRlU3RhdHVzKFwicmVhZHlcIiksZChcIkFqYXhDb250ZW50QWRkZWRcIil9LGVycm9yOmZ1bmN0aW9uKCl7eSgpLGkuZmluaXNoZWQ9aS5sb2FkRXJyb3I9ITAsZS51cGRhdGVTdGF0dXMoXCJlcnJvclwiLGUuc3QuYWpheC50RXJyb3IucmVwbGFjZShcIiV1cmwlXCIsaS5zcmMpKX19LGUuc3QuYWpheC5zZXR0aW5ncyk7cmV0dXJuIGUucmVxPXQuYWpheChuKSxcIlwifX19KTt2YXIgeDt0Lm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJpbWFnZVwiLHtvcHRpb25zOnttYXJrdXA6JzxkaXYgY2xhc3M9XCJtZnAtZmlndXJlXCI+PGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PjxmaWd1cmU+PGRpdiBjbGFzcz1cIm1mcC1pbWdcIj48L2Rpdj48ZmlnY2FwdGlvbj48ZGl2IGNsYXNzPVwibWZwLWJvdHRvbS1iYXJcIj48ZGl2IGNsYXNzPVwibWZwLXRpdGxlXCI+PC9kaXY+PGRpdiBjbGFzcz1cIm1mcC1jb3VudGVyXCI+PC9kaXY+PC9kaXY+PC9maWdjYXB0aW9uPjwvZmlndXJlPjwvZGl2PicsY3Vyc29yOlwibWZwLXpvb20tb3V0LWN1clwiLHRpdGxlU3JjOlwidGl0bGVcIix2ZXJ0aWNhbEZpdDohMCx0RXJyb3I6JzxhIGhyZWY9XCIldXJsJVwiPlRoZSBpbWFnZTwvYT4gY291bGQgbm90IGJlIGxvYWRlZC4nfSxwcm90bzp7aW5pdEltYWdlOmZ1bmN0aW9uKCl7dmFyIGk9ZS5zdC5pbWFnZSxuPVwiLmltYWdlXCI7ZS50eXBlcy5wdXNoKFwiaW1hZ2VcIiksYyhcIk9wZW5cIituLGZ1bmN0aW9uKCl7XCJpbWFnZVwiPT09ZS5jdXJySXRlbS50eXBlJiZpLmN1cnNvciYmdChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhpLmN1cnNvcil9KSxjKFwiQ2xvc2VcIituLGZ1bmN0aW9uKCl7aS5jdXJzb3ImJnQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoaS5jdXJzb3IpLGgub2ZmKFwicmVzaXplLm1mcFwiKX0pLGMoXCJSZXNpemVcIituLGUucmVzaXplSW1hZ2UpLGUuaXNMb3dJRSYmYyhcIkFmdGVyQ2hhbmdlXCIsZS5yZXNpemVJbWFnZSl9LHJlc2l6ZUltYWdlOmZ1bmN0aW9uKCl7dmFyIHQ9ZS5jdXJySXRlbTtpZih0JiZ0LmltZyYmZS5zdC5pbWFnZS52ZXJ0aWNhbEZpdCl7dmFyIGk9MDtlLmlzTG93SUUmJihpPXBhcnNlSW50KHQuaW1nLmNzcyhcInBhZGRpbmctdG9wXCIpLDEwKStwYXJzZUludCh0LmltZy5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwxMCkpLHQuaW1nLmNzcyhcIm1heC1oZWlnaHRcIixlLndILWkpfX0sX29uSW1hZ2VIYXNTaXplOmZ1bmN0aW9uKHQpe3QuaW1nJiYodC5oYXNTaXplPSEwLHgmJmNsZWFySW50ZXJ2YWwoeCksdC5pc0NoZWNraW5nSW1nU2l6ZT0hMSxkKFwiSW1hZ2VIYXNTaXplXCIsdCksdC5pbWdIaWRkZW4mJihlLmNvbnRlbnQmJmUuY29udGVudC5yZW1vdmVDbGFzcyhcIm1mcC1sb2FkaW5nXCIpLHQuaW1nSGlkZGVuPSExKSl9LGZpbmRJbWFnZVNpemU6ZnVuY3Rpb24odCl7dmFyIGk9MCxuPXQuaW1nWzBdLHM9ZnVuY3Rpb24obyl7eCYmY2xlYXJJbnRlcnZhbCh4KSx4PXNldEludGVydmFsKGZ1bmN0aW9uKCl7bi5uYXR1cmFsV2lkdGg+MD9lLl9vbkltYWdlSGFzU2l6ZSh0KTooaT4yMDAmJmNsZWFySW50ZXJ2YWwoeCksMz09KytpP3MoMTApOjQwPT09aT9zKDUwKToxMDA9PT1pJiZzKDUwMCkpfSxvKX07cygxKX0sZ2V0SW1hZ2U6ZnVuY3Rpb24oaSxuKXt2YXIgcz0wLG89ZnVuY3Rpb24oKXtpJiYoaS5pbWdbMF0uY29tcGxldGU/KGkuaW1nLm9mZihcIi5tZnBsb2FkZXJcIiksaT09PWUuY3Vyckl0ZW0mJihlLl9vbkltYWdlSGFzU2l6ZShpKSxlLnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpKSxpLmhhc1NpemU9ITAsaS5sb2FkZWQ9ITAsZChcIkltYWdlTG9hZENvbXBsZXRlXCIpKTorK3M8MjAwP3NldFRpbWVvdXQobywxMDApOmEoKSl9LGE9ZnVuY3Rpb24oKXtpJiYoaS5pbWcub2ZmKFwiLm1mcGxvYWRlclwiKSxpPT09ZS5jdXJySXRlbSYmKGUuX29uSW1hZ2VIYXNTaXplKGkpLGUudXBkYXRlU3RhdHVzKFwiZXJyb3JcIixyLnRFcnJvci5yZXBsYWNlKFwiJXVybCVcIixpLnNyYykpKSxpLmhhc1NpemU9ITAsaS5sb2FkZWQ9ITAsaS5sb2FkRXJyb3I9ITApfSxyPWUuc3QuaW1hZ2UsbD1uLmZpbmQoXCIubWZwLWltZ1wiKTtpZihsLmxlbmd0aCl7dmFyIGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtoLmNsYXNzTmFtZT1cIm1mcC1pbWdcIixpLmVsJiZpLmVsLmZpbmQoXCJpbWdcIikubGVuZ3RoJiYoaC5hbHQ9aS5lbC5maW5kKFwiaW1nXCIpLmF0dHIoXCJhbHRcIikpLGkuaW1nPXQoaCkub24oXCJsb2FkLm1mcGxvYWRlclwiLG8pLm9uKFwiZXJyb3IubWZwbG9hZGVyXCIsYSksaC5zcmM9aS5zcmMsbC5pcyhcImltZ1wiKSYmKGkuaW1nPWkuaW1nLmNsb25lKCkpLChoPWkuaW1nWzBdKS5uYXR1cmFsV2lkdGg+MD9pLmhhc1NpemU9ITA6aC53aWR0aHx8KGkuaGFzU2l6ZT0hMSl9cmV0dXJuIGUuX3BhcnNlTWFya3VwKG4se3RpdGxlOmZ1bmN0aW9uKGkpe2lmKGkuZGF0YSYmdm9pZCAwIT09aS5kYXRhLnRpdGxlKXJldHVybiBpLmRhdGEudGl0bGU7dmFyIG49ZS5zdC5pbWFnZS50aXRsZVNyYztpZihuKXtpZih0LmlzRnVuY3Rpb24obikpcmV0dXJuIG4uY2FsbChlLGkpO2lmKGkuZWwpcmV0dXJuIGkuZWwuYXR0cihuKXx8XCJcIn1yZXR1cm5cIlwifShpKSxpbWdfcmVwbGFjZVdpdGg6aS5pbWd9LGkpLGUucmVzaXplSW1hZ2UoKSxpLmhhc1NpemU/KHgmJmNsZWFySW50ZXJ2YWwoeCksaS5sb2FkRXJyb3I/KG4uYWRkQ2xhc3MoXCJtZnAtbG9hZGluZ1wiKSxlLnVwZGF0ZVN0YXR1cyhcImVycm9yXCIsci50RXJyb3IucmVwbGFjZShcIiV1cmwlXCIsaS5zcmMpKSk6KG4ucmVtb3ZlQ2xhc3MoXCJtZnAtbG9hZGluZ1wiKSxlLnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpKSxuKTooZS51cGRhdGVTdGF0dXMoXCJsb2FkaW5nXCIpLGkubG9hZGluZz0hMCxpLmhhc1NpemV8fChpLmltZ0hpZGRlbj0hMCxuLmFkZENsYXNzKFwibWZwLWxvYWRpbmdcIiksZS5maW5kSW1hZ2VTaXplKGkpKSxuKX19fSk7dmFyIEM7dC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiem9vbVwiLHtvcHRpb25zOntlbmFibGVkOiExLGVhc2luZzpcImVhc2UtaW4tb3V0XCIsZHVyYXRpb246MzAwLG9wZW5lcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhcImltZ1wiKT90OnQuZmluZChcImltZ1wiKX19LHByb3RvOntpbml0Wm9vbTpmdW5jdGlvbigpe3ZhciB0LGk9ZS5zdC56b29tLG49XCIuem9vbVwiO2lmKGkuZW5hYmxlZCYmZS5zdXBwb3J0c1RyYW5zaXRpb24pe3ZhciBzLG8sYT1pLmR1cmF0aW9uLHI9ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKS5yZW1vdmVBdHRyKFwiY2xhc3NcIikuYWRkQ2xhc3MoXCJtZnAtYW5pbWF0ZWQtaW1hZ2VcIiksbj1cImFsbCBcIitpLmR1cmF0aW9uLzFlMytcInMgXCIraS5lYXNpbmcscz17cG9zaXRpb246XCJmaXhlZFwiLHpJbmRleDo5OTk5LGxlZnQ6MCx0b3A6MCxcIi13ZWJraXQtYmFja2ZhY2UtdmlzaWJpbGl0eVwiOlwiaGlkZGVuXCJ9LG89XCJ0cmFuc2l0aW9uXCI7cmV0dXJuIHNbXCItd2Via2l0LVwiK29dPXNbXCItbW96LVwiK29dPXNbXCItby1cIitvXT1zW29dPW4sZS5jc3MocyksZX0sbD1mdW5jdGlvbigpe2UuY29udGVudC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJ2aXNpYmxlXCIpfTtjKFwiQnVpbGRDb250cm9sc1wiK24sZnVuY3Rpb24oKXtpZihlLl9hbGxvd1pvb20oKSl7aWYoY2xlYXJUaW1lb3V0KHMpLGUuY29udGVudC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIiksISh0PWUuX2dldEl0ZW1Ub1pvb20oKSkpcmV0dXJuIHZvaWQgbCgpOyhvPXIodCkpLmNzcyhlLl9nZXRPZmZzZXQoKSksZS53cmFwLmFwcGVuZChvKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmNzcyhlLl9nZXRPZmZzZXQoITApKSxzPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtsKCksc2V0VGltZW91dChmdW5jdGlvbigpe28ucmVtb3ZlKCksdD1vPW51bGwsZChcIlpvb21BbmltYXRpb25FbmRlZFwiKX0sMTYpfSxhKX0sMTYpfX0pLGMoXCJCZWZvcmVDbG9zZVwiK24sZnVuY3Rpb24oKXtpZihlLl9hbGxvd1pvb20oKSl7aWYoY2xlYXJUaW1lb3V0KHMpLGUuc3QucmVtb3ZhbERlbGF5PWEsIXQpe2lmKCEodD1lLl9nZXRJdGVtVG9ab29tKCkpKXJldHVybjtvPXIodCl9by5jc3MoZS5fZ2V0T2Zmc2V0KCEwKSksZS53cmFwLmFwcGVuZChvKSxlLmNvbnRlbnQuY3NzKFwidmlzaWJpbGl0eVwiLFwiaGlkZGVuXCIpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmNzcyhlLl9nZXRPZmZzZXQoKSl9LDE2KX19KSxjKFwiQ2xvc2VcIituLGZ1bmN0aW9uKCl7ZS5fYWxsb3dab29tKCkmJihsKCksbyYmby5yZW1vdmUoKSx0PW51bGwpfSl9fSxfYWxsb3dab29tOmZ1bmN0aW9uKCl7cmV0dXJuXCJpbWFnZVwiPT09ZS5jdXJySXRlbS50eXBlfSxfZ2V0SXRlbVRvWm9vbTpmdW5jdGlvbigpe3JldHVybiEhZS5jdXJySXRlbS5oYXNTaXplJiZlLmN1cnJJdGVtLmltZ30sX2dldE9mZnNldDpmdW5jdGlvbihpKXt2YXIgbixzPShuPWk/ZS5jdXJySXRlbS5pbWc6ZS5zdC56b29tLm9wZW5lcihlLmN1cnJJdGVtLmVsfHxlLmN1cnJJdGVtKSkub2Zmc2V0KCksbz1wYXJzZUludChuLmNzcyhcInBhZGRpbmctdG9wXCIpLDEwKSxhPXBhcnNlSW50KG4uY3NzKFwicGFkZGluZy1ib3R0b21cIiksMTApO3MudG9wLT10KHdpbmRvdykuc2Nyb2xsVG9wKCktbzt2YXIgcj17d2lkdGg6bi53aWR0aCgpLGhlaWdodDoobD9uLmlubmVySGVpZ2h0KCk6blswXS5vZmZzZXRIZWlnaHQpLWEtb307cmV0dXJuIHZvaWQgMD09PUMmJihDPXZvaWQgMCE9PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpLnN0eWxlLk1velRyYW5zZm9ybSksQz9yW1wiLW1vei10cmFuc2Zvcm1cIl09ci50cmFuc2Zvcm09XCJ0cmFuc2xhdGUoXCIrcy5sZWZ0K1wicHgsXCIrcy50b3ArXCJweClcIjooci5sZWZ0PXMubGVmdCxyLnRvcD1zLnRvcCkscn19fSk7dmFyIGs9ZnVuY3Rpb24odCl7aWYoZS5jdXJyVGVtcGxhdGUuaWZyYW1lKXt2YXIgaT1lLmN1cnJUZW1wbGF0ZS5pZnJhbWUuZmluZChcImlmcmFtZVwiKTtpLmxlbmd0aCYmKHR8fChpWzBdLnNyYz1cIi8vYWJvdXQ6YmxhbmtcIiksZS5pc0lFOCYmaS5jc3MoXCJkaXNwbGF5XCIsdD9cImJsb2NrXCI6XCJub25lXCIpKX19O3QubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcImlmcmFtZVwiLHtvcHRpb25zOnttYXJrdXA6JzxkaXYgY2xhc3M9XCJtZnAtaWZyYW1lLXNjYWxlclwiPjxkaXYgY2xhc3M9XCJtZnAtY2xvc2VcIj48L2Rpdj48aWZyYW1lIGNsYXNzPVwibWZwLWlmcmFtZVwiIHNyYz1cIi8vYWJvdXQ6YmxhbmtcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+PC9kaXY+JyxzcmNBY3Rpb246XCJpZnJhbWVfc3JjXCIscGF0dGVybnM6e3lvdXR1YmU6e2luZGV4OlwieW91dHViZS5jb21cIixpZDpcInY9XCIsc3JjOlwiLy93d3cueW91dHViZS5jb20vZW1iZWQvJWlkJT9hdXRvcGxheT0xXCJ9LHZpbWVvOntpbmRleDpcInZpbWVvLmNvbS9cIixpZDpcIi9cIixzcmM6XCIvL3BsYXllci52aW1lby5jb20vdmlkZW8vJWlkJT9hdXRvcGxheT0xXCJ9LGdtYXBzOntpbmRleDpcIi8vbWFwcy5nb29nbGUuXCIsc3JjOlwiJWlkJSZvdXRwdXQ9ZW1iZWRcIn19fSxwcm90bzp7aW5pdElmcmFtZTpmdW5jdGlvbigpe2UudHlwZXMucHVzaChcImlmcmFtZVwiKSxjKFwiQmVmb3JlQ2hhbmdlXCIsZnVuY3Rpb24odCxlLGkpe2UhPT1pJiYoXCJpZnJhbWVcIj09PWU/aygpOlwiaWZyYW1lXCI9PT1pJiZrKCEwKSl9KSxjKFwiQ2xvc2UuaWZyYW1lXCIsZnVuY3Rpb24oKXtrKCl9KX0sZ2V0SWZyYW1lOmZ1bmN0aW9uKGksbil7dmFyIHM9aS5zcmMsbz1lLnN0LmlmcmFtZTt0LmVhY2goby5wYXR0ZXJucyxmdW5jdGlvbigpe2lmKHMuaW5kZXhPZih0aGlzLmluZGV4KT4tMSlyZXR1cm4gdGhpcy5pZCYmKHM9XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuaWQ/cy5zdWJzdHIocy5sYXN0SW5kZXhPZih0aGlzLmlkKSt0aGlzLmlkLmxlbmd0aCxzLmxlbmd0aCk6dGhpcy5pZC5jYWxsKHRoaXMscykpLHM9dGhpcy5zcmMucmVwbGFjZShcIiVpZCVcIixzKSwhMX0pO3ZhciBhPXt9O3JldHVybiBvLnNyY0FjdGlvbiYmKGFbby5zcmNBY3Rpb25dPXMpLGUuX3BhcnNlTWFya3VwKG4sYSxpKSxlLnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpLG59fX0pO3ZhciBUPWZ1bmN0aW9uKHQpe3ZhciBpPWUuaXRlbXMubGVuZ3RoO3JldHVybiB0PmktMT90LWk6dDwwP2krdDp0fSxEPWZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdC5yZXBsYWNlKC8lY3VyciUvZ2ksZSsxKS5yZXBsYWNlKC8ldG90YWwlL2dpLGkpfTt0Lm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJnYWxsZXJ5XCIse29wdGlvbnM6e2VuYWJsZWQ6ITEsYXJyb3dNYXJrdXA6JzxidXR0b24gdGl0bGU9XCIldGl0bGUlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWZwLWFycm93IG1mcC1hcnJvdy0lZGlyJVwiPjwvYnV0dG9uPicscHJlbG9hZDpbMCwyXSxuYXZpZ2F0ZUJ5SW1nQ2xpY2s6ITAsYXJyb3dzOiEwLHRQcmV2OlwiUHJldmlvdXMgKExlZnQgYXJyb3cga2V5KVwiLHROZXh0OlwiTmV4dCAoUmlnaHQgYXJyb3cga2V5KVwiLHRDb3VudGVyOlwiJWN1cnIlIG9mICV0b3RhbCVcIn0scHJvdG86e2luaXRHYWxsZXJ5OmZ1bmN0aW9uKCl7dmFyIGk9ZS5zdC5nYWxsZXJ5LHM9XCIubWZwLWdhbGxlcnlcIjtpZihlLmRpcmVjdGlvbj0hMCwhaXx8IWkuZW5hYmxlZClyZXR1cm4hMTtvKz1cIiBtZnAtZ2FsbGVyeVwiLGMoXCJPcGVuXCIrcyxmdW5jdGlvbigpe2kubmF2aWdhdGVCeUltZ0NsaWNrJiZlLndyYXAub24oXCJjbGlja1wiK3MsXCIubWZwLWltZ1wiLGZ1bmN0aW9uKCl7aWYoZS5pdGVtcy5sZW5ndGg+MSlyZXR1cm4gZS5uZXh0KCksITF9KSxuLm9uKFwia2V5ZG93blwiK3MsZnVuY3Rpb24odCl7Mzc9PT10LmtleUNvZGU/ZS5wcmV2KCk6Mzk9PT10LmtleUNvZGUmJmUubmV4dCgpfSl9KSxjKFwiVXBkYXRlU3RhdHVzXCIrcyxmdW5jdGlvbih0LGkpe2kudGV4dCYmKGkudGV4dD1EKGkudGV4dCxlLmN1cnJJdGVtLmluZGV4LGUuaXRlbXMubGVuZ3RoKSl9KSxjKFwiTWFya3VwUGFyc2VcIitzLGZ1bmN0aW9uKHQsbixzLG8pe3ZhciBhPWUuaXRlbXMubGVuZ3RoO3MuY291bnRlcj1hPjE/RChpLnRDb3VudGVyLG8uaW5kZXgsYSk6XCJcIn0pLGMoXCJCdWlsZENvbnRyb2xzXCIrcyxmdW5jdGlvbigpe2lmKGUuaXRlbXMubGVuZ3RoPjEmJmkuYXJyb3dzJiYhZS5hcnJvd0xlZnQpe3ZhciBuPWkuYXJyb3dNYXJrdXAscz1lLmFycm93TGVmdD10KG4ucmVwbGFjZSgvJXRpdGxlJS9naSxpLnRQcmV2KS5yZXBsYWNlKC8lZGlyJS9naSxcImxlZnRcIikpLmFkZENsYXNzKFwibWZwLXByZXZlbnQtY2xvc2VcIiksbz1lLmFycm93UmlnaHQ9dChuLnJlcGxhY2UoLyV0aXRsZSUvZ2ksaS50TmV4dCkucmVwbGFjZSgvJWRpciUvZ2ksXCJyaWdodFwiKSkuYWRkQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKTtzLmNsaWNrKGZ1bmN0aW9uKCl7ZS5wcmV2KCl9KSxvLmNsaWNrKGZ1bmN0aW9uKCl7ZS5uZXh0KCl9KSxlLmNvbnRhaW5lci5hcHBlbmQocy5hZGQobykpfX0pLGMoXCJDaGFuZ2VcIitzLGZ1bmN0aW9uKCl7ZS5fcHJlbG9hZFRpbWVvdXQmJmNsZWFyVGltZW91dChlLl9wcmVsb2FkVGltZW91dCksZS5fcHJlbG9hZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe2UucHJlbG9hZE5lYXJieUltYWdlcygpLGUuX3ByZWxvYWRUaW1lb3V0PW51bGx9LDE2KX0pLGMoXCJDbG9zZVwiK3MsZnVuY3Rpb24oKXtuLm9mZihzKSxlLndyYXAub2ZmKFwiY2xpY2tcIitzKSxlLmFycm93UmlnaHQ9ZS5hcnJvd0xlZnQ9bnVsbH0pfSxuZXh0OmZ1bmN0aW9uKCl7ZS5kaXJlY3Rpb249ITAsZS5pbmRleD1UKGUuaW5kZXgrMSksZS51cGRhdGVJdGVtSFRNTCgpfSxwcmV2OmZ1bmN0aW9uKCl7ZS5kaXJlY3Rpb249ITEsZS5pbmRleD1UKGUuaW5kZXgtMSksZS51cGRhdGVJdGVtSFRNTCgpfSxnb1RvOmZ1bmN0aW9uKHQpe2UuZGlyZWN0aW9uPXQ+PWUuaW5kZXgsZS5pbmRleD10LGUudXBkYXRlSXRlbUhUTUwoKX0scHJlbG9hZE5lYXJieUltYWdlczpmdW5jdGlvbigpe3ZhciB0LGk9ZS5zdC5nYWxsZXJ5LnByZWxvYWQsbj1NYXRoLm1pbihpWzBdLGUuaXRlbXMubGVuZ3RoKSxzPU1hdGgubWluKGlbMV0sZS5pdGVtcy5sZW5ndGgpO2Zvcih0PTE7dDw9KGUuZGlyZWN0aW9uP3M6bik7dCsrKWUuX3ByZWxvYWRJdGVtKGUuaW5kZXgrdCk7Zm9yKHQ9MTt0PD0oZS5kaXJlY3Rpb24/bjpzKTt0KyspZS5fcHJlbG9hZEl0ZW0oZS5pbmRleC10KX0sX3ByZWxvYWRJdGVtOmZ1bmN0aW9uKGkpe2lmKGk9VChpKSwhZS5pdGVtc1tpXS5wcmVsb2FkZWQpe3ZhciBuPWUuaXRlbXNbaV07bi5wYXJzZWR8fChuPWUucGFyc2VFbChpKSksZChcIkxhenlMb2FkXCIsbiksXCJpbWFnZVwiPT09bi50eXBlJiYobi5pbWc9dCgnPGltZyBjbGFzcz1cIm1mcC1pbWdcIiAvPicpLm9uKFwibG9hZC5tZnBsb2FkZXJcIixmdW5jdGlvbigpe24uaGFzU2l6ZT0hMH0pLm9uKFwiZXJyb3IubWZwbG9hZGVyXCIsZnVuY3Rpb24oKXtuLmhhc1NpemU9ITAsbi5sb2FkRXJyb3I9ITAsZChcIkxhenlMb2FkRXJyb3JcIixuKX0pLmF0dHIoXCJzcmNcIixuLnNyYykpLG4ucHJlbG9hZGVkPSEwfX19fSksdC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwicmV0aW5hXCIse29wdGlvbnM6e3JlcGxhY2VTcmM6ZnVuY3Rpb24odCl7cmV0dXJuIHQuc3JjLnJlcGxhY2UoL1xcLlxcdyskLyxmdW5jdGlvbih0KXtyZXR1cm5cIkAyeFwiK3R9KX0scmF0aW86MX0scHJvdG86e2luaXRSZXRpbmE6ZnVuY3Rpb24oKXtpZih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xKXt2YXIgdD1lLnN0LnJldGluYSxpPXQucmF0aW87KGk9aXNOYU4oaSk/aSgpOmkpPjEmJihjKFwiSW1hZ2VIYXNTaXplLnJldGluYVwiLGZ1bmN0aW9uKHQsZSl7ZS5pbWcuY3NzKHtcIm1heC13aWR0aFwiOmUuaW1nWzBdLm5hdHVyYWxXaWR0aC9pLHdpZHRoOlwiMTAwJVwifSl9KSxjKFwiRWxlbWVudFBhcnNlLnJldGluYVwiLGZ1bmN0aW9uKGUsbil7bi5zcmM9dC5yZXBsYWNlU3JjKG4saSl9KSl9fX19KSxmKCl9KSxmdW5jdGlvbih0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFtcImpxdWVyeVwiXSx0KTpcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cz9tb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJqcXVlcnlcIikpOnQoalF1ZXJ5KX0oZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU9dGhpcyxpPWZ1bmN0aW9uKGkpe3JldHVybiB0LmlzTnVtZXJpYyhpKSYmKGk9TWF0aC5mbG9vcihpKSksdCgnb3B0aW9uW3ZhbHVlPVwiJytpKydcIl0nLGUuJGVsZW0pfSxuPWZ1bmN0aW9uKCl7dmFyIG49ZS5vcHRpb25zLmluaXRpYWxSYXRpbmc7cmV0dXJuIG4/aShuKTp0KFwib3B0aW9uOnNlbGVjdGVkXCIsZS4kZWxlbSl9LHM9ZnVuY3Rpb24oKXt2YXIgaT1lLiRlbGVtLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicrZS5vcHRpb25zLmVtcHR5VmFsdWUrJ1wiXScpO3JldHVybiFpLmxlbmd0aCYmZS5vcHRpb25zLmFsbG93RW1wdHk/KGk9dChcIjxvcHRpb24gLz5cIix7dmFsdWU6ZS5vcHRpb25zLmVtcHR5VmFsdWV9KSkucHJlcGVuZFRvKGUuJGVsZW0pOml9LG89ZnVuY3Rpb24odCl7dmFyIGk9ZS4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIpO3JldHVybiB2b2lkIDAhPT10P2lbdF06aX0sYT1mdW5jdGlvbih0LGkpe251bGwhPT1pJiZcIm9iamVjdFwiPT10eXBlb2YgaT9lLiRlbGVtLmRhdGEoXCJiYXJyYXRpbmdcIixpKTplLiRlbGVtLmRhdGEoXCJiYXJyYXRpbmdcIilbdF09aX0scj1mdW5jdGlvbigpe3JldHVybiBvKFwicmF0aW5nVGV4dFwiKX0sbD1mdW5jdGlvbigpe3JldHVybiBvKFwicmF0aW5nVmFsdWVcIil9LGg9ZnVuY3Rpb24oKXtyZXR1cm4gbyhcInVzZXJPcHRpb25zXCIpLnJldmVyc2U/XCJuZXh0QWxsXCI6XCJwcmV2QWxsXCJ9LGM9ZnVuY3Rpb24odCl7aSh0KS5wcm9wKFwic2VsZWN0ZWRcIiwhMCksZS4kZWxlbS5jaGFuZ2UoKX0sdT1mdW5jdGlvbigpe3QoXCJvcHRpb25cIixlLiRlbGVtKS5wcm9wKFwic2VsZWN0ZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRTZWxlY3RlZH0pLGUuJGVsZW0uY2hhbmdlKCl9LGQ9ZnVuY3Rpb24odCl7KHQ9dHx8cigpKT09byhcImVtcHR5UmF0aW5nVGV4dFwiKSYmKHQ9XCJcIiksZS5vcHRpb25zLnNob3dTZWxlY3RlZFJhdGluZyYmZS4kZWxlbS5wYXJlbnQoKS5maW5kKFwiLmJyLWN1cnJlbnQtcmF0aW5nXCIpLnRleHQodCl9LHA9ZnVuY3Rpb24oKXtlLiR3aWRnZXQuZmluZChcImFcIikucmVtb3ZlQ2xhc3MoZnVuY3Rpb24odCxlKXtyZXR1cm4oZS5tYXRjaCgvKF58XFxzKWJyLVxcUysvZyl8fFtdKS5qb2luKFwiIFwiKX0pfSxmPWZ1bmN0aW9uKCl7dmFyIGksbixzPWUuJHdpZGdldC5maW5kKCdhW2RhdGEtcmF0aW5nLXZhbHVlPVwiJytsKCkrJ1wiXScpLGE9byhcInVzZXJPcHRpb25zXCIpLmluaXRpYWxSYXRpbmcscj10LmlzTnVtZXJpYyhsKCkpP2woKTowLGM9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucm91bmQoTWF0aC5mbG9vcigxMCp0KS8xMCUxKjEwMCl9KGEpO2lmKHAoKSxzLmFkZENsYXNzKFwiYnItc2VsZWN0ZWQgYnItY3VycmVudFwiKVtoKCldKCkuYWRkQ2xhc3MoXCJici1zZWxlY3RlZFwiKSwhbyhcInJhdGluZ01hZGVcIikmJnQuaXNOdW1lcmljKGEpKXtpZihyPj1hfHwhYylyZXR1cm47aT1lLiR3aWRnZXQuZmluZChcImFcIiksKG49cy5sZW5ndGg/c1tvKFwidXNlck9wdGlvbnNcIikucmV2ZXJzZT9cInByZXZcIjpcIm5leHRcIl0oKTppW28oXCJ1c2VyT3B0aW9uc1wiKS5yZXZlcnNlP1wibGFzdFwiOlwiZmlyc3RcIl0oKSkuYWRkQ2xhc3MoXCJici1mcmFjdGlvbmFsXCIpLG4uYWRkQ2xhc3MoXCJici1mcmFjdGlvbmFsLVwiK2MpfX0sZz1mdW5jdGlvbihpKXtpLm9uKFwiY2xpY2suYmFycmF0aW5nXCIsZnVuY3Rpb24oaSl7dmFyIG4scyxoPXQodGhpcyksdT1vKFwidXNlck9wdGlvbnNcIik7cmV0dXJuIGkucHJldmVudERlZmF1bHQoKSxuPWguYXR0cihcImRhdGEtcmF0aW5nLXZhbHVlXCIpLHM9aC5hdHRyKFwiZGF0YS1yYXRpbmctdGV4dFwiKSxmdW5jdGlvbih0KXtyZXR1cm4hKCFvKFwiYWxsb3dFbXB0eVwiKXx8IW8oXCJ1c2VyT3B0aW9uc1wiKS5kZXNlbGVjdGFibGUpJiZsKCk9PXQuYXR0cihcImRhdGEtcmF0aW5nLXZhbHVlXCIpfShoKSYmKG49byhcImVtcHR5UmF0aW5nVmFsdWVcIikscz1vKFwiZW1wdHlSYXRpbmdUZXh0XCIpKSxhKFwicmF0aW5nVmFsdWVcIixuKSxhKFwicmF0aW5nVGV4dFwiLHMpLGEoXCJyYXRpbmdNYWRlXCIsITApLGMobiksZChzKSxmKCksdS5vblNlbGVjdC5jYWxsKGUsbCgpLHIoKSxpKSwhMX0pfSxtPWZ1bmN0aW9uKGUpe2Uub24oXCJtb3VzZWVudGVyLmJhcnJhdGluZ1wiLGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtwKCksZS5hZGRDbGFzcyhcImJyLWFjdGl2ZVwiKVtoKCldKCkuYWRkQ2xhc3MoXCJici1hY3RpdmVcIiksZChlLmF0dHIoXCJkYXRhLXJhdGluZy10ZXh0XCIpKX0pfSx2PWZ1bmN0aW9uKGUpe2Uub24oXCJ0b3VjaHN0YXJ0LmJhcnJhdGluZ1wiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQodGhpcykuY2xpY2soKX0pfSxiPWZ1bmN0aW9uKHQpe2codCksZS5vcHRpb25zLmhvdmVyU3RhdGUmJihtKHQpLGUuJHdpZGdldC5vbihcIm1vdXNlbGVhdmUuYmFycmF0aW5nIGJsdXIuYmFycmF0aW5nXCIsZnVuY3Rpb24oKXtkKCksZigpfSkpfSxfPWZ1bmN0aW9uKHQpe3Qub2ZmKFwiLmJhcnJhdGluZ1wiKX0seT1mdW5jdGlvbih0KXt2YXIgaT1lLiR3aWRnZXQuZmluZChcImFcIik7diYmdihpKSx0PyhfKGkpLGZ1bmN0aW9uKHQpe3Qub24oXCJjbGljay5iYXJyYXRpbmdcIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9KX0oaSkpOmIoaSl9O3RoaXMuc2hvdz1mdW5jdGlvbigpe28oKXx8KGZ1bmN0aW9uKCl7dmFyIGk9W1wiYnItd3JhcHBlclwiXTtcIlwiIT09ZS5vcHRpb25zLnRoZW1lJiZpLnB1c2goXCJici10aGVtZS1cIitlLm9wdGlvbnMudGhlbWUpLGUuJGVsZW0ud3JhcCh0KFwiPGRpdiAvPlwiLHtjbGFzczppLmpvaW4oXCIgXCIpfSkpfSgpLGZ1bmN0aW9uKCl7dmFyIHQ9bigpLGk9cygpLG89dC52YWwoKSxyPXQuZGF0YShcImh0bWxcIik/dC5kYXRhKFwiaHRtbFwiKTp0LnRleHQoKSxsPW51bGwhPT1lLm9wdGlvbnMuYWxsb3dFbXB0eT9lLm9wdGlvbnMuYWxsb3dFbXB0eTohIWkubGVuZ3RoLGg9aS5sZW5ndGg/aS52YWwoKTpudWxsLGM9aS5sZW5ndGg/aS50ZXh0KCk6bnVsbDthKG51bGwse3VzZXJPcHRpb25zOmUub3B0aW9ucyxyYXRpbmdWYWx1ZTpvLHJhdGluZ1RleHQ6cixvcmlnaW5hbFJhdGluZ1ZhbHVlOm8sb3JpZ2luYWxSYXRpbmdUZXh0OnIsYWxsb3dFbXB0eTpsLGVtcHR5UmF0aW5nVmFsdWU6aCxlbXB0eVJhdGluZ1RleHQ6YyxyZWFkT25seTplLm9wdGlvbnMucmVhZG9ubHkscmF0aW5nTWFkZTohMX0pfSgpLGUuJHdpZGdldD1mdW5jdGlvbigpe3ZhciBpPXQoXCI8ZGl2IC8+XCIse2NsYXNzOlwiYnItd2lkZ2V0XCJ9KTtyZXR1cm4gZS4kZWxlbS5maW5kKFwib3B0aW9uXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgbixzLGEscjsobj10KHRoaXMpLnZhbCgpKSE9PW8oXCJlbXB0eVJhdGluZ1ZhbHVlXCIpJiYocz10KHRoaXMpLnRleHQoKSwoYT10KHRoaXMpLmRhdGEoXCJodG1sXCIpKSYmKHM9YSkscj10KFwiPGEgLz5cIix7aHJlZjpcIiNcIixcImRhdGEtcmF0aW5nLXZhbHVlXCI6bixcImRhdGEtcmF0aW5nLXRleHRcIjpzLGh0bWw6ZS5vcHRpb25zLnNob3dWYWx1ZXM/czpcIlwifSksaS5hcHBlbmQocikpfSksZS5vcHRpb25zLnNob3dTZWxlY3RlZFJhdGluZyYmaS5hcHBlbmQodChcIjxkaXYgLz5cIix7dGV4dDpcIlwiLGNsYXNzOlwiYnItY3VycmVudC1yYXRpbmdcIn0pKSxlLm9wdGlvbnMucmV2ZXJzZSYmaS5hZGRDbGFzcyhcImJyLXJldmVyc2VcIiksZS5vcHRpb25zLnJlYWRvbmx5JiZpLmFkZENsYXNzKFwiYnItcmVhZG9ubHlcIiksaX0oKSxlLiR3aWRnZXQuaW5zZXJ0QWZ0ZXIoZS4kZWxlbSksZigpLGQoKSx5KGUub3B0aW9ucy5yZWFkb25seSksZS4kZWxlbS5oaWRlKCkpfSx0aGlzLnJlYWRvbmx5PWZ1bmN0aW9uKHQpe1wiYm9vbGVhblwiPT10eXBlb2YgdCYmbyhcInJlYWRPbmx5XCIpIT10JiYoeSh0KSxhKFwicmVhZE9ubHlcIix0KSxlLiR3aWRnZXQudG9nZ2xlQ2xhc3MoXCJici1yZWFkb25seVwiKSl9LHRoaXMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBpPW8oXCJ1c2VyT3B0aW9uc1wiKTswIT09ZS4kZWxlbS5maW5kKCdvcHRpb25bdmFsdWU9XCInK3QrJ1wiXScpLmxlbmd0aCYmKGEoXCJyYXRpbmdWYWx1ZVwiLHQpLGEoXCJyYXRpbmdUZXh0XCIsZS4kZWxlbS5maW5kKCdvcHRpb25bdmFsdWU9XCInK3QrJ1wiXScpLnRleHQoKSksYShcInJhdGluZ01hZGVcIiwhMCksYyhsKCkpLGQocigpKSxmKCksaS5zaWxlbnR8fGkub25TZWxlY3QuY2FsbCh0aGlzLGwoKSxyKCkpKX0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3ZhciB0PW8oXCJ1c2VyT3B0aW9uc1wiKTthKFwicmF0aW5nVmFsdWVcIixvKFwib3JpZ2luYWxSYXRpbmdWYWx1ZVwiKSksYShcInJhdGluZ1RleHRcIixvKFwib3JpZ2luYWxSYXRpbmdUZXh0XCIpKSxhKFwicmF0aW5nTWFkZVwiLCExKSx1KCksZChyKCkpLGYoKSx0Lm9uQ2xlYXIuY2FsbCh0aGlzLGwoKSxyKCkpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD1sKCksaT1yKCksbj1vKFwidXNlck9wdGlvbnNcIik7XyhlLiR3aWRnZXQuZmluZChcImFcIikpLGUuJHdpZGdldC5yZW1vdmUoKSxlLiRlbGVtLnJlbW92ZURhdGEoXCJiYXJyYXRpbmdcIiksZS4kZWxlbS51bndyYXAoKSxlLiRlbGVtLnNob3coKSxuLm9uRGVzdHJveS5jYWxsKHRoaXMsdCxpKX19cmV0dXJuIGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdGhpcy4kZWxlbT10KGkpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSx0LmZuLmJhcnJhdGluZy5kZWZhdWx0cyxlKSx0aGlzLm9wdGlvbnN9LGV9KCk7dC5mbi5iYXJyYXRpbmc9ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9bmV3IGU7aWYodCh0aGlzKS5pcyhcInNlbGVjdFwiKXx8dC5lcnJvcihcIlNvcnJ5LCB0aGlzIHBsdWdpbiBvbmx5IHdvcmtzIHdpdGggc2VsZWN0IGZpZWxkcy5cIikscy5oYXNPd25Qcm9wZXJ0eShpKSl7aWYocy5pbml0KG4sdGhpcyksXCJzaG93XCI9PT1pKXJldHVybiBzLnNob3cobik7aWYocy4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIpKXJldHVybiBzLiR3aWRnZXQ9dCh0aGlzKS5uZXh0KFwiLmJyLXdpZGdldFwiKSxzW2ldKG4pfWVsc2V7aWYoXCJvYmplY3RcIj09dHlwZW9mIGl8fCFpKXJldHVybiBuPWkscy5pbml0KG4sdGhpcykscy5zaG93KCk7dC5lcnJvcihcIk1ldGhvZCBcIitpK1wiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5iYXJyYXRpbmdcIil9fSl9LHQuZm4uYmFycmF0aW5nLmRlZmF1bHRzPXt0aGVtZTpcIlwiLGluaXRpYWxSYXRpbmc6bnVsbCxhbGxvd0VtcHR5Om51bGwsZW1wdHlWYWx1ZTpcIlwiLHNob3dWYWx1ZXM6ITEsc2hvd1NlbGVjdGVkUmF0aW5nOiEwLGRlc2VsZWN0YWJsZTohMCxyZXZlcnNlOiExLHJlYWRvbmx5OiExLGZhc3RDbGlja3M6ITAsaG92ZXJTdGF0ZTohMCxzaWxlbnQ6ITEsb25TZWxlY3Q6ZnVuY3Rpb24odCxlLGkpe30sb25DbGVhcjpmdW5jdGlvbih0LGUpe30sb25EZXN0cm95OmZ1bmN0aW9uKHQsZSl7fX0sdC5mbi5iYXJyYXRpbmcuQmFyUmF0aW5nPWV9KSxcInVuZGVmaW5lZFwiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5XCIpO2lmKGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPWpRdWVyeS5mbi5qcXVlcnkuc3BsaXQoXCIgXCIpWzBdLnNwbGl0KFwiLlwiKTtpZihlWzBdPDImJmVbMV08OXx8MT09ZVswXSYmOT09ZVsxXSYmZVsyXTwxfHxlWzBdPjMpdGhyb3cgbmV3IEVycm9yKFwiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gNFwiKX0oKSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKGUpe3ZhciBpPSExLG49dGhpcztyZXR1cm4gdCh0aGlzKS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixmdW5jdGlvbigpe2k9ITB9KSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aXx8dChuKS50cmlnZ2VyKHQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9LGUpLHRoaXN9LHQoZnVuY3Rpb24oKXt0LnN1cHBvcnQudHJhbnNpdGlvbj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJib290c3RyYXBcIiksZT17V2Via2l0VHJhbnNpdGlvbjpcIndlYmtpdFRyYW5zaXRpb25FbmRcIixNb3pUcmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwiLE9UcmFuc2l0aW9uOlwib1RyYW5zaXRpb25FbmQgb3RyYW5zaXRpb25lbmRcIix0cmFuc2l0aW9uOlwidHJhbnNpdGlvbmVuZFwifTtmb3IodmFyIGkgaW4gZSlpZih2b2lkIDAhPT10LnN0eWxlW2ldKXJldHVybntlbmQ6ZVtpXX07cmV0dXJuITF9KCksdC5zdXBwb3J0LnRyYW5zaXRpb24mJih0LmV2ZW50LnNwZWNpYWwuYnNUcmFuc2l0aW9uRW5kPXtiaW5kVHlwZTp0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsZGVsZWdhdGVUeXBlOnQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxoYW5kbGU6ZnVuY3Rpb24oZSl7aWYodChlLnRhcmdldCkuaXModGhpcykpcmV0dXJuIGUuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0pfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9J1tkYXRhLWRpc21pc3M9XCJhbGVydFwiXScsaT1mdW5jdGlvbihpKXt0KGkpLm9uKFwiY2xpY2tcIixlLHRoaXMuY2xvc2UpfTtpLlZFUlNJT049XCIzLjMuN1wiLGkuVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsaS5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe2EuZGV0YWNoKCkudHJpZ2dlcihcImNsb3NlZC5icy5hbGVydFwiKS5yZW1vdmUoKX12YXIgcz10KHRoaXMpLG89cy5hdHRyKFwiZGF0YS10YXJnZXRcIik7b3x8KG89KG89cy5hdHRyKFwiaHJlZlwiKSkmJm8ucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLyxcIlwiKSk7dmFyIGE9dChcIiNcIj09PW8/W106byk7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLGEubGVuZ3RofHwoYT1zLmNsb3Nlc3QoXCIuYWxlcnRcIikpLGEudHJpZ2dlcihlPXQuRXZlbnQoXCJjbG9zZS5icy5hbGVydFwiKSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGEucmVtb3ZlQ2xhc3MoXCJpblwiKSx0LnN1cHBvcnQudHJhbnNpdGlvbiYmYS5oYXNDbGFzcyhcImZhZGVcIik/YS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixuKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pOm4oKSl9O3ZhciBuPXQuZm4uYWxlcnQ7dC5mbi5hbGVydD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPW4uZGF0YShcImJzLmFsZXJ0XCIpO3N8fG4uZGF0YShcImJzLmFsZXJ0XCIscz1uZXcgaSh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJnNbZV0uY2FsbChuKX0pfSx0LmZuLmFsZXJ0LkNvbnN0cnVjdG9yPWksdC5mbi5hbGVydC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uYWxlcnQ9bix0aGlzfSx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmFsZXJ0LmRhdGEtYXBpXCIsZSxpLnByb3RvdHlwZS5jbG9zZSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPW4uZGF0YShcImJzLmJ1dHRvblwiKSxvPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlO3N8fG4uZGF0YShcImJzLmJ1dHRvblwiLHM9bmV3IGkodGhpcyxvKSksXCJ0b2dnbGVcIj09ZT9zLnRvZ2dsZSgpOmUmJnMuc2V0U3RhdGUoZSl9KX12YXIgaT1mdW5jdGlvbihlLG4pe3RoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saS5ERUZBVUxUUyxuKSx0aGlzLmlzTG9hZGluZz0hMX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLkRFRkFVTFRTPXtsb2FkaW5nVGV4dDpcImxvYWRpbmcuLi5cIn0saS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSl7dmFyIGk9XCJkaXNhYmxlZFwiLG49dGhpcy4kZWxlbWVudCxzPW4uaXMoXCJpbnB1dFwiKT9cInZhbFwiOlwiaHRtbFwiLG89bi5kYXRhKCk7ZSs9XCJUZXh0XCIsbnVsbD09by5yZXNldFRleHQmJm4uZGF0YShcInJlc2V0VGV4dFwiLG5bc10oKSksc2V0VGltZW91dCh0LnByb3h5KGZ1bmN0aW9uKCl7bltzXShudWxsPT1vW2VdP3RoaXMub3B0aW9uc1tlXTpvW2VdKSxcImxvYWRpbmdUZXh0XCI9PWU/KHRoaXMuaXNMb2FkaW5nPSEwLG4uYWRkQ2xhc3MoaSkuYXR0cihpLGkpLnByb3AoaSwhMCkpOnRoaXMuaXNMb2FkaW5nJiYodGhpcy5pc0xvYWRpbmc9ITEsbi5yZW1vdmVDbGFzcyhpKS5yZW1vdmVBdHRyKGkpLnByb3AoaSwhMSkpfSx0aGlzKSwwKX0saS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dmFyIHQ9ITAsZT10aGlzLiRlbGVtZW50LmNsb3Nlc3QoJ1tkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0nKTtpZihlLmxlbmd0aCl7dmFyIGk9dGhpcy4kZWxlbWVudC5maW5kKFwiaW5wdXRcIik7XCJyYWRpb1wiPT1pLnByb3AoXCJ0eXBlXCIpPyhpLnByb3AoXCJjaGVja2VkXCIpJiYodD0hMSksZS5maW5kKFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLiRlbGVtZW50LmFkZENsYXNzKFwiYWN0aXZlXCIpKTpcImNoZWNrYm94XCI9PWkucHJvcChcInR5cGVcIikmJihpLnByb3AoXCJjaGVja2VkXCIpIT09dGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImFjdGl2ZVwiKSYmKHQ9ITEpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIikpLGkucHJvcChcImNoZWNrZWRcIix0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKSx0JiZpLnRyaWdnZXIoXCJjaGFuZ2VcIil9ZWxzZSB0aGlzLiRlbGVtZW50LmF0dHIoXCJhcmlhLXByZXNzZWRcIiwhdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImFjdGl2ZVwiKSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIG49dC5mbi5idXR0b247dC5mbi5idXR0b249ZSx0LmZuLmJ1dHRvbi5Db25zdHJ1Y3Rvcj1pLHQuZm4uYnV0dG9uLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5idXR0b249bix0aGlzfSx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxmdW5jdGlvbihpKXt2YXIgbj10KGkudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKTtlLmNhbGwobixcInRvZ2dsZVwiKSx0KGkudGFyZ2V0KS5pcygnaW5wdXRbdHlwZT1cInJhZGlvXCJdLCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKXx8KGkucHJldmVudERlZmF1bHQoKSxuLmlzKFwiaW5wdXQsYnV0dG9uXCIpP24udHJpZ2dlcihcImZvY3VzXCIpOm4uZmluZChcImlucHV0OnZpc2libGUsYnV0dG9uOnZpc2libGVcIikuZmlyc3QoKS50cmlnZ2VyKFwiZm9jdXNcIikpfSkub24oXCJmb2N1cy5icy5idXR0b24uZGF0YS1hcGkgYmx1ci5icy5idXR0b24uZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsZnVuY3Rpb24oZSl7dChlLnRhcmdldCkuY2xvc2VzdChcIi5idG5cIikudG9nZ2xlQ2xhc3MoXCJmb2N1c1wiLC9eZm9jdXMoaW4pPyQvLnRlc3QoZS50eXBlKSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMuY2Fyb3VzZWxcIiksbz10LmV4dGVuZCh7fSxpLkRFRkFVTFRTLG4uZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKSxhPVwic3RyaW5nXCI9PXR5cGVvZiBlP2U6by5zbGlkZTtzfHxuLmRhdGEoXCJicy5jYXJvdXNlbFwiLHM9bmV3IGkodGhpcyxvKSksXCJudW1iZXJcIj09dHlwZW9mIGU/cy50byhlKTphP3NbYV0oKTpvLmludGVydmFsJiZzLnBhdXNlKCkuY3ljbGUoKX0pfXZhciBpPWZ1bmN0aW9uKGUsaSl7dGhpcy4kZWxlbWVudD10KGUpLHRoaXMuJGluZGljYXRvcnM9dGhpcy4kZWxlbWVudC5maW5kKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5vcHRpb25zPWksdGhpcy5wYXVzZWQ9bnVsbCx0aGlzLnNsaWRpbmc9bnVsbCx0aGlzLmludGVydmFsPW51bGwsdGhpcy4kYWN0aXZlPW51bGwsdGhpcy4kaXRlbXM9bnVsbCx0aGlzLm9wdGlvbnMua2V5Ym9hcmQmJnRoaXMuJGVsZW1lbnQub24oXCJrZXlkb3duLmJzLmNhcm91c2VsXCIsdC5wcm94eSh0aGlzLmtleWRvd24sdGhpcykpLFwiaG92ZXJcIj09dGhpcy5vcHRpb25zLnBhdXNlJiYhKFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiZ0aGlzLiRlbGVtZW50Lm9uKFwibW91c2VlbnRlci5icy5jYXJvdXNlbFwiLHQucHJveHkodGhpcy5wYXVzZSx0aGlzKSkub24oXCJtb3VzZWxlYXZlLmJzLmNhcm91c2VsXCIsdC5wcm94eSh0aGlzLmN5Y2xlLHRoaXMpKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049NjAwLGkuREVGQVVMVFM9e2ludGVydmFsOjVlMyxwYXVzZTpcImhvdmVyXCIsd3JhcDohMCxrZXlib2FyZDohMH0saS5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbih0KXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKSl7c3dpdGNoKHQud2hpY2gpe2Nhc2UgMzc6dGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0aGlzLm5leHQoKTticmVhaztkZWZhdWx0OnJldHVybn10LnByZXZlbnREZWZhdWx0KCl9fSxpLnByb3RvdHlwZS5jeWNsZT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KHRoaXMucGF1c2VkPSExKSx0aGlzLmludGVydmFsJiZjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCYmIXRoaXMucGF1c2VkJiYodGhpcy5pbnRlcnZhbD1zZXRJbnRlcnZhbCh0LnByb3h5KHRoaXMubmV4dCx0aGlzKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwpKSx0aGlzfSxpLnByb3RvdHlwZS5nZXRJdGVtSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuJGl0ZW1zPXQucGFyZW50KCkuY2hpbGRyZW4oXCIuaXRlbVwiKSx0aGlzLiRpdGVtcy5pbmRleCh0fHx0aGlzLiRhY3RpdmUpfSxpLnByb3RvdHlwZS5nZXRJdGVtRm9yRGlyZWN0aW9uPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5nZXRJdGVtSW5kZXgoZSk7aWYoKFwicHJldlwiPT10JiYwPT09aXx8XCJuZXh0XCI9PXQmJmk9PXRoaXMuJGl0ZW1zLmxlbmd0aC0xKSYmIXRoaXMub3B0aW9ucy53cmFwKXJldHVybiBlO3ZhciBuPShpKyhcInByZXZcIj09dD8tMToxKSkldGhpcy4kaXRlbXMubGVuZ3RoO3JldHVybiB0aGlzLiRpdGVtcy5lcShuKX0saS5wcm90b3R5cGUudG89ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxpPXRoaXMuZ2V0SXRlbUluZGV4KHRoaXMuJGFjdGl2ZT10aGlzLiRlbGVtZW50LmZpbmQoXCIuaXRlbS5hY3RpdmVcIikpO2lmKCEodD50aGlzLiRpdGVtcy5sZW5ndGgtMXx8dDwwKSlyZXR1cm4gdGhpcy5zbGlkaW5nP3RoaXMuJGVsZW1lbnQub25lKFwic2xpZC5icy5jYXJvdXNlbFwiLGZ1bmN0aW9uKCl7ZS50byh0KX0pOmk9PXQ/dGhpcy5wYXVzZSgpLmN5Y2xlKCk6dGhpcy5zbGlkZSh0Pmk/XCJuZXh0XCI6XCJwcmV2XCIsdGhpcy4kaXRlbXMuZXEodCkpfSxpLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbihlKXtyZXR1cm4gZXx8KHRoaXMucGF1c2VkPSEwKSx0aGlzLiRlbGVtZW50LmZpbmQoXCIubmV4dCwgLnByZXZcIikubGVuZ3RoJiZ0LnN1cHBvcnQudHJhbnNpdGlvbiYmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcih0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpLHRoaXMuY3ljbGUoITApKSx0aGlzLmludGVydmFsPWNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpc30saS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJuZXh0XCIpfSxpLnByb3RvdHlwZS5wcmV2PWZ1bmN0aW9uKCl7aWYoIXRoaXMuc2xpZGluZylyZXR1cm4gdGhpcy5zbGlkZShcInByZXZcIil9LGkucHJvdG90eXBlLnNsaWRlPWZ1bmN0aW9uKGUsbil7dmFyIHM9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpLG89bnx8dGhpcy5nZXRJdGVtRm9yRGlyZWN0aW9uKGUscyksYT10aGlzLmludGVydmFsLHI9XCJuZXh0XCI9PWU/XCJsZWZ0XCI6XCJyaWdodFwiLGw9dGhpcztpZihvLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXJldHVybiB0aGlzLnNsaWRpbmc9ITE7dmFyIGg9b1swXSxjPXQuRXZlbnQoXCJzbGlkZS5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmgsZGlyZWN0aW9uOnJ9KTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYyksIWMuaXNEZWZhdWx0UHJldmVudGVkKCkpe2lmKHRoaXMuc2xpZGluZz0hMCxhJiZ0aGlzLnBhdXNlKCksdGhpcy4kaW5kaWNhdG9ycy5sZW5ndGgpe3RoaXMuJGluZGljYXRvcnMuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7dmFyIHU9dCh0aGlzLiRpbmRpY2F0b3JzLmNoaWxkcmVuKClbdGhpcy5nZXRJdGVtSW5kZXgobyldKTt1JiZ1LmFkZENsYXNzKFwiYWN0aXZlXCIpfXZhciBkPXQuRXZlbnQoXCJzbGlkLmJzLmNhcm91c2VsXCIse3JlbGF0ZWRUYXJnZXQ6aCxkaXJlY3Rpb246cn0pO3JldHVybiB0LnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcInNsaWRlXCIpPyhvLmFkZENsYXNzKGUpLG9bMF0ub2Zmc2V0V2lkdGgscy5hZGRDbGFzcyhyKSxvLmFkZENsYXNzKHIpLHMub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtvLnJlbW92ZUNsYXNzKFtlLHJdLmpvaW4oXCIgXCIpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxzLnJlbW92ZUNsYXNzKFtcImFjdGl2ZVwiLHJdLmpvaW4oXCIgXCIpKSxsLnNsaWRpbmc9ITEsc2V0VGltZW91dChmdW5jdGlvbigpe2wuJGVsZW1lbnQudHJpZ2dlcihkKX0sMCl9KS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pKToocy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSxvLmFkZENsYXNzKFwiYWN0aXZlXCIpLHRoaXMuc2xpZGluZz0hMSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoZCkpLGEmJnRoaXMuY3ljbGUoKSx0aGlzfX07dmFyIG49dC5mbi5jYXJvdXNlbDt0LmZuLmNhcm91c2VsPWUsdC5mbi5jYXJvdXNlbC5Db25zdHJ1Y3Rvcj1pLHQuZm4uY2Fyb3VzZWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmNhcm91c2VsPW4sdGhpc307dmFyIHM9ZnVuY3Rpb24oaSl7dmFyIG4scz10KHRoaXMpLG89dChzLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KG49cy5hdHRyKFwiaHJlZlwiKSkmJm4ucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKSk7aWYoby5oYXNDbGFzcyhcImNhcm91c2VsXCIpKXt2YXIgYT10LmV4dGVuZCh7fSxvLmRhdGEoKSxzLmRhdGEoKSkscj1zLmF0dHIoXCJkYXRhLXNsaWRlLXRvXCIpO3ImJihhLmludGVydmFsPSExKSxlLmNhbGwobyxhKSxyJiZvLmRhdGEoXCJicy5jYXJvdXNlbFwiKS50byhyKSxpLnByZXZlbnREZWZhdWx0KCl9fTt0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZV1cIixzKS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZS10b11cIixzKSx0KHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXt0KCdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKTtlLmNhbGwoaSxpLmRhdGEoKSl9KX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7dmFyIGksbj1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KGk9ZS5hdHRyKFwiaHJlZlwiKSkmJmkucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKTtyZXR1cm4gdChuKX1mdW5jdGlvbiBpKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5kYXRhKFwiYnMuY29sbGFwc2VcIiksbz10LmV4dGVuZCh7fSxuLkRFRkFVTFRTLGkuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKTshcyYmby50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoZSkmJihvLnRvZ2dsZT0hMSksc3x8aS5kYXRhKFwiYnMuY29sbGFwc2VcIixzPW5ldyBuKHRoaXMsbykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZzW2VdKCl9KX12YXIgbj1mdW5jdGlvbihlLGkpe3RoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sbi5ERUZBVUxUUyxpKSx0aGlzLiR0cmlnZ2VyPXQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2hyZWY9XCIjJytlLmlkKydcIl0sW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJytlLmlkKydcIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07bi5WRVJTSU9OPVwiMy4zLjdcIixuLlRSQU5TSVRJT05fRFVSQVRJT049MzUwLG4uREVGQVVMVFM9e3RvZ2dsZTohMH0sbi5wcm90b3R5cGUuZGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJ3aWR0aFwiKT9cIndpZHRoXCI6XCJoZWlnaHRcIn0sbi5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIikpe3ZhciBlLHM9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuY2hpbGRyZW4oXCIucGFuZWxcIikuY2hpbGRyZW4oXCIuaW4sIC5jb2xsYXBzaW5nXCIpO2lmKCEocyYmcy5sZW5ndGgmJihlPXMuZGF0YShcImJzLmNvbGxhcHNlXCIpKSYmZS50cmFuc2l0aW9uaW5nKSl7dmFyIG89dC5FdmVudChcInNob3cuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKG8pLCFvLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtzJiZzLmxlbmd0aCYmKGkuY2FsbChzLFwiaGlkZVwiKSxlfHxzLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpKTt2YXIgYT10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZVwiKS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIilbYV0oMCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgcj1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbYV0oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCF0LnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gci5jYWxsKHRoaXMpO3ZhciBsPXQuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGFdLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkocix0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobi5UUkFOU0lUSU9OX0RVUkFUSU9OKVthXSh0aGlzLiRlbGVtZW50WzBdW2xdKX19fX0sbi5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGU9dC5FdmVudChcImhpZGUuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbaV0odGhpcy4kZWxlbWVudFtpXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBpblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKFwiY29sbGFwc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBzPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNpbmdcIikuYWRkQ2xhc3MoXCJjb2xsYXBzZVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfTtpZighdC5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIHMuY2FsbCh0aGlzKTt0aGlzLiRlbGVtZW50W2ldKDApLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkocyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobi5UUkFOU0lUSU9OX0RVUkFUSU9OKX19fSxuLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKT9cImhpZGVcIjpcInNob3dcIl0oKX0sbi5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS1wYXJlbnQ9XCInK3RoaXMub3B0aW9ucy5wYXJlbnQrJ1wiXScpLmVhY2godC5wcm94eShmdW5jdGlvbihpLG4pe3ZhciBzPXQobik7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoZShzKSxzKX0sdGhpcykpLmVuZCgpfSxuLnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgaT10Lmhhc0NsYXNzKFwiaW5cIik7dC5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLGkpLGUudG9nZ2xlQ2xhc3MoXCJjb2xsYXBzZWRcIiwhaSkuYXR0cihcImFyaWEtZXhwYW5kZWRcIixpKX07dmFyIHM9dC5mbi5jb2xsYXBzZTt0LmZuLmNvbGxhcHNlPWksdC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1uLHQuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmNvbGxhcHNlPXMsdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsZnVuY3Rpb24obil7dmFyIHM9dCh0aGlzKTtzLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBvPWUocyksYT1vLmRhdGEoXCJicy5jb2xsYXBzZVwiKT9cInRvZ2dsZVwiOnMuZGF0YSgpO2kuY2FsbChvLGEpfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXt2YXIgaT1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtpfHwoaT0oaT1lLmF0dHIoXCJocmVmXCIpKSYmLyNbQS1aYS16XS8udGVzdChpKSYmaS5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgbj1pJiZ0KGkpO3JldHVybiBuJiZuLmxlbmd0aD9uOmUucGFyZW50KCl9ZnVuY3Rpb24gaShpKXtpJiYzPT09aS53aGljaHx8KHQobikucmVtb3ZlKCksdChzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPWUobiksbz17cmVsYXRlZFRhcmdldDp0aGlzfTtzLmhhc0NsYXNzKFwib3BlblwiKSYmKGkmJlwiY2xpY2tcIj09aS50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGkudGFyZ2V0LnRhZ05hbWUpJiZ0LmNvbnRhaW5zKHNbMF0saS50YXJnZXQpfHwocy50cmlnZ2VyKGk9dC5FdmVudChcImhpZGUuYnMuZHJvcGRvd25cIixvKSksaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KG4uYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLHMucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIodC5FdmVudChcImhpZGRlbi5icy5kcm9wZG93blwiLG8pKSkpKX0pKX12YXIgbj1cIi5kcm9wZG93bi1iYWNrZHJvcFwiLHM9J1tkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJdJyxvPWZ1bmN0aW9uKGUpe3QoZSkub24oXCJjbGljay5icy5kcm9wZG93blwiLHRoaXMudG9nZ2xlKX07by5WRVJTSU9OPVwiMy4zLjdcIixvLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24obil7dmFyIHM9dCh0aGlzKTtpZighcy5pcyhcIi5kaXNhYmxlZCwgOmRpc2FibGVkXCIpKXt2YXIgbz1lKHMpLGE9by5oYXNDbGFzcyhcIm9wZW5cIik7aWYoaSgpLCFhKXtcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhby5jbG9zZXN0KFwiLm5hdmJhci1uYXZcIikubGVuZ3RoJiZ0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmFkZENsYXNzKFwiZHJvcGRvd24tYmFja2Ryb3BcIikuaW5zZXJ0QWZ0ZXIodCh0aGlzKSkub24oXCJjbGlja1wiLGkpO3ZhciByPXtyZWxhdGVkVGFyZ2V0OnRoaXN9O2lmKG8udHJpZ2dlcihuPXQuRXZlbnQoXCJzaG93LmJzLmRyb3Bkb3duXCIscikpLG4uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3MudHJpZ2dlcihcImZvY3VzXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJ0cnVlXCIpLG8udG9nZ2xlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIodC5FdmVudChcInNob3duLmJzLmRyb3Bkb3duXCIscikpfXJldHVybiExfX0sby5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihpKXtpZigvKDM4fDQwfDI3fDMyKS8udGVzdChpLndoaWNoKSYmIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoaS50YXJnZXQudGFnTmFtZSkpe3ZhciBuPXQodGhpcyk7aWYoaS5wcmV2ZW50RGVmYXVsdCgpLGkuc3RvcFByb3BhZ2F0aW9uKCksIW4uaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIG89ZShuKSxhPW8uaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKCFhJiYyNyE9aS53aGljaHx8YSYmMjc9PWkud2hpY2gpcmV0dXJuIDI3PT1pLndoaWNoJiZvLmZpbmQocykudHJpZ2dlcihcImZvY3VzXCIpLG4udHJpZ2dlcihcImNsaWNrXCIpO3ZhciByPW8uZmluZChcIi5kcm9wZG93bi1tZW51IGxpOm5vdCguZGlzYWJsZWQpOnZpc2libGUgYVwiKTtpZihyLmxlbmd0aCl7dmFyIGw9ci5pbmRleChpLnRhcmdldCk7Mzg9PWkud2hpY2gmJmw+MCYmbC0tLDQwPT1pLndoaWNoJiZsPHIubGVuZ3RoLTEmJmwrKyx+bHx8KGw9MCksci5lcShsKS50cmlnZ2VyKFwiZm9jdXNcIil9fX19O3ZhciBhPXQuZm4uZHJvcGRvd247dC5mbi5kcm9wZG93bj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkuZGF0YShcImJzLmRyb3Bkb3duXCIpO258fGkuZGF0YShcImJzLmRyb3Bkb3duXCIsbj1uZXcgbyh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJm5bZV0uY2FsbChpKX0pfSx0LmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPW8sdC5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uZHJvcGRvd249YSx0aGlzfSx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsaSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duIGZvcm1cIixmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLHMsby5wcm90b3R5cGUudG9nZ2xlKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixzLG8ucHJvdG90eXBlLmtleWRvd24pLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duLW1lbnVcIixvLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQodGhpcyksbz1zLmRhdGEoXCJicy5tb2RhbFwiKSxhPXQuZXh0ZW5kKHt9LGkuREVGQVVMVFMscy5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpO298fHMuZGF0YShcImJzLm1vZGFsXCIsbz1uZXcgaSh0aGlzLGEpKSxcInN0cmluZ1wiPT10eXBlb2YgZT9vW2VdKG4pOmEuc2hvdyYmby5zaG93KG4pfSl9dmFyIGk9ZnVuY3Rpb24oZSxpKXt0aGlzLm9wdGlvbnM9aSx0aGlzLiRib2R5PXQoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD10KGUpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtZGlhbG9nXCIpLHRoaXMuJGJhY2tkcm9wPW51bGwsdGhpcy5pc1Nob3duPW51bGwsdGhpcy5vcmlnaW5hbEJvZHlQYWQ9bnVsbCx0aGlzLnNjcm9sbGJhcldpZHRoPTAsdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZChcIi5tb2RhbC1jb250ZW50XCIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSx0LnByb3h5KGZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKFwibG9hZGVkLmJzLm1vZGFsXCIpfSx0aGlzKSl9XG47aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MzAwLGkuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsaS5ERUZBVUxUUz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0saS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KHQpfSxpLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMscz10LkV2ZW50KFwic2hvdy5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmV9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIocyksdGhpcy5pc1Nob3dufHxzLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLCdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nLHQucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKCl7bi4kZWxlbWVudC5vbmUoXCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWxcIixmdW5jdGlvbihlKXt0KGUudGFyZ2V0KS5pcyhuLiRlbGVtZW50KSYmKG4uaWdub3JlQmFja2Ryb3BDbGljaz0hMCl9KX0pLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgcz10LnN1cHBvcnQudHJhbnNpdGlvbiYmbi4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik7bi4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fG4uJGVsZW1lbnQuYXBwZW5kVG8obi4kYm9keSksbi4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLG4uYWRqdXN0RGlhbG9nKCkscyYmbi4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxuLiRlbGVtZW50LmFkZENsYXNzKFwiaW5cIiksbi5lbmZvcmNlRm9jdXMoKTt2YXIgbz10LkV2ZW50KFwic2hvd24uYnMubW9kYWxcIix7cmVsYXRlZFRhcmdldDplfSk7cz9uLiRkaWFsb2cub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtuLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKS50cmlnZ2VyKG8pfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpuLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKS50cmlnZ2VyKG8pfSkpfSxpLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxlPXQuRXZlbnQoXCJoaWRlLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd24mJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSx0KGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJpblwiKS5vZmYoXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIpLm9mZihcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiKSx0aGlzLiRkaWFsb2cub2ZmKFwibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWxcIiksdC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGVsZW1lbnQub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsdC5wcm94eSh0aGlzLmhpZGVNb2RhbCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKTp0aGlzLmhpZGVNb2RhbCgpKX0saS5wcm90b3R5cGUuZW5mb3JjZUZvY3VzPWZ1bmN0aW9uKCl7dChkb2N1bWVudCkub2ZmKFwiZm9jdXNpbi5icy5tb2RhbFwiKS5vbihcImZvY3VzaW4uYnMubW9kYWxcIix0LnByb3h5KGZ1bmN0aW9uKHQpe2RvY3VtZW50PT09dC50YXJnZXR8fHRoaXMuJGVsZW1lbnRbMF09PT10LnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXModC50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIil9LHRoaXMpKX0saS5wcm90b3R5cGUuZXNjYXBlPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLHQucHJveHkoZnVuY3Rpb24odCl7Mjc9PXQud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKX0saS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP3Qod2luZG93KS5vbihcInJlc2l6ZS5icy5tb2RhbFwiLHQucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsdGhpcykpOnQod2luZG93KS5vZmYoXCJyZXNpemUuYnMubW9kYWxcIil9LGkucHJvdG90eXBlLmhpZGVNb2RhbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3QuJGJvZHkucmVtb3ZlQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLHQucmVzZXRBZGp1c3RtZW50cygpLHQucmVzZXRTY3JvbGxiYXIoKSx0LiRlbGVtZW50LnRyaWdnZXIoXCJoaWRkZW4uYnMubW9kYWxcIil9KX0saS5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCksdGhpcy4kYmFja2Ryb3A9bnVsbH0saS5wcm90b3R5cGUuYmFja2Ryb3A9ZnVuY3Rpb24oZSl7dmFyIG49dGhpcyxzPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP1wiZmFkZVwiOlwiXCI7aWYodGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMuYmFja2Ryb3Ape3ZhciBvPXQuc3VwcG9ydC50cmFuc2l0aW9uJiZzO2lmKHRoaXMuJGJhY2tkcm9wPXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuYWRkQ2xhc3MoXCJtb2RhbC1iYWNrZHJvcCBcIitzKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLHQucHJveHkoZnVuY3Rpb24odCl7dGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrP3RoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMTp0LnRhcmdldD09PXQuY3VycmVudFRhcmdldCYmKFwic3RhdGljXCI9PXRoaXMub3B0aW9ucy5iYWNrZHJvcD90aGlzLiRlbGVtZW50WzBdLmZvY3VzKCk6dGhpcy5oaWRlKCkpfSx0aGlzKSksbyYmdGhpcy4kYmFja2Ryb3BbMF0ub2Zmc2V0V2lkdGgsdGhpcy4kYmFja2Ryb3AuYWRkQ2xhc3MoXCJpblwiKSwhZSlyZXR1cm47bz90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixlKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmUoKX1lbHNlIGlmKCF0aGlzLmlzU2hvd24mJnRoaXMuJGJhY2tkcm9wKXt0aGlzLiRiYWNrZHJvcC5yZW1vdmVDbGFzcyhcImluXCIpO3ZhciBhPWZ1bmN0aW9uKCl7bi5yZW1vdmVCYWNrZHJvcCgpLGUmJmUoKX07dC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGJhY2tkcm9wLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGEpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTik6YSgpfWVsc2UgZSYmZSgpfSxpLnByb3RvdHlwZS5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmFkanVzdERpYWxvZygpfSxpLnByb3RvdHlwZS5hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50WzBdLnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDohdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdD90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCIscGFkZGluZ1JpZ2h0OnRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJiF0P3RoaXMuc2Nyb2xsYmFyV2lkdGg6XCJcIn0pfSxpLnByb3RvdHlwZS5yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC5jc3Moe3BhZGRpbmdMZWZ0OlwiXCIscGFkZGluZ1JpZ2h0OlwiXCJ9KX0saS5wcm90b3R5cGUuY2hlY2tTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD13aW5kb3cuaW5uZXJXaWR0aDtpZighdCl7dmFyIGU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3Q9ZS5yaWdodC1NYXRoLmFicyhlLmxlZnQpfXRoaXMuYm9keUlzT3ZlcmZsb3dpbmc9ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDx0LHRoaXMuc2Nyb2xsYmFyV2lkdGg9dGhpcy5tZWFzdXJlU2Nyb2xsYmFyKCl9LGkucHJvdG90eXBlLnNldFNjcm9sbGJhcj1mdW5jdGlvbigpe3ZhciB0PXBhcnNlSW50KHRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiKXx8MCwxMCk7dGhpcy5vcmlnaW5hbEJvZHlQYWQ9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHR8fFwiXCIsdGhpcy5ib2R5SXNPdmVyZmxvd2luZyYmdGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsdCt0aGlzLnNjcm9sbGJhcldpZHRoKX0saS5wcm90b3R5cGUucmVzZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIix0aGlzLm9yaWdpbmFsQm9keVBhZCl9LGkucHJvdG90eXBlLm1lYXN1cmVTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3QuY2xhc3NOYW1lPVwibW9kYWwtc2Nyb2xsYmFyLW1lYXN1cmVcIix0aGlzLiRib2R5LmFwcGVuZCh0KTt2YXIgZT10Lm9mZnNldFdpZHRoLXQuY2xpZW50V2lkdGg7cmV0dXJuIHRoaXMuJGJvZHlbMF0ucmVtb3ZlQ2hpbGQodCksZX07dmFyIG49dC5mbi5tb2RhbDt0LmZuLm1vZGFsPWUsdC5mbi5tb2RhbC5Db25zdHJ1Y3Rvcj1pLHQuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLm1vZGFsPW4sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5tb2RhbC5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJtb2RhbFwiXScsZnVuY3Rpb24oaSl7dmFyIG49dCh0aGlzKSxzPW4uYXR0cihcImhyZWZcIiksbz10KG4uYXR0cihcImRhdGEtdGFyZ2V0XCIpfHxzJiZzLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpLGE9by5kYXRhKFwiYnMubW9kYWxcIik/XCJ0b2dnbGVcIjp0LmV4dGVuZCh7cmVtb3RlOiEvIy8udGVzdChzKSYmc30sby5kYXRhKCksbi5kYXRhKCkpO24uaXMoXCJhXCIpJiZpLnByZXZlbnREZWZhdWx0KCksby5vbmUoXCJzaG93LmJzLm1vZGFsXCIsZnVuY3Rpb24odCl7dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8by5vbmUoXCJoaWRkZW4uYnMubW9kYWxcIixmdW5jdGlvbigpe24uaXMoXCI6dmlzaWJsZVwiKSYmbi50cmlnZ2VyKFwiZm9jdXNcIil9KX0pLGUuY2FsbChvLGEsdGhpcyl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1mdW5jdGlvbih0LGUpe3RoaXMudHlwZT1udWxsLHRoaXMub3B0aW9ucz1udWxsLHRoaXMuZW5hYmxlZD1udWxsLHRoaXMudGltZW91dD1udWxsLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXMuJGVsZW1lbnQ9bnVsbCx0aGlzLmluU3RhdGU9bnVsbCx0aGlzLmluaXQoXCJ0b29sdGlwXCIsdCxlKX07ZS5WRVJTSU9OPVwiMy4zLjdcIixlLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGUuREVGQVVMVFM9e2FuaW1hdGlvbjohMCxwbGFjZW1lbnQ6XCJ0b3BcIixzZWxlY3RvcjohMSx0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6XCJob3ZlciBmb2N1c1wiLHRpdGxlOlwiXCIsZGVsYXk6MCxodG1sOiExLGNvbnRhaW5lcjohMSx2aWV3cG9ydDp7c2VsZWN0b3I6XCJib2R5XCIscGFkZGluZzowfX0sZS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbihlLGksbil7aWYodGhpcy5lbmFibGVkPSEwLHRoaXMudHlwZT1lLHRoaXMuJGVsZW1lbnQ9dChpKSx0aGlzLm9wdGlvbnM9dGhpcy5nZXRPcHRpb25zKG4pLHRoaXMuJHZpZXdwb3J0PXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdCh0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnZpZXdwb3J0KT90aGlzLm9wdGlvbnMudmlld3BvcnQuY2FsbCh0aGlzLHRoaXMuJGVsZW1lbnQpOnRoaXMub3B0aW9ucy52aWV3cG9ydC5zZWxlY3Rvcnx8dGhpcy5vcHRpb25zLnZpZXdwb3J0KSx0aGlzLmluU3RhdGU9e2NsaWNrOiExLGhvdmVyOiExLGZvY3VzOiExfSx0aGlzLiRlbGVtZW50WzBdaW5zdGFuY2VvZiBkb2N1bWVudC5jb25zdHJ1Y3RvciYmIXRoaXMub3B0aW9ucy5zZWxlY3Rvcil0aHJvdyBuZXcgRXJyb3IoXCJgc2VsZWN0b3JgIG9wdGlvbiBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGluaXRpYWxpemluZyBcIit0aGlzLnR5cGUrXCIgb24gdGhlIHdpbmRvdy5kb2N1bWVudCBvYmplY3QhXCIpO2Zvcih2YXIgcz10aGlzLm9wdGlvbnMudHJpZ2dlci5zcGxpdChcIiBcIiksbz1zLmxlbmd0aDtvLS07KXt2YXIgYT1zW29dO2lmKFwiY2xpY2tcIj09YSl0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suXCIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3Rvcix0LnByb3h5KHRoaXMudG9nZ2xlLHRoaXMpKTtlbHNlIGlmKFwibWFudWFsXCIhPWEpe3ZhciByPVwiaG92ZXJcIj09YT9cIm1vdXNlZW50ZXJcIjpcImZvY3VzaW5cIixsPVwiaG92ZXJcIj09YT9cIm1vdXNlbGVhdmVcIjpcImZvY3Vzb3V0XCI7dGhpcy4kZWxlbWVudC5vbihyK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsdC5wcm94eSh0aGlzLmVudGVyLHRoaXMpKSx0aGlzLiRlbGVtZW50Lm9uKGwrXCIuXCIrdGhpcy50eXBlLHRoaXMub3B0aW9ucy5zZWxlY3Rvcix0LnByb3h5KHRoaXMubGVhdmUsdGhpcykpfX10aGlzLm9wdGlvbnMuc2VsZWN0b3I/dGhpcy5fb3B0aW9ucz10LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMse3RyaWdnZXI6XCJtYW51YWxcIixzZWxlY3RvcjpcIlwifSk6dGhpcy5maXhUaXRsZSgpfSxlLnByb3RvdHlwZS5nZXREZWZhdWx0cz1mdW5jdGlvbigpe3JldHVybiBlLkRFRkFVTFRTfSxlLnByb3RvdHlwZS5nZXRPcHRpb25zPWZ1bmN0aW9uKGUpe3JldHVybihlPXQuZXh0ZW5kKHt9LHRoaXMuZ2V0RGVmYXVsdHMoKSx0aGlzLiRlbGVtZW50LmRhdGEoKSxlKSkuZGVsYXkmJlwibnVtYmVyXCI9PXR5cGVvZiBlLmRlbGF5JiYoZS5kZWxheT17c2hvdzplLmRlbGF5LGhpZGU6ZS5kZWxheX0pLGV9LGUucHJvdG90eXBlLmdldERlbGVnYXRlT3B0aW9ucz1mdW5jdGlvbigpe3ZhciBlPXt9LGk9dGhpcy5nZXREZWZhdWx0cygpO3JldHVybiB0aGlzLl9vcHRpb25zJiZ0LmVhY2godGhpcy5fb3B0aW9ucyxmdW5jdGlvbih0LG4pe2lbdF0hPW4mJihlW3RdPW4pfSksZX0sZS5wcm90b3R5cGUuZW50ZXI9ZnVuY3Rpb24oZSl7dmFyIGk9ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/ZTp0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSk7cmV0dXJuIGl8fChpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSx0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxpKSksZSBpbnN0YW5jZW9mIHQuRXZlbnQmJihpLmluU3RhdGVbXCJmb2N1c2luXCI9PWUudHlwZT9cImZvY3VzXCI6XCJob3ZlclwiXT0hMCksaS50aXAoKS5oYXNDbGFzcyhcImluXCIpfHxcImluXCI9PWkuaG92ZXJTdGF0ZT92b2lkKGkuaG92ZXJTdGF0ZT1cImluXCIpOihjbGVhclRpbWVvdXQoaS50aW1lb3V0KSxpLmhvdmVyU3RhdGU9XCJpblwiLGkub3B0aW9ucy5kZWxheSYmaS5vcHRpb25zLmRlbGF5LnNob3c/dm9pZChpLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wiaW5cIj09aS5ob3ZlclN0YXRlJiZpLnNob3coKX0saS5vcHRpb25zLmRlbGF5LnNob3cpKTppLnNob3coKSl9LGUucHJvdG90eXBlLmlzSW5TdGF0ZVRydWU9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5pblN0YXRlKWlmKHRoaXMuaW5TdGF0ZVt0XSlyZXR1cm4hMDtyZXR1cm4hMX0sZS5wcm90b3R5cGUubGVhdmU9ZnVuY3Rpb24oZSl7dmFyIGk9ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/ZTp0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSk7aWYoaXx8KGk9bmV3IHRoaXMuY29uc3RydWN0b3IoZS5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLHQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGkpKSxlIGluc3RhbmNlb2YgdC5FdmVudCYmKGkuaW5TdGF0ZVtcImZvY3Vzb3V0XCI9PWUudHlwZT9cImZvY3VzXCI6XCJob3ZlclwiXT0hMSksIWkuaXNJblN0YXRlVHJ1ZSgpKXtpZihjbGVhclRpbWVvdXQoaS50aW1lb3V0KSxpLmhvdmVyU3RhdGU9XCJvdXRcIiwhaS5vcHRpb25zLmRlbGF5fHwhaS5vcHRpb25zLmRlbGF5LmhpZGUpcmV0dXJuIGkuaGlkZSgpO2kudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJvdXRcIj09aS5ob3ZlclN0YXRlJiZpLmhpZGUoKX0saS5vcHRpb25zLmRlbGF5LmhpZGUpfX0sZS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe3ZhciBpPXQuRXZlbnQoXCJzaG93LmJzLlwiK3RoaXMudHlwZSk7aWYodGhpcy5oYXNDb250ZW50KCkmJnRoaXMuZW5hYmxlZCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKGkpO3ZhciBuPXQuY29udGFpbnModGhpcy4kZWxlbWVudFswXS5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRlbGVtZW50WzBdKTtpZihpLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhbilyZXR1cm47dmFyIHM9dGhpcyxvPXRoaXMudGlwKCksYT10aGlzLmdldFVJRCh0aGlzLnR5cGUpO3RoaXMuc2V0Q29udGVudCgpLG8uYXR0cihcImlkXCIsYSksdGhpcy4kZWxlbWVudC5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLGEpLHRoaXMub3B0aW9ucy5hbmltYXRpb24mJm8uYWRkQ2xhc3MoXCJmYWRlXCIpO3ZhciByPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMub3B0aW9ucy5wbGFjZW1lbnQ/dGhpcy5vcHRpb25zLnBsYWNlbWVudC5jYWxsKHRoaXMsb1swXSx0aGlzLiRlbGVtZW50WzBdKTp0aGlzLm9wdGlvbnMucGxhY2VtZW50LGw9L1xccz9hdXRvP1xccz8vaSxoPWwudGVzdChyKTtoJiYocj1yLnJlcGxhY2UobCxcIlwiKXx8XCJ0b3BcIiksby5kZXRhY2goKS5jc3Moe3RvcDowLGxlZnQ6MCxkaXNwbGF5OlwiYmxvY2tcIn0pLmFkZENsYXNzKHIpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsdGhpcyksdGhpcy5vcHRpb25zLmNvbnRhaW5lcj9vLmFwcGVuZFRvKHRoaXMub3B0aW9ucy5jb250YWluZXIpOm8uaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCksdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwiaW5zZXJ0ZWQuYnMuXCIrdGhpcy50eXBlKTt2YXIgYz10aGlzLmdldFBvc2l0aW9uKCksdT1vWzBdLm9mZnNldFdpZHRoLGQ9b1swXS5vZmZzZXRIZWlnaHQ7aWYoaCl7dmFyIHA9cixmPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO3I9XCJib3R0b21cIj09ciYmYy5ib3R0b20rZD5mLmJvdHRvbT9cInRvcFwiOlwidG9wXCI9PXImJmMudG9wLWQ8Zi50b3A/XCJib3R0b21cIjpcInJpZ2h0XCI9PXImJmMucmlnaHQrdT5mLndpZHRoP1wibGVmdFwiOlwibGVmdFwiPT1yJiZjLmxlZnQtdTxmLmxlZnQ/XCJyaWdodFwiOnIsby5yZW1vdmVDbGFzcyhwKS5hZGRDbGFzcyhyKX12YXIgZz10aGlzLmdldENhbGN1bGF0ZWRPZmZzZXQocixjLHUsZCk7dGhpcy5hcHBseVBsYWNlbWVudChnLHIpO3ZhciBtPWZ1bmN0aW9uKCl7dmFyIHQ9cy5ob3ZlclN0YXRlO3MuJGVsZW1lbnQudHJpZ2dlcihcInNob3duLmJzLlwiK3MudHlwZSkscy5ob3ZlclN0YXRlPW51bGwsXCJvdXRcIj09dCYmcy5sZWF2ZShzKX07dC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJHRpcC5oYXNDbGFzcyhcImZhZGVcIik/by5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixtKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChlLlRSQU5TSVRJT05fRFVSQVRJT04pOm0oKX19LGUucHJvdG90eXBlLmFwcGx5UGxhY2VtZW50PWZ1bmN0aW9uKGUsaSl7dmFyIG49dGhpcy50aXAoKSxzPW5bMF0ub2Zmc2V0V2lkdGgsbz1uWzBdLm9mZnNldEhlaWdodCxhPXBhcnNlSW50KG4uY3NzKFwibWFyZ2luLXRvcFwiKSwxMCkscj1wYXJzZUludChuLmNzcyhcIm1hcmdpbi1sZWZ0XCIpLDEwKTtpc05hTihhKSYmKGE9MCksaXNOYU4ocikmJihyPTApLGUudG9wKz1hLGUubGVmdCs9cix0Lm9mZnNldC5zZXRPZmZzZXQoblswXSx0LmV4dGVuZCh7dXNpbmc6ZnVuY3Rpb24odCl7bi5jc3Moe3RvcDpNYXRoLnJvdW5kKHQudG9wKSxsZWZ0Ok1hdGgucm91bmQodC5sZWZ0KX0pfX0sZSksMCksbi5hZGRDbGFzcyhcImluXCIpO3ZhciBsPW5bMF0ub2Zmc2V0V2lkdGgsaD1uWzBdLm9mZnNldEhlaWdodDtcInRvcFwiPT1pJiZoIT1vJiYoZS50b3A9ZS50b3Arby1oKTt2YXIgYz10aGlzLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YShpLGUsbCxoKTtjLmxlZnQ/ZS5sZWZ0Kz1jLmxlZnQ6ZS50b3ArPWMudG9wO3ZhciB1PS90b3B8Ym90dG9tLy50ZXN0KGkpLGQ9dT8yKmMubGVmdC1zK2w6MipjLnRvcC1vK2gscD11P1wib2Zmc2V0V2lkdGhcIjpcIm9mZnNldEhlaWdodFwiO24ub2Zmc2V0KGUpLHRoaXMucmVwbGFjZUFycm93KGQsblswXVtwXSx1KX0sZS5wcm90b3R5cGUucmVwbGFjZUFycm93PWZ1bmN0aW9uKHQsZSxpKXt0aGlzLmFycm93KCkuY3NzKGk/XCJsZWZ0XCI6XCJ0b3BcIiw1MCooMS10L2UpK1wiJVwiKS5jc3MoaT9cInRvcFwiOlwibGVmdFwiLFwiXCIpfSxlLnByb3RvdHlwZS5zZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy50aXAoKSxlPXRoaXMuZ2V0VGl0bGUoKTt0LmZpbmQoXCIudG9vbHRpcC1pbm5lclwiKVt0aGlzLm9wdGlvbnMuaHRtbD9cImh0bWxcIjpcInRleHRcIl0oZSksdC5yZW1vdmVDbGFzcyhcImZhZGUgaW4gdG9wIGJvdHRvbSBsZWZ0IHJpZ2h0XCIpfSxlLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG4oKXtcImluXCIhPXMuaG92ZXJTdGF0ZSYmby5kZXRhY2goKSxzLiRlbGVtZW50JiZzLiRlbGVtZW50LnJlbW92ZUF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpLnRyaWdnZXIoXCJoaWRkZW4uYnMuXCIrcy50eXBlKSxpJiZpKCl9dmFyIHM9dGhpcyxvPXQodGhpcy4kdGlwKSxhPXQuRXZlbnQoXCJoaWRlLmJzLlwiK3RoaXMudHlwZSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGEpLCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpKXJldHVybiBvLnJlbW92ZUNsYXNzKFwiaW5cIiksdC5zdXBwb3J0LnRyYW5zaXRpb24mJm8uaGFzQ2xhc3MoXCJmYWRlXCIpP28ub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsbikuZW11bGF0ZVRyYW5zaXRpb25FbmQoZS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpuKCksdGhpcy5ob3ZlclN0YXRlPW51bGwsdGhpc30sZS5wcm90b3R5cGUuZml4VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50Oyh0LmF0dHIoXCJ0aXRsZVwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHQuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIikpJiZ0LmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIsdC5hdHRyKFwidGl0bGVcIil8fFwiXCIpLmF0dHIoXCJ0aXRsZVwiLFwiXCIpfSxlLnByb3RvdHlwZS5oYXNDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKX0sZS5wcm90b3R5cGUuZ2V0UG9zaXRpb249ZnVuY3Rpb24oZSl7dmFyIGk9KGU9ZXx8dGhpcy4kZWxlbWVudClbMF0sbj1cIkJPRFlcIj09aS50YWdOYW1lLHM9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtudWxsPT1zLndpZHRoJiYocz10LmV4dGVuZCh7fSxzLHt3aWR0aDpzLnJpZ2h0LXMubGVmdCxoZWlnaHQ6cy5ib3R0b20tcy50b3B9KSk7dmFyIG89d2luZG93LlNWR0VsZW1lbnQmJmkgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudCxhPW4/e3RvcDowLGxlZnQ6MH06bz9udWxsOmUub2Zmc2V0KCkscj17c2Nyb2xsOm4/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A6ZS5zY3JvbGxUb3AoKX0sbD1uP3t3aWR0aDp0KHdpbmRvdykud2lkdGgoKSxoZWlnaHQ6dCh3aW5kb3cpLmhlaWdodCgpfTpudWxsO3JldHVybiB0LmV4dGVuZCh7fSxzLHIsbCxhKX0sZS5wcm90b3R5cGUuZ2V0Q2FsY3VsYXRlZE9mZnNldD1mdW5jdGlvbih0LGUsaSxuKXtyZXR1cm5cImJvdHRvbVwiPT10P3t0b3A6ZS50b3ArZS5oZWlnaHQsbGVmdDplLmxlZnQrZS53aWR0aC8yLWkvMn06XCJ0b3BcIj09dD97dG9wOmUudG9wLW4sbGVmdDplLmxlZnQrZS53aWR0aC8yLWkvMn06XCJsZWZ0XCI9PXQ/e3RvcDplLnRvcCtlLmhlaWdodC8yLW4vMixsZWZ0OmUubGVmdC1pfTp7dG9wOmUudG9wK2UuaGVpZ2h0LzItbi8yLGxlZnQ6ZS5sZWZ0K2Uud2lkdGh9fSxlLnByb3RvdHlwZS5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGE9ZnVuY3Rpb24odCxlLGksbil7dmFyIHM9e3RvcDowLGxlZnQ6MH07aWYoIXRoaXMuJHZpZXdwb3J0KXJldHVybiBzO3ZhciBvPXRoaXMub3B0aW9ucy52aWV3cG9ydCYmdGhpcy5vcHRpb25zLnZpZXdwb3J0LnBhZGRpbmd8fDAsYT10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtpZigvcmlnaHR8bGVmdC8udGVzdCh0KSl7dmFyIHI9ZS50b3Atby1hLnNjcm9sbCxsPWUudG9wK28tYS5zY3JvbGwrbjtyPGEudG9wP3MudG9wPWEudG9wLXI6bD5hLnRvcCthLmhlaWdodCYmKHMudG9wPWEudG9wK2EuaGVpZ2h0LWwpfWVsc2V7dmFyIGg9ZS5sZWZ0LW8sYz1lLmxlZnQrbytpO2g8YS5sZWZ0P3MubGVmdD1hLmxlZnQtaDpjPmEucmlnaHQmJihzLmxlZnQ9YS5sZWZ0K2Eud2lkdGgtYyl9cmV0dXJuIHN9LGUucHJvdG90eXBlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudCxlPXRoaXMub3B0aW9ucztyZXR1cm4gdC5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGl0bGU/ZS50aXRsZS5jYWxsKHRbMF0pOmUudGl0bGUpfSxlLnByb3RvdHlwZS5nZXRVSUQ9ZnVuY3Rpb24odCl7ZG97dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpfXdoaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKTtyZXR1cm4gdH0sZS5wcm90b3R5cGUudGlwPWZ1bmN0aW9uKCl7aWYoIXRoaXMuJHRpcCYmKHRoaXMuJHRpcD10KHRoaXMub3B0aW9ucy50ZW1wbGF0ZSksMSE9dGhpcy4kdGlwLmxlbmd0aCkpdGhyb3cgbmV3IEVycm9yKHRoaXMudHlwZStcIiBgdGVtcGxhdGVgIG9wdGlvbiBtdXN0IGNvbnNpc3Qgb2YgZXhhY3RseSAxIHRvcC1sZXZlbCBlbGVtZW50IVwiKTtyZXR1cm4gdGhpcy4kdGlwfSxlLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLnRvb2x0aXAtYXJyb3dcIil9LGUucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMH0sZS5wcm90b3R5cGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hMX0sZS5wcm90b3R5cGUudG9nZ2xlRW5hYmxlZD1mdW5jdGlvbigpe3RoaXMuZW5hYmxlZD0hdGhpcy5lbmFibGVkfSxlLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcztlJiYoKGk9dChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpKXx8KGk9bmV3IHRoaXMuY29uc3RydWN0b3IoZS5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLHQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGkpKSksZT8oaS5pblN0YXRlLmNsaWNrPSFpLmluU3RhdGUuY2xpY2ssaS5pc0luU3RhdGVUcnVlKCk/aS5lbnRlcihpKTppLmxlYXZlKGkpKTppLnRpcCgpLmhhc0NsYXNzKFwiaW5cIik/aS5sZWF2ZShpKTppLmVudGVyKGkpfSxlLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KSx0aGlzLmhpZGUoZnVuY3Rpb24oKXt0LiRlbGVtZW50Lm9mZihcIi5cIit0LnR5cGUpLnJlbW92ZURhdGEoXCJicy5cIit0LnR5cGUpLHQuJHRpcCYmdC4kdGlwLmRldGFjaCgpLHQuJHRpcD1udWxsLHQuJGFycm93PW51bGwsdC4kdmlld3BvcnQ9bnVsbCx0LiRlbGVtZW50PW51bGx9KX07dmFyIGk9dC5mbi50b29sdGlwO3QuZm4udG9vbHRpcD1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPW4uZGF0YShcImJzLnRvb2x0aXBcIiksbz1cIm9iamVjdFwiPT10eXBlb2YgaSYmaTshcyYmL2Rlc3Ryb3l8aGlkZS8udGVzdChpKXx8KHN8fG4uZGF0YShcImJzLnRvb2x0aXBcIixzPW5ldyBlKHRoaXMsbykpLFwic3RyaW5nXCI9PXR5cGVvZiBpJiZzW2ldKCkpfSl9LHQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvcj1lLHQuZm4udG9vbHRpcC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4udG9vbHRpcD1pLHRoaXN9fShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPWZ1bmN0aW9uKHQsZSl7dGhpcy5pbml0KFwicG9wb3ZlclwiLHQsZSl9O2lmKCF0LmZuLnRvb2x0aXApdGhyb3cgbmV3IEVycm9yKFwiUG9wb3ZlciByZXF1aXJlcyB0b29sdGlwLmpzXCIpO2UuVkVSU0lPTj1cIjMuMy43XCIsZS5ERUZBVUxUUz10LmV4dGVuZCh7fSx0LmZuLnRvb2x0aXAuQ29uc3RydWN0b3IuREVGQVVMVFMse3BsYWNlbWVudDpcInJpZ2h0XCIsdHJpZ2dlcjpcImNsaWNrXCIsY29udGVudDpcIlwiLHRlbXBsYXRlOic8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGgzIGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvaDM+PGRpdiBjbGFzcz1cInBvcG92ZXItY29udGVudFwiPjwvZGl2PjwvZGl2Pid9KSxlLnByb3RvdHlwZT10LmV4dGVuZCh7fSx0LmZuLnRvb2x0aXAuQ29uc3RydWN0b3IucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuREVGQVVMVFN9LGUucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRpcCgpLGU9dGhpcy5nZXRUaXRsZSgpLGk9dGhpcy5nZXRDb250ZW50KCk7dC5maW5kKFwiLnBvcG92ZXItdGl0bGVcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGUpLHQuZmluZChcIi5wb3BvdmVyLWNvbnRlbnRcIikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD9cInN0cmluZ1wiPT10eXBlb2YgaT9cImh0bWxcIjpcImFwcGVuZFwiOlwidGV4dFwiXShpKSx0LnJlbW92ZUNsYXNzKFwiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW5cIiksdC5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaHRtbCgpfHx0LmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5oaWRlKCl9LGUucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sZS5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQsZT10aGlzLm9wdGlvbnM7cmV0dXJuIHQuYXR0cihcImRhdGEtY29udGVudFwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29udGVudD9lLmNvbnRlbnQuY2FsbCh0WzBdKTplLmNvbnRlbnQpfSxlLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLmFycm93XCIpfTt2YXIgaT10LmZuLnBvcG92ZXI7dC5mbi5wb3BvdmVyPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMucG9wb3ZlclwiKSxvPVwib2JqZWN0XCI9PXR5cGVvZiBpJiZpOyFzJiYvZGVzdHJveXxoaWRlLy50ZXN0KGkpfHwoc3x8bi5kYXRhKFwiYnMucG9wb3ZlclwiLHM9bmV3IGUodGhpcyxvKSksXCJzdHJpbmdcIj09dHlwZW9mIGkmJnNbaV0oKSl9KX0sdC5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWUsdC5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5wb3BvdmVyPWksdGhpc319KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShpLG4pe3RoaXMuJGJvZHk9dChkb2N1bWVudC5ib2R5KSx0aGlzLiRzY3JvbGxFbGVtZW50PXQodChpKS5pcyhkb2N1bWVudC5ib2R5KT93aW5kb3c6aSksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGUuREVGQVVMVFMsbiksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8XCJcIikrXCIgLm5hdiBsaSA+IGFcIix0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5zY3JvbGxIZWlnaHQ9MCx0aGlzLiRzY3JvbGxFbGVtZW50Lm9uKFwic2Nyb2xsLmJzLnNjcm9sbHNweVwiLHQucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX1mdW5jdGlvbiBpKGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMuc2Nyb2xsc3B5XCIpLG89XCJvYmplY3RcIj09dHlwZW9mIGkmJmk7c3x8bi5kYXRhKFwiYnMuc2Nyb2xsc3B5XCIscz1uZXcgZSh0aGlzLG8pKSxcInN0cmluZ1wiPT10eXBlb2YgaSYmc1tpXSgpfSl9ZS5WRVJTSU9OPVwiMy4zLjdcIixlLkRFRkFVTFRTPXtvZmZzZXQ6MTB9LGUucHJvdG90eXBlLmdldFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8TWF0aC5tYXgodGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9LGUucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9XCJvZmZzZXRcIixuPTA7dGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLnNjcm9sbEhlaWdodD10aGlzLmdldFNjcm9sbEhlaWdodCgpLHQuaXNXaW5kb3codGhpcy4kc2Nyb2xsRWxlbWVudFswXSl8fChpPVwicG9zaXRpb25cIixuPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9ZS5kYXRhKFwidGFyZ2V0XCIpfHxlLmF0dHIoXCJocmVmXCIpLG89L14jLi8udGVzdChzKSYmdChzKTtyZXR1cm4gbyYmby5sZW5ndGgmJm8uaXMoXCI6dmlzaWJsZVwiKSYmW1tvW2ldKCkudG9wK24sc11dfHxudWxsfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KS5lYWNoKGZ1bmN0aW9uKCl7ZS5vZmZzZXRzLnB1c2godGhpc1swXSksZS50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGk9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxuPXRoaXMub3B0aW9ucy5vZmZzZXQraS10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLHM9dGhpcy5vZmZzZXRzLG89dGhpcy50YXJnZXRzLGE9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWkmJnRoaXMucmVmcmVzaCgpLGU+PW4pcmV0dXJuIGEhPSh0PW9bby5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKHQpO2lmKGEmJmU8c1swXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKHQ9cy5sZW5ndGg7dC0tOylhIT1vW3RdJiZlPj1zW3RdJiYodm9pZCAwPT09c1t0KzFdfHxlPHNbdCsxXSkmJnRoaXMuYWN0aXZhdGUob1t0XSl9LGUucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlVGFyZ2V0PWUsdGhpcy5jbGVhcigpO3ZhciBpPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrZSsnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2UrJ1wiXScsbj10KGkpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtuLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKG49bi5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLG4udHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0KHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIG49dC5mbi5zY3JvbGxzcHk7dC5mbi5zY3JvbGxzcHk9aSx0LmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1lLHQuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5zY3JvbGxzcHk9bix0aGlzfSx0KHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7aS5jYWxsKGUsZS5kYXRhKCkpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMudGFiXCIpO3N8fG4uZGF0YShcImJzLnRhYlwiLHM9bmV3IGkodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZzW2VdKCl9KX12YXIgaT1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQ9dChlKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGkucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQsaT1lLmNsb3Nlc3QoXCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpXCIpLG49ZS5kYXRhKFwidGFyZ2V0XCIpO2lmKG58fChuPShuPWUuYXR0cihcImhyZWZcIikpJiZuLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sXCJcIikpLCFlLnBhcmVudChcImxpXCIpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXt2YXIgcz1pLmZpbmQoXCIuYWN0aXZlOmxhc3QgYVwiKSxvPXQuRXZlbnQoXCJoaWRlLmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KSxhPXQuRXZlbnQoXCJzaG93LmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OnNbMF19KTtpZihzLnRyaWdnZXIobyksZS50cmlnZ2VyKGEpLCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIHI9dChuKTt0aGlzLmFjdGl2YXRlKGUuY2xvc2VzdChcImxpXCIpLGkpLHRoaXMuYWN0aXZhdGUocixyLnBhcmVudCgpLGZ1bmN0aW9uKCl7cy50cmlnZ2VyKHt0eXBlOlwiaGlkZGVuLmJzLnRhYlwiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pLGUudHJpZ2dlcih7dHlwZTpcInNob3duLmJzLnRhYlwiLHJlbGF0ZWRUYXJnZXQ6c1swXX0pfSl9fX0saS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZSxuLHMpe2Z1bmN0aW9uIG8oKXthLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLmZpbmQoXCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSxlLmFkZENsYXNzKFwiYWN0aXZlXCIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLHI/KGVbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhcImluXCIpKTplLnJlbW92ZUNsYXNzKFwiZmFkZVwiKSxlLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmZS5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCkscyYmcygpfXZhciBhPW4uZmluZChcIj4gLmFjdGl2ZVwiKSxyPXMmJnQuc3VwcG9ydC50cmFuc2l0aW9uJiYoYS5sZW5ndGgmJmEuaGFzQ2xhc3MoXCJmYWRlXCIpfHwhIW4uZmluZChcIj4gLmZhZGVcIikubGVuZ3RoKTthLmxlbmd0aCYmcj9hLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6bygpLGEucmVtb3ZlQ2xhc3MoXCJpblwiKX07dmFyIG49dC5mbi50YWI7dC5mbi50YWI9ZSx0LmZuLnRhYi5Db25zdHJ1Y3Rvcj1pLHQuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi50YWI9bix0aGlzfTt2YXIgcz1mdW5jdGlvbihpKXtpLnByZXZlbnREZWZhdWx0KCksZS5jYWxsKHQodGhpcyksXCJzaG93XCIpfTt0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nLHMpLm9uKFwiY2xpY2suYnMudGFiLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZT1cInBpbGxcIl0nLHMpfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcykscz1uLmRhdGEoXCJicy5hZmZpeFwiKSxvPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlO3N8fG4uZGF0YShcImJzLmFmZml4XCIscz1uZXcgaSh0aGlzLG8pKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmc1tlXSgpfSl9dmFyIGk9ZnVuY3Rpb24oZSxuKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saS5ERUZBVUxUUyxuKSx0aGlzLiR0YXJnZXQ9dCh0aGlzLm9wdGlvbnMudGFyZ2V0KS5vbihcInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaVwiLHQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKS5vbihcImNsaWNrLmJzLmFmZml4LmRhdGEtYXBpXCIsdC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PXQoZSksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5SRVNFVD1cImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b21cIixpLkRFRkFVTFRTPXtvZmZzZXQ6MCx0YXJnZXQ6d2luZG93fSxpLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUsaSxuKXt2YXIgcz10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksbz10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGE9dGhpcy4kdGFyZ2V0LmhlaWdodCgpO2lmKG51bGwhPWkmJlwidG9wXCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gczxpJiZcInRvcFwiO2lmKFwiYm90dG9tXCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gbnVsbCE9aT8hKHMrdGhpcy51bnBpbjw9by50b3ApJiZcImJvdHRvbVwiOiEocythPD10LW4pJiZcImJvdHRvbVwiO3ZhciByPW51bGw9PXRoaXMuYWZmaXhlZCxsPXI/czpvLnRvcDtyZXR1cm4gbnVsbCE9aSYmczw9aT9cInRvcFwiOm51bGwhPW4mJmwrKHI/YTplKT49dC1uJiZcImJvdHRvbVwifSxpLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhpLlJFU0VUKS5hZGRDbGFzcyhcImFmZml4XCIpO3ZhciB0PXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxlPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCk7cmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0PWUudG9wLXR9LGkucHJvdG90eXBlLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wPWZ1bmN0aW9uKCl7c2V0VGltZW91dCh0LnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0saS5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSl7dmFyIGU9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxuPXRoaXMub3B0aW9ucy5vZmZzZXQscz1uLnRvcCxvPW4uYm90dG9tLGE9TWF0aC5tYXgodChkb2N1bWVudCkuaGVpZ2h0KCksdChkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7XCJvYmplY3RcIiE9dHlwZW9mIG4mJihvPXM9biksXCJmdW5jdGlvblwiPT10eXBlb2YgcyYmKHM9bi50b3AodGhpcy4kZWxlbWVudCkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihvPW4uYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgcj10aGlzLmdldFN0YXRlKGEsZSxzLG8pO2lmKHRoaXMuYWZmaXhlZCE9cil7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoXCJ0b3BcIixcIlwiKTt2YXIgbD1cImFmZml4XCIrKHI/XCItXCIrcjpcIlwiKSxoPXQuRXZlbnQobCtcIi5icy5hZmZpeFwiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaCksaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPXIsdGhpcy51bnBpbj1cImJvdHRvbVwiPT1yP3RoaXMuZ2V0UGlubmVkT2Zmc2V0KCk6bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGkuUkVTRVQpLmFkZENsYXNzKGwpLnRyaWdnZXIobC5yZXBsYWNlKFwiYWZmaXhcIixcImFmZml4ZWRcIikrXCIuYnMuYWZmaXhcIil9XCJib3R0b21cIj09ciYmdGhpcy4kZWxlbWVudC5vZmZzZXQoe3RvcDphLWUtb30pfX07dmFyIG49dC5mbi5hZmZpeDt0LmZuLmFmZml4PWUsdC5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1pLHQuZm4uYWZmaXgubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmFmZml4PW4sdGhpc30sdCh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtc3B5PVwiYWZmaXhcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkuZGF0YSgpO24ub2Zmc2V0PW4ub2Zmc2V0fHx7fSxudWxsIT1uLm9mZnNldEJvdHRvbSYmKG4ub2Zmc2V0LmJvdHRvbT1uLm9mZnNldEJvdHRvbSksbnVsbCE9bi5vZmZzZXRUb3AmJihuLm9mZnNldC50b3A9bi5vZmZzZXRUb3ApLGUuY2FsbChpLG4pfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQpe2lmKCF0KXJldHVyblwiXCI7dmFyIGUsaT1cIlwiO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKz0xKWkrPU1bdC5jaGFyQXQoZSldfHx0LmNoYXJBdChlKTtyZXR1cm4gaX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLFwiXFxcXCQmXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHZvaWQgMCE9PXR9ZnVuY3Rpb24gcyhlLGksbyxhKXtyZXR1cm4gbihlKSYmIXQuaXNBcnJheShlKT90LmlzRnVuY3Rpb24oZSk/ZS5hcHBseSh0aGlzLGkpOmE6bihvKT9zLmNhbGwodGhpcyxvLGkpOmF9ZnVuY3Rpb24gbyh0LGUsaSxvKXtyZXR1cm4gcy5jYWxsKHRoaXMsbih0aGlzLnNvdXJjZVtlXSkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnNvdXJjZVtlXSx0KT90aGlzLnNvdXJjZVtlXVt0XTp2b2lkIDAsaSxmdW5jdGlvbigpe3JldHVybiBzLmNhbGwodGhpcyxuKHRoaXNbdF1bZV0pP3RoaXNbdF1bZV06bih0aGlzW3RdWzBdKT90aGlzW3RdWzBdOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLHQpP3RoaXNbdF06dm9pZCAwLGksU1t0XVtlXXx8U1t0XVswXXx8U1t0XSxvKX0sbyl9ZnVuY3Rpb24gYShlLGkpe3JldHVybiBuKGkpfHwoaT0wKSx0LmlzQXJyYXkodGhpcy5zb3VyY2UpJiZuKHRoaXMuc291cmNlW2ldKSYmbih0aGlzLnNvdXJjZVtpXVtlXSk/dGhpcy5zb3VyY2VbaV1bZV06bih0aGlzW2VdKT90LmlzQXJyYXkodGhpc1tlXSk/bih0aGlzW2VdW2ldKT90aGlzW2VdW2ldOm4odGhpc1tlXVswXSk/dGhpc1tlXVswXTpudWxsOnRoaXNbZV06bnVsbH1mdW5jdGlvbiByKGUsaSxuLHMpe2kueGhyJiZpLnhoci5hYm9ydCgpLGkueGhyPXQuYWpheCh0LmV4dGVuZCghMCx7dXJsOmUsdHlwZTpcIkdFVFwiLGFzeW5jOiEwLGNhY2hlOiExLGRhdGFUeXBlOlwianNvblwifSxpLmFqYXgpKS5kb25lKGZ1bmN0aW9uKGUpe24mJm4uYXBwbHkodGhpcyx0Lm1ha2VBcnJheShhcmd1bWVudHMpKX0pLmZhaWwoZnVuY3Rpb24odCxlKXtzJiZjb25zb2xlLmxvZyhcIlJlcXVlc3QgZmFpbGVkOiBcIitlKX0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgaSxuPSExO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKz0xKWlmKG49by5jYWxsKHRoaXMsXCJmaW5kUmlnaHRcIixpLFt0W2ldLGUsaV0pKXJldHVybntyaWdodDpuLHNvdXJjZTppfTtyZXR1cm4hMX1mdW5jdGlvbiBoKHQsZSl7dmFyIGk7Zm9yKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1vLmNhbGwodGhpcyxcInByZXBhcnNlXCIsaSxbdFtpXSxlXSx0W2ldKX0uY2FsbCh0aGlzLHQsZSksaT0wO2k8dC5sZW5ndGg7aSs9MSl0W2ldPW8uY2FsbCh0aGlzLFwiZmlsdGVyXCIsaSxbdFtpXSxlLGldLHRbaV0pfWZ1bmN0aW9uIGMoZSxpLGEpe3ZhciBsLGg9dGhpcztpZih0LmlzRnVuY3Rpb24oaC5zb3VyY2UpKWguc291cmNlLmFwcGx5KGgsW2UsZnVuY3Rpb24odCl7aT1bdF0scy5jYWxsKGgsYSxbZV0pfSxpLDBdKTtlbHNlIGZvcihsPTA7bDxoLnNvdXJjZS5sZW5ndGg7bCs9MSlpZih0LmlzQXJyYXkoaC5zb3VyY2VbbF0pKWlbbF09aC5zb3VyY2VbbF07ZWxzZSBpZih0LmlzRnVuY3Rpb24oaC5zb3VyY2VbbF0pKSFmdW5jdGlvbihuKXtoLnNvdXJjZVtuXS5hcHBseShoLFtlLGZ1bmN0aW9uKG8pe2lmKGlbbl18fChpW25dPVtdKSxvJiZ0LmlzQXJyYXkobykpc3dpdGNoKGguYXBwZW5kTWV0aG9kKXtjYXNlXCJyZXBsYWNlXCI6aVtuXT1vO2JyZWFrO2RlZmF1bHQ6aVtuXT1pW25dLmNvbmNhdChvKX1zLmNhbGwoaCxhLFtlXSl9LGksbl0pfShsKTtlbHNlIHN3aXRjaChoLnNvdXJjZVtsXS50eXBlKXtjYXNlXCJyZW1vdGVcIjppZihuKGguc291cmNlW2xdLnVybCkmJighbihoLnNvdXJjZVtsXS5taW5MZW5ndGgpfHxlLmxlbmd0aD49aC5zb3VyY2VbbF0ubWluTGVuZ3RoKSl7dmFyIGM9by5jYWxsKGgsXCJyZXBsYWNlXCIsbCxbaC5zb3VyY2VbbF0udXJsLGVdLFwiXCIpO2lbbF18fChpW2xdPVtdKSxmdW5jdGlvbih0KXtyKGMsaC5zb3VyY2VbdF0sZnVuY3Rpb24obil7aVt0XT1uLHMuY2FsbChoLGEsW2VdKX0saC5kZWJ1Zyl9KGwpfWJyZWFrO2RlZmF1bHQ6bihoLnNvdXJjZVtsXS5kYXRhKT9pW2xdPWguc291cmNlW2xdLmRhdGE6aVtsXT1oLnNvdXJjZVtsXX1zLmNhbGwoaCxhLFtlXSl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiEhKG4odC5kYXRhKFwic291cmNlXCIpKSYmbih0LmRhdGEoXCJwaWRcIikpJiZuKGVbdC5kYXRhKFwic291cmNlXCIpXSkmJm4oZVt0LmRhdGEoXCJzb3VyY2VcIildW3QuZGF0YShcInBpZFwiKV0pKSYmZVt0LmRhdGEoXCJzb3VyY2VcIildW3QuZGF0YShcInBpZFwiKV19ZnVuY3Rpb24gZChlLGkpe2Z1bmN0aW9uIHMoKXtpZihNLnZhbCgpIT1IKXtpZigoSD1NLnZhbCgpKS5sZW5ndGg8aS5taW5MZW5ndGgpcmV0dXJuIHZvaWQgTS50cmlnZ2VyKFwiY2xvc2UueGRzb2Z0XCIpO2MuY2FsbChpLEgsQSxmdW5jdGlvbih0KXt2YXIgZTtpZih0PT1IKWlmKGguY2FsbChpLEEsdCksTS50cmlnZ2VyKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIiksaS5zaG93SGludCYmSC5sZW5ndGgmJkgubGVuZ3RoPD1NLnByb3AoXCJzaXplXCIpJiYoZT1sLmNhbGwoaSxBLEgpKSl7dmFyIG49by5jYWxsKGksXCJnZXRUaXRsZVwiLGUuc291cmNlLFtlLnJpZ2h0LGUuc291cmNlXSk7bj10K24uc3Vic3RyKHQubGVuZ3RoKSxFLnZhbChuKX1lbHNlIEUudmFsKFwiXCIpfSl9fWZ1bmN0aW9uIGEodCl7dmFyIGUsbj10LmtleUNvZGU7c3dpdGNoKG4pe2Nhc2UgeDpjYXNlIEM6Y2FzZSBrOmNhc2UgVDpjYXNlIEQ6aWYodC5zaGlmdEtleXx8dC5jdHJsS2V5KXJldHVybiEwO2JyZWFrO2Nhc2UgXzpjYXNlIGI6cmV0dXJuITA7Y2FzZSBmOmNhc2UgcDpyZXR1cm4hIShJfHxQfHx0LnNoaWZ0S2V5fHx0LmN0cmxLZXkpfHwoTj1NLnZhbCgpLEw9ZnVuY3Rpb24odCl7aWYodCl7aWYodC5zZWxlY3Rpb25TdGFydClyZXR1cm4gdC5zZWxlY3Rpb25TdGFydDtpZihkb2N1bWVudC5zZWxlY3Rpb24pe3QuZm9jdXMoKTt2YXIgZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKSxpPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQubGVuZ3RoO3JldHVybiBlLm1vdmVTdGFydChcImNoYXJhY3RlclwiLC10LnZhbHVlLmxlbmd0aCksZS50ZXh0Lmxlbmd0aC1pfX19KE1bMF0pLG4hPT1mfHxMIT09Ti5sZW5ndGh8fCgoZT1sLmNhbGwoaSxBLE4pKT9NLnRyaWdnZXIoXCJwaWNrLnhkc29mdFwiLFtvLmNhbGwoaSxcImdldFZhbHVlXCIsZS5zb3VyY2UsW2UucmlnaHQsZS5zb3VyY2VdKV0pOk0udHJpZ2dlcihcInBpY2sueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMSkpO2Nhc2UgdjpyZXR1cm4hMDtjYXNlIHk6cmV0dXJuIU98fChNLnRyaWdnZXIoXCJwaWNrLnhkc29mdFwiKSx0LnByZXZlbnREZWZhdWx0KCksITEpO2Nhc2UgdzpyZXR1cm4gTS52YWwoSCkudHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKSx0LnByZXZlbnREZWZhdWx0KCksITE7Y2FzZSBtOmNhc2UgZzppZighTylyZXR1cm4gTS50cmlnZ2VyKFwib3Blbi54ZHNvZnRcIiksTS50cmlnZ2VyKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExO3o9Uy5maW5kKFwiZGl2LmFjdGl2ZVwiKTt2YXIgcz1uPT1tP1wibmV4dFwiOlwicHJldlwiLGE9ITA7cmV0dXJuIHoubGVuZ3RoPyh6LnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHpbc10oKS5sZW5ndGg/eltzXSgpLmFkZENsYXNzKFwiYWN0aXZlXCIpOihNLnZhbChIKSxhPSExKSk6Uy5jaGlsZHJlbigpLmVxKG49PW0/MDotMSkuYWRkQ2xhc3MoXCJhY3RpdmVcIiksYSYmTS50cmlnZ2VyKFwidGltZXBpY2sueGRzb2Z0XCIpLFMudHJpZ2dlcihcInVwZGF0ZXNjcm9sbC54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExfX1pZighdChlKS5oYXNDbGFzcyhcInhkc29mdF9pbnB1dFwiKSl7dmFyIHIsZD10KCc8ZGl2IGNsYXNzPVwieGRzb2Z0X2F1dG9jb21wbGV0ZVwiPjwvZGl2PicpLFM9dCgnPGRpdiBjbGFzcz1cInhkc29mdF9hdXRvY29tcGxldGVfZHJvcGRvd25cIj48L2Rpdj4nKSxFPXQoJzxpbnB1dCByZWFkb25seSBjbGFzcz1cInhkc29mdF9hdXRvY29tcGxldGVfaGludFwiLz4nKSxNPXQoZSksQT1bXSxPPSExLE49XCJcIixIPVwiXCIsej1udWxsLEw9MDtNLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiLGkpLFMub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKFwidXBkYXRlc2Nyb2xsLnhkc29mdFwiLGZ1bmN0aW9uKCl7dmFyIHQ9Uy5maW5kKFwiLmFjdGl2ZVwiKTtpZih0Lmxlbmd0aCl7dmFyIGU9dC5wb3NpdGlvbigpLnRvcCxpPXQub3V0ZXJIZWlnaHQoITApLG49Uy5zY3JvbGxUb3AoKSxzPVMuaGVpZ2h0KCk7ZTwwP1Muc2Nyb2xsVG9wKG4tTWF0aC5hYnMoZSkpOmUraT5zJiZTLnNjcm9sbFRvcChuK2UraS1zKX19KSxkLmNzcyh7ZGlzcGxheTpNLmNzcyhcImRpc3BsYXlcIiksd2lkdGg6TS5jc3MoXCJ3aWR0aFwiKX0pLGkuc3R5bGUmJmQuY3NzKGkuc3R5bGUpLE0uYWRkQ2xhc3MoXCJ4ZHNvZnRfaW5wdXRcIikuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpO3ZhciBXPW51bGwsUj1udWxsLCQ9ITE7Uy5vbihcIm1vdXNlbW92ZVwiLFwiZGl2XCIsZnVuY3Rpb24oKXtpZih0KHRoaXMpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXJldHVybiEwO1MuZmluZChcImRpdlwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSx0KHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlXCIpfSkub24oXCJtb3VzZWRvd25cIixcImRpdlwiLGZ1bmN0aW9uKGUpe1MuZmluZChcImRpdlwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSx0KHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlXCIpLE0udHJpZ2dlcihcInBpY2sueGRzb2Z0XCIpfSkub24oXCJ0b3VjaHN0YXJ0XCIsXCJkaXZcIixmdW5jdGlvbih0KXtXPXQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgsUj10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRZfSkub24oXCJ0b3VjaGVuZFwiLFwiZGl2XCIsZnVuY3Rpb24oZSl7ITE9PT0kJiYoUy5maW5kKFwiZGl2XCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHQodGhpcykuYWRkQ2xhc3MoXCJhY3RpdmVcIiksTS50cmlnZ2VyKFwicGljay54ZHNvZnRcIikpLCQ9ITF9KS5vbihcInRvdWNobW92ZVwiLFwiZGl2XCIsZnVuY3Rpb24odCl7aWYoVyYmUil7dmFyIGU9dC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCxpPXQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFksbj1XLWUscz1SLWk7JD1NYXRoLmFicyhuKT5NYXRoLmFicyhzKT9uPjA/XCJsZWZ0XCI6XCJyaWdodFwiOnM+MD9cInRvcFwiOlwiYm90dG1cIixXPW51bGwsUj1udWxsfX0pLE0uZGF0YShcInhkc29mdF9hdXRvY29tcGxldGVcIixBKS5hZnRlcihkKS5vbihcInBpY2sueGRzb2Z0XCIsZnVuY3Rpb24odCxlKXtNLnRyaWdnZXIoXCJ0aW1lcGljay54ZHNvZnRcIixlKSxIPU0udmFsKCksTS50cmlnZ2VyKFwiY2xvc2UueGRzb2Z0XCIpLCh6PVMuZmluZChcImRpdi5hY3RpdmVcIikuZXEoMCkpLmxlbmd0aHx8KHo9Uy5jaGlsZHJlbigpLmZpcnN0KCkpLE0udHJpZ2dlcihcInNlbGVjdGVkLnhkc29mdFwiLFt1KHosQSldKSxpLmFmdGVyU2VsZWN0ZWQmJmkuYWZ0ZXJTZWxlY3RlZCgpfSkub24oXCJ0aW1lcGljay54ZHNvZnRcIixmdW5jdGlvbih0LGUpeyh6PVMuZmluZChcImRpdi5hY3RpdmVcIikpLmxlbmd0aHx8KHo9Uy5jaGlsZHJlbigpLmZpcnN0KCkpLHoubGVuZ3RoJiYobihlKT9NLnZhbChlKTpNLnZhbChmdW5jdGlvbih0LGUpe3ZhciBpPXUodCxlKTtyZXR1cm4gaT9vLmNhbGwodGhpcyxcImdldFZhbHVlXCIsdC5kYXRhKFwic291cmNlXCIpLFtpLHQuZGF0YShcInNvdXJjZVwiKV0pOm4odC5kYXRhKFwidmFsdWVcIikpP2RlY29kZVVSSUNvbXBvbmVudCh0LmRhdGEoXCJ2YWx1ZVwiKSk6dC5odG1sKCl9LmNhbGwoaSx6LEEpKSxNLnRyaWdnZXIoXCJhdXRvY29tcGxldGVkLnhkc29mdFwiLFt1KHosQSldKSxFLnZhbChcIlwiKSxmdW5jdGlvbih0LGUpe2lmKHQuc2V0U2VsZWN0aW9uUmFuZ2UpdC5mb2N1cygpLHQuc2V0U2VsZWN0aW9uUmFuZ2UoZSxlKTtlbHNlIGlmKHQuY3JlYXRlVGV4dFJhbmdlKXt2YXIgaT10LmNyZWF0ZVRleHRSYW5nZSgpO2kuY29sbGFwc2UoITApLGkubW92ZUVuZChcImNoYXJhY3RlclwiLGUpLGkubW92ZVN0YXJ0KFwiY2hhcmFjdGVyXCIsZSksaS5zZWxlY3QoKX19KE1bMF0sTS52YWwoKS5sZW5ndGgpKX0pLm9uKFwia2V5ZG93bi54ZHNvZnQgaW5wdXQueGRzb2Z0IGN1dC54ZHNvZnQgcGFzdGUueGRzb2Z0XCIsZnVuY3Rpb24odCl7dmFyIGU9YSh0KTtpZighMT09PWV8fCEwPT09ZSlyZXR1cm4gZTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cygpfSwxKSxzKCl9KS5vbihcImNoYW5nZS54ZHNvZnRcIixmdW5jdGlvbih0KXtIPU0udmFsKCl9KSxIPU0udmFsKCksYy5jYWxsKGksTS52YWwoKSxBLGZ1bmN0aW9uKHQpe2guY2FsbChpLEEsdCl9KSxpLm9wZW5PbkZvY3VzJiZNLm9uKFwiZm9jdXNpbi54ZHNvZnRcIixmdW5jdGlvbigpe00udHJpZ2dlcihcIm9wZW4ueGRzb2Z0XCIpLE0udHJpZ2dlcihcInVwZGF0ZUNvbnRlbnQueGRzb2Z0XCIpfSksaS5jbG9zZU9uQmx1ciYmTS5vbihcImZvY3Vzb3V0Lnhkc29mdFwiLGZ1bmN0aW9uKCl7TS50cmlnZ2VyKFwiY2xvc2UueGRzb2Z0XCIpfSksZC5hcHBlbmQoTSkuYXBwZW5kKFMpO3ZhciBqPSExLEY9MDtNLm9uKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIsZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQoRiksRj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYoZC5jc3Moe2Rpc3BsYXk6TS5jc3MoXCJkaXNwbGF5XCIpLHdpZHRoOk0uY3NzKFwid2lkdGhcIil9KSxTLmNzcyh0LmV4dGVuZCghMCx7bGVmdDpNLnBvc2l0aW9uKCkubGVmdCx0b3A6TS5wb3NpdGlvbigpLnRvcCtwYXJzZUludChNLmNzcyhcIm1hcmdpblRvcFwiKSkrcGFyc2VJbnQoTVswXS5vZmZzZXRIZWlnaHQpLG1hcmdpbkxlZnQ6TS5jc3MoXCJtYXJnaW5MZWZ0XCIpLG1hcmdpblJpZ2h0Ok0uY3NzKFwibWFyZ2luUmlnaHRcIiksd2lkdGg6XCIxMDAlXCI9PWkuZHJvcGRvd25XaWR0aD9NWzBdLm9mZnNldFdpZHRoOmkuZHJvcGRvd25XaWR0aH0saS5kcm9wZG93blN0eWxlKSksaS5zaG93SGludCl7dmFyIGU9Z2V0Q29tcHV0ZWRTdHlsZShNWzBdLFwiXCIpO0VbMF0uc3R5bGUuY3NzVGV4dD1lLmNzc1RleHQsRS5jc3Moe1wiYm94LXNpemluZ1wiOmUuYm94U2l6aW5nLGJvcmRlclN0eWxlOlwic29saWRcIixib3JkZXJDb2xsYXBzZTplLmJvcmRlckNvbGxhcHNlLGJvcmRlckxlZnRXaWR0aDplLmJvcmRlckxlZnRXaWR0aCxib3JkZXJSaWdodFdpZHRoOmUuYm9yZGVyUmlnaHRXaWR0aCxib3JkZXJUb3BXaWR0aDplLmJvcmRlclRvcFdpZHRoLGJvcmRlckJvdHRvbVdpZHRoOmUuYm9yZGVyQm90dG9tV2lkdGgscGFkZGluZ0JvdHRvbTplLnBhZGRpbmdCb3R0b20sbWFyZ2luQm90dG9tOmUubWFyZ2luQm90dG9tLHBhZGRpbmdUb3A6ZS5wYWRkaW5nVG9wLG1hcmdpblRvcDplLm1hcmdpblRvcCxwYWRkaW5nTGVmdDplLnBhZGRpbmdMZWZ0LG1hcmdpbkxlZnQ6ZS5tYXJnaW5MZWZ0LHBhZGRpbmdSaWdodDplLnBhZGRpbmdSaWdodCxtYXJnaW5SaWdodDplLm1hcmdpblJpZ2h0LG1heEhlaWdodDplLm1heEhlaWdodCxtaW5IZWlnaHQ6ZS5taW5IZWlnaHQsbWF4V2lkdGg6ZS5tYXhXaWR0aCxtaW5XaWR0aDplLm1pbldpZHRoLHdpZHRoOmUud2lkdGgsbGV0dGVyU3BhY2luZzplLmxldHRlclNwYWNpbmcsbGluZUhlaWdodDplLmxpbmVIZWlnaHQsb3V0bGluZVdpZHRoOmUub3V0bGluZVdpZHRoLGZvbnRGYW1pbHk6ZS5mb250RmFtaWx5LGZvbnRWYXJpYW50OmUuZm9udFZhcmlhbnQsZm9udFN0eWxlOk0uY3NzKFwiZm9udFN0eWxlXCIpLGZvbnRTaXplOk0uY3NzKFwiZm9udFNpemVcIiksZm9udFdlaWdodDpNLmNzcyhcImZvbnRXZWlnaHRcIiksZmxleDplLmZsZXgsanVzdGlmeUNvbnRlbnQ6ZS5qdXN0aWZ5Q29udGVudCxib3JkZXJSYWRpdXM6ZS5ib3JkZXJSYWRpdXMsXCItd2Via2l0LWJveC1zaGFkb3dcIjpcIm5vbmVcIixcImJveC1zaGFkb3dcIjpcIm5vbmVcIn0pLE0uY3NzKFwiZm9udC1zaXplXCIsTS5jc3MoXCJmb250U2l6ZVwiKSksRS5pbm5lckhlaWdodChNLmlubmVySGVpZ2h0KCkpLEUuY3NzKHQuZXh0ZW5kKCEwLHtwb3NpdGlvbjpcImFic29sdXRlXCIsekluZGV4OlwiMVwiLGJvcmRlckNvbG9yOlwidHJhbnNwYXJlbnRcIixvdXRsaW5lQ29sb3I6XCJ0cmFuc3BhcmVudFwiLGxlZnQ6TS5wb3NpdGlvbigpLmxlZnQsdG9wOk0ucG9zaXRpb24oKS50b3AsYmFja2dyb3VuZDpNLmNzcyhcImJhY2tncm91bmRcIil9LGkuaGludFN0eWxlKSksITEhPT1qP0UuY3NzKFwiYmFja2dyb3VuZFwiLGopOmo9TS5jc3MoXCJiYWNrZ3JvdW5kXCIpO3RyeXtNWzBdLnN0eWxlLnNldFByb3BlcnR5KFwiYmFja2dyb3VuZFwiLFwidHJhbnNwYXJlbnRcIixcImltcG9ydGFudFwiKX1jYXRjaCh0KXtNLmNzcyhcImJhY2tncm91bmRcIixcInRyYW5zcGFyZW50XCIpfWQuYXBwZW5kKEUpfX0saS50aW1lb3V0VXBkYXRlfHwxKX0pLE0uaXMoXCI6dmlzaWJsZVwiKT9NLnRyaWdnZXIoXCJ1cGRhdGVIZWxwZXJQb3NpdGlvbi54ZHNvZnRcIik6cj1zZXRJbnRlcnZhbChmdW5jdGlvbigpe00uaXMoXCI6dmlzaWJsZVwiKSYmKE0udHJpZ2dlcihcInVwZGF0ZUhlbHBlclBvc2l0aW9uLnhkc29mdFwiKSxjbGVhckludGVydmFsKHIpKX0sMTAwKSx0KHdpbmRvdykub24oXCJyZXNpemVcIixmdW5jdGlvbigpe2QuY3NzKHt3aWR0aDpcImF1dG9cIn0pLE0udHJpZ2dlcihcInVwZGF0ZUhlbHBlclBvc2l0aW9uLnhkc29mdFwiKX0pLE0ub24oXCJjbG9zZS54ZHNvZnRcIixmdW5jdGlvbigpe08mJihTLmhpZGUoKSxFLnZhbChcIlwiKSxpLmF1dG9zZWxlY3R8fE0udmFsKEgpLE89ITEpfSkub24oXCJ1cGRhdGVDb250ZW50Lnhkc29mdFwiLGZ1bmN0aW9uKCl7dmFyIGUsbj1mdW5jdGlvbihlLGkpe3ZhciBuLHMsYSxyPVtdO2ZvcihuPTA7bjxlLmxlbmd0aDtuKz0xKWZvcihzPTA7czxlW25dLmxlbmd0aCYmIShyLmxlbmd0aD49dGhpcy5saW1pdCk7cys9MSkoYT10KG8uY2FsbCh0aGlzLFwicmVuZGVyXCIsbixbZVtuXVtzXSxuLHMsaV0sXCJcIikpKS5kYXRhKFwic291cmNlXCIsbiksYS5kYXRhKFwicGlkXCIscyksYS5kYXRhKFwiaXRlbVwiLGVbbl1bc10pLHIucHVzaChhKTtyZXR1cm4gcn0uY2FsbChpLEEsTS52YWwoKSk7bi5sZW5ndGg/KE0udHJpZ2dlcihcIm9wZW4ueGRzb2Z0XCIpLHQobikuZWFjaChmdW5jdGlvbigpe3RoaXMuY3NzKHQuZXh0ZW5kKCEwLHtwYWRkaW5nTGVmdDpNLmNzcyhcInBhZGRpbmdMZWZ0XCIpLHBhZGRpbmdSaWdodDpNLmNzcyhcInBhZGRpbmdSaWdodFwiKX0saS5pdGVtU3R5bGUpKX0pLFMuaHRtbChuKSxlPWkudmlzaWJsZUhlaWdodD9pLnZpc2libGVIZWlnaHQ6aS52aXNpYmxlTGltaXQqKChuWzBdP25bMF0ub3V0ZXJIZWlnaHQoITApOjApfHxpLmRlZmF1bHRIZWlnaHRJdGVtKSs1LFMuY3NzKFwibWF4SGVpZ2h0XCIsZStcInB4XCIpKTpNLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIil9KS5vbihcIm9wZW4ueGRzb2Z0XCIsZnVuY3Rpb24oKXtcbk98fChTLnNob3coKSxPPSEwKX0pLm9uKFwiZGVzdHJveS54ZHNvZnRcIixmdW5jdGlvbigpe00ucmVtb3ZlQ2xhc3MoXCJ4ZHNvZnRcIiksZC5hZnRlcihNKSxkLnJlbW92ZSgpLGNsZWFyVGltZW91dCgwKSxjbGVhclRpbWVvdXQociksTS5kYXRhKFwieGRzb2Z0X2F1dG9jb21wbGV0ZVwiLG51bGwpLE0ub2ZmKFwiLnhkc29mdFwiKX0pfX12YXIgcD0zNyxmPTM5LGc9MzgsbT00MCx2PTksYj0xNyxfPTE2LHk9MTMsdz0yNyx4PTY1LEM9Njcsaz04NixUPTkwLEQ9ODksUz17fSxJPSExLFA9ITEsRT17fSxNPXtcIuG6mlwiOlwiYVwiLFwiw4FcIjpcImFcIixcIsOhXCI6XCJhXCIsXCLDgFwiOlwiYVwiLFwiw6BcIjpcImFcIixcIsSCXCI6XCJhXCIsXCLEg1wiOlwiYVwiLFwi4bquXCI6XCJhXCIsXCLhuq9cIjpcImFcIixcIuG6sFwiOlwiYVwiLFwi4bqxXCI6XCJhXCIsXCLhurRcIjpcImFcIixcIuG6tVwiOlwiYVwiLFwi4bqyXCI6XCJhXCIsXCLhuqpcIjpcImFcIixcIuG6q1wiOlwiYVwiLFwi4bqoXCI6XCJhXCIsXCLhuqlcIjpcImFcIixcIseNXCI6XCJhXCIsXCLHjlwiOlwiYVwiLFwiw4VcIjpcImFcIixcIsOlXCI6XCJhXCIsXCLHulwiOlwiYVwiLFwix7tcIjpcImFcIixcIsOEXCI6XCJhXCIsXCLDpFwiOlwiYVwiLFwix55cIjpcImFcIixcIsefXCI6XCJhXCIsXCLDg1wiOlwiYVwiLFwiw6NcIjpcImFcIixcIsimXCI6XCJhXCIsXCLIp1wiOlwiYVwiLFwix6BcIjpcImFcIixcIsehXCI6XCJhXCIsXCLEhFwiOlwiYVwiLFwixIVcIjpcImFcIixcIsSAXCI6XCJhXCIsXCLEgVwiOlwiYVwiLFwi4bqiXCI6XCJhXCIsXCLhuqNcIjpcImFcIixcIsiAXCI6XCJhXCIsXCLIgVwiOlwiYVwiLFwiyIJcIjpcImFcIixcIsiDXCI6XCJhXCIsXCLhuqBcIjpcImFcIixcIuG6oVwiOlwiYVwiLFwi4bq2XCI6XCJhXCIsXCLhurdcIjpcImFcIixcIuG6rFwiOlwiYVwiLFwi4bqtXCI6XCJhXCIsXCLhuIBcIjpcImFcIixcIuG4gVwiOlwiYVwiLFwiyLpcIjpcImFcIixcIuKxpVwiOlwiYVwiLFwix7xcIjpcImFcIixcIse9XCI6XCJhXCIsXCLHolwiOlwiYVwiLFwix6NcIjpcImFcIixcIuG4glwiOlwiYlwiLFwi4biDXCI6XCJiXCIsXCLhuIRcIjpcImJcIixcIuG4hVwiOlwiYlwiLFwi4biGXCI6XCJiXCIsXCLhuIdcIjpcImJcIixcIsmDXCI6XCJiXCIsXCLGgFwiOlwiYlwiLFwi4bWsXCI6XCJiXCIsXCLGgVwiOlwiYlwiLFwiyZNcIjpcImJcIixcIsaCXCI6XCJiXCIsXCLGg1wiOlwiYlwiLFwixIZcIjpcImNcIixcIsSHXCI6XCJjXCIsXCLEiFwiOlwiY1wiLFwixIlcIjpcImNcIixcIsSMXCI6XCJjXCIsXCLEjVwiOlwiY1wiLFwixIpcIjpcImNcIixcIsSLXCI6XCJjXCIsXCLDh1wiOlwiY1wiLFwiw6dcIjpcImNcIixcIuG4iFwiOlwiY1wiLFwi4biJXCI6XCJjXCIsXCLIu1wiOlwiY1wiLFwiyLxcIjpcImNcIixcIsaHXCI6XCJjXCIsXCLGiFwiOlwiY1wiLFwiyZVcIjpcImNcIixcIsSOXCI6XCJkXCIsXCLEj1wiOlwiZFwiLFwi4biKXCI6XCJkXCIsXCLhuItcIjpcImRcIixcIuG4kFwiOlwiZFwiLFwi4biRXCI6XCJkXCIsXCLhuIxcIjpcImRcIixcIuG4jVwiOlwiZFwiLFwi4biSXCI6XCJkXCIsXCLhuJNcIjpcImRcIixcIuG4jlwiOlwiZFwiLFwi4biPXCI6XCJkXCIsXCLEkFwiOlwiZFwiLFwixJFcIjpcImRcIixcIuG1rVwiOlwiZFwiLFwixolcIjpcImRcIixcIsmWXCI6XCJkXCIsXCLGilwiOlwiZFwiLFwiyZdcIjpcImRcIixcIsaLXCI6XCJkXCIsXCLGjFwiOlwiZFwiLFwiyKFcIjpcImRcIixcIsOwXCI6XCJkXCIsXCLDiVwiOlwiZVwiLFwixo9cIjpcImVcIixcIsaOXCI6XCJlXCIsXCLHnVwiOlwiZVwiLFwiw6lcIjpcImVcIixcIsOIXCI6XCJlXCIsXCLDqFwiOlwiZVwiLFwixJRcIjpcImVcIixcIsSVXCI6XCJlXCIsXCLDilwiOlwiZVwiLFwiw6pcIjpcImVcIixcIuG6vlwiOlwiZVwiLFwi4bq/XCI6XCJlXCIsXCLhu4BcIjpcImVcIixcIuG7gVwiOlwiZVwiLFwi4buEXCI6XCJlXCIsXCLhu4VcIjpcImVcIixcIuG7glwiOlwiZVwiLFwi4buDXCI6XCJlXCIsXCLEmlwiOlwiZVwiLFwixJtcIjpcImVcIixcIsOLXCI6XCJlXCIsXCLDq1wiOlwiZVwiLFwi4bq8XCI6XCJlXCIsXCLhur1cIjpcImVcIixcIsSWXCI6XCJlXCIsXCLEl1wiOlwiZVwiLFwiyKhcIjpcImVcIixcIsipXCI6XCJlXCIsXCLhuJxcIjpcImVcIixcIuG4nVwiOlwiZVwiLFwixJhcIjpcImVcIixcIsSZXCI6XCJlXCIsXCLEklwiOlwiZVwiLFwixJNcIjpcImVcIixcIuG4llwiOlwiZVwiLFwi4biXXCI6XCJlXCIsXCLhuJRcIjpcImVcIixcIuG4lVwiOlwiZVwiLFwi4bq6XCI6XCJlXCIsXCLhurtcIjpcImVcIixcIsiEXCI6XCJlXCIsXCLIhVwiOlwiZVwiLFwiyIZcIjpcImVcIixcIsiHXCI6XCJlXCIsXCLhurhcIjpcImVcIixcIuG6uVwiOlwiZVwiLFwi4buGXCI6XCJlXCIsXCLhu4dcIjpcImVcIixcIuG4mFwiOlwiZVwiLFwi4biZXCI6XCJlXCIsXCLhuJpcIjpcImVcIixcIuG4m1wiOlwiZVwiLFwiyYZcIjpcImVcIixcIsmHXCI6XCJlXCIsXCLJmlwiOlwiZVwiLFwiyZ1cIjpcImVcIixcIuG4nlwiOlwiZlwiLFwi4bifXCI6XCJmXCIsXCLhta5cIjpcImZcIixcIsaRXCI6XCJmXCIsXCLGklwiOlwiZlwiLFwix7RcIjpcImdcIixcIse1XCI6XCJnXCIsXCLEnlwiOlwiZ1wiLFwixJ9cIjpcImdcIixcIsScXCI6XCJnXCIsXCLEnVwiOlwiZ1wiLFwix6ZcIjpcImdcIixcIsenXCI6XCJnXCIsXCLEoFwiOlwiZ1wiLFwixKFcIjpcImdcIixcIsSiXCI6XCJnXCIsXCLEo1wiOlwiZ1wiLFwi4bigXCI6XCJnXCIsXCLhuKFcIjpcImdcIixcIsekXCI6XCJnXCIsXCLHpVwiOlwiZ1wiLFwixpNcIjpcImdcIixcIsmgXCI6XCJnXCIsXCLEpFwiOlwiaFwiLFwixKVcIjpcImhcIixcIsieXCI6XCJoXCIsXCLIn1wiOlwiaFwiLFwi4bimXCI6XCJoXCIsXCLhuKdcIjpcImhcIixcIuG4olwiOlwiaFwiLFwi4bijXCI6XCJoXCIsXCLhuKhcIjpcImhcIixcIuG4qVwiOlwiaFwiLFwi4bikXCI6XCJoXCIsXCLhuKVcIjpcImhcIixcIuG4qlwiOlwiaFwiLFwi4birXCI6XCJoXCIsSDpcImhcIixcIsyxXCI6XCJoXCIsXCLhupZcIjpcImhcIixcIsSmXCI6XCJoXCIsXCLEp1wiOlwiaFwiLFwi4rGnXCI6XCJoXCIsXCLisahcIjpcImhcIixcIsONXCI6XCJpXCIsXCLDrVwiOlwiaVwiLFwiw4xcIjpcImlcIixcIsOsXCI6XCJpXCIsXCLErFwiOlwiaVwiLFwixK1cIjpcImlcIixcIsOOXCI6XCJpXCIsXCLDrlwiOlwiaVwiLFwix49cIjpcImlcIixcIseQXCI6XCJpXCIsXCLDj1wiOlwiaVwiLFwiw69cIjpcImlcIixcIuG4rlwiOlwiaVwiLFwi4bivXCI6XCJpXCIsXCLEqFwiOlwiaVwiLFwixKlcIjpcImlcIixcIsSwXCI6XCJpXCIsaTpcImlcIixcIsSuXCI6XCJpXCIsXCLEr1wiOlwiaVwiLFwixKpcIjpcImlcIixcIsSrXCI6XCJpXCIsXCLhu4hcIjpcImlcIixcIuG7iVwiOlwiaVwiLFwiyIhcIjpcImlcIixcIsiJXCI6XCJpXCIsXCLIilwiOlwiaVwiLFwiyItcIjpcImlcIixcIuG7ilwiOlwiaVwiLFwi4buLXCI6XCJpXCIsXCLhuKxcIjpcImlcIixcIuG4rVwiOlwiaVwiLEk6XCJpXCIsXCLEsVwiOlwiaVwiLFwixpdcIjpcImlcIixcIsmoXCI6XCJpXCIsXCLEtFwiOlwialwiLFwixLVcIjpcImpcIixKOlwialwiLFwizIxcIjpcImpcIixcIsewXCI6XCJqXCIsXCLIt1wiOlwialwiLFwiyYhcIjpcImpcIixcIsmJXCI6XCJqXCIsXCLKnVwiOlwialwiLFwiyZ9cIjpcImpcIixcIsqEXCI6XCJqXCIsXCLhuLBcIjpcImtcIixcIuG4sVwiOlwia1wiLFwix6hcIjpcImtcIixcIsepXCI6XCJrXCIsXCLEtlwiOlwia1wiLFwixLdcIjpcImtcIixcIuG4slwiOlwia1wiLFwi4bizXCI6XCJrXCIsXCLhuLRcIjpcImtcIixcIuG4tVwiOlwia1wiLFwixphcIjpcImtcIixcIsaZXCI6XCJrXCIsXCLisalcIjpcImtcIixcIuKxqlwiOlwia1wiLFwixLlcIjpcImFcIixcIsS6XCI6XCJsXCIsXCLEvVwiOlwibFwiLFwixL5cIjpcImxcIixcIsS7XCI6XCJsXCIsXCLEvFwiOlwibFwiLFwi4bi2XCI6XCJsXCIsXCLhuLdcIjpcImxcIixcIuG4uFwiOlwibFwiLFwi4bi5XCI6XCJsXCIsXCLhuLxcIjpcImxcIixcIuG4vVwiOlwibFwiLFwi4bi6XCI6XCJsXCIsXCLhuLtcIjpcImxcIixcIsWBXCI6XCJsXCIsXCLFglwiOlwibFwiLFwizKNcIjpcImxcIixcIsS/XCI6XCJsXCIsXCLFgFwiOlwibFwiLFwiyL1cIjpcImxcIixcIsaaXCI6XCJsXCIsXCLisaBcIjpcImxcIixcIuKxoVwiOlwibFwiLFwi4rGiXCI6XCJsXCIsXCLJq1wiOlwibFwiLFwiyaxcIjpcImxcIixcIsmtXCI6XCJsXCIsXCLItFwiOlwibFwiLFwi4bi+XCI6XCJtXCIsXCLhuL9cIjpcIm1cIixcIuG5gFwiOlwibVwiLFwi4bmBXCI6XCJtXCIsXCLhuYJcIjpcIm1cIixcIuG5g1wiOlwibVwiLFwiybFcIjpcIm1cIixcIsWDXCI6XCJuXCIsXCLFhFwiOlwiblwiLFwix7hcIjpcIm5cIixcIse5XCI6XCJuXCIsXCLFh1wiOlwiblwiLFwixYhcIjpcIm5cIixcIsORXCI6XCJuXCIsXCLDsVwiOlwiblwiLFwi4bmEXCI6XCJuXCIsXCLhuYVcIjpcIm5cIixcIsWFXCI6XCJuXCIsXCLFhlwiOlwiblwiLFwi4bmGXCI6XCJuXCIsXCLhuYdcIjpcIm5cIixcIuG5ilwiOlwiblwiLFwi4bmLXCI6XCJuXCIsXCLhuYhcIjpcIm5cIixcIuG5iVwiOlwiblwiLFwixp1cIjpcIm5cIixcIsmyXCI6XCJuXCIsXCLIoFwiOlwiblwiLFwixp5cIjpcIm5cIixcIsmzXCI6XCJuXCIsXCLItVwiOlwiblwiLE46XCJuXCIsXCLMiFwiOlwiblwiLG46XCJuXCIsXCLDk1wiOlwib1wiLFwiw7NcIjpcIm9cIixcIsOSXCI6XCJvXCIsXCLDslwiOlwib1wiLFwixY5cIjpcIm9cIixcIsWPXCI6XCJvXCIsXCLDlFwiOlwib1wiLFwiw7RcIjpcIm9cIixcIuG7kFwiOlwib1wiLFwi4buRXCI6XCJvXCIsXCLhu5JcIjpcIm9cIixcIuG7k1wiOlwib1wiLFwi4buWXCI6XCJvXCIsXCLhu5dcIjpcIm9cIixcIuG7lFwiOlwib1wiLFwi4buVXCI6XCJvXCIsXCLHkVwiOlwib1wiLFwix5JcIjpcIm9cIixcIsOWXCI6XCJvXCIsXCLDtlwiOlwib1wiLFwiyKpcIjpcIm9cIixcIsirXCI6XCJvXCIsXCLFkFwiOlwib1wiLFwixZFcIjpcIm9cIixcIsOVXCI6XCJvXCIsXCLDtVwiOlwib1wiLFwi4bmMXCI6XCJvXCIsXCLhuY1cIjpcIm9cIixcIuG5jlwiOlwib1wiLFwi4bmPXCI6XCJvXCIsXCLIrFwiOlwib1wiLFwiyK1cIjpcIm9cIixcIsiuXCI6XCJvXCIsXCLIr1wiOlwib1wiLFwiyLBcIjpcIm9cIixcIsixXCI6XCJvXCIsXCLDmFwiOlwib1wiLFwiw7hcIjpcIm9cIixcIse+XCI6XCJvXCIsXCLHv1wiOlwib1wiLFwix6pcIjpcIm9cIixcIserXCI6XCJvXCIsXCLHrFwiOlwib1wiLFwix61cIjpcIm9cIixcIsWMXCI6XCJvXCIsXCLFjVwiOlwib1wiLFwi4bmSXCI6XCJvXCIsXCLhuZNcIjpcIm9cIixcIuG5kFwiOlwib1wiLFwi4bmRXCI6XCJvXCIsXCLhu45cIjpcIm9cIixcIuG7j1wiOlwib1wiLFwiyIxcIjpcIm9cIixcIsiNXCI6XCJvXCIsXCLIjlwiOlwib1wiLFwiyI9cIjpcIm9cIixcIsagXCI6XCJvXCIsXCLGoVwiOlwib1wiLFwi4buaXCI6XCJvXCIsXCLhu5tcIjpcIm9cIixcIuG7nFwiOlwib1wiLFwi4budXCI6XCJvXCIsXCLhu6BcIjpcIm9cIixcIuG7oVwiOlwib1wiLFwi4bueXCI6XCJvXCIsXCLhu59cIjpcIm9cIixcIuG7olwiOlwib1wiLFwi4bujXCI6XCJvXCIsXCLhu4xcIjpcIm9cIixcIuG7jVwiOlwib1wiLFwi4buYXCI6XCJvXCIsXCLhu5lcIjpcIm9cIixcIsafXCI6XCJvXCIsXCLJtVwiOlwib1wiLFwi4bmUXCI6XCJwXCIsXCLhuZVcIjpcInBcIixcIuG5llwiOlwicFwiLFwi4bmXXCI6XCJwXCIsXCLisaNcIjpcInBcIixcIsakXCI6XCJwXCIsXCLGpVwiOlwicFwiLFA6XCJwXCIsXCLMg1wiOlwicFwiLHA6XCJwXCIsXCLKoFwiOlwicVwiLFwiyYpcIjpcInFcIixcIsmLXCI6XCJxXCIsXCLFlFwiOlwiclwiLFwixZVcIjpcInJcIixcIsWYXCI6XCJyXCIsXCLFmVwiOlwiclwiLFwi4bmYXCI6XCJyXCIsXCLhuZlcIjpcInJcIixcIsWWXCI6XCJyXCIsXCLFl1wiOlwiclwiLFwiyJBcIjpcInJcIixcIsiRXCI6XCJyXCIsXCLIklwiOlwiclwiLFwiyJNcIjpcInJcIixcIuG5mlwiOlwiclwiLFwi4bmbXCI6XCJyXCIsXCLhuZxcIjpcInJcIixcIuG5nVwiOlwiclwiLFwi4bmeXCI6XCJyXCIsXCLhuZ9cIjpcInJcIixcIsmMXCI6XCJyXCIsXCLJjVwiOlwiclwiLFwi4bWyXCI6XCJyXCIsXCLJvFwiOlwiclwiLFwi4rGkXCI6XCJyXCIsXCLJvVwiOlwiclwiLFwiyb5cIjpcInJcIixcIuG1s1wiOlwiclwiLFwiw59cIjpcInNcIixcIsWaXCI6XCJzXCIsXCLFm1wiOlwic1wiLFwi4bmkXCI6XCJzXCIsXCLhuaVcIjpcInNcIixcIsWcXCI6XCJzXCIsXCLFnVwiOlwic1wiLFwixaBcIjpcInNcIixcIsWhXCI6XCJzXCIsXCLhuaZcIjpcInNcIixcIuG5p1wiOlwic1wiLFwi4bmgXCI6XCJzXCIsXCLhuaFcIjpcInNcIixcIuG6m1wiOlwic1wiLFwixZ5cIjpcInNcIixcIsWfXCI6XCJzXCIsXCLhuaJcIjpcInNcIixcIuG5o1wiOlwic1wiLFwi4bmoXCI6XCJzXCIsXCLhualcIjpcInNcIixcIsiYXCI6XCJzXCIsXCLImVwiOlwic1wiLFwiyoJcIjpcInNcIixTOlwic1wiLFwizKlcIjpcInNcIixzOlwic1wiLFwiw55cIjpcInRcIixcIsO+XCI6XCJ0XCIsXCLFpFwiOlwidFwiLFwixaVcIjpcInRcIixUOlwidFwiLFwi4bqXXCI6XCJ0XCIsXCLhuapcIjpcInRcIixcIuG5q1wiOlwidFwiLFwixaJcIjpcInRcIixcIsWjXCI6XCJ0XCIsXCLhuaxcIjpcInRcIixcIuG5rVwiOlwidFwiLFwiyJpcIjpcInRcIixcIsibXCI6XCJ0XCIsXCLhubBcIjpcInRcIixcIuG5sVwiOlwidFwiLFwi4bmuXCI6XCJ0XCIsXCLhua9cIjpcInRcIixcIsWmXCI6XCJ0XCIsXCLFp1wiOlwidFwiLFwiyL5cIjpcInRcIixcIuKxplwiOlwidFwiLFwi4bW1XCI6XCJ0XCIsXCLGq1wiOlwidFwiLFwixqxcIjpcInRcIixcIsatXCI6XCJ0XCIsXCLGrlwiOlwidFwiLFwiyohcIjpcInRcIixcIsi2XCI6XCJ0XCIsXCLDmlwiOlwidVwiLFwiw7pcIjpcInVcIixcIsOZXCI6XCJ1XCIsXCLDuVwiOlwidVwiLFwixaxcIjpcInVcIixcIsWtXCI6XCJ1XCIsXCLDm1wiOlwidVwiLFwiw7tcIjpcInVcIixcIseTXCI6XCJ1XCIsXCLHlFwiOlwidVwiLFwixa5cIjpcInVcIixcIsWvXCI6XCJ1XCIsXCLDnFwiOlwidVwiLFwiw7xcIjpcInVcIixcIseXXCI6XCJ1XCIsXCLHmFwiOlwidVwiLFwix5tcIjpcInVcIixcIsecXCI6XCJ1XCIsXCLHmVwiOlwidVwiLFwix5pcIjpcInVcIixcIseVXCI6XCJ1XCIsXCLHllwiOlwidVwiLFwixbBcIjpcInVcIixcIsWxXCI6XCJ1XCIsXCLFqFwiOlwidVwiLFwixalcIjpcInVcIixcIuG5uFwiOlwidVwiLFwi4bm5XCI6XCJ1XCIsXCLFslwiOlwidVwiLFwixbNcIjpcInVcIixcIsWqXCI6XCJ1XCIsXCLFq1wiOlwidVwiLFwi4bm6XCI6XCJ1XCIsXCLhubtcIjpcInVcIixcIuG7plwiOlwidVwiLFwi4bunXCI6XCJ1XCIsXCLIlFwiOlwidVwiLFwiyJVcIjpcInVcIixcIsiWXCI6XCJ1XCIsXCLIl1wiOlwidVwiLFwixq9cIjpcInVcIixcIsawXCI6XCJ1XCIsXCLhu6hcIjpcInVcIixcIuG7qVwiOlwidVwiLFwi4buqXCI6XCJ1XCIsXCLhu6tcIjpcInVcIixcIuG7rlwiOlwidVwiLFwi4buvXCI6XCJ1XCIsXCLhu6xcIjpcInVcIixcIuG7rVwiOlwidVwiLFwi4buwXCI6XCJ1XCIsXCLhu7FcIjpcInVcIixcIuG7pFwiOlwidVwiLFwi4bulXCI6XCJ1XCIsXCLhubJcIjpcInVcIixcIuG5s1wiOlwidVwiLFwi4bm2XCI6XCJ1XCIsXCLhubdcIjpcInVcIixcIuG5tFwiOlwidVwiLFwi4bm1XCI6XCJ1XCIsXCLJhFwiOlwidVwiLFwiyolcIjpcInVcIixcIuG5vFwiOlwidlwiLFwi4bm9XCI6XCJ2XCIsXCLhub5cIjpcInZcIixcIuG5v1wiOlwidlwiLFwixrJcIjpcInZcIixcIsqLXCI6XCJ2XCIsXCLhuoJcIjpcIndcIixcIuG6g1wiOlwid1wiLFwi4bqAXCI6XCJ3XCIsXCLhuoFcIjpcIndcIixcIsW0XCI6XCJ3XCIsXCLFtVwiOlwid1wiLFc6XCJ3XCIsXCLMilwiOlwid1wiLFwi4bqYXCI6XCJ3XCIsXCLhuoRcIjpcIndcIixcIuG6hVwiOlwid1wiLFwi4bqGXCI6XCJ3XCIsXCLhuodcIjpcIndcIixcIuG6iFwiOlwid1wiLFwi4bqJXCI6XCJ3XCIsXCLhuoxcIjpcInhcIixcIuG6jVwiOlwieFwiLFwi4bqKXCI6XCJ4XCIsXCLhuotcIjpcInhcIixcIsOdXCI6XCJ5XCIsXCLDvVwiOlwieVwiLFwi4buyXCI6XCJ5XCIsXCLhu7NcIjpcInlcIixcIsW2XCI6XCJ5XCIsXCLFt1wiOlwieVwiLFk6XCJ5XCIsXCLhuplcIjpcInlcIixcIsW4XCI6XCJ5XCIsXCLDv1wiOlwieVwiLFwi4bu4XCI6XCJ5XCIsXCLhu7lcIjpcInlcIixcIuG6jlwiOlwieVwiLFwi4bqPXCI6XCJ5XCIsXCLIslwiOlwieVwiLFwiyLNcIjpcInlcIixcIuG7tlwiOlwieVwiLFwi4bu3XCI6XCJ5XCIsXCLhu7RcIjpcInlcIixcIuG7tVwiOlwieVwiLFwiyo9cIjpcInlcIixcIsmOXCI6XCJ5XCIsXCLJj1wiOlwieVwiLFwixrNcIjpcInlcIixcIsa0XCI6XCJ5XCIsXCLFuVwiOlwielwiLFwixbpcIjpcInpcIixcIuG6kFwiOlwielwiLFwi4bqRXCI6XCJ6XCIsXCLFvVwiOlwielwiLFwixb5cIjpcInpcIixcIsW7XCI6XCJ6XCIsXCLFvFwiOlwielwiLFwi4bqSXCI6XCJ6XCIsXCLhupNcIjpcInpcIixcIuG6lFwiOlwielwiLFwi4bqVXCI6XCJ6XCIsXCLGtVwiOlwielwiLFwixrZcIjpcInpcIixcIsikXCI6XCJ6XCIsXCLIpVwiOlwielwiLFwiypBcIjpcInpcIixcIsqRXCI6XCJ6XCIsXCLisatcIjpcInpcIixcIuKxrFwiOlwielwiLFwix65cIjpcInpcIixcIsevXCI6XCJ6XCIsXCLGulwiOlwielwiLFwi77ySXCI6XCIyXCIsXCLvvJZcIjpcIjZcIixcIu+8olwiOlwiQlwiLFwi77ymXCI6XCJGXCIsXCLvvKpcIjpcIkpcIixcIu+8rlwiOlwiTlwiLFwi77yyXCI6XCJSXCIsXCLvvLZcIjpcIlZcIixcIu+8ulwiOlwiWlwiLFwi772CXCI6XCJiXCIsXCLvvYZcIjpcImZcIixcIu+9ilwiOlwialwiLFwi772OXCI6XCJuXCIsXCLvvZJcIjpcInJcIixcIu+9llwiOlwidlwiLFwi772aXCI6XCJ6XCIsXCLvvJFcIjpcIjFcIixcIu+8lVwiOlwiNVwiLFwi77yZXCI6XCI5XCIsXCLvvKFcIjpcIkFcIixcIu+8pVwiOlwiRVwiLFwi77ypXCI6XCJJXCIsXCLvvK1cIjpcIk1cIixcIu+8sVwiOlwiUVwiLFwi77y1XCI6XCJVXCIsXCLvvLlcIjpcIllcIixcIu+9gVwiOlwiYVwiLFwi772FXCI6XCJlXCIsXCLvvYlcIjpcImlcIixcIu+9jVwiOlwibVwiLFwi772RXCI6XCJxXCIsXCLvvZVcIjpcInVcIixcIu+9mVwiOlwieVwiLFwi77yQXCI6XCIwXCIsXCLvvJRcIjpcIjRcIixcIu+8mFwiOlwiOFwiLFwi77ykXCI6XCJEXCIsXCLvvKhcIjpcIkhcIixcIu+8rFwiOlwiTFwiLFwi77ywXCI6XCJQXCIsXCLvvLRcIjpcIlRcIixcIu+8uFwiOlwiWFwiLFwi772EXCI6XCJkXCIsXCLvvYhcIjpcImhcIixcIu+9jFwiOlwibFwiLFwi772QXCI6XCJwXCIsXCLvvZRcIjpcInRcIixcIu+9mFwiOlwieFwiLFwi77yTXCI6XCIzXCIsXCLvvJdcIjpcIjdcIixcIu+8o1wiOlwiQ1wiLFwi77ynXCI6XCJHXCIsXCLvvKtcIjpcIktcIixcIu+8r1wiOlwiT1wiLFwi77yzXCI6XCJTXCIsXCLvvLdcIjpcIldcIixcIu+9g1wiOlwiY1wiLFwi772HXCI6XCJnXCIsXCLvvYtcIjpcImtcIixcIu+9j1wiOlwib1wiLFwi772TXCI6XCJzXCIsXCLvvZdcIjpcIndcIixcIuG6s1wiOlwiYVwiLFwiw4JcIjpcImFcIixcIsOiXCI6XCJhXCIsXCLhuqRcIjpcImFcIixcIuG6pVwiOlwiYVwiLFwi4bqmXCI6XCJhXCIsXCLhuqdcIjpcImFcIn07dm9pZCAwPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUmJih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpLG4scyl7dmFyIG8sYT1pW25dLHI9cGFyc2VGbG9hdChhKSxsPWEuc3BsaXQoL1xcZC8pWzBdO3JldHVybiBzPW51bGwhPT1zP3M6LyV8ZW0vLnRlc3QobCkmJmUucGFyZW50RWxlbWVudD90KGUucGFyZW50RWxlbWVudCxlLnBhcmVudEVsZW1lbnQuY3VycmVudFN0eWxlLFwiZm9udFNpemVcIixudWxsKToxNixvPVwiZm9udFNpemVcIj09PW4/czovd2lkdGgvaS50ZXN0KG4pP2UuY2xpZW50V2lkdGg6ZS5jbGllbnRIZWlnaHQsXCJlbVwiPT09bD9yKnM6XCJpblwiPT09bD85NipyOlwicHRcIj09PWw/OTYqci83MjpcIiVcIj09PWw/ci8xMDAqbzpyfWZ1bmN0aW9uIGUodCxlKXt2YXIgaT1cImJvcmRlclwiPT09ZT9cIldpZHRoXCI6XCJcIixuPWUrXCJUb3BcIitpLHM9ZStcIlJpZ2h0XCIraSxvPWUrXCJCb3R0b21cIitpLGE9ZStcIkxlZnRcIitpO3RbZV09KHRbbl09PT10W3NdPT09dFtvXT09PXRbYV0/W3Rbbl1dOnRbbl09PT10W29dJiZ0W2FdPT09dFtzXT9bdFtuXSx0W3NdXTp0W2FdPT09dFtzXT9bdFtuXSx0W3NdLHRbb11dOlt0W25dLHRbc10sdFtvXSx0W2FdXSkuam9pbihcIiBcIil9ZnVuY3Rpb24gaShpKXt2YXIgbixzPWkuY3VycmVudFN0eWxlLG89dGhpcyxhPXQoaSxzLFwiZm9udFNpemVcIixudWxsKTtmb3IobiBpbiBzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLG4pJiYoL3dpZHRofGhlaWdodHxtYXJnaW4ufHBhZGRpbmcufGJvcmRlci4rVy8udGVzdChuKSYmXCJhdXRvXCIhPT1vW25dP29bbl09dChpLHMsbixhKStcInB4XCI6XCJzdHlsZUZsb2F0XCI9PT1uP28uZmxvYXQ9c1tuXTpvW25dPXNbbl0pO3JldHVybiBlKG8sXCJtYXJnaW5cIiksZShvLFwicGFkZGluZ1wiKSxlKG8sXCJib3JkZXJcIiksby5mb250U2l6ZT1hK1wicHhcIixvfXJldHVybiBpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxnZXRQcm9wZXJ0eVByaW9yaXR5OmZ1bmN0aW9uKCl7fSxnZXRQcm9wZXJ0eVZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3RdfHxcIlwifSxpdGVtOmZ1bmN0aW9uKCl7fSxyZW1vdmVQcm9wZXJ0eTpmdW5jdGlvbigpe30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oKXt9LGdldFByb3BlcnR5Q1NTVmFsdWU6ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9fSgpKSx0KGRvY3VtZW50KS5vbihcImtleWRvd24ueGRzb2Z0Y3RybFwiLGZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PWImJihJPSEwKSx0LmtleUNvZGU9PT1fJiYoST0hMCl9KS5vbihcImtleXVwLnhkc29mdGN0cmxcIixmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1iJiYoST0hMSksdC5rZXlDb2RlPT09XyYmKEk9ITEpfSksUz17bWluTGVuZ3RoOjAsdmFsdWVLZXk6XCJ2YWx1ZVwiLHRpdGxlS2V5OlwidGl0bGVcIixoaWdobGlnaHQ6ITAsc2hvd0hpbnQ6ITAsZHJvcGRvd25XaWR0aDpcIjEwMCVcIixkcm9wZG93blN0eWxlOnt9LGl0ZW1TdHlsZTp7fSxoaW50U3R5bGU6ITEsc3R5bGU6ITEsZGVidWc6ITAsb3Blbk9uRm9jdXM6ITEsY2xvc2VPbkJsdXI6ITAsYXV0b3NlbGVjdDohMSxhY2NlbnRzOiEwLHJlcGxhY2VBY2NlbnRzRm9yUmVtb3RlOiEwLGxpbWl0OjIwLHZpc2libGVMaW1pdDoyMCx2aXNpYmxlSGVpZ2h0OjAsZGVmYXVsdEhlaWdodEl0ZW06MzAsdGltZW91dFVwZGF0ZToxMCxnZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5jYWxsKHRoaXMsdCxlKX0scmVwbGFjZTpbZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5yZXBsYWNlQWNjZW50c0ZvclJlbW90ZSYmKGk9ZShpKSksdC5yZXBsYWNlKFwiJVFVRVJZJVwiLGVuY29kZVVSSUNvbXBvbmVudChpKSl9XSxlcXVhbDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PXQuc3Vic3RyKDAsZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCl9LGZpbmRSaWdodDpbZnVuY3Rpb24odCxlLGkpe3ZhciBuLHM9XCJcIjtpZih0KWZvcihuPTA7bjx0Lmxlbmd0aDtuKz0xKWlmKHM9by5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLGksW3Rbbl0saV0pLG8uY2FsbCh0aGlzLFwiZXF1YWxcIixpLFtzLGUsaV0sITEpKXJldHVybiB0W25dO3JldHVybiExfV0sdmFsaWQ6W2Z1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuYWNjZW50cyYmKHQ9ZSh0KSxpPWUoaSkpLC0xIT10LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpLnRvTG93ZXJDYXNlKCkpfV0sZmlsdGVyOltmdW5jdGlvbih0LGUsaSl7dmFyIHMsYT1bXSxyPVwiXCI7aWYodClmb3Iocz0wO3M8dC5sZW5ndGg7cys9MSlyPW4odFtzXVt0aGlzLmdldChcInZhbHVlS2V5XCIsaSldKT90W3NdW3RoaXMuZ2V0KFwidmFsdWVLZXlcIixpKV06dFtzXS50b1N0cmluZygpLG8uY2FsbCh0aGlzLFwidmFsaWRcIixpLFtyLGVdKSYmYS5wdXNoKHRbc10pO3JldHVybiBhfV0scHJlcGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGdldFZhbHVlOltmdW5jdGlvbih0LGUpe3JldHVybiBuKHRbdGhpcy5nZXQoXCJ2YWx1ZUtleVwiLGUpXSk/dFt0aGlzLmdldChcInZhbHVlS2V5XCIsZSldOnQudG9TdHJpbmcoKX1dLGdldFRpdGxlOltmdW5jdGlvbih0LGUpe3JldHVybiBuKHRbdGhpcy5nZXQoXCJ0aXRsZUtleVwiLGUpXSk/dFt0aGlzLmdldChcInRpdGxlS2V5XCIsZSldOnQudG9TdHJpbmcoKX1dLHJlbmRlcjpbZnVuY3Rpb24odCxuLHMsYSl7dmFyIHIsbCxoLGM9by5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLG4sW3Qsbl0sUy5nZXRWYWx1ZVswXS5jYWxsKHRoaXMsdCxuKSksdT1vLmNhbGwodGhpcyxcImdldFRpdGxlXCIsbixbdCxuXSxTLmdldFRpdGxlWzBdLmNhbGwodGhpcyx0LG4pKSxkPVwiXCIscD1cIlwiLGY9XCJcIixnPVwiXCIsbT0wO2lmKHRoaXMuaGlnaGxpZ2h0KWlmKHRoaXMuYWNjZW50cyl7Zm9yKHA9ZSh1KS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1s8Pl0rL2csXCJcIiksZD1lKGEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWzw+XSsvZyxcIlwiKSxmPXAucmVwbGFjZShuZXcgUmVnRXhwKGkoZCksXCJnXCIpLFwiPFwiK2QrXCI+XCIpLGg9MDtoPGYubGVuZ3RoO2grPTEpcj11LmNoYXJBdChtKSxcIjxcIj09PShsPWYuY2hhckF0KGgpKT9nKz1cIjxiPlwiOlwiPlwiPT09bD9nKz1cIjwvYj5cIjoobSs9MSxnKz1yKTt1PWd9ZWxzZSB1PXUucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiK2koYSkrXCIpXCIsXCJpXCIpLFwiPGI+JDE8L2I+XCIpO3JldHVyblwiPGRpdiBcIisoYz09YT8nY2xhc3M9XCJhY3RpdmVcIic6XCJcIikrJyBkYXRhLXZhbHVlPVwiJytlbmNvZGVVUklDb21wb25lbnQoYykrJ1wiPicrdStcIjwvZGl2PlwifV0sYXBwZW5kTWV0aG9kOlwiY29uY2F0XCIsc291cmNlOltdLGFmdGVyU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt9fSxFPXtkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJpZ2dlcihcImRlc3Ryb3kueGRzb2Z0XCIpfSx1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpfSxvcHRpb25zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSYmdC5pc1BsYWluT2JqZWN0KGUpJiZ0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiLHQuZXh0ZW5kKCEwLHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpLGUpKSx0aGlzfSxzZXRTb3VyY2U6ZnVuY3Rpb24oZSxpKXtpZih0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSYmKHQuaXNQbGFpbk9iamVjdChlKXx8dC5pc0Z1bmN0aW9uKGUpfHx0LmlzQXJyYXkoZSkpKXt2YXIgbj10aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSxzPXRoaXMuZGF0YShcInhkc29mdF9hdXRvY29tcGxldGVcIiksbz1uLnNvdXJjZTt2b2lkIDA9PT1pfHxpc05hTihpKT90LmlzRnVuY3Rpb24oZSk/dGhpcy5kYXRhKFwiYXV0b2NvbXBsZXRlX29wdGlvbnNcIikuc291cmNlPWU6dC5leHRlbmQoITAsbyxlKTp0LmlzUGxhaW5PYmplY3QoZSl8fHQuaXNBcnJheShlKT9vW2ldPXQuZXh0ZW5kKCEwLHQuaXNBcnJheShlKT9bXTp7fSxlKTpvW2ldPWUsYy5jYWxsKG4sdGhpcy52YWwoKSxzLGZ1bmN0aW9uKHQpe2guY2FsbChuLHMsdCl9KX1yZXR1cm4gdGhpc30sZ2V0U291cmNlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpKXt2YXIgZT10aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKS5zb3VyY2U7cmV0dXJuIHZvaWQgMCE9PXQmJiFpc05hTih0KSYmZVt0XT9lW3RdOmV9cmV0dXJuIG51bGx9fSx0LmZuLmF1dG9jb21wbGV0ZT1mdW5jdGlvbihlLGksbil7cmV0dXJuXCJzdHJpbmdcIj09PXQudHlwZShlKSYmRVtlXT9FW2VdLmNhbGwodGhpcyxpLG4pOnRoaXMuZWFjaChmdW5jdGlvbigpe2QodGhpcyx0LmV4dGVuZCghMCx7fSxTLGUpKX0pfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt0KFwiI3NlYXJjaFwiKS5rZXl1cChmdW5jdGlvbigpe3QuYWpheCh7dHlwZTpcIlBPU1RcIix1cmw6XCIvc2VhcmNoL1wiLGRhdGE6e3NlYXJjaF90ZXh0OnQoXCIjc2VhcmNoXCIpLnZhbCgpLGNzcmZtaWRkbGV3YXJldG9rZW46dChcImlucHV0W25hbWU9Y3NyZm1pZGRsZXdhcmV0b2tlbl1cIikudmFsKCl9LHN1Y2Nlc3M6c2VhcmNoU3VjY2VzcyxkYXRhVHlwZTpcImh0bWxcIn0pfSl9KCQpLCQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyQoXCIuYmFza2V0LWl0ZW1zXCIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuXCIpfXZhciBlPSQoXCIjZm9ybS1idXlpbmctcHJvZHVjdHNcIik7ZS5vbihcInN1Ym1pdFwiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSwkKFwiI251bWJlclwiKS52YWwoKTt2YXIgaT0kKFwiI251bWJlclwiKS52YWwoKSxuPSQoXCIjc3VibWl0LWJ0blwiKSxzPW4uZGF0YShcInByb2R1Y3RzLWlkXCIpLG89KG4uZGF0YShcInByb2R1Y3RzLW5hbWVcIiksbi5kYXRhKFwicHJvZHVjdHMtcHJpY2VcIikse30pO28ucHJvZHVjdF9pZD1zLG8ubm1iPWk7dmFyIGE9JCgnI2Zvcm0tYnV5aW5nLXByb2R1Y3RzIFtuYW1lPVwiY3NyZm1pZGRsZXdhcmV0b2tlblwiXScpLnZhbCgpO28uY3NyZm1pZGRsZXdhcmV0b2tlbj1hO3ZhciByPWUuYXR0cihcImFjdGlvblwiKTskLmFqYXgoe3VybDpyLHR5cGU6XCJQT1NUXCIsZGF0YTpvLGNhY2hlOiEwLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dC5wcm9kdWN0c190b3RhbF9ubWImJigkKFwiI2Jhc2tldF90b3RhbF9ubWJcIikudGV4dChcIihcIit0LnByb2R1Y3RzX3RvdGFsX25tYitcIilcIiksJChcIi5iYXNrZXQtaXRlbXMgdWxcIikuaHRtbChcIlwiKSwkLmVhY2godC5wcm9kdWN0cyxmdW5jdGlvbih0LGUpeyQoXCIuYmFza2V0LWl0ZW1zIHVsXCIpLmFwcGVuZChcIjxsaT5cIitlLm5hbWUrXCIsIFwiK2Uubm1iK1wicGMuIGZvciBcIitlLnByaWNlX3Blcl9pdGVtK1wicnViLiAgPC9saT5cIil9KSl9LGVycm9yOmZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCJlcnJvclwiKX19KX0pLCQoXCIuYmFza2V0LWNvbnRhaW5lclwiKS5tb3VzZW92ZXIoZnVuY3Rpb24oKXt0KCl9KSwkKFwiLmJhc2tldC1jb250YWluZXJcIikubW91c2VvdXQoZnVuY3Rpb24oKXt0KCl9KSwkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsXCIuZGVsZXRlLWl0ZW1cIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksJCh0aGlzKS5jbG9zZXN0KFwibGlcIikucmVtb3ZlKCl9KX0pLGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXQuZG9jdW1lbnQ/ZSh0LCEwKTpmdW5jdGlvbih0KXtpZighdC5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIpO3JldHVybiBlKHQpfTplKHQpfShcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaSh0LGUsaSl7dmFyIG4scz0oZT1lfHxaKS5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2lmKHMudGV4dD10LGkpZm9yKG4gaW4gcHQpaVtuXSYmKHNbbl09aVtuXSk7ZS5oZWFkLmFwcGVuZENoaWxkKHMpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyl9ZnVuY3Rpb24gbih0KXtyZXR1cm4gbnVsbD09dD90K1wiXCI6XCJvYmplY3RcIj09dHlwZW9mIHR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/b3RbYXQuY2FsbCh0KV18fFwib2JqZWN0XCI6dHlwZW9mIHR9ZnVuY3Rpb24gcyh0KXt2YXIgZT0hIXQmJlwibGVuZ3RoXCJpbiB0JiZ0Lmxlbmd0aCxpPW4odCk7cmV0dXJuIXV0KHQpJiYhZHQodCkmJihcImFycmF5XCI9PT1pfHwwPT09ZXx8XCJudW1iZXJcIj09dHlwZW9mIGUmJmU+MCYmZS0xIGluIHQpfWZ1bmN0aW9uIG8odCxlKXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGEodCxlLGkpe3JldHVybiB1dChlKT9mdC5ncmVwKHQsZnVuY3Rpb24odCxuKXtyZXR1cm4hIWUuY2FsbCh0LG4sdCkhPT1pfSk6ZS5ub2RlVHlwZT9mdC5ncmVwKHQsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lIT09aX0pOlwic3RyaW5nXCIhPXR5cGVvZiBlP2Z0LmdyZXAodCxmdW5jdGlvbih0KXtyZXR1cm4gc3QuY2FsbChlLHQpPi0xIT09aX0pOmZ0LmZpbHRlcihlLHQsaSl9ZnVuY3Rpb24gcih0LGUpe2Zvcig7KHQ9dFtlXSkmJjEhPT10Lm5vZGVUeXBlOyk7cmV0dXJuIHR9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gdH1mdW5jdGlvbiBoKHQpe3Rocm93IHR9ZnVuY3Rpb24gYyh0LGUsaSxuKXt2YXIgczt0cnl7dCYmdXQocz10LnByb21pc2UpP3MuY2FsbCh0KS5kb25lKGUpLmZhaWwoaSk6dCYmdXQocz10LnRoZW4pP3MuY2FsbCh0LGUsaSk6ZS5hcHBseSh2b2lkIDAsW3RdLnNsaWNlKG4pKX1jYXRjaCh0KXtpLmFwcGx5KHZvaWQgMCxbdF0pfX1mdW5jdGlvbiB1KCl7Wi5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLHUpLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIix1KSxmdC5yZWFkeSgpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIHAodCl7cmV0dXJuIHQucmVwbGFjZShQdCxcIm1zLVwiKS5yZXBsYWNlKEV0LGQpfWZ1bmN0aW9uIGYoKXt0aGlzLmV4cGFuZG89ZnQuZXhwYW5kbytmLnVpZCsrfWZ1bmN0aW9uIGcodCxlLGkpe3ZhciBuO2lmKHZvaWQgMD09PWkmJjE9PT10Lm5vZGVUeXBlKWlmKG49XCJkYXRhLVwiK2UucmVwbGFjZShIdCxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpLFwic3RyaW5nXCI9PXR5cGVvZihpPXQuZ2V0QXR0cmlidXRlKG4pKSl7dHJ5e2k9ZnVuY3Rpb24odCl7cmV0dXJuXCJ0cnVlXCI9PT10fHxcImZhbHNlXCIhPT10JiYoXCJudWxsXCI9PT10P251bGw6dD09PSt0K1wiXCI/K3Q6TnQudGVzdCh0KT9KU09OLnBhcnNlKHQpOnQpfShpKX1jYXRjaCh0KXt9T3Quc2V0KHQsZSxpKX1lbHNlIGk9dm9pZCAwO3JldHVybiBpfWZ1bmN0aW9uIG0odCxlLGksbil7dmFyIHMsbyxhPTIwLHI9bj9mdW5jdGlvbigpe3JldHVybiBuLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiBmdC5jc3ModCxlLFwiXCIpfSxsPXIoKSxoPWkmJmlbM118fChmdC5jc3NOdW1iZXJbZV0/XCJcIjpcInB4XCIpLGM9KGZ0LmNzc051bWJlcltlXXx8XCJweFwiIT09aCYmK2wpJiZMdC5leGVjKGZ0LmNzcyh0LGUpKTtpZihjJiZjWzNdIT09aCl7Zm9yKGwvPTIsaD1ofHxjWzNdLGM9K2x8fDE7YS0tOylmdC5zdHlsZSh0LGUsYytoKSwoMS1vKSooMS0obz1yKCkvbHx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLGZ0LnN0eWxlKHQsZSxjK2gpLGk9aXx8W119cmV0dXJuIGkmJihjPStjfHwrbHx8MCxzPWlbMV0/YysoaVsxXSsxKSppWzJdOitpWzJdLG4mJihuLnVuaXQ9aCxuLnN0YXJ0PWMsbi5lbmQ9cykpLHN9ZnVuY3Rpb24gdih0KXt2YXIgZSxpPXQub3duZXJEb2N1bWVudCxuPXQubm9kZU5hbWUscz1qdFtuXTtyZXR1cm4gc3x8KGU9aS5ib2R5LmFwcGVuZENoaWxkKGkuY3JlYXRlRWxlbWVudChuKSkscz1mdC5jc3MoZSxcImRpc3BsYXlcIiksZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpLFwibm9uZVwiPT09cyYmKHM9XCJibG9ja1wiKSxqdFtuXT1zLHMpfWZ1bmN0aW9uIGIodCxlKXtmb3IodmFyIGksbixzPVtdLG89MCxhPXQubGVuZ3RoO288YTtvKyspKG49dFtvXSkuc3R5bGUmJihpPW4uc3R5bGUuZGlzcGxheSxlPyhcIm5vbmVcIj09PWkmJihzW29dPUF0LmdldChuLFwiZGlzcGxheVwiKXx8bnVsbCxzW29dfHwobi5zdHlsZS5kaXNwbGF5PVwiXCIpKSxcIlwiPT09bi5zdHlsZS5kaXNwbGF5JiZSdChuKSYmKHNbb109dihuKSkpOlwibm9uZVwiIT09aSYmKHNbb109XCJub25lXCIsQXQuc2V0KG4sXCJkaXNwbGF5XCIsaSkpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9c1tvXSYmKHRbb10uc3R5bGUuZGlzcGxheT1zW29dKTtyZXR1cm4gdH1mdW5jdGlvbiBfKHQsZSl7dmFyIGk7cmV0dXJuIGk9dm9pZCAwIT09dC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGV8fFwiKlwiKTp2b2lkIDAhPT10LnF1ZXJ5U2VsZWN0b3JBbGw/dC5xdWVyeVNlbGVjdG9yQWxsKGV8fFwiKlwiKTpbXSx2b2lkIDA9PT1lfHxlJiZvKHQsZSk/ZnQubWVyZ2UoW3RdLGkpOml9ZnVuY3Rpb24geSh0LGUpe2Zvcih2YXIgaT0wLG49dC5sZW5ndGg7aTxuO2krKylBdC5zZXQodFtpXSxcImdsb2JhbEV2YWxcIiwhZXx8QXQuZ2V0KGVbaV0sXCJnbG9iYWxFdmFsXCIpKX1mdW5jdGlvbiB3KHQsZSxpLHMsbyl7Zm9yKHZhciBhLHIsbCxoLGMsdSxkPWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHA9W10sZj0wLGc9dC5sZW5ndGg7ZjxnO2YrKylpZigoYT10W2ZdKXx8MD09PWEpaWYoXCJvYmplY3RcIj09PW4oYSkpZnQubWVyZ2UocCxhLm5vZGVUeXBlP1thXTphKTtlbHNlIGlmKFl0LnRlc3QoYSkpe2ZvcihyPXJ8fGQuYXBwZW5kQ2hpbGQoZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxsPShCdC5leGVjKGEpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKSxoPVV0W2xdfHxVdC5fZGVmYXVsdCxyLmlubmVySFRNTD1oWzFdK2Z0Lmh0bWxQcmVmaWx0ZXIoYSkraFsyXSx1PWhbMF07dS0tOylyPXIubGFzdENoaWxkO2Z0Lm1lcmdlKHAsci5jaGlsZE5vZGVzKSwocj1kLmZpcnN0Q2hpbGQpLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBwLnB1c2goZS5jcmVhdGVUZXh0Tm9kZShhKSk7Zm9yKGQudGV4dENvbnRlbnQ9XCJcIixmPTA7YT1wW2YrK107KWlmKHMmJmZ0LmluQXJyYXkoYSxzKT4tMSlvJiZvLnB1c2goYSk7ZWxzZSBpZihjPWZ0LmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKSxyPV8oZC5hcHBlbmRDaGlsZChhKSxcInNjcmlwdFwiKSxjJiZ5KHIpLGkpZm9yKHU9MDthPXJbdSsrXTspcXQudGVzdChhLnR5cGV8fFwiXCIpJiZpLnB1c2goYSk7cmV0dXJuIGR9ZnVuY3Rpb24geCgpe3JldHVybiEwfWZ1bmN0aW9uIEMoKXtyZXR1cm4hMX1mdW5jdGlvbiBrKCl7dHJ5e3JldHVybiBaLmFjdGl2ZUVsZW1lbnR9Y2F0Y2godCl7fX1mdW5jdGlvbiBUKHQsZSxpLG4scyxvKXt2YXIgYSxyO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXtmb3IociBpblwic3RyaW5nXCIhPXR5cGVvZiBpJiYobj1ufHxpLGk9dm9pZCAwKSxlKVQodCxyLGksbixlW3JdLG8pO3JldHVybiB0fWlmKG51bGw9PW4mJm51bGw9PXM/KHM9aSxuPWk9dm9pZCAwKTpudWxsPT1zJiYoXCJzdHJpbmdcIj09dHlwZW9mIGk/KHM9bixuPXZvaWQgMCk6KHM9bixuPWksaT12b2lkIDApKSwhMT09PXMpcz1DO2Vsc2UgaWYoIXMpcmV0dXJuIHQ7cmV0dXJuIDE9PT1vJiYoYT1zLChzPWZ1bmN0aW9uKHQpe3JldHVybiBmdCgpLm9mZih0KSxhLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLmd1aWQ9YS5ndWlkfHwoYS5ndWlkPWZ0Lmd1aWQrKykpLHQuZWFjaChmdW5jdGlvbigpe2Z0LmV2ZW50LmFkZCh0aGlzLGUscyxuLGkpfSl9ZnVuY3Rpb24gRCh0LGUpe3JldHVybiBvKHQsXCJ0YWJsZVwiKSYmbygxMSE9PWUubm9kZVR5cGU/ZTplLmZpcnN0Q2hpbGQsXCJ0clwiKSYmZnQodCkuY2hpbGRyZW4oXCJ0Ym9keVwiKVswXXx8dH1mdW5jdGlvbiBTKHQpe3JldHVybiB0LnR5cGU9KG51bGwhPT10LmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK3QudHlwZSx0fWZ1bmN0aW9uIEkodCl7cmV0dXJuXCJ0cnVlL1wiPT09KHQudHlwZXx8XCJcIikuc2xpY2UoMCw1KT90LnR5cGU9dC50eXBlLnNsaWNlKDUpOnQucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKSx0fWZ1bmN0aW9uIFAodCxlKXt2YXIgaSxuLHMsbyxhLHIsbCxoO2lmKDE9PT1lLm5vZGVUeXBlKXtpZihBdC5oYXNEYXRhKHQpJiYobz1BdC5hY2Nlc3ModCksYT1BdC5zZXQoZSxvKSxoPW8uZXZlbnRzKSlmb3IocyBpbiBkZWxldGUgYS5oYW5kbGUsYS5ldmVudHM9e30saClmb3IoaT0wLG49aFtzXS5sZW5ndGg7aTxuO2krKylmdC5ldmVudC5hZGQoZSxzLGhbc11baV0pO090Lmhhc0RhdGEodCkmJihyPU90LmFjY2Vzcyh0KSxsPWZ0LmV4dGVuZCh7fSxyKSxPdC5zZXQoZSxsKSl9fWZ1bmN0aW9uIEUodCxlKXt2YXIgaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XCJpbnB1dFwiPT09aSYmRnQudGVzdCh0LnR5cGUpP2UuY2hlY2tlZD10LmNoZWNrZWQ6XCJpbnB1dFwiIT09aSYmXCJ0ZXh0YXJlYVwiIT09aXx8KGUuZGVmYXVsdFZhbHVlPXQuZGVmYXVsdFZhbHVlKX1mdW5jdGlvbiBNKHQsZSxuLHMpe2U9aXQuYXBwbHkoW10sZSk7dmFyIG8sYSxyLGwsaCxjLHU9MCxkPXQubGVuZ3RoLHA9ZC0xLGY9ZVswXSxnPXV0KGYpO2lmKGd8fGQ+MSYmXCJzdHJpbmdcIj09dHlwZW9mIGYmJiFjdC5jaGVja0Nsb25lJiZadC50ZXN0KGYpKXJldHVybiB0LmVhY2goZnVuY3Rpb24oaSl7dmFyIG89dC5lcShpKTtnJiYoZVswXT1mLmNhbGwodGhpcyxpLG8uaHRtbCgpKSksTShvLGUsbixzKX0pO2lmKGQmJihhPShvPXcoZSx0WzBdLm93bmVyRG9jdW1lbnQsITEsdCxzKSkuZmlyc3RDaGlsZCwxPT09by5jaGlsZE5vZGVzLmxlbmd0aCYmKG89YSksYXx8cykpe2ZvcihsPShyPWZ0Lm1hcChfKG8sXCJzY3JpcHRcIiksUykpLmxlbmd0aDt1PGQ7dSsrKWg9byx1IT09cCYmKGg9ZnQuY2xvbmUoaCwhMCwhMCksbCYmZnQubWVyZ2UocixfKGgsXCJzY3JpcHRcIikpKSxuLmNhbGwodFt1XSxoLHUpO2lmKGwpZm9yKGM9cltyLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LGZ0Lm1hcChyLEkpLHU9MDt1PGw7dSsrKWg9clt1XSxxdC50ZXN0KGgudHlwZXx8XCJcIikmJiFBdC5hY2Nlc3MoaCxcImdsb2JhbEV2YWxcIikmJmZ0LmNvbnRhaW5zKGMsaCkmJihoLnNyYyYmXCJtb2R1bGVcIiE9PShoLnR5cGV8fFwiXCIpLnRvTG93ZXJDYXNlKCk/ZnQuX2V2YWxVcmwmJmZ0Ll9ldmFsVXJsKGguc3JjKTppKGgudGV4dENvbnRlbnQucmVwbGFjZSh0ZSxcIlwiKSxjLGgpKX1yZXR1cm4gdH1mdW5jdGlvbiBBKHQsZSxpKXtmb3IodmFyIG4scz1lP2Z0LmZpbHRlcihlLHQpOnQsbz0wO251bGwhPShuPXNbb10pO28rKylpfHwxIT09bi5ub2RlVHlwZXx8ZnQuY2xlYW5EYXRhKF8obikpLG4ucGFyZW50Tm9kZSYmKGkmJmZ0LmNvbnRhaW5zKG4ub3duZXJEb2N1bWVudCxuKSYmeShfKG4sXCJzY3JpcHRcIikpLG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKSk7cmV0dXJuIHR9ZnVuY3Rpb24gTyh0LGUsaSl7dmFyIG4scyxvLGEscj10LnN0eWxlO3JldHVybihpPWl8fGllKHQpKSYmKFwiXCIhPT0oYT1pLmdldFByb3BlcnR5VmFsdWUoZSl8fGlbZV0pfHxmdC5jb250YWlucyh0Lm93bmVyRG9jdW1lbnQsdCl8fChhPWZ0LnN0eWxlKHQsZSkpLCFjdC5waXhlbEJveFN0eWxlcygpJiZlZS50ZXN0KGEpJiZuZS50ZXN0KGUpJiYobj1yLndpZHRoLHM9ci5taW5XaWR0aCxvPXIubWF4V2lkdGgsci5taW5XaWR0aD1yLm1heFdpZHRoPXIud2lkdGg9YSxhPWkud2lkdGgsci53aWR0aD1uLHIubWluV2lkdGg9cyxyLm1heFdpZHRoPW8pKSx2b2lkIDAhPT1hP2ErXCJcIjphfWZ1bmN0aW9uIE4odCxlKXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQoKT92b2lkIGRlbGV0ZSB0aGlzLmdldDoodGhpcy5nZXQ9ZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19ZnVuY3Rpb24gSCh0KXt2YXIgZT1mdC5jc3NQcm9wc1t0XTtyZXR1cm4gZXx8KGU9ZnQuY3NzUHJvcHNbdF09ZnVuY3Rpb24odCl7aWYodCBpbiBoZSlyZXR1cm4gdDtmb3IodmFyIGU9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSksaT1sZS5sZW5ndGg7aS0tOylpZigodD1sZVtpXStlKWluIGhlKXJldHVybiB0fSh0KXx8dCksZX1mdW5jdGlvbiB6KHQsZSxpKXt2YXIgbj1MdC5leGVjKGUpO3JldHVybiBuP01hdGgubWF4KDAsblsyXS0oaXx8MCkpKyhuWzNdfHxcInB4XCIpOmV9ZnVuY3Rpb24gTCh0LGUsaSxuLHMsbyl7dmFyIGE9XCJ3aWR0aFwiPT09ZT8xOjAscj0wLGw9MDtpZihpPT09KG4/XCJib3JkZXJcIjpcImNvbnRlbnRcIikpcmV0dXJuIDA7Zm9yKDthPDQ7YSs9MilcIm1hcmdpblwiPT09aSYmKGwrPWZ0LmNzcyh0LGkrV3RbYV0sITAscykpLG4/KFwiY29udGVudFwiPT09aSYmKGwtPWZ0LmNzcyh0LFwicGFkZGluZ1wiK1d0W2FdLCEwLHMpKSxcIm1hcmdpblwiIT09aSYmKGwtPWZ0LmNzcyh0LFwiYm9yZGVyXCIrV3RbYV0rXCJXaWR0aFwiLCEwLHMpKSk6KGwrPWZ0LmNzcyh0LFwicGFkZGluZ1wiK1d0W2FdLCEwLHMpLFwicGFkZGluZ1wiIT09aT9sKz1mdC5jc3ModCxcImJvcmRlclwiK1d0W2FdK1wiV2lkdGhcIiwhMCxzKTpyKz1mdC5jc3ModCxcImJvcmRlclwiK1d0W2FdK1wiV2lkdGhcIiwhMCxzKSk7cmV0dXJuIW4mJm8+PTAmJihsKz1NYXRoLm1heCgwLE1hdGguY2VpbCh0W1wib2Zmc2V0XCIrZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSldLW8tbC1yLS41KSkpLGx9ZnVuY3Rpb24gVyh0LGUsaSl7dmFyIG49aWUodCkscz1PKHQsZSxuKSxvPVwiYm9yZGVyLWJveFwiPT09ZnQuY3NzKHQsXCJib3hTaXppbmdcIiwhMSxuKSxhPW87aWYoZWUudGVzdChzKSl7aWYoIWkpcmV0dXJuIHM7cz1cImF1dG9cIn1yZXR1cm4gYT1hJiYoY3QuYm94U2l6aW5nUmVsaWFibGUoKXx8cz09PXQuc3R5bGVbZV0pLChcImF1dG9cIj09PXN8fCFwYXJzZUZsb2F0KHMpJiZcImlubGluZVwiPT09ZnQuY3NzKHQsXCJkaXNwbGF5XCIsITEsbikpJiYocz10W1wib2Zmc2V0XCIrZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSldLGE9ITApLChzPXBhcnNlRmxvYXQocyl8fDApK0wodCxlLGl8fChvP1wiYm9yZGVyXCI6XCJjb250ZW50XCIpLGEsbixzKStcInB4XCJ9ZnVuY3Rpb24gUih0LGUsaSxuLHMpe3JldHVybiBuZXcgUi5wcm90b3R5cGUuaW5pdCh0LGUsaSxuLHMpfWZ1bmN0aW9uICQoKXt1ZSYmKCExPT09Wi5oaWRkZW4mJnQucmVxdWVzdEFuaW1hdGlvbkZyYW1lP3QucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCQpOnQuc2V0VGltZW91dCgkLGZ0LmZ4LmludGVydmFsKSxmdC5meC50aWNrKCkpfWZ1bmN0aW9uIGooKXtyZXR1cm4gdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Y2U9dm9pZCAwfSksY2U9RGF0ZS5ub3coKX1mdW5jdGlvbiBGKHQsZSl7dmFyIGksbj0wLHM9e2hlaWdodDp0fTtmb3IoZT1lPzE6MDtuPDQ7bis9Mi1lKXNbXCJtYXJnaW5cIisoaT1XdFtuXSldPXNbXCJwYWRkaW5nXCIraV09dDtyZXR1cm4gZSYmKHMub3BhY2l0eT1zLndpZHRoPXQpLHN9ZnVuY3Rpb24gQih0LGUsaSl7Zm9yKHZhciBuLHM9KHEudHdlZW5lcnNbZV18fFtdKS5jb25jYXQocS50d2VlbmVyc1tcIipcIl0pLG89MCxhPXMubGVuZ3RoO288YTtvKyspaWYobj1zW29dLmNhbGwoaSxlLHQpKXJldHVybiBufWZ1bmN0aW9uIHEodCxlLGkpe3ZhciBuLHMsbz0wLGE9cS5wcmVmaWx0ZXJzLmxlbmd0aCxyPWZ0LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGwuZWxlbX0pLGw9ZnVuY3Rpb24oKXtpZihzKXJldHVybiExO2Zvcih2YXIgZT1jZXx8aigpLGk9TWF0aC5tYXgoMCxoLnN0YXJ0VGltZStoLmR1cmF0aW9uLWUpLG49MS0oaS9oLmR1cmF0aW9ufHwwKSxvPTAsYT1oLnR3ZWVucy5sZW5ndGg7bzxhO28rKyloLnR3ZWVuc1tvXS5ydW4obik7cmV0dXJuIHIubm90aWZ5V2l0aCh0LFtoLG4saV0pLG48MSYmYT9pOihhfHxyLm5vdGlmeVdpdGgodCxbaCwxLDBdKSxyLnJlc29sdmVXaXRoKHQsW2hdKSwhMSl9LGg9ci5wcm9taXNlKHtlbGVtOnQscHJvcHM6ZnQuZXh0ZW5kKHt9LGUpLG9wdHM6ZnQuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzpmdC5lYXNpbmcuX2RlZmF1bHR9LGkpLG9yaWdpbmFsUHJvcGVydGllczplLG9yaWdpbmFsT3B0aW9uczppLHN0YXJ0VGltZTpjZXx8aigpLGR1cmF0aW9uOmkuZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKGUsaSl7dmFyIG49ZnQuVHdlZW4odCxoLm9wdHMsZSxpLGgub3B0cy5zcGVjaWFsRWFzaW5nW2VdfHxoLm9wdHMuZWFzaW5nKTtyZXR1cm4gaC50d2VlbnMucHVzaChuKSxufSxzdG9wOmZ1bmN0aW9uKGUpe3ZhciBpPTAsbj1lP2gudHdlZW5zLmxlbmd0aDowO2lmKHMpcmV0dXJuIHRoaXM7Zm9yKHM9ITA7aTxuO2krKyloLnR3ZWVuc1tpXS5ydW4oMSk7cmV0dXJuIGU/KHIubm90aWZ5V2l0aCh0LFtoLDEsMF0pLHIucmVzb2x2ZVdpdGgodCxbaCxlXSkpOnIucmVqZWN0V2l0aCh0LFtoLGVdKSx0aGlzfX0pLGM9aC5wcm9wcztmb3IoKGZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLG8sYTtmb3IoaSBpbiB0KWlmKHM9ZVtuPXAoaSldLG89dFtpXSxBcnJheS5pc0FycmF5KG8pJiYocz1vWzFdLG89dFtpXT1vWzBdKSxpIT09biYmKHRbbl09byxkZWxldGUgdFtpXSksKGE9ZnQuY3NzSG9va3Nbbl0pJiZcImV4cGFuZFwiaW4gYSlmb3IoaSBpbiBvPWEuZXhwYW5kKG8pLGRlbGV0ZSB0W25dLG8paSBpbiB0fHwodFtpXT1vW2ldLGVbaV09cyk7ZWxzZSBlW25dPXN9KGMsaC5vcHRzLnNwZWNpYWxFYXNpbmcpKTtvPGE7bysrKWlmKG49cS5wcmVmaWx0ZXJzW29dLmNhbGwoaCx0LGMsaC5vcHRzKSlyZXR1cm4gdXQobi5zdG9wKSYmKGZ0Ll9xdWV1ZUhvb2tzKGguZWxlbSxoLm9wdHMucXVldWUpLnN0b3A9bi5zdG9wLmJpbmQobikpLG47cmV0dXJuIGZ0Lm1hcChjLEIsaCksdXQoaC5vcHRzLnN0YXJ0KSYmaC5vcHRzLnN0YXJ0LmNhbGwodCxoKSxoLnByb2dyZXNzKGgub3B0cy5wcm9ncmVzcykuZG9uZShoLm9wdHMuZG9uZSxoLm9wdHMuY29tcGxldGUpLmZhaWwoaC5vcHRzLmZhaWwpLmFsd2F5cyhoLm9wdHMuYWx3YXlzKSxmdC5meC50aW1lcihmdC5leHRlbmQobCx7ZWxlbTp0LGFuaW06aCxxdWV1ZTpoLm9wdHMucXVldWV9KSksaH1mdW5jdGlvbiBVKHQpe3JldHVybih0Lm1hdGNoKFR0KXx8W10pLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIFkodCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlJiZ0LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwifWZ1bmN0aW9uIFYodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dDpcInN0cmluZ1wiPT10eXBlb2YgdCYmdC5tYXRjaChUdCl8fFtdfWZ1bmN0aW9uIEsodCxlLGkscyl7dmFyIG87aWYoQXJyYXkuaXNBcnJheShlKSlmdC5lYWNoKGUsZnVuY3Rpb24oZSxuKXtpfHxrZS50ZXN0KHQpP3ModCxuKTpLKHQrXCJbXCIrKFwib2JqZWN0XCI9PXR5cGVvZiBuJiZudWxsIT1uP2U6XCJcIikrXCJdXCIsbixpLHMpfSk7ZWxzZSBpZihpfHxcIm9iamVjdFwiIT09bihlKSlzKHQsZSk7ZWxzZSBmb3IobyBpbiBlKUsodCtcIltcIitvK1wiXVwiLGVbb10saSxzKX1mdW5jdGlvbiBYKHQpe3JldHVybiBmdW5jdGlvbihlLGkpe1wic3RyaW5nXCIhPXR5cGVvZiBlJiYoaT1lLGU9XCIqXCIpO3ZhciBuLHM9MCxvPWUudG9Mb3dlckNhc2UoKS5tYXRjaChUdCl8fFtdO2lmKHV0KGkpKWZvcig7bj1vW3MrK107KVwiK1wiPT09blswXT8obj1uLnNsaWNlKDEpfHxcIipcIiwodFtuXT10W25dfHxbXSkudW5zaGlmdChpKSk6KHRbbl09dFtuXXx8W10pLnB1c2goaSl9fWZ1bmN0aW9uIEcodCxlLGksbil7ZnVuY3Rpb24gcyhyKXt2YXIgbDtyZXR1cm4gb1tyXT0hMCxmdC5lYWNoKHRbcl18fFtdLGZ1bmN0aW9uKHQscil7dmFyIGg9cihlLGksbik7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGh8fGF8fG9baF0/YT8hKGw9aCk6dm9pZCAwOihlLmRhdGFUeXBlcy51bnNoaWZ0KGgpLHMoaCksITEpfSksbH12YXIgbz17fSxhPXQ9PT1IZTtyZXR1cm4gcyhlLmRhdGFUeXBlc1swXSl8fCFvW1wiKlwiXSYmcyhcIipcIil9ZnVuY3Rpb24gUSh0LGUpe3ZhciBpLG4scz1mdC5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihpIGluIGUpdm9pZCAwIT09ZVtpXSYmKChzW2ldP3Q6bnx8KG49e30pKVtpXT1lW2ldKTtyZXR1cm4gbiYmZnQuZXh0ZW5kKCEwLHQsbiksdH12YXIgSj1bXSxaPXQuZG9jdW1lbnQsdHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mLGV0PUouc2xpY2UsaXQ9Si5jb25jYXQsbnQ9Si5wdXNoLHN0PUouaW5kZXhPZixvdD17fSxhdD1vdC50b1N0cmluZyxydD1vdC5oYXNPd25Qcm9wZXJ0eSxsdD1ydC50b1N0cmluZyxodD1sdC5jYWxsKE9iamVjdCksY3Q9e30sdXQ9ZnVuY3Rpb24odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmXCJudW1iZXJcIiE9dHlwZW9mIHQubm9kZVR5cGV9LGR0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10JiZ0PT09dC53aW5kb3d9LHB0PXt0eXBlOiEwLHNyYzohMCxub01vZHVsZTohMH0sZnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGZ0LmZuLmluaXQodCxlKX0sZ3Q9L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO2Z0LmZuPWZ0LnByb3RvdHlwZT17anF1ZXJ5OlwiMy4zLjFcIixjb25zdHJ1Y3RvcjpmdCxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIGV0LmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbih0KXtyZXR1cm4gbnVsbD09dD9ldC5jYWxsKHRoaXMpOnQ8MD90aGlzW3QrdGhpcy5sZW5ndGhdOnRoaXNbdF19LHB1c2hTdGFjazpmdW5jdGlvbih0KXt2YXIgZT1mdC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksdCk7cmV0dXJuIGUucHJldk9iamVjdD10aGlzLGV9LGVhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIGZ0LmVhY2godGhpcyx0KX0sbWFwOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdC5tYXAodGhpcyxmdW5jdGlvbihlLGkpe3JldHVybiB0LmNhbGwoZSxpLGUpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhldC5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmxlbmd0aCxpPSt0Kyh0PDA/ZTowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soaT49MCYmaTxlP1t0aGlzW2ldXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpudCxzb3J0Okouc29ydCxzcGxpY2U6Si5zcGxpY2V9LGZ0LmV4dGVuZD1mdC5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgdCxlLGksbixzLG8sYT1hcmd1bWVudHNbMF18fHt9LHI9MSxsPWFyZ3VtZW50cy5sZW5ndGgsaD0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBhJiYoaD1hLGE9YXJndW1lbnRzW3JdfHx7fSxyKyspLFwib2JqZWN0XCI9PXR5cGVvZiBhfHx1dChhKXx8KGE9e30pLHI9PT1sJiYoYT10aGlzLHItLSk7cjxsO3IrKylpZihudWxsIT0odD1hcmd1bWVudHNbcl0pKWZvcihlIGluIHQpaT1hW2VdLGEhPT0obj10W2VdKSYmKGgmJm4mJihmdC5pc1BsYWluT2JqZWN0KG4pfHwocz1BcnJheS5pc0FycmF5KG4pKSk/KHM/KHM9ITEsbz1pJiZBcnJheS5pc0FycmF5KGkpP2k6W10pOm89aSYmZnQuaXNQbGFpbk9iamVjdChpKT9pOnt9LGFbZV09ZnQuZXh0ZW5kKGgsbyxuKSk6dm9pZCAwIT09biYmKGFbZV09bikpO3JldHVybiBhfSxmdC5leHRlbmQoe2V4cGFuZG86XCJqUXVlcnlcIisoXCIzLjMuMVwiK01hdGgucmFuZG9tKCkpLnJlcGxhY2UoL1xcRC9nLFwiXCIpLGlzUmVhZHk6ITAsZXJyb3I6ZnVuY3Rpb24odCl7dGhyb3cgbmV3IEVycm9yKHQpfSxub29wOmZ1bmN0aW9uKCl7fSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlLGk7cmV0dXJuISghdHx8XCJbb2JqZWN0IE9iamVjdF1cIiE9PWF0LmNhbGwodCl8fChlPXR0KHQpKSYmKFwiZnVuY3Rpb25cIiE9dHlwZW9mKGk9cnQuY2FsbChlLFwiY29uc3RydWN0b3JcIikmJmUuY29uc3RydWN0b3IpfHxsdC5jYWxsKGkpIT09aHQpKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiB0KXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKHQpe2kodCl9LGVhY2g6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPTA7aWYocyh0KSlmb3IoaT10Lmxlbmd0aDtuPGkmJiExIT09ZS5jYWxsKHRbbl0sbix0W25dKTtuKyspO2Vsc2UgZm9yKG4gaW4gdClpZighMT09PWUuY2FsbCh0W25dLG4sdFtuXSkpYnJlYWs7cmV0dXJuIHR9LHRyaW06ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/XCJcIjoodCtcIlwiKS5yZXBsYWNlKGd0LFwiXCIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24odCxlKXt2YXIgaT1lfHxbXTtyZXR1cm4gbnVsbCE9dCYmKHMoT2JqZWN0KHQpKT9mdC5tZXJnZShpLFwic3RyaW5nXCI9PXR5cGVvZiB0P1t0XTp0KTpudC5jYWxsKGksdCkpLGl9LGluQXJyYXk6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBudWxsPT1lPy0xOnN0LmNhbGwoZSx0LGkpfSxtZXJnZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0rZS5sZW5ndGgsbj0wLHM9dC5sZW5ndGg7bjxpO24rKyl0W3MrK109ZVtuXTtyZXR1cm4gdC5sZW5ndGg9cyx0fSxncmVwOmZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG49W10scz0wLG89dC5sZW5ndGgsYT0haTtzPG87cysrKSFlKHRbc10scykhPT1hJiZuLnB1c2godFtzXSk7cmV0dXJuIG59LG1hcDpmdW5jdGlvbih0LGUsaSl7dmFyIG4sbyxhPTAscj1bXTtpZihzKHQpKWZvcihuPXQubGVuZ3RoO2E8bjthKyspbnVsbCE9KG89ZSh0W2FdLGEsaSkpJiZyLnB1c2gobyk7ZWxzZSBmb3IoYSBpbiB0KW51bGwhPShvPWUodFthXSxhLGkpKSYmci5wdXNoKG8pO3JldHVybiBpdC5hcHBseShbXSxyKX0sZ3VpZDoxLHN1cHBvcnQ6Y3R9KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJihmdC5mbltTeW1ib2wuaXRlcmF0b3JdPUpbU3ltYm9sLml0ZXJhdG9yXSksZnQuZWFjaChcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoXCIgXCIpLGZ1bmN0aW9uKHQsZSl7b3RbXCJbb2JqZWN0IFwiK2UrXCJdXCJdPWUudG9Mb3dlckNhc2UoKX0pO3ZhciBtdD1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxpLG4pe3ZhciBzLG8sYSxyLGwsYyxkLHA9ZSYmZS5vd25lckRvY3VtZW50LGY9ZT9lLm5vZGVUeXBlOjk7aWYoaT1pfHxbXSxcInN0cmluZ1wiIT10eXBlb2YgdHx8IXR8fDEhPT1mJiY5IT09ZiYmMTEhPT1mKXJldHVybiBpO2lmKCFuJiYoKGU/ZS5vd25lckRvY3VtZW50fHxlOlIpIT09TSYmRShlKSxlPWV8fE0sTykpe2lmKDExIT09ZiYmKGw9Z3QuZXhlYyh0KSkpaWYocz1sWzFdKXtpZig5PT09Zil7aWYoIShhPWUuZ2V0RWxlbWVudEJ5SWQocykpKXJldHVybiBpO2lmKGEuaWQ9PT1zKXJldHVybiBpLnB1c2goYSksaX1lbHNlIGlmKHAmJihhPXAuZ2V0RWxlbWVudEJ5SWQocykpJiZMKGUsYSkmJmEuaWQ9PT1zKXJldHVybiBpLnB1c2goYSksaX1lbHNle2lmKGxbMl0pcmV0dXJuIEcuYXBwbHkoaSxlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpKSxpO2lmKChzPWxbM10pJiZ5LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gRy5hcHBseShpLGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzKSksaX1pZih5LnFzYSYmIXFbdCtcIiBcIl0mJighTnx8IU4udGVzdCh0KSkpe2lmKDEhPT1mKXA9ZSxkPXQ7ZWxzZSBpZihcIm9iamVjdFwiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtmb3IoKHI9ZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKSk/cj1yLnJlcGxhY2UoX3QseXQpOmUuc2V0QXR0cmlidXRlKFwiaWRcIixyPVcpLG89KGM9ayh0KSkubGVuZ3RoO28tLTspY1tvXT1cIiNcIityK1wiIFwiK3UoY1tvXSk7ZD1jLmpvaW4oXCIsXCIpLHA9bXQudGVzdCh0KSYmaChlLnBhcmVudE5vZGUpfHxlfWlmKGQpdHJ5e3JldHVybiBHLmFwcGx5KGkscC5xdWVyeVNlbGVjdG9yQWxsKGQpKSxpfWNhdGNoKHQpe31maW5hbGx5e3I9PT1XJiZlLnJlbW92ZUF0dHJpYnV0ZShcImlkXCIpfX19cmV0dXJuIEQodC5yZXBsYWNlKG90LFwiJDFcIiksZSxpLG4pfWZ1bmN0aW9uIGkoKXt2YXIgdD1bXTtyZXR1cm4gZnVuY3Rpb24gZShpLG4pe3JldHVybiB0LnB1c2goaStcIiBcIik+dy5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbdC5zaGlmdCgpXSxlW2krXCIgXCJdPW59fWZ1bmN0aW9uIG4odCl7cmV0dXJuIHRbV109ITAsdH1mdW5jdGlvbiBzKHQpe3ZhciBlPU0uY3JlYXRlRWxlbWVudChcImZpZWxkc2V0XCIpO3RyeXtyZXR1cm4hIXQoZSl9Y2F0Y2godCl7cmV0dXJuITF9ZmluYWxseXtlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxlPW51bGx9fWZ1bmN0aW9uIG8odCxlKXtmb3IodmFyIGk9dC5zcGxpdChcInxcIiksbj1pLmxlbmd0aDtuLS07KXcuYXR0ckhhbmRsZVtpW25dXT1lfWZ1bmN0aW9uIGEodCxlKXt2YXIgaT1lJiZ0LG49aSYmMT09PXQubm9kZVR5cGUmJjE9PT1lLm5vZGVUeXBlJiZ0LnNvdXJjZUluZGV4LWUuc291cmNlSW5kZXg7aWYobilyZXR1cm4gbjtpZihpKWZvcig7aT1pLm5leHRTaWJsaW5nOylpZihpPT09ZSlyZXR1cm4tMTtyZXR1cm4gdD8xOi0xfWZ1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVyblwiZm9ybVwiaW4gZT9lLnBhcmVudE5vZGUmJiExPT09ZS5kaXNhYmxlZD9cImxhYmVsXCJpbiBlP1wibGFiZWxcImluIGUucGFyZW50Tm9kZT9lLnBhcmVudE5vZGUuZGlzYWJsZWQ9PT10OmUuZGlzYWJsZWQ9PT10OmUuaXNEaXNhYmxlZD09PXR8fGUuaXNEaXNhYmxlZCE9PSF0JiZ4dChlKT09PXQ6ZS5kaXNhYmxlZD09PXQ6XCJsYWJlbFwiaW4gZSYmZS5kaXNhYmxlZD09PXR9fWZ1bmN0aW9uIGwodCl7cmV0dXJuIG4oZnVuY3Rpb24oZSl7cmV0dXJuIGU9K2UsbihmdW5jdGlvbihpLG4pe2Zvcih2YXIgcyxvPXQoW10saS5sZW5ndGgsZSksYT1vLmxlbmd0aDthLS07KWlbcz1vW2FdXSYmKGlbc109IShuW3NdPWlbc10pKX0pfSl9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gdCYmdm9pZCAwIT09dC5nZXRFbGVtZW50c0J5VGFnTmFtZSYmdH1mdW5jdGlvbiBjKCl7fWZ1bmN0aW9uIHUodCl7Zm9yKHZhciBlPTAsaT10Lmxlbmd0aCxuPVwiXCI7ZTxpO2UrKyluKz10W2VdLnZhbHVlO3JldHVybiBufWZ1bmN0aW9uIGQodCxlLGkpe3ZhciBuPWUuZGlyLHM9ZS5uZXh0LG89c3x8bixhPWkmJlwicGFyZW50Tm9kZVwiPT09byxyPWorKztyZXR1cm4gZS5maXJzdD9mdW5jdGlvbihlLGkscyl7Zm9yKDtlPWVbbl07KWlmKDE9PT1lLm5vZGVUeXBlfHxhKXJldHVybiB0KGUsaSxzKTtyZXR1cm4hMX06ZnVuY3Rpb24oZSxpLGwpe3ZhciBoLGMsdSxkPVskLHJdO2lmKGwpe2Zvcig7ZT1lW25dOylpZigoMT09PWUubm9kZVR5cGV8fGEpJiZ0KGUsaSxsKSlyZXR1cm4hMH1lbHNlIGZvcig7ZT1lW25dOylpZigxPT09ZS5ub2RlVHlwZXx8YSlpZihjPSh1PWVbV118fChlW1ddPXt9KSlbZS51bmlxdWVJRF18fCh1W2UudW5pcXVlSURdPXt9KSxzJiZzPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKWU9ZVtuXXx8ZTtlbHNle2lmKChoPWNbb10pJiZoWzBdPT09JCYmaFsxXT09PXIpcmV0dXJuIGRbMl09aFsyXTtpZihjW29dPWQsZFsyXT10KGUsaSxsKSlyZXR1cm4hMH1yZXR1cm4hMX19ZnVuY3Rpb24gcCh0KXtyZXR1cm4gdC5sZW5ndGg+MT9mdW5jdGlvbihlLGksbil7Zm9yKHZhciBzPXQubGVuZ3RoO3MtLTspaWYoIXRbc10oZSxpLG4pKXJldHVybiExO3JldHVybiEwfTp0WzBdfWZ1bmN0aW9uIGYodCxpLG4pe2Zvcih2YXIgcz0wLG89aS5sZW5ndGg7czxvO3MrKyllKHQsaVtzXSxuKTtyZXR1cm4gbn1mdW5jdGlvbiBnKHQsZSxpLG4scyl7Zm9yKHZhciBvLGE9W10scj0wLGw9dC5sZW5ndGgsaD1udWxsIT1lO3I8bDtyKyspKG89dFtyXSkmJihpJiYhaShvLG4scyl8fChhLnB1c2gobyksaCYmZS5wdXNoKHIpKSk7cmV0dXJuIGF9ZnVuY3Rpb24gbSh0LGUsaSxzLG8sYSl7cmV0dXJuIHMmJiFzW1ddJiYocz1tKHMpKSxvJiYhb1tXXSYmKG89bShvLGEpKSxuKGZ1bmN0aW9uKG4sYSxyLGwpe3ZhciBoLGMsdSxkPVtdLHA9W10sbT1hLmxlbmd0aCx2PW58fGYoZXx8XCIqXCIsci5ub2RlVHlwZT9bcl06cixbXSksYj0hdHx8IW4mJmU/djpnKHYsZCx0LHIsbCksXz1pP298fChuP3Q6bXx8cyk/W106YTpiO2lmKGkmJmkoYixfLHIsbCkscylmb3IoaD1nKF8scCkscyhoLFtdLHIsbCksYz1oLmxlbmd0aDtjLS07KSh1PWhbY10pJiYoX1twW2NdXT0hKGJbcFtjXV09dSkpO2lmKG4pe2lmKG98fHQpe2lmKG8pe2ZvcihoPVtdLGM9Xy5sZW5ndGg7Yy0tOykodT1fW2NdKSYmaC5wdXNoKGJbY109dSk7byhudWxsLF89W10saCxsKX1mb3IoYz1fLmxlbmd0aDtjLS07KSh1PV9bY10pJiYoaD1vP0oobix1KTpkW2NdKT4tMSYmKG5baF09IShhW2hdPXUpKX19ZWxzZSBfPWcoXz09PWE/Xy5zcGxpY2UobSxfLmxlbmd0aCk6Xyksbz9vKG51bGwsYSxfLGwpOkcuYXBwbHkoYSxfKX0pfWZ1bmN0aW9uIHYodCl7Zm9yKHZhciBlLGksbixzPXQubGVuZ3RoLG89dy5yZWxhdGl2ZVt0WzBdLnR5cGVdLGE9b3x8dy5yZWxhdGl2ZVtcIiBcIl0scj1vPzE6MCxsPWQoZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lfSxhLCEwKSxoPWQoZnVuY3Rpb24odCl7cmV0dXJuIEooZSx0KT4tMX0sYSwhMCksYz1bZnVuY3Rpb24odCxpLG4pe3ZhciBzPSFvJiYobnx8aSE9PVMpfHwoKGU9aSkubm9kZVR5cGU/bCh0LGksbik6aCh0LGksbikpO3JldHVybiBlPW51bGwsc31dO3I8cztyKyspaWYoaT13LnJlbGF0aXZlW3Rbcl0udHlwZV0pYz1bZChwKGMpLGkpXTtlbHNle2lmKChpPXcuZmlsdGVyW3Rbcl0udHlwZV0uYXBwbHkobnVsbCx0W3JdLm1hdGNoZXMpKVtXXSl7Zm9yKG49KytyO248cyYmIXcucmVsYXRpdmVbdFtuXS50eXBlXTtuKyspO3JldHVybiBtKHI+MSYmcChjKSxyPjEmJnUodC5zbGljZSgwLHItMSkuY29uY2F0KHt2YWx1ZTpcIiBcIj09PXRbci0yXS50eXBlP1wiKlwiOlwiXCJ9KSkucmVwbGFjZShvdCxcIiQxXCIpLGkscjxuJiZ2KHQuc2xpY2UocixuKSksbjxzJiZ2KHQ9dC5zbGljZShuKSksbjxzJiZ1KHQpKX1jLnB1c2goaSl9cmV0dXJuIHAoYyl9ZnVuY3Rpb24gYih0LGkpe3ZhciBzPWkubGVuZ3RoPjAsbz10Lmxlbmd0aD4wLGE9ZnVuY3Rpb24obixhLHIsbCxoKXt2YXIgYyx1LGQscD0wLGY9XCIwXCIsbT1uJiZbXSx2PVtdLGI9UyxfPW58fG8mJncuZmluZC5UQUcoXCIqXCIsaCkseT0kKz1udWxsPT1iPzE6TWF0aC5yYW5kb20oKXx8LjEseD1fLmxlbmd0aDtmb3IoaCYmKFM9YT09PU18fGF8fGgpO2YhPT14JiZudWxsIT0oYz1fW2ZdKTtmKyspe2lmKG8mJmMpe2Zvcih1PTAsYXx8Yy5vd25lckRvY3VtZW50PT09TXx8KEUoYykscj0hTyk7ZD10W3UrK107KWlmKGQoYyxhfHxNLHIpKXtsLnB1c2goYyk7YnJlYWt9aCYmKCQ9eSl9cyYmKChjPSFkJiZjKSYmcC0tLG4mJm0ucHVzaChjKSl9aWYocCs9ZixzJiZmIT09cCl7Zm9yKHU9MDtkPWlbdSsrXTspZChtLHYsYSxyKTtpZihuKXtpZihwPjApZm9yKDtmLS07KW1bZl18fHZbZl18fCh2W2ZdPUsuY2FsbChsKSk7dj1nKHYpfUcuYXBwbHkobCx2KSxoJiYhbiYmdi5sZW5ndGg+MCYmcCtpLmxlbmd0aD4xJiZlLnVuaXF1ZVNvcnQobCl9cmV0dXJuIGgmJigkPXksUz1iKSxtfTtyZXR1cm4gcz9uKGEpOmF9dmFyIF8seSx3LHgsQyxrLFQsRCxTLEksUCxFLE0sQSxPLE4sSCx6LEwsVz1cInNpenpsZVwiKzEqbmV3IERhdGUsUj10LmRvY3VtZW50LCQ9MCxqPTAsRj1pKCksQj1pKCkscT1pKCksVT1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZSYmKFA9ITApLDB9LFk9e30uaGFzT3duUHJvcGVydHksVj1bXSxLPVYucG9wLFg9Vi5wdXNoLEc9Vi5wdXNoLFE9Vi5zbGljZSxKPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTAsbj10Lmxlbmd0aDtpPG47aSsrKWlmKHRbaV09PT1lKXJldHVybiBpO3JldHVybi0xfSxaPVwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIix0dD1cIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsZXQ9XCIoPzpcXFxcXFxcXC58W1xcXFx3LV18W15cXDAtXFxcXHhhMF0pK1wiLGl0PVwiXFxcXFtcIit0dCtcIiooXCIrZXQrXCIpKD86XCIrdHQrXCIqKFsqXiR8IX5dPz0pXCIrdHQrXCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIitldCtcIikpfClcIit0dCtcIipcXFxcXVwiLG50PVwiOihcIitldCtcIikoPzpcXFxcKCgoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXwoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIraXQrXCIpKil8LiopXFxcXCl8KVwiLHN0PW5ldyBSZWdFeHAodHQrXCIrXCIsXCJnXCIpLG90PW5ldyBSZWdFeHAoXCJeXCIrdHQrXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiK3R0K1wiKyRcIixcImdcIiksYXQ9bmV3IFJlZ0V4cChcIl5cIit0dCtcIiosXCIrdHQrXCIqXCIpLHJ0PW5ldyBSZWdFeHAoXCJeXCIrdHQrXCIqKFs+K35dfFwiK3R0K1wiKVwiK3R0K1wiKlwiKSxsdD1uZXcgUmVnRXhwKFwiPVwiK3R0K1wiKihbXlxcXFxdJ1xcXCJdKj8pXCIrdHQrXCIqXFxcXF1cIixcImdcIiksaHQ9bmV3IFJlZ0V4cChudCksY3Q9bmV3IFJlZ0V4cChcIl5cIitldCtcIiRcIiksdXQ9e0lEOm5ldyBSZWdFeHAoXCJeIyhcIitldCtcIilcIiksQ0xBU1M6bmV3IFJlZ0V4cChcIl5cXFxcLihcIitldCtcIilcIiksVEFHOm5ldyBSZWdFeHAoXCJeKFwiK2V0K1wifFsqXSlcIiksQVRUUjpuZXcgUmVnRXhwKFwiXlwiK2l0KSxQU0VVRE86bmV3IFJlZ0V4cChcIl5cIitudCksQ0hJTEQ6bmV3IFJlZ0V4cChcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIrdHQrXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIit0dCtcIiooPzooWystXXwpXCIrdHQrXCIqKFxcXFxkKyl8KSlcIit0dCtcIipcXFxcKXwpXCIsXCJpXCIpLGJvb2w6bmV3IFJlZ0V4cChcIl4oPzpcIitaK1wiKSRcIixcImlcIiksbmVlZHNDb250ZXh0Om5ldyBSZWdFeHAoXCJeXCIrdHQrXCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiK3R0K1wiKigoPzotXFxcXGQpP1xcXFxkKilcIit0dCtcIipcXFxcKXwpKD89W14tXXwkKVwiLFwiaVwiKX0sZHQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxwdD0vXmhcXGQkL2ksZnQ9L15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxndD0vXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxtdD0vWyt+XS8sdnQ9bmV3IFJlZ0V4cChcIlxcXFxcXFxcKFtcXFxcZGEtZl17MSw2fVwiK3R0K1wiP3woXCIrdHQrXCIpfC4pXCIsXCJpZ1wiKSxidD1mdW5jdGlvbih0LGUsaSl7dmFyIG49XCIweFwiK2UtNjU1MzY7cmV0dXJuIG4hPW58fGk/ZTpuPDA/U3RyaW5nLmZyb21DaGFyQ29kZShuKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKG4+PjEwfDU1Mjk2LDEwMjMmbnw1NjMyMCl9LF90PS8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLHl0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU/XCJcXDBcIj09PXQ/XCLvv71cIjp0LnNsaWNlKDAsLTEpK1wiXFxcXFwiK3QuY2hhckNvZGVBdCh0Lmxlbmd0aC0xKS50b1N0cmluZygxNikrXCIgXCI6XCJcXFxcXCIrdH0sd3Q9ZnVuY3Rpb24oKXtFKCl9LHh0PWQoZnVuY3Rpb24odCl7cmV0dXJuITA9PT10LmRpc2FibGVkJiYoXCJmb3JtXCJpbiB0fHxcImxhYmVsXCJpbiB0KX0se2RpcjpcInBhcmVudE5vZGVcIixuZXh0OlwibGVnZW5kXCJ9KTt0cnl7Ry5hcHBseShWPVEuY2FsbChSLmNoaWxkTm9kZXMpLFIuY2hpbGROb2RlcyksVltSLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaCh0KXtHPXthcHBseTpWLmxlbmd0aD9mdW5jdGlvbih0LGUpe1guYXBwbHkodCxRLmNhbGwoZSkpfTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT10Lmxlbmd0aCxuPTA7dFtpKytdPWVbbisrXTspO3QubGVuZ3RoPWktMX19fWZvcihfIGluIHk9ZS5zdXBwb3J0PXt9LEM9ZS5pc1hNTD1mdW5jdGlvbih0KXt2YXIgZT10JiYodC5vd25lckRvY3VtZW50fHx0KS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuISFlJiZcIkhUTUxcIiE9PWUubm9kZU5hbWV9LEU9ZS5zZXREb2N1bWVudD1mdW5jdGlvbih0KXt2YXIgZSxpLG49dD90Lm93bmVyRG9jdW1lbnR8fHQ6UjtyZXR1cm4gbiE9PU0mJjk9PT1uLm5vZGVUeXBlJiZuLmRvY3VtZW50RWxlbWVudD8oQT0oTT1uKS5kb2N1bWVudEVsZW1lbnQsTz0hQyhNKSxcblIhPT1NJiYoaT1NLmRlZmF1bHRWaWV3KSYmaS50b3AhPT1pJiYoaS5hZGRFdmVudExpc3RlbmVyP2kuYWRkRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLHd0LCExKTppLmF0dGFjaEV2ZW50JiZpLmF0dGFjaEV2ZW50KFwib251bmxvYWRcIix3dCkpLHkuYXR0cmlidXRlcz1zKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTmFtZT1cImlcIiwhdC5nZXRBdHRyaWJ1dGUoXCJjbGFzc05hbWVcIil9KSx5LmdldEVsZW1lbnRzQnlUYWdOYW1lPXMoZnVuY3Rpb24odCl7cmV0dXJuIHQuYXBwZW5kQ2hpbGQoTS5jcmVhdGVDb21tZW50KFwiXCIpKSwhdC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikubGVuZ3RofSkseS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lPWZ0LnRlc3QoTS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKSx5LmdldEJ5SWQ9cyhmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBlbmRDaGlsZCh0KS5pZD1XLCFNLmdldEVsZW1lbnRzQnlOYW1lfHwhTS5nZXRFbGVtZW50c0J5TmFtZShXKS5sZW5ndGh9KSx5LmdldEJ5SWQ/KHcuZmlsdGVyLklEPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVwbGFjZSh2dCxidCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiB0LmdldEF0dHJpYnV0ZShcImlkXCIpPT09ZX19LHcuZmluZC5JRD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUuZ2V0RWxlbWVudEJ5SWQmJk8pe3ZhciBpPWUuZ2V0RWxlbWVudEJ5SWQodCk7cmV0dXJuIGk/W2ldOltdfX0pOih3LmZpbHRlci5JRD1mdW5jdGlvbih0KXt2YXIgZT10LnJlcGxhY2UodnQsYnQpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgaT12b2lkIDAhPT10LmdldEF0dHJpYnV0ZU5vZGUmJnQuZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpO3JldHVybiBpJiZpLnZhbHVlPT09ZX19LHcuZmluZC5JRD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUuZ2V0RWxlbWVudEJ5SWQmJk8pe3ZhciBpLG4scyxvPWUuZ2V0RWxlbWVudEJ5SWQodCk7aWYobyl7aWYoKGk9by5nZXRBdHRyaWJ1dGVOb2RlKFwiaWRcIikpJiZpLnZhbHVlPT09dClyZXR1cm5bb107Zm9yKHM9ZS5nZXRFbGVtZW50c0J5TmFtZSh0KSxuPTA7bz1zW24rK107KWlmKChpPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmaS52YWx1ZT09PXQpcmV0dXJuW29dfXJldHVybltdfX0pLHcuZmluZC5UQUc9eS5nZXRFbGVtZW50c0J5VGFnTmFtZT9mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDAhPT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCk6eS5xc2E/ZS5xdWVyeVNlbGVjdG9yQWxsKHQpOnZvaWQgMH06ZnVuY3Rpb24odCxlKXt2YXIgaSxuPVtdLHM9MCxvPWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUodCk7aWYoXCIqXCI9PT10KXtmb3IoO2k9b1tzKytdOykxPT09aS5ub2RlVHlwZSYmbi5wdXNoKGkpO3JldHVybiBufXJldHVybiBvfSx3LmZpbmQuQ0xBU1M9eS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmTylyZXR1cm4gZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHQpfSxIPVtdLE49W10sKHkucXNhPWZ0LnRlc3QoTS5xdWVyeVNlbGVjdG9yQWxsKSkmJihzKGZ1bmN0aW9uKHQpe0EuYXBwZW5kQ2hpbGQodCkuaW5uZXJIVE1MPVwiPGEgaWQ9J1wiK1crXCInPjwvYT48c2VsZWN0IGlkPSdcIitXK1wiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCIsdC5xdWVyeVNlbGVjdG9yQWxsKFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIikubGVuZ3RoJiZOLnB1c2goXCJbKl4kXT1cIit0dCtcIiooPzonJ3xcXFwiXFxcIilcIiksdC5xdWVyeVNlbGVjdG9yQWxsKFwiW3NlbGVjdGVkXVwiKS5sZW5ndGh8fE4ucHVzaChcIlxcXFxbXCIrdHQrXCIqKD86dmFsdWV8XCIrWitcIilcIiksdC5xdWVyeVNlbGVjdG9yQWxsKFwiW2lkfj1cIitXK1wiLV1cIikubGVuZ3RofHxOLnB1c2goXCJ+PVwiKSx0LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6Y2hlY2tlZFwiKS5sZW5ndGh8fE4ucHVzaChcIjpjaGVja2VkXCIpLHQucXVlcnlTZWxlY3RvckFsbChcImEjXCIrVytcIisqXCIpLmxlbmd0aHx8Ti5wdXNoKFwiLiMuK1srfl1cIil9KSxzKGZ1bmN0aW9uKHQpe3QuaW5uZXJIVE1MPVwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT48c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7dmFyIGU9TS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7ZS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsXCJoaWRkZW5cIiksdC5hcHBlbmRDaGlsZChlKS5zZXRBdHRyaWJ1dGUoXCJuYW1lXCIsXCJEXCIpLHQucXVlcnlTZWxlY3RvckFsbChcIltuYW1lPWRdXCIpLmxlbmd0aCYmTi5wdXNoKFwibmFtZVwiK3R0K1wiKlsqXiR8IX5dPz1cIiksMiE9PXQucXVlcnlTZWxlY3RvckFsbChcIjplbmFibGVkXCIpLmxlbmd0aCYmTi5wdXNoKFwiOmVuYWJsZWRcIixcIjpkaXNhYmxlZFwiKSxBLmFwcGVuZENoaWxkKHQpLmRpc2FibGVkPSEwLDIhPT10LnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZGlzYWJsZWRcIikubGVuZ3RoJiZOLnB1c2goXCI6ZW5hYmxlZFwiLFwiOmRpc2FibGVkXCIpLHQucXVlcnlTZWxlY3RvckFsbChcIiosOnhcIiksTi5wdXNoKFwiLC4qOlwiKX0pKSwoeS5tYXRjaGVzU2VsZWN0b3I9ZnQudGVzdCh6PUEubWF0Y2hlc3x8QS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fEEubW96TWF0Y2hlc1NlbGVjdG9yfHxBLm9NYXRjaGVzU2VsZWN0b3J8fEEubXNNYXRjaGVzU2VsZWN0b3IpKSYmcyhmdW5jdGlvbih0KXt5LmRpc2Nvbm5lY3RlZE1hdGNoPXouY2FsbCh0LFwiKlwiKSx6LmNhbGwodCxcIltzIT0nJ106eFwiKSxILnB1c2goXCIhPVwiLG50KX0pLE49Ti5sZW5ndGgmJm5ldyBSZWdFeHAoTi5qb2luKFwifFwiKSksSD1ILmxlbmd0aCYmbmV3IFJlZ0V4cChILmpvaW4oXCJ8XCIpKSxlPWZ0LnRlc3QoQS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiksTD1lfHxmdC50ZXN0KEEuY29udGFpbnMpP2Z1bmN0aW9uKHQsZSl7dmFyIGk9OT09PXQubm9kZVR5cGU/dC5kb2N1bWVudEVsZW1lbnQ6dCxuPWUmJmUucGFyZW50Tm9kZTtyZXR1cm4gdD09PW58fCEoIW58fDEhPT1uLm5vZGVUeXBlfHwhKGkuY29udGFpbnM/aS5jb250YWlucyhuKTp0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYxNiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKG4pKSl9OmZ1bmN0aW9uKHQsZSl7aWYoZSlmb3IoO2U9ZS5wYXJlbnROb2RlOylpZihlPT09dClyZXR1cm4hMDtyZXR1cm4hMX0sVT1lP2Z1bmN0aW9uKHQsZSl7aWYodD09PWUpcmV0dXJuIFA9ITAsMDt2YXIgaT0hdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbi0hZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtyZXR1cm4gaXx8KDEmKGk9KHQub3duZXJEb2N1bWVudHx8dCk9PT0oZS5vd25lckRvY3VtZW50fHxlKT90LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpOjEpfHwheS5zb3J0RGV0YWNoZWQmJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCk9PT1pP3Q9PT1NfHx0Lm93bmVyRG9jdW1lbnQ9PT1SJiZMKFIsdCk/LTE6ZT09PU18fGUub3duZXJEb2N1bWVudD09PVImJkwoUixlKT8xOkk/SihJLHQpLUooSSxlKTowOjQmaT8tMToxKX06ZnVuY3Rpb24odCxlKXtpZih0PT09ZSlyZXR1cm4gUD0hMCwwO3ZhciBpLG49MCxzPXQucGFyZW50Tm9kZSxvPWUucGFyZW50Tm9kZSxyPVt0XSxsPVtlXTtpZighc3x8IW8pcmV0dXJuIHQ9PT1NPy0xOmU9PT1NPzE6cz8tMTpvPzE6ST9KKEksdCktSihJLGUpOjA7aWYocz09PW8pcmV0dXJuIGEodCxlKTtmb3IoaT10O2k9aS5wYXJlbnROb2RlOylyLnVuc2hpZnQoaSk7Zm9yKGk9ZTtpPWkucGFyZW50Tm9kZTspbC51bnNoaWZ0KGkpO2Zvcig7cltuXT09PWxbbl07KW4rKztyZXR1cm4gbj9hKHJbbl0sbFtuXSk6cltuXT09PVI/LTE6bFtuXT09PVI/MTowfSxNKTpNfSxlLm1hdGNoZXM9ZnVuY3Rpb24odCxpKXtyZXR1cm4gZSh0LG51bGwsbnVsbCxpKX0sZS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24odCxpKXtpZigodC5vd25lckRvY3VtZW50fHx0KSE9PU0mJkUodCksaT1pLnJlcGxhY2UobHQsXCI9JyQxJ11cIikseS5tYXRjaGVzU2VsZWN0b3ImJk8mJiFxW2krXCIgXCJdJiYoIUh8fCFILnRlc3QoaSkpJiYoIU58fCFOLnRlc3QoaSkpKXRyeXt2YXIgbj16LmNhbGwodCxpKTtpZihufHx5LmRpc2Nvbm5lY3RlZE1hdGNofHx0LmRvY3VtZW50JiYxMSE9PXQuZG9jdW1lbnQubm9kZVR5cGUpcmV0dXJuIG59Y2F0Y2godCl7fXJldHVybiBlKGksTSxudWxsLFt0XSkubGVuZ3RoPjB9LGUuY29udGFpbnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4odC5vd25lckRvY3VtZW50fHx0KSE9PU0mJkUodCksTCh0LGUpfSxlLmF0dHI9ZnVuY3Rpb24odCxlKXsodC5vd25lckRvY3VtZW50fHx0KSE9PU0mJkUodCk7dmFyIGk9dy5hdHRySGFuZGxlW2UudG9Mb3dlckNhc2UoKV0sbj1pJiZZLmNhbGwody5hdHRySGFuZGxlLGUudG9Mb3dlckNhc2UoKSk/aSh0LGUsIU8pOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09bj9uOnkuYXR0cmlidXRlc3x8IU8/dC5nZXRBdHRyaWJ1dGUoZSk6KG49dC5nZXRBdHRyaWJ1dGVOb2RlKGUpKSYmbi5zcGVjaWZpZWQ/bi52YWx1ZTpudWxsfSxlLmVzY2FwZT1mdW5jdGlvbih0KXtyZXR1cm4odCtcIlwiKS5yZXBsYWNlKF90LHl0KX0sZS5lcnJvcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIit0KX0sZS51bmlxdWVTb3J0PWZ1bmN0aW9uKHQpe3ZhciBlLGk9W10sbj0wLHM9MDtpZihQPSF5LmRldGVjdER1cGxpY2F0ZXMsST0heS5zb3J0U3RhYmxlJiZ0LnNsaWNlKDApLHQuc29ydChVKSxQKXtmb3IoO2U9dFtzKytdOyllPT09dFtzXSYmKG49aS5wdXNoKHMpKTtmb3IoO24tLTspdC5zcGxpY2UoaVtuXSwxKX1yZXR1cm4gST1udWxsLHR9LHg9ZS5nZXRUZXh0PWZ1bmN0aW9uKHQpe3ZhciBlLGk9XCJcIixuPTAscz10Lm5vZGVUeXBlO2lmKHMpe2lmKDE9PT1zfHw5PT09c3x8MTE9PT1zKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdC50ZXh0Q29udGVudClyZXR1cm4gdC50ZXh0Q29udGVudDtmb3IodD10LmZpcnN0Q2hpbGQ7dDt0PXQubmV4dFNpYmxpbmcpaSs9eCh0KX1lbHNlIGlmKDM9PT1zfHw0PT09cylyZXR1cm4gdC5ub2RlVmFsdWV9ZWxzZSBmb3IoO2U9dFtuKytdOylpKz14KGUpO3JldHVybiBpfSwodz1lLnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOm4sbWF0Y2g6dXQsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOntcIj5cIjp7ZGlyOlwicGFyZW50Tm9kZVwiLGZpcnN0OiEwfSxcIiBcIjp7ZGlyOlwicGFyZW50Tm9kZVwifSxcIitcIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCIsZmlyc3Q6ITB9LFwiflwiOntkaXI6XCJwcmV2aW91c1NpYmxpbmdcIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbih0KXtyZXR1cm4gdFsxXT10WzFdLnJlcGxhY2UodnQsYnQpLHRbM109KHRbM118fHRbNF18fHRbNV18fFwiXCIpLnJlcGxhY2UodnQsYnQpLFwifj1cIj09PXRbMl0mJih0WzNdPVwiIFwiK3RbM10rXCIgXCIpLHQuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRbMV09dFsxXS50b0xvd2VyQ2FzZSgpLFwibnRoXCI9PT10WzFdLnNsaWNlKDAsMyk/KHRbM118fGUuZXJyb3IodFswXSksdFs0XT0rKHRbNF0/dFs1XSsodFs2XXx8MSk6MiooXCJldmVuXCI9PT10WzNdfHxcIm9kZFwiPT09dFszXSkpLHRbNV09Kyh0WzddK3RbOF18fFwib2RkXCI9PT10WzNdKSk6dFszXSYmZS5lcnJvcih0WzBdKSx0fSxQU0VVRE86ZnVuY3Rpb24odCl7dmFyIGUsaT0hdFs2XSYmdFsyXTtyZXR1cm4gdXQuQ0hJTEQudGVzdCh0WzBdKT9udWxsOih0WzNdP3RbMl09dFs0XXx8dFs1XXx8XCJcIjppJiZodC50ZXN0KGkpJiYoZT1rKGksITApKSYmKGU9aS5pbmRleE9mKFwiKVwiLGkubGVuZ3RoLWUpLWkubGVuZ3RoKSYmKHRbMF09dFswXS5zbGljZSgwLGUpLHRbMl09aS5zbGljZSgwLGUpKSx0LnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24odCl7dmFyIGU9dC5yZXBsYWNlKHZ0LGJ0KS50b0xvd2VyQ2FzZSgpO3JldHVyblwiKlwiPT09dD9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZX19LENMQVNTOmZ1bmN0aW9uKHQpe3ZhciBlPUZbdCtcIiBcIl07cmV0dXJuIGV8fChlPW5ldyBSZWdFeHAoXCIoXnxcIit0dCtcIilcIit0K1wiKFwiK3R0K1wifCQpXCIpKSYmRih0LGZ1bmN0aW9uKHQpe3JldHVybiBlLnRlc3QoXCJzdHJpbmdcIj09dHlwZW9mIHQuY2xhc3NOYW1lJiZ0LmNsYXNzTmFtZXx8dm9pZCAwIT09dC5nZXRBdHRyaWJ1dGUmJnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpfSl9LEFUVFI6ZnVuY3Rpb24odCxpLG4pe3JldHVybiBmdW5jdGlvbihzKXt2YXIgbz1lLmF0dHIocyx0KTtyZXR1cm4gbnVsbD09bz9cIiE9XCI9PT1pOiFpfHwobys9XCJcIixcIj1cIj09PWk/bz09PW46XCIhPVwiPT09aT9vIT09bjpcIl49XCI9PT1pP24mJjA9PT1vLmluZGV4T2Yobik6XCIqPVwiPT09aT9uJiZvLmluZGV4T2Yobik+LTE6XCIkPVwiPT09aT9uJiZvLnNsaWNlKC1uLmxlbmd0aCk9PT1uOlwifj1cIj09PWk/KFwiIFwiK28ucmVwbGFjZShzdCxcIiBcIikrXCIgXCIpLmluZGV4T2Yobik+LTE6XCJ8PVwiPT09aSYmKG89PT1ufHxvLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uK1wiLVwiKSl9fSxDSElMRDpmdW5jdGlvbih0LGUsaSxuLHMpe3ZhciBvPVwibnRoXCIhPT10LnNsaWNlKDAsMyksYT1cImxhc3RcIiE9PXQuc2xpY2UoLTQpLHI9XCJvZi10eXBlXCI9PT1lO3JldHVybiAxPT09biYmMD09PXM/ZnVuY3Rpb24odCl7cmV0dXJuISF0LnBhcmVudE5vZGV9OmZ1bmN0aW9uKGUsaSxsKXt2YXIgaCxjLHUsZCxwLGYsZz1vIT09YT9cIm5leHRTaWJsaW5nXCI6XCJwcmV2aW91c1NpYmxpbmdcIixtPWUucGFyZW50Tm9kZSx2PXImJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxiPSFsJiYhcixfPSExO2lmKG0pe2lmKG8pe2Zvcig7Zzspe2ZvcihkPWU7ZD1kW2ddOylpZihyP2Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXY6MT09PWQubm9kZVR5cGUpcmV0dXJuITE7Zj1nPVwib25seVwiPT09dCYmIWYmJlwibmV4dFNpYmxpbmdcIn1yZXR1cm4hMH1pZihmPVthP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0sYSYmYil7Zm9yKF89KHA9KGg9KGM9KHU9KGQ9bSlbV118fChkW1ddPXt9KSlbZC51bmlxdWVJRF18fCh1W2QudW5pcXVlSURdPXt9KSlbdF18fFtdKVswXT09PSQmJmhbMV0pJiZoWzJdLGQ9cCYmbS5jaGlsZE5vZGVzW3BdO2Q9KytwJiZkJiZkW2ddfHwoXz1wPTApfHxmLnBvcCgpOylpZigxPT09ZC5ub2RlVHlwZSYmKytfJiZkPT09ZSl7Y1t0XT1bJCxwLF9dO2JyZWFrfX1lbHNlIGlmKGImJihfPXA9KGg9KGM9KHU9KGQ9ZSlbV118fChkW1ddPXt9KSlbZC51bmlxdWVJRF18fCh1W2QudW5pcXVlSURdPXt9KSlbdF18fFtdKVswXT09PSQmJmhbMV0pLCExPT09Xylmb3IoOyhkPSsrcCYmZCYmZFtnXXx8KF89cD0wKXx8Zi5wb3AoKSkmJigocj9kLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT12OjEhPT1kLm5vZGVUeXBlKXx8ISsrX3x8KGImJigoYz0odT1kW1ddfHwoZFtXXT17fSkpW2QudW5pcXVlSURdfHwodVtkLnVuaXF1ZUlEXT17fSkpW3RdPVskLF9dKSxkIT09ZSkpOyk7cmV0dXJuKF8tPXMpPT09bnx8XyVuPT0wJiZfL24+PTB9fX0sUFNFVURPOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbz13LnBzZXVkb3NbdF18fHcuc2V0RmlsdGVyc1t0LnRvTG93ZXJDYXNlKCldfHxlLmVycm9yKFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIit0KTtyZXR1cm4gb1tXXT9vKGkpOm8ubGVuZ3RoPjE/KHM9W3QsdCxcIlwiLGldLHcuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSh0LnRvTG93ZXJDYXNlKCkpP24oZnVuY3Rpb24odCxlKXtmb3IodmFyIG4scz1vKHQsaSksYT1zLmxlbmd0aDthLS07KXRbbj1KKHQsc1thXSldPSEoZVtuXT1zW2FdKX0pOmZ1bmN0aW9uKHQpe3JldHVybiBvKHQsMCxzKX0pOm99fSxwc2V1ZG9zOntub3Q6bihmdW5jdGlvbih0KXt2YXIgZT1bXSxpPVtdLHM9VCh0LnJlcGxhY2Uob3QsXCIkMVwiKSk7cmV0dXJuIHNbV10/bihmdW5jdGlvbih0LGUsaSxuKXtmb3IodmFyIG8sYT1zKHQsbnVsbCxuLFtdKSxyPXQubGVuZ3RoO3ItLTspKG89YVtyXSkmJih0W3JdPSEoZVtyXT1vKSl9KTpmdW5jdGlvbih0LG4sbyl7cmV0dXJuIGVbMF09dCxzKGUsbnVsbCxvLGkpLGVbMF09bnVsbCwhaS5wb3AoKX19KSxoYXM6bihmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGUodCxpKS5sZW5ndGg+MH19KSxjb250YWluczpuKGZ1bmN0aW9uKHQpe3JldHVybiB0PXQucmVwbGFjZSh2dCxidCksZnVuY3Rpb24oZSl7cmV0dXJuKGUudGV4dENvbnRlbnR8fGUuaW5uZXJUZXh0fHx4KGUpKS5pbmRleE9mKHQpPi0xfX0pLGxhbmc6bihmdW5jdGlvbih0KXtyZXR1cm4gY3QudGVzdCh0fHxcIlwiKXx8ZS5lcnJvcihcInVuc3VwcG9ydGVkIGxhbmc6IFwiK3QpLHQ9dC5yZXBsYWNlKHZ0LGJ0KS50b0xvd2VyQ2FzZSgpLGZ1bmN0aW9uKGUpe3ZhciBpO2Rve2lmKGk9Tz9lLmxhbmc6ZS5nZXRBdHRyaWJ1dGUoXCJ4bWw6bGFuZ1wiKXx8ZS5nZXRBdHRyaWJ1dGUoXCJsYW5nXCIpKXJldHVybihpPWkudG9Mb3dlckNhc2UoKSk9PT10fHwwPT09aS5pbmRleE9mKHQrXCItXCIpfXdoaWxlKChlPWUucGFyZW50Tm9kZSkmJjE9PT1lLm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24oZSl7dmFyIGk9dC5sb2NhdGlvbiYmdC5sb2NhdGlvbi5oYXNoO3JldHVybiBpJiZpLnNsaWNlKDEpPT09ZS5pZH0scm9vdDpmdW5jdGlvbih0KXtyZXR1cm4gdD09PUF9LGZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiB0PT09TS5hY3RpdmVFbGVtZW50JiYoIU0uaGFzRm9jdXN8fE0uaGFzRm9jdXMoKSkmJiEhKHQudHlwZXx8dC5ocmVmfHx+dC50YWJJbmRleCl9LGVuYWJsZWQ6cighMSksZGlzYWJsZWQ6cighMCksY2hlY2tlZDpmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09ZSYmISF0LmNoZWNrZWR8fFwib3B0aW9uXCI9PT1lJiYhIXQuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKHQpe3JldHVybiB0LnBhcmVudE5vZGUmJnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCEwPT09dC5zZWxlY3RlZH0sZW1wdHk6ZnVuY3Rpb24odCl7Zm9yKHQ9dC5maXJzdENoaWxkO3Q7dD10Lm5leHRTaWJsaW5nKWlmKHQubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKHQpe3JldHVybiF3LnBzZXVkb3MuZW1wdHkodCl9LGhlYWRlcjpmdW5jdGlvbih0KXtyZXR1cm4gcHQudGVzdCh0Lm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGR0LnRlc3QodC5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbih0KXt2YXIgZT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09ZSYmXCJidXR0b25cIj09PXQudHlwZXx8XCJidXR0b25cIj09PWV9LHRleHQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuXCJpbnB1dFwiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZcInRleHRcIj09PXQudHlwZSYmKG51bGw9PShlPXQuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSl8fFwidGV4dFwiPT09ZS50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6bChmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6bChmdW5jdGlvbih0LGUpe3JldHVybltlLTFdfSksZXE6bChmdW5jdGlvbih0LGUsaSl7cmV0dXJuW2k8MD9pK2U6aV19KSxldmVuOmwoZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MDtpPGU7aSs9Mil0LnB1c2goaSk7cmV0dXJuIHR9KSxvZGQ6bChmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0xO2k8ZTtpKz0yKXQucHVzaChpKTtyZXR1cm4gdH0pLGx0OmwoZnVuY3Rpb24odCxlLGkpe2Zvcih2YXIgbj1pPDA/aStlOmk7LS1uPj0wOyl0LnB1c2gobik7cmV0dXJuIHR9KSxndDpsKGZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG49aTwwP2krZTppOysrbjxlOyl0LnB1c2gobik7cmV0dXJuIHR9KX19KS5wc2V1ZG9zLm50aD13LnBzZXVkb3MuZXEse3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KXcucHNldWRvc1tfXT1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuXCJpbnB1dFwiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlLnR5cGU9PT10fX0oXyk7Zm9yKF8gaW57c3VibWl0OiEwLHJlc2V0OiEwfSl3LnBzZXVkb3NbX109ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oXCJpbnB1dFwiPT09aXx8XCJidXR0b25cIj09PWkpJiZlLnR5cGU9PT10fX0oXyk7cmV0dXJuIGMucHJvdG90eXBlPXcuZmlsdGVycz13LnBzZXVkb3Msdy5zZXRGaWx0ZXJzPW5ldyBjLGs9ZS50b2tlbml6ZT1mdW5jdGlvbih0LGkpe3ZhciBuLHMsbyxhLHIsbCxoLGM9Qlt0K1wiIFwiXTtpZihjKXJldHVybiBpPzA6Yy5zbGljZSgwKTtmb3Iocj10LGw9W10saD13LnByZUZpbHRlcjtyOyl7Zm9yKGEgaW4gbiYmIShzPWF0LmV4ZWMocikpfHwocyYmKHI9ci5zbGljZShzWzBdLmxlbmd0aCl8fHIpLGwucHVzaChvPVtdKSksbj0hMSwocz1ydC5leGVjKHIpKSYmKG49cy5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOnNbMF0ucmVwbGFjZShvdCxcIiBcIil9KSxyPXIuc2xpY2Uobi5sZW5ndGgpKSx3LmZpbHRlcikhKHM9dXRbYV0uZXhlYyhyKSl8fGhbYV0mJiEocz1oW2FdKHMpKXx8KG49cy5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczpzfSkscj1yLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIGk/ci5sZW5ndGg6cj9lLmVycm9yKHQpOkIodCxsKS5zbGljZSgwKX0sVD1lLmNvbXBpbGU9ZnVuY3Rpb24odCxlKXt2YXIgaSxuPVtdLHM9W10sbz1xW3QrXCIgXCJdO2lmKCFvKXtmb3IoZXx8KGU9ayh0KSksaT1lLmxlbmd0aDtpLS07KShvPXYoZVtpXSkpW1ddP24ucHVzaChvKTpzLnB1c2gobyk7KG89cSh0LGIocyxuKSkpLnNlbGVjdG9yPXR9cmV0dXJuIG99LEQ9ZS5zZWxlY3Q9ZnVuY3Rpb24odCxlLGksbil7dmFyIHMsbyxhLHIsbCxjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQsZD0hbiYmayh0PWMuc2VsZWN0b3J8fHQpO2lmKGk9aXx8W10sMT09PWQubGVuZ3RoKXtpZigobz1kWzBdPWRbMF0uc2xpY2UoMCkpLmxlbmd0aD4yJiZcIklEXCI9PT0oYT1vWzBdKS50eXBlJiY5PT09ZS5ub2RlVHlwZSYmTyYmdy5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKGU9KHcuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh2dCxidCksZSl8fFtdKVswXSkpcmV0dXJuIGk7YyYmKGU9ZS5wYXJlbnROb2RlKSx0PXQuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKHM9dXQubmVlZHNDb250ZXh0LnRlc3QodCk/MDpvLmxlbmd0aDtzLS0mJihhPW9bc10sIXcucmVsYXRpdmVbcj1hLnR5cGVdKTspaWYoKGw9dy5maW5kW3JdKSYmKG49bChhLm1hdGNoZXNbMF0ucmVwbGFjZSh2dCxidCksbXQudGVzdChvWzBdLnR5cGUpJiZoKGUucGFyZW50Tm9kZSl8fGUpKSl7aWYoby5zcGxpY2UocywxKSwhKHQ9bi5sZW5ndGgmJnUobykpKXJldHVybiBHLmFwcGx5KGksbiksaTticmVha319cmV0dXJuKGN8fFQodCxkKSkobixlLCFPLGksIWV8fG10LnRlc3QodCkmJmgoZS5wYXJlbnROb2RlKXx8ZSksaX0seS5zb3J0U3RhYmxlPVcuc3BsaXQoXCJcIikuc29ydChVKS5qb2luKFwiXCIpPT09Vyx5LmRldGVjdER1cGxpY2F0ZXM9ISFQLEUoKSx5LnNvcnREZXRhY2hlZD1zKGZ1bmN0aW9uKHQpe3JldHVybiAxJnQuY29tcGFyZURvY3VtZW50UG9zaXRpb24oTS5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikpfSkscyhmdW5jdGlvbih0KXtyZXR1cm4gdC5pbm5lckhUTUw9XCI8YSBocmVmPScjJz48L2E+XCIsXCIjXCI9PT10LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKX0pfHxvKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLGZ1bmN0aW9uKHQsZSxpKXtpZighaSlyZXR1cm4gdC5nZXRBdHRyaWJ1dGUoZSxcInR5cGVcIj09PWUudG9Mb3dlckNhc2UoKT8xOjIpfSkseS5hdHRyaWJ1dGVzJiZzKGZ1bmN0aW9uKHQpe3JldHVybiB0LmlubmVySFRNTD1cIjxpbnB1dC8+XCIsdC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsXCJcIiksXCJcIj09PXQuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKX0pfHxvKFwidmFsdWVcIixmdW5jdGlvbih0LGUsaSl7aWYoIWkmJlwiaW5wdXRcIj09PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gdC5kZWZhdWx0VmFsdWV9KSxzKGZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10LmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpfSl8fG8oWixmdW5jdGlvbih0LGUsaSl7dmFyIG47aWYoIWkpcmV0dXJuITA9PT10W2VdP2UudG9Mb3dlckNhc2UoKToobj10LmdldEF0dHJpYnV0ZU5vZGUoZSkpJiZuLnNwZWNpZmllZD9uLnZhbHVlOm51bGx9KSxlfSh0KTtmdC5maW5kPW10LGZ0LmV4cHI9bXQuc2VsZWN0b3JzLGZ0LmV4cHJbXCI6XCJdPWZ0LmV4cHIucHNldWRvcyxmdC51bmlxdWVTb3J0PWZ0LnVuaXF1ZT1tdC51bmlxdWVTb3J0LGZ0LnRleHQ9bXQuZ2V0VGV4dCxmdC5pc1hNTERvYz1tdC5pc1hNTCxmdC5jb250YWlucz1tdC5jb250YWlucyxmdC5lc2NhcGVTZWxlY3Rvcj1tdC5lc2NhcGU7dmFyIHZ0PWZ1bmN0aW9uKHQsZSxpKXtmb3IodmFyIG49W10scz12b2lkIDAhPT1pOyh0PXRbZV0pJiY5IT09dC5ub2RlVHlwZTspaWYoMT09PXQubm9kZVR5cGUpe2lmKHMmJmZ0KHQpLmlzKGkpKWJyZWFrO24ucHVzaCh0KX1yZXR1cm4gbn0sYnQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9W107dDt0PXQubmV4dFNpYmxpbmcpMT09PXQubm9kZVR5cGUmJnQhPT1lJiZpLnB1c2godCk7cmV0dXJuIGl9LF90PWZ0LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LHl0PS9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pO2Z0LmZpbHRlcj1mdW5jdGlvbih0LGUsaSl7dmFyIG49ZVswXTtyZXR1cm4gaSYmKHQ9XCI6bm90KFwiK3QrXCIpXCIpLDE9PT1lLmxlbmd0aCYmMT09PW4ubm9kZVR5cGU/ZnQuZmluZC5tYXRjaGVzU2VsZWN0b3Iobix0KT9bbl06W106ZnQuZmluZC5tYXRjaGVzKHQsZnQuZ3JlcChlLGZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5ub2RlVHlwZX0pKX0sZnQuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj10aGlzLmxlbmd0aCxzPXRoaXM7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpcmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHQpLmZpbHRlcihmdW5jdGlvbigpe2ZvcihlPTA7ZTxuO2UrKylpZihmdC5jb250YWlucyhzW2VdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihpPXRoaXMucHVzaFN0YWNrKFtdKSxlPTA7ZTxuO2UrKylmdC5maW5kKHQsc1tlXSxpKTtyZXR1cm4gbj4xP2Z0LnVuaXF1ZVNvcnQoaSk6aX0sZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhhKHRoaXMsdHx8W10sITEpKX0sbm90OmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayhhKHRoaXMsdHx8W10sITApKX0saXM6ZnVuY3Rpb24odCl7cmV0dXJuISFhKHRoaXMsXCJzdHJpbmdcIj09dHlwZW9mIHQmJl90LnRlc3QodCk/ZnQodCk6dHx8W10sITEpLmxlbmd0aH19KTt2YXIgd3QseHQ9L14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC87KGZ0LmZuLmluaXQ9ZnVuY3Rpb24odCxlLGkpe3ZhciBuLHM7aWYoIXQpcmV0dXJuIHRoaXM7aWYoaT1pfHx3dCxcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIShuPVwiPFwiPT09dFswXSYmXCI+XCI9PT10W3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aD49Mz9bbnVsbCx0LG51bGxdOnh0LmV4ZWModCkpfHwhblsxXSYmZSlyZXR1cm4hZXx8ZS5qcXVlcnk/KGV8fGkpLmZpbmQodCk6dGhpcy5jb25zdHJ1Y3RvcihlKS5maW5kKHQpO2lmKG5bMV0pe2lmKGU9ZSBpbnN0YW5jZW9mIGZ0P2VbMF06ZSxmdC5tZXJnZSh0aGlzLGZ0LnBhcnNlSFRNTChuWzFdLGUmJmUubm9kZVR5cGU/ZS5vd25lckRvY3VtZW50fHxlOlosITApKSx5dC50ZXN0KG5bMV0pJiZmdC5pc1BsYWluT2JqZWN0KGUpKWZvcihuIGluIGUpdXQodGhpc1tuXSk/dGhpc1tuXShlW25dKTp0aGlzLmF0dHIobixlW25dKTtyZXR1cm4gdGhpc31yZXR1cm4ocz1aLmdldEVsZW1lbnRCeUlkKG5bMl0pKSYmKHRoaXNbMF09cyx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiB0Lm5vZGVUeXBlPyh0aGlzWzBdPXQsdGhpcy5sZW5ndGg9MSx0aGlzKTp1dCh0KT92b2lkIDAhPT1pLnJlYWR5P2kucmVhZHkodCk6dChmdCk6ZnQubWFrZUFycmF5KHQsdGhpcyl9KS5wcm90b3R5cGU9ZnQuZm4sd3Q9ZnQoWik7dmFyIEN0PS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLGt0PXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2Z0LmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKHQpe3ZhciBlPWZ0KHQsdGhpcyksaT1lLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodmFyIHQ9MDt0PGk7dCsrKWlmKGZ0LmNvbnRhaW5zKHRoaXMsZVt0XSkpcmV0dXJuITB9KX0sY2xvc2VzdDpmdW5jdGlvbih0LGUpe3ZhciBpLG49MCxzPXRoaXMubGVuZ3RoLG89W10sYT1cInN0cmluZ1wiIT10eXBlb2YgdCYmZnQodCk7aWYoIV90LnRlc3QodCkpZm9yKDtuPHM7bisrKWZvcihpPXRoaXNbbl07aSYmaSE9PWU7aT1pLnBhcmVudE5vZGUpaWYoaS5ub2RlVHlwZTwxMSYmKGE/YS5pbmRleChpKT4tMToxPT09aS5ub2RlVHlwZSYmZnQuZmluZC5tYXRjaGVzU2VsZWN0b3IoaSx0KSkpe28ucHVzaChpKTticmVha31yZXR1cm4gdGhpcy5wdXNoU3RhY2soby5sZW5ndGg+MT9mdC51bmlxdWVTb3J0KG8pOm8pfSxpbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gdD9cInN0cmluZ1wiPT10eXBlb2YgdD9zdC5jYWxsKGZ0KHQpLHRoaXNbMF0pOnN0LmNhbGwodGhpcyx0LmpxdWVyeT90WzBdOnQpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0LnVuaXF1ZVNvcnQoZnQubWVyZ2UodGhpcy5nZXQoKSxmdCh0LGUpKSkpfSxhZGRCYWNrOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZChudWxsPT10P3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKHQpKX19KSxmdC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnROb2RlO3JldHVybiBlJiYxMSE9PWUubm9kZVR5cGU/ZTpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKHQpe3JldHVybiB2dCh0LFwicGFyZW50Tm9kZVwiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdnQodCxcInBhcmVudE5vZGVcIixpKX0sbmV4dDpmdW5jdGlvbih0KXtyZXR1cm4gcih0LFwibmV4dFNpYmxpbmdcIil9LHByZXY6ZnVuY3Rpb24odCl7cmV0dXJuIHIodCxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dEFsbDpmdW5jdGlvbih0KXtyZXR1cm4gdnQodCxcIm5leHRTaWJsaW5nXCIpfSxwcmV2QWxsOmZ1bmN0aW9uKHQpe3JldHVybiB2dCh0LFwicHJldmlvdXNTaWJsaW5nXCIpfSxuZXh0VW50aWw6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB2dCh0LFwibmV4dFNpYmxpbmdcIixpKX0scHJldlVudGlsOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdnQodCxcInByZXZpb3VzU2libGluZ1wiLGkpfSxzaWJsaW5nczpmdW5jdGlvbih0KXtyZXR1cm4gYnQoKHQucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsdCl9LGNoaWxkcmVuOmZ1bmN0aW9uKHQpe3JldHVybiBidCh0LmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbih0KXtyZXR1cm4gbyh0LFwiaWZyYW1lXCIpP3QuY29udGVudERvY3VtZW50OihvKHQsXCJ0ZW1wbGF0ZVwiKSYmKHQ9dC5jb250ZW50fHx0KSxmdC5tZXJnZShbXSx0LmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKHQsZSl7ZnQuZm5bdF09ZnVuY3Rpb24oaSxuKXt2YXIgcz1mdC5tYXAodGhpcyxlLGkpO3JldHVyblwiVW50aWxcIiE9PXQuc2xpY2UoLTUpJiYobj1pKSxuJiZcInN0cmluZ1wiPT10eXBlb2YgbiYmKHM9ZnQuZmlsdGVyKG4scykpLHRoaXMubGVuZ3RoPjEmJihrdFt0XXx8ZnQudW5pcXVlU29ydChzKSxDdC50ZXN0KHQpJiZzLnJldmVyc2UoKSksdGhpcy5wdXNoU3RhY2socyl9fSk7dmFyIFR0PS9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZztmdC5DYWxsYmFja3M9ZnVuY3Rpb24odCl7dD1cInN0cmluZ1wiPT10eXBlb2YgdD9mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gZnQuZWFjaCh0Lm1hdGNoKFR0KXx8W10sZnVuY3Rpb24odCxpKXtlW2ldPSEwfSksZX0odCk6ZnQuZXh0ZW5kKHt9LHQpO3ZhciBlLGkscyxvLGE9W10scj1bXSxsPS0xLGg9ZnVuY3Rpb24oKXtmb3Iobz1vfHx0Lm9uY2Uscz1lPSEwO3IubGVuZ3RoO2w9LTEpZm9yKGk9ci5zaGlmdCgpOysrbDxhLmxlbmd0aDspITE9PT1hW2xdLmFwcGx5KGlbMF0saVsxXSkmJnQuc3RvcE9uRmFsc2UmJihsPWEubGVuZ3RoLGk9ITEpO3QubWVtb3J5fHwoaT0hMSksZT0hMSxvJiYoYT1pP1tdOlwiXCIpfSxjPXthZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmKGkmJiFlJiYobD1hLmxlbmd0aC0xLHIucHVzaChpKSksZnVuY3Rpb24gZShpKXtmdC5lYWNoKGksZnVuY3Rpb24oaSxzKXt1dChzKT90LnVuaXF1ZSYmYy5oYXMocyl8fGEucHVzaChzKTpzJiZzLmxlbmd0aCYmXCJzdHJpbmdcIiE9PW4ocykmJmUocyl9KX0oYXJndW1lbnRzKSxpJiYhZSYmaCgpKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gZnQuZWFjaChhcmd1bWVudHMsZnVuY3Rpb24odCxlKXtmb3IodmFyIGk7KGk9ZnQuaW5BcnJheShlLGEsaSkpPi0xOylhLnNwbGljZShpLDEpLGk8PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4gdD9mdC5pbkFycmF5KHQsYSk+LTE6YS5sZW5ndGg+MH0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmKGE9W10pLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbz1yPVtdLGE9aT1cIlwiLHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWF9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbz1yPVtdLGl8fGV8fChhPWk9XCJcIiksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuISFvfSxmaXJlV2l0aDpmdW5jdGlvbih0LGkpe3JldHVybiBvfHwoaT1bdCwoaT1pfHxbXSkuc2xpY2U/aS5zbGljZSgpOmldLHIucHVzaChpKSxlfHxoKCkpLHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtyZXR1cm4gYy5maXJlV2l0aCh0aGlzLGFyZ3VtZW50cyksdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIXN9fTtyZXR1cm4gY30sZnQuZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgaT1bW1wibm90aWZ5XCIsXCJwcm9ncmVzc1wiLGZ0LkNhbGxiYWNrcyhcIm1lbW9yeVwiKSxmdC5DYWxsYmFja3MoXCJtZW1vcnlcIiksMl0sW1wicmVzb2x2ZVwiLFwiZG9uZVwiLGZ0LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLGZ0LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLDAsXCJyZXNvbHZlZFwiXSxbXCJyZWplY3RcIixcImZhaWxcIixmdC5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSxmdC5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSwxLFwicmVqZWN0ZWRcIl1dLG49XCJwZW5kaW5nXCIscz17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIG8uZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSxjYXRjaDpmdW5jdGlvbih0KXtyZXR1cm4gcy50aGVuKG51bGwsdCl9LHBpcGU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHM7cmV0dXJuIGZ0LkRlZmVycmVkKGZ1bmN0aW9uKGUpe2Z0LmVhY2goaSxmdW5jdGlvbihpLG4pe3ZhciBzPXV0KHRbbls0XV0pJiZ0W25bNF1dO29bblsxXV0oZnVuY3Rpb24oKXt2YXIgdD1zJiZzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0JiZ1dCh0LnByb21pc2UpP3QucHJvbWlzZSgpLnByb2dyZXNzKGUubm90aWZ5KS5kb25lKGUucmVzb2x2ZSkuZmFpbChlLnJlamVjdCk6ZVtuWzBdK1wiV2l0aFwiXSh0aGlzLHM/W3RdOmFyZ3VtZW50cyl9KX0pLHQ9bnVsbH0pLnByb21pc2UoKX0sdGhlbjpmdW5jdGlvbihlLG4scyl7ZnVuY3Rpb24gbyhlLGksbixzKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcj10aGlzLGM9YXJndW1lbnRzLHU9ZnVuY3Rpb24oKXt2YXIgdCx1O2lmKCEoZTxhKSl7aWYoKHQ9bi5hcHBseShyLGMpKT09PWkucHJvbWlzZSgpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIik7dT10JiYoXCJvYmplY3RcIj09dHlwZW9mIHR8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHQpJiZ0LnRoZW4sdXQodSk/cz91LmNhbGwodCxvKGEsaSxsLHMpLG8oYSxpLGgscykpOihhKyssdS5jYWxsKHQsbyhhLGksbCxzKSxvKGEsaSxoLHMpLG8oYSxpLGwsaS5ub3RpZnlXaXRoKSkpOihuIT09bCYmKHI9dm9pZCAwLGM9W3RdKSwoc3x8aS5yZXNvbHZlV2l0aCkocixjKSl9fSxkPXM/dTpmdW5jdGlvbigpe3RyeXt1KCl9Y2F0Y2godCl7ZnQuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmZnQuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayh0LGQuc3RhY2tUcmFjZSksZSsxPj1hJiYobiE9PWgmJihyPXZvaWQgMCxjPVt0XSksaS5yZWplY3RXaXRoKHIsYykpfX07ZT9kKCk6KGZ0LkRlZmVycmVkLmdldFN0YWNrSG9vayYmKGQuc3RhY2tUcmFjZT1mdC5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksdC5zZXRUaW1lb3V0KGQpKX19dmFyIGE9MDtyZXR1cm4gZnQuRGVmZXJyZWQoZnVuY3Rpb24odCl7aVswXVszXS5hZGQobygwLHQsdXQocyk/czpsLHQubm90aWZ5V2l0aCkpLGlbMV1bM10uYWRkKG8oMCx0LHV0KGUpP2U6bCkpLGlbMl1bM10uYWRkKG8oMCx0LHV0KG4pP246aCkpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsIT10P2Z0LmV4dGVuZCh0LHMpOnN9fSxvPXt9O3JldHVybiBmdC5lYWNoKGksZnVuY3Rpb24odCxlKXt2YXIgYT1lWzJdLHI9ZVs1XTtzW2VbMV1dPWEuYWRkLHImJmEuYWRkKGZ1bmN0aW9uKCl7bj1yfSxpWzMtdF1bMl0uZGlzYWJsZSxpWzMtdF1bM10uZGlzYWJsZSxpWzBdWzJdLmxvY2ssaVswXVszXS5sb2NrKSxhLmFkZChlWzNdLmZpcmUpLG9bZVswXV09ZnVuY3Rpb24oKXtyZXR1cm4gb1tlWzBdK1wiV2l0aFwiXSh0aGlzPT09bz92b2lkIDA6dGhpcyxhcmd1bWVudHMpLHRoaXN9LG9bZVswXStcIldpdGhcIl09YS5maXJlV2l0aH0pLHMucHJvbWlzZShvKSxlJiZlLmNhbGwobyxvKSxvfSx3aGVuOmZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGgsaT1lLG49QXJyYXkoaSkscz1ldC5jYWxsKGFyZ3VtZW50cyksbz1mdC5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe25bdF09dGhpcyxzW3RdPWFyZ3VtZW50cy5sZW5ndGg+MT9ldC5jYWxsKGFyZ3VtZW50cyk6aSwtLWV8fG8ucmVzb2x2ZVdpdGgobixzKX19O2lmKGU8PTEmJihjKHQsby5kb25lKGEoaSkpLnJlc29sdmUsby5yZWplY3QsIWUpLFwicGVuZGluZ1wiPT09by5zdGF0ZSgpfHx1dChzW2ldJiZzW2ldLnRoZW4pKSlyZXR1cm4gby50aGVuKCk7Zm9yKDtpLS07KWMoc1tpXSxhKGkpLG8ucmVqZWN0KTtyZXR1cm4gby5wcm9taXNlKCl9fSk7dmFyIER0PS9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO2Z0LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSxpKXt0LmNvbnNvbGUmJnQuY29uc29sZS53YXJuJiZlJiZEdC50ZXN0KGUubmFtZSkmJnQuY29uc29sZS53YXJuKFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIrZS5tZXNzYWdlLGUuc3RhY2ssaSl9LGZ0LnJlYWR5RXhjZXB0aW9uPWZ1bmN0aW9uKGUpe3Quc2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX07dmFyIFN0PWZ0LkRlZmVycmVkKCk7ZnQuZm4ucmVhZHk9ZnVuY3Rpb24odCl7cmV0dXJuIFN0LnRoZW4odCkuY2F0Y2goZnVuY3Rpb24odCl7ZnQucmVhZHlFeGNlcHRpb24odCl9KSx0aGlzfSxmdC5leHRlbmQoe2lzUmVhZHk6ITEscmVhZHlXYWl0OjEscmVhZHk6ZnVuY3Rpb24odCl7KCEwPT09dD8tLWZ0LnJlYWR5V2FpdDpmdC5pc1JlYWR5KXx8KGZ0LmlzUmVhZHk9ITAsITAhPT10JiYtLWZ0LnJlYWR5V2FpdD4wfHxTdC5yZXNvbHZlV2l0aChaLFtmdF0pKX19KSxmdC5yZWFkeS50aGVuPVN0LnRoZW4sXCJjb21wbGV0ZVwiPT09Wi5yZWFkeVN0YXRlfHxcImxvYWRpbmdcIiE9PVoucmVhZHlTdGF0ZSYmIVouZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP3Quc2V0VGltZW91dChmdC5yZWFkeSk6KFouYWRkRXZlbnRMaXN0ZW5lcihcIkRPTUNvbnRlbnRMb2FkZWRcIix1KSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsdSkpO3ZhciBJdD1mdW5jdGlvbih0LGUsaSxzLG8sYSxyKXt2YXIgbD0wLGg9dC5sZW5ndGgsYz1udWxsPT1pO2lmKFwib2JqZWN0XCI9PT1uKGkpKWZvcihsIGluIG89ITAsaSlJdCh0LGUsbCxpW2xdLCEwLGEscik7ZWxzZSBpZih2b2lkIDAhPT1zJiYobz0hMCx1dChzKXx8KHI9ITApLGMmJihyPyhlLmNhbGwodCxzKSxlPW51bGwpOihjPWUsZT1mdW5jdGlvbih0LGUsaSl7cmV0dXJuIGMuY2FsbChmdCh0KSxpKX0pKSxlKSlmb3IoO2w8aDtsKyspZSh0W2xdLGkscj9zOnMuY2FsbCh0W2xdLGwsZSh0W2xdLGkpKSk7cmV0dXJuIG8/dDpjP2UuY2FsbCh0KTpoP2UodFswXSxpKTphfSxQdD0vXi1tcy0vLEV0PS8tKFthLXpdKS9nLE10PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dC5ub2RlVHlwZXx8OT09PXQubm9kZVR5cGV8fCErdC5ub2RlVHlwZX07Zi51aWQ9MSxmLnByb3RvdHlwZT17Y2FjaGU6ZnVuY3Rpb24odCl7dmFyIGU9dFt0aGlzLmV4cGFuZG9dO3JldHVybiBlfHwoZT17fSxNdCh0KSYmKHQubm9kZVR5cGU/dFt0aGlzLmV4cGFuZG9dPWU6T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsdGhpcy5leHBhbmRvLHt2YWx1ZTplLGNvbmZpZ3VyYWJsZTohMH0pKSksZX0sc2V0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzPXRoaXMuY2FjaGUodCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpc1twKGUpXT1pO2Vsc2UgZm9yKG4gaW4gZSlzW3AobildPWVbbl07cmV0dXJuIHN9LGdldDpmdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP3RoaXMuY2FjaGUodCk6dFt0aGlzLmV4cGFuZG9dJiZ0W3RoaXMuZXhwYW5kb11bcChlKV19LGFjY2VzczpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHZvaWQgMD09PWV8fGUmJlwic3RyaW5nXCI9PXR5cGVvZiBlJiZ2b2lkIDA9PT1pP3RoaXMuZ2V0KHQsZSk6KHRoaXMuc2V0KHQsZSxpKSx2b2lkIDAhPT1pP2k6ZSl9LHJlbW92ZTpmdW5jdGlvbih0LGUpe3ZhciBpLG49dFt0aGlzLmV4cGFuZG9dO2lmKHZvaWQgMCE9PW4pe2lmKHZvaWQgMCE9PWUpe2k9KGU9QXJyYXkuaXNBcnJheShlKT9lLm1hcChwKTooZT1wKGUpKWluIG4/W2VdOmUubWF0Y2goVHQpfHxbXSkubGVuZ3RoO2Zvcig7aS0tOylkZWxldGUgbltlW2ldXX0odm9pZCAwPT09ZXx8ZnQuaXNFbXB0eU9iamVjdChuKSkmJih0Lm5vZGVUeXBlP3RbdGhpcy5leHBhbmRvXT12b2lkIDA6ZGVsZXRlIHRbdGhpcy5leHBhbmRvXSl9fSxoYXNEYXRhOmZ1bmN0aW9uKHQpe3ZhciBlPXRbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09ZSYmIWZ0LmlzRW1wdHlPYmplY3QoZSl9fTt2YXIgQXQ9bmV3IGYsT3Q9bmV3IGYsTnQ9L14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLEh0PS9bQS1aXS9nO2Z0LmV4dGVuZCh7aGFzRGF0YTpmdW5jdGlvbih0KXtyZXR1cm4gT3QuaGFzRGF0YSh0KXx8QXQuaGFzRGF0YSh0KX0sZGF0YTpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIE90LmFjY2Vzcyh0LGUsaSl9LHJlbW92ZURhdGE6ZnVuY3Rpb24odCxlKXtPdC5yZW1vdmUodCxlKX0sX2RhdGE6ZnVuY3Rpb24odCxlLGkpe3JldHVybiBBdC5hY2Nlc3ModCxlLGkpfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbih0LGUpe0F0LnJlbW92ZSh0LGUpfX0pLGZ0LmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbih0LGUpe3ZhciBpLG4scyxvPXRoaXNbMF0sYT1vJiZvLmF0dHJpYnV0ZXM7aWYodm9pZCAwPT09dCl7aWYodGhpcy5sZW5ndGgmJihzPU90LmdldChvKSwxPT09by5ub2RlVHlwZSYmIUF0LmdldChvLFwiaGFzRGF0YUF0dHJzXCIpKSl7Zm9yKGk9YS5sZW5ndGg7aS0tOylhW2ldJiYwPT09KG49YVtpXS5uYW1lKS5pbmRleE9mKFwiZGF0YS1cIikmJihuPXAobi5zbGljZSg1KSksZyhvLG4sc1tuXSkpO0F0LnNldChvLFwiaGFzRGF0YUF0dHJzXCIsITApfXJldHVybiBzfXJldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P3RoaXMuZWFjaChmdW5jdGlvbigpe090LnNldCh0aGlzLHQpfSk6SXQodGhpcyxmdW5jdGlvbihlKXt2YXIgaTtpZihvJiZ2b2lkIDA9PT1lKXtpZih2b2lkIDAhPT0oaT1PdC5nZXQobyx0KSkpcmV0dXJuIGk7aWYodm9pZCAwIT09KGk9ZyhvLHQpKSlyZXR1cm4gaX1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpe090LnNldCh0aGlzLHQsZSl9KX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7T3QucmVtb3ZlKHRoaXMsdCl9KX19KSxmdC5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbjtpZih0KXJldHVybiBlPShlfHxcImZ4XCIpK1wicXVldWVcIixuPUF0LmdldCh0LGUpLGkmJighbnx8QXJyYXkuaXNBcnJheShpKT9uPUF0LmFjY2Vzcyh0LGUsZnQubWFrZUFycmF5KGkpKTpuLnB1c2goaSkpLG58fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKHQsZSl7ZT1lfHxcImZ4XCI7dmFyIGk9ZnQucXVldWUodCxlKSxuPWkubGVuZ3RoLHM9aS5zaGlmdCgpLG89ZnQuX3F1ZXVlSG9va3ModCxlKTtcImlucHJvZ3Jlc3NcIj09PXMmJihzPWkuc2hpZnQoKSxuLS0pLHMmJihcImZ4XCI9PT1lJiZpLnVuc2hpZnQoXCJpbnByb2dyZXNzXCIpLGRlbGV0ZSBvLnN0b3Ascy5jYWxsKHQsZnVuY3Rpb24oKXtmdC5kZXF1ZXVlKHQsZSl9LG8pKSwhbiYmbyYmby5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9ZStcInF1ZXVlSG9va3NcIjtyZXR1cm4gQXQuZ2V0KHQsaSl8fEF0LmFjY2Vzcyh0LGkse2VtcHR5OmZ0LkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLmFkZChmdW5jdGlvbigpe0F0LnJlbW92ZSh0LFtlK1wicXVldWVcIixpXSl9KX0pfX0pLGZ0LmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxlKXt2YXIgaT0yO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiB0JiYoZT10LHQ9XCJmeFwiLGktLSksYXJndW1lbnRzLmxlbmd0aDxpP2Z0LnF1ZXVlKHRoaXNbMF0sdCk6dm9pZCAwPT09ZT90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPWZ0LnF1ZXVlKHRoaXMsdCxlKTtmdC5fcXVldWVIb29rcyh0aGlzLHQpLFwiZnhcIj09PXQmJlwiaW5wcm9ncmVzc1wiIT09aVswXSYmZnQuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2Z0LmRlcXVldWUodGhpcyx0KX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnF1ZXVlKHR8fFwiZnhcIixbXSl9LHByb21pc2U6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPTEscz1mdC5EZWZlcnJlZCgpLG89dGhpcyxhPXRoaXMubGVuZ3RoLHI9ZnVuY3Rpb24oKXstLW58fHMucmVzb2x2ZVdpdGgobyxbb10pfTtmb3IoXCJzdHJpbmdcIiE9dHlwZW9mIHQmJihlPXQsdD12b2lkIDApLHQ9dHx8XCJmeFwiO2EtLTspKGk9QXQuZ2V0KG9bYV0sdCtcInF1ZXVlSG9va3NcIikpJiZpLmVtcHR5JiYobisrLGkuZW1wdHkuYWRkKHIpKTtyZXR1cm4gcigpLHMucHJvbWlzZShlKX19KTt2YXIgenQ9L1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8uc291cmNlLEx0PW5ldyBSZWdFeHAoXCJeKD86KFsrLV0pPXwpKFwiK3p0K1wiKShbYS16JV0qKSRcIixcImlcIiksV3Q9W1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLFJ0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJub25lXCI9PT0odD1lfHx0KS5zdHlsZS5kaXNwbGF5fHxcIlwiPT09dC5zdHlsZS5kaXNwbGF5JiZmdC5jb250YWlucyh0Lm93bmVyRG9jdW1lbnQsdCkmJlwibm9uZVwiPT09ZnQuY3NzKHQsXCJkaXNwbGF5XCIpfSwkdD1mdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxvLGE9e307Zm9yKG8gaW4gZSlhW29dPXQuc3R5bGVbb10sdC5zdHlsZVtvXT1lW29dO2ZvcihvIGluIHM9aS5hcHBseSh0LG58fFtdKSxlKXQuc3R5bGVbb109YVtvXTtyZXR1cm4gc30sanQ9e307ZnQuZm4uZXh0ZW5kKHtzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdD90P3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe1J0KHRoaXMpP2Z0KHRoaXMpLnNob3coKTpmdCh0aGlzKS5oaWRlKCl9KX19KTt2YXIgRnQ9L14oPzpjaGVja2JveHxyYWRpbykkL2ksQnQ9LzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0rKS9pLHF0PS9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2ksVXQ9e29wdGlvbjpbMSxcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIixcIjwvc2VsZWN0PlwiXSx0aGVhZDpbMSxcIjx0YWJsZT5cIixcIjwvdGFibGU+XCJdLGNvbDpbMixcIjx0YWJsZT48Y29sZ3JvdXA+XCIsXCI8L2NvbGdyb3VwPjwvdGFibGU+XCJdLHRyOlsyLFwiPHRhYmxlPjx0Ym9keT5cIixcIjwvdGJvZHk+PC90YWJsZT5cIl0sdGQ6WzMsXCI8dGFibGU+PHRib2R5Pjx0cj5cIixcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiXSxfZGVmYXVsdDpbMCxcIlwiLFwiXCJdfTtVdC5vcHRncm91cD1VdC5vcHRpb24sVXQudGJvZHk9VXQudGZvb3Q9VXQuY29sZ3JvdXA9VXQuY2FwdGlvbj1VdC50aGVhZCxVdC50aD1VdC50ZDt2YXIgWXQ9Lzx8JiM/XFx3KzsvOyFmdW5jdGlvbigpe3ZhciB0PVouY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmFwcGVuZENoaWxkKFouY3JlYXRlRWxlbWVudChcImRpdlwiKSksZT1aLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtlLnNldEF0dHJpYnV0ZShcInR5cGVcIixcInJhZGlvXCIpLGUuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLFwiY2hlY2tlZFwiKSxlLnNldEF0dHJpYnV0ZShcIm5hbWVcIixcInRcIiksdC5hcHBlbmRDaGlsZChlKSxjdC5jaGVja0Nsb25lPXQuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHQuaW5uZXJIVE1MPVwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiLGN0Lm5vQ2xvbmVDaGVja2VkPSEhdC5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIFZ0PVouZG9jdW1lbnRFbGVtZW50LEt0PS9ea2V5LyxYdD0vXig/Om1vdXNlfHBvaW50ZXJ8Y29udGV4dG1lbnV8ZHJhZ3xkcm9wKXxjbGljay8sR3Q9L14oW14uXSopKD86XFwuKC4rKXwpLztmdC5ldmVudD17Z2xvYmFsOnt9LGFkZDpmdW5jdGlvbih0LGUsaSxuLHMpe3ZhciBvLGEscixsLGgsYyx1LGQscCxmLGcsbT1BdC5nZXQodCk7aWYobSlmb3IoaS5oYW5kbGVyJiYoaT0obz1pKS5oYW5kbGVyLHM9by5zZWxlY3RvcikscyYmZnQuZmluZC5tYXRjaGVzU2VsZWN0b3IoVnQscyksaS5ndWlkfHwoaS5ndWlkPWZ0Lmd1aWQrKyksKGw9bS5ldmVudHMpfHwobD1tLmV2ZW50cz17fSksKGE9bS5oYW5kbGUpfHwoYT1tLmhhbmRsZT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZnQmJmZ0LmV2ZW50LnRyaWdnZXJlZCE9PWUudHlwZT9mdC5ldmVudC5kaXNwYXRjaC5hcHBseSh0LGFyZ3VtZW50cyk6dm9pZCAwfSksaD0oZT0oZXx8XCJcIikubWF0Y2goVHQpfHxbXCJcIl0pLmxlbmd0aDtoLS07KXA9Zz0ocj1HdC5leGVjKGVbaF0pfHxbXSlbMV0sZj0oclsyXXx8XCJcIikuc3BsaXQoXCIuXCIpLnNvcnQoKSxwJiYodT1mdC5ldmVudC5zcGVjaWFsW3BdfHx7fSxwPShzP3UuZGVsZWdhdGVUeXBlOnUuYmluZFR5cGUpfHxwLHU9ZnQuZXZlbnQuc3BlY2lhbFtwXXx8e30sYz1mdC5leHRlbmQoe3R5cGU6cCxvcmlnVHlwZTpnLGRhdGE6bixoYW5kbGVyOmksZ3VpZDppLmd1aWQsc2VsZWN0b3I6cyxuZWVkc0NvbnRleHQ6cyYmZnQuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdChzKSxuYW1lc3BhY2U6Zi5qb2luKFwiLlwiKX0sbyksKGQ9bFtwXSl8fCgoZD1sW3BdPVtdKS5kZWxlZ2F0ZUNvdW50PTAsdS5zZXR1cCYmITEhPT11LnNldHVwLmNhbGwodCxuLGYsYSl8fHQuYWRkRXZlbnRMaXN0ZW5lciYmdC5hZGRFdmVudExpc3RlbmVyKHAsYSkpLHUuYWRkJiYodS5hZGQuY2FsbCh0LGMpLGMuaGFuZGxlci5ndWlkfHwoYy5oYW5kbGVyLmd1aWQ9aS5ndWlkKSkscz9kLnNwbGljZShkLmRlbGVnYXRlQ291bnQrKywwLGMpOmQucHVzaChjKSxmdC5ldmVudC5nbG9iYWxbcF09ITApfSxyZW1vdmU6ZnVuY3Rpb24odCxlLGksbixzKXt2YXIgbyxhLHIsbCxoLGMsdSxkLHAsZixnLG09QXQuaGFzRGF0YSh0KSYmQXQuZ2V0KHQpO2lmKG0mJihsPW0uZXZlbnRzKSl7Zm9yKGg9KGU9KGV8fFwiXCIpLm1hdGNoKFR0KXx8W1wiXCJdKS5sZW5ndGg7aC0tOylpZihwPWc9KHI9R3QuZXhlYyhlW2hdKXx8W10pWzFdLGY9KHJbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCkscCl7Zm9yKHU9ZnQuZXZlbnQuc3BlY2lhbFtwXXx8e30sZD1sW3A9KG4/dS5kZWxlZ2F0ZVR5cGU6dS5iaW5kVHlwZSl8fHBdfHxbXSxyPXJbMl0mJm5ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitmLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKSxhPW89ZC5sZW5ndGg7by0tOyljPWRbb10sIXMmJmchPT1jLm9yaWdUeXBlfHxpJiZpLmd1aWQhPT1jLmd1aWR8fHImJiFyLnRlc3QoYy5uYW1lc3BhY2UpfHxuJiZuIT09Yy5zZWxlY3RvciYmKFwiKipcIiE9PW58fCFjLnNlbGVjdG9yKXx8KGQuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmZC5kZWxlZ2F0ZUNvdW50LS0sdS5yZW1vdmUmJnUucmVtb3ZlLmNhbGwodCxjKSk7YSYmIWQubGVuZ3RoJiYodS50ZWFyZG93biYmITEhPT11LnRlYXJkb3duLmNhbGwodCxmLG0uaGFuZGxlKXx8ZnQucmVtb3ZlRXZlbnQodCxwLG0uaGFuZGxlKSxkZWxldGUgbFtwXSl9ZWxzZSBmb3IocCBpbiBsKWZ0LmV2ZW50LnJlbW92ZSh0LHArZVtoXSxpLG4sITApO2Z0LmlzRW1wdHlPYmplY3QobCkmJkF0LnJlbW92ZSh0LFwiaGFuZGxlIGV2ZW50c1wiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLG8sYSxyPWZ0LmV2ZW50LmZpeCh0KSxsPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxoPShBdC5nZXQodGhpcyxcImV2ZW50c1wiKXx8e30pW3IudHlwZV18fFtdLGM9ZnQuZXZlbnQuc3BlY2lhbFtyLnR5cGVdfHx7fTtmb3IobFswXT1yLGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKWxbZV09YXJndW1lbnRzW2VdO2lmKHIuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyxyKSl7Zm9yKGE9ZnQuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHIsaCksZT0wOyhzPWFbZSsrXSkmJiFyLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWZvcihyLmN1cnJlbnRUYXJnZXQ9cy5lbGVtLGk9MDsobz1zLmhhbmRsZXJzW2krK10pJiYhci5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOylyLnJuYW1lc3BhY2UmJiFyLnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fChyLmhhbmRsZU9iaj1vLHIuZGF0YT1vLmRhdGEsdm9pZCAwIT09KG49KChmdC5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KHMuZWxlbSxsKSkmJiExPT09KHIucmVzdWx0PW4pJiYoci5wcmV2ZW50RGVmYXVsdCgpLHIuc3RvcFByb3BhZ2F0aW9uKCkpKTtyZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxyKSxyLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzLG8sYSxyPVtdLGw9ZS5kZWxlZ2F0ZUNvdW50LGg9dC50YXJnZXQ7aWYobCYmaC5ub2RlVHlwZSYmIShcImNsaWNrXCI9PT10LnR5cGUmJnQuYnV0dG9uPj0xKSlmb3IoO2ghPT10aGlzO2g9aC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1oLm5vZGVUeXBlJiYoXCJjbGlja1wiIT09dC50eXBlfHwhMCE9PWguZGlzYWJsZWQpKXtmb3Iobz1bXSxhPXt9LGk9MDtpPGw7aSsrKXZvaWQgMD09PWFbcz0obj1lW2ldKS5zZWxlY3RvcitcIiBcIl0mJihhW3NdPW4ubmVlZHNDb250ZXh0P2Z0KHMsdGhpcykuaW5kZXgoaCk+LTE6ZnQuZmluZChzLHRoaXMsbnVsbCxbaF0pLmxlbmd0aCksYVtzXSYmby5wdXNoKG4pO28ubGVuZ3RoJiZyLnB1c2goe2VsZW06aCxoYW5kbGVyczpvfSl9cmV0dXJuIGg9dGhpcyxsPGUubGVuZ3RoJiZyLnB1c2goe2VsZW06aCxoYW5kbGVyczplLnNsaWNlKGwpfSkscn0sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmdC5FdmVudC5wcm90b3R5cGUsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsZ2V0OnV0KGUpP2Z1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiBlKHRoaXMub3JpZ2luYWxFdmVudCl9OmZ1bmN0aW9uKCl7aWYodGhpcy5vcmlnaW5hbEV2ZW50KXJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbdF19LHNldDpmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTplfSl9fSl9LGZpeDpmdW5jdGlvbih0KXtyZXR1cm4gdFtmdC5leHBhbmRvXT90Om5ldyBmdC5FdmVudCh0KX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PWsoKSYmdGhpcy5mb2N1cylyZXR1cm4gdGhpcy5mb2N1cygpLCExfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c2luXCJ9LGJsdXI6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzPT09aygpJiZ0aGlzLmJsdXIpcmV0dXJuIHRoaXMuYmx1cigpLCExfSxkZWxlZ2F0ZVR5cGU6XCJmb2N1c291dFwifSxjbGljazp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKFwiY2hlY2tib3hcIj09PXRoaXMudHlwZSYmdGhpcy5jbGljayYmbyh0aGlzLFwiaW5wdXRcIikpcmV0dXJuIHRoaXMuY2xpY2soKSwhMX0sX2RlZmF1bHQ6ZnVuY3Rpb24odCl7cmV0dXJuIG8odC50YXJnZXQsXCJhXCIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24odCl7dm9pZCAwIT09dC5yZXN1bHQmJnQub3JpZ2luYWxFdmVudCYmKHQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT10LnJlc3VsdCl9fX19LGZ0LnJlbW92ZUV2ZW50PWZ1bmN0aW9uKHQsZSxpKXt0LnJlbW92ZUV2ZW50TGlzdGVuZXImJnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLGkpfSxmdC5FdmVudD1mdW5jdGlvbih0LGUpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGZ0LkV2ZW50KSlyZXR1cm4gbmV3IGZ0LkV2ZW50KHQsZSk7dCYmdC50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9dCx0aGlzLnR5cGU9dC50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPXQuZGVmYXVsdFByZXZlbnRlZHx8dm9pZCAwPT09dC5kZWZhdWx0UHJldmVudGVkJiYhMT09PXQucmV0dXJuVmFsdWU/eDpDLHRoaXMudGFyZ2V0PXQudGFyZ2V0JiYzPT09dC50YXJnZXQubm9kZVR5cGU/dC50YXJnZXQucGFyZW50Tm9kZTp0LnRhcmdldCx0aGlzLmN1cnJlbnRUYXJnZXQ9dC5jdXJyZW50VGFyZ2V0LHRoaXMucmVsYXRlZFRhcmdldD10LnJlbGF0ZWRUYXJnZXQpOnRoaXMudHlwZT10LGUmJmZ0LmV4dGVuZCh0aGlzLGUpLHRoaXMudGltZVN0YW1wPXQmJnQudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbZnQuZXhwYW5kb109ITB9LGZ0LkV2ZW50LnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZnQuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOkMsaXNQcm9wYWdhdGlvblN0b3BwZWQ6Qyxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpDLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXgsdCYmIXRoaXMuaXNTaW11bGF0ZWQmJnQucHJldmVudERlZmF1bHQoKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9eCx0JiYhdGhpcy5pc1NpbXVsYXRlZCYmdC5zdG9wUHJvcGFnYXRpb24oKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9eCx0JiYhdGhpcy5pc1NpbXVsYXRlZCYmdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sZnQuZWFjaCh7YWx0S2V5OiEwLGJ1YmJsZXM6ITAsY2FuY2VsYWJsZTohMCxjaGFuZ2VkVG91Y2hlczohMCxjdHJsS2V5OiEwLGRldGFpbDohMCxldmVudFBoYXNlOiEwLG1ldGFLZXk6ITAscGFnZVg6ITAscGFnZVk6ITAsc2hpZnRLZXk6ITAsdmlldzohMCxjaGFyOiEwLGNoYXJDb2RlOiEwLGtleTohMCxrZXlDb2RlOiEwLGJ1dHRvbjohMCxidXR0b25zOiEwLGNsaWVudFg6ITAsY2xpZW50WTohMCxvZmZzZXRYOiEwLG9mZnNldFk6ITAscG9pbnRlcklkOiEwLHBvaW50ZXJUeXBlOiEwLHNjcmVlblg6ITAsc2NyZWVuWTohMCx0YXJnZXRUb3VjaGVzOiEwLHRvRWxlbWVudDohMCx0b3VjaGVzOiEwLHdoaWNoOmZ1bmN0aW9uKHQpe3ZhciBlPXQuYnV0dG9uO3JldHVybiBudWxsPT10LndoaWNoJiZLdC50ZXN0KHQudHlwZSk/bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZTohdC53aGljaCYmdm9pZCAwIT09ZSYmWHQudGVzdCh0LnR5cGUpPzEmZT8xOjImZT8zOjQmZT8yOjA6dC53aGljaH19LGZ0LmV2ZW50LmFkZFByb3ApLGZ0LmVhY2goe21vdXNlZW50ZXI6XCJtb3VzZW92ZXJcIixtb3VzZWxlYXZlOlwibW91c2VvdXRcIixwb2ludGVyZW50ZXI6XCJwb2ludGVyb3ZlclwiLHBvaW50ZXJsZWF2ZTpcInBvaW50ZXJvdXRcIn0sZnVuY3Rpb24odCxlKXtmdC5ldmVudC5zcGVjaWFsW3RdPXtkZWxlZ2F0ZVR5cGU6ZSxiaW5kVHlwZTplLGhhbmRsZTpmdW5jdGlvbih0KXt2YXIgaSxuPXQucmVsYXRlZFRhcmdldCxzPXQuaGFuZGxlT2JqO3JldHVybiBuJiYobj09PXRoaXN8fGZ0LmNvbnRhaW5zKHRoaXMsbikpfHwodC50eXBlPXMub3JpZ1R5cGUsaT1zLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQudHlwZT1lKSxpfX19KSxmdC5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiBUKHRoaXMsdCxlLGksbil9LG9uZTpmdW5jdGlvbih0LGUsaSxuKXtyZXR1cm4gVCh0aGlzLHQsZSxpLG4sMSl9LG9mZjpmdW5jdGlvbih0LGUsaSl7dmFyIG4scztpZih0JiZ0LnByZXZlbnREZWZhdWx0JiZ0LmhhbmRsZU9iailyZXR1cm4gbj10LmhhbmRsZU9iaixmdCh0LmRlbGVnYXRlVGFyZ2V0KS5vZmYobi5uYW1lc3BhY2U/bi5vcmlnVHlwZStcIi5cIituLm5hbWVzcGFjZTpuLm9yaWdUeXBlLG4uc2VsZWN0b3Isbi5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXtmb3IocyBpbiB0KXRoaXMub2ZmKHMsZSx0W3NdKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PWUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fChpPWUsZT12b2lkIDApLCExPT09aSYmKGk9QyksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnQuZXZlbnQucmVtb3ZlKHRoaXMsdCxpLGUpfSl9fSk7dmFyIFF0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLEp0PS88c2NyaXB0fDxzdHlsZXw8bGluay9pLFp0PS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksdGU9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO2Z0LmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKFF0LFwiPCQxPjwvJDI+XCIpfSxjbG9uZTpmdW5jdGlvbih0LGUsaSl7dmFyIG4scyxvLGEscj10LmNsb25lTm9kZSghMCksbD1mdC5jb250YWlucyh0Lm93bmVyRG9jdW1lbnQsdCk7aWYoIShjdC5ub0Nsb25lQ2hlY2tlZHx8MSE9PXQubm9kZVR5cGUmJjExIT09dC5ub2RlVHlwZXx8ZnQuaXNYTUxEb2ModCkpKWZvcihhPV8ociksbj0wLHM9KG89Xyh0KSkubGVuZ3RoO248cztuKyspRShvW25dLGFbbl0pXG47aWYoZSlpZihpKWZvcihvPW98fF8odCksYT1hfHxfKHIpLG49MCxzPW8ubGVuZ3RoO248cztuKyspUChvW25dLGFbbl0pO2Vsc2UgUCh0LHIpO3JldHVybihhPV8ocixcInNjcmlwdFwiKSkubGVuZ3RoPjAmJnkoYSwhbCYmXyh0LFwic2NyaXB0XCIpKSxyfSxjbGVhbkRhdGE6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGksbixzPWZ0LmV2ZW50LnNwZWNpYWwsbz0wO3ZvaWQgMCE9PShpPXRbb10pO28rKylpZihNdChpKSl7aWYoZT1pW0F0LmV4cGFuZG9dKXtpZihlLmV2ZW50cylmb3IobiBpbiBlLmV2ZW50cylzW25dP2Z0LmV2ZW50LnJlbW92ZShpLG4pOmZ0LnJlbW92ZUV2ZW50KGksbixlLmhhbmRsZSk7aVtBdC5leHBhbmRvXT12b2lkIDB9aVtPdC5leHBhbmRvXSYmKGlbT3QuZXhwYW5kb109dm9pZCAwKX19fSksZnQuZm4uZXh0ZW5kKHtkZXRhY2g6ZnVuY3Rpb24odCl7cmV0dXJuIEEodGhpcyx0LCEwKX0scmVtb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBBKHRoaXMsdCl9LHRleHQ6ZnVuY3Rpb24odCl7cmV0dXJuIEl0KHRoaXMsZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/ZnQudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuZWFjaChmdW5jdGlvbigpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHwodGhpcy50ZXh0Q29udGVudD10KX0pfSxudWxsLHQsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxEKHRoaXMsdCkuYXBwZW5kQ2hpbGQodCl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgZT1EKHRoaXMsdCk7ZS5pbnNlcnRCZWZvcmUodCxlLmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gTSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbih0KXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9MDtudWxsIT0odD10aGlzW2VdKTtlKyspMT09PXQubm9kZVR5cGUmJihmdC5jbGVhbkRhdGEoXyh0LCExKSksdC50ZXh0Q29udGVudD1cIlwiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1udWxsIT10JiZ0LGU9bnVsbD09ZT90OmUsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZnQuY2xvbmUodGhpcyx0LGUpfSl9LGh0bWw6ZnVuY3Rpb24odCl7cmV0dXJuIEl0KHRoaXMsZnVuY3Rpb24odCl7dmFyIGU9dGhpc1swXXx8e30saT0wLG49dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09dCYmMT09PWUubm9kZVR5cGUpcmV0dXJuIGUuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYhSnQudGVzdCh0KSYmIVV0WyhCdC5leGVjKHQpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe3Q9ZnQuaHRtbFByZWZpbHRlcih0KTt0cnl7Zm9yKDtpPG47aSsrKTE9PT0oZT10aGlzW2ldfHx7fSkubm9kZVR5cGUmJihmdC5jbGVhbkRhdGEoXyhlLCExKSksZS5pbm5lckhUTUw9dCk7ZT0wfWNhdGNoKHQpe319ZSYmdGhpcy5lbXB0eSgpLmFwcGVuZCh0KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciB0PVtdO3JldHVybiBNKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMucGFyZW50Tm9kZTtmdC5pbkFycmF5KHRoaXMsdCk8MCYmKGZ0LmNsZWFuRGF0YShfKHRoaXMpKSxpJiZpLnJlcGxhY2VDaGlsZChlLHRoaXMpKX0sdCl9fSksZnQuZWFjaCh7YXBwZW5kVG86XCJhcHBlbmRcIixwcmVwZW5kVG86XCJwcmVwZW5kXCIsaW5zZXJ0QmVmb3JlOlwiYmVmb3JlXCIsaW5zZXJ0QWZ0ZXI6XCJhZnRlclwiLHJlcGxhY2VBbGw6XCJyZXBsYWNlV2l0aFwifSxmdW5jdGlvbih0LGUpe2Z0LmZuW3RdPWZ1bmN0aW9uKHQpe2Zvcih2YXIgaSxuPVtdLHM9ZnQodCksbz1zLmxlbmd0aC0xLGE9MDthPD1vO2ErKylpPWE9PT1vP3RoaXM6dGhpcy5jbG9uZSghMCksZnQoc1thXSlbZV0oaSksbnQuYXBwbHkobixpLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobil9fSk7dmFyIGVlPW5ldyBSZWdFeHAoXCJeKFwiK3p0K1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLGllPWZ1bmN0aW9uKGUpe3ZhciBpPWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gaSYmaS5vcGVuZXJ8fChpPXQpLGkuZ2V0Q29tcHV0ZWRTdHlsZShlKX0sbmU9bmV3IFJlZ0V4cChXdC5qb2luKFwifFwiKSxcImlcIik7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2lmKGgpe2wuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIixoLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElXCIsVnQuYXBwZW5kQ2hpbGQobCkuYXBwZW5kQ2hpbGQoaCk7dmFyIGU9dC5nZXRDb21wdXRlZFN0eWxlKGgpO249XCIxJVwiIT09ZS50b3Ascj0xMj09PWkoZS5tYXJnaW5MZWZ0KSxoLnN0eWxlLnJpZ2h0PVwiNjAlXCIsYT0zNj09PWkoZS5yaWdodCkscz0zNj09PWkoZS53aWR0aCksaC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsbz0zNj09PWgub2Zmc2V0V2lkdGh8fFwiYWJzb2x1dGVcIixWdC5yZW1vdmVDaGlsZChsKSxoPW51bGx9fWZ1bmN0aW9uIGkodCl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdCh0KSl9dmFyIG4scyxvLGEscixsPVouY3JlYXRlRWxlbWVudChcImRpdlwiKSxoPVouY3JlYXRlRWxlbWVudChcImRpdlwiKTtoLnN0eWxlJiYoaC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD1cImNvbnRlbnQtYm94XCIsaC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiXCIsY3QuY2xlYXJDbG9uZVN0eWxlPVwiY29udGVudC1ib3hcIj09PWguc3R5bGUuYmFja2dyb3VuZENsaXAsZnQuZXh0ZW5kKGN0LHtib3hTaXppbmdSZWxpYWJsZTpmdW5jdGlvbigpe3JldHVybiBlKCksc30scGl4ZWxCb3hTdHlsZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLGF9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gZSgpLG59LHJlbGlhYmxlTWFyZ2luTGVmdDpmdW5jdGlvbigpe3JldHVybiBlKCkscn0sc2Nyb2xsYm94U2l6ZTpmdW5jdGlvbigpe3JldHVybiBlKCksb319KSl9KCk7dmFyIHNlPS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxvZT0vXi0tLyxhZT17cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJoaWRkZW5cIixkaXNwbGF5OlwiYmxvY2tcIn0scmU9e2xldHRlclNwYWNpbmc6XCIwXCIsZm9udFdlaWdodDpcIjQwMFwifSxsZT1bXCJXZWJraXRcIixcIk1velwiLFwibXNcIl0saGU9Wi5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlO2Z0LmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbih0LGUpe2lmKGUpe3ZhciBpPU8odCxcIm9wYWNpdHlcIik7cmV0dXJuXCJcIj09PWk/XCIxXCI6aX19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7fSxzdHlsZTpmdW5jdGlvbih0LGUsaSxuKXtpZih0JiYzIT09dC5ub2RlVHlwZSYmOCE9PXQubm9kZVR5cGUmJnQuc3R5bGUpe3ZhciBzLG8sYSxyPXAoZSksbD1vZS50ZXN0KGUpLGg9dC5zdHlsZTtpZihsfHwoZT1IKHIpKSxhPWZ0LmNzc0hvb2tzW2VdfHxmdC5jc3NIb29rc1tyXSx2b2lkIDA9PT1pKXJldHVybiBhJiZcImdldFwiaW4gYSYmdm9pZCAwIT09KHM9YS5nZXQodCwhMSxuKSk/czpoW2VdO1wic3RyaW5nXCI9PShvPXR5cGVvZiBpKSYmKHM9THQuZXhlYyhpKSkmJnNbMV0mJihpPW0odCxlLHMpLG89XCJudW1iZXJcIiksbnVsbCE9aSYmaT09aSYmKFwibnVtYmVyXCI9PT1vJiYoaSs9cyYmc1szXXx8KGZ0LmNzc051bWJlcltyXT9cIlwiOlwicHhcIikpLGN0LmNsZWFyQ2xvbmVTdHlsZXx8XCJcIiE9PWl8fDAhPT1lLmluZGV4T2YoXCJiYWNrZ3JvdW5kXCIpfHwoaFtlXT1cImluaGVyaXRcIiksYSYmXCJzZXRcImluIGEmJnZvaWQgMD09PShpPWEuc2V0KHQsaSxuKSl8fChsP2guc2V0UHJvcGVydHkoZSxpKTpoW2VdPWkpKX19LGNzczpmdW5jdGlvbih0LGUsaSxuKXt2YXIgcyxvLGEscj1wKGUpO3JldHVybiBvZS50ZXN0KGUpfHwoZT1IKHIpKSwoYT1mdC5jc3NIb29rc1tlXXx8ZnQuY3NzSG9va3Nbcl0pJiZcImdldFwiaW4gYSYmKHM9YS5nZXQodCwhMCxpKSksdm9pZCAwPT09cyYmKHM9Tyh0LGUsbikpLFwibm9ybWFsXCI9PT1zJiZlIGluIHJlJiYocz1yZVtlXSksXCJcIj09PWl8fGk/KG89cGFyc2VGbG9hdChzKSwhMD09PWl8fGlzRmluaXRlKG8pP298fDA6cyk6c319KSxmdC5lYWNoKFtcImhlaWdodFwiLFwid2lkdGhcIl0sZnVuY3Rpb24odCxlKXtmdC5jc3NIb29rc1tlXT17Z2V0OmZ1bmN0aW9uKHQsaSxuKXtpZihpKXJldHVybiFzZS50ZXN0KGZ0LmNzcyh0LFwiZGlzcGxheVwiKSl8fHQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/Vyh0LGUsbik6JHQodCxhZSxmdW5jdGlvbigpe3JldHVybiBXKHQsZSxuKX0pfSxzZXQ6ZnVuY3Rpb24odCxpLG4pe3ZhciBzLG89aWUodCksYT1cImJvcmRlci1ib3hcIj09PWZ0LmNzcyh0LFwiYm94U2l6aW5nXCIsITEsbykscj1uJiZMKHQsZSxuLGEsbyk7cmV0dXJuIGEmJmN0LnNjcm9sbGJveFNpemUoKT09PW8ucG9zaXRpb24mJihyLT1NYXRoLmNlaWwodFtcIm9mZnNldFwiK2VbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpXS1wYXJzZUZsb2F0KG9bZV0pLUwodCxlLFwiYm9yZGVyXCIsITEsbyktLjUpKSxyJiYocz1MdC5leGVjKGkpKSYmXCJweFwiIT09KHNbM118fFwicHhcIikmJih0LnN0eWxlW2VdPWksaT1mdC5jc3ModCxlKSkseigwLGkscil9fX0pLGZ0LmNzc0hvb2tzLm1hcmdpbkxlZnQ9TihjdC5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24odCxlKXtpZihlKXJldHVybihwYXJzZUZsb2F0KE8odCxcIm1hcmdpbkxlZnRcIikpfHx0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQtJHQodCx7bWFyZ2luTGVmdDowfSxmdW5jdGlvbigpe3JldHVybiB0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnR9KSkrXCJweFwifSksZnQuZWFjaCh7bWFyZ2luOlwiXCIscGFkZGluZzpcIlwiLGJvcmRlcjpcIldpZHRoXCJ9LGZ1bmN0aW9uKHQsZSl7ZnQuY3NzSG9va3NbdCtlXT17ZXhwYW5kOmZ1bmN0aW9uKGkpe2Zvcih2YXIgbj0wLHM9e30sbz1cInN0cmluZ1wiPT10eXBlb2YgaT9pLnNwbGl0KFwiIFwiKTpbaV07bjw0O24rKylzW3QrV3Rbbl0rZV09b1tuXXx8b1tuLTJdfHxvWzBdO3JldHVybiBzfX0sXCJtYXJnaW5cIiE9PXQmJihmdC5jc3NIb29rc1t0K2VdLnNldD16KX0pLGZ0LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEl0KHRoaXMsZnVuY3Rpb24odCxlLGkpe3ZhciBuLHMsbz17fSxhPTA7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKG49aWUodCkscz1lLmxlbmd0aDthPHM7YSsrKW9bZVthXV09ZnQuY3NzKHQsZVthXSwhMSxuKTtyZXR1cm4gb31yZXR1cm4gdm9pZCAwIT09aT9mdC5zdHlsZSh0LGUsaSk6ZnQuY3NzKHQsZSl9LHQsZSxhcmd1bWVudHMubGVuZ3RoPjEpfX0pLGZ0LlR3ZWVuPVIsUi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlIsaW5pdDpmdW5jdGlvbih0LGUsaSxuLHMsbyl7dGhpcy5lbGVtPXQsdGhpcy5wcm9wPWksdGhpcy5lYXNpbmc9c3x8ZnQuZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz1lLHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1uLHRoaXMudW5pdD1vfHwoZnQuY3NzTnVtYmVyW2ldP1wiXCI6XCJweFwiKX0sY3VyOmZ1bmN0aW9uKCl7dmFyIHQ9Ui5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdCYmdC5nZXQ/dC5nZXQodGhpcyk6Ui5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24odCl7dmFyIGUsaT1SLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiB0aGlzLm9wdGlvbnMuZHVyYXRpb24/dGhpcy5wb3M9ZT1mdC5lYXNpbmdbdGhpcy5lYXNpbmddKHQsdGhpcy5vcHRpb25zLmR1cmF0aW9uKnQsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9ZT10LHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSplK3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLGkmJmkuc2V0P2kuc2V0KHRoaXMpOlIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0sUi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9Ui5wcm90b3R5cGUsUi5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDEhPT10LmVsZW0ubm9kZVR5cGV8fG51bGwhPXQuZWxlbVt0LnByb3BdJiZudWxsPT10LmVsZW0uc3R5bGVbdC5wcm9wXT90LmVsZW1bdC5wcm9wXTooZT1mdC5jc3ModC5lbGVtLHQucHJvcCxcIlwiKSkmJlwiYXV0b1wiIT09ZT9lOjB9LHNldDpmdW5jdGlvbih0KXtmdC5meC5zdGVwW3QucHJvcF0/ZnQuZnguc3RlcFt0LnByb3BdKHQpOjEhPT10LmVsZW0ubm9kZVR5cGV8fG51bGw9PXQuZWxlbS5zdHlsZVtmdC5jc3NQcm9wc1t0LnByb3BdXSYmIWZ0LmNzc0hvb2tzW3QucHJvcF0/dC5lbGVtW3QucHJvcF09dC5ub3c6ZnQuc3R5bGUodC5lbGVtLHQucHJvcCx0Lm5vdyt0LnVuaXQpfX19LFIucHJvcEhvb2tzLnNjcm9sbFRvcD1SLnByb3BIb29rcy5zY3JvbGxMZWZ0PXtzZXQ6ZnVuY3Rpb24odCl7dC5lbGVtLm5vZGVUeXBlJiZ0LmVsZW0ucGFyZW50Tm9kZSYmKHQuZWxlbVt0LnByb3BdPXQubm93KX19LGZ0LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKHQpe3JldHVybiB0fSxzd2luZzpmdW5jdGlvbih0KXtyZXR1cm4uNS1NYXRoLmNvcyh0Kk1hdGguUEkpLzJ9LF9kZWZhdWx0Olwic3dpbmdcIn0sZnQuZng9Ui5wcm90b3R5cGUuaW5pdCxmdC5meC5zdGVwPXt9O3ZhciBjZSx1ZSxkZT0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8scGU9L3F1ZXVlSG9va3MkLztmdC5BbmltYXRpb249ZnQuZXh0ZW5kKHEse3R3ZWVuZXJzOntcIipcIjpbZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmNyZWF0ZVR3ZWVuKHQsZSk7cmV0dXJuIG0oaS5lbGVtLHQsTHQuZXhlYyhlKSxpKSxpfV19LHR3ZWVuZXI6ZnVuY3Rpb24odCxlKXt1dCh0KT8oZT10LHQ9W1wiKlwiXSk6dD10Lm1hdGNoKFR0KTtmb3IodmFyIGksbj0wLHM9dC5sZW5ndGg7bjxzO24rKylpPXRbbl0scS50d2VlbmVyc1tpXT1xLnR3ZWVuZXJzW2ldfHxbXSxxLnR3ZWVuZXJzW2ldLnVuc2hpZnQoZSl9LHByZWZpbHRlcnM6W2Z1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG8sYSxyLGwsaCxjLHU9XCJ3aWR0aFwiaW4gZXx8XCJoZWlnaHRcImluIGUsZD10aGlzLHA9e30sZj10LnN0eWxlLGc9dC5ub2RlVHlwZSYmUnQodCksbT1BdC5nZXQodCxcImZ4c2hvd1wiKTtmb3IobiBpbiBpLnF1ZXVlfHwobnVsbD09KGE9ZnQuX3F1ZXVlSG9va3ModCxcImZ4XCIpKS51bnF1ZXVlZCYmKGEudW5xdWV1ZWQ9MCxyPWEuZW1wdHkuZmlyZSxhLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXthLnVucXVldWVkfHxyKCl9KSxhLnVucXVldWVkKyssZC5hbHdheXMoZnVuY3Rpb24oKXtkLmFsd2F5cyhmdW5jdGlvbigpe2EudW5xdWV1ZWQtLSxmdC5xdWV1ZSh0LFwiZnhcIikubGVuZ3RofHxhLmVtcHR5LmZpcmUoKX0pfSkpLGUpaWYocz1lW25dLGRlLnRlc3Qocykpe2lmKGRlbGV0ZSBlW25dLG89b3x8XCJ0b2dnbGVcIj09PXMscz09PShnP1wiaGlkZVwiOlwic2hvd1wiKSl7aWYoXCJzaG93XCIhPT1zfHwhbXx8dm9pZCAwPT09bVtuXSljb250aW51ZTtnPSEwfXBbbl09bSYmbVtuXXx8ZnQuc3R5bGUodCxuKX1pZigobD0hZnQuaXNFbXB0eU9iamVjdChlKSl8fCFmdC5pc0VtcHR5T2JqZWN0KHApKWZvcihuIGluIHUmJjE9PT10Lm5vZGVUeXBlJiYoaS5vdmVyZmxvdz1bZi5vdmVyZmxvdyxmLm92ZXJmbG93WCxmLm92ZXJmbG93WV0sbnVsbD09KGg9bSYmbS5kaXNwbGF5KSYmKGg9QXQuZ2V0KHQsXCJkaXNwbGF5XCIpKSxcIm5vbmVcIj09PShjPWZ0LmNzcyh0LFwiZGlzcGxheVwiKSkmJihoP2M9aDooYihbdF0sITApLGg9dC5zdHlsZS5kaXNwbGF5fHxoLGM9ZnQuY3NzKHQsXCJkaXNwbGF5XCIpLGIoW3RdKSkpLChcImlubGluZVwiPT09Y3x8XCJpbmxpbmUtYmxvY2tcIj09PWMmJm51bGwhPWgpJiZcIm5vbmVcIj09PWZ0LmNzcyh0LFwiZmxvYXRcIikmJihsfHwoZC5kb25lKGZ1bmN0aW9uKCl7Zi5kaXNwbGF5PWh9KSxudWxsPT1oJiYoYz1mLmRpc3BsYXksaD1cIm5vbmVcIj09PWM/XCJcIjpjKSksZi5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIpKSxpLm92ZXJmbG93JiYoZi5vdmVyZmxvdz1cImhpZGRlblwiLGQuYWx3YXlzKGZ1bmN0aW9uKCl7Zi5vdmVyZmxvdz1pLm92ZXJmbG93WzBdLGYub3ZlcmZsb3dYPWkub3ZlcmZsb3dbMV0sZi5vdmVyZmxvd1k9aS5vdmVyZmxvd1syXX0pKSxsPSExLHApbHx8KG0/XCJoaWRkZW5cImluIG0mJihnPW0uaGlkZGVuKTptPUF0LmFjY2Vzcyh0LFwiZnhzaG93XCIse2Rpc3BsYXk6aH0pLG8mJihtLmhpZGRlbj0hZyksZyYmYihbdF0sITApLGQuZG9uZShmdW5jdGlvbigpe2ZvcihuIGluIGd8fGIoW3RdKSxBdC5yZW1vdmUodCxcImZ4c2hvd1wiKSxwKWZ0LnN0eWxlKHQsbixwW25dKX0pKSxsPUIoZz9tW25dOjAsbixkKSxuIGluIG18fChtW25dPWwuc3RhcnQsZyYmKGwuZW5kPWwuc3RhcnQsbC5zdGFydD0wKSl9XSxwcmVmaWx0ZXI6ZnVuY3Rpb24odCxlKXtlP3EucHJlZmlsdGVycy51bnNoaWZ0KHQpOnEucHJlZmlsdGVycy5wdXNoKHQpfX0pLGZ0LnNwZWVkPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbj10JiZcIm9iamVjdFwiPT10eXBlb2YgdD9mdC5leHRlbmQoe30sdCk6e2NvbXBsZXRlOml8fCFpJiZlfHx1dCh0KSYmdCxkdXJhdGlvbjp0LGVhc2luZzppJiZlfHxlJiYhdXQoZSkmJmV9O3JldHVybiBmdC5meC5vZmY/bi5kdXJhdGlvbj0wOlwibnVtYmVyXCIhPXR5cGVvZiBuLmR1cmF0aW9uJiYobi5kdXJhdGlvbiBpbiBmdC5meC5zcGVlZHM/bi5kdXJhdGlvbj1mdC5meC5zcGVlZHNbbi5kdXJhdGlvbl06bi5kdXJhdGlvbj1mdC5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPW4ucXVldWUmJiEwIT09bi5xdWV1ZXx8KG4ucXVldWU9XCJmeFwiKSxuLm9sZD1uLmNvbXBsZXRlLG4uY29tcGxldGU9ZnVuY3Rpb24oKXt1dChuLm9sZCkmJm4ub2xkLmNhbGwodGhpcyksbi5xdWV1ZSYmZnQuZGVxdWV1ZSh0aGlzLG4ucXVldWUpfSxufSxmdC5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbih0LGUsaSxuKXtyZXR1cm4gdGhpcy5maWx0ZXIoUnQpLmNzcyhcIm9wYWNpdHlcIiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTplfSx0LGksbil9LGFuaW1hdGU6ZnVuY3Rpb24odCxlLGksbil7dmFyIHM9ZnQuaXNFbXB0eU9iamVjdCh0KSxvPWZ0LnNwZWVkKGUsaSxuKSxhPWZ1bmN0aW9uKCl7dmFyIGU9cSh0aGlzLGZ0LmV4dGVuZCh7fSx0KSxvKTsoc3x8QXQuZ2V0KHRoaXMsXCJmaW5pc2hcIikpJiZlLnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxzfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbih0LGUsaSl7dmFyIG49ZnVuY3Rpb24odCl7dmFyIGU9dC5zdG9wO2RlbGV0ZSB0LnN0b3AsZShpKX07cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQmJihpPWUsZT10LHQ9dm9pZCAwKSxlJiYhMSE9PXQmJnRoaXMucXVldWUodHx8XCJmeFwiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT0hMCxzPW51bGwhPXQmJnQrXCJxdWV1ZUhvb2tzXCIsbz1mdC50aW1lcnMsYT1BdC5nZXQodGhpcyk7aWYocylhW3NdJiZhW3NdLnN0b3AmJm4oYVtzXSk7ZWxzZSBmb3IocyBpbiBhKWFbc10mJmFbc10uc3RvcCYmcGUudGVzdChzKSYmbihhW3NdKTtmb3Iocz1vLmxlbmd0aDtzLS07KW9bc10uZWxlbSE9PXRoaXN8fG51bGwhPXQmJm9bc10ucXVldWUhPT10fHwob1tzXS5hbmltLnN0b3AoaSksZT0hMSxvLnNwbGljZShzLDEpKTshZSYmaXx8ZnQuZGVxdWV1ZSh0aGlzLHQpfSl9LGZpbmlzaDpmdW5jdGlvbih0KXtyZXR1cm4hMSE9PXQmJih0PXR8fFwiZnhcIiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsaT1BdC5nZXQodGhpcyksbj1pW3QrXCJxdWV1ZVwiXSxzPWlbdCtcInF1ZXVlSG9va3NcIl0sbz1mdC50aW1lcnMsYT1uP24ubGVuZ3RoOjA7Zm9yKGkuZmluaXNoPSEwLGZ0LnF1ZXVlKHRoaXMsdCxbXSkscyYmcy5zdG9wJiZzLnN0b3AuY2FsbCh0aGlzLCEwKSxlPW8ubGVuZ3RoO2UtLTspb1tlXS5lbGVtPT09dGhpcyYmb1tlXS5xdWV1ZT09PXQmJihvW2VdLmFuaW0uc3RvcCghMCksby5zcGxpY2UoZSwxKSk7Zm9yKGU9MDtlPGE7ZSsrKW5bZV0mJm5bZV0uZmluaXNoJiZuW2VdLmZpbmlzaC5jYWxsKHRoaXMpO2RlbGV0ZSBpLmZpbmlzaH0pfX0pLGZ0LmVhY2goW1widG9nZ2xlXCIsXCJzaG93XCIsXCJoaWRlXCJdLGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZnQuZm5bZV07ZnQuZm5bZV09ZnVuY3Rpb24odCxuLHMpe3JldHVybiBudWxsPT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHQ/aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKEYoZSwhMCksdCxuLHMpfX0pLGZ0LmVhY2goe3NsaWRlRG93bjpGKFwic2hvd1wiKSxzbGlkZVVwOkYoXCJoaWRlXCIpLHNsaWRlVG9nZ2xlOkYoXCJ0b2dnbGVcIiksZmFkZUluOntvcGFjaXR5Olwic2hvd1wifSxmYWRlT3V0OntvcGFjaXR5OlwiaGlkZVwifSxmYWRlVG9nZ2xlOntvcGFjaXR5OlwidG9nZ2xlXCJ9fSxmdW5jdGlvbih0LGUpe2Z0LmZuW3RdPWZ1bmN0aW9uKHQsaSxuKXtyZXR1cm4gdGhpcy5hbmltYXRlKGUsdCxpLG4pfX0pLGZ0LnRpbWVycz1bXSxmdC5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIHQsZT0wLGk9ZnQudGltZXJzO2ZvcihjZT1EYXRlLm5vdygpO2U8aS5sZW5ndGg7ZSsrKSh0PWlbZV0pKCl8fGlbZV0hPT10fHxpLnNwbGljZShlLS0sMSk7aS5sZW5ndGh8fGZ0LmZ4LnN0b3AoKSxjZT12b2lkIDB9LGZ0LmZ4LnRpbWVyPWZ1bmN0aW9uKHQpe2Z0LnRpbWVycy5wdXNoKHQpLGZ0LmZ4LnN0YXJ0KCl9LGZ0LmZ4LmludGVydmFsPTEzLGZ0LmZ4LnN0YXJ0PWZ1bmN0aW9uKCl7dWV8fCh1ZT0hMCwkKCkpfSxmdC5meC5zdG9wPWZ1bmN0aW9uKCl7dWU9bnVsbH0sZnQuZnguc3BlZWRzPXtzbG93OjYwMCxmYXN0OjIwMCxfZGVmYXVsdDo0MDB9LGZ0LmZuLmRlbGF5PWZ1bmN0aW9uKGUsaSl7cmV0dXJuIGU9ZnQuZngmJmZ0LmZ4LnNwZWVkc1tlXXx8ZSxpPWl8fFwiZnhcIix0aGlzLnF1ZXVlKGksZnVuY3Rpb24oaSxuKXt2YXIgcz10LnNldFRpbWVvdXQoaSxlKTtuLnN0b3A9ZnVuY3Rpb24oKXt0LmNsZWFyVGltZW91dChzKX19KX0sZnVuY3Rpb24oKXt2YXIgdD1aLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxlPVouY3JlYXRlRWxlbWVudChcInNlbGVjdFwiKS5hcHBlbmRDaGlsZChaLmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIikpO3QudHlwZT1cImNoZWNrYm94XCIsY3QuY2hlY2tPbj1cIlwiIT09dC52YWx1ZSxjdC5vcHRTZWxlY3RlZD1lLnNlbGVjdGVkLCh0PVouY3JlYXRlRWxlbWVudChcImlucHV0XCIpKS52YWx1ZT1cInRcIix0LnR5cGU9XCJyYWRpb1wiLGN0LnJhZGlvVmFsdWU9XCJ0XCI9PT10LnZhbHVlfSgpO3ZhciBmZSxnZT1mdC5leHByLmF0dHJIYW5kbGU7ZnQuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIEl0KHRoaXMsZnQuYXR0cix0LGUsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnQucmVtb3ZlQXR0cih0aGlzLHQpfSl9fSksZnQuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG89dC5ub2RlVHlwZTtpZigzIT09byYmOCE9PW8mJjIhPT1vKXJldHVybiB2b2lkIDA9PT10LmdldEF0dHJpYnV0ZT9mdC5wcm9wKHQsZSxpKTooMT09PW8mJmZ0LmlzWE1MRG9jKHQpfHwocz1mdC5hdHRySG9va3NbZS50b0xvd2VyQ2FzZSgpXXx8KGZ0LmV4cHIubWF0Y2guYm9vbC50ZXN0KGUpP2ZlOnZvaWQgMCkpLHZvaWQgMCE9PWk/bnVsbD09PWk/dm9pZCBmdC5yZW1vdmVBdHRyKHQsZSk6cyYmXCJzZXRcImluIHMmJnZvaWQgMCE9PShuPXMuc2V0KHQsaSxlKSk/bjoodC5zZXRBdHRyaWJ1dGUoZSxpK1wiXCIpLGkpOnMmJlwiZ2V0XCJpbiBzJiZudWxsIT09KG49cy5nZXQodCxlKSk/bjpudWxsPT0obj1mdC5maW5kLmF0dHIodCxlKSk/dm9pZCAwOm4pfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbih0LGUpe2lmKCFjdC5yYWRpb1ZhbHVlJiZcInJhZGlvXCI9PT1lJiZvKHQsXCJpbnB1dFwiKSl7dmFyIGk9dC52YWx1ZTtyZXR1cm4gdC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsZSksaSYmKHQudmFsdWU9aSksZX19fX0scmVtb3ZlQXR0cjpmdW5jdGlvbih0LGUpe3ZhciBpLG49MCxzPWUmJmUubWF0Y2goVHQpO2lmKHMmJjE9PT10Lm5vZGVUeXBlKWZvcig7aT1zW24rK107KXQucmVtb3ZlQXR0cmlidXRlKGkpfX0pLGZlPXtzZXQ6ZnVuY3Rpb24odCxlLGkpe3JldHVybiExPT09ZT9mdC5yZW1vdmVBdHRyKHQsaSk6dC5zZXRBdHRyaWJ1dGUoaSxpKSxpfX0sZnQuZWFjaChmdC5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cXHcrL2cpLGZ1bmN0aW9uKHQsZSl7dmFyIGk9Z2VbZV18fGZ0LmZpbmQuYXR0cjtnZVtlXT1mdW5jdGlvbih0LGUsbil7dmFyIHMsbyxhPWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbnx8KG89Z2VbYV0sZ2VbYV09cyxzPW51bGwhPWkodCxlLG4pP2E6bnVsbCxnZVthXT1vKSxzfX0pO3ZhciBtZT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLHZlPS9eKD86YXxhcmVhKSQvaTtmdC5mbi5leHRlbmQoe3Byb3A6ZnVuY3Rpb24odCxlKXtyZXR1cm4gSXQodGhpcyxmdC5wcm9wLHQsZSxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tmdC5wcm9wRml4W3RdfHx0XX0pfX0pLGZ0LmV4dGVuZCh7cHJvcDpmdW5jdGlvbih0LGUsaSl7dmFyIG4scyxvPXQubm9kZVR5cGU7aWYoMyE9PW8mJjghPT1vJiYyIT09bylyZXR1cm4gMT09PW8mJmZ0LmlzWE1MRG9jKHQpfHwoZT1mdC5wcm9wRml4W2VdfHxlLHM9ZnQucHJvcEhvb2tzW2VdKSx2b2lkIDAhPT1pP3MmJlwic2V0XCJpbiBzJiZ2b2lkIDAhPT0obj1zLnNldCh0LGksZSkpP246dFtlXT1pOnMmJlwiZ2V0XCJpbiBzJiZudWxsIT09KG49cy5nZXQodCxlKSk/bjp0W2VdfSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9ZnQuZmluZC5hdHRyKHQsXCJ0YWJpbmRleFwiKTtyZXR1cm4gZT9wYXJzZUludChlLDEwKTptZS50ZXN0KHQubm9kZU5hbWUpfHx2ZS50ZXN0KHQubm9kZU5hbWUpJiZ0LmhyZWY/MDotMX19fSxwcm9wRml4Ontmb3I6XCJodG1sRm9yXCIsY2xhc3M6XCJjbGFzc05hbWVcIn19KSxjdC5vcHRTZWxlY3RlZHx8KGZ0LnByb3BIb29rcy5zZWxlY3RlZD17Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlPXQucGFyZW50Tm9kZTtyZXR1cm4gZSYmZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxudWxsfSxzZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dC5wYXJlbnROb2RlO2UmJihlLnNlbGVjdGVkSW5kZXgsZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksZnQuZWFjaChbXCJ0YWJJbmRleFwiLFwicmVhZE9ubHlcIixcIm1heExlbmd0aFwiLFwiY2VsbFNwYWNpbmdcIixcImNlbGxQYWRkaW5nXCIsXCJyb3dTcGFuXCIsXCJjb2xTcGFuXCIsXCJ1c2VNYXBcIixcImZyYW1lQm9yZGVyXCIsXCJjb250ZW50RWRpdGFibGVcIl0sZnVuY3Rpb24oKXtmdC5wcm9wRml4W3RoaXMudG9Mb3dlckNhc2UoKV09dGhpc30pLGZ0LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbyxhLHIsbD0wO2lmKHV0KHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7ZnQodGhpcykuYWRkQ2xhc3ModC5jYWxsKHRoaXMsZSxZKHRoaXMpKSl9KTtpZigoZT1WKHQpKS5sZW5ndGgpZm9yKDtpPXRoaXNbbCsrXTspaWYocz1ZKGkpLG49MT09PWkubm9kZVR5cGUmJlwiIFwiK1UocykrXCIgXCIpe2ZvcihhPTA7bz1lW2ErK107KW4uaW5kZXhPZihcIiBcIitvK1wiIFwiKTwwJiYobis9bytcIiBcIik7cyE9PShyPVUobikpJiZpLnNldEF0dHJpYnV0ZShcImNsYXNzXCIscil9cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLG8sYSxyLGw9MDtpZih1dCh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Z0KHRoaXMpLnJlbW92ZUNsYXNzKHQuY2FsbCh0aGlzLGUsWSh0aGlzKSkpfSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuYXR0cihcImNsYXNzXCIsXCJcIik7aWYoKGU9Vih0KSkubGVuZ3RoKWZvcig7aT10aGlzW2wrK107KWlmKHM9WShpKSxuPTE9PT1pLm5vZGVUeXBlJiZcIiBcIitVKHMpK1wiIFwiKXtmb3IoYT0wO289ZVthKytdOylmb3IoO24uaW5kZXhPZihcIiBcIitvK1wiIFwiKT4tMTspbj1uLnJlcGxhY2UoXCIgXCIrbytcIiBcIixcIiBcIik7cyE9PShyPVUobikpJiZpLnNldEF0dHJpYnV0ZShcImNsYXNzXCIscil9cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dHlwZW9mIHQsbj1cInN0cmluZ1wiPT09aXx8QXJyYXkuaXNBcnJheSh0KTtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIGUmJm4/ZT90aGlzLmFkZENsYXNzKHQpOnRoaXMucmVtb3ZlQ2xhc3ModCk6dXQodCk/dGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2Z0KHRoaXMpLnRvZ2dsZUNsYXNzKHQuY2FsbCh0aGlzLGksWSh0aGlzKSxlKSxlKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlLHMsbyxhO2lmKG4pZm9yKHM9MCxvPWZ0KHRoaXMpLGE9Vih0KTtlPWFbcysrXTspby5oYXNDbGFzcyhlKT9vLnJlbW92ZUNsYXNzKGUpOm8uYWRkQ2xhc3MoZSk7ZWxzZSB2b2lkIDAhPT10JiZcImJvb2xlYW5cIiE9PWl8fCgoZT1ZKHRoaXMpKSYmQXQuc2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIsZSksdGhpcy5zZXRBdHRyaWJ1dGUmJnRoaXMuc2V0QXR0cmlidXRlKFwiY2xhc3NcIixlfHwhMT09PXQ/XCJcIjpBdC5nZXQodGhpcyxcIl9fY2xhc3NOYW1lX19cIil8fFwiXCIpKX0pfSxoYXNDbGFzczpmdW5jdGlvbih0KXt2YXIgZSxpLG49MDtmb3IoZT1cIiBcIit0K1wiIFwiO2k9dGhpc1tuKytdOylpZigxPT09aS5ub2RlVHlwZSYmKFwiIFwiK1UoWShpKSkrXCIgXCIpLmluZGV4T2YoZSk+LTEpcmV0dXJuITA7cmV0dXJuITF9fSk7dmFyIGJlPS9cXHIvZztmdC5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbih0KXt2YXIgZSxpLG4scz10aGlzWzBdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXV0KHQpLHRoaXMuZWFjaChmdW5jdGlvbihpKXt2YXIgczsxPT09dGhpcy5ub2RlVHlwZSYmKG51bGw9PShzPW4/dC5jYWxsKHRoaXMsaSxmdCh0aGlzKS52YWwoKSk6dCk/cz1cIlwiOlwibnVtYmVyXCI9PXR5cGVvZiBzP3MrPVwiXCI6QXJyYXkuaXNBcnJheShzKSYmKHM9ZnQubWFwKHMsZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/XCJcIjp0K1wiXCJ9KSksKGU9ZnQudmFsSG9va3NbdGhpcy50eXBlXXx8ZnQudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJlwic2V0XCJpbiBlJiZ2b2lkIDAhPT1lLnNldCh0aGlzLHMsXCJ2YWx1ZVwiKXx8KHRoaXMudmFsdWU9cykpfSkpOnM/KGU9ZnQudmFsSG9va3Nbcy50eXBlXXx8ZnQudmFsSG9va3Nbcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJlwiZ2V0XCJpbiBlJiZ2b2lkIDAhPT0oaT1lLmdldChzLFwidmFsdWVcIikpP2k6XCJzdHJpbmdcIj09dHlwZW9mKGk9cy52YWx1ZSk/aS5yZXBsYWNlKGJlLFwiXCIpOm51bGw9PWk/XCJcIjppOnZvaWQgMH19KSxmdC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbih0KXt2YXIgZT1mdC5maW5kLmF0dHIodCxcInZhbHVlXCIpO3JldHVybiBudWxsIT1lP2U6VShmdC50ZXh0KHQpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzPXQub3B0aW9ucyxhPXQuc2VsZWN0ZWRJbmRleCxyPVwic2VsZWN0LW9uZVwiPT09dC50eXBlLGw9cj9udWxsOltdLGg9cj9hKzE6cy5sZW5ndGg7Zm9yKG49YTwwP2g6cj9hOjA7bjxoO24rKylpZigoKGk9c1tuXSkuc2VsZWN0ZWR8fG49PT1hKSYmIWkuZGlzYWJsZWQmJighaS5wYXJlbnROb2RlLmRpc2FibGVkfHwhbyhpLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKGU9ZnQoaSkudmFsKCkscilyZXR1cm4gZTtsLnB1c2goZSl9cmV0dXJuIGx9LHNldDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSxuLHM9dC5vcHRpb25zLG89ZnQubWFrZUFycmF5KGUpLGE9cy5sZW5ndGg7YS0tOykoKG49c1thXSkuc2VsZWN0ZWQ9ZnQuaW5BcnJheShmdC52YWxIb29rcy5vcHRpb24uZ2V0KG4pLG8pPi0xKSYmKGk9ITApO3JldHVybiBpfHwodC5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksZnQuZWFjaChbXCJyYWRpb1wiLFwiY2hlY2tib3hcIl0sZnVuY3Rpb24oKXtmdC52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKHQsZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gdC5jaGVja2VkPWZ0LmluQXJyYXkoZnQodCkudmFsKCksZSk+LTF9fSxjdC5jaGVja09ufHwoZnQudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT09dC5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKT9cIm9uXCI6dC52YWx1ZX0pfSksY3QuZm9jdXNpbj1cIm9uZm9jdXNpblwiaW4gdDt2YXIgX2U9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLHllPWZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9O2Z0LmV4dGVuZChmdC5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbihlLGksbixzKXt2YXIgbyxhLHIsbCxoLGMsdSxkLHA9W258fFpdLGY9cnQuY2FsbChlLFwidHlwZVwiKT9lLnR5cGU6ZSxnPXJ0LmNhbGwoZSxcIm5hbWVzcGFjZVwiKT9lLm5hbWVzcGFjZS5zcGxpdChcIi5cIik6W107aWYoYT1kPXI9bj1ufHxaLDMhPT1uLm5vZGVUeXBlJiY4IT09bi5ub2RlVHlwZSYmIV9lLnRlc3QoZitmdC5ldmVudC50cmlnZ2VyZWQpJiYoZi5pbmRleE9mKFwiLlwiKT4tMSYmKGc9Zi5zcGxpdChcIi5cIiksZj1nLnNoaWZ0KCksZy5zb3J0KCkpLGg9Zi5pbmRleE9mKFwiOlwiKTwwJiZcIm9uXCIrZiwoZT1lW2Z0LmV4cGFuZG9dP2U6bmV3IGZ0LkV2ZW50KGYsXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9cz8yOjMsZS5uYW1lc3BhY2U9Zy5qb2luKFwiLlwiKSxlLnJuYW1lc3BhY2U9ZS5uYW1lc3BhY2U/bmV3IFJlZ0V4cChcIihefFxcXFwuKVwiK2cuam9pbihcIlxcXFwuKD86LipcXFxcLnwpXCIpK1wiKFxcXFwufCQpXCIpOm51bGwsZS5yZXN1bHQ9dm9pZCAwLGUudGFyZ2V0fHwoZS50YXJnZXQ9biksaT1udWxsPT1pP1tlXTpmdC5tYWtlQXJyYXkoaSxbZV0pLHU9ZnQuZXZlbnQuc3BlY2lhbFtmXXx8e30sc3x8IXUudHJpZ2dlcnx8ITEhPT11LnRyaWdnZXIuYXBwbHkobixpKSkpe2lmKCFzJiYhdS5ub0J1YmJsZSYmIWR0KG4pKXtmb3IobD11LmRlbGVnYXRlVHlwZXx8ZixfZS50ZXN0KGwrZil8fChhPWEucGFyZW50Tm9kZSk7YTthPWEucGFyZW50Tm9kZSlwLnB1c2goYSkscj1hO3I9PT0obi5vd25lckRvY3VtZW50fHxaKSYmcC5wdXNoKHIuZGVmYXVsdFZpZXd8fHIucGFyZW50V2luZG93fHx0KX1mb3Iobz0wOyhhPXBbbysrXSkmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWQ9YSxlLnR5cGU9bz4xP2w6dS5iaW5kVHlwZXx8ZiwoYz0oQXQuZ2V0KGEsXCJldmVudHNcIil8fHt9KVtlLnR5cGVdJiZBdC5nZXQoYSxcImhhbmRsZVwiKSkmJmMuYXBwbHkoYSxpKSwoYz1oJiZhW2hdKSYmYy5hcHBseSYmTXQoYSkmJihlLnJlc3VsdD1jLmFwcGx5KGEsaSksITE9PT1lLnJlc3VsdCYmZS5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gZS50eXBlPWYsc3x8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8dS5fZGVmYXVsdCYmITEhPT11Ll9kZWZhdWx0LmFwcGx5KHAucG9wKCksaSl8fCFNdChuKXx8aCYmdXQobltmXSkmJiFkdChuKSYmKChyPW5baF0pJiYobltoXT1udWxsKSxmdC5ldmVudC50cmlnZ2VyZWQ9ZixlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmQuYWRkRXZlbnRMaXN0ZW5lcihmLHllKSxuW2ZdKCksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZkLnJlbW92ZUV2ZW50TGlzdGVuZXIoZix5ZSksZnQuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxyJiYobltoXT1yKSksZS5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG49ZnQuZXh0ZW5kKG5ldyBmdC5FdmVudCxpLHt0eXBlOnQsaXNTaW11bGF0ZWQ6ITB9KTtmdC5ldmVudC50cmlnZ2VyKG4sbnVsbCxlKX19KSxmdC5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnQuZXZlbnQudHJpZ2dlcih0LGUsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzWzBdO2lmKGkpcmV0dXJuIGZ0LmV2ZW50LnRyaWdnZXIodCxlLGksITApfX0pLGN0LmZvY3VzaW58fGZ0LmVhY2goe2ZvY3VzOlwiZm9jdXNpblwiLGJsdXI6XCJmb2N1c291dFwifSxmdW5jdGlvbih0LGUpe3ZhciBpPWZ1bmN0aW9uKHQpe2Z0LmV2ZW50LnNpbXVsYXRlKGUsdC50YXJnZXQsZnQuZXZlbnQuZml4KHQpKX07ZnQuZXZlbnQuc3BlY2lhbFtlXT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMscz1BdC5hY2Nlc3MobixlKTtzfHxuLmFkZEV2ZW50TGlzdGVuZXIodCxpLCEwKSxBdC5hY2Nlc3MobixlLChzfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgbj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMscz1BdC5hY2Nlc3MobixlKS0xO3M/QXQuYWNjZXNzKG4sZSxzKToobi5yZW1vdmVFdmVudExpc3RlbmVyKHQsaSwhMCksQXQucmVtb3ZlKG4sZSkpfX19KTt2YXIgd2U9dC5sb2NhdGlvbix4ZT1EYXRlLm5vdygpLENlPS9cXD8vO2Z0LnBhcnNlWE1MPWZ1bmN0aW9uKGUpe3ZhciBpO2lmKCFlfHxcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm4gbnVsbDt0cnl7aT0obmV3IHQuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoZSxcInRleHQveG1sXCIpfWNhdGNoKHQpe2k9dm9pZCAwfXJldHVybiBpJiYhaS5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpLmxlbmd0aHx8ZnQuZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrZSksaX07dmFyIGtlPS9cXFtcXF0kLyxUZT0vXFxyP1xcbi9nLERlPS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxTZT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7ZnQucGFyYW09ZnVuY3Rpb24odCxlKXt2YXIgaSxuPVtdLHM9ZnVuY3Rpb24odCxlKXt2YXIgaT11dChlKT9lKCk6ZTtuW24ubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQodCkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PWk/XCJcIjppKX07aWYoQXJyYXkuaXNBcnJheSh0KXx8dC5qcXVlcnkmJiFmdC5pc1BsYWluT2JqZWN0KHQpKWZ0LmVhY2godCxmdW5jdGlvbigpe3ModGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IoaSBpbiB0KUsoaSx0W2ldLGUscyk7cmV0dXJuIG4uam9pbihcIiZcIil9LGZ0LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGZ0LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZnQucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIHQ/ZnQubWFrZUFycmF5KHQpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgdD10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIWZ0KHRoaXMpLmlzKFwiOmRpc2FibGVkXCIpJiZTZS50ZXN0KHRoaXMubm9kZU5hbWUpJiYhRGUudGVzdCh0KSYmKHRoaXMuY2hlY2tlZHx8IUZ0LnRlc3QodCkpfSkubWFwKGZ1bmN0aW9uKHQsZSl7dmFyIGk9ZnQodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PWk/bnVsbDpBcnJheS5pc0FycmF5KGkpP2Z0Lm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybntuYW1lOmUubmFtZSx2YWx1ZTp0LnJlcGxhY2UoVGUsXCJcXHJcXG5cIil9fSk6e25hbWU6ZS5uYW1lLHZhbHVlOmkucmVwbGFjZShUZSxcIlxcclxcblwiKX19KS5nZXQoKX19KTt2YXIgSWU9LyUyMC9nLFBlPS8jLiokLyxFZT0vKFs/Jl0pXz1bXiZdKi8sTWU9L14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9nbSxBZT0vXig/OkdFVHxIRUFEKSQvLE9lPS9eXFwvXFwvLyxOZT17fSxIZT17fSx6ZT1cIiovXCIuY29uY2F0KFwiKlwiKSxMZT1aLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO0xlLmhyZWY9d2UuaHJlZixmdC5leHRlbmQoe2FjdGl2ZTowLGxhc3RNb2RpZmllZDp7fSxldGFnOnt9LGFqYXhTZXR0aW5nczp7dXJsOndlLmhyZWYsdHlwZTpcIkdFVFwiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdCh3ZS5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOlwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsYWNjZXB0czp7XCIqXCI6emUsdGV4dDpcInRleHQvcGxhaW5cIixodG1sOlwidGV4dC9odG1sXCIseG1sOlwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLGpzb246XCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIn0sY29udGVudHM6e3htbDovXFxieG1sXFxiLyxodG1sOi9cXGJodG1sLyxqc29uOi9cXGJqc29uXFxiL30scmVzcG9uc2VGaWVsZHM6e3htbDpcInJlc3BvbnNlWE1MXCIsdGV4dDpcInJlc3BvbnNlVGV4dFwiLGpzb246XCJyZXNwb25zZUpTT05cIn0sY29udmVydGVyczp7XCIqIHRleHRcIjpTdHJpbmcsXCJ0ZXh0IGh0bWxcIjohMCxcInRleHQganNvblwiOkpTT04ucGFyc2UsXCJ0ZXh0IHhtbFwiOmZ0LnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7dXJsOiEwLGNvbnRleHQ6ITB9fSxhamF4U2V0dXA6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT9RKFEodCxmdC5hamF4U2V0dGluZ3MpLGUpOlEoZnQuYWpheFNldHRpbmdzLHQpfSxhamF4UHJlZmlsdGVyOlgoTmUpLGFqYXhUcmFuc3BvcnQ6WChIZSksYWpheDpmdW5jdGlvbihlLGkpe2Z1bmN0aW9uIG4oZSxpLG4scil7dmFyIGgsZCxwLHksdyx4PWk7Y3x8KGM9ITAsbCYmdC5jbGVhclRpbWVvdXQobCkscz12b2lkIDAsYT1yfHxcIlwiLEMucmVhZHlTdGF0ZT1lPjA/NDowLGg9ZT49MjAwJiZlPDMwMHx8MzA0PT09ZSxuJiYoeT1mdW5jdGlvbih0LGUsaSl7Zm9yKHZhciBuLHMsbyxhLHI9dC5jb250ZW50cyxsPXQuZGF0YVR5cGVzO1wiKlwiPT09bFswXTspbC5zaGlmdCgpLHZvaWQgMD09PW4mJihuPXQubWltZVR5cGV8fGUuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIikpO2lmKG4pZm9yKHMgaW4gcilpZihyW3NdJiZyW3NdLnRlc3Qobikpe2wudW5zaGlmdChzKTticmVha31pZihsWzBdaW4gaSlvPWxbMF07ZWxzZXtmb3IocyBpbiBpKXtpZighbFswXXx8dC5jb252ZXJ0ZXJzW3MrXCIgXCIrbFswXV0pe289czticmVha31hfHwoYT1zKX1vPW98fGF9aWYobylyZXR1cm4gbyE9PWxbMF0mJmwudW5zaGlmdChvKSxpW29dfShmLEMsbikpLHk9ZnVuY3Rpb24odCxlLGksbil7dmFyIHMsbyxhLHIsbCxoPXt9LGM9dC5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihhIGluIHQuY29udmVydGVycyloW2EudG9Mb3dlckNhc2UoKV09dC5jb252ZXJ0ZXJzW2FdO2ZvcihvPWMuc2hpZnQoKTtvOylpZih0LnJlc3BvbnNlRmllbGRzW29dJiYoaVt0LnJlc3BvbnNlRmllbGRzW29dXT1lKSwhbCYmbiYmdC5kYXRhRmlsdGVyJiYoZT10LmRhdGFGaWx0ZXIoZSx0LmRhdGFUeXBlKSksbD1vLG89Yy5zaGlmdCgpKWlmKFwiKlwiPT09bylvPWw7ZWxzZSBpZihcIipcIiE9PWwmJmwhPT1vKXtpZighKGE9aFtsK1wiIFwiK29dfHxoW1wiKiBcIitvXSkpZm9yKHMgaW4gaClpZigocj1zLnNwbGl0KFwiIFwiKSlbMV09PT1vJiYoYT1oW2wrXCIgXCIrclswXV18fGhbXCIqIFwiK3JbMF1dKSl7ITA9PT1hP2E9aFtzXTohMCE9PWhbc10mJihvPXJbMF0sYy51bnNoaWZ0KHJbMV0pKTticmVha31pZighMCE9PWEpaWYoYSYmdC50aHJvd3MpZT1hKGUpO2Vsc2UgdHJ5e2U9YShlKX1jYXRjaCh0KXtyZXR1cm57c3RhdGU6XCJwYXJzZXJlcnJvclwiLGVycm9yOmE/dDpcIk5vIGNvbnZlcnNpb24gZnJvbSBcIitsK1wiIHRvIFwiK299fX1yZXR1cm57c3RhdGU6XCJzdWNjZXNzXCIsZGF0YTplfX0oZix5LEMsaCksaD8oZi5pZk1vZGlmaWVkJiYoKHc9Qy5nZXRSZXNwb25zZUhlYWRlcihcIkxhc3QtTW9kaWZpZWRcIikpJiYoZnQubGFzdE1vZGlmaWVkW29dPXcpLCh3PUMuZ2V0UmVzcG9uc2VIZWFkZXIoXCJldGFnXCIpKSYmKGZ0LmV0YWdbb109dykpLDIwND09PWV8fFwiSEVBRFwiPT09Zi50eXBlP3g9XCJub2NvbnRlbnRcIjozMDQ9PT1lP3g9XCJub3Rtb2RpZmllZFwiOih4PXkuc3RhdGUsZD15LmRhdGEsaD0hKHA9eS5lcnJvcikpKToocD14LCFlJiZ4fHwoeD1cImVycm9yXCIsZTwwJiYoZT0wKSkpLEMuc3RhdHVzPWUsQy5zdGF0dXNUZXh0PShpfHx4KStcIlwiLGg/di5yZXNvbHZlV2l0aChnLFtkLHgsQ10pOnYucmVqZWN0V2l0aChnLFtDLHgscF0pLEMuc3RhdHVzQ29kZShfKSxfPXZvaWQgMCx1JiZtLnRyaWdnZXIoaD9cImFqYXhTdWNjZXNzXCI6XCJhamF4RXJyb3JcIixbQyxmLGg/ZDpwXSksYi5maXJlV2l0aChnLFtDLHhdKSx1JiYobS50cmlnZ2VyKFwiYWpheENvbXBsZXRlXCIsW0MsZl0pLC0tZnQuYWN0aXZlfHxmdC5ldmVudC50cmlnZ2VyKFwiYWpheFN0b3BcIikpKX1cIm9iamVjdFwiPT10eXBlb2YgZSYmKGk9ZSxlPXZvaWQgMCksaT1pfHx7fTt2YXIgcyxvLGEscixsLGgsYyx1LGQscCxmPWZ0LmFqYXhTZXR1cCh7fSxpKSxnPWYuY29udGV4dHx8ZixtPWYuY29udGV4dCYmKGcubm9kZVR5cGV8fGcuanF1ZXJ5KT9mdChnKTpmdC5ldmVudCx2PWZ0LkRlZmVycmVkKCksYj1mdC5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSxfPWYuc3RhdHVzQ29kZXx8e30seT17fSx3PXt9LHg9XCJjYW5jZWxlZFwiLEM9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbih0KXt2YXIgZTtpZihjKXtpZighcilmb3Iocj17fTtlPU1lLmV4ZWMoYSk7KXJbZVsxXS50b0xvd2VyQ2FzZSgpXT1lWzJdO2U9clt0LnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT1lP251bGw6ZX0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGM/YTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PWMmJih0PXdbdC50b0xvd2VyQ2FzZSgpXT13W3QudG9Mb3dlckNhc2UoKV18fHQseVt0XT1lKSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT1jJiYoZi5taW1lVHlwZT10KSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQpaWYoYylDLmFsd2F5cyh0W0Muc3RhdHVzXSk7ZWxzZSBmb3IoZSBpbiB0KV9bZV09W19bZV0sdFtlXV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKHQpe3ZhciBlPXR8fHg7cmV0dXJuIHMmJnMuYWJvcnQoZSksbigwLGUpLHRoaXN9fTtpZih2LnByb21pc2UoQyksZi51cmw9KChlfHxmLnVybHx8d2UuaHJlZikrXCJcIikucmVwbGFjZShPZSx3ZS5wcm90b2NvbCtcIi8vXCIpLGYudHlwZT1pLm1ldGhvZHx8aS50eXBlfHxmLm1ldGhvZHx8Zi50eXBlLGYuZGF0YVR5cGVzPShmLmRhdGFUeXBlfHxcIipcIikudG9Mb3dlckNhc2UoKS5tYXRjaChUdCl8fFtcIlwiXSxudWxsPT1mLmNyb3NzRG9tYWluKXtoPVouY3JlYXRlRWxlbWVudChcImFcIik7dHJ5e2guaHJlZj1mLnVybCxoLmhyZWY9aC5ocmVmLGYuY3Jvc3NEb21haW49TGUucHJvdG9jb2wrXCIvL1wiK0xlLmhvc3QhPWgucHJvdG9jb2wrXCIvL1wiK2guaG9zdH1jYXRjaCh0KXtmLmNyb3NzRG9tYWluPSEwfX1pZihmLmRhdGEmJmYucHJvY2Vzc0RhdGEmJlwic3RyaW5nXCIhPXR5cGVvZiBmLmRhdGEmJihmLmRhdGE9ZnQucGFyYW0oZi5kYXRhLGYudHJhZGl0aW9uYWwpKSxHKE5lLGYsaSxDKSxjKXJldHVybiBDO2ZvcihkIGluKHU9ZnQuZXZlbnQmJmYuZ2xvYmFsKSYmMD09ZnQuYWN0aXZlKysmJmZ0LmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIiksZi50eXBlPWYudHlwZS50b1VwcGVyQ2FzZSgpLGYuaGFzQ29udGVudD0hQWUudGVzdChmLnR5cGUpLG89Zi51cmwucmVwbGFjZShQZSxcIlwiKSxmLmhhc0NvbnRlbnQ/Zi5kYXRhJiZmLnByb2Nlc3NEYXRhJiYwPT09KGYuY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJihmLmRhdGE9Zi5kYXRhLnJlcGxhY2UoSWUsXCIrXCIpKToocD1mLnVybC5zbGljZShvLmxlbmd0aCksZi5kYXRhJiYoZi5wcm9jZXNzRGF0YXx8XCJzdHJpbmdcIj09dHlwZW9mIGYuZGF0YSkmJihvKz0oQ2UudGVzdChvKT9cIiZcIjpcIj9cIikrZi5kYXRhLGRlbGV0ZSBmLmRhdGEpLCExPT09Zi5jYWNoZSYmKG89by5yZXBsYWNlKEVlLFwiJDFcIikscD0oQ2UudGVzdChvKT9cIiZcIjpcIj9cIikrXCJfPVwiK3hlKysrcCksZi51cmw9bytwKSxmLmlmTW9kaWZpZWQmJihmdC5sYXN0TW9kaWZpZWRbb10mJkMuc2V0UmVxdWVzdEhlYWRlcihcIklmLU1vZGlmaWVkLVNpbmNlXCIsZnQubGFzdE1vZGlmaWVkW29dKSxmdC5ldGFnW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Ob25lLU1hdGNoXCIsZnQuZXRhZ1tvXSkpLChmLmRhdGEmJmYuaGFzQ29udGVudCYmITEhPT1mLmNvbnRlbnRUeXBlfHxpLmNvbnRlbnRUeXBlKSYmQy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsZi5jb250ZW50VHlwZSksQy5zZXRSZXF1ZXN0SGVhZGVyKFwiQWNjZXB0XCIsZi5kYXRhVHlwZXNbMF0mJmYuYWNjZXB0c1tmLmRhdGFUeXBlc1swXV0/Zi5hY2NlcHRzW2YuZGF0YVR5cGVzWzBdXSsoXCIqXCIhPT1mLmRhdGFUeXBlc1swXT9cIiwgXCIremUrXCI7IHE9MC4wMVwiOlwiXCIpOmYuYWNjZXB0c1tcIipcIl0pLGYuaGVhZGVycylDLnNldFJlcXVlc3RIZWFkZXIoZCxmLmhlYWRlcnNbZF0pO2lmKGYuYmVmb3JlU2VuZCYmKCExPT09Zi5iZWZvcmVTZW5kLmNhbGwoZyxDLGYpfHxjKSlyZXR1cm4gQy5hYm9ydCgpO2lmKHg9XCJhYm9ydFwiLGIuYWRkKGYuY29tcGxldGUpLEMuZG9uZShmLnN1Y2Nlc3MpLEMuZmFpbChmLmVycm9yKSxzPUcoSGUsZixpLEMpKXtpZihDLnJlYWR5U3RhdGU9MSx1JiZtLnRyaWdnZXIoXCJhamF4U2VuZFwiLFtDLGZdKSxjKXJldHVybiBDO2YuYXN5bmMmJmYudGltZW91dD4wJiYobD10LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtDLmFib3J0KFwidGltZW91dFwiKX0sZi50aW1lb3V0KSk7dHJ5e2M9ITEscy5zZW5kKHksbil9Y2F0Y2godCl7aWYoYyl0aHJvdyB0O24oLTEsdCl9fWVsc2UgbigtMSxcIk5vIFRyYW5zcG9ydFwiKTtyZXR1cm4gQ30sZ2V0SlNPTjpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIGZ0LmdldCh0LGUsaSxcImpzb25cIil9LGdldFNjcmlwdDpmdW5jdGlvbih0LGUpe3JldHVybiBmdC5nZXQodCx2b2lkIDAsZSxcInNjcmlwdFwiKX19KSxmdC5lYWNoKFtcImdldFwiLFwicG9zdFwiXSxmdW5jdGlvbih0LGUpe2Z0W2VdPWZ1bmN0aW9uKHQsaSxuLHMpe3JldHVybiB1dChpKSYmKHM9c3x8bixuPWksaT12b2lkIDApLGZ0LmFqYXgoZnQuZXh0ZW5kKHt1cmw6dCx0eXBlOmUsZGF0YVR5cGU6cyxkYXRhOmksc3VjY2VzczpufSxmdC5pc1BsYWluT2JqZWN0KHQpJiZ0KSl9fSksZnQuX2V2YWxVcmw9ZnVuY3Rpb24odCl7cmV0dXJuIGZ0LmFqYXgoe3VybDp0LHR5cGU6XCJHRVRcIixkYXRhVHlwZTpcInNjcmlwdFwiLGNhY2hlOiEwLGFzeW5jOiExLGdsb2JhbDohMSx0aHJvd3M6ITB9KX0sZnQuZm4uZXh0ZW5kKHt3cmFwQWxsOmZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0aGlzWzBdJiYodXQodCkmJih0PXQuY2FsbCh0aGlzWzBdKSksZT1mdCh0LHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmZS5pbnNlcnRCZWZvcmUodGhpc1swXSksZS5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpczt0LmZpcnN0RWxlbWVudENoaWxkOyl0PXQuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIHR9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbih0KXtyZXR1cm4gdXQodCk/dGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2Z0KHRoaXMpLndyYXBJbm5lcih0LmNhbGwodGhpcyxlKSl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1mdCh0aGlzKSxpPWUuY29udGVudHMoKTtpLmxlbmd0aD9pLndyYXBBbGwodCk6ZS5hcHBlbmQodCl9KX0sd3JhcDpmdW5jdGlvbih0KXt2YXIgZT11dCh0KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe2Z0KHRoaXMpLndyYXBBbGwoZT90LmNhbGwodGhpcyxpKTp0KX0pfSx1bndyYXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGFyZW50KHQpLm5vdChcImJvZHlcIikuZWFjaChmdW5jdGlvbigpe2Z0KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KSx0aGlzfX0pLGZ0LmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24odCl7cmV0dXJuIWZ0LmV4cHIucHNldWRvcy52aXNpYmxlKHQpfSxmdC5leHByLnBzZXVkb3MudmlzaWJsZT1mdW5jdGlvbih0KXtyZXR1cm4hISh0Lm9mZnNldFdpZHRofHx0Lm9mZnNldEhlaWdodHx8dC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCl9LGZ0LmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyB0LlhNTEh0dHBSZXF1ZXN0fWNhdGNoKHQpe319O3ZhciBXZT17MDoyMDAsMTIyMzoyMDR9LFJlPWZ0LmFqYXhTZXR0aW5ncy54aHIoKTtjdC5jb3JzPSEhUmUmJlwid2l0aENyZWRlbnRpYWxzXCJpbiBSZSxjdC5hamF4PVJlPSEhUmUsZnQuYWpheFRyYW5zcG9ydChmdW5jdGlvbihlKXt2YXIgaSxuO2lmKGN0LmNvcnN8fFJlJiYhZS5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihzLG8pe3ZhciBhLHI9ZS54aHIoKTtpZihyLm9wZW4oZS50eXBlLGUudXJsLGUuYXN5bmMsZS51c2VybmFtZSxlLnBhc3N3b3JkKSxlLnhockZpZWxkcylmb3IoYSBpbiBlLnhockZpZWxkcylyW2FdPWUueGhyRmllbGRzW2FdO2ZvcihhIGluIGUubWltZVR5cGUmJnIub3ZlcnJpZGVNaW1lVHlwZSYmci5vdmVycmlkZU1pbWVUeXBlKGUubWltZVR5cGUpLGUuY3Jvc3NEb21haW58fHNbXCJYLVJlcXVlc3RlZC1XaXRoXCJdfHwoc1tcIlgtUmVxdWVzdGVkLVdpdGhcIl09XCJYTUxIdHRwUmVxdWVzdFwiKSxzKXIuc2V0UmVxdWVzdEhlYWRlcihhLHNbYV0pO2k9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7aSYmKGk9bj1yLm9ubG9hZD1yLm9uZXJyb3I9ci5vbmFib3J0PXIub250aW1lb3V0PXIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsXCJhYm9ydFwiPT09dD9yLmFib3J0KCk6XCJlcnJvclwiPT09dD9cIm51bWJlclwiIT10eXBlb2Ygci5zdGF0dXM/bygwLFwiZXJyb3JcIik6byhyLnN0YXR1cyxyLnN0YXR1c1RleHQpOm8oV2Vbci5zdGF0dXNdfHxyLnN0YXR1cyxyLnN0YXR1c1RleHQsXCJ0ZXh0XCIhPT0oci5yZXNwb25zZVR5cGV8fFwidGV4dFwiKXx8XCJzdHJpbmdcIiE9dHlwZW9mIHIucmVzcG9uc2VUZXh0P3tiaW5hcnk6ci5yZXNwb25zZX06e3RleHQ6ci5yZXNwb25zZVRleHR9LHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LHIub25sb2FkPWkoKSxuPXIub25lcnJvcj1yLm9udGltZW91dD1pKFwiZXJyb3JcIiksdm9pZCAwIT09ci5vbmFib3J0P3Iub25hYm9ydD1uOnIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7ND09PXIucmVhZHlTdGF0ZSYmdC5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aSYmbigpfSl9LGk9aShcImFib3J0XCIpO3RyeXtyLnNlbmQoZS5oYXNDb250ZW50JiZlLmRhdGF8fG51bGwpfWNhdGNoKHQpe2lmKGkpdGhyb3cgdH19LGFib3J0OmZ1bmN0aW9uKCl7aSYmaSgpfX19KSxmdC5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKHQpe3QuY3Jvc3NEb21haW4mJih0LmNvbnRlbnRzLnNjcmlwdD0hMSl9KSxmdC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDpcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJ9LGNvbnRlbnRzOntzY3JpcHQ6L1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvfSxjb252ZXJ0ZXJzOntcInRleHQgc2NyaXB0XCI6ZnVuY3Rpb24odCl7cmV0dXJuIGZ0Lmdsb2JhbEV2YWwodCksdH19fSksZnQuYWpheFByZWZpbHRlcihcInNjcmlwdFwiLGZ1bmN0aW9uKHQpe3ZvaWQgMD09PXQuY2FjaGUmJih0LmNhY2hlPSExKSx0LmNyb3NzRG9tYWluJiYodC50eXBlPVwiR0VUXCIpfSksZnQuYWpheFRyYW5zcG9ydChcInNjcmlwdFwiLGZ1bmN0aW9uKHQpe3ZhciBlLGk7aWYodC5jcm9zc0RvbWFpbilyZXR1cm57c2VuZDpmdW5jdGlvbihuLHMpe2U9ZnQoXCI8c2NyaXB0PlwiKS5wcm9wKHtjaGFyc2V0OnQuc2NyaXB0Q2hhcnNldCxzcmM6dC51cmx9KS5vbihcImxvYWQgZXJyb3JcIixpPWZ1bmN0aW9uKHQpe2UucmVtb3ZlKCksaT1udWxsLHQmJnMoXCJlcnJvclwiPT09dC50eXBlPzQwNDoyMDAsdC50eXBlKX0pLFouaGVhZC5hcHBlbmRDaGlsZChlWzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtpJiZpKCl9fX0pO3ZhciAkZT1bXSxqZT0vKD0pXFw/KD89JnwkKXxcXD9cXD8vO2Z0LmFqYXhTZXR1cCh7anNvbnA6XCJjYWxsYmFja1wiLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgdD0kZS5wb3AoKXx8ZnQuZXhwYW5kbytcIl9cIit4ZSsrO3JldHVybiB0aGlzW3RdPSEwLHR9fSksZnQuYWpheFByZWZpbHRlcihcImpzb24ganNvbnBcIixmdW5jdGlvbihlLGksbil7dmFyIHMsbyxhLHI9ITEhPT1lLmpzb25wJiYoamUudGVzdChlLnVybCk/XCJ1cmxcIjpcInN0cmluZ1wiPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJmplLnRlc3QoZS5kYXRhKSYmXCJkYXRhXCIpO2lmKHJ8fFwianNvbnBcIj09PWUuZGF0YVR5cGVzWzBdKXJldHVybiBzPWUuanNvbnBDYWxsYmFjaz11dChlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxyP2Vbcl09ZVtyXS5yZXBsYWNlKGplLFwiJDFcIitzKTohMSE9PWUuanNvbnAmJihlLnVybCs9KENlLnRlc3QoZS51cmwpP1wiJlwiOlwiP1wiKStlLmpzb25wK1wiPVwiK3MpLGUuY29udmVydGVyc1tcInNjcmlwdCBqc29uXCJdPWZ1bmN0aW9uKCl7cmV0dXJuIGF8fGZ0LmVycm9yKHMrXCIgd2FzIG5vdCBjYWxsZWRcIiksYVswXX0sZS5kYXRhVHlwZXNbMF09XCJqc29uXCIsbz10W3NdLHRbc109ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1vP2Z0KHQpLnJlbW92ZVByb3Aocyk6dFtzXT1vLGVbc10mJihlLmpzb25wQ2FsbGJhY2s9aS5qc29ucENhbGxiYWNrLCRlLnB1c2gocykpLGEmJnV0KG8pJiZvKGFbMF0pLGE9bz12b2lkIDB9KSxcInNjcmlwdFwifSksY3QuY3JlYXRlSFRNTERvY3VtZW50PWZ1bmN0aW9uKCl7dmFyIHQ9Wi5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoXCJcIikuYm9keTtyZXR1cm4gdC5pbm5lckhUTUw9XCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiLDI9PT10LmNoaWxkTm9kZXMubGVuZ3RofSgpLGZ0LnBhcnNlSFRNTD1mdW5jdGlvbih0LGUsaSl7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIHQ/W106KFwiYm9vbGVhblwiPT10eXBlb2YgZSYmKGk9ZSxlPSExKSxlfHwoY3QuY3JlYXRlSFRNTERvY3VtZW50Pygobj0oZT1aLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcIlwiKSkuY3JlYXRlRWxlbWVudChcImJhc2VcIikpLmhyZWY9Wi5sb2NhdGlvbi5ocmVmLGUuaGVhZC5hcHBlbmRDaGlsZChuKSk6ZT1aKSxvPSFpJiZbXSwocz15dC5leGVjKHQpKT9bZS5jcmVhdGVFbGVtZW50KHNbMV0pXToocz13KFt0XSxlLG8pLG8mJm8ubGVuZ3RoJiZmdChvKS5yZW1vdmUoKSxmdC5tZXJnZShbXSxzLmNoaWxkTm9kZXMpKSk7dmFyIG4scyxvfSxmdC5mbi5sb2FkPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG8sYT10aGlzLHI9dC5pbmRleE9mKFwiIFwiKTtyZXR1cm4gcj4tMSYmKG49VSh0LnNsaWNlKHIpKSx0PXQuc2xpY2UoMCxyKSksdXQoZSk/KGk9ZSxlPXZvaWQgMCk6ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJihzPVwiUE9TVFwiKSxhLmxlbmd0aD4wJiZmdC5hamF4KHt1cmw6dCx0eXBlOnN8fFwiR0VUXCIsZGF0YVR5cGU6XCJodG1sXCIsZGF0YTplfSkuZG9uZShmdW5jdGlvbih0KXtvPWFyZ3VtZW50cyxhLmh0bWwobj9mdChcIjxkaXY+XCIpLmFwcGVuZChmdC5wYXJzZUhUTUwodCkpLmZpbmQobik6dCl9KS5hbHdheXMoaSYmZnVuY3Rpb24odCxlKXthLmVhY2goZnVuY3Rpb24oKXtpLmFwcGx5KHRoaXMsb3x8W3QucmVzcG9uc2VUZXh0LGUsdF0pfSl9KSx0aGlzfSxmdC5lYWNoKFtcImFqYXhTdGFydFwiLFwiYWpheFN0b3BcIixcImFqYXhDb21wbGV0ZVwiLFwiYWpheEVycm9yXCIsXCJhamF4U3VjY2Vzc1wiLFwiYWpheFNlbmRcIl0sZnVuY3Rpb24odCxlKXtmdC5mbltlXT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vbihlLHQpfX0pLGZ0LmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gZnQuZ3JlcChmdC50aW1lcnMsZnVuY3Rpb24oZSl7cmV0dXJuIHQ9PT1lLmVsZW19KS5sZW5ndGh9LGZ0Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKHQsZSxpKXt2YXIgbixzLG8sYSxyLGwsaD1mdC5jc3ModCxcInBvc2l0aW9uXCIpLGM9ZnQodCksdT17fTtcInN0YXRpY1wiPT09aCYmKHQuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxyPWMub2Zmc2V0KCksbz1mdC5jc3ModCxcInRvcFwiKSxsPWZ0LmNzcyh0LFwibGVmdFwiKSwoXCJhYnNvbHV0ZVwiPT09aHx8XCJmaXhlZFwiPT09aCkmJihvK2wpLmluZGV4T2YoXCJhdXRvXCIpPi0xPyhhPShuPWMucG9zaXRpb24oKSkudG9wLHM9bi5sZWZ0KTooYT1wYXJzZUZsb2F0KG8pfHwwLHM9cGFyc2VGbG9hdChsKXx8MCksdXQoZSkmJihlPWUuY2FsbCh0LGksZnQuZXh0ZW5kKHt9LHIpKSksbnVsbCE9ZS50b3AmJih1LnRvcD1lLnRvcC1yLnRvcCthKSxudWxsIT1lLmxlZnQmJih1LmxlZnQ9ZS5sZWZ0LXIubGVmdCtzKSxcInVzaW5nXCJpbiBlP2UudXNpbmcuY2FsbCh0LHUpOmMuY3NzKHUpfX0sZnQuZm4uZXh0ZW5kKHtvZmZzZXQ6ZnVuY3Rpb24odCl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09dD90aGlzOnRoaXMuZWFjaChmdW5jdGlvbihlKXtmdC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsdCxlKX0pO3ZhciBlLGksbj10aGlzWzBdO3JldHVybiBuP24uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGg/KGU9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxpPW4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldyx7dG9wOmUudG9wK2kucGFnZVlPZmZzZXQsbGVmdDplLmxlZnQraS5wYWdlWE9mZnNldH0pOnt0b3A6MCxsZWZ0OjB9OnZvaWQgMH0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgdCxlLGksbj10aGlzWzBdLHM9e3RvcDowLGxlZnQ6MH07aWYoXCJmaXhlZFwiPT09ZnQuY3NzKG4sXCJwb3NpdGlvblwiKSllPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXtmb3IoZT10aGlzLm9mZnNldCgpLGk9bi5vd25lckRvY3VtZW50LHQ9bi5vZmZzZXRQYXJlbnR8fGkuZG9jdW1lbnRFbGVtZW50O3QmJih0PT09aS5ib2R5fHx0PT09aS5kb2N1bWVudEVsZW1lbnQpJiZcInN0YXRpY1wiPT09ZnQuY3NzKHQsXCJwb3NpdGlvblwiKTspdD10LnBhcmVudE5vZGU7dCYmdCE9PW4mJjE9PT10Lm5vZGVUeXBlJiYoKHM9ZnQodCkub2Zmc2V0KCkpLnRvcCs9ZnQuY3NzKHQsXCJib3JkZXJUb3BXaWR0aFwiLCEwKSxzLmxlZnQrPWZ0LmNzcyh0LFwiYm9yZGVyTGVmdFdpZHRoXCIsITApKX1yZXR1cm57XG50b3A6ZS50b3Atcy50b3AtZnQuY3NzKG4sXCJtYXJnaW5Ub3BcIiwhMCksbGVmdDplLmxlZnQtcy5sZWZ0LWZ0LmNzcyhuLFwibWFyZ2luTGVmdFwiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQ7dCYmXCJzdGF0aWNcIj09PWZ0LmNzcyh0LFwicG9zaXRpb25cIik7KXQ9dC5vZmZzZXRQYXJlbnQ7cmV0dXJuIHR8fFZ0fSl9fSksZnQuZWFjaCh7c2Nyb2xsTGVmdDpcInBhZ2VYT2Zmc2V0XCIsc2Nyb2xsVG9wOlwicGFnZVlPZmZzZXRcIn0sZnVuY3Rpb24odCxlKXt2YXIgaT1cInBhZ2VZT2Zmc2V0XCI9PT1lO2Z0LmZuW3RdPWZ1bmN0aW9uKG4pe3JldHVybiBJdCh0aGlzLGZ1bmN0aW9uKHQsbixzKXt2YXIgbztpZihkdCh0KT9vPXQ6OT09PXQubm9kZVR5cGUmJihvPXQuZGVmYXVsdFZpZXcpLHZvaWQgMD09PXMpcmV0dXJuIG8/b1tlXTp0W25dO28/by5zY3JvbGxUbyhpP28ucGFnZVhPZmZzZXQ6cyxpP3M6by5wYWdlWU9mZnNldCk6dFtuXT1zfSx0LG4sYXJndW1lbnRzLmxlbmd0aCl9fSksZnQuZWFjaChbXCJ0b3BcIixcImxlZnRcIl0sZnVuY3Rpb24odCxlKXtmdC5jc3NIb29rc1tlXT1OKGN0LnBpeGVsUG9zaXRpb24sZnVuY3Rpb24odCxpKXtpZihpKXJldHVybiBpPU8odCxlKSxlZS50ZXN0KGkpP2Z0KHQpLnBvc2l0aW9uKClbZV0rXCJweFwiOml9KX0pLGZ0LmVhY2goe0hlaWdodDpcImhlaWdodFwiLFdpZHRoOlwid2lkdGhcIn0sZnVuY3Rpb24odCxlKXtmdC5lYWNoKHtwYWRkaW5nOlwiaW5uZXJcIit0LGNvbnRlbnQ6ZSxcIlwiOlwib3V0ZXJcIit0fSxmdW5jdGlvbihpLG4pe2Z0LmZuW25dPWZ1bmN0aW9uKHMsbyl7dmFyIGE9YXJndW1lbnRzLmxlbmd0aCYmKGl8fFwiYm9vbGVhblwiIT10eXBlb2Ygcykscj1pfHwoITA9PT1zfHwhMD09PW8/XCJtYXJnaW5cIjpcImJvcmRlclwiKTtyZXR1cm4gSXQodGhpcyxmdW5jdGlvbihlLGkscyl7dmFyIG87cmV0dXJuIGR0KGUpPzA9PT1uLmluZGV4T2YoXCJvdXRlclwiKT9lW1wiaW5uZXJcIit0XTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtcImNsaWVudFwiK3RdOjk9PT1lLm5vZGVUeXBlPyhvPWUuZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KGUuYm9keVtcInNjcm9sbFwiK3RdLG9bXCJzY3JvbGxcIit0XSxlLmJvZHlbXCJvZmZzZXRcIit0XSxvW1wib2Zmc2V0XCIrdF0sb1tcImNsaWVudFwiK3RdKSk6dm9pZCAwPT09cz9mdC5jc3MoZSxpLHIpOmZ0LnN0eWxlKGUsaSxzLHIpfSxlLGE/czp2b2lkIDAsYSl9fSl9KSxmdC5lYWNoKFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbih0LGUpe2Z0LmZuW2VdPWZ1bmN0aW9uKHQsaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGUsbnVsbCx0LGkpOnRoaXMudHJpZ2dlcihlKX19KSxmdC5mbi5leHRlbmQoe2hvdmVyOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubW91c2VlbnRlcih0KS5tb3VzZWxlYXZlKGV8fHQpfX0pLGZ0LmZuLmV4dGVuZCh7YmluZDpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMub24odCxudWxsLGUsaSl9LHVuYmluZDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLm9mZih0LG51bGwsZSl9LGRlbGVnYXRlOmZ1bmN0aW9uKHQsZSxpLG4pe3JldHVybiB0aGlzLm9uKGUsdCxpLG4pfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5vZmYodCxcIioqXCIpOnRoaXMub2ZmKGUsdHx8XCIqKlwiLGkpfX0pLGZ0LnByb3h5PWZ1bmN0aW9uKHQsZSl7dmFyIGksbixzO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoaT10W2VdLGU9dCx0PWkpLHV0KHQpKXJldHVybiBuPWV0LmNhbGwoYXJndW1lbnRzLDIpLChzPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkoZXx8dGhpcyxuLmNvbmNhdChldC5jYWxsKGFyZ3VtZW50cykpKX0pLmd1aWQ9dC5ndWlkPXQuZ3VpZHx8ZnQuZ3VpZCsrLHN9LGZ0LmhvbGRSZWFkeT1mdW5jdGlvbih0KXt0P2Z0LnJlYWR5V2FpdCsrOmZ0LnJlYWR5KCEwKX0sZnQuaXNBcnJheT1BcnJheS5pc0FycmF5LGZ0LnBhcnNlSlNPTj1KU09OLnBhcnNlLGZ0Lm5vZGVOYW1lPW8sZnQuaXNGdW5jdGlvbj11dCxmdC5pc1dpbmRvdz1kdCxmdC5jYW1lbENhc2U9cCxmdC50eXBlPW4sZnQubm93PURhdGUubm93LGZ0LmlzTnVtZXJpYz1mdW5jdGlvbih0KXt2YXIgZT1mdC50eXBlKHQpO3JldHVybihcIm51bWJlclwiPT09ZXx8XCJzdHJpbmdcIj09PWUpJiYhaXNOYU4odC1wYXJzZUZsb2F0KHQpKX0sXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kJiZkZWZpbmUoXCJqcXVlcnlcIixbXSxmdW5jdGlvbigpe3JldHVybiBmdH0pO3ZhciBGZT10LmpRdWVyeSxCZT10LiQ7cmV0dXJuIGZ0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuJD09PWZ0JiYodC4kPUJlKSxlJiZ0LmpRdWVyeT09PWZ0JiYodC5qUXVlcnk9RmUpLGZ0fSxlfHwodC5qUXVlcnk9dC4kPWZ0KSxmdH0pLGZ1bmN0aW9uKHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLHQpOnQoalF1ZXJ5KX0oZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3RoaXMuX2N1ckluc3Q9bnVsbCx0aGlzLl9rZXlFdmVudD0hMSx0aGlzLl9kaXNhYmxlZElucHV0cz1bXSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSx0aGlzLl9pbkRpYWxvZz0hMSx0aGlzLl9tYWluRGl2SWQ9XCJ1aS1kYXRlcGlja2VyLWRpdlwiLHRoaXMuX2lubGluZUNsYXNzPVwidWktZGF0ZXBpY2tlci1pbmxpbmVcIix0aGlzLl9hcHBlbmRDbGFzcz1cInVpLWRhdGVwaWNrZXItYXBwZW5kXCIsdGhpcy5fdHJpZ2dlckNsYXNzPVwidWktZGF0ZXBpY2tlci10cmlnZ2VyXCIsdGhpcy5fZGlhbG9nQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWRpYWxvZ1wiLHRoaXMuX2Rpc2FibGVDbGFzcz1cInVpLWRhdGVwaWNrZXItZGlzYWJsZWRcIix0aGlzLl91bnNlbGVjdGFibGVDbGFzcz1cInVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlXCIsdGhpcy5fY3VycmVudENsYXNzPVwidWktZGF0ZXBpY2tlci1jdXJyZW50LWRheVwiLHRoaXMuX2RheU92ZXJDbGFzcz1cInVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXJcIix0aGlzLnJlZ2lvbmFsPVtdLHRoaXMucmVnaW9uYWxbXCJcIl09e2Nsb3NlVGV4dDpcIkRvbmVcIixwcmV2VGV4dDpcIlByZXZcIixuZXh0VGV4dDpcIk5leHRcIixjdXJyZW50VGV4dDpcIlRvZGF5XCIsbW9udGhOYW1lczpbXCJKYW51YXJ5XCIsXCJGZWJydWFyeVwiLFwiTWFyY2hcIixcIkFwcmlsXCIsXCJNYXlcIixcIkp1bmVcIixcIkp1bHlcIixcIkF1Z3VzdFwiLFwiU2VwdGVtYmVyXCIsXCJPY3RvYmVyXCIsXCJOb3ZlbWJlclwiLFwiRGVjZW1iZXJcIl0sbW9udGhOYW1lc1Nob3J0OltcIkphblwiLFwiRmViXCIsXCJNYXJcIixcIkFwclwiLFwiTWF5XCIsXCJKdW5cIixcIkp1bFwiLFwiQXVnXCIsXCJTZXBcIixcIk9jdFwiLFwiTm92XCIsXCJEZWNcIl0sZGF5TmFtZXM6W1wiU3VuZGF5XCIsXCJNb25kYXlcIixcIlR1ZXNkYXlcIixcIldlZG5lc2RheVwiLFwiVGh1cnNkYXlcIixcIkZyaWRheVwiLFwiU2F0dXJkYXlcIl0sZGF5TmFtZXNTaG9ydDpbXCJTdW5cIixcIk1vblwiLFwiVHVlXCIsXCJXZWRcIixcIlRodVwiLFwiRnJpXCIsXCJTYXRcIl0sZGF5TmFtZXNNaW46W1wiU3VcIixcIk1vXCIsXCJUdVwiLFwiV2VcIixcIlRoXCIsXCJGclwiLFwiU2FcIl0sd2Vla0hlYWRlcjpcIldrXCIsZGF0ZUZvcm1hdDpcIm1tL2RkL3l5XCIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDpcIlwifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOlwiZm9jdXNcIixzaG93QW5pbTpcImZhZGVJblwiLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDpcIlwiLGJ1dHRvblRleHQ6XCIuLi5cIixidXR0b25JbWFnZTpcIlwiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6XCJjLTEwOmMrMTBcIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjpcIisxMFwiLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwsZHVyYXRpb246XCJmYXN0XCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOlwiXCIsYWx0Rm9ybWF0OlwiXCIsY29uc3RyYWluSW5wdXQ6ITAsc2hvd0J1dHRvblBhbmVsOiExLGF1dG9TaXplOiExLGRpc2FibGVkOiExfSx0LmV4dGVuZCh0aGlzLl9kZWZhdWx0cyx0aGlzLnJlZ2lvbmFsW1wiXCJdKSx0aGlzLnJlZ2lvbmFsLmVuPXQuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWxbXCJcIl0pLHRoaXMucmVnaW9uYWxbXCJlbi1VU1wiXT10LmV4dGVuZCghMCx7fSx0aGlzLnJlZ2lvbmFsLmVuKSx0aGlzLmRwRGl2PWkodChcIjxkaXYgaWQ9J1wiK3RoaXMuX21haW5EaXZJZCtcIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj5cIikpfWZ1bmN0aW9uIGkoZSl7dmFyIGk9XCJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGFcIjtyZXR1cm4gZS5vbihcIm1vdXNlb3V0XCIsaSxmdW5jdGlvbigpe3QodGhpcykucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLXByZXZcIikmJnQodGhpcykucmVtb3ZlQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1uZXh0XCIpJiZ0KHRoaXMpLnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIpfSkub24oXCJtb3VzZW92ZXJcIixpLG4pfWZ1bmN0aW9uIG4oKXt0LmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGMuaW5saW5lP2MuZHBEaXYucGFyZW50KClbMF06Yy5pbnB1dFswXSl8fCh0KHRoaXMpLnBhcmVudHMoXCIudWktZGF0ZXBpY2tlci1jYWxlbmRhclwiKS5maW5kKFwiYVwiKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLHQodGhpcykuYWRkQ2xhc3MoXCJ1aS1zdGF0ZS1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLXByZXZcIikmJnQodGhpcykuYWRkQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXJcIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKFwidWktZGF0ZXBpY2tlci1uZXh0XCIpJiZ0KHRoaXMpLmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyXCIpKX1mdW5jdGlvbiBzKGUsaSl7Zm9yKHZhciBuIGluIHQuZXh0ZW5kKGUsaSksaSludWxsPT1pW25dJiYoZVtuXT1pW25dKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC52YWwoKTt0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9yZWZyZXNoKCksZSE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiKX19dC51aT10LnVpfHx7fTt2YXIgYT0odC51aS52ZXJzaW9uPVwiMS4xMi4xXCIsMCkscj1BcnJheS5wcm90b3R5cGUuc2xpY2U7dC5jbGVhbkRhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciBuLHMsbztmb3Iobz0wO251bGwhPShzPWlbb10pO28rKyl0cnl7KG49dC5fZGF0YShzLFwiZXZlbnRzXCIpKSYmbi5yZW1vdmUmJnQocykudHJpZ2dlckhhbmRsZXIoXCJyZW1vdmVcIil9Y2F0Y2godCl7fWUoaSl9fSh0LmNsZWFuRGF0YSksdC53aWRnZXQ9ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG8sYSxyPXt9LGw9ZS5zcGxpdChcIi5cIilbMF0saD1sK1wiLVwiKyhlPWUuc3BsaXQoXCIuXCIpWzFdKTtyZXR1cm4gbnx8KG49aSxpPXQuV2lkZ2V0KSx0LmlzQXJyYXkobikmJihuPXQuZXh0ZW5kLmFwcGx5KG51bGwsW3t9XS5jb25jYXQobikpKSx0LmV4cHJbXCI6XCJdW2gudG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24oZSl7cmV0dXJuISF0LmRhdGEoZSxoKX0sdFtsXT10W2xdfHx7fSxzPXRbbF1bZV0sbz10W2xdW2VdPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2NyZWF0ZVdpZGdldClyZXR1cm4gbmV3IG8odCxlKTthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQodCxlKX0sdC5leHRlbmQobyxzLHt2ZXJzaW9uOm4udmVyc2lvbixfcHJvdG86dC5leHRlbmQoe30sbiksX2NoaWxkQ29uc3RydWN0b3JzOltdfSksKGE9bmV3IGkpLm9wdGlvbnM9dC53aWRnZXQuZXh0ZW5kKHt9LGEub3B0aW9ucyksdC5lYWNoKG4sZnVuY3Rpb24oZSxuKXt0LmlzRnVuY3Rpb24obik/cltlXT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaS5wcm90b3R5cGVbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHModCl7cmV0dXJuIGkucHJvdG90eXBlW2VdLmFwcGx5KHRoaXMsdCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLl9zdXBlcixvPXRoaXMuX3N1cGVyQXBwbHk7cmV0dXJuIHRoaXMuX3N1cGVyPXQsdGhpcy5fc3VwZXJBcHBseT1zLGU9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fc3VwZXI9aSx0aGlzLl9zdXBlckFwcGx5PW8sZX19KCk6cltlXT1ufSksby5wcm90b3R5cGU9dC53aWRnZXQuZXh0ZW5kKGEse3dpZGdldEV2ZW50UHJlZml4OnMmJmEud2lkZ2V0RXZlbnRQcmVmaXh8fGV9LHIse2NvbnN0cnVjdG9yOm8sbmFtZXNwYWNlOmwsd2lkZ2V0TmFtZTplLHdpZGdldEZ1bGxOYW1lOmh9KSxzPyh0LmVhY2gocy5fY2hpbGRDb25zdHJ1Y3RvcnMsZnVuY3Rpb24oZSxpKXt2YXIgbj1pLnByb3RvdHlwZTt0LndpZGdldChuLm5hbWVzcGFjZStcIi5cIituLndpZGdldE5hbWUsbyxpLl9wcm90byl9KSxkZWxldGUgcy5fY2hpbGRDb25zdHJ1Y3RvcnMpOmkuX2NoaWxkQ29uc3RydWN0b3JzLnB1c2gobyksdC53aWRnZXQuYnJpZGdlKGUsbyksb30sdC53aWRnZXQuZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgaSxuLHM9ci5jYWxsKGFyZ3VtZW50cywxKSxvPTAsYT1zLmxlbmd0aDtvPGE7bysrKWZvcihpIGluIHNbb10pbj1zW29dW2ldLHNbb10uaGFzT3duUHJvcGVydHkoaSkmJnZvaWQgMCE9PW4mJih0LmlzUGxhaW5PYmplY3Qobik/ZVtpXT10LmlzUGxhaW5PYmplY3QoZVtpXSk/dC53aWRnZXQuZXh0ZW5kKHt9LGVbaV0sbik6dC53aWRnZXQuZXh0ZW5kKHt9LG4pOmVbaV09bik7cmV0dXJuIGV9LHQud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihlLGkpe3ZhciBuPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHxlO3QuZm5bZV09ZnVuY3Rpb24ocyl7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIHMsYT1yLmNhbGwoYXJndW1lbnRzLDEpLGw9dGhpcztyZXR1cm4gbz90aGlzLmxlbmd0aHx8XCJpbnN0YW5jZVwiIT09cz90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaSxvPXQuZGF0YSh0aGlzLG4pO3JldHVyblwiaW5zdGFuY2VcIj09PXM/KGw9bywhMSk6bz90LmlzRnVuY3Rpb24ob1tzXSkmJlwiX1wiIT09cy5jaGFyQXQoMCk/KGk9b1tzXS5hcHBseShvLGEpKSE9PW8mJnZvaWQgMCE9PWk/KGw9aSYmaS5qcXVlcnk/bC5wdXNoU3RhY2soaS5nZXQoKSk6aSwhMSk6dm9pZCAwOnQuZXJyb3IoXCJubyBzdWNoIG1ldGhvZCAnXCIrcytcIicgZm9yIFwiK2UrXCIgd2lkZ2V0IGluc3RhbmNlXCIpOnQuZXJyb3IoXCJjYW5ub3QgY2FsbCBtZXRob2RzIG9uIFwiK2UrXCIgcHJpb3IgdG8gaW5pdGlhbGl6YXRpb247IGF0dGVtcHRlZCB0byBjYWxsIG1ldGhvZCAnXCIrcytcIidcIil9KTpsPXZvaWQgMDooYS5sZW5ndGgmJihzPXQud2lkZ2V0LmV4dGVuZC5hcHBseShudWxsLFtzXS5jb25jYXQoYSkpKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LmRhdGEodGhpcyxuKTtlPyhlLm9wdGlvbihzfHx7fSksZS5faW5pdCYmZS5faW5pdCgpKTp0LmRhdGEodGhpcyxuLG5ldyBpKHMsdGhpcykpfSkpLGx9fSx0LldpZGdldD1mdW5jdGlvbigpe30sdC5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzPVtdLHQuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZTpcIndpZGdldFwiLHdpZGdldEV2ZW50UHJlZml4OlwiXCIsZGVmYXVsdEVsZW1lbnQ6XCI8ZGl2PlwiLG9wdGlvbnM6e2NsYXNzZXM6e30sZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24oZSxpKXtpPXQoaXx8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PXQoaSksdGhpcy51dWlkPWErKyx0aGlzLmV2ZW50TmFtZXNwYWNlPVwiLlwiK3RoaXMud2lkZ2V0TmFtZSt0aGlzLnV1aWQsdGhpcy5iaW5kaW5ncz10KCksdGhpcy5ob3ZlcmFibGU9dCgpLHRoaXMuZm9jdXNhYmxlPXQoKSx0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwPXt9LGkhPT10aGlzJiYodC5kYXRhKGksdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbighMCx0aGlzLmVsZW1lbnQse3JlbW92ZTpmdW5jdGlvbih0KXt0LnRhcmdldD09PWkmJnRoaXMuZGVzdHJveSgpfX0pLHRoaXMuZG9jdW1lbnQ9dChpLnN0eWxlP2kub3duZXJEb2N1bWVudDppLmRvY3VtZW50fHxpKSx0aGlzLndpbmRvdz10KHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5vcHRpb25zPXQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLGUpLHRoaXMuX2NyZWF0ZSgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQodGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl90cmlnZ2VyKFwiY3JlYXRlXCIsbnVsbCx0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3JldHVybnt9fSxfZ2V0Q3JlYXRlRXZlbnREYXRhOnQubm9vcCxfY3JlYXRlOnQubm9vcCxfaW5pdDp0Lm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fZGVzdHJveSgpLHQuZWFjaCh0aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwLGZ1bmN0aW9uKHQsaSl7ZS5fcmVtb3ZlQ2xhc3MoaSx0KX0pLHRoaXMuZWxlbWVudC5vZmYodGhpcy5ldmVudE5hbWVzcGFjZSkucmVtb3ZlRGF0YSh0aGlzLndpZGdldEZ1bGxOYW1lKSx0aGlzLndpZGdldCgpLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVBdHRyKFwiYXJpYS1kaXNhYmxlZFwiKSx0aGlzLmJpbmRpbmdzLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKX0sX2Rlc3Ryb3k6dC5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBuLHMsbyxhPWU7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKWlmKGE9e30sbj1lLnNwbGl0KFwiLlwiKSxlPW4uc2hpZnQoKSxuLmxlbmd0aCl7Zm9yKHM9YVtlXT10LndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zW2VdKSxvPTA7bzxuLmxlbmd0aC0xO28rKylzW25bb11dPXNbbltvXV18fHt9LHM9c1tuW29dXTtpZihlPW4ucG9wKCksMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXNbZV0/bnVsbDpzW2VdO3NbZV09aX1lbHNle2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB2b2lkIDA9PT10aGlzLm9wdGlvbnNbZV0/bnVsbDp0aGlzLm9wdGlvbnNbZV07YVtlXT1pfXJldHVybiB0aGlzLl9zZXRPcHRpb25zKGEpLHRoaXN9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlO2ZvcihlIGluIHQpdGhpcy5fc2V0T3B0aW9uKGUsdFtlXSk7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtyZXR1cm5cImNsYXNzZXNcIj09PXQmJnRoaXMuX3NldE9wdGlvbkNsYXNzZXMoZSksdGhpcy5vcHRpb25zW3RdPWUsXCJkaXNhYmxlZFwiPT09dCYmdGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoZSksdGhpc30sX3NldE9wdGlvbkNsYXNzZXM6ZnVuY3Rpb24oZSl7dmFyIGksbixzO2ZvcihpIGluIGUpcz10aGlzLmNsYXNzZXNFbGVtZW50TG9va3VwW2ldLGVbaV0hPT10aGlzLm9wdGlvbnMuY2xhc3Nlc1tpXSYmcyYmcy5sZW5ndGgmJihuPXQocy5nZXQoKSksdGhpcy5fcmVtb3ZlQ2xhc3MocyxpKSxuLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMoe2VsZW1lbnQ6bixrZXlzOmksY2xhc3NlczplLGFkZDohMH0pKSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl90b2dnbGVDbGFzcyh0aGlzLndpZGdldCgpLHRoaXMud2lkZ2V0RnVsbE5hbWUrXCItZGlzYWJsZWRcIixudWxsLCEhdCksdCYmKHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaG92ZXJhYmxlLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmZvY3VzYWJsZSxudWxsLFwidWktc3RhdGUtZm9jdXNcIikpfSxlbmFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ITF9KX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMH0pfSxfY2xhc3NlczpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKGksbyl7dmFyIGEscjtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWE9cy5jbGFzc2VzRWxlbWVudExvb2t1cFtpW3JdXXx8dCgpLGE9dChlLmFkZD90LnVuaXF1ZShhLmdldCgpLmNvbmNhdChlLmVsZW1lbnQuZ2V0KCkpKTphLm5vdChlLmVsZW1lbnQpLmdldCgpKSxzLmNsYXNzZXNFbGVtZW50TG9va3VwW2lbcl1dPWEsbi5wdXNoKGlbcl0pLG8mJmUuY2xhc3Nlc1tpW3JdXSYmbi5wdXNoKGUuY2xhc3Nlc1tpW3JdXSl9dmFyIG49W10scz10aGlzO3JldHVybiBlPXQuZXh0ZW5kKHtlbGVtZW50OnRoaXMuZWxlbWVudCxjbGFzc2VzOnRoaXMub3B0aW9ucy5jbGFzc2VzfHx7fX0sZSksdGhpcy5fb24oZS5lbGVtZW50LHtyZW1vdmU6XCJfdW50cmFja0NsYXNzZXNFbGVtZW50XCJ9KSxlLmtleXMmJmkoZS5rZXlzLm1hdGNoKC9cXFMrL2cpfHxbXSwhMCksZS5leHRyYSYmaShlLmV4dHJhLm1hdGNoKC9cXFMrL2cpfHxbXSksbi5qb2luKFwiIFwiKX0sX3VudHJhY2tDbGFzc2VzRWxlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO3QuZWFjaChpLmNsYXNzZXNFbGVtZW50TG9va3VwLGZ1bmN0aW9uKG4scyl7LTEhPT10LmluQXJyYXkoZS50YXJnZXQscykmJihpLmNsYXNzZXNFbGVtZW50TG9va3VwW25dPXQocy5ub3QoZS50YXJnZXQpLmdldCgpKSl9KX0sX3JlbW92ZUNsYXNzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdGhpcy5fdG9nZ2xlQ2xhc3ModCxlLGksITEpfSxfYWRkQ2xhc3M6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLl90b2dnbGVDbGFzcyh0LGUsaSwhMCl9LF90b2dnbGVDbGFzczpmdW5jdGlvbih0LGUsaSxuKXtuPVwiYm9vbGVhblwiPT10eXBlb2Ygbj9uOmk7dmFyIHM9XCJzdHJpbmdcIj09dHlwZW9mIHR8fG51bGw9PT10LG89e2V4dHJhOnM/ZTppLGtleXM6cz90OmUsZWxlbWVudDpzP3RoaXMuZWxlbWVudDp0LGFkZDpufTtyZXR1cm4gby5lbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMuX2NsYXNzZXMobyksbiksdGhpc30sX29uOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcyxvPXRoaXM7XCJib29sZWFuXCIhPXR5cGVvZiBlJiYobj1pLGk9ZSxlPSExKSxuPyhpPXM9dChpKSx0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3MuYWRkKGkpKToobj1pLGk9dGhpcy5lbGVtZW50LHM9dGhpcy53aWRnZXQoKSksdC5lYWNoKG4sZnVuY3Rpb24obixhKXtmdW5jdGlvbiByKCl7aWYoZXx8ITAhPT1vLm9wdGlvbnMuZGlzYWJsZWQmJiF0KHRoaXMpLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIikpcmV0dXJuKFwic3RyaW5nXCI9PXR5cGVvZiBhP29bYV06YSkuYXBwbHkobyxhcmd1bWVudHMpfVwic3RyaW5nXCIhPXR5cGVvZiBhJiYoci5ndWlkPWEuZ3VpZD1hLmd1aWR8fHIuZ3VpZHx8dC5ndWlkKyspO3ZhciBsPW4ubWF0Y2goL14oW1xcdzotXSopXFxzKiguKikkLyksaD1sWzFdK28uZXZlbnROYW1lc3BhY2UsYz1sWzJdO2M/cy5vbihoLGMscik6aS5vbihoLHIpfSl9LF9vZmY6ZnVuY3Rpb24oZSxpKXtpPShpfHxcIlwiKS5zcGxpdChcIiBcIikuam9pbih0aGlzLmV2ZW50TmFtZXNwYWNlK1wiIFwiKSt0aGlzLmV2ZW50TmFtZXNwYWNlLGUub2ZmKGkpLm9mZihpKSx0aGlzLmJpbmRpbmdzPXQodGhpcy5iaW5kaW5ncy5ub3QoZSkuZ2V0KCkpLHRoaXMuZm9jdXNhYmxlPXQodGhpcy5mb2N1c2FibGUubm90KGUpLmdldCgpKSx0aGlzLmhvdmVyYWJsZT10KHRoaXMuaG92ZXJhYmxlLm5vdChlKS5nZXQoKSl9LF9kZWxheTpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXM7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtyZXR1cm4oXCJzdHJpbmdcIj09dHlwZW9mIHQ/aVt0XTp0KS5hcHBseShpLGFyZ3VtZW50cyl9LGV8fDApfSxfaG92ZXJhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuaG92ZXJhYmxlPXRoaXMuaG92ZXJhYmxlLmFkZChlKSx0aGlzLl9vbihlLHttb3VzZWVudGVyOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZENsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtaG92ZXJcIil9LG1vdXNlbGVhdmU6ZnVuY3Rpb24oZSl7dGhpcy5fcmVtb3ZlQ2xhc3ModChlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbihlKXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQoZSksdGhpcy5fb24oZSx7Zm9jdXNpbjpmdW5jdGlvbihlKXt0aGlzLl9hZGRDbGFzcyh0KGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWZvY3VzXCIpfSxmb2N1c291dDpmdW5jdGlvbihlKXt0aGlzLl9yZW1vdmVDbGFzcyh0KGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWZvY3VzXCIpfX0pfSxfdHJpZ2dlcjpmdW5jdGlvbihlLGksbil7dmFyIHMsbyxhPXRoaXMub3B0aW9uc1tlXTtpZihuPW58fHt9LChpPXQuRXZlbnQoaSkpLnR5cGU9KGU9PT10aGlzLndpZGdldEV2ZW50UHJlZml4P2U6dGhpcy53aWRnZXRFdmVudFByZWZpeCtlKS50b0xvd2VyQ2FzZSgpLGkudGFyZ2V0PXRoaXMuZWxlbWVudFswXSxvPWkub3JpZ2luYWxFdmVudClmb3IocyBpbiBvKXMgaW4gaXx8KGlbc109b1tzXSk7cmV0dXJuIHRoaXMuZWxlbWVudC50cmlnZ2VyKGksbiksISh0LmlzRnVuY3Rpb24oYSkmJiExPT09YS5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2ldLmNvbmNhdChuKSl8fGkuaXNEZWZhdWx0UHJldmVudGVkKCkpfX0sdC5lYWNoKHtzaG93OlwiZmFkZUluXCIsaGlkZTpcImZhZGVPdXRcIn0sZnVuY3Rpb24oZSxpKXt0LldpZGdldC5wcm90b3R5cGVbXCJfXCIrZV09ZnVuY3Rpb24obixzLG8pe1wic3RyaW5nXCI9PXR5cGVvZiBzJiYocz17ZWZmZWN0OnN9KTt2YXIgYSxyPXM/ITA9PT1zfHxcIm51bWJlclwiPT10eXBlb2Ygcz9pOnMuZWZmZWN0fHxpOmU7XCJudW1iZXJcIj09dHlwZW9mKHM9c3x8e30pJiYocz17ZHVyYXRpb246c30pLGE9IXQuaXNFbXB0eU9iamVjdChzKSxzLmNvbXBsZXRlPW8scy5kZWxheSYmbi5kZWxheShzLmRlbGF5KSxhJiZ0LmVmZmVjdHMmJnQuZWZmZWN0cy5lZmZlY3Rbcl0/bltlXShzKTpyIT09ZSYmbltyXT9uW3JdKHMuZHVyYXRpb24scy5lYXNpbmcsbyk6bi5xdWV1ZShmdW5jdGlvbihpKXt0KHRoaXMpW2VdKCksbyYmby5jYWxsKG5bMF0pLGkoKX0pfX0pLHQud2lkZ2V0LGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LGUsaSl7cmV0dXJuW3BhcnNlRmxvYXQodFswXSkqKGMudGVzdCh0WzBdKT9lLzEwMDoxKSxwYXJzZUZsb2F0KHRbMV0pKihjLnRlc3QodFsxXSk/aS8xMDA6MSldfWZ1bmN0aW9uIGkoZSxpKXtyZXR1cm4gcGFyc2VJbnQodC5jc3MoZSxpKSwxMCl8fDB9dmFyIG4scz1NYXRoLm1heCxvPU1hdGguYWJzLGE9L2xlZnR8Y2VudGVyfHJpZ2h0LyxyPS90b3B8Y2VudGVyfGJvdHRvbS8sbD0vW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLGg9L15cXHcrLyxjPS8lJC8sdT10LmZuLnBvc2l0aW9uO3QucG9zaXRpb249e3Njcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjt2YXIgZSxpLHM9dChcIjxkaXYgc3R5bGU9J2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NTBweDtoZWlnaHQ6NTBweDtvdmVyZmxvdzpoaWRkZW47Jz48ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiKSxvPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gdChcImJvZHlcIikuYXBwZW5kKHMpLGU9by5vZmZzZXRXaWR0aCxzLmNzcyhcIm92ZXJmbG93XCIsXCJzY3JvbGxcIiksZT09PShpPW8ub2Zmc2V0V2lkdGgpJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49ZS1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKGUpe3ZhciBpPWUuaXNXaW5kb3d8fGUuaXNEb2N1bWVudD9cIlwiOmUuZWxlbWVudC5jc3MoXCJvdmVyZmxvdy14XCIpLG49ZS5pc1dpbmRvd3x8ZS5pc0RvY3VtZW50P1wiXCI6ZS5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXlcIikscz1cInNjcm9sbFwiPT09aXx8XCJhdXRvXCI9PT1pJiZlLndpZHRoPGUuZWxlbWVudFswXS5zY3JvbGxXaWR0aDtyZXR1cm57d2lkdGg6XCJzY3JvbGxcIj09PW58fFwiYXV0b1wiPT09biYmZS5oZWlnaHQ8ZS5lbGVtZW50WzBdLnNjcm9sbEhlaWdodD90LnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6cz90LnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24oZSl7dmFyIGk9dChlfHx3aW5kb3cpLG49dC5pc1dpbmRvdyhpWzBdKSxzPSEhaVswXSYmOT09PWlbMF0ubm9kZVR5cGU7cmV0dXJue2VsZW1lbnQ6aSxpc1dpbmRvdzpuLGlzRG9jdW1lbnQ6cyxvZmZzZXQ6bnx8cz97bGVmdDowLHRvcDowfTp0KGUpLm9mZnNldCgpLHNjcm9sbExlZnQ6aS5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOmkuc2Nyb2xsVG9wKCksd2lkdGg6aS5vdXRlcldpZHRoKCksaGVpZ2h0Omkub3V0ZXJIZWlnaHQoKX19fSx0LmZuLnBvc2l0aW9uPWZ1bmN0aW9uKG4pe2lmKCFufHwhbi5vZilyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bj10LmV4dGVuZCh7fSxuKTt2YXIgYyxkLHAsZixnLG0sdj10KG4ub2YpLGI9dC5wb3NpdGlvbi5nZXRXaXRoaW5JbmZvKG4ud2l0aGluKSxfPXQucG9zaXRpb24uZ2V0U2Nyb2xsSW5mbyhiKSx5PShuLmNvbGxpc2lvbnx8XCJmbGlwXCIpLnNwbGl0KFwiIFwiKSx3PXt9O3JldHVybiBtPWZ1bmN0aW9uKGUpe3ZhciBpPWVbMF07cmV0dXJuIDk9PT1pLm5vZGVUeXBlP3t3aWR0aDplLndpZHRoKCksaGVpZ2h0OmUuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6MCxsZWZ0OjB9fTp0LmlzV2luZG93KGkpP3t3aWR0aDplLndpZHRoKCksaGVpZ2h0OmUuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6ZS5zY3JvbGxUb3AoKSxsZWZ0OmUuc2Nyb2xsTGVmdCgpfX06aS5wcmV2ZW50RGVmYXVsdD97d2lkdGg6MCxoZWlnaHQ6MCxvZmZzZXQ6e3RvcDppLnBhZ2VZLGxlZnQ6aS5wYWdlWH19Ont3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpLG9mZnNldDplLm9mZnNldCgpfX0odiksdlswXS5wcmV2ZW50RGVmYXVsdCYmKG4uYXQ9XCJsZWZ0IHRvcFwiKSxkPW0ud2lkdGgscD1tLmhlaWdodCxmPW0ub2Zmc2V0LGc9dC5leHRlbmQoe30sZiksdC5lYWNoKFtcIm15XCIsXCJhdFwiXSxmdW5jdGlvbigpe3ZhciB0LGUsaT0oblt0aGlzXXx8XCJcIikuc3BsaXQoXCIgXCIpOzE9PT1pLmxlbmd0aCYmKGk9YS50ZXN0KGlbMF0pP2kuY29uY2F0KFtcImNlbnRlclwiXSk6ci50ZXN0KGlbMF0pP1tcImNlbnRlclwiXS5jb25jYXQoaSk6W1wiY2VudGVyXCIsXCJjZW50ZXJcIl0pLGlbMF09YS50ZXN0KGlbMF0pP2lbMF06XCJjZW50ZXJcIixpWzFdPXIudGVzdChpWzFdKT9pWzFdOlwiY2VudGVyXCIsdD1sLmV4ZWMoaVswXSksZT1sLmV4ZWMoaVsxXSksd1t0aGlzXT1bdD90WzBdOjAsZT9lWzBdOjBdLG5bdGhpc109W2guZXhlYyhpWzBdKVswXSxoLmV4ZWMoaVsxXSlbMF1dfSksMT09PXkubGVuZ3RoJiYoeVsxXT15WzBdKSxcInJpZ2h0XCI9PT1uLmF0WzBdP2cubGVmdCs9ZDpcImNlbnRlclwiPT09bi5hdFswXSYmKGcubGVmdCs9ZC8yKSxcImJvdHRvbVwiPT09bi5hdFsxXT9nLnRvcCs9cDpcImNlbnRlclwiPT09bi5hdFsxXSYmKGcudG9wKz1wLzIpLGM9ZSh3LmF0LGQscCksZy5sZWZ0Kz1jWzBdLGcudG9wKz1jWzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBhLHIsbD10KHRoaXMpLGg9bC5vdXRlcldpZHRoKCksdT1sLm91dGVySGVpZ2h0KCksbT1pKHRoaXMsXCJtYXJnaW5MZWZ0XCIpLHg9aSh0aGlzLFwibWFyZ2luVG9wXCIpLEM9aCttK2kodGhpcyxcIm1hcmdpblJpZ2h0XCIpK18ud2lkdGgsaz11K3graSh0aGlzLFwibWFyZ2luQm90dG9tXCIpK18uaGVpZ2h0LFQ9dC5leHRlbmQoe30sZyksRD1lKHcubXksbC5vdXRlcldpZHRoKCksbC5vdXRlckhlaWdodCgpKTtcInJpZ2h0XCI9PT1uLm15WzBdP1QubGVmdC09aDpcImNlbnRlclwiPT09bi5teVswXSYmKFQubGVmdC09aC8yKSxcImJvdHRvbVwiPT09bi5teVsxXT9ULnRvcC09dTpcImNlbnRlclwiPT09bi5teVsxXSYmKFQudG9wLT11LzIpLFQubGVmdCs9RFswXSxULnRvcCs9RFsxXSxhPXttYXJnaW5MZWZ0Om0sbWFyZ2luVG9wOnh9LHQuZWFjaChbXCJsZWZ0XCIsXCJ0b3BcIl0sZnVuY3Rpb24oZSxpKXt0LnVpLnBvc2l0aW9uW3lbZV1dJiZ0LnVpLnBvc2l0aW9uW3lbZV1dW2ldKFQse3RhcmdldFdpZHRoOmQsdGFyZ2V0SGVpZ2h0OnAsZWxlbVdpZHRoOmgsZWxlbUhlaWdodDp1LGNvbGxpc2lvblBvc2l0aW9uOmEsY29sbGlzaW9uV2lkdGg6Qyxjb2xsaXNpb25IZWlnaHQ6ayxvZmZzZXQ6W2NbMF0rRFswXSxjWzFdK0RbMV1dLG15Om4ubXksYXQ6bi5hdCx3aXRoaW46YixlbGVtOmx9KX0pLG4udXNpbmcmJihyPWZ1bmN0aW9uKHQpe3ZhciBlPWYubGVmdC1ULmxlZnQsaT1lK2QtaCxhPWYudG9wLVQudG9wLHI9YStwLXUsYz17dGFyZ2V0OntlbGVtZW50OnYsbGVmdDpmLmxlZnQsdG9wOmYudG9wLHdpZHRoOmQsaGVpZ2h0OnB9LGVsZW1lbnQ6e2VsZW1lbnQ6bCxsZWZ0OlQubGVmdCx0b3A6VC50b3Asd2lkdGg6aCxoZWlnaHQ6dX0saG9yaXpvbnRhbDppPDA/XCJsZWZ0XCI6ZT4wP1wicmlnaHRcIjpcImNlbnRlclwiLHZlcnRpY2FsOnI8MD9cInRvcFwiOmE+MD9cImJvdHRvbVwiOlwibWlkZGxlXCJ9O2Q8aCYmbyhlK2kpPGQmJihjLmhvcml6b250YWw9XCJjZW50ZXJcIikscDx1JiZvKGErcik8cCYmKGMudmVydGljYWw9XCJtaWRkbGVcIikscyhvKGUpLG8oaSkpPnMobyhhKSxvKHIpKT9jLmltcG9ydGFudD1cImhvcml6b250YWxcIjpjLmltcG9ydGFudD1cInZlcnRpY2FsXCIsbi51c2luZy5jYWxsKHRoaXMsdCxjKX0pLGwub2Zmc2V0KHQuZXh0ZW5kKFQse3VzaW5nOnJ9KSl9KX0sdC51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIGksbj1lLndpdGhpbixvPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsYT1uLndpZHRoLHI9dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxsPW8tcixoPXIrZS5jb2xsaXNpb25XaWR0aC1hLW87ZS5jb2xsaXNpb25XaWR0aD5hP2w+MCYmaDw9MD8oaT10LmxlZnQrbCtlLmNvbGxpc2lvbldpZHRoLWEtbyx0LmxlZnQrPWwtaSk6dC5sZWZ0PWg+MCYmbDw9MD9vOmw+aD9vK2EtZS5jb2xsaXNpb25XaWR0aDpvOmw+MD90LmxlZnQrPWw6aD4wP3QubGVmdC09aDp0LmxlZnQ9cyh0LmxlZnQtcix0LmxlZnQpfSx0b3A6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPWUud2l0aGluLG89bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsYT1lLndpdGhpbi5oZWlnaHQscj10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxsPW8tcixoPXIrZS5jb2xsaXNpb25IZWlnaHQtYS1vO2UuY29sbGlzaW9uSGVpZ2h0PmE/bD4wJiZoPD0wPyhpPXQudG9wK2wrZS5jb2xsaXNpb25IZWlnaHQtYS1vLHQudG9wKz1sLWkpOnQudG9wPWg+MCYmbDw9MD9vOmw+aD9vK2EtZS5jb2xsaXNpb25IZWlnaHQ6bzpsPjA/dC50b3ArPWw6aD4wP3QudG9wLT1oOnQudG9wPXModC50b3Atcix0LnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPWUud2l0aGluLGE9cy5vZmZzZXQubGVmdCtzLnNjcm9sbExlZnQscj1zLndpZHRoLGw9cy5pc1dpbmRvdz9zLnNjcm9sbExlZnQ6cy5vZmZzZXQubGVmdCxoPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsYz1oLWwsdT1oK2UuY29sbGlzaW9uV2lkdGgtci1sLGQ9XCJsZWZ0XCI9PT1lLm15WzBdPy1lLmVsZW1XaWR0aDpcInJpZ2h0XCI9PT1lLm15WzBdP2UuZWxlbVdpZHRoOjAscD1cImxlZnRcIj09PWUuYXRbMF0/ZS50YXJnZXRXaWR0aDpcInJpZ2h0XCI9PT1lLmF0WzBdPy1lLnRhcmdldFdpZHRoOjAsZj0tMiplLm9mZnNldFswXTtjPDA/KChpPXQubGVmdCtkK3ArZitlLmNvbGxpc2lvbldpZHRoLXItYSk8MHx8aTxvKGMpKSYmKHQubGVmdCs9ZCtwK2YpOnU+MCYmKChuPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQrZCtwK2YtbCk+MHx8byhuKTx1KSYmKHQubGVmdCs9ZCtwK2YpfSx0b3A6ZnVuY3Rpb24odCxlKXt2YXIgaSxuLHM9ZS53aXRoaW4sYT1zLm9mZnNldC50b3Arcy5zY3JvbGxUb3Ascj1zLmhlaWdodCxsPXMuaXNXaW5kb3c/cy5zY3JvbGxUb3A6cy5vZmZzZXQudG9wLGg9dC50b3AtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsYz1oLWwsdT1oK2UuY29sbGlzaW9uSGVpZ2h0LXItbCxkPVwidG9wXCI9PT1lLm15WzFdPy1lLmVsZW1IZWlnaHQ6XCJib3R0b21cIj09PWUubXlbMV0/ZS5lbGVtSGVpZ2h0OjAscD1cInRvcFwiPT09ZS5hdFsxXT9lLnRhcmdldEhlaWdodDpcImJvdHRvbVwiPT09ZS5hdFsxXT8tZS50YXJnZXRIZWlnaHQ6MCxmPS0yKmUub2Zmc2V0WzFdO2M8MD8oKG49dC50b3ArZCtwK2YrZS5jb2xsaXNpb25IZWlnaHQtci1hKTwwfHxuPG8oYykpJiYodC50b3ArPWQrcCtmKTp1PjAmJigoaT10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCtkK3ArZi1sKT4wfHxvKGkpPHUpJiYodC50b3ArPWQrcCtmKX19LGZsaXBmaXQ6e2xlZnQ6ZnVuY3Rpb24oKXt0LnVpLnBvc2l0aW9uLmZsaXAubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC51aS5wb3NpdGlvbi5maXQubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRvcDpmdW5jdGlvbigpe3QudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpLHQudWkucG9zaXRpb24uZml0LnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX19KCk7dmFyIGw9KHQudWkucG9zaXRpb24sdC5leHRlbmQodC5leHByW1wiOlwiXSx7ZGF0YTp0LmV4cHIuY3JlYXRlUHNldWRvP3QuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhdC5kYXRhKGksZSl9fSk6ZnVuY3Rpb24oZSxpLG4pe3JldHVybiEhdC5kYXRhKGUsblszXSl9fSksdC5mbi5leHRlbmQoe2Rpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgdD1cIm9uc2VsZWN0c3RhcnRcImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik/XCJzZWxlY3RzdGFydFwiOlwibW91c2Vkb3duXCI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub24odCtcIi51aS1kaXNhYmxlU2VsZWN0aW9uXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZihcIi51aS1kaXNhYmxlU2VsZWN0aW9uXCIpfX0pLFwidWktZWZmZWN0cy1hbmltYXRlZFwiKSxoPXQ7dC5lZmZlY3RzPXtlZmZlY3Q6e319LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUsaSl7dmFyIG49Y1tlLnR5cGVdfHx7fTtyZXR1cm4gbnVsbD09dD9pfHwhZS5kZWY/bnVsbDplLmRlZjoodD1uLmZsb29yP35+dDpwYXJzZUZsb2F0KHQpLGlzTmFOKHQpP2UuZGVmOm4ubW9kPyh0K24ubW9kKSVuLm1vZDowPnQ/MDpuLm1heDx0P24ubWF4OnQpfWZ1bmN0aW9uIG4oZSl7dmFyIGk9bCgpLG49aS5fcmdiYT1bXTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCkscChyLGZ1bmN0aW9uKHQscyl7dmFyIG8sYT1zLnJlLmV4ZWMoZSkscj1hJiZzLnBhcnNlKGEpLGw9cy5zcGFjZXx8XCJyZ2JhXCI7aWYocilyZXR1cm4gbz1pW2xdKHIpLGlbaFtsXS5jYWNoZV09b1toW2xdLmNhY2hlXSxuPWkuX3JnYmE9by5fcmdiYSwhMX0pLG4ubGVuZ3RoPyhcIjAsMCwwLDBcIj09PW4uam9pbigpJiZ0LmV4dGVuZChuLG8udHJhbnNwYXJlbnQpLGkpOm9bZV19ZnVuY3Rpb24gcyh0LGUsaSl7cmV0dXJuIDYqKGk9KGkrMSklMSk8MT90KyhlLXQpKmkqNjoyKmk8MT9lOjMqaTwyP3QrKGUtdCkqKDIvMy1pKSo2OnR9dmFyIG8sYT0vXihbXFwtK10pPVxccyooXFxkK1xcLj9cXGQqKS8scj1be3JlOi9yZ2JhP1xcKFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyosXFxzKihcXGR7MSwzfSlcXHMqKD86LFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqKT9cXCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblt0WzFdLHRbMl0sdFszXSx0WzRdXX19LHtyZTovcmdiYT9cXChcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bMi41NSp0WzFdLDIuNTUqdFsyXSwyLjU1KnRbM10sdFs0XV19fSx7cmU6LyMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybltwYXJzZUludCh0WzFdLDE2KSxwYXJzZUludCh0WzJdLDE2KSxwYXJzZUludCh0WzNdLDE2KV19fSx7cmU6LyMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVybltwYXJzZUludCh0WzFdK3RbMV0sMTYpLHBhcnNlSW50KHRbMl0rdFsyXSwxNikscGFyc2VJbnQodFszXSt0WzNdLDE2KV19fSx7cmU6L2hzbGE/XFwoXFxzKihcXGQrKD86XFwuXFxkKyk/KVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyosXFxzKihcXGQrKD86XFwuXFxkKyk/KVxcJVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8sc3BhY2U6XCJoc2xhXCIscGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XV19fV0sbD10LkNvbG9yPWZ1bmN0aW9uKGUsaSxuLHMpe3JldHVybiBuZXcgdC5Db2xvci5mbi5wYXJzZShlLGksbixzKX0saD17cmdiYTp7cHJvcHM6e3JlZDp7aWR4OjAsdHlwZTpcImJ5dGVcIn0sZ3JlZW46e2lkeDoxLHR5cGU6XCJieXRlXCJ9LGJsdWU6e2lkeDoyLHR5cGU6XCJieXRlXCJ9fX0saHNsYTp7cHJvcHM6e2h1ZTp7aWR4OjAsdHlwZTpcImRlZ3JlZXNcIn0sc2F0dXJhdGlvbjp7aWR4OjEsdHlwZTpcInBlcmNlbnRcIn0sbGlnaHRuZXNzOntpZHg6Mix0eXBlOlwicGVyY2VudFwifX19fSxjPXtieXRlOntmbG9vcjohMCxtYXg6MjU1fSxwZXJjZW50OnttYXg6MX0sZGVncmVlczp7bW9kOjM2MCxmbG9vcjohMH19LHU9bC5zdXBwb3J0PXt9LGQ9dChcIjxwPlwiKVswXSxwPXQuZWFjaDtkLnN0eWxlLmNzc1RleHQ9XCJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpXCIsdS5yZ2JhPWQuc3R5bGUuYmFja2dyb3VuZENvbG9yLmluZGV4T2YoXCJyZ2JhXCIpPi0xLHAoaCxmdW5jdGlvbih0LGUpe2UuY2FjaGU9XCJfXCIrdCxlLnByb3BzLmFscGhhPXtpZHg6Myx0eXBlOlwicGVyY2VudFwiLGRlZjoxfX0pLGwuZm49dC5leHRlbmQobC5wcm90b3R5cGUse3BhcnNlOmZ1bmN0aW9uKGUscyxhLHIpe2lmKHZvaWQgMD09PWUpcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7KGUuanF1ZXJ5fHxlLm5vZGVUeXBlKSYmKGU9dChlKS5jc3Mocykscz12b2lkIDApO3ZhciBjPXRoaXMsdT10LnR5cGUoZSksZD10aGlzLl9yZ2JhPVtdO3JldHVybiB2b2lkIDAhPT1zJiYoZT1bZSxzLGEscl0sdT1cImFycmF5XCIpLFwic3RyaW5nXCI9PT11P3RoaXMucGFyc2UobihlKXx8by5fZGVmYXVsdCk6XCJhcnJheVwiPT09dT8ocChoLnJnYmEucHJvcHMsZnVuY3Rpb24odCxuKXtkW24uaWR4XT1pKGVbbi5pZHhdLG4pfSksdGhpcyk6XCJvYmplY3RcIj09PXU/KHAoaCxlIGluc3RhbmNlb2YgbD9mdW5jdGlvbih0LGkpe2VbaS5jYWNoZV0mJihjW2kuY2FjaGVdPWVbaS5jYWNoZV0uc2xpY2UoKSl9OmZ1bmN0aW9uKG4scyl7dmFyIG89cy5jYWNoZTtwKHMucHJvcHMsZnVuY3Rpb24odCxuKXtpZighY1tvXSYmcy50byl7aWYoXCJhbHBoYVwiPT09dHx8bnVsbD09ZVt0XSlyZXR1cm47Y1tvXT1zLnRvKGMuX3JnYmEpfWNbb11bbi5pZHhdPWkoZVt0XSxuLCEwKX0pLGNbb10mJnQuaW5BcnJheShudWxsLGNbb10uc2xpY2UoMCwzKSk8MCYmKGNbb11bM109MSxzLmZyb20mJihjLl9yZ2JhPXMuZnJvbShjW29dKSkpfSksdGhpcyk6dm9pZCAwfSxpczpmdW5jdGlvbih0KXt2YXIgZT1sKHQpLGk9ITAsbj10aGlzO3JldHVybiBwKGgsZnVuY3Rpb24odCxzKXt2YXIgbyxhPWVbcy5jYWNoZV07cmV0dXJuIGEmJihvPW5bcy5jYWNoZV18fHMudG8mJnMudG8obi5fcmdiYSl8fFtdLHAocy5wcm9wcyxmdW5jdGlvbih0LGUpe2lmKG51bGwhPWFbZS5pZHhdKXJldHVybiBpPWFbZS5pZHhdPT09b1tlLmlkeF19KSksaX0pLGl9LF9zcGFjZTpmdW5jdGlvbigpe3ZhciB0PVtdLGU9dGhpcztyZXR1cm4gcChoLGZ1bmN0aW9uKGksbil7ZVtuLmNhY2hlXSYmdC5wdXNoKGkpfSksdC5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBuPWwodCkscz1uLl9zcGFjZSgpLG89aFtzXSxhPTA9PT10aGlzLmFscGhhKCk/bChcInRyYW5zcGFyZW50XCIpOnRoaXMscj1hW28uY2FjaGVdfHxvLnRvKGEuX3JnYmEpLHU9ci5zbGljZSgpO3JldHVybiBuPW5bby5jYWNoZV0scChvLnByb3BzLGZ1bmN0aW9uKHQscyl7dmFyIG89cy5pZHgsYT1yW29dLGw9bltvXSxoPWNbcy50eXBlXXx8e307bnVsbCE9PWwmJihudWxsPT09YT91W29dPWw6KGgubW9kJiYobC1hPmgubW9kLzI/YSs9aC5tb2Q6YS1sPmgubW9kLzImJihhLT1oLm1vZCkpLHVbb109aSgobC1hKSplK2EscykpKX0pLHRoaXNbc10odSl9LGJsZW5kOmZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLl9yZ2JhWzNdKXJldHVybiB0aGlzO3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxuPWkucG9wKCkscz1sKGUpLl9yZ2JhO3JldHVybiBsKHQubWFwKGksZnVuY3Rpb24odCxlKXtyZXR1cm4oMS1uKSpzW2VdK24qdH0pKX0sdG9SZ2JhU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9XCJyZ2JhKFwiLGk9dC5tYXAodGhpcy5fcmdiYSxmdW5jdGlvbih0LGUpe3JldHVybiBudWxsPT10P2U+Mj8xOjA6dH0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksZT1cInJnYihcIiksZStpLmpvaW4oKStcIilcIn0sdG9Ic2xhU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9XCJoc2xhKFwiLGk9dC5tYXAodGhpcy5oc2xhKCksZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dCYmKHQ9ZT4yPzE6MCksZSYmZTwzJiYodD1NYXRoLnJvdW5kKDEwMCp0KStcIiVcIiksdH0pO3JldHVybiAxPT09aVszXSYmKGkucG9wKCksZT1cImhzbChcIiksZStpLmpvaW4oKStcIilcIn0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fcmdiYS5zbGljZSgpLG49aS5wb3AoKTtyZXR1cm4gZSYmaS5wdXNoKH5+KDI1NSpuKSksXCIjXCIrdC5tYXAoaSxmdW5jdGlvbih0KXtyZXR1cm4gMT09PSh0PSh0fHwwKS50b1N0cmluZygxNikpLmxlbmd0aD9cIjBcIit0OnR9KS5qb2luKFwiXCIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5fcmdiYVszXT9cInRyYW5zcGFyZW50XCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxsLmZuLnBhcnNlLnByb3RvdHlwZT1sLmZuLGguaHNsYS50bz1mdW5jdGlvbih0KXtpZihudWxsPT10WzBdfHxudWxsPT10WzFdfHxudWxsPT10WzJdKXJldHVybltudWxsLG51bGwsbnVsbCx0WzNdXTt2YXIgZSxpLG49dFswXS8yNTUscz10WzFdLzI1NSxvPXRbMl0vMjU1LGE9dFszXSxyPU1hdGgubWF4KG4scyxvKSxsPU1hdGgubWluKG4scyxvKSxoPXItbCxjPXIrbCx1PS41KmM7cmV0dXJuIGU9bD09PXI/MDpuPT09cj82MCoocy1vKS9oKzM2MDpzPT09cj82MCooby1uKS9oKzEyMDo2MCoobi1zKS9oKzI0MCxpPTA9PT1oPzA6dTw9LjU/aC9jOmgvKDItYyksW01hdGgucm91bmQoZSklMzYwLGksdSxudWxsPT1hPzE6YV19LGguaHNsYS5mcm9tPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXRbMF18fG51bGw9PXRbMV18fG51bGw9PXRbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLHRbM11dO3ZhciBlPXRbMF0vMzYwLGk9dFsxXSxuPXRbMl0sbz10WzNdLGE9bjw9LjU/biooMStpKTpuK2ktbippLHI9MipuLWE7cmV0dXJuW01hdGgucm91bmQoMjU1KnMocixhLGUrMS8zKSksTWF0aC5yb3VuZCgyNTUqcyhyLGEsZSkpLE1hdGgucm91bmQoMjU1KnMocixhLGUtMS8zKSksb119LHAoaCxmdW5jdGlvbihlLG4pe3ZhciBzPW4ucHJvcHMsbz1uLmNhY2hlLHI9bi50byxoPW4uZnJvbTtsLmZuW2VdPWZ1bmN0aW9uKGUpe2lmKHImJiF0aGlzW29dJiYodGhpc1tvXT1yKHRoaXMuX3JnYmEpKSx2b2lkIDA9PT1lKXJldHVybiB0aGlzW29dLnNsaWNlKCk7dmFyIG4sYT10LnR5cGUoZSksYz1cImFycmF5XCI9PT1hfHxcIm9iamVjdFwiPT09YT9lOmFyZ3VtZW50cyx1PXRoaXNbb10uc2xpY2UoKTtyZXR1cm4gcChzLGZ1bmN0aW9uKHQsZSl7dmFyIG49Y1tcIm9iamVjdFwiPT09YT90OmUuaWR4XTtudWxsPT1uJiYobj11W2UuaWR4XSksdVtlLmlkeF09aShuLGUpfSksaD8oKG49bChoKHUpKSlbb109dSxuKTpsKHUpfSxwKHMsZnVuY3Rpb24oaSxuKXtsLmZuW2ldfHwobC5mbltpXT1mdW5jdGlvbihzKXt2YXIgbyxyPXQudHlwZShzKSxsPVwiYWxwaGFcIj09PWk/dGhpcy5faHNsYT9cImhzbGFcIjpcInJnYmFcIjplLGg9dGhpc1tsXSgpLGM9aFtuLmlkeF07cmV0dXJuXCJ1bmRlZmluZWRcIj09PXI/YzooXCJmdW5jdGlvblwiPT09ciYmKHM9cy5jYWxsKHRoaXMsYykscj10LnR5cGUocykpLG51bGw9PXMmJm4uZW1wdHk/dGhpczooXCJzdHJpbmdcIj09PXImJihvPWEuZXhlYyhzKSkmJihzPWMrcGFyc2VGbG9hdChvWzJdKSooXCIrXCI9PT1vWzFdPzE6LTEpKSxoW24uaWR4XT1zLHRoaXNbbF0oaCkpKX0pfSl9KSxsLmhvb2s9ZnVuY3Rpb24oZSl7dmFyIGk9ZS5zcGxpdChcIiBcIik7cChpLGZ1bmN0aW9uKGUsaSl7dC5jc3NIb29rc1tpXT17c2V0OmZ1bmN0aW9uKGUscyl7dmFyIG8sYSxyPVwiXCI7aWYoXCJ0cmFuc3BhcmVudFwiIT09cyYmKFwic3RyaW5nXCIhPT10LnR5cGUocyl8fChvPW4ocykpKSl7aWYocz1sKG98fHMpLCF1LnJnYmEmJjEhPT1zLl9yZ2JhWzNdKXtmb3IoYT1cImJhY2tncm91bmRDb2xvclwiPT09aT9lLnBhcmVudE5vZGU6ZTsoXCJcIj09PXJ8fFwidHJhbnNwYXJlbnRcIj09PXIpJiZhJiZhLnN0eWxlOyl0cnl7cj10LmNzcyhhLFwiYmFja2dyb3VuZENvbG9yXCIpLGE9YS5wYXJlbnROb2RlfWNhdGNoKHQpe31zPXMuYmxlbmQociYmXCJ0cmFuc3BhcmVudFwiIT09cj9yOlwiX2RlZmF1bHRcIil9cz1zLnRvUmdiYVN0cmluZygpfXRyeXtlLnN0eWxlW2ldPXN9Y2F0Y2godCl7fX19LHQuZnguc3RlcFtpXT1mdW5jdGlvbihlKXtlLmNvbG9ySW5pdHx8KGUuc3RhcnQ9bChlLmVsZW0saSksZS5lbmQ9bChlLmVuZCksZS5jb2xvckluaXQ9ITApLHQuY3NzSG9va3NbaV0uc2V0KGUuZWxlbSxlLnN0YXJ0LnRyYW5zaXRpb24oZS5lbmQsZS5wb3MpKX19KX0sbC5ob29rKFwiYmFja2dyb3VuZENvbG9yIGJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckxlZnRDb2xvciBib3JkZXJSaWdodENvbG9yIGJvcmRlclRvcENvbG9yIGNvbG9yIGNvbHVtblJ1bGVDb2xvciBvdXRsaW5lQ29sb3IgdGV4dERlY29yYXRpb25Db2xvciB0ZXh0RW1waGFzaXNDb2xvclwiKSx0LmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIHAoW1wiVG9wXCIsXCJSaWdodFwiLFwiQm90dG9tXCIsXCJMZWZ0XCJdLGZ1bmN0aW9uKGksbil7ZVtcImJvcmRlclwiK24rXCJDb2xvclwiXT10fSksZX19LG89dC5Db2xvci5uYW1lcz17YXF1YTpcIiMwMGZmZmZcIixibGFjazpcIiMwMDAwMDBcIixibHVlOlwiIzAwMDBmZlwiLGZ1Y2hzaWE6XCIjZmYwMGZmXCIsZ3JheTpcIiM4MDgwODBcIixncmVlbjpcIiMwMDgwMDBcIixsaW1lOlwiIzAwZmYwMFwiLG1hcm9vbjpcIiM4MDAwMDBcIixuYXZ5OlwiIzAwMDA4MFwiLG9saXZlOlwiIzgwODAwMFwiLHB1cnBsZTpcIiM4MDAwODBcIixyZWQ6XCIjZmYwMDAwXCIsc2lsdmVyOlwiI2MwYzBjMFwiLHRlYWw6XCIjMDA4MDgwXCIsd2hpdGU6XCIjZmZmZmZmXCIseWVsbG93OlwiI2ZmZmYwMFwiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDpcIiNmZmZmZmZcIn19KGgpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgaSxuLHM9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3P2Uub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGUsbnVsbCk6ZS5jdXJyZW50U3R5bGUsbz17fTtpZihzJiZzLmxlbmd0aCYmc1swXSYmc1tzWzBdXSlmb3Iobj1zLmxlbmd0aDtuLS07KVwic3RyaW5nXCI9PXR5cGVvZiBzW2k9c1tuXV0mJihvW3QuY2FtZWxDYXNlKGkpXT1zW2ldKTtlbHNlIGZvcihpIGluIHMpXCJzdHJpbmdcIj09dHlwZW9mIHNbaV0mJihvW2ldPXNbaV0pO3JldHVybiBvfWZ1bmN0aW9uIGkoZSxpKXt2YXIgbixvLGE9e307Zm9yKG4gaW4gaSlvPWlbbl0sZVtuXSE9PW8mJihzW25dfHwhdC5meC5zdGVwW25dJiZpc05hTihwYXJzZUZsb2F0KG8pKXx8KGFbbl09bykpO3JldHVybiBhfXZhciBuPVtcImFkZFwiLFwicmVtb3ZlXCIsXCJ0b2dnbGVcIl0scz17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07dC5lYWNoKFtcImJvcmRlckxlZnRTdHlsZVwiLFwiYm9yZGVyUmlnaHRTdHlsZVwiLFwiYm9yZGVyQm90dG9tU3R5bGVcIixcImJvcmRlclRvcFN0eWxlXCJdLGZ1bmN0aW9uKGUsaSl7dC5meC5zdGVwW2ldPWZ1bmN0aW9uKHQpeyhcIm5vbmVcIiE9PXQuZW5kJiYhdC5zZXRBdHRyfHwxPT09dC5wb3MmJiF0LnNldEF0dHIpJiYoaC5zdHlsZSh0LmVsZW0saSx0LmVuZCksdC5zZXRBdHRyPSEwKX19KSx0LmZuLmFkZEJhY2t8fCh0LmZuLmFkZEJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PXQ/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIodCkpfSksdC5lZmZlY3RzLmFuaW1hdGVDbGFzcz1mdW5jdGlvbihzLG8sYSxyKXt2YXIgbD10LnNwZWVkKG8sYSxyKTtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBvLGE9dCh0aGlzKSxyPWEuYXR0cihcImNsYXNzXCIpfHxcIlwiLGg9bC5jaGlsZHJlbj9hLmZpbmQoXCIqXCIpLmFkZEJhY2soKTphO2g9aC5tYXAoZnVuY3Rpb24oKXtyZXR1cm57ZWw6dCh0aGlzKSxzdGFydDplKHRoaXMpfX0pLChvPWZ1bmN0aW9uKCl7dC5lYWNoKG4sZnVuY3Rpb24odCxlKXtzW2VdJiZhW2UrXCJDbGFzc1wiXShzW2VdKX0pfSkoKSxoPWgubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kPWUodGhpcy5lbFswXSksdGhpcy5kaWZmPWkodGhpcy5zdGFydCx0aGlzLmVuZCksdGhpc30pLGEuYXR0cihcImNsYXNzXCIsciksaD1oLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10LkRlZmVycmVkKCksbj10LmV4dGVuZCh7fSxsLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZShlKX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixuKSxpLnByb21pc2UoKX0pLHQud2hlbi5hcHBseSh0LGguZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXtvKCksdC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWw7dC5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbih0KXtlLmNzcyh0LFwiXCIpfSl9KSxsLmNvbXBsZXRlLmNhbGwoYVswXSl9KX0pfSx0LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGksbixzLG8pe3JldHVybiBuP3QuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aX0sbixzLG8pOmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0odC5mbi5hZGRDbGFzcykscmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGksbixzLG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTppfSxuLHMsbyk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSh0LmZuLnJlbW92ZUNsYXNzKSx0b2dnbGVDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxuLHMsbyxhKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIG58fHZvaWQgMD09PW4/cz90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyxuP3thZGQ6aX06e3JlbW92ZTppfSxzLG8sYSk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTppfSxuLHMsbyl9fSh0LmZuLnRvZ2dsZUNsYXNzKSxzd2l0Y2hDbGFzczpmdW5jdGlvbihlLGksbixzLG8pe3JldHVybiB0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOmkscmVtb3ZlOmV9LG4scyxvKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxpLG4scyl7cmV0dXJuIHQuaXNQbGFpbk9iamVjdChlKSYmKGk9ZSxlPWUuZWZmZWN0KSxlPXtlZmZlY3Q6ZX0sbnVsbD09aSYmKGk9e30pLHQuaXNGdW5jdGlvbihpKSYmKHM9aSxuPW51bGwsaT17fSksKFwibnVtYmVyXCI9PXR5cGVvZiBpfHx0LmZ4LnNwZWVkc1tpXSkmJihzPW4sbj1pLGk9e30pLHQuaXNGdW5jdGlvbihuKSYmKHM9bixuPW51bGwpLGkmJnQuZXh0ZW5kKGUsaSksbj1ufHxpLmR1cmF0aW9uLGUuZHVyYXRpb249dC5meC5vZmY/MDpcIm51bWJlclwiPT10eXBlb2Ygbj9uOm4gaW4gdC5meC5zcGVlZHM/dC5meC5zcGVlZHNbbl06dC5meC5zcGVlZHMuX2RlZmF1bHQsZS5jb21wbGV0ZT1zfHxpLmNvbXBsZXRlLGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4hKGUmJlwibnVtYmVyXCIhPXR5cGVvZiBlJiYhdC5meC5zcGVlZHNbZV0pfHxcInN0cmluZ1wiPT10eXBlb2YgZSYmIXQuZWZmZWN0cy5lZmZlY3RbZV18fCEhdC5pc0Z1bmN0aW9uKGUpfHxcIm9iamVjdFwiPT10eXBlb2YgZSYmIWUuZWZmZWN0fWZ1bmN0aW9uIG4odCxlKXt2YXIgaT1lLm91dGVyV2lkdGgoKSxuPWUub3V0ZXJIZWlnaHQoKSxzPS9ecmVjdFxcKCgtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0bylcXCkkLy5leGVjKHQpfHxbXCJcIiwwLGksbiwwXTtyZXR1cm57dG9wOnBhcnNlRmxvYXQoc1sxXSl8fDAscmlnaHQ6XCJhdXRvXCI9PT1zWzJdP2k6cGFyc2VGbG9hdChzWzJdKSxib3R0b206XCJhdXRvXCI9PT1zWzNdP246cGFyc2VGbG9hdChzWzNdKSxsZWZ0OnBhcnNlRmxvYXQoc1s0XSl8fDB9fXQuZXhwciYmdC5leHByLmZpbHRlcnMmJnQuZXhwci5maWx0ZXJzLmFuaW1hdGVkJiYodC5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhdChpKS5kYXRhKGwpfHxlKGkpfX0odC5leHByLmZpbHRlcnMuYW5pbWF0ZWQpKSwhMSE9PXQudWlCYWNrQ29tcGF0JiZ0LmV4dGVuZCh0LmVmZmVjdHMse3NhdmU6ZnVuY3Rpb24odCxlKXtmb3IodmFyIGk9MCxuPWUubGVuZ3RoO2k8bjtpKyspbnVsbCE9PWVbaV0mJnQuZGF0YShcInVpLWVmZmVjdHMtXCIrZVtpXSx0WzBdLnN0eWxlW2VbaV1dKX0scmVzdG9yZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaSxuPTAscz1lLmxlbmd0aDtuPHM7bisrKW51bGwhPT1lW25dJiYoaT10LmRhdGEoXCJ1aS1lZmZlY3RzLVwiK2Vbbl0pLHQuY3NzKGVbbl0saSkpfSxzZXRNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJ0b2dnbGVcIj09PWUmJihlPXQuaXMoXCI6aGlkZGVuXCIpP1wic2hvd1wiOlwiaGlkZVwiKSxlfSxjcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKGUpe2lmKGUucGFyZW50KCkuaXMoXCIudWktZWZmZWN0cy13cmFwcGVyXCIpKXJldHVybiBlLnBhcmVudCgpO3ZhciBpPXt3aWR0aDplLm91dGVyV2lkdGgoITApLGhlaWdodDplLm91dGVySGVpZ2h0KCEwKSxmbG9hdDplLmNzcyhcImZsb2F0XCIpfSxuPXQoXCI8ZGl2PjwvZGl2PlwiKS5hZGRDbGFzcyhcInVpLWVmZmVjdHMtd3JhcHBlclwiKS5jc3Moe2ZvbnRTaXplOlwiMTAwJVwiLGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLGJvcmRlcjpcIm5vbmVcIixtYXJnaW46MCxwYWRkaW5nOjB9KSxzPXt3aWR0aDplLndpZHRoKCksaGVpZ2h0OmUuaGVpZ2h0KCl9LG89ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt0cnl7by5pZH1jYXRjaCh0KXtvPWRvY3VtZW50LmJvZHl9cmV0dXJuIGUud3JhcChuKSwoZVswXT09PW98fHQuY29udGFpbnMoZVswXSxvKSkmJnQobykudHJpZ2dlcihcImZvY3VzXCIpLG49ZS5wYXJlbnQoKSxcInN0YXRpY1wiPT09ZS5jc3MoXCJwb3NpdGlvblwiKT8obi5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIn0pLGUuY3NzKHtwb3NpdGlvbjpcInJlbGF0aXZlXCJ9KSk6KHQuZXh0ZW5kKGkse3Bvc2l0aW9uOmUuY3NzKFwicG9zaXRpb25cIiksekluZGV4OmUuY3NzKFwiei1pbmRleFwiKX0pLHQuZWFjaChbXCJ0b3BcIixcImxlZnRcIixcImJvdHRvbVwiLFwicmlnaHRcIl0sZnVuY3Rpb24odCxuKXtpW25dPWUuY3NzKG4pLGlzTmFOKHBhcnNlSW50KGlbbl0sMTApKSYmKGlbbl09XCJhdXRvXCIpfSksZS5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIix0b3A6MCxsZWZ0OjAscmlnaHQ6XCJhdXRvXCIsYm90dG9tOlwiYXV0b1wifSkpLGUuY3NzKHMpLG4uY3NzKGkpLnNob3coKX0scmVtb3ZlV3JhcHBlcjpmdW5jdGlvbihlKXt2YXIgaT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiBlLnBhcmVudCgpLmlzKFwiLnVpLWVmZmVjdHMtd3JhcHBlclwiKSYmKGUucGFyZW50KCkucmVwbGFjZVdpdGgoZSksKGVbMF09PT1pfHx0LmNvbnRhaW5zKGVbMF0saSkpJiZ0KGkpLnRyaWdnZXIoXCJmb2N1c1wiKSksZX19KSx0LmV4dGVuZCh0LmVmZmVjdHMse3ZlcnNpb246XCIxLjEyLjFcIixkZWZpbmU6ZnVuY3Rpb24oZSxpLG4pe3JldHVybiBufHwobj1pLGk9XCJlZmZlY3RcIiksdC5lZmZlY3RzLmVmZmVjdFtlXT1uLHQuZWZmZWN0cy5lZmZlY3RbZV0ubW9kZT1pLG59LHNjYWxlZERpbWVuc2lvbnM6ZnVuY3Rpb24odCxlLGkpe2lmKDA9PT1lKXJldHVybntoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTt2YXIgbj1cImhvcml6b250YWxcIiE9PWk/KGV8fDEwMCkvMTAwOjEscz1cInZlcnRpY2FsXCIhPT1pPyhlfHwxMDApLzEwMDoxO3JldHVybntoZWlnaHQ6dC5oZWlnaHQoKSpzLHdpZHRoOnQud2lkdGgoKSpuLG91dGVySGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSpzLG91dGVyV2lkdGg6dC5vdXRlcldpZHRoKCkqbn19LGNsaXBUb0JveDpmdW5jdGlvbih0KXtyZXR1cm57d2lkdGg6dC5jbGlwLnJpZ2h0LXQuY2xpcC5sZWZ0LGhlaWdodDp0LmNsaXAuYm90dG9tLXQuY2xpcC50b3AsbGVmdDp0LmNsaXAubGVmdCx0b3A6dC5jbGlwLnRvcH19LHVuc2hpZnQ6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPXQucXVldWUoKTtlPjEmJm4uc3BsaWNlLmFwcGx5KG4sWzEsMF0uY29uY2F0KG4uc3BsaWNlKGUsaSkpKSx0LmRlcXVldWUoKX0sc2F2ZVN0eWxlOmZ1bmN0aW9uKHQpe3QuZGF0YShcInVpLWVmZmVjdHMtc3R5bGVcIix0WzBdLnN0eWxlLmNzc1RleHQpfSxyZXN0b3JlU3R5bGU6ZnVuY3Rpb24odCl7dFswXS5zdHlsZS5jc3NUZXh0PXQuZGF0YShcInVpLWVmZmVjdHMtc3R5bGVcIil8fFwiXCIsdC5yZW1vdmVEYXRhKFwidWktZWZmZWN0cy1zdHlsZVwiKX0sbW9kZTpmdW5jdGlvbih0LGUpe3ZhciBpPXQuaXMoXCI6aGlkZGVuXCIpO3JldHVyblwidG9nZ2xlXCI9PT1lJiYoZT1pP1wic2hvd1wiOlwiaGlkZVwiKSxcbihpP1wiaGlkZVwiPT09ZTpcInNob3dcIj09PWUpJiYoZT1cIm5vbmVcIiksZX0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxuO3N3aXRjaCh0WzBdKXtjYXNlXCJ0b3BcIjppPTA7YnJlYWs7Y2FzZVwibWlkZGxlXCI6aT0uNTticmVhaztjYXNlXCJib3R0b21cIjppPTE7YnJlYWs7ZGVmYXVsdDppPXRbMF0vZS5oZWlnaHR9c3dpdGNoKHRbMV0pe2Nhc2VcImxlZnRcIjpuPTA7YnJlYWs7Y2FzZVwiY2VudGVyXCI6bj0uNTticmVhaztjYXNlXCJyaWdodFwiOm49MTticmVhaztkZWZhdWx0Om49dFsxXS9lLndpZHRofXJldHVybnt4Om4seTppfX0sY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSl7dmFyIGksbj1lLmNzcyhcInBvc2l0aW9uXCIpLHM9ZS5wb3NpdGlvbigpO3JldHVybiBlLmNzcyh7bWFyZ2luVG9wOmUuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpbkJvdHRvbTplLmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OmUuY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDplLmNzcyhcIm1hcmdpblJpZ2h0XCIpfSkub3V0ZXJXaWR0aChlLm91dGVyV2lkdGgoKSkub3V0ZXJIZWlnaHQoZS5vdXRlckhlaWdodCgpKSwvXihzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KG4pJiYobj1cImFic29sdXRlXCIsaT10KFwiPFwiK2VbMF0ubm9kZU5hbWUrXCI+XCIpLmluc2VydEFmdGVyKGUpLmNzcyh7ZGlzcGxheTovXihpbmxpbmV8cnVieSkvLnRlc3QoZS5jc3MoXCJkaXNwbGF5XCIpKT9cImlubGluZS1ibG9ja1wiOlwiYmxvY2tcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsbWFyZ2luVG9wOmUuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpbkJvdHRvbTplLmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OmUuY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDplLmNzcyhcIm1hcmdpblJpZ2h0XCIpLGZsb2F0OmUuY3NzKFwiZmxvYXRcIil9KS5vdXRlcldpZHRoKGUub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodChlLm91dGVySGVpZ2h0KCkpLmFkZENsYXNzKFwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiKSxlLmRhdGEoXCJ1aS1lZmZlY3RzLXBsYWNlaG9sZGVyXCIsaSkpLGUuY3NzKHtwb3NpdGlvbjpuLGxlZnQ6cy5sZWZ0LHRvcDpzLnRvcH0pLGl9LHJlbW92ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiLGk9dC5kYXRhKGUpO2kmJihpLnJlbW92ZSgpLHQucmVtb3ZlRGF0YShlKSl9LGNsZWFuVXA6ZnVuY3Rpb24oZSl7dC5lZmZlY3RzLnJlc3RvcmVTdHlsZShlKSx0LmVmZmVjdHMucmVtb3ZlUGxhY2Vob2xkZXIoZSl9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24oZSxpLG4scyl7cmV0dXJuIHM9c3x8e30sdC5lYWNoKGksZnVuY3Rpb24odCxpKXt2YXIgbz1lLmNzc1VuaXQoaSk7b1swXT4wJiYoc1tpXT1vWzBdKm4rb1sxXSl9KSxzfX0pLHQuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIGkoKXt0LmlzRnVuY3Rpb24oaCkmJmguY2FsbChhWzBdKSx0LmlzRnVuY3Rpb24oZSkmJmUoKX12YXIgYT10KHRoaXMpO24ubW9kZT11LnNoaWZ0KCksITE9PT10LnVpQmFja0NvbXBhdHx8bz9cIm5vbmVcIj09PW4ubW9kZT8oYVtjXSgpLGkoKSk6cy5jYWxsKGFbMF0sbixmdW5jdGlvbigpe2EucmVtb3ZlRGF0YShsKSx0LmVmZmVjdHMuY2xlYW5VcChhKSxcImhpZGVcIj09PW4ubW9kZSYmYS5oaWRlKCksaSgpfSk6KGEuaXMoXCI6aGlkZGVuXCIpP1wiaGlkZVwiPT09YzpcInNob3dcIj09PWMpPyhhW2NdKCksaSgpKTpzLmNhbGwoYVswXSxuLGkpfXZhciBuPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLHM9dC5lZmZlY3RzLmVmZmVjdFtuLmVmZmVjdF0sbz1zLm1vZGUsYT1uLnF1ZXVlLHI9YXx8XCJmeFwiLGg9bi5jb21wbGV0ZSxjPW4ubW9kZSx1PVtdLGQ9ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKSxuPXQuZWZmZWN0cy5tb2RlKGksYyl8fG87aS5kYXRhKGwsITApLHUucHVzaChuKSxvJiYoXCJzaG93XCI9PT1ufHxuPT09byYmXCJoaWRlXCI9PT1uKSYmaS5zaG93KCksbyYmXCJub25lXCI9PT1ufHx0LmVmZmVjdHMuc2F2ZVN0eWxlKGkpLHQuaXNGdW5jdGlvbihlKSYmZSgpfTtyZXR1cm4gdC5meC5vZmZ8fCFzP2M/dGhpc1tjXShuLmR1cmF0aW9uLGgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2gmJmguY2FsbCh0aGlzKX0pOiExPT09YT90aGlzLmVhY2goZCkuZWFjaChpKTp0aGlzLnF1ZXVlKHIsZCkucXVldWUocixpKX0sc2hvdzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7aWYoaShuKSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMubW9kZT1cInNob3dcIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMscyl9fSh0LmZuLnNob3cpLGhpZGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGkobikpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBzPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBzLm1vZGU9XCJoaWRlXCIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLHMpfX0odC5mbi5oaWRlKSx0b2dnbGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKGkobil8fFwiYm9vbGVhblwiPT10eXBlb2YgbilyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHM9ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHMubW9kZT1cInRvZ2dsZVwiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxzKX19KHQuZm4udG9nZ2xlKSxjc3NVbml0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuY3NzKGUpLG49W107cmV0dXJuIHQuZWFjaChbXCJlbVwiLFwicHhcIixcIiVcIixcInB0XCJdLGZ1bmN0aW9uKHQsZSl7aS5pbmRleE9mKGUpPjAmJihuPVtwYXJzZUZsb2F0KGkpLGVdKX0pLG59LGNzc0NsaXA6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dGhpcy5jc3MoXCJjbGlwXCIsXCJyZWN0KFwiK3QudG9wK1wicHggXCIrdC5yaWdodCtcInB4IFwiK3QuYm90dG9tK1wicHggXCIrdC5sZWZ0K1wicHgpXCIpOm4odGhpcy5jc3MoXCJjbGlwXCIpLHRoaXMpfSx0cmFuc2ZlcjpmdW5jdGlvbihlLGkpe3ZhciBuPXQodGhpcykscz10KGUudG8pLG89XCJmaXhlZFwiPT09cy5jc3MoXCJwb3NpdGlvblwiKSxhPXQoXCJib2R5XCIpLHI9bz9hLnNjcm9sbFRvcCgpOjAsbD1vP2Euc2Nyb2xsTGVmdCgpOjAsaD1zLm9mZnNldCgpLGM9e3RvcDpoLnRvcC1yLGxlZnQ6aC5sZWZ0LWwsaGVpZ2h0OnMuaW5uZXJIZWlnaHQoKSx3aWR0aDpzLmlubmVyV2lkdGgoKX0sdT1uLm9mZnNldCgpLGQ9dChcIjxkaXYgY2xhc3M9J3VpLWVmZmVjdHMtdHJhbnNmZXInPjwvZGl2PlwiKS5hcHBlbmRUbyhcImJvZHlcIikuYWRkQ2xhc3MoZS5jbGFzc05hbWUpLmNzcyh7dG9wOnUudG9wLXIsbGVmdDp1LmxlZnQtbCxoZWlnaHQ6bi5pbm5lckhlaWdodCgpLHdpZHRoOm4uaW5uZXJXaWR0aCgpLHBvc2l0aW9uOm8/XCJmaXhlZFwiOlwiYWJzb2x1dGVcIn0pLmFuaW1hdGUoYyxlLmR1cmF0aW9uLGUuZWFzaW5nLGZ1bmN0aW9uKCl7ZC5yZW1vdmUoKSx0LmlzRnVuY3Rpb24oaSkmJmkoKX0pfX0pLHQuZnguc3RlcC5jbGlwPWZ1bmN0aW9uKGUpe2UuY2xpcEluaXR8fChlLnN0YXJ0PXQoZS5lbGVtKS5jc3NDbGlwKCksXCJzdHJpbmdcIj09dHlwZW9mIGUuZW5kJiYoZS5lbmQ9bihlLmVuZCxlLmVsZW0pKSxlLmNsaXBJbml0PSEwKSx0KGUuZWxlbSkuY3NzQ2xpcCh7dG9wOmUucG9zKihlLmVuZC50b3AtZS5zdGFydC50b3ApK2Uuc3RhcnQudG9wLHJpZ2h0OmUucG9zKihlLmVuZC5yaWdodC1lLnN0YXJ0LnJpZ2h0KStlLnN0YXJ0LnJpZ2h0LGJvdHRvbTplLnBvcyooZS5lbmQuYm90dG9tLWUuc3RhcnQuYm90dG9tKStlLnN0YXJ0LmJvdHRvbSxsZWZ0OmUucG9zKihlLmVuZC5sZWZ0LWUuc3RhcnQubGVmdCkrZS5zdGFydC5sZWZ0fSl9fSgpLGZ1bmN0aW9uKCl7dmFyIGU9e307dC5lYWNoKFtcIlF1YWRcIixcIkN1YmljXCIsXCJRdWFydFwiLFwiUXVpbnRcIixcIkV4cG9cIl0sZnVuY3Rpb24odCxpKXtlW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLnBvdyhlLHQrMil9fSksdC5leHRlbmQoZSx7U2luZTpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLmNvcyh0Kk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24odCl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtdCp0KX0sRWxhc3RpYzpmdW5jdGlvbih0KXtyZXR1cm4gMD09PXR8fDE9PT10P3Q6LU1hdGgucG93KDIsOCoodC0xKSkqTWF0aC5zaW4oKDgwKih0LTEpLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24odCl7cmV0dXJuIHQqdCooMyp0LTIpfSxCb3VuY2U6ZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk9NDt0PCgoZT1NYXRoLnBvdygyLC0taSkpLTEpLzExOyk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLWkpLTcuNTYyNSpNYXRoLnBvdygoMyplLTIpLzIyLXQsMil9fSksdC5lYWNoKGUsZnVuY3Rpb24oZSxpKXt0LmVhc2luZ1tcImVhc2VJblwiK2VdPWksdC5lYXNpbmdbXCJlYXNlT3V0XCIrZV09ZnVuY3Rpb24odCl7cmV0dXJuIDEtaSgxLXQpfSx0LmVhc2luZ1tcImVhc2VJbk91dFwiK2VdPWZ1bmN0aW9uKHQpe3JldHVybiB0PC41P2koMip0KS8yOjEtaSgtMip0KzIpLzJ9fSl9KCksdC5lZmZlY3RzLHQuZWZmZWN0cy5kZWZpbmUoXCJibGluZFwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49e3VwOltcImJvdHRvbVwiLFwidG9wXCJdLHZlcnRpY2FsOltcImJvdHRvbVwiLFwidG9wXCJdLGRvd246W1widG9wXCIsXCJib3R0b21cIl0sbGVmdDpbXCJyaWdodFwiLFwibGVmdFwiXSxob3Jpem9udGFsOltcInJpZ2h0XCIsXCJsZWZ0XCJdLHJpZ2h0OltcImxlZnRcIixcInJpZ2h0XCJdfSxzPXQodGhpcyksbz1lLmRpcmVjdGlvbnx8XCJ1cFwiLGE9cy5jc3NDbGlwKCkscj17Y2xpcDp0LmV4dGVuZCh7fSxhKX0sbD10LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIocyk7ci5jbGlwW25bb11bMF1dPXIuY2xpcFtuW29dWzFdXSxcInNob3dcIj09PWUubW9kZSYmKHMuY3NzQ2xpcChyLmNsaXApLGwmJmwuY3NzKHQuZWZmZWN0cy5jbGlwVG9Cb3gocikpLHIuY2xpcD1hKSxsJiZsLmFuaW1hdGUodC5lZmZlY3RzLmNsaXBUb0JveChyKSxlLmR1cmF0aW9uLGUuZWFzaW5nKSxzLmFuaW1hdGUocix7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcImJvdW5jZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvLGE9dCh0aGlzKSxyPWUubW9kZSxsPVwiaGlkZVwiPT09cixoPVwic2hvd1wiPT09cixjPWUuZGlyZWN0aW9ufHxcInVwXCIsdT1lLmRpc3RhbmNlLGQ9ZS50aW1lc3x8NSxwPTIqZCsoaHx8bD8xOjApLGY9ZS5kdXJhdGlvbi9wLGc9ZS5lYXNpbmcsbT1cInVwXCI9PT1jfHxcImRvd25cIj09PWM/XCJ0b3BcIjpcImxlZnRcIix2PVwidXBcIj09PWN8fFwibGVmdFwiPT09YyxiPTAsXz1hLnF1ZXVlKCkubGVuZ3RoO2Zvcih0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoYSksbz1hLmNzcyhtKSx1fHwodT1hW1widG9wXCI9PT1tP1wib3V0ZXJIZWlnaHRcIjpcIm91dGVyV2lkdGhcIl0oKS8zKSxoJiYoKHM9e29wYWNpdHk6MX0pW21dPW8sYS5jc3MoXCJvcGFjaXR5XCIsMCkuY3NzKG0sdj8yKi11OjIqdSkuYW5pbWF0ZShzLGYsZykpLGwmJih1Lz1NYXRoLnBvdygyLGQtMSkpLChzPXt9KVttXT1vO2I8ZDtiKyspKG49e30pW21dPSh2P1wiLT1cIjpcIis9XCIpK3UsYS5hbmltYXRlKG4sZixnKS5hbmltYXRlKHMsZixnKSx1PWw/Mip1OnUvMjtsJiYoKG49e29wYWNpdHk6MH0pW21dPSh2P1wiLT1cIjpcIis9XCIpK3UsYS5hbmltYXRlKG4sZixnKSksYS5xdWV1ZShpKSx0LmVmZmVjdHMudW5zaGlmdChhLF8scCsxKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJjbGlwXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgbixzPXt9LG89dCh0aGlzKSxhPWUuZGlyZWN0aW9ufHxcInZlcnRpY2FsXCIscj1cImJvdGhcIj09PWEsbD1yfHxcImhvcml6b250YWxcIj09PWEsaD1yfHxcInZlcnRpY2FsXCI9PT1hO249by5jc3NDbGlwKCkscy5jbGlwPXt0b3A6aD8obi5ib3R0b20tbi50b3ApLzI6bi50b3AscmlnaHQ6bD8obi5yaWdodC1uLmxlZnQpLzI6bi5yaWdodCxib3R0b206aD8obi5ib3R0b20tbi50b3ApLzI6bi5ib3R0b20sbGVmdDpsPyhuLnJpZ2h0LW4ubGVmdCkvMjpuLmxlZnR9LHQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihvKSxcInNob3dcIj09PWUubW9kZSYmKG8uY3NzQ2xpcChzLmNsaXApLHMuY2xpcD1uKSxvLmFuaW1hdGUocyx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcImRyb3BcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBuLHM9dCh0aGlzKSxvPVwic2hvd1wiPT09ZS5tb2RlLGE9ZS5kaXJlY3Rpb258fFwibGVmdFwiLHI9XCJ1cFwiPT09YXx8XCJkb3duXCI9PT1hP1widG9wXCI6XCJsZWZ0XCIsbD1cInVwXCI9PT1hfHxcImxlZnRcIj09PWE/XCItPVwiOlwiKz1cIixoPVwiKz1cIj09PWw/XCItPVwiOlwiKz1cIixjPXtvcGFjaXR5OjB9O3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihzKSxuPWUuZGlzdGFuY2V8fHNbXCJ0b3BcIj09PXI/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSghMCkvMixjW3JdPWwrbixvJiYocy5jc3MoYyksY1tyXT1oK24sYy5vcGFjaXR5PTEpLHMuYW5pbWF0ZShjLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZXhwbG9kZVwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gbigpe3YucHVzaCh0aGlzKSx2Lmxlbmd0aD09PWMqdSYmKGQuY3NzKHt2aXNpYmlsaXR5OlwidmlzaWJsZVwifSksdCh2KS5yZW1vdmUoKSxpKCkpfXZhciBzLG8sYSxyLGwsaCxjPWUucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KGUucGllY2VzKSk6Myx1PWMsZD10KHRoaXMpLHA9XCJzaG93XCI9PT1lLm1vZGUsZj1kLnNob3coKS5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIikub2Zmc2V0KCksZz1NYXRoLmNlaWwoZC5vdXRlcldpZHRoKCkvdSksbT1NYXRoLmNlaWwoZC5vdXRlckhlaWdodCgpL2MpLHY9W107Zm9yKHM9MDtzPGM7cysrKWZvcihyPWYudG9wK3MqbSxoPXMtKGMtMSkvMixvPTA7bzx1O28rKylhPWYubGVmdCtvKmcsbD1vLSh1LTEpLzIsZC5jbG9uZSgpLmFwcGVuZFRvKFwiYm9keVwiKS53cmFwKFwiPGRpdj48L2Rpdj5cIikuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdmlzaWJpbGl0eTpcInZpc2libGVcIixsZWZ0Oi1vKmcsdG9wOi1zKm19KS5wYXJlbnQoKS5hZGRDbGFzcyhcInVpLWVmZmVjdHMtZXhwbG9kZVwiKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixvdmVyZmxvdzpcImhpZGRlblwiLHdpZHRoOmcsaGVpZ2h0Om0sbGVmdDphKyhwP2wqZzowKSx0b3A6cisocD9oKm06MCksb3BhY2l0eTpwPzA6MX0pLmFuaW1hdGUoe2xlZnQ6YSsocD8wOmwqZyksdG9wOnIrKHA/MDpoKm0pLG9wYWNpdHk6cD8xOjB9LGUuZHVyYXRpb258fDUwMCxlLmVhc2luZyxuKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJmYWRlXCIsXCJ0b2dnbGVcIixmdW5jdGlvbihlLGkpe3ZhciBuPVwic2hvd1wiPT09ZS5tb2RlO3QodGhpcykuY3NzKFwib3BhY2l0eVwiLG4/MDoxKS5hbmltYXRlKHtvcGFjaXR5Om4/MTowfSx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcImZvbGRcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBuPXQodGhpcykscz1lLm1vZGUsbz1cInNob3dcIj09PXMsYT1cImhpZGVcIj09PXMscj1lLnNpemV8fDE1LGw9LyhbMC05XSspJS8uZXhlYyhyKSxoPWUuaG9yaXpGaXJzdD9bXCJyaWdodFwiLFwiYm90dG9tXCJdOltcImJvdHRvbVwiLFwicmlnaHRcIl0sYz1lLmR1cmF0aW9uLzIsdT10LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIobiksZD1uLmNzc0NsaXAoKSxwPXtjbGlwOnQuZXh0ZW5kKHt9LGQpfSxmPXtjbGlwOnQuZXh0ZW5kKHt9LGQpfSxnPVtkW2hbMF1dLGRbaFsxXV1dLG09bi5xdWV1ZSgpLmxlbmd0aDtsJiYocj1wYXJzZUludChsWzFdLDEwKS8xMDAqZ1thPzA6MV0pLHAuY2xpcFtoWzBdXT1yLGYuY2xpcFtoWzBdXT1yLGYuY2xpcFtoWzFdXT0wLG8mJihuLmNzc0NsaXAoZi5jbGlwKSx1JiZ1LmNzcyh0LmVmZmVjdHMuY2xpcFRvQm94KGYpKSxmLmNsaXA9ZCksbi5xdWV1ZShmdW5jdGlvbihpKXt1JiZ1LmFuaW1hdGUodC5lZmZlY3RzLmNsaXBUb0JveChwKSxjLGUuZWFzaW5nKS5hbmltYXRlKHQuZWZmZWN0cy5jbGlwVG9Cb3goZiksYyxlLmVhc2luZyksaSgpfSkuYW5pbWF0ZShwLGMsZS5lYXNpbmcpLmFuaW1hdGUoZixjLGUuZWFzaW5nKS5xdWV1ZShpKSx0LmVmZmVjdHMudW5zaGlmdChuLG0sNCl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiaGlnaGxpZ2h0XCIsXCJzaG93XCIsZnVuY3Rpb24oZSxpKXt2YXIgbj10KHRoaXMpLHM9e2JhY2tncm91bmRDb2xvcjpuLmNzcyhcImJhY2tncm91bmRDb2xvclwiKX07XCJoaWRlXCI9PT1lLm1vZGUmJihzLm9wYWNpdHk9MCksdC5lZmZlY3RzLnNhdmVTdHlsZShuKSxuLmNzcyh7YmFja2dyb3VuZEltYWdlOlwibm9uZVwiLGJhY2tncm91bmRDb2xvcjplLmNvbG9yfHxcIiNmZmZmOTlcIn0pLmFuaW1hdGUocyx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksdC5lZmZlY3RzLmRlZmluZShcInNpemVcIixmdW5jdGlvbihlLGkpe3ZhciBuLHMsbyxhPXQodGhpcykscj1bXCJmb250U2l6ZVwiXSxsPVtcImJvcmRlclRvcFdpZHRoXCIsXCJib3JkZXJCb3R0b21XaWR0aFwiLFwicGFkZGluZ1RvcFwiLFwicGFkZGluZ0JvdHRvbVwiXSxoPVtcImJvcmRlckxlZnRXaWR0aFwiLFwiYm9yZGVyUmlnaHRXaWR0aFwiLFwicGFkZGluZ0xlZnRcIixcInBhZGRpbmdSaWdodFwiXSxjPWUubW9kZSx1PVwiZWZmZWN0XCIhPT1jLGQ9ZS5zY2FsZXx8XCJib3RoXCIscD1lLm9yaWdpbnx8W1wibWlkZGxlXCIsXCJjZW50ZXJcIl0sZj1hLmNzcyhcInBvc2l0aW9uXCIpLGc9YS5wb3NpdGlvbigpLG09dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoYSksdj1lLmZyb218fG0sYj1lLnRvfHx0LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhhLDApO3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihhKSxcInNob3dcIj09PWMmJihvPXYsdj1iLGI9bykscz17ZnJvbTp7eTp2LmhlaWdodC9tLmhlaWdodCx4OnYud2lkdGgvbS53aWR0aH0sdG86e3k6Yi5oZWlnaHQvbS5oZWlnaHQseDpiLndpZHRoL20ud2lkdGh9fSxcImJveFwiIT09ZCYmXCJib3RoXCIhPT1kfHwocy5mcm9tLnkhPT1zLnRvLnkmJih2PXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsbCxzLmZyb20ueSx2KSxiPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsbCxzLnRvLnksYikpLHMuZnJvbS54IT09cy50by54JiYodj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGgscy5mcm9tLngsdiksYj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGgscy50by54LGIpKSksXCJjb250ZW50XCIhPT1kJiZcImJvdGhcIiE9PWR8fHMuZnJvbS55IT09cy50by55JiYodj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLHIscy5mcm9tLnksdiksYj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLHIscy50by55LGIpKSxwJiYobj10LmVmZmVjdHMuZ2V0QmFzZWxpbmUocCxtKSx2LnRvcD0obS5vdXRlckhlaWdodC12Lm91dGVySGVpZ2h0KSpuLnkrZy50b3Asdi5sZWZ0PShtLm91dGVyV2lkdGgtdi5vdXRlcldpZHRoKSpuLngrZy5sZWZ0LGIudG9wPShtLm91dGVySGVpZ2h0LWIub3V0ZXJIZWlnaHQpKm4ueStnLnRvcCxiLmxlZnQ9KG0ub3V0ZXJXaWR0aC1iLm91dGVyV2lkdGgpKm4ueCtnLmxlZnQpLGEuY3NzKHYpLFwiY29udGVudFwiIT09ZCYmXCJib3RoXCIhPT1kfHwobD1sLmNvbmNhdChbXCJtYXJnaW5Ub3BcIixcIm1hcmdpbkJvdHRvbVwiXSkuY29uY2F0KHIpLGg9aC5jb25jYXQoW1wibWFyZ2luTGVmdFwiLFwibWFyZ2luUmlnaHRcIl0pLGEuZmluZChcIipbd2lkdGhdXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLG49dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoaSksbz17aGVpZ2h0Om4uaGVpZ2h0KnMuZnJvbS55LHdpZHRoOm4ud2lkdGgqcy5mcm9tLngsb3V0ZXJIZWlnaHQ6bi5vdXRlckhlaWdodCpzLmZyb20ueSxvdXRlcldpZHRoOm4ub3V0ZXJXaWR0aCpzLmZyb20ueH0sYT17aGVpZ2h0Om4uaGVpZ2h0KnMudG8ueSx3aWR0aDpuLndpZHRoKnMudG8ueCxvdXRlckhlaWdodDpuLmhlaWdodCpzLnRvLnksb3V0ZXJXaWR0aDpuLndpZHRoKnMudG8ueH07cy5mcm9tLnkhPT1zLnRvLnkmJihvPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksbCxzLmZyb20ueSxvKSxhPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksbCxzLnRvLnksYSkpLHMuZnJvbS54IT09cy50by54JiYobz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGgscy5mcm9tLngsbyksYT10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGgscy50by54LGEpKSx1JiZ0LmVmZmVjdHMuc2F2ZVN0eWxlKGkpLGkuY3NzKG8pLGkuYW5pbWF0ZShhLGUuZHVyYXRpb24sZS5lYXNpbmcsZnVuY3Rpb24oKXt1JiZ0LmVmZmVjdHMucmVzdG9yZVN0eWxlKGkpfSl9KSksYS5hbmltYXRlKGIse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7dmFyIGU9YS5vZmZzZXQoKTswPT09Yi5vcGFjaXR5JiZhLmNzcyhcIm9wYWNpdHlcIix2Lm9wYWNpdHkpLHV8fChhLmNzcyhcInBvc2l0aW9uXCIsXCJzdGF0aWNcIj09PWY/XCJyZWxhdGl2ZVwiOmYpLm9mZnNldChlKSx0LmVmZmVjdHMuc2F2ZVN0eWxlKGEpKSxpKCl9fSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwic2NhbGVcIixmdW5jdGlvbihlLGkpe3ZhciBuPXQodGhpcykscz1lLm1vZGUsbz1wYXJzZUludChlLnBlcmNlbnQsMTApfHwoMD09PXBhcnNlSW50KGUucGVyY2VudCwxMCk/MDpcImVmZmVjdFwiIT09cz8wOjEwMCksYT10LmV4dGVuZCghMCx7ZnJvbTp0LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhuKSx0bzp0LmVmZmVjdHMuc2NhbGVkRGltZW5zaW9ucyhuLG8sZS5kaXJlY3Rpb258fFwiYm90aFwiKSxvcmlnaW46ZS5vcmlnaW58fFtcIm1pZGRsZVwiLFwiY2VudGVyXCJdfSxlKTtlLmZhZGUmJihhLmZyb20ub3BhY2l0eT0xLGEudG8ub3BhY2l0eT0wKSx0LmVmZmVjdHMuZWZmZWN0LnNpemUuY2FsbCh0aGlzLGEsaSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwicHVmZlwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49dC5leHRlbmQoITAse30sZSx7ZmFkZTohMCxwZXJjZW50OnBhcnNlSW50KGUucGVyY2VudCwxMCl8fDE1MH0pO3QuZWZmZWN0cy5lZmZlY3Quc2NhbGUuY2FsbCh0aGlzLG4saSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwicHVsc2F0ZVwiLFwic2hvd1wiLGZ1bmN0aW9uKGUsaSl7dmFyIG49dCh0aGlzKSxzPWUubW9kZSxvPVwic2hvd1wiPT09cyxhPW98fFwiaGlkZVwiPT09cyxyPTIqKGUudGltZXN8fDUpKyhhPzE6MCksbD1lLmR1cmF0aW9uL3IsaD0wLGM9MSx1PW4ucXVldWUoKS5sZW5ndGg7Zm9yKCFvJiZuLmlzKFwiOnZpc2libGVcIil8fChuLmNzcyhcIm9wYWNpdHlcIiwwKS5zaG93KCksaD0xKTtjPHI7YysrKW4uYW5pbWF0ZSh7b3BhY2l0eTpofSxsLGUuZWFzaW5nKSxoPTEtaDtuLmFuaW1hdGUoe29wYWNpdHk6aH0sbCxlLmVhc2luZyksbi5xdWV1ZShpKSx0LmVmZmVjdHMudW5zaGlmdChuLHUscisxKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJzaGFrZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIG49MSxzPXQodGhpcyksbz1lLmRpcmVjdGlvbnx8XCJsZWZ0XCIsYT1lLmRpc3RhbmNlfHwyMCxyPWUudGltZXN8fDMsbD0yKnIrMSxoPU1hdGgucm91bmQoZS5kdXJhdGlvbi9sKSxjPVwidXBcIj09PW98fFwiZG93blwiPT09bz9cInRvcFwiOlwibGVmdFwiLHU9XCJ1cFwiPT09b3x8XCJsZWZ0XCI9PT1vLGQ9e30scD17fSxmPXt9LGc9cy5xdWV1ZSgpLmxlbmd0aDtmb3IodC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKHMpLGRbY109KHU/XCItPVwiOlwiKz1cIikrYSxwW2NdPSh1P1wiKz1cIjpcIi09XCIpKzIqYSxmW2NdPSh1P1wiLT1cIjpcIis9XCIpKzIqYSxzLmFuaW1hdGUoZCxoLGUuZWFzaW5nKTtuPHI7bisrKXMuYW5pbWF0ZShwLGgsZS5lYXNpbmcpLmFuaW1hdGUoZixoLGUuZWFzaW5nKTtzLmFuaW1hdGUocCxoLGUuZWFzaW5nKS5hbmltYXRlKGQsaC8yLGUuZWFzaW5nKS5xdWV1ZShpKSx0LmVmZmVjdHMudW5zaGlmdChzLGcsbCsxKX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJzbGlkZVwiLFwic2hvd1wiLGZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvPXQodGhpcyksYT17dXA6W1wiYm90dG9tXCIsXCJ0b3BcIl0sZG93bjpbXCJ0b3BcIixcImJvdHRvbVwiXSxsZWZ0OltcInJpZ2h0XCIsXCJsZWZ0XCJdLHJpZ2h0OltcImxlZnRcIixcInJpZ2h0XCJdfSxyPWUubW9kZSxsPWUuZGlyZWN0aW9ufHxcImxlZnRcIixoPVwidXBcIj09PWx8fFwiZG93blwiPT09bD9cInRvcFwiOlwibGVmdFwiLGM9XCJ1cFwiPT09bHx8XCJsZWZ0XCI9PT1sLHU9ZS5kaXN0YW5jZXx8b1tcInRvcFwiPT09aD9cIm91dGVySGVpZ2h0XCI6XCJvdXRlcldpZHRoXCJdKCEwKSxkPXt9O3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihvKSxuPW8uY3NzQ2xpcCgpLHM9by5wb3NpdGlvbigpW2hdLGRbaF09KGM/LTE6MSkqdStzLGQuY2xpcD1vLmNzc0NsaXAoKSxkLmNsaXBbYVtsXVsxXV09ZC5jbGlwW2FbbF1bMF1dLFwic2hvd1wiPT09ciYmKG8uY3NzQ2xpcChkLmNsaXApLG8uY3NzKGgsZFtoXSksZC5jbGlwPW4sZFtoXT1zKSxvLmFuaW1hdGUoZCx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6aX0pfSksITEhPT10LnVpQmFja0NvbXBhdCYmdC5lZmZlY3RzLmRlZmluZShcInRyYW5zZmVyXCIsZnVuY3Rpb24oZSxpKXt0KHRoaXMpLnRyYW5zZmVyKGUsaSl9KSx0LnVpLmZvY3VzYWJsZT1mdW5jdGlvbihlLGkpe3ZhciBuLHMsbyxhLHIsbD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJhcmVhXCI9PT1sPyhzPShuPWUucGFyZW50Tm9kZSkubmFtZSwhKCFlLmhyZWZ8fCFzfHxcIm1hcFwiIT09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSYmKG89dChcImltZ1t1c2VtYXA9JyNcIitzK1wiJ11cIikpLmxlbmd0aD4wJiZvLmlzKFwiOnZpc2libGVcIikpOigvXihpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkLy50ZXN0KGwpPyhhPSFlLmRpc2FibGVkKSYmKHI9dChlKS5jbG9zZXN0KFwiZmllbGRzZXRcIilbMF0pJiYoYT0hci5kaXNhYmxlZCk6YT1cImFcIj09PWwmJmUuaHJlZnx8aSxhJiZ0KGUpLmlzKFwiOnZpc2libGVcIikmJmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNzcyhcInZpc2liaWxpdHlcIik7XCJpbmhlcml0XCI9PT1lOyllPSh0PXQucGFyZW50KCkpLmNzcyhcInZpc2liaWxpdHlcIik7cmV0dXJuXCJoaWRkZW5cIiE9PWV9KHQoZSkpKX0sdC5leHRlbmQodC5leHByW1wiOlwiXSx7Zm9jdXNhYmxlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnVpLmZvY3VzYWJsZShlLG51bGwhPXQuYXR0cihlLFwidGFiaW5kZXhcIikpfX0pLHQudWkuZm9jdXNhYmxlLHQuZm4uZm9ybT1mdW5jdGlvbigpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzWzBdLmZvcm0/dGhpcy5jbG9zZXN0KFwiZm9ybVwiKTp0KHRoaXNbMF0uZm9ybSl9LHQudWkuZm9ybVJlc2V0TWl4aW49e19mb3JtUmVzZXRIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dmFyIGk9ZS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIik7dC5lYWNoKGksZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2goKX0pfSl9LF9iaW5kRm9ybVJlc2V0SGFuZGxlcjpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybT10aGlzLmVsZW1lbnQuZm9ybSgpLHRoaXMuZm9ybS5sZW5ndGgpe3ZhciB0PXRoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIil8fFtdO3QubGVuZ3RofHx0aGlzLmZvcm0ub24oXCJyZXNldC51aS1mb3JtLXJlc2V0XCIsdGhpcy5fZm9ybVJlc2V0SGFuZGxlciksdC5wdXNoKHRoaXMpLHRoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIix0KX19LF91bmJpbmRGb3JtUmVzZXRIYW5kbGVyOmZ1bmN0aW9uKCl7aWYodGhpcy5mb3JtLmxlbmd0aCl7dmFyIGU9dGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKTtlLnNwbGljZSh0LmluQXJyYXkodGhpcyxlKSwxKSxlLmxlbmd0aD90aGlzLmZvcm0uZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIsZSk6dGhpcy5mb3JtLnJlbW92ZURhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiKS5vZmYoXCJyZXNldC51aS1mb3JtLXJlc2V0XCIpfX19LFwiMS43XCI9PT10LmZuLmpxdWVyeS5zdWJzdHJpbmcoMCwzKSYmKHQuZWFjaChbXCJXaWR0aFwiLFwiSGVpZ2h0XCJdLGZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gbihlLGksbixvKXtyZXR1cm4gdC5lYWNoKHMsZnVuY3Rpb24oKXtpLT1wYXJzZUZsb2F0KHQuY3NzKGUsXCJwYWRkaW5nXCIrdGhpcykpfHwwLG4mJihpLT1wYXJzZUZsb2F0KHQuY3NzKGUsXCJib3JkZXJcIit0aGlzK1wiV2lkdGhcIikpfHwwKSxvJiYoaS09cGFyc2VGbG9hdCh0LmNzcyhlLFwibWFyZ2luXCIrdGhpcykpfHwwKX0pLGl9dmFyIHM9XCJXaWR0aFwiPT09aT9bXCJMZWZ0XCIsXCJSaWdodFwiXTpbXCJUb3BcIixcIkJvdHRvbVwiXSxvPWkudG9Mb3dlckNhc2UoKSxhPXtpbm5lcldpZHRoOnQuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDp0LmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6dC5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OnQuZm4ub3V0ZXJIZWlnaHR9O3QuZm5bXCJpbm5lclwiK2ldPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lP2FbXCJpbm5lclwiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzKS5jc3MobyxuKHRoaXMsZSkrXCJweFwiKX0pfSx0LmZuW1wib3V0ZXJcIitpXT1mdW5jdGlvbihlLHMpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiBlP2FbXCJvdXRlclwiK2ldLmNhbGwodGhpcyxlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmNzcyhvLG4odGhpcyxlLCEwLHMpK1wicHhcIil9KX19KSx0LmZuLmFkZEJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PXQ/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIodCkpfSksdC51aS5rZXlDb2RlPXtCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH0sdC51aS5lc2NhcGVTZWxlY3Rvcj1mdW5jdGlvbigpe3ZhciB0PS8oWyFcIiMkJSYnKCkqKywuXFwvOjs8PT4/QFtcXF1eYHt8fX5dKS9nO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKHQsXCJcXFxcJDFcIil9fSgpLHQuZm4ubGFiZWxzPWZ1bmN0aW9uKCl7dmFyIGUsaSxuLHMsbztyZXR1cm4gdGhpc1swXS5sYWJlbHMmJnRoaXNbMF0ubGFiZWxzLmxlbmd0aD90aGlzLnB1c2hTdGFjayh0aGlzWzBdLmxhYmVscyk6KHM9dGhpcy5lcSgwKS5wYXJlbnRzKFwibGFiZWxcIiksKG49dGhpcy5hdHRyKFwiaWRcIikpJiYobz0oZT10aGlzLmVxKDApLnBhcmVudHMoKS5sYXN0KCkpLmFkZChlLmxlbmd0aD9lLnNpYmxpbmdzKCk6dGhpcy5zaWJsaW5ncygpKSxpPVwibGFiZWxbZm9yPSdcIit0LnVpLmVzY2FwZVNlbGVjdG9yKG4pK1wiJ11cIixzPXMuYWRkKG8uZmluZChpKS5hZGRCYWNrKGkpKSksdGhpcy5wdXNoU3RhY2socykpfSx0LmZuLnNjcm9sbFBhcmVudD1mdW5jdGlvbihlKXt2YXIgaT10aGlzLmNzcyhcInBvc2l0aW9uXCIpLG49XCJhYnNvbHV0ZVwiPT09aSxzPWU/LyhhdXRvfHNjcm9sbHxoaWRkZW4pLzovKGF1dG98c2Nyb2xsKS8sbz10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3JldHVybighbnx8XCJzdGF0aWNcIiE9PWUuY3NzKFwicG9zaXRpb25cIikpJiZzLnRlc3QoZS5jc3MoXCJvdmVyZmxvd1wiKStlLmNzcyhcIm92ZXJmbG93LXlcIikrZS5jc3MoXCJvdmVyZmxvdy14XCIpKX0pLmVxKDApO3JldHVyblwiZml4ZWRcIiE9PWkmJm8ubGVuZ3RoP286dCh0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KX0sdC5leHRlbmQodC5leHByW1wiOlwiXSx7dGFiYmFibGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC5hdHRyKGUsXCJ0YWJpbmRleFwiKSxuPW51bGwhPWk7cmV0dXJuKCFufHxpPj0wKSYmdC51aS5mb2N1c2FibGUoZSxuKX19KSx0LmZuLmV4dGVuZCh7dW5pcXVlSWQ6ZnVuY3Rpb24oKXt2YXIgdD0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0aGlzLmlkfHwodGhpcy5pZD1cInVpLWlkLVwiKyArK3QpfSl9fSgpLHJlbW92ZVVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpey9edWktaWQtXFxkKyQvLnRlc3QodGhpcy5pZCkmJnQodGhpcykucmVtb3ZlQXR0cihcImlkXCIpfSl9fSksdC53aWRnZXQoXCJ1aS5hY2NvcmRpb25cIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2FjdGl2ZTowLGFuaW1hdGU6e30sY2xhc3Nlczp7XCJ1aS1hY2NvcmRpb24taGVhZGVyXCI6XCJ1aS1jb3JuZXItdG9wXCIsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiOlwidWktY29ybmVyLWFsbFwiLFwidWktYWNjb3JkaW9uLWNvbnRlbnRcIjpcInVpLWNvcm5lci1ib3R0b21cIn0sY29sbGFwc2libGU6ITEsZXZlbnQ6XCJjbGlja1wiLGhlYWRlcjpcIj4gbGkgPiA6Zmlyc3QtY2hpbGQsID4gOm5vdChsaSk6ZXZlblwiLGhlaWdodFN0eWxlOlwiYXV0b1wiLGljb25zOnthY3RpdmVIZWFkZXI6XCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wiLGhlYWRlcjpcInVpLWljb24tdHJpYW5nbGUtMS1lXCJ9LGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbH0saGlkZVByb3BzOntib3JkZXJUb3BXaWR0aDpcImhpZGVcIixib3JkZXJCb3R0b21XaWR0aDpcImhpZGVcIixwYWRkaW5nVG9wOlwiaGlkZVwiLHBhZGRpbmdCb3R0b206XCJoaWRlXCIsaGVpZ2h0OlwiaGlkZVwifSxzaG93UHJvcHM6e2JvcmRlclRvcFdpZHRoOlwic2hvd1wiLGJvcmRlckJvdHRvbVdpZHRoOlwic2hvd1wiLHBhZGRpbmdUb3A6XCJzaG93XCIscGFkZGluZ0JvdHRvbTpcInNob3dcIixoZWlnaHQ6XCJzaG93XCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPXQoKSx0aGlzLl9hZGRDbGFzcyhcInVpLWFjY29yZGlvblwiLFwidWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldFwiKSx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInRhYmxpc3RcIiksZS5jb2xsYXBzaWJsZXx8ITEhPT1lLmFjdGl2ZSYmbnVsbCE9ZS5hY3RpdmV8fChlLmFjdGl2ZT0wKSx0aGlzLl9wcm9jZXNzUGFuZWxzKCksZS5hY3RpdmU8MCYmKGUuYWN0aXZlKz10aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLl9yZWZyZXNoKCl9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57aGVhZGVyOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5uZXh0KCk6dCgpfX0sX2NyZWF0ZUljb25zOmZ1bmN0aW9uKCl7dmFyIGUsaSxuPXRoaXMub3B0aW9ucy5pY29ucztuJiYoZT10KFwiPHNwYW4+XCIpLHRoaXMuX2FkZENsYXNzKGUsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWljb25cIixcInVpLWljb24gXCIrbi5oZWFkZXIpLGUucHJlcGVuZFRvKHRoaXMuaGVhZGVycyksaT10aGlzLmFjdGl2ZS5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxuLmhlYWRlcikuX2FkZENsYXNzKGksbnVsbCxuLmFjdGl2ZUhlYWRlcikuX2FkZENsYXNzKHRoaXMuaGVhZGVycyxcInVpLWFjY29yZGlvbi1pY29uc1wiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhlYWRlcnMsXCJ1aS1hY2NvcmRpb24taWNvbnNcIiksdGhpcy5oZWFkZXJzLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInJvbGVcIiksdGhpcy5oZWFkZXJzLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtZXhwYW5kZWQgYXJpYS1zZWxlY3RlZCBhcmlhLWNvbnRyb2xzIHRhYkluZGV4XCIpLnJlbW92ZVVuaXF1ZUlkKCksdGhpcy5fZGVzdHJveUljb25zKCksdD10aGlzLmhlYWRlcnMubmV4dCgpLmNzcyhcImRpc3BsYXlcIixcIlwiKS5yZW1vdmVBdHRyKFwicm9sZSBhcmlhLWhpZGRlbiBhcmlhLWxhYmVsbGVkYnlcIikucmVtb3ZlVW5pcXVlSWQoKSxcImNvbnRlbnRcIiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdC5jc3MoXCJoZWlnaHRcIixcIlwiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe1wiYWN0aXZlXCIhPT10PyhcImV2ZW50XCI9PT10JiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHMoZSkpLHRoaXMuX3N1cGVyKHQsZSksXCJjb2xsYXBzaWJsZVwiIT09dHx8ZXx8ITEhPT10aGlzLm9wdGlvbnMuYWN0aXZlfHx0aGlzLl9hY3RpdmF0ZSgwKSxcImljb25zXCI9PT10JiYodGhpcy5fZGVzdHJveUljb25zKCksZSYmdGhpcy5fY3JlYXRlSWNvbnMoKSkpOnRoaXMuX2FjdGl2YXRlKGUpfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe2lmKCFlLmFsdEtleSYmIWUuY3RybEtleSl7dmFyIGk9dC51aS5rZXlDb2RlLG49dGhpcy5oZWFkZXJzLmxlbmd0aCxzPXRoaXMuaGVhZGVycy5pbmRleChlLnRhcmdldCksbz0hMTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046bz10aGlzLmhlYWRlcnNbKHMrMSklbl07YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOm89dGhpcy5oZWFkZXJzWyhzLTErbiklbl07YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIoZSk7YnJlYWs7Y2FzZSBpLkhPTUU6bz10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDpvPXRoaXMuaGVhZGVyc1tuLTFdfW8mJih0KGUudGFyZ2V0KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksdChvKS5hdHRyKFwidGFiSW5kZXhcIiwwKSx0KG8pLnRyaWdnZXIoXCJmb2N1c1wiKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbihlKXtlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVVAmJmUuY3RybEtleSYmdChlLmN1cnJlbnRUYXJnZXQpLnByZXYoKS50cmlnZ2VyKFwiZm9jdXNcIil9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7dGhpcy5fcHJvY2Vzc1BhbmVscygpLCExPT09ZS5hY3RpdmUmJiEwPT09ZS5jb2xsYXBzaWJsZXx8IXRoaXMuaGVhZGVycy5sZW5ndGg/KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSk6ITE9PT1lLmFjdGl2ZT90aGlzLl9hY3RpdmF0ZSgwKTp0aGlzLmFjdGl2ZS5sZW5ndGgmJiF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy5oZWFkZXJzLmxlbmd0aD09PXRoaXMuaGVhZGVycy5maW5kKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTp0aGlzLl9hY3RpdmF0ZShNYXRoLm1heCgwLGUuYWN0aXZlLTEpKTplLmFjdGl2ZT10aGlzLmhlYWRlcnMuaW5kZXgodGhpcy5hY3RpdmUpLHRoaXMuX2Rlc3Ryb3lJY29ucygpLHRoaXMuX3JlZnJlc2goKX0sX3Byb2Nlc3NQYW5lbHM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmhlYWRlcnMsZT10aGlzLnBhbmVsczt0aGlzLmhlYWRlcnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhlYWRlciksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWFkZXJzLFwidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWNvbGxhcHNlZFwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLnBhbmVscz10aGlzLmhlYWRlcnMubmV4dCgpLmZpbHRlcihcIjpub3QoLnVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSlcIikuaGlkZSgpLHRoaXMuX2FkZENsYXNzKHRoaXMucGFuZWxzLFwidWktYWNjb3JkaW9uLWNvbnRlbnRcIixcInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudFwiKSxlJiYodGhpcy5fb2ZmKHQubm90KHRoaXMuaGVhZGVycykpLHRoaXMuX29mZihlLm5vdCh0aGlzLnBhbmVscykpKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMub3B0aW9ucyxuPWkuaGVpZ2h0U3R5bGUscz10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSksdGhpcy5fYWRkQ2xhc3ModGhpcy5hY3RpdmUsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLl9yZW1vdmVDbGFzcyh0aGlzLmFjdGl2ZSxcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuYWN0aXZlLm5leHQoKSxcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuc2hvdygpLHRoaXMuaGVhZGVycy5hdHRyKFwicm9sZVwiLFwidGFiXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKSxuPWUubmV4dCgpLHM9bi51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKTtlLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIscyksbi5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIsaSl9KS5uZXh0KCkuYXR0cihcInJvbGVcIixcInRhYnBhbmVsXCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCIsdGFiSW5kZXg6LTF9KS5uZXh0KCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcInRydWVcIix0YWJJbmRleDowfSkubmV4dCgpLmF0dHIoe1wiYXJpYS1oaWRkZW5cIjpcImZhbHNlXCJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cihcInRhYkluZGV4XCIsMCksdGhpcy5fY3JlYXRlSWNvbnMoKSx0aGlzLl9zZXR1cEV2ZW50cyhpLmV2ZW50KSxcImZpbGxcIj09PW4/KGU9cy5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoXCI6dmlzaWJsZVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkuY3NzKFwicG9zaXRpb25cIik7XCJhYnNvbHV0ZVwiIT09biYmXCJmaXhlZFwiIT09biYmKGUtPWkub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7ZS09dCh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGUtdCh0aGlzKS5pbm5lckhlaWdodCgpK3QodGhpcykuaGVpZ2h0KCkpKX0pLmNzcyhcIm92ZXJmbG93XCIsXCJhdXRvXCIpKTpcImF1dG9cIj09PW4mJihlPTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKS5pcyhcIjp2aXNpYmxlXCIpO2l8fHQodGhpcykuc2hvdygpLGU9TWF0aC5tYXgoZSx0KHRoaXMpLmNzcyhcImhlaWdodFwiLFwiXCIpLmhlaWdodCgpKSxpfHx0KHRoaXMpLmhpZGUoKX0pLmhlaWdodChlKSl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9maW5kQWN0aXZlKGUpWzBdO2khPT10aGlzLmFjdGl2ZVswXSYmKGk9aXx8dGhpcy5hY3RpdmVbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6dC5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgZT90aGlzLmhlYWRlcnMuZXEoZSk6dCgpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24oZSl7dmFyIGk9e2tleWRvd246XCJfa2V5ZG93blwifTtlJiZ0LmVhY2goZS5zcGxpdChcIiBcIiksZnVuY3Rpb24odCxlKXtpW2VdPVwiX2V2ZW50SGFuZGxlclwifSksdGhpcy5fb2ZmKHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkpLHRoaXMuX29uKHRoaXMuaGVhZGVycyxpKSx0aGlzLl9vbih0aGlzLmhlYWRlcnMubmV4dCgpLHtrZXlkb3duOlwiX3BhbmVsS2V5RG93blwifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIGksbixzPXRoaXMub3B0aW9ucyxvPXRoaXMuYWN0aXZlLGE9dChlLmN1cnJlbnRUYXJnZXQpLHI9YVswXT09PW9bMF0sbD1yJiZzLmNvbGxhcHNpYmxlLGg9bD90KCk6YS5uZXh0KCksYz1vLm5leHQoKSx1PXtvbGRIZWFkZXI6byxvbGRQYW5lbDpjLG5ld0hlYWRlcjpsP3QoKTphLG5ld1BhbmVsOmh9O2UucHJldmVudERlZmF1bHQoKSxyJiYhcy5jb2xsYXBzaWJsZXx8ITE9PT10aGlzLl90cmlnZ2VyKFwiYmVmb3JlQWN0aXZhdGVcIixlLHUpfHwocy5hY3RpdmU9IWwmJnRoaXMuaGVhZGVycy5pbmRleChhKSx0aGlzLmFjdGl2ZT1yP3QoKTphLHRoaXMuX3RvZ2dsZSh1KSx0aGlzLl9yZW1vdmVDbGFzcyhvLFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxzLmljb25zJiYoaT1vLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhpLG51bGwscy5pY29ucy5hY3RpdmVIZWFkZXIpLl9hZGRDbGFzcyhpLG51bGwscy5pY29ucy5oZWFkZXIpKSxyfHwodGhpcy5fcmVtb3ZlQ2xhc3MoYSxcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIpLl9hZGRDbGFzcyhhLFwidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxzLmljb25zJiYobj1hLmNoaWxkcmVuKFwiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhuLG51bGwscy5pY29ucy5oZWFkZXIpLl9hZGRDbGFzcyhuLG51bGwscy5pY29ucy5hY3RpdmVIZWFkZXIpKSx0aGlzLl9hZGRDbGFzcyhhLm5leHQoKSxcInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZVwiKSkpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUpe3ZhciBpPWUubmV3UGFuZWwsbj10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OmUub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1pLHRoaXMucHJldkhpZGU9bix0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKGksbixlKToobi5oaWRlKCksaS5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUoZSkpLG4uYXR0cih7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwifSksbi5wcmV2KCkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pLGkubGVuZ3RoJiZuLmxlbmd0aD9uLnByZXYoKS5hdHRyKHt0YWJJbmRleDotMSxcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KTppLmxlbmd0aCYmdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09cGFyc2VJbnQodCh0aGlzKS5hdHRyKFwidGFiSW5kZXhcIiksMTApfSkuYXR0cihcInRhYkluZGV4XCIsLTEpLGkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJmYWxzZVwiKS5wcmV2KCkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJ0cnVlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJ0cnVlXCIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG4scyxvLGE9dGhpcyxyPTAsbD10LmNzcyhcImJveC1zaXppbmdcIiksaD10Lmxlbmd0aCYmKCFlLmxlbmd0aHx8dC5pbmRleCgpPGUuaW5kZXgoKSksYz10aGlzLm9wdGlvbnMuYW5pbWF0ZXx8e30sdT1oJiZjLmRvd258fGMsZD1mdW5jdGlvbigpe2EuX3RvZ2dsZUNvbXBsZXRlKGkpfTtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdSYmKG89dSksXCJzdHJpbmdcIj09dHlwZW9mIHUmJihzPXUpLHM9c3x8dS5lYXNpbmd8fGMuZWFzaW5nLG89b3x8dS5kdXJhdGlvbnx8Yy5kdXJhdGlvbixlLmxlbmd0aD90Lmxlbmd0aD8obj10LnNob3coKS5vdXRlckhlaWdodCgpLGUuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyx7ZHVyYXRpb246byxlYXNpbmc6cyxzdGVwOmZ1bmN0aW9uKHQsZSl7ZS5ub3c9TWF0aC5yb3VuZCh0KX19KSx2b2lkIHQuaGlkZSgpLmFuaW1hdGUodGhpcy5zaG93UHJvcHMse2R1cmF0aW9uOm8sZWFzaW5nOnMsY29tcGxldGU6ZCxzdGVwOmZ1bmN0aW9uKHQsaSl7aS5ub3c9TWF0aC5yb3VuZCh0KSxcImhlaWdodFwiIT09aS5wcm9wP1wiY29udGVudC1ib3hcIj09PWwmJihyKz1pLm5vdyk6XCJjb250ZW50XCIhPT1hLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJihpLm5vdz1NYXRoLnJvdW5kKG4tZS5vdXRlckhlaWdodCgpLXIpLHI9MCl9fSkpOmUuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyxvLHMsZCk6dC5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLG8scyxkKX0sX3RvZ2dsZUNvbXBsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXQub2xkUGFuZWwsaT1lLnByZXYoKTt0aGlzLl9yZW1vdmVDbGFzcyhlLFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGksXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiKS5fYWRkQ2xhc3MoaSxcInVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIpLGUubGVuZ3RoJiYoZS5wYXJlbnQoKVswXS5jbGFzc05hbWU9ZS5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLG51bGwsdCl9fSksdC51aS5zYWZlQWN0aXZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7ZT10LmFjdGl2ZUVsZW1lbnR9Y2F0Y2goaSl7ZT10LmJvZHl9cmV0dXJuIGV8fChlPXQuYm9keSksZS5ub2RlTmFtZXx8KGU9dC5ib2R5KSxlfSx0LndpZGdldChcInVpLm1lbnVcIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPHVsPlwiLGRlbGF5OjMwMCxvcHRpb25zOntpY29uczp7c3VibWVudTpcInVpLWljb24tY2FyZXQtMS1lXCJ9LGl0ZW1zOlwiPiAqXCIsbWVudXM6XCJ1bFwiLHBvc2l0aW9uOntteTpcImxlZnQgdG9wXCIsYXQ6XCJyaWdodCB0b3BcIn0scm9sZTpcIm1lbnVcIixibHVyOm51bGwsZm9jdXM6bnVsbCxzZWxlY3Q6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuYWN0aXZlTWVudT10aGlzLmVsZW1lbnQsdGhpcy5tb3VzZUhhbmRsZWQ9ITEsdGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1tZW51XCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fb24oe1wibW91c2Vkb3duIC51aS1tZW51LWl0ZW1cIjpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LFwiY2xpY2sgLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZS50YXJnZXQpLG49dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmxlbmd0aCYmKHRoaXMuc2VsZWN0KGUpLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKXx8KHRoaXMubW91c2VIYW5kbGVkPSEwKSxpLmhhcyhcIi51aS1tZW51XCIpLmxlbmd0aD90aGlzLmV4cGFuZChlKTohdGhpcy5lbGVtZW50LmlzKFwiOmZvY3VzXCIpJiZuLmNsb3Nlc3QoXCIudWktbWVudVwiKS5sZW5ndGgmJih0aGlzLmVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIsWyEwXSksdGhpcy5hY3RpdmUmJjE9PT10aGlzLmFjdGl2ZS5wYXJlbnRzKFwiLnVpLW1lbnVcIikubGVuZ3RoJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcikpKX0sXCJtb3VzZWVudGVyIC51aS1tZW51LWl0ZW1cIjpmdW5jdGlvbihlKXtpZighdGhpcy5wcmV2aW91c0ZpbHRlcil7dmFyIGk9dChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIiksbj10KGUuY3VycmVudFRhcmdldCk7aVswXT09PW5bMF0mJih0aGlzLl9yZW1vdmVDbGFzcyhuLnNpYmxpbmdzKCkuY2hpbGRyZW4oXCIudWktc3RhdGUtYWN0aXZlXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5mb2N1cyhlLG4pKX19LG1vdXNlbGVhdmU6XCJjb2xsYXBzZUFsbFwiLFwibW91c2VsZWF2ZSAudWktbWVudVwiOlwiY29sbGFwc2VBbGxcIixmb2N1czpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuYWN0aXZlfHx0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmVxKDApO2V8fHRoaXMuZm9jdXModCxpKX0sYmx1cjpmdW5jdGlvbihlKXt0aGlzLl9kZWxheShmdW5jdGlvbigpeyF0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSYmdGhpcy5jb2xsYXBzZUFsbChlKX0pfSxrZXlkb3duOlwiX2tleWRvd25cIn0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2NsaWNrOmZ1bmN0aW9uKHQpe3RoaXMuX2Nsb3NlT25Eb2N1bWVudENsaWNrKHQpJiZ0aGlzLmNvbGxhcHNlQWxsKHQpLHRoaXMubW91c2VIYW5kbGVkPSExfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnUtaXRlbVwiKS5yZW1vdmVBdHRyKFwicm9sZSBhcmlhLWRpc2FibGVkXCIpLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQXR0cihcInRhYkluZGV4IHJvbGUgYXJpYS1oYXNwb3B1cFwiKTt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKS5maW5kKFwiLnVpLW1lbnVcIikuYWRkQmFjaygpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtbGFiZWxsZWRieSBhcmlhLWV4cGFuZGVkIGFyaWEtaGlkZGVuIGFyaWEtZGlzYWJsZWQgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksZS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLW1lbnUtc3VibWVudS1jYXJldFwiKSYmZS5yZW1vdmUoKX0pfSxfa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbyxhPSEwO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKFwiZmlyc3RcIixcImZpcnN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoXCJsYXN0XCIsXCJsYXN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6dGhpcy5wcmV2aW91cyhlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5ET1dOOnRoaXMubmV4dChlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5MRUZUOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmdGhpcy5leHBhbmQoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7ZGVmYXVsdDphPSExLG49dGhpcy5wcmV2aW91c0ZpbHRlcnx8XCJcIixvPSExLHM9ZS5rZXlDb2RlPj05NiYmZS5rZXlDb2RlPD0xMDU/KGUua2V5Q29kZS05NikudG9TdHJpbmcoKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyVGltZXIpLHM9PT1uP289ITA6cz1uK3MsaT10aGlzLl9maWx0ZXJNZW51SXRlbXMocyksKGk9byYmLTEhPT1pLmluZGV4KHRoaXMuYWN0aXZlLm5leHQoKSk/dGhpcy5hY3RpdmUubmV4dEFsbChcIi51aS1tZW51LWl0ZW1cIik6aSkubGVuZ3RofHwocz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMocykpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKGUsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1zLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9YSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmKHRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiW2FyaWEtaGFzcG9wdXA9J3RydWUnXVwiKS5sZW5ndGg/dGhpcy5leHBhbmQodCk6dGhpcy5zZWxlY3QodCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHMsbz10aGlzLGE9dGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUscj10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMubWVudXMpO3RoaXMuX3RvZ2dsZUNsYXNzKFwidWktbWVudS1pY29uc1wiLG51bGwsISF0aGlzLmVsZW1lbnQuZmluZChcIi51aS1pY29uXCIpLmxlbmd0aCksaT1yLmZpbHRlcihcIjpub3QoLnVpLW1lbnUpXCIpLmhpZGUoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLFwiYXJpYS1oaWRkZW5cIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCJ9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUucHJldigpLG49dChcIjxzcGFuPlwiKS5kYXRhKFwidWktbWVudS1zdWJtZW51LWNhcmV0XCIsITApO28uX2FkZENsYXNzKG4sXCJ1aS1tZW51LWljb25cIixcInVpLWljb24gXCIrYSksaS5hdHRyKFwiYXJpYS1oYXNwb3B1cFwiLFwidHJ1ZVwiKS5wcmVwZW5kKG4pLGUuYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLGkuYXR0cihcImlkXCIpKX0pLHRoaXMuX2FkZENsYXNzKGksXCJ1aS1tZW51XCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktZnJvbnRcIiksKGU9ci5hZGQodGhpcy5lbGVtZW50KS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykpLm5vdChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7by5faXNEaXZpZGVyKGUpJiZvLl9hZGRDbGFzcyhlLFwidWktbWVudS1kaXZpZGVyXCIsXCJ1aS13aWRnZXQtY29udGVudFwiKX0pLHM9KG49ZS5ub3QoXCIudWktbWVudS1pdGVtLCAudWktbWVudS1kaXZpZGVyXCIpKS5jaGlsZHJlbigpLm5vdChcIi51aS1tZW51XCIpLnVuaXF1ZUlkKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksdGhpcy5fYWRkQ2xhc3MobixcInVpLW1lbnUtaXRlbVwiKS5fYWRkQ2xhc3MocyxcInVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLGUuZmlsdGVyKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJ0cnVlXCIpLHRoaXMuYWN0aXZlJiYhdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pJiZ0aGlzLmJsdXIoKX0sX2l0ZW1Sb2xlOmZ1bmN0aW9uKCl7cmV0dXJue21lbnU6XCJtZW51aXRlbVwiLGxpc3Rib3g6XCJvcHRpb25cIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJpY29uc1wiPT09dCl7dmFyIGk9dGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1pY29uXCIpO3RoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSkuX2FkZENsYXNzKGksbnVsbCxlLnN1Ym1lbnUpfXRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIixTdHJpbmcodCkpLHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LGZvY3VzOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzO3RoaXMuYmx1cih0LHQmJlwiZm9jdXNcIj09PXQudHlwZSksdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZSksdGhpcy5hY3RpdmU9ZS5maXJzdCgpLG49dGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fYWRkQ2xhc3MobixudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLG4uYXR0cihcImlkXCIpKSxzPXRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLHRoaXMuX2FkZENsYXNzKHMsbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0JiZcImtleWRvd25cIj09PXQudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSwoaT1lLmNoaWxkcmVuKFwiLnVpLW1lbnVcIikpLmxlbmd0aCYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcoaSksdGhpcy5hY3RpdmVNZW51PWUucGFyZW50KCksdGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsdCx7aXRlbTplfSl9LF9zY3JvbGxJbnRvVmlldzpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbyxhLHI7dGhpcy5faGFzU2Nyb2xsKCkmJihpPXBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLFwiYm9yZGVyVG9wV2lkdGhcIikpfHwwLG49cGFyc2VGbG9hdCh0LmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sXCJwYWRkaW5nVG9wXCIpKXx8MCxzPWUub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3AtaS1uLG89dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLGE9dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHI9ZS5vdXRlckhlaWdodCgpLHM8MD90aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKG8rcyk6cytyPmEmJnRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AobytzLWErcikpfSxibHVyOmZ1bmN0aW9uKHQsZSl7ZXx8Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuYWN0aXZlJiYodGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLl90cmlnZ2VyKFwiYmx1clwiLHQse2l0ZW06dGhpcy5hY3RpdmV9KSx0aGlzLmFjdGl2ZT1udWxsKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksXCJ0cnVlXCI9PT10LmF0dHIoXCJhcmlhLWhpZGRlblwiKSYmKHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpLHRoaXMuX29wZW4odCl9LHRoaXMuZGVsYXkpKX0sX29wZW46ZnVuY3Rpb24oZSl7dmFyIGk9dC5leHRlbmQoe29mOnRoaXMuYWN0aXZlfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51XCIpLm5vdChlLnBhcmVudHMoXCIudWktbWVudVwiKSkuaGlkZSgpLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxlLnNob3coKS5yZW1vdmVBdHRyKFwiYXJpYS1oaWRkZW5cIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKGUsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgbj1pP3RoaXMuZWxlbWVudDp0KGUmJmUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnVcIikpO24ubGVuZ3RofHwobj10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKG4pLHRoaXMuYmx1cihlKSx0aGlzLl9yZW1vdmVDbGFzcyhuLmZpbmQoXCIudWktc3RhdGUtYWN0aXZlXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5hY3RpdmVNZW51PW59LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSx0LmZpbmQoXCIudWktbWVudVwiKS5oaWRlKCkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiF0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnVcIikubGVuZ3RofSxfaXNEaXZpZGVyOmZ1bmN0aW9uKHQpe3JldHVybiEvW15cXC1cXHUyMDE0XFx1MjAxM1xcc10vLnRlc3QodC50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIix0aGlzLmVsZW1lbnQpO2UmJmUubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKHQsZSkpXG59LGV4cGFuZDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudSBcIikuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCk7ZSYmZS5sZW5ndGgmJih0aGlzLl9vcGVuKGUucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyh0LGUpfSkpfSxuZXh0OmZ1bmN0aW9uKHQpe3RoaXMuX21vdmUoXCJuZXh0XCIsXCJmaXJzdFwiLHQpfSxwcmV2aW91czpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlKFwicHJldlwiLFwibGFzdFwiLHQpfSxpc0ZpcnN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLnByZXZBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuO3RoaXMuYWN0aXZlJiYobj1cImZpcnN0XCI9PT10fHxcImxhc3RcIj09PXQ/dGhpcy5hY3RpdmVbXCJmaXJzdFwiPT09dD9cInByZXZBbGxcIjpcIm5leHRBbGxcIl0oXCIudWktbWVudS1pdGVtXCIpLmVxKC0xKTp0aGlzLmFjdGl2ZVt0K1wiQWxsXCJdKFwiLnVpLW1lbnUtaXRlbVwiKS5lcSgwKSksbiYmbi5sZW5ndGgmJnRoaXMuYWN0aXZlfHwobj10aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW2VdKCkpLHRoaXMuZm9jdXMoaSxuKX0sbmV4dFBhZ2U6ZnVuY3Rpb24oZSl7dmFyIGksbixzO3RoaXMuYWN0aXZlP3RoaXMuaXNMYXN0SXRlbSgpfHwodGhpcy5faGFzU2Nyb2xsKCk/KG49dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLHM9dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4oaT10KHRoaXMpKS5vZmZzZXQoKS50b3Atbi1zPDB9KSx0aGlzLmZvY3VzKGUsaSkpOnRoaXMuZm9jdXMoZSx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpW3RoaXMuYWN0aXZlP1wibGFzdFwiOlwiZmlyc3RcIl0oKSkpOnRoaXMubmV4dChlKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLG4sczt0aGlzLmFjdGl2ZT90aGlzLmlzRmlyc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8obj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Ascz10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3JldHVybihpPXQodGhpcykpLm9mZnNldCgpLnRvcC1uK3M+MH0pLHRoaXMuZm9jdXMoZSxpKSk6dGhpcy5mb2N1cyhlLHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlyc3QoKSkpOnRoaXMubmV4dChlKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcChcInNjcm9sbEhlaWdodFwiKX0sc2VsZWN0OmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlPXRoaXMuYWN0aXZlfHx0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKGUsITApLHRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIixlLGkpfSxfZmlsdGVyTWVudUl0ZW1zOmZ1bmN0aW9uKGUpe3ZhciBpPWUucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csXCJcXFxcJCZcIiksbj1uZXcgUmVnRXhwKFwiXlwiK2ksXCJpXCIpO3JldHVybiB0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpbHRlcihcIi51aS1tZW51LWl0ZW1cIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG4udGVzdCh0LnRyaW0odCh0aGlzKS5jaGlsZHJlbihcIi51aS1tZW51LWl0ZW0td3JhcHBlclwiKS50ZXh0KCkpKX0pfX0pLHQud2lkZ2V0KFwidWkuYXV0b2NvbXBsZXRlXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxpbnB1dD5cIixvcHRpb25zOnthcHBlbmRUbzpudWxsLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OlwibGVmdCB0b3BcIixhdDpcImxlZnQgYm90dG9tXCIsY29sbGlzaW9uOlwibm9uZVwifSxzb3VyY2U6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc3BvbnNlOm51bGwsc2VhcmNoOm51bGwsc2VsZWN0Om51bGx9LHJlcXVlc3RJbmRleDowLHBlbmRpbmc6MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHM9dGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz1cInRleHRhcmVhXCI9PT1zLGE9XCJpbnB1dFwiPT09czt0aGlzLmlzTXVsdGlMaW5lPW98fCFhJiZ0aGlzLl9pc0NvbnRlbnRFZGl0YWJsZSh0aGlzLmVsZW1lbnQpLHRoaXMudmFsdWVNZXRob2Q9dGhpcy5lbGVtZW50W298fGE/XCJ2YWxcIjpcInRleHRcIl0sdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fYWRkQ2xhc3MoXCJ1aS1hdXRvY29tcGxldGUtaW5wdXRcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKSx0aGlzLl9vbih0aGlzLmVsZW1lbnQse2tleWRvd246ZnVuY3Rpb24ocyl7aWYodGhpcy5lbGVtZW50LnByb3AoXCJyZWFkT25seVwiKSlyZXR1cm4gZT0hMCxuPSEwLHZvaWQoaT0hMCk7ZT0hMSxuPSExLGk9ITE7dmFyIG89dC51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugby5QQUdFX1VQOmU9ITAsdGhpcy5fbW92ZShcInByZXZpb3VzUGFnZVwiLHMpO2JyZWFrO2Nhc2Ugby5QQUdFX0RPV046ZT0hMCx0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixzKTticmVhaztjYXNlIG8uVVA6ZT0hMCx0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIscyk7YnJlYWs7Y2FzZSBvLkRPV046ZT0hMCx0aGlzLl9rZXlFdmVudChcIm5leHRcIixzKTticmVhaztjYXNlIG8uRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKGU9ITAscy5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QocykpO2JyZWFrO2Nhc2Ugby5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChzKTticmVhaztjYXNlIG8uRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikmJih0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMuY2xvc2Uocykscy5wcmV2ZW50RGVmYXVsdCgpKTticmVhaztkZWZhdWx0Omk9ITAsdGhpcy5fc2VhcmNoVGltZW91dChzKX19LGtleXByZXNzOmZ1bmN0aW9uKG4pe2lmKGUpcmV0dXJuIGU9ITEsdm9pZCh0aGlzLmlzTXVsdGlMaW5lJiYhdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKXx8bi5wcmV2ZW50RGVmYXVsdCgpKTtpZighaSl7dmFyIHM9dC51aS5rZXlDb2RlO3N3aXRjaChuLmtleUNvZGUpe2Nhc2Ugcy5QQUdFX1VQOnRoaXMuX21vdmUoXCJwcmV2aW91c1BhZ2VcIixuKTticmVhaztjYXNlIHMuUEFHRV9ET1dOOnRoaXMuX21vdmUoXCJuZXh0UGFnZVwiLG4pO2JyZWFrO2Nhc2Ugcy5VUDp0aGlzLl9rZXlFdmVudChcInByZXZpb3VzXCIsbik7YnJlYWs7Y2FzZSBzLkRPV046dGhpcy5fa2V5RXZlbnQoXCJuZXh0XCIsbil9fX0saW5wdXQ6ZnVuY3Rpb24odCl7aWYobilyZXR1cm4gbj0hMSx2b2lkIHQucHJldmVudERlZmF1bHQoKTt0aGlzLl9zZWFyY2hUaW1lb3V0KHQpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5wcmV2aW91cz10aGlzLl92YWx1ZSgpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuY2FuY2VsQmx1cj9kZWxldGUgdGhpcy5jYW5jZWxCbHVyOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UodCksdGhpcy5fY2hhbmdlKHQpKX19KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PXQoXCI8dWw+XCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5tZW51KFwiaW5zdGFuY2VcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5tZW51LmVsZW1lbnQsXCJ1aS1hdXRvY29tcGxldGVcIixcInVpLWZyb250XCIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsdGhpcy5lbGVtZW50WzBdIT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKX0pfSxtZW51Zm9jdXM6ZnVuY3Rpb24oZSxpKXt2YXIgbixzO2lmKHRoaXMuaXNOZXdNZW51JiYodGhpcy5pc05ld01lbnU9ITEsZS5vcmlnaW5hbEV2ZW50JiYvXm1vdXNlLy50ZXN0KGUub3JpZ2luYWxFdmVudC50eXBlKSkpcmV0dXJuIHRoaXMubWVudS5ibHVyKCksdm9pZCB0aGlzLmRvY3VtZW50Lm9uZShcIm1vdXNlbW92ZVwiLGZ1bmN0aW9uKCl7dChlLnRhcmdldCkudHJpZ2dlcihlLm9yaWdpbmFsRXZlbnQpfSk7cz1pLml0ZW0uZGF0YShcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIpLCExIT09dGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsZSx7aXRlbTpzfSkmJmUub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QoZS5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShzLnZhbHVlKSwobj1pLml0ZW0uYXR0cihcImFyaWEtbGFiZWxcIil8fHMudmFsdWUpJiZ0LnRyaW0obikubGVuZ3RoJiYodGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHQoXCI8ZGl2PlwiKS50ZXh0KG4pLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfSxtZW51c2VsZWN0OmZ1bmN0aW9uKGUsaSl7dmFyIG49aS5pdGVtLmRhdGEoXCJ1aS1hdXRvY29tcGxldGUtaXRlbVwiKSxzPXRoaXMucHJldmlvdXM7dGhpcy5lbGVtZW50WzBdIT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIiksdGhpcy5wcmV2aW91cz1zLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1zLHRoaXMuc2VsZWN0ZWRJdGVtPW59KSksITEhPT10aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsZSx7aXRlbTpufSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09bn19KSx0aGlzLmxpdmVSZWdpb249dChcIjxkaXY+XCIse3JvbGU6XCJzdGF0dXNcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fYWRkQ2xhc3ModGhpcy5saXZlUmVnaW9uLG51bGwsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dGhpcy5fc3VwZXIodCxlKSxcInNvdXJjZVwiPT09dCYmdGhpcy5faW5pdFNvdXJjZSgpLFwiYXBwZW5kVG9cIj09PXQmJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwiZGlzYWJsZWRcIj09PXQmJmUmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfaXNFdmVudFRhcmdldEluV2lkZ2V0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMubWVudS5lbGVtZW50WzBdO3JldHVybiBlLnRhcmdldD09PXRoaXMuZWxlbWVudFswXXx8ZS50YXJnZXQ9PT1pfHx0LmNvbnRhaW5zKGksZS50YXJnZXQpfSxfY2xvc2VPbkNsaWNrT3V0c2lkZTpmdW5jdGlvbih0KXt0aGlzLl9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQodCl8fHRoaXMuY2xvc2UoKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZT1lLmpxdWVyeXx8ZS5ub2RlVHlwZT90KGUpOnRoaXMuZG9jdW1lbnQuZmluZChlKS5lcSgwKSksZSYmZVswXXx8KGU9dGhpcy5lbGVtZW50LmNsb3Nlc3QoXCIudWktZnJvbnQsIGRpYWxvZ1wiKSksZS5sZW5ndGh8fChlPXRoaXMuZG9jdW1lbnRbMF0uYm9keSksZX0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgZSxpLG49dGhpczt0LmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KGU9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLG4pe24odC51aS5hdXRvY29tcGxldGUuZmlsdGVyKGUsaS50ZXJtKSl9KTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy5vcHRpb25zLnNvdXJjZT8oaT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGUscyl7bi54aHImJm4ueGhyLmFib3J0KCksbi54aHI9dC5hamF4KHt1cmw6aSxkYXRhOmUsZGF0YVR5cGU6XCJqc29uXCIsc3VjY2VzczpmdW5jdGlvbih0KXtzKHQpfSxlcnJvcjpmdW5jdGlvbigpe3MoW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sX3NlYXJjaFRpbWVvdXQ6ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLnNlYXJjaGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBlPXRoaXMudGVybT09PXRoaXMuX3ZhbHVlKCksaT10aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpLG49dC5hbHRLZXl8fHQuY3RybEtleXx8dC5tZXRhS2V5fHx0LnNoaWZ0S2V5O2UmJighZXx8aXx8bil8fCh0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMuc2VhcmNoKG51bGwsdCkpfSx0aGlzLm9wdGlvbnMuZGVsYXkpfSxzZWFyY2g6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1udWxsIT10P3Q6dGhpcy5fdmFsdWUoKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoP3RoaXMuY2xvc2UoZSk6ITEhPT10aGlzLl90cmlnZ2VyKFwic2VhcmNoXCIsZSk/dGhpcy5fc2VhcmNoKHQpOnZvaWQgMH0sX3NlYXJjaDpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmcrKyx0aGlzLl9hZGRDbGFzcyhcInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nXCIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOnR9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgZT0rK3RoaXMucmVxdWVzdEluZGV4O3JldHVybiB0LnByb3h5KGZ1bmN0aW9uKHQpe2U9PT10aGlzLnJlcXVlc3RJbmRleCYmdGhpcy5fX3Jlc3BvbnNlKHQpLC0tdGhpcy5wZW5kaW5nfHx0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nXCIpfSx0aGlzKX0sX19yZXNwb25zZTpmdW5jdGlvbih0KXt0JiYodD10aGlzLl9ub3JtYWxpemUodCkpLHRoaXMuX3RyaWdnZXIoXCJyZXNwb25zZVwiLG51bGwse2NvbnRlbnQ6dH0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnQmJnQubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QodCksdGhpcy5fdHJpZ2dlcihcIm9wZW5cIikpOnRoaXMuX2Nsb3NlKCl9LGNsb3NlOmZ1bmN0aW9uKHQpe3RoaXMuY2FuY2VsU2VhcmNoPSEwLHRoaXMuX2Nsb3NlKHQpfSxfY2xvc2U6ZnVuY3Rpb24odCl7dGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsXCJtb3VzZWRvd25cIiksdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSYmKHRoaXMubWVudS5lbGVtZW50LmhpZGUoKSx0aGlzLm1lbnUuYmx1cigpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuX3RyaWdnZXIoXCJjbG9zZVwiLHQpKX0sX2NoYW5nZTpmdW5jdGlvbih0KXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLHQse2l0ZW06dGhpcy5zZWxlY3RlZEl0ZW19KX0sX25vcm1hbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5sZW5ndGgmJmVbMF0ubGFiZWwmJmVbMF0udmFsdWU/ZTp0Lm1hcChlLGZ1bmN0aW9uKGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBlP3tsYWJlbDplLHZhbHVlOmV9OnQuZXh0ZW5kKHt9LGUse2xhYmVsOmUubGFiZWx8fGUudmFsdWUsdmFsdWU6ZS52YWx1ZXx8ZS5sYWJlbH0pfSl9LF9zdWdnZXN0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMubWVudS5lbGVtZW50LmVtcHR5KCk7dGhpcy5fcmVuZGVyTWVudShpLGUpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMubWVudS5yZWZyZXNoKCksaS5zaG93KCksdGhpcy5fcmVzaXplTWVudSgpLGkucG9zaXRpb24odC5leHRlbmQoe29mOnRoaXMuZWxlbWVudH0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksdGhpcy5vcHRpb25zLmF1dG9Gb2N1cyYmdGhpcy5tZW51Lm5leHQoKSx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHttb3VzZWRvd246XCJfY2xvc2VPbkNsaWNrT3V0c2lkZVwifSl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5tZW51LmVsZW1lbnQ7dC5vdXRlcldpZHRoKE1hdGgubWF4KHQud2lkdGgoXCJcIikub3V0ZXJXaWR0aCgpKzEsdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSkpfSxfcmVuZGVyTWVudTpmdW5jdGlvbihlLGkpe3ZhciBuPXRoaXM7dC5lYWNoKGksZnVuY3Rpb24odCxpKXtuLl9yZW5kZXJJdGVtRGF0YShlLGkpfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKHQsZSkuZGF0YShcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIsZSl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKGUsaSl7cmV0dXJuIHQoXCI8bGk+XCIpLmFwcGVuZCh0KFwiPGRpdj5cIikudGV4dChpLmxhYmVsKSkuYXBwZW5kVG8oZSl9LF9tb3ZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIik/dGhpcy5tZW51LmlzRmlyc3RJdGVtKCkmJi9ecHJldmlvdXMvLnRlc3QodCl8fHRoaXMubWVudS5pc0xhc3RJdGVtKCkmJi9ebmV4dC8udGVzdCh0KT8odGhpcy5pc011bHRpTGluZXx8dGhpcy5fdmFsdWUodGhpcy50ZXJtKSx2b2lkIHRoaXMubWVudS5ibHVyKCkpOnZvaWQgdGhpcy5tZW51W3RdKGUpOnZvaWQgdGhpcy5zZWFyY2gobnVsbCxlKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50fSxfdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsYXJndW1lbnRzKX0sX2tleUV2ZW50OmZ1bmN0aW9uKHQsZSl7dGhpcy5pc011bHRpTGluZSYmIXRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIil8fCh0aGlzLl9tb3ZlKHQsZSksZS5wcmV2ZW50RGVmYXVsdCgpKX0sX2lzQ29udGVudEVkaXRhYmxlOmZ1bmN0aW9uKHQpe2lmKCF0Lmxlbmd0aClyZXR1cm4hMTt2YXIgZT10LnByb3AoXCJjb250ZW50RWRpdGFibGVcIik7cmV0dXJuXCJpbmhlcml0XCI9PT1lP3RoaXMuX2lzQ29udGVudEVkaXRhYmxlKHQucGFyZW50KCkpOlwidHJ1ZVwiPT09ZX19KSx0LmV4dGVuZCh0LnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24odCl7cmV0dXJuIHQucmVwbGFjZSgvW1xcLVxcW1xcXXt9KCkqKz8uLFxcXFxcXF4kfCNcXHNdL2csXCJcXFxcJCZcIil9LGZpbHRlcjpmdW5jdGlvbihlLGkpe3ZhciBuPW5ldyBSZWdFeHAodC51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoaSksXCJpXCIpO3JldHVybiB0LmdyZXAoZSxmdW5jdGlvbih0KXtyZXR1cm4gbi50ZXN0KHQubGFiZWx8fHQudmFsdWV8fHQpfSl9fSksdC53aWRnZXQoXCJ1aS5hdXRvY29tcGxldGVcIix0LnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czpcIk5vIHNlYXJjaCByZXN1bHRzLlwiLHJlc3VsdHM6ZnVuY3Rpb24odCl7cmV0dXJuIHQrKHQ+MT9cIiByZXN1bHRzIGFyZVwiOlwiIHJlc3VsdCBpc1wiKStcIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLlwifX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24oZSl7dmFyIGk7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5jYW5jZWxTZWFyY2h8fChpPWUmJmUubGVuZ3RoP3RoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKTp0aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi5jaGlsZHJlbigpLmhpZGUoKSx0KFwiPGRpdj5cIikudGV4dChpKS5hcHBlbmRUbyh0aGlzLmxpdmVSZWdpb24pKX19KTt2YXIgYyx1PSh0LnVpLmF1dG9jb21wbGV0ZSwvdWktY29ybmVyLShbYS16XSl7Miw2fS9nKTt0LndpZGdldChcInVpLmNvbnRyb2xncm91cFwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8ZGl2PlwiLG9wdGlvbnM6e2RpcmVjdGlvbjpcImhvcml6b250YWxcIixkaXNhYmxlZDpudWxsLG9ubHlWaXNpYmxlOiEwLGl0ZW1zOntidXR0b246XCJpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGJ1dHRvbiwgYVwiLGNvbnRyb2xncm91cExhYmVsOlwiLnVpLWNvbnRyb2xncm91cC1sYWJlbFwiLGNoZWNrYm94cmFkaW86XCJpbnB1dFt0eXBlPSdjaGVja2JveCddLCBpbnB1dFt0eXBlPSdyYWRpbyddXCIsc2VsZWN0bWVudTpcInNlbGVjdFwiLHNwaW5uZXI6XCIudWktc3Bpbm5lci1pbnB1dFwifX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX2VuaGFuY2UoKX0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInRvb2xiYXJcIiksdGhpcy5yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fY2FsbENoaWxkTWV0aG9kKFwiZGVzdHJveVwiKSx0aGlzLmNoaWxkV2lkZ2V0cy5yZW1vdmVEYXRhKFwidWktY29udHJvbGdyb3VwLWRhdGFcIiksdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlXCIpLHRoaXMub3B0aW9ucy5pdGVtcy5jb250cm9sZ3JvdXBMYWJlbCYmdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zLmNvbnRyb2xncm91cExhYmVsKS5maW5kKFwiLnVpLWNvbnRyb2xncm91cC1sYWJlbC1jb250ZW50c1wiKS5jb250ZW50cygpLnVud3JhcCgpfSxfaW5pdFdpZGdldHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9W107dC5lYWNoKHRoaXMub3B0aW9ucy5pdGVtcyxmdW5jdGlvbihuLHMpe3ZhciBvLGE9e307aWYocylyZXR1cm5cImNvbnRyb2xncm91cExhYmVsXCI9PT1uPygobz1lLmVsZW1lbnQuZmluZChzKSkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5jaGlsZHJlbihcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIikubGVuZ3RofHxlLmNvbnRlbnRzKCkud3JhcEFsbChcIjxzcGFuIGNsYXNzPSd1aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHMnPjwvc3Bhbj5cIil9KSxlLl9hZGRDbGFzcyhvLG51bGwsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktc3RhdGUtZGVmYXVsdFwiKSx2b2lkKGk9aS5jb25jYXQoby5nZXQoKSkpKTp2b2lkKHQuZm5bbl0mJihhPWVbXCJfXCIrbitcIk9wdGlvbnNcIl0/ZVtcIl9cIituK1wiT3B0aW9uc1wiXShcIm1pZGRsZVwiKTp7Y2xhc3Nlczp7fX0sZS5lbGVtZW50LmZpbmQocykuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQodGhpcyksbz1zW25dKFwiaW5zdGFuY2VcIikscj10LndpZGdldC5leHRlbmQoe30sYSk7aWYoXCJidXR0b25cIiE9PW58fCFzLnBhcmVudChcIi51aS1zcGlubmVyXCIpLmxlbmd0aCl7b3x8KG89c1tuXSgpW25dKFwiaW5zdGFuY2VcIikpLG8mJihyLmNsYXNzZXM9ZS5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoci5jbGFzc2VzLG8pKSxzW25dKHIpO3ZhciBsPXNbbl0oXCJ3aWRnZXRcIik7dC5kYXRhKGxbMF0sXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiLG98fHNbbl0oXCJpbnN0YW5jZVwiKSksaS5wdXNoKGxbMF0pfX0pKSl9KSx0aGlzLmNoaWxkV2lkZ2V0cz10KHQudW5pcXVlKGkpKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmNoaWxkV2lkZ2V0cyxcInVpLWNvbnRyb2xncm91cC1pdGVtXCIpfSxfY2FsbENoaWxkTWV0aG9kOmZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRXaWRnZXRzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLmRhdGEoXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiKTtpJiZpW2VdJiZpW2VdKCl9KX0sX3VwZGF0ZUNvcm5lckNsYXNzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKGUsXCJsYWJlbFwiKS5jbGFzc2VzLmxhYmVsO3RoaXMuX3JlbW92ZUNsYXNzKHQsbnVsbCxcInVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQgdWktY29ybmVyLWFsbFwiKSx0aGlzLl9hZGRDbGFzcyh0LG51bGwsaSl9LF9idWlsZFNpbXBsZU9wdGlvbnM6ZnVuY3Rpb24odCxlKXt2YXIgaT1cInZlcnRpY2FsXCI9PT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uLG49e2NsYXNzZXM6e319O3JldHVybiBuLmNsYXNzZXNbZV09e21pZGRsZTpcIlwiLGZpcnN0OlwidWktY29ybmVyLVwiKyhpP1widG9wXCI6XCJsZWZ0XCIpLGxhc3Q6XCJ1aS1jb3JuZXItXCIrKGk/XCJib3R0b21cIjpcInJpZ2h0XCIpLG9ubHk6XCJ1aS1jb3JuZXItYWxsXCJ9W3RdLG59LF9zcGlubmVyT3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9idWlsZFNpbXBsZU9wdGlvbnModCxcInVpLXNwaW5uZXJcIik7cmV0dXJuIGUuY2xhc3Nlc1tcInVpLXNwaW5uZXItdXBcIl09XCJcIixlLmNsYXNzZXNbXCJ1aS1zcGlubmVyLWRvd25cIl09XCJcIixlfSxfYnV0dG9uT3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKHQsXCJ1aS1idXR0b25cIil9LF9jaGVja2JveHJhZGlvT3B0aW9uczpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKHQsXCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCIpfSxfc2VsZWN0bWVudU9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9XCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcHRpb25zLmRpcmVjdGlvbjtyZXR1cm57d2lkdGg6ISFlJiZcImF1dG9cIixjbGFzc2VzOnttaWRkbGU6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOlwiXCIsXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcIlwifSxmaXJzdDp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6XCJ1aS1jb3JuZXItXCIrKGU/XCJ0b3BcIjpcInRsXCIpLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItXCIrKGU/XCJ0b3BcIjpcImxlZnRcIil9LGxhc3Q6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOmU/XCJcIjpcInVpLWNvcm5lci10clwiLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJ1aS1jb3JuZXItXCIrKGU/XCJib3R0b21cIjpcInJpZ2h0XCIpfSxvbmx5OntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci10b3BcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLWFsbFwifX1bdF19fSxfcmVzb2x2ZUNsYXNzZXNWYWx1ZXM6ZnVuY3Rpb24oZSxpKXt2YXIgbj17fTtyZXR1cm4gdC5lYWNoKGUsZnVuY3Rpb24ocyl7dmFyIG89aS5vcHRpb25zLmNsYXNzZXNbc118fFwiXCI7bz10LnRyaW0oby5yZXBsYWNlKHUsXCJcIikpLG5bc109KG8rXCIgXCIrZVtzXSkucmVwbGFjZSgvXFxzKy9nLFwiIFwiKX0pLG59LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcImRpcmVjdGlvblwiPT09dCYmdGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1jb250cm9sZ3JvdXAtXCIrdGhpcy5vcHRpb25zLmRpcmVjdGlvbiksdGhpcy5fc3VwZXIodCxlKSxcImRpc2FibGVkXCIhPT10P3RoaXMucmVmcmVzaCgpOnRoaXMuX2NhbGxDaGlsZE1ldGhvZChlP1wiZGlzYWJsZVwiOlwiZW5hYmxlXCIpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktY29udHJvbGdyb3VwIHVpLWNvbnRyb2xncm91cC1cIit0aGlzLm9wdGlvbnMuZGlyZWN0aW9uKSxcImhvcml6b250YWxcIj09PXRoaXMub3B0aW9ucy5kaXJlY3Rpb24mJnRoaXMuX2FkZENsYXNzKG51bGwsXCJ1aS1oZWxwZXItY2xlYXJmaXhcIiksdGhpcy5faW5pdFdpZGdldHMoKSxlPXRoaXMuY2hpbGRXaWRnZXRzLHRoaXMub3B0aW9ucy5vbmx5VmlzaWJsZSYmKGU9ZS5maWx0ZXIoXCI6dmlzaWJsZVwiKSksZS5sZW5ndGgmJih0LmVhY2goW1wiZmlyc3RcIixcImxhc3RcIl0sZnVuY3Rpb24odCxuKXt2YXIgcz1lW25dKCkuZGF0YShcInVpLWNvbnRyb2xncm91cC1kYXRhXCIpO2lmKHMmJmlbXCJfXCIrcy53aWRnZXROYW1lK1wiT3B0aW9uc1wiXSl7dmFyIG89aVtcIl9cIitzLndpZGdldE5hbWUrXCJPcHRpb25zXCJdKDE9PT1lLmxlbmd0aD9cIm9ubHlcIjpuKTtvLmNsYXNzZXM9aS5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoby5jbGFzc2VzLHMpLHMuZWxlbWVudFtzLndpZGdldE5hbWVdKG8pfWVsc2UgaS5fdXBkYXRlQ29ybmVyQ2xhc3MoZVtuXSgpLG4pfSksdGhpcy5fY2FsbENoaWxkTWV0aG9kKFwicmVmcmVzaFwiKSl9fSksdC53aWRnZXQoXCJ1aS5jaGVja2JveHJhZGlvXCIsW3QudWkuZm9ybVJlc2V0TWl4aW4se3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntkaXNhYmxlZDpudWxsLGxhYmVsOm51bGwsaWNvbjohMCxjbGFzc2VzOntcInVpLWNoZWNrYm94cmFkaW8tbGFiZWxcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLWNoZWNrYm94cmFkaW8taWNvblwiOlwidWktY29ybmVyLWFsbFwifX0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgZSxpLG49dGhpcyxzPXRoaXMuX3N1cGVyKCl8fHt9O3JldHVybiB0aGlzLl9yZWFkVHlwZSgpLGk9dGhpcy5lbGVtZW50LmxhYmVscygpLHRoaXMubGFiZWw9dChpW2kubGVuZ3RoLTFdKSx0aGlzLmxhYmVsLmxlbmd0aHx8dC5lcnJvcihcIk5vIGxhYmVsIGZvdW5kIGZvciBjaGVja2JveHJhZGlvIHdpZGdldFwiKSx0aGlzLm9yaWdpbmFsTGFiZWw9XCJcIix0aGlzLmxhYmVsLmNvbnRlbnRzKCkubm90KHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe24ub3JpZ2luYWxMYWJlbCs9Mz09PXRoaXMubm9kZVR5cGU/dCh0aGlzKS50ZXh0KCk6dGhpcy5vdXRlckhUTUx9KSx0aGlzLm9yaWdpbmFsTGFiZWwmJihzLmxhYmVsPXRoaXMub3JpZ2luYWxMYWJlbCksbnVsbCE9KGU9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkKSYmKHMuZGlzYWJsZWQ9ZSksc30sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudFswXS5jaGVja2VkO3RoaXMuX2JpbmRGb3JtUmVzZXRIYW5kbGVyKCksbnVsbD09dGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZCksdGhpcy5fc2V0T3B0aW9uKFwiZGlzYWJsZWRcIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2FkZENsYXNzKFwidWktY2hlY2tib3hyYWRpb1wiLFwidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCIsXCJ1aS1idXR0b24gdWktd2lkZ2V0XCIpLFwicmFkaW9cIj09PXRoaXMudHlwZSYmdGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tcmFkaW8tbGFiZWxcIiksdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLm9wdGlvbnMubGFiZWwhPT10aGlzLm9yaWdpbmFsTGFiZWw/dGhpcy5fdXBkYXRlTGFiZWwoKTp0aGlzLm9yaWdpbmFsTGFiZWwmJih0aGlzLm9wdGlvbnMubGFiZWw9dGhpcy5vcmlnaW5hbExhYmVsKSx0aGlzLl9lbmhhbmNlKCksdCYmKHRoaXMuX2FkZENsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmljb24mJnRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixudWxsLFwidWktc3RhdGUtaG92ZXJcIikpLHRoaXMuX29uKHtjaGFuZ2U6XCJfdG9nZ2xlQ2xhc3Nlc1wiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ2xhc3ModGhpcy5sYWJlbCxudWxsLFwidWktc3RhdGUtZm9jdXMgdWktdmlzdWFsLWZvY3VzXCIpfSxibHVyOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5sYWJlbCxudWxsLFwidWktc3RhdGUtZm9jdXMgdWktdmlzdWFsLWZvY3VzXCIpfX0pfSxfcmVhZFR5cGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTt0aGlzLnR5cGU9dGhpcy5lbGVtZW50WzBdLnR5cGUsXCJpbnB1dFwiPT09ZSYmL3JhZGlvfGNoZWNrYm94Ly50ZXN0KHRoaXMudHlwZSl8fHQuZXJyb3IoXCJDYW4ndCBjcmVhdGUgY2hlY2tib3hyYWRpbyBvbiBlbGVtZW50Lm5vZGVOYW1lPVwiK2UrXCIgYW5kIGVsZW1lbnQudHlwZT1cIit0aGlzLnR5cGUpfSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMuX3VwZGF0ZUljb24odGhpcy5lbGVtZW50WzBdLmNoZWNrZWQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sYWJlbH0sX2dldFJhZGlvR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnRbMF0ubmFtZSxpPVwiaW5wdXRbbmFtZT0nXCIrdC51aS5lc2NhcGVTZWxlY3RvcihlKStcIiddXCI7cmV0dXJuIGU/KHRoaXMuZm9ybS5sZW5ndGg/dCh0aGlzLmZvcm1bMF0uZWxlbWVudHMpLmZpbHRlcihpKTp0KGkpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09dCh0aGlzKS5mb3JtKCkubGVuZ3RofSkpLm5vdCh0aGlzLmVsZW1lbnQpOnQoW10pfSxfdG9nZ2xlQ2xhc3NlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudFswXS5jaGVja2VkO3RoaXMuX3RvZ2dsZUNsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiLGUpLHRoaXMub3B0aW9ucy5pY29uJiZcImNoZWNrYm94XCI9PT10aGlzLnR5cGUmJnRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktaWNvbi1jaGVjayB1aS1zdGF0ZS1jaGVja2VkXCIsZSkuX3RvZ2dsZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktaWNvbi1ibGFua1wiLCFlKSxcInJhZGlvXCI9PT10aGlzLnR5cGUmJnRoaXMuX2dldFJhZGlvR3JvdXAoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5jaGVja2JveHJhZGlvKFwiaW5zdGFuY2VcIik7ZSYmZS5fcmVtb3ZlQ2xhc3MoZS5sYWJlbCxcInVpLWNoZWNrYm94cmFkaW8tY2hlY2tlZFwiLFwidWktc3RhdGUtYWN0aXZlXCIpfSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fdW5iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMuaWNvbiYmKHRoaXMuaWNvbi5yZW1vdmUoKSx0aGlzLmljb25TcGFjZS5yZW1vdmUoKSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImxhYmVsXCIhPT10fHxlKXtpZih0aGlzLl9zdXBlcih0LGUpLFwiZGlzYWJsZWRcIj09PXQpcmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMubGFiZWwsbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsZSksdm9pZCh0aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ9ZSk7dGhpcy5yZWZyZXNoKCl9fSxfdXBkYXRlSWNvbjpmdW5jdGlvbihlKXt2YXIgaT1cInVpLWljb24gdWktaWNvbi1iYWNrZ3JvdW5kIFwiO3RoaXMub3B0aW9ucy5pY29uPyh0aGlzLmljb258fCh0aGlzLmljb249dChcIjxzcGFuPlwiKSx0aGlzLmljb25TcGFjZT10KFwiPHNwYW4+IDwvc3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uU3BhY2UsXCJ1aS1jaGVja2JveHJhZGlvLWljb24tc3BhY2VcIikpLFwiY2hlY2tib3hcIj09PXRoaXMudHlwZT8oaSs9ZT9cInVpLWljb24tY2hlY2sgdWktc3RhdGUtY2hlY2tlZFwiOlwidWktaWNvbi1ibGFua1wiLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLGU/XCJ1aS1pY29uLWJsYW5rXCI6XCJ1aS1pY29uLWNoZWNrXCIpKTppKz1cInVpLWljb24tYmxhbmtcIix0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sXCJ1aS1jaGVja2JveHJhZGlvLWljb25cIixpKSxlfHx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLWljb24tY2hlY2sgdWktc3RhdGUtY2hlY2tlZFwiKSx0aGlzLmljb24ucHJlcGVuZFRvKHRoaXMubGFiZWwpLmFmdGVyKHRoaXMuaWNvblNwYWNlKSk6dm9pZCAwIT09dGhpcy5pY29uJiYodGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmljb24pfSxfdXBkYXRlTGFiZWw6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxhYmVsLmNvbnRlbnRzKCkubm90KHRoaXMuZWxlbWVudFswXSk7dGhpcy5pY29uJiYodD10Lm5vdCh0aGlzLmljb25bMF0pKSx0aGlzLmljb25TcGFjZSYmKHQ9dC5ub3QodGhpcy5pY29uU3BhY2VbMF0pKSx0LnJlbW92ZSgpLHRoaXMubGFiZWwuYXBwZW5kKHRoaXMub3B0aW9ucy5sYWJlbCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnRbMF0uY2hlY2tlZCxlPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZDt0aGlzLl91cGRhdGVJY29uKHQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiLHQpLG51bGwhPT10aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuX3VwZGF0ZUxhYmVsKCksZSE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6ZX0pfX1dKSx0LnVpLmNoZWNrYm94cmFkaW8sdC53aWRnZXQoXCJ1aS5idXR0b25cIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPGJ1dHRvbj5cIixvcHRpb25zOntjbGFzc2VzOntcInVpLWJ1dHRvblwiOlwidWktY29ybmVyLWFsbFwifSxkaXNhYmxlZDpudWxsLGljb246bnVsbCxpY29uUG9zaXRpb246XCJiZWdpbm5pbmdcIixsYWJlbDpudWxsLHNob3dMYWJlbDohMH0sX2dldENyZWF0ZU9wdGlvbnM6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuX3N1cGVyKCl8fHt9O3JldHVybiB0aGlzLmlzSW5wdXQ9dGhpcy5lbGVtZW50LmlzKFwiaW5wdXRcIiksbnVsbCE9KHQ9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkKSYmKGUuZGlzYWJsZWQ9dCksdGhpcy5vcmlnaW5hbExhYmVsPXRoaXMuaXNJbnB1dD90aGlzLmVsZW1lbnQudmFsKCk6dGhpcy5lbGVtZW50Lmh0bWwoKSx0aGlzLm9yaWdpbmFsTGFiZWwmJihlLmxhYmVsPXRoaXMub3JpZ2luYWxMYWJlbCksZX0sX2NyZWF0ZTpmdW5jdGlvbigpeyF0aGlzLm9wdGlvbi5zaG93TGFiZWwmIXRoaXMub3B0aW9ucy5pY29uJiYodGhpcy5vcHRpb25zLnNob3dMYWJlbD0hMCksbnVsbD09dGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPXRoaXMuZWxlbWVudFswXS5kaXNhYmxlZHx8ITEpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLHRoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5vcHRpb25zLmxhYmVsIT09dGhpcy5vcmlnaW5hbExhYmVsJiYodGhpcy5pc0lucHV0P3RoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKTp0aGlzLmVsZW1lbnQuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpKSx0aGlzLl9hZGRDbGFzcyhcInVpLWJ1dHRvblwiLFwidWktd2lkZ2V0XCIpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9lbmhhbmNlKCksdGhpcy5lbGVtZW50LmlzKFwiYVwiKSYmdGhpcy5fb24oe2tleXVwOmZ1bmN0aW9uKGUpe2Uua2V5Q29kZT09PXQudWkua2V5Q29kZS5TUEFDRSYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmVsZW1lbnRbMF0uY2xpY2s/dGhpcy5lbGVtZW50WzBdLmNsaWNrKCk6dGhpcy5lbGVtZW50LnRyaWdnZXIoXCJjbGlja1wiKSl9fSl9LF9lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmlzKFwiYnV0dG9uXCIpfHx0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcImJ1dHRvblwiKSx0aGlzLm9wdGlvbnMuaWNvbiYmKHRoaXMuX3VwZGF0ZUljb24oXCJpY29uXCIsdGhpcy5vcHRpb25zLmljb24pLHRoaXMuX3VwZGF0ZVRvb2x0aXAoKSl9LF91cGRhdGVUb29sdGlwOmZ1bmN0aW9uKCl7dGhpcy50aXRsZT10aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLHRoaXMub3B0aW9ucy5zaG93TGFiZWx8fHRoaXMudGl0bGV8fHRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIix0aGlzLm9wdGlvbnMubGFiZWwpfSxfdXBkYXRlSWNvbjpmdW5jdGlvbihlLGkpe3ZhciBuPVwiaWNvblBvc2l0aW9uXCIhPT1lLHM9bj90aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uOmksbz1cInRvcFwiPT09c3x8XCJib3R0b21cIj09PXM7dGhpcy5pY29uP24mJnRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLHRoaXMub3B0aW9ucy5pY29uKToodGhpcy5pY29uPXQoXCI8c3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLFwidWktYnV0dG9uLWljb25cIixcInVpLWljb25cIiksdGhpcy5vcHRpb25zLnNob3dMYWJlbHx8dGhpcy5fYWRkQ2xhc3MoXCJ1aS1idXR0b24taWNvbi1vbmx5XCIpKSxuJiZ0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sbnVsbCxpKSx0aGlzLl9hdHRhY2hJY29uKHMpLG8/KHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixudWxsLFwidWktd2lkZ2V0LWljb24tYmxvY2tcIiksdGhpcy5pY29uU3BhY2UmJnRoaXMuaWNvblNwYWNlLnJlbW92ZSgpKToodGhpcy5pY29uU3BhY2V8fCh0aGlzLmljb25TcGFjZT10KFwiPHNwYW4+IDwvc3Bhbj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uU3BhY2UsXCJ1aS1idXR0b24taWNvbi1zcGFjZVwiKSksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS13aWdldC1pY29uLWJsb2NrXCIpLHRoaXMuX2F0dGFjaEljb25TcGFjZShzKSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlXCIpLHRoaXMuaWNvbiYmdGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlJiZ0aGlzLmljb25TcGFjZS5yZW1vdmUoKSx0aGlzLmhhc1RpdGxlfHx0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcInRpdGxlXCIpfSxfYXR0YWNoSWNvblNwYWNlOmZ1bmN0aW9uKHQpe3RoaXMuaWNvblsvXig/OmVuZHxib3R0b20pLy50ZXN0KHQpP1wiYmVmb3JlXCI6XCJhZnRlclwiXSh0aGlzLmljb25TcGFjZSl9LF9hdHRhY2hJY29uOmZ1bmN0aW9uKHQpe3RoaXMuZWxlbWVudFsvXig/OmVuZHxib3R0b20pLy50ZXN0KHQpP1wiYXBwZW5kXCI6XCJwcmVwZW5kXCJdKHRoaXMuaWNvbil9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXZvaWQgMD09PXQuc2hvd0xhYmVsP3RoaXMub3B0aW9ucy5zaG93TGFiZWw6dC5zaG93TGFiZWwsaT12b2lkIDA9PT10Lmljb24/dGhpcy5vcHRpb25zLmljb246dC5pY29uO2V8fGl8fCh0LnNob3dMYWJlbD0hMCksdGhpcy5fc3VwZXIodCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcImljb25cIj09PXQmJihlP3RoaXMuX3VwZGF0ZUljb24odCxlKTp0aGlzLmljb24mJih0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UmJnRoaXMuaWNvblNwYWNlLnJlbW92ZSgpKSksXCJpY29uUG9zaXRpb25cIj09PXQmJnRoaXMuX3VwZGF0ZUljb24odCxlKSxcInNob3dMYWJlbFwiPT09dCYmKHRoaXMuX3RvZ2dsZUNsYXNzKFwidWktYnV0dG9uLWljb24tb25seVwiLG51bGwsIWUpLHRoaXMuX3VwZGF0ZVRvb2x0aXAoKSksXCJsYWJlbFwiPT09dCYmKHRoaXMuaXNJbnB1dD90aGlzLmVsZW1lbnQudmFsKGUpOih0aGlzLmVsZW1lbnQuaHRtbChlKSx0aGlzLmljb24mJih0aGlzLl9hdHRhY2hJY29uKHRoaXMub3B0aW9ucy5pY29uUG9zaXRpb24pLHRoaXMuX2F0dGFjaEljb25TcGFjZSh0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uKSkpKSx0aGlzLl9zdXBlcih0LGUpLFwiZGlzYWJsZWRcIj09PXQmJih0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIixlKSx0aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ9ZSxlJiZ0aGlzLmVsZW1lbnQuYmx1cigpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC5pcyhcImlucHV0LCBidXR0b25cIik/dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkOnRoaXMuZWxlbWVudC5oYXNDbGFzcyhcInVpLWJ1dHRvbi1kaXNhYmxlZFwiKTt0IT09dGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDp0fSksdGhpcy5fdXBkYXRlVG9vbHRpcCgpfX0pLCExIT09dC51aUJhY2tDb21wYXQmJih0LndpZGdldChcInVpLmJ1dHRvblwiLHQudWkuYnV0dG9uLHtvcHRpb25zOnt0ZXh0OiEwLGljb25zOntwcmltYXJ5Om51bGwsc2Vjb25kYXJ5Om51bGx9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnNob3dMYWJlbCYmIXRoaXMub3B0aW9ucy50ZXh0JiYodGhpcy5vcHRpb25zLnNob3dMYWJlbD10aGlzLm9wdGlvbnMudGV4dCksIXRoaXMub3B0aW9ucy5zaG93TGFiZWwmJnRoaXMub3B0aW9ucy50ZXh0JiYodGhpcy5vcHRpb25zLnRleHQ9dGhpcy5vcHRpb25zLnNob3dMYWJlbCksdGhpcy5vcHRpb25zLmljb258fCF0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeSYmIXRoaXMub3B0aW9ucy5pY29ucy5zZWNvbmRhcnk/dGhpcy5vcHRpb25zLmljb24mJih0aGlzLm9wdGlvbnMuaWNvbnMucHJpbWFyeT10aGlzLm9wdGlvbnMuaWNvbik6dGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk/dGhpcy5vcHRpb25zLmljb249dGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk6KHRoaXMub3B0aW9ucy5pY29uPXRoaXMub3B0aW9ucy5pY29ucy5zZWNvbmRhcnksdGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbj1cImVuZFwiKSx0aGlzLl9zdXBlcigpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7XCJ0ZXh0XCIhPT10PyhcInNob3dMYWJlbFwiPT09dCYmKHRoaXMub3B0aW9ucy50ZXh0PWUpLFwiaWNvblwiPT09dCYmKHRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5PWUpLFwiaWNvbnNcIj09PXQmJihlLnByaW1hcnk/KHRoaXMuX3N1cGVyKFwiaWNvblwiLGUucHJpbWFyeSksdGhpcy5fc3VwZXIoXCJpY29uUG9zaXRpb25cIixcImJlZ2lubmluZ1wiKSk6ZS5zZWNvbmRhcnkmJih0aGlzLl9zdXBlcihcImljb25cIixlLnNlY29uZGFyeSksdGhpcy5fc3VwZXIoXCJpY29uUG9zaXRpb25cIixcImVuZFwiKSkpLHRoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSk6dGhpcy5fc3VwZXIoXCJzaG93TGFiZWxcIixlKX19KSx0LmZuLmJ1dHRvbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5sZW5ndGh8fHRoaXMubGVuZ3RoJiZcIklOUFVUXCIhPT10aGlzWzBdLnRhZ05hbWV8fHRoaXMubGVuZ3RoJiZcIklOUFVUXCI9PT10aGlzWzBdLnRhZ05hbWUmJlwiY2hlY2tib3hcIiE9PXRoaXMuYXR0cihcInR5cGVcIikmJlwicmFkaW9cIiE9PXRoaXMuYXR0cihcInR5cGVcIik/ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6KHQudWkuY2hlY2tib3hyYWRpb3x8dC5lcnJvcihcIkNoZWNrYm94cmFkaW8gd2lkZ2V0IG1pc3NpbmdcIiksMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5jaGVja2JveHJhZGlvKHtpY29uOiExfSk6dGhpcy5jaGVja2JveHJhZGlvLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSh0LmZuLmJ1dHRvbiksdC5mbi5idXR0b25zZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdC51aS5jb250cm9sZ3JvdXB8fHQuZXJyb3IoXCJDb250cm9sZ3JvdXAgd2lkZ2V0IG1pc3NpbmdcIiksXCJvcHRpb25cIj09PWFyZ3VtZW50c1swXSYmXCJpdGVtc1wiPT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMl0/dGhpcy5jb250cm9sZ3JvdXAuYXBwbHkodGhpcyxbYXJndW1lbnRzWzBdLFwiaXRlbXMuYnV0dG9uXCIsYXJndW1lbnRzWzJdXSk6XCJvcHRpb25cIj09PWFyZ3VtZW50c1swXSYmXCJpdGVtc1wiPT09YXJndW1lbnRzWzFdP3RoaXMuY29udHJvbGdyb3VwLmFwcGx5KHRoaXMsW2FyZ3VtZW50c1swXSxcIml0ZW1zLmJ1dHRvblwiXSk6KFwib2JqZWN0XCI9PXR5cGVvZiBhcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXS5pdGVtcyYmKGFyZ3VtZW50c1swXS5pdGVtcz17YnV0dG9uOmFyZ3VtZW50c1swXS5pdGVtc30pLHRoaXMuY29udHJvbGdyb3VwLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9KSx0LnVpLmJ1dHRvbix0LmV4dGVuZCh0LnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOlwiMS4xMi4xXCJ9fSksdC5leHRlbmQoZS5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZTpcImhhc0RhdGVwaWNrZXJcIixtYXhSb3dzOjQsX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24odCl7cmV0dXJuIHModGhpcy5fZGVmYXVsdHMsdHx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvO3M9XCJkaXZcIj09PShuPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl8fFwic3BhblwiPT09bixlLmlkfHwodGhpcy51dWlkKz0xLGUuaWQ9XCJkcFwiK3RoaXMudXVpZCksKG89dGhpcy5fbmV3SW5zdCh0KGUpLHMpKS5zZXR0aW5ncz10LmV4dGVuZCh7fSxpfHx7fSksXCJpbnB1dFwiPT09bj90aGlzLl9jb25uZWN0RGF0ZXBpY2tlcihlLG8pOnMmJnRoaXMuX2lubGluZURhdGVwaWNrZXIoZSxvKX0sX25ld0luc3Q6ZnVuY3Rpb24oZSxuKXtyZXR1cm57aWQ6ZVswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfXFwtXSkvZyxcIlxcXFxcXFxcJDFcIiksaW5wdXQ6ZSxzZWxlY3RlZERheTowLHNlbGVjdGVkTW9udGg6MCxzZWxlY3RlZFllYXI6MCxkcmF3TW9udGg6MCxkcmF3WWVhcjowLGlubGluZTpuLGRwRGl2Om4/aSh0KFwiPGRpdiBjbGFzcz0nXCIrdGhpcy5faW5saW5lQ2xhc3MrXCIgdWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PlwiKSk6dGhpcy5kcERpdn19LF9jb25uZWN0RGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkpe3ZhciBuPXQoZSk7aS5hcHBlbmQ9dChbXSksaS50cmlnZ2VyPXQoW10pLG4uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwodGhpcy5fYXR0YWNobWVudHMobixpKSxuLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5vbihcImtleWRvd25cIix0aGlzLl9kb0tleURvd24pLm9uKFwia2V5cHJlc3NcIix0aGlzLl9kb0tleVByZXNzKS5vbihcImtleXVwXCIsdGhpcy5fZG9LZXlVcCksdGhpcy5fYXV0b1NpemUoaSksdC5kYXRhKGUsXCJkYXRlcGlja2VyXCIsaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSkpfSxfYXR0YWNobWVudHM6ZnVuY3Rpb24oZSxpKXt2YXIgbixzLG8sYT10aGlzLl9nZXQoaSxcImFwcGVuZFRleHRcIikscj10aGlzLl9nZXQoaSxcImlzUlRMXCIpO2kuYXBwZW5kJiZpLmFwcGVuZC5yZW1vdmUoKSxhJiYoaS5hcHBlbmQ9dChcIjxzcGFuIGNsYXNzPSdcIit0aGlzLl9hcHBlbmRDbGFzcytcIic+XCIrYStcIjwvc3Bhbj5cIiksZVtyP1wiYmVmb3JlXCI6XCJhZnRlclwiXShpLmFwcGVuZCkpLGUub2ZmKFwiZm9jdXNcIix0aGlzLl9zaG93RGF0ZXBpY2tlciksaS50cmlnZ2VyJiZpLnRyaWdnZXIucmVtb3ZlKCksXCJmb2N1c1wiIT09KG49dGhpcy5fZ2V0KGksXCJzaG93T25cIikpJiZcImJvdGhcIiE9PW58fGUub24oXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxcImJ1dHRvblwiIT09biYmXCJib3RoXCIhPT1ufHwocz10aGlzLl9nZXQoaSxcImJ1dHRvblRleHRcIiksbz10aGlzLl9nZXQoaSxcImJ1dHRvbkltYWdlXCIpLGkudHJpZ2dlcj10KHRoaXMuX2dldChpLFwiYnV0dG9uSW1hZ2VPbmx5XCIpP3QoXCI8aW1nLz5cIikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHtzcmM6byxhbHQ6cyx0aXRsZTpzfSk6dChcIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj5cIikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5odG1sKG8/dChcIjxpbWcvPlwiKS5hdHRyKHtzcmM6byxhbHQ6cyx0aXRsZTpzfSk6cykpLGVbcj9cImJlZm9yZVwiOlwiYWZ0ZXJcIl0oaS50cmlnZ2VyKSxpLnRyaWdnZXIub24oXCJjbGlja1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09ZVswXT90LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6dC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT1lWzBdPyh0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksdC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihlWzBdKSk6dC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihlWzBdKSwhMX0pKX0sX2F1dG9TaXplOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2dldCh0LFwiYXV0b1NpemVcIikmJiF0LmlubGluZSl7dmFyIGUsaSxuLHMsbz1uZXcgRGF0ZSgyMDA5LDExLDIwKSxhPXRoaXMuX2dldCh0LFwiZGF0ZUZvcm1hdFwiKTthLm1hdGNoKC9bRE1dLykmJihlPWZ1bmN0aW9uKHQpe2ZvcihpPTAsbj0wLHM9MDtzPHQubGVuZ3RoO3MrKyl0W3NdLmxlbmd0aD5pJiYoaT10W3NdLmxlbmd0aCxuPXMpO3JldHVybiBufSxvLnNldE1vbnRoKGUodGhpcy5fZ2V0KHQsYS5tYXRjaCgvTU0vKT9cIm1vbnRoTmFtZXNcIjpcIm1vbnRoTmFtZXNTaG9ydFwiKSkpLG8uc2V0RGF0ZShlKHRoaXMuX2dldCh0LGEubWF0Y2goL0RELyk/XCJkYXlOYW1lc1wiOlwiZGF5TmFtZXNTaG9ydFwiKSkrMjAtby5nZXREYXkoKSkpLHQuaW5wdXQuYXR0cihcInNpemVcIix0aGlzLl9mb3JtYXREYXRlKHQsbykubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIG49dChlKTtuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KG4uYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmFwcGVuZChpLmRwRGl2KSx0LmRhdGEoZSxcImRhdGVwaWNrZXJcIixpKSx0aGlzLl9zZXREYXRlKGksdGhpcy5fZ2V0RGVmYXVsdERhdGUoaSksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpLGkuZHBEaXYuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihlLGksbixvLGEpe3ZhciByLGwsaCxjLHUsZD10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBkfHwodGhpcy51dWlkKz0xLHI9XCJkcFwiK3RoaXMudXVpZCx0aGlzLl9kaWFsb2dJbnB1dD10KFwiPGlucHV0IHR5cGU9J3RleHQnIGlkPSdcIityK1wiJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsnLz5cIiksdGhpcy5fZGlhbG9nSW5wdXQub24oXCJrZXlkb3duXCIsdGhpcy5fZG9LZXlEb3duKSx0KFwiYm9keVwiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLChkPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSkpLnNldHRpbmdzPXt9LHQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxcImRhdGVwaWNrZXJcIixkKSkscyhkLnNldHRpbmdzLG98fHt9KSxpPWkmJmkuY29uc3RydWN0b3I9PT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUoZCxpKTppLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChpKSx0aGlzLl9wb3M9YT9hLmxlbmd0aD9hOlthLnBhZ2VYLGEucGFnZVldOm51bGwsdGhpcy5fcG9zfHwobD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGM9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLHRoaXMuX3Bvcz1bbC8yLTEwMCtjLGgvMi0xNTArdV0pLHRoaXMuX2RpYWxvZ0lucHV0LmNzcyhcImxlZnRcIix0aGlzLl9wb3NbMF0rMjArXCJweFwiKS5jc3MoXCJ0b3BcIix0aGlzLl9wb3NbMV0rXCJweFwiKSxkLnNldHRpbmdzLm9uU2VsZWN0PW4sdGhpcy5faW5EaWFsb2c9ITAsdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pLHQuYmxvY2tVSSYmdC5ibG9ja1VJKHRoaXMuZHBEaXYpLHQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxcImRhdGVwaWNrZXJcIixkKSx0aGlzfSxfZGVzdHJveURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGksbj10KGUpLHM9dC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksdC5yZW1vdmVEYXRhKGUsXCJkYXRlcGlja2VyXCIpLFwiaW5wdXRcIj09PWk/KHMuYXBwZW5kLnJlbW92ZSgpLHMudHJpZ2dlci5yZW1vdmUoKSxuLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5vZmYoXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKS5vZmYoXCJrZXlkb3duXCIsdGhpcy5fZG9LZXlEb3duKS5vZmYoXCJrZXlwcmVzc1wiLHRoaXMuX2RvS2V5UHJlc3MpLm9mZihcImtleXVwXCIsdGhpcy5fZG9LZXlVcCkpOlwiZGl2XCIhPT1pJiZcInNwYW5cIiE9PWl8fG4ucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCksYz09PXMmJihjPW51bGwpKX0sX2VuYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGksbixzPXQoZSksbz10LmRhdGEoZSxcImRhdGVwaWNrZXJcIik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihcImlucHV0XCI9PT0oaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpPyhlLmRpc2FibGVkPSExLG8udHJpZ2dlci5maWx0ZXIoXCJidXR0b25cIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoXCJpbWdcIikuY3NzKHtvcGFjaXR5OlwiMS4wXCIsY3Vyc29yOlwiXCJ9KSk6XCJkaXZcIiE9PWkmJlwic3BhblwiIT09aXx8KChuPXMuY2hpbGRyZW4oXCIuXCIrdGhpcy5faW5saW5lQ2xhc3MpKS5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIiksbi5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJcIikucHJvcChcImRpc2FibGVkXCIsITEpKSx0aGlzLl9kaXNhYmxlZElucHV0cz10Lm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09PWU/bnVsbDp0fSkpfSxfZGlzYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGksbixzPXQoZSksbz10LmRhdGEoZSxcImRhdGVwaWNrZXJcIik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihcImlucHV0XCI9PT0oaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpPyhlLmRpc2FibGVkPSEwLG8udHJpZ2dlci5maWx0ZXIoXCJidXR0b25cIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoXCJpbWdcIikuY3NzKHtvcGFjaXR5OlwiMC41XCIsY3Vyc29yOlwiZGVmYXVsdFwifSkpOlwiZGl2XCIhPT1pJiZcInNwYW5cIiE9PWl8fCgobj1zLmNoaWxkcmVuKFwiLlwiK3RoaXMuX2lubGluZUNsYXNzKSkuY2hpbGRyZW4oKS5hZGRDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpLG4uZmluZChcInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyXCIpLnByb3AoXCJkaXNhYmxlZFwiLCEwKSksdGhpcy5fZGlzYWJsZWRJbnB1dHM9dC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lP251bGw6dH0pLHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aF09ZSl9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXtpZighdClyZXR1cm4hMTtmb3IodmFyIGU9MDtlPHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aDtlKyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbZV09PT10KXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbihlKXt0cnl7cmV0dXJuIHQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKX1jYXRjaCh0KXt0aHJvd1wiTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXJcIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSxuKXt2YXIgbyxhLHIsbCxoPXRoaXMuX2dldEluc3QoZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgmJlwic3RyaW5nXCI9PXR5cGVvZiBpKXJldHVyblwiZGVmYXVsdHNcIj09PWk/dC5leHRlbmQoe30sdC5kYXRlcGlja2VyLl9kZWZhdWx0cyk6aD9cImFsbFwiPT09aT90LmV4dGVuZCh7fSxoLnNldHRpbmdzKTp0aGlzLl9nZXQoaCxpKTpudWxsO289aXx8e30sXCJzdHJpbmdcIj09dHlwZW9mIGkmJigobz17fSlbaV09biksaCYmKHRoaXMuX2N1ckluc3Q9PT1oJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLGE9dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIoZSwhMCkscj10aGlzLl9nZXRNaW5NYXhEYXRlKGgsXCJtaW5cIiksbD10aGlzLl9nZXRNaW5NYXhEYXRlKGgsXCJtYXhcIikscyhoLnNldHRpbmdzLG8pLG51bGwhPT1yJiZ2b2lkIDAhPT1vLmRhdGVGb3JtYXQmJnZvaWQgMD09PW8ubWluRGF0ZSYmKGguc2V0dGluZ3MubWluRGF0ZT10aGlzLl9mb3JtYXREYXRlKGgscikpLG51bGwhPT1sJiZ2b2lkIDAhPT1vLmRhdGVGb3JtYXQmJnZvaWQgMD09PW8ubWF4RGF0ZSYmKGguc2V0dGluZ3MubWF4RGF0ZT10aGlzLl9mb3JtYXREYXRlKGgsbCkpLFwiZGlzYWJsZWRcImluIG8mJihvLmRpc2FibGVkP3RoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpOnRoaXMuX2VuYWJsZURhdGVwaWNrZXIoZSkpLHRoaXMuX2F0dGFjaG1lbnRzKHQoZSksaCksdGhpcy5fYXV0b1NpemUoaCksdGhpcy5fc2V0RGF0ZShoLGEpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShoKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGgpKX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxlLGkpe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIodCxlLGkpfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SW5zdCh0KTtlJiZ0aGlzLl91cGRhdGVEYXRlcGlja2VyKGUpfSxfc2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRJbnN0KHQpO2kmJih0aGlzLl9zZXREYXRlKGksZSksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSkpfSxfZ2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRJbnN0KHQpO3JldHVybiBpJiYhaS5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQoaSxlKSxpP3RoaXMuX2dldERhdGUoaSk6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbz10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpLGE9ITAscj1vLmRwRGl2LmlzKFwiLnVpLWRhdGVwaWNrZXItcnRsXCIpO2lmKG8uX2tleUV2ZW50PSEwLHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA5OnQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxhPSExO2JyZWFrO2Nhc2UgMTM6cmV0dXJuKHM9dChcInRkLlwiK3QuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzK1wiOm5vdCguXCIrdC5kYXRlcGlja2VyLl9jdXJyZW50Q2xhc3MrXCIpXCIsby5kcERpdikpWzBdJiZ0LmRhdGVwaWNrZXIuX3NlbGVjdERheShlLnRhcmdldCxvLnNlbGVjdGVkTW9udGgsby5zZWxlY3RlZFllYXIsc1swXSksKGk9dC5kYXRlcGlja2VyLl9nZXQobyxcIm9uU2VsZWN0XCIpKT8obj10LmRhdGVwaWNrZXIuX2Zvcm1hdERhdGUobyksaS5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbbixvXSkpOnQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSwhMTtjYXNlIDI3OnQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTticmVhaztjYXNlIDMzOnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/LXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwQmlnTW9udGhzXCIpOi10LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzNDp0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Pyt0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTordC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzU6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9jbGVhckRhdGUoZS50YXJnZXQpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNjooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2dvdG9Ub2RheShlLnRhcmdldCksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM3OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPzE6LTEsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXksXG5lLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTotdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/LTE6MSxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Pyt0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTordC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgNDA6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LDcsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDphPSExfWVsc2UgMzY9PT1lLmtleUNvZGUmJmUuY3RybEtleT90LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOmE9ITE7YSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dmFyIGksbixzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYodC5kYXRlcGlja2VyLl9nZXQocyxcImNvbnN0cmFpbklucHV0XCIpKXJldHVybiBpPXQuZGF0ZXBpY2tlci5fcG9zc2libGVDaGFycyh0LmRhdGVwaWNrZXIuX2dldChzLFwiZGF0ZUZvcm1hdFwiKSksbj1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWUuY2hhckNvZGU/ZS5rZXlDb2RlOmUuY2hhckNvZGUpLGUuY3RybEtleXx8ZS5tZXRhS2V5fHxuPFwiIFwifHwhaXx8aS5pbmRleE9mKG4pPi0xfSxfZG9LZXlVcDpmdW5jdGlvbihlKXt2YXIgaT10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKGkuaW5wdXQudmFsKCkhPT1pLmxhc3RWYWwpdHJ5e3QuZGF0ZXBpY2tlci5wYXJzZURhdGUodC5kYXRlcGlja2VyLl9nZXQoaSxcImRhdGVGb3JtYXRcIiksaS5pbnB1dD9pLmlucHV0LnZhbCgpOm51bGwsdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoaSkpJiYodC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGkpLHQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKGkpLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSl9Y2F0Y2godCl7fXJldHVybiEwfSxfc2hvd0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIGksbixvLGEscixsLGg7XCJpbnB1dFwiIT09KGU9ZS50YXJnZXR8fGUpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihlPXQoXCJpbnB1dFwiLGUucGFyZW50Tm9kZSlbMF0pLHQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoZSl8fHQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT09ZXx8KGk9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGUpLHQuZGF0ZXBpY2tlci5fY3VySW5zdCYmdC5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKHQuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLCExIT09KG89KG49dC5kYXRlcGlja2VyLl9nZXQoaSxcImJlZm9yZVNob3dcIikpP24uYXBwbHkoZSxbZSxpXSk6e30pJiYocyhpLnNldHRpbmdzLG8pLGkubGFzdFZhbD1udWxsLHQuZGF0ZXBpY2tlci5fbGFzdElucHV0PWUsdC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKGkpLHQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJihlLnZhbHVlPVwiXCIpLHQuZGF0ZXBpY2tlci5fcG9zfHwodC5kYXRlcGlja2VyLl9wb3M9dC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLHQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCksYT0hMSx0KGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIShhfD1cImZpeGVkXCI9PT10KHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpKX0pLHI9e2xlZnQ6dC5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOnQuZGF0ZXBpY2tlci5fcG9zWzFdfSx0LmRhdGVwaWNrZXIuX3Bvcz1udWxsLGkuZHBEaXYuZW1wdHkoKSxpLmRwRGl2LmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGRpc3BsYXk6XCJibG9ja1wiLHRvcDpcIi0xMDAwcHhcIn0pLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSxyPXQuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQoaSxyLGEpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjp0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiZ0LmJsb2NrVUk/XCJzdGF0aWNcIjphP1wiZml4ZWRcIjpcImFic29sdXRlXCIsZGlzcGxheTpcIm5vbmVcIixsZWZ0OnIubGVmdCtcInB4XCIsdG9wOnIudG9wK1wicHhcIn0pLGkuaW5saW5lfHwobD10LmRhdGVwaWNrZXIuX2dldChpLFwic2hvd0FuaW1cIiksaD10LmRhdGVwaWNrZXIuX2dldChpLFwiZHVyYXRpb25cIiksaS5kcERpdi5jc3MoXCJ6LWluZGV4XCIsZnVuY3Rpb24odCl7Zm9yKHZhciBlLGk7dC5sZW5ndGgmJnRbMF0hPT1kb2N1bWVudDspe2lmKChcImFic29sdXRlXCI9PT0oZT10LmNzcyhcInBvc2l0aW9uXCIpKXx8XCJyZWxhdGl2ZVwiPT09ZXx8XCJmaXhlZFwiPT09ZSkmJihpPXBhcnNlSW50KHQuY3NzKFwiekluZGV4XCIpLDEwKSwhaXNOYU4oaSkmJjAhPT1pKSlyZXR1cm4gaTt0PXQucGFyZW50KCl9cmV0dXJuIDB9KHQoZSkpKzEpLHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsdC5lZmZlY3RzJiZ0LmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLHQuZGF0ZXBpY2tlci5fZ2V0KGksXCJzaG93T3B0aW9uc1wiKSxoKTppLmRwRGl2W2x8fFwic2hvd1wiXShsP2g6bnVsbCksdC5kYXRlcGlja2VyLl9zaG91bGRGb2N1c0lucHV0KGkpJiZpLmlucHV0LnRyaWdnZXIoXCJmb2N1c1wiKSx0LmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpKX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQsYz1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG89c1sxXSxhPWUuZHBEaXYuZmluZChcIi5cIit0aGlzLl9kYXlPdmVyQ2xhc3MrXCIgYVwiKTthLmxlbmd0aD4wJiZuLmFwcGx5KGEuZ2V0KDApKSxlLmRwRGl2LnJlbW92ZUNsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTRcIikud2lkdGgoXCJcIiksbz4xJiZlLmRwRGl2LmFkZENsYXNzKFwidWktZGF0ZXBpY2tlci1tdWx0aS1cIitvKS5jc3MoXCJ3aWR0aFwiLDE3Km8rXCJlbVwiKSxlLmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/XCJhZGRcIjpcInJlbW92ZVwiKStcIkNsYXNzXCJdKFwidWktZGF0ZXBpY2tlci1tdWx0aVwiKSxlLmRwRGl2Wyh0aGlzLl9nZXQoZSxcImlzUlRMXCIpP1wiYWRkXCI6XCJyZW1vdmVcIikrXCJDbGFzc1wiXShcInVpLWRhdGVwaWNrZXItcnRsXCIpLGU9PT10LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChlKSYmZS5pbnB1dC50cmlnZ2VyKFwiZm9jdXNcIiksZS55ZWFyc2h0bWwmJihpPWUueWVhcnNodG1sLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpPT09ZS55ZWFyc2h0bWwmJmUueWVhcnNodG1sJiZlLmRwRGl2LmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0XCIpLnJlcGxhY2VXaXRoKGUueWVhcnNodG1sKSxpPWUueWVhcnNodG1sPW51bGx9LDApKX0sX3Nob3VsZEZvY3VzSW5wdXQ6ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW5wdXQmJnQuaW5wdXQuaXMoXCI6dmlzaWJsZVwiKSYmIXQuaW5wdXQuaXMoXCI6ZGlzYWJsZWRcIikmJiF0LmlucHV0LmlzKFwiOmZvY3VzXCIpfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPWUuZHBEaXYub3V0ZXJXaWR0aCgpLG89ZS5kcERpdi5vdXRlckhlaWdodCgpLGE9ZS5pbnB1dD9lLmlucHV0Lm91dGVyV2lkdGgoKTowLHI9ZS5pbnB1dD9lLmlucHV0Lm91dGVySGVpZ2h0KCk6MCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsobj8wOnQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhuPzA6dChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiBpLmxlZnQtPXRoaXMuX2dldChlLFwiaXNSVExcIik/cy1hOjAsaS5sZWZ0LT1uJiZpLmxlZnQ9PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPW4mJmkudG9wPT09ZS5pbnB1dC5vZmZzZXQoKS50b3Arcj90KGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtzPmwmJmw+cz9NYXRoLmFicyhpLmxlZnQrcy1sKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3Arbz5oJiZoPm8/TWF0aC5hYnMobytyKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbihlKXtmb3IodmFyIGksbj10aGlzLl9nZXRJbnN0KGUpLHM9dGhpcy5fZ2V0KG4sXCJpc1JUTFwiKTtlJiYoXCJoaWRkZW5cIj09PWUudHlwZXx8MSE9PWUubm9kZVR5cGV8fHQuZXhwci5maWx0ZXJzLmhpZGRlbihlKSk7KWU9ZVtzP1wicHJldmlvdXNTaWJsaW5nXCI6XCJuZXh0U2libGluZ1wiXTtyZXR1cm5bKGk9dChlKS5vZmZzZXQoKSkubGVmdCxpLnRvcF19LF9oaWRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbyxhPXRoaXMuX2N1ckluc3Q7IWF8fGUmJmEhPT10LmRhdGEoZSxcImRhdGVwaWNrZXJcIil8fHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nJiYoaT10aGlzLl9nZXQoYSxcInNob3dBbmltXCIpLG49dGhpcy5fZ2V0KGEsXCJkdXJhdGlvblwiKSxzPWZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKGEpfSx0LmVmZmVjdHMmJih0LmVmZmVjdHMuZWZmZWN0W2ldfHx0LmVmZmVjdHNbaV0pP2EuZHBEaXYuaGlkZShpLHQuZGF0ZXBpY2tlci5fZ2V0KGEsXCJzaG93T3B0aW9uc1wiKSxuLHMpOmEuZHBEaXZbXCJzbGlkZURvd25cIj09PWk/XCJzbGlkZVVwXCI6XCJmYWRlSW5cIj09PWk/XCJmYWRlT3V0XCI6XCJoaWRlXCJdKGk/bjpudWxsLHMpLGl8fHMoKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSwobz10aGlzLl9nZXQoYSxcIm9uQ2xvc2VcIikpJiZvLmFwcGx5KGEuaW5wdXQ/YS5pbnB1dFswXTpudWxsLFthLmlucHV0P2EuaW5wdXQudmFsKCk6XCJcIixhXSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixsZWZ0OlwiMFwiLHRvcDpcIi0xMDBweFwifSksdC5ibG9ja1VJJiYodC51bmJsb2NrVUkoKSx0KFwiYm9keVwiKS5hcHBlbmQodGhpcy5kcERpdikpKSx0aGlzLl9pbkRpYWxvZz0hMSl9LF90aWR5RGlhbG9nOmZ1bmN0aW9uKHQpe3QuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLm9mZihcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKGUpe2lmKHQuZGF0ZXBpY2tlci5fY3VySW5zdCl7dmFyIGk9dChlLnRhcmdldCksbj10LmRhdGVwaWNrZXIuX2dldEluc3QoaVswXSk7KGlbMF0uaWQ9PT10LmRhdGVwaWNrZXIuX21haW5EaXZJZHx8MCE9PWkucGFyZW50cyhcIiNcIit0LmRhdGVwaWNrZXIuX21haW5EaXZJZCkubGVuZ3RofHxpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpfHxpLmNsb3Nlc3QoXCIuXCIrdC5kYXRlcGlja2VyLl90cmlnZ2VyQ2xhc3MpLmxlbmd0aHx8IXQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmd8fHQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJnQuYmxvY2tVSSkmJighaS5oYXNDbGFzcyh0LmRhdGVwaWNrZXIubWFya2VyQ2xhc3NOYW1lKXx8dC5kYXRlcGlja2VyLl9jdXJJbnN0PT09bil8fHQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX19LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcz10KGUpLG89dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihzWzBdKXx8KHRoaXMuX2FkanVzdEluc3REYXRlKG8saSsoXCJNXCI9PT1uP3RoaXMuX2dldChvLFwic2hvd0N1cnJlbnRBdFBvc1wiKTowKSxuKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKG8pKX0sX2dvdG9Ub2RheTpmdW5jdGlvbihlKXt2YXIgaSxuPXQoZSkscz10aGlzLl9nZXRJbnN0KG5bMF0pO3RoaXMuX2dldChzLFwiZ290b0N1cnJlbnRcIikmJnMuY3VycmVudERheT8ocy5zZWxlY3RlZERheT1zLmN1cnJlbnREYXkscy5kcmF3TW9udGg9cy5zZWxlY3RlZE1vbnRoPXMuY3VycmVudE1vbnRoLHMuZHJhd1llYXI9cy5zZWxlY3RlZFllYXI9cy5jdXJyZW50WWVhcik6KGk9bmV3IERhdGUscy5zZWxlY3RlZERheT1pLmdldERhdGUoKSxzLmRyYXdNb250aD1zLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLHMuZHJhd1llYXI9cy5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpKSx0aGlzLl9ub3RpZnlDaGFuZ2UocyksdGhpcy5fYWRqdXN0RGF0ZShuKX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbihlLGksbil7dmFyIHM9dChlKSxvPXRoaXMuX2dldEluc3Qoc1swXSk7b1tcInNlbGVjdGVkXCIrKFwiTVwiPT09bj9cIk1vbnRoXCI6XCJZZWFyXCIpXT1vW1wiZHJhd1wiKyhcIk1cIj09PW4/XCJNb250aFwiOlwiWWVhclwiKV09cGFyc2VJbnQoaS5vcHRpb25zW2kuc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShvKSx0aGlzLl9hZGp1c3REYXRlKHMpfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKGUsaSxuLHMpe3ZhciBvLGE9dChlKTt0KHMpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoYVswXSl8fCgobz10aGlzLl9nZXRJbnN0KGFbMF0pKS5zZWxlY3RlZERheT1vLmN1cnJlbnREYXk9dChcImFcIixzKS5odG1sKCksby5zZWxlY3RlZE1vbnRoPW8uY3VycmVudE1vbnRoPWksby5zZWxlY3RlZFllYXI9by5jdXJyZW50WWVhcj1uLHRoaXMuX3NlbGVjdERhdGUoZSx0aGlzLl9mb3JtYXREYXRlKG8sby5jdXJyZW50RGF5LG8uY3VycmVudE1vbnRoLG8uY3VycmVudFllYXIpKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dChlKTt0aGlzLl9zZWxlY3REYXRlKGksXCJcIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGUsaSl7dmFyIG4scz10KGUpLG89dGhpcy5fZ2V0SW5zdChzWzBdKTtpPW51bGwhPWk/aTp0aGlzLl9mb3JtYXREYXRlKG8pLG8uaW5wdXQmJm8uaW5wdXQudmFsKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShvKSwobj10aGlzLl9nZXQobyxcIm9uU2VsZWN0XCIpKT9uLmFwcGx5KG8uaW5wdXQ/by5pbnB1dFswXTpudWxsLFtpLG9dKTpvLmlucHV0JiZvLmlucHV0LnRyaWdnZXIoXCJjaGFuZ2VcIiksby5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihvKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9by5pbnB1dFswXSxcIm9iamVjdFwiIT10eXBlb2Ygby5pbnB1dFswXSYmby5pbnB1dC50cmlnZ2VyKFwiZm9jdXNcIiksdGhpcy5fbGFzdElucHV0PW51bGwpfSxfdXBkYXRlQWx0ZXJuYXRlOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvPXRoaXMuX2dldChlLFwiYWx0RmllbGRcIik7byYmKGk9dGhpcy5fZ2V0KGUsXCJhbHRGb3JtYXRcIil8fHRoaXMuX2dldChlLFwiZGF0ZUZvcm1hdFwiKSxuPXRoaXMuX2dldERhdGUoZSkscz10aGlzLmZvcm1hdERhdGUoaSxuLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSksdChvKS52YWwocykpfSxub1dlZWtlbmRzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuW2U+MCYmZTw2LFwiXCJdfSxpc284NjAxV2VlazpmdW5jdGlvbih0KXt2YXIgZSxpPW5ldyBEYXRlKHQuZ2V0VGltZSgpKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpKzQtKGkuZ2V0RGF5KCl8fDcpKSxlPWkuZ2V0VGltZSgpLGkuc2V0TW9udGgoMCksaS5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgoZS1pKS84NjRlNSkvNykrMX0scGFyc2VEYXRlOmZ1bmN0aW9uKGUsaSxuKXtpZihudWxsPT1lfHxudWxsPT1pKXRocm93XCJJbnZhbGlkIGFyZ3VtZW50c1wiO2lmKFwiXCI9PT0oaT1cIm9iamVjdFwiPT10eXBlb2YgaT9pLnRvU3RyaW5nKCk6aStcIlwiKSlyZXR1cm4gbnVsbDt2YXIgcyxvLGEscixsPTAsaD0obj9uLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmLGM9XCJzdHJpbmdcIiE9dHlwZW9mIGg/aDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGgsMTApLHU9KG4/bi5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LGQ9KG4/bi5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMscD0obj9uLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LGY9KG4/bi5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLGc9LTEsbT0tMSx2PS0xLGI9LTEsXz0hMSx5PWZ1bmN0aW9uKHQpe3ZhciBpPXMrMTxlLmxlbmd0aCYmZS5jaGFyQXQocysxKT09PXQ7cmV0dXJuIGkmJnMrKyxpfSx3PWZ1bmN0aW9uKHQpe3ZhciBlPXkodCksbj1cIkBcIj09PXQ/MTQ6XCIhXCI9PT10PzIwOlwieVwiPT09dCYmZT80Olwib1wiPT09dD8zOjIscz1uZXcgUmVnRXhwKFwiXlxcXFxke1wiKyhcInlcIj09PXQ/bjoxKStcIixcIituK1wifVwiKSxvPWkuc3Vic3RyaW5nKGwpLm1hdGNoKHMpO2lmKCFvKXRocm93XCJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiBcIitsO3JldHVybiBsKz1vWzBdLmxlbmd0aCxwYXJzZUludChvWzBdLDEwKX0seD1mdW5jdGlvbihlLG4scyl7dmFyIG89LTEsYT10Lm1hcCh5KGUpP3M6bixmdW5jdGlvbih0LGUpe3JldHVybltbZSx0XV19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuLSh0WzFdLmxlbmd0aC1lWzFdLmxlbmd0aCl9KTtpZih0LmVhY2goYSxmdW5jdGlvbih0LGUpe3ZhciBuPWVbMV07aWYoaS5zdWJzdHIobCxuLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbz1lWzBdLGwrPW4ubGVuZ3RoLCExfSksLTEhPT1vKXJldHVybiBvKzE7dGhyb3dcIlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiBcIitsfSxDPWZ1bmN0aW9uKCl7aWYoaS5jaGFyQXQobCkhPT1lLmNoYXJBdChzKSl0aHJvd1wiVW5leHBlY3RlZCBsaXRlcmFsIGF0IHBvc2l0aW9uIFwiK2w7bCsrfTtmb3Iocz0wO3M8ZS5sZW5ndGg7cysrKWlmKF8pXCInXCIhPT1lLmNoYXJBdChzKXx8eShcIidcIik/QygpOl89ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQocykpe2Nhc2VcImRcIjp2PXcoXCJkXCIpO2JyZWFrO2Nhc2VcIkRcIjp4KFwiRFwiLHUsZCk7YnJlYWs7Y2FzZVwib1wiOmI9dyhcIm9cIik7YnJlYWs7Y2FzZVwibVwiOm09dyhcIm1cIik7YnJlYWs7Y2FzZVwiTVwiOm09eChcIk1cIixwLGYpO2JyZWFrO2Nhc2VcInlcIjpnPXcoXCJ5XCIpO2JyZWFrO2Nhc2VcIkBcIjpnPShyPW5ldyBEYXRlKHcoXCJAXCIpKSkuZ2V0RnVsbFllYXIoKSxtPXIuZ2V0TW9udGgoKSsxLHY9ci5nZXREYXRlKCk7YnJlYWs7Y2FzZVwiIVwiOmc9KHI9bmV3IERhdGUoKHcoXCIhXCIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpKS5nZXRGdWxsWWVhcigpLG09ci5nZXRNb250aCgpKzEsdj1yLmdldERhdGUoKTticmVhaztjYXNlXCInXCI6eShcIidcIik/QygpOl89ITA7YnJlYWs7ZGVmYXVsdDpDKCl9aWYobDxpLmxlbmd0aCYmKGE9aS5zdWJzdHIobCksIS9eXFxzKy8udGVzdChhKSkpdGhyb3dcIkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogXCIrYTtpZigtMT09PWc/Zz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6ZzwxMDAmJihnKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsoZzw9Yz8wOi0xMDApKSxiPi0xKWZvcihtPTEsdj1iOyEodjw9KG89dGhpcy5fZ2V0RGF5c0luTW9udGgoZyxtLTEpKSk7KW0rKyx2LT1vO2lmKChyPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGcsbS0xLHYpKSkuZ2V0RnVsbFllYXIoKSE9PWd8fHIuZ2V0TW9udGgoKSsxIT09bXx8ci5nZXREYXRlKCkhPT12KXRocm93XCJJbnZhbGlkIGRhdGVcIjtyZXR1cm4gcn0sQVRPTTpcInl5LW1tLWRkXCIsQ09PS0lFOlwiRCwgZGQgTSB5eVwiLElTT184NjAxOlwieXktbW0tZGRcIixSRkNfODIyOlwiRCwgZCBNIHlcIixSRkNfODUwOlwiREQsIGRkLU0teVwiLFJGQ18xMDM2OlwiRCwgZCBNIHlcIixSRkNfMTEyMzpcIkQsIGQgTSB5eVwiLFJGQ18yODIyOlwiRCwgZCBNIHl5XCIsUlNTOlwiRCwgZCBNIHlcIixUSUNLUzpcIiFcIixUSU1FU1RBTVA6XCJAXCIsVzNDOlwieXktbW0tZGRcIixfdGlja3NUbzE5NzA6MjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSo2MCo2MCoxZTcsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUsaSl7aWYoIWUpcmV0dXJuXCJcIjt2YXIgbixzPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxvPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGE9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxyPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxsPWZ1bmN0aW9uKGUpe3ZhciBpPW4rMTx0Lmxlbmd0aCYmdC5jaGFyQXQobisxKT09PWU7cmV0dXJuIGkmJm4rKyxpfSxoPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbj1cIlwiK2U7aWYobCh0KSlmb3IoO24ubGVuZ3RoPGk7KW49XCIwXCIrbjtyZXR1cm4gbn0sYz1mdW5jdGlvbih0LGUsaSxuKXtyZXR1cm4gbCh0KT9uW2VdOmlbZV19LHU9XCJcIixkPSExO2lmKGUpZm9yKG49MDtuPHQubGVuZ3RoO24rKylpZihkKVwiJ1wiIT09dC5jaGFyQXQobil8fGwoXCInXCIpP3UrPXQuY2hhckF0KG4pOmQ9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQobikpe2Nhc2VcImRcIjp1Kz1oKFwiZFwiLGUuZ2V0RGF0ZSgpLDIpO2JyZWFrO2Nhc2VcIkRcIjp1Kz1jKFwiRFwiLGUuZ2V0RGF5KCkscyxvKTticmVhaztjYXNlXCJvXCI6dSs9aChcIm9cIixNYXRoLnJvdW5kKChuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKS5nZXRUaW1lKCktbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMCkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZVwibVwiOnUrPWgoXCJtXCIsZS5nZXRNb250aCgpKzEsMik7YnJlYWs7Y2FzZVwiTVwiOnUrPWMoXCJNXCIsZS5nZXRNb250aCgpLGEscik7YnJlYWs7Y2FzZVwieVwiOnUrPWwoXCJ5XCIpP2UuZ2V0RnVsbFllYXIoKTooZS5nZXRGdWxsWWVhcigpJTEwMDwxMD9cIjBcIjpcIlwiKStlLmdldEZ1bGxZZWFyKCklMTAwO2JyZWFrO2Nhc2VcIkBcIjp1Kz1lLmdldFRpbWUoKTticmVhaztjYXNlXCIhXCI6dSs9MWU0KmUuZ2V0VGltZSgpK3RoaXMuX3RpY2tzVG8xOTcwO2JyZWFrO2Nhc2VcIidcIjpsKFwiJ1wiKT91Kz1cIidcIjpkPSEwO2JyZWFrO2RlZmF1bHQ6dSs9dC5jaGFyQXQobil9cmV0dXJuIHV9LF9wb3NzaWJsZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlLGk9XCJcIixuPSExLHM9ZnVuY3Rpb24oaSl7dmFyIG49ZSsxPHQubGVuZ3RoJiZ0LmNoYXJBdChlKzEpPT09aTtyZXR1cm4gbiYmZSsrLG59O2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspaWYobilcIidcIiE9PXQuY2hhckF0KGUpfHxzKFwiJ1wiKT9pKz10LmNoYXJBdChlKTpuPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KGUpKXtjYXNlXCJkXCI6Y2FzZVwibVwiOmNhc2VcInlcIjpjYXNlXCJAXCI6aSs9XCIwMTIzNDU2Nzg5XCI7YnJlYWs7Y2FzZVwiRFwiOmNhc2VcIk1cIjpyZXR1cm4gbnVsbDtjYXNlXCInXCI6cyhcIidcIik/aSs9XCInXCI6bj0hMDticmVhaztkZWZhdWx0OmkrPXQuY2hhckF0KGUpfXJldHVybiBpfSxfZ2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuc2V0dGluZ3NbZV0/dC5zZXR0aW5nc1tlXTp0aGlzLl9kZWZhdWx0c1tlXX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24odCxlKXtpZih0LmlucHV0LnZhbCgpIT09dC5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQodCxcImRhdGVGb3JtYXRcIiksbj10Lmxhc3RWYWw9dC5pbnB1dD90LmlucHV0LnZhbCgpOm51bGwscz10aGlzLl9nZXREZWZhdWx0RGF0ZSh0KSxvPXMsYT10aGlzLl9nZXRGb3JtYXRDb25maWcodCk7dHJ5e289dGhpcy5wYXJzZURhdGUoaSxuLGEpfHxzfWNhdGNoKHQpe249ZT9cIlwiOm59dC5zZWxlY3RlZERheT1vLmdldERhdGUoKSx0LmRyYXdNb250aD10LnNlbGVjdGVkTW9udGg9by5nZXRNb250aCgpLHQuZHJhd1llYXI9dC5zZWxlY3RlZFllYXI9by5nZXRGdWxsWWVhcigpLHQuY3VycmVudERheT1uP28uZ2V0RGF0ZSgpOjAsdC5jdXJyZW50TW9udGg9bj9vLmdldE1vbnRoKCk6MCx0LmN1cnJlbnRZZWFyPW4/by5nZXRGdWxsWWVhcigpOjAsdGhpcy5fYWRqdXN0SW5zdERhdGUodCl9fSxfZ2V0RGVmYXVsdERhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3RyaWN0TWluTWF4KHQsdGhpcy5fZGV0ZXJtaW5lRGF0ZSh0LHRoaXMuX2dldCh0LFwiZGVmYXVsdERhdGVcIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPW51bGw9PWl8fFwiXCI9PT1pP246XCJzdHJpbmdcIj09dHlwZW9mIGk/ZnVuY3Rpb24oaSl7dHJ5e3JldHVybiB0LmRhdGVwaWNrZXIucGFyc2VEYXRlKHQuZGF0ZXBpY2tlci5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLGksdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSkpfWNhdGNoKHQpe31mb3IodmFyIG49KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT90LmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLHM9bi5nZXRGdWxsWWVhcigpLG89bi5nZXRNb250aCgpLGE9bi5nZXREYXRlKCkscj0vKFsrXFwtXT9bMC05XSspXFxzKihkfER8d3xXfG18TXx5fFkpPy9nLGw9ci5leGVjKGkpO2w7KXtzd2l0Y2gobFsyXXx8XCJkXCIpe2Nhc2VcImRcIjpjYXNlXCJEXCI6YSs9cGFyc2VJbnQobFsxXSwxMCk7YnJlYWs7Y2FzZVwid1wiOmNhc2VcIldcIjphKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2VcIm1cIjpjYXNlXCJNXCI6bys9cGFyc2VJbnQobFsxXSwxMCksYT1NYXRoLm1pbihhLHQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgocyxvKSk7YnJlYWs7Y2FzZVwieVwiOmNhc2VcIllcIjpzKz1wYXJzZUludChsWzFdLDEwKSxhPU1hdGgubWluKGEsdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChzLG8pKX1sPXIuZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUocyxvLGEpfShpKTpcIm51bWJlclwiPT10eXBlb2YgaT9pc05hTihpKT9uOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBlLnNldERhdGUoZS5nZXREYXRlKCkrdCksZX0oaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybihzPXMmJlwiSW52YWxpZCBEYXRlXCI9PT1zLnRvU3RyaW5nKCk/bjpzKSYmKHMuc2V0SG91cnMoMCkscy5zZXRNaW51dGVzKDApLHMuc2V0U2Vjb25kcygwKSxzLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qocyl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbih0KXtyZXR1cm4gdD8odC5zZXRIb3Vycyh0LmdldEhvdXJzKCk+MTI/dC5nZXRIb3VycygpKzI6MCksdCk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuPSFlLHM9dC5zZWxlY3RlZE1vbnRoLG89dC5zZWxlY3RlZFllYXIsYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RldGVybWluZURhdGUodCxlLG5ldyBEYXRlKSk7dC5zZWxlY3RlZERheT10LmN1cnJlbnREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPXQuY3VycmVudE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPXQuY3VycmVudFllYXI9YS5nZXRGdWxsWWVhcigpLHM9PT10LnNlbGVjdGVkTW9udGgmJm89PT10LnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpLHRoaXMuX2FkanVzdEluc3REYXRlKHQpLHQuaW5wdXQmJnQuaW5wdXQudmFsKG4/XCJcIjp0aGlzLl9mb3JtYXREYXRlKHQpKX0sX2dldERhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIXQuY3VycmVudFllYXJ8fHQuaW5wdXQmJlwiXCI9PT10LmlucHV0LnZhbCgpP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodC5jdXJyZW50WWVhcix0LmN1cnJlbnRNb250aCx0LmN1cnJlbnREYXkpKX0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2dldChlLFwic3RlcE1vbnRoc1wiKSxuPVwiI1wiK2UuaWQucmVwbGFjZSgvXFxcXFxcXFwvZyxcIlxcXFxcIik7ZS5kcERpdi5maW5kKFwiW2RhdGEtaGFuZGxlcl1cIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUobiwtaSxcIk1cIil9LG5leHQ6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUobiwraSxcIk1cIil9LGhpZGU6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9nb3RvVG9kYXkobil9LHNlbGVjdERheTpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdERheShuLCt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtbW9udGhcIiksK3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS15ZWFyXCIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihuLHRoaXMsXCJNXCIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKG4sdGhpcyxcIllcIiksITF9fTt0KHRoaXMpLm9uKHRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1ldmVudFwiKSxlW3RoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1oYW5kbGVyXCIpXSl9KX0sX2dlbmVyYXRlSFRNTDpmdW5jdGlvbih0KXt2YXIgZSxpLG4scyxvLGEscixsLGgsYyx1LGQscCxmLGcsbSx2LGIsXyx5LHcseCxDLGssVCxELFMsSSxQLEUsTSxBLE8sTixILHosTCxXLFIsJD1uZXcgRGF0ZSxqPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKCQuZ2V0RnVsbFllYXIoKSwkLmdldE1vbnRoKCksJC5nZXREYXRlKCkpKSxGPXRoaXMuX2dldCh0LFwiaXNSVExcIiksQj10aGlzLl9nZXQodCxcInNob3dCdXR0b25QYW5lbFwiKSxxPXRoaXMuX2dldCh0LFwiaGlkZUlmTm9QcmV2TmV4dFwiKSxVPXRoaXMuX2dldCh0LFwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdFwiKSxZPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLFY9dGhpcy5fZ2V0KHQsXCJzaG93Q3VycmVudEF0UG9zXCIpLEs9dGhpcy5fZ2V0KHQsXCJzdGVwTW9udGhzXCIpLFg9MSE9PVlbMF18fDEhPT1ZWzFdLEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QodC5jdXJyZW50RGF5P25ldyBEYXRlKHQuY3VycmVudFllYXIsdC5jdXJyZW50TW9udGgsdC5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLFE9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWluXCIpLEo9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWF4XCIpLFo9dC5kcmF3TW9udGgtVix0dD10LmRyYXdZZWFyO2lmKFo8MCYmKForPTEyLHR0LS0pLEopZm9yKGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoSi5nZXRGdWxsWWVhcigpLEouZ2V0TW9udGgoKS1ZWzBdKllbMV0rMSxKLmdldERhdGUoKSkpLGU9USYmZTxRP1E6ZTt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaLDEpKT5lOyktLVo8MCYmKFo9MTEsdHQtLSk7Zm9yKHQuZHJhd01vbnRoPVosdC5kcmF3WWVhcj10dCxpPXRoaXMuX2dldCh0LFwicHJldlRleHRcIiksaT1VP3RoaXMuZm9ybWF0RGF0ZShpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHR0LFotSywxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTppLG49dGhpcy5fY2FuQWRqdXN0TW9udGgodCwtMSx0dCxaKT9cIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdwcmV2JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9J1wiK2krXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhGP1wiZVwiOlwid1wiKStcIic+XCIraStcIjwvc3Bhbj48L2E+XCI6cT9cIlwiOlwiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nXCIraStcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKEY/XCJlXCI6XCJ3XCIpK1wiJz5cIitpK1wiPC9zcGFuPjwvYT5cIixzPXRoaXMuX2dldCh0LFwibmV4dFRleHRcIikscz1VP3RoaXMuZm9ybWF0RGF0ZShzLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHR0LForSywxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTpzLG89dGhpcy5fY2FuQWRqdXN0TW9udGgodCwxLHR0LFopP1wiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J25leHQnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nXCIrcytcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKEY/XCJ3XCI6XCJlXCIpK1wiJz5cIitzK1wiPC9zcGFuPjwvYT5cIjpxP1wiXCI6XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQnIHRpdGxlPSdcIitzK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoRj9cIndcIjpcImVcIikrXCInPlwiK3MrXCI8L3NwYW4+PC9hPlwiLGE9dGhpcy5fZ2V0KHQsXCJjdXJyZW50VGV4dFwiKSxyPXRoaXMuX2dldCh0LFwiZ290b0N1cnJlbnRcIikmJnQuY3VycmVudERheT9HOmosYT1VP3RoaXMuZm9ybWF0RGF0ZShhLHIsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTphLGw9dC5pbmxpbmU/XCJcIjpcIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jbG9zZSB1aS1zdGF0ZS1kZWZhdWx0IHVpLXByaW9yaXR5LXByaW1hcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSdoaWRlJyBkYXRhLWV2ZW50PSdjbGljayc+XCIrdGhpcy5fZ2V0KHQsXCJjbG9zZVRleHRcIikrXCI8L2J1dHRvbj5cIixoPUI/XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQnPlwiKyhGP2w6XCJcIikrKHRoaXMuX2lzSW5SYW5nZSh0LHIpP1wiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSd0b2RheScgZGF0YS1ldmVudD0nY2xpY2snPlwiK2ErXCI8L2J1dHRvbj5cIjpcIlwiKSsoRj9cIlwiOmwpK1wiPC9kaXY+XCI6XCJcIixjPXBhcnNlSW50KHRoaXMuX2dldCh0LFwiZmlyc3REYXlcIiksMTApLGM9aXNOYU4oYyk/MDpjLHU9dGhpcy5fZ2V0KHQsXCJzaG93V2Vla1wiKSxkPXRoaXMuX2dldCh0LFwiZGF5TmFtZXNcIikscD10aGlzLl9nZXQodCxcImRheU5hbWVzTWluXCIpLGY9dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzXCIpLGc9dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzU2hvcnRcIiksbT10aGlzLl9nZXQodCxcImJlZm9yZVNob3dEYXlcIiksdj10aGlzLl9nZXQodCxcInNob3dPdGhlck1vbnRoc1wiKSxiPXRoaXMuX2dldCh0LFwic2VsZWN0T3RoZXJNb250aHNcIiksXz10aGlzLl9nZXREZWZhdWx0RGF0ZSh0KSx5PVwiXCIseD0wO3g8WVswXTt4Kyspe2ZvcihDPVwiXCIsdGhpcy5tYXhSb3dzPTQsaz0wO2s8WVsxXTtrKyspe2lmKFQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWix0LnNlbGVjdGVkRGF5KSksRD1cIiB1aS1jb3JuZXItYWxsXCIsUz1cIlwiLFgpe2lmKFMrPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1ncm91cFwiLFlbMV0+MSlzd2l0Y2goayl7Y2FzZSAwOlMrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3RcIixEPVwiIHVpLWNvcm5lci1cIisoRj9cInJpZ2h0XCI6XCJsZWZ0XCIpO2JyZWFrO2Nhc2UgWVsxXS0xOlMrPVwiIHVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdFwiLEQ9XCIgdWktY29ybmVyLVwiKyhGP1wibGVmdFwiOlwicmlnaHRcIik7YnJlYWs7ZGVmYXVsdDpTKz1cIiB1aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZVwiLEQ9XCJcIn1TKz1cIic+XCJ9Zm9yKFMrPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1oZWFkZXIgdWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXhcIitEK1wiJz5cIisoL2FsbHxsZWZ0Ly50ZXN0KEQpJiYwPT09eD9GP286bjpcIlwiKSsoL2FsbHxyaWdodC8udGVzdChEKSYmMD09PXg/Rj9uOm86XCJcIikrdGhpcy5fZ2VuZXJhdGVNb250aFllYXJIZWFkZXIodCxaLHR0LFEsSix4PjB8fGs+MCxmLGcpK1wiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+PHRyPlwiLEk9dT9cIjx0aCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KHQsXCJ3ZWVrSGVhZGVyXCIpK1wiPC90aD5cIjpcIlwiLHc9MDt3PDc7dysrKUkrPVwiPHRoIHNjb3BlPSdjb2wnXCIrKCh3K2MrNiklNz49NT9cIiBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWVuZCdcIjpcIlwiKStcIj48c3BhbiB0aXRsZT0nXCIrZFtQPSh3K2MpJTddK1wiJz5cIitwW1BdK1wiPC9zcGFuPjwvdGg+XCI7Zm9yKFMrPUkrXCI8L3RyPjwvdGhlYWQ+PHRib2R5PlwiLEU9dGhpcy5fZ2V0RGF5c0luTW9udGgodHQsWiksdHQ9PT10LnNlbGVjdGVkWWVhciYmWj09PXQuc2VsZWN0ZWRNb250aCYmKHQuc2VsZWN0ZWREYXk9TWF0aC5taW4odC5zZWxlY3RlZERheSxFKSksTT0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKHR0LFopLWMrNyklNyxBPU1hdGguY2VpbCgoTStFKS83KSxPPVgmJnRoaXMubWF4Um93cz5BP3RoaXMubWF4Um93czpBLHRoaXMubWF4Um93cz1PLE49dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWiwxLU0pKSxIPTA7SDxPO0grKyl7Zm9yKFMrPVwiPHRyPlwiLHo9dT9cIjx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KHQsXCJjYWxjdWxhdGVXZWVrXCIpKE4pK1wiPC90ZD5cIjpcIlwiLHc9MDt3PDc7dysrKUw9bT9tLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFtOXSk6WyEwLFwiXCJdLFI9KFc9Ti5nZXRNb250aCgpIT09WikmJiFifHwhTFswXXx8USYmTjxRfHxKJiZOPkoseis9XCI8dGQgY2xhc3M9J1wiKygodytjKzYpJTc+PTU/XCIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZFwiOlwiXCIpKyhXP1wiIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGhcIjpcIlwiKSsoTi5nZXRUaW1lKCk9PT1ULmdldFRpbWUoKSYmWj09PXQuc2VsZWN0ZWRNb250aCYmdC5fa2V5RXZlbnR8fF8uZ2V0VGltZSgpPT09Ti5nZXRUaW1lKCkmJl8uZ2V0VGltZSgpPT09VC5nZXRUaW1lKCk/XCIgXCIrdGhpcy5fZGF5T3ZlckNsYXNzOlwiXCIpKyhSP1wiIFwiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzK1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikrKFcmJiF2P1wiXCI6XCIgXCIrTFsxXSsoTi5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT9cIiBcIit0aGlzLl9jdXJyZW50Q2xhc3M6XCJcIikrKE4uZ2V0VGltZSgpPT09ai5nZXRUaW1lKCk/XCIgdWktZGF0ZXBpY2tlci10b2RheVwiOlwiXCIpKStcIidcIisoVyYmIXZ8fCFMWzJdP1wiXCI6XCIgdGl0bGU9J1wiK0xbMl0ucmVwbGFjZSgvJy9nLFwiJiMzOTtcIikrXCInXCIpKyhSP1wiXCI6XCIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSdcIitOLmdldE1vbnRoKCkrXCInIGRhdGEteWVhcj0nXCIrTi5nZXRGdWxsWWVhcigpK1wiJ1wiKStcIj5cIisoVyYmIXY/XCImI3hhMDtcIjpSP1wiPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPlwiK04uZ2V0RGF0ZSgpK1wiPC9zcGFuPlwiOlwiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHRcIisoTi5nZXRUaW1lKCk9PT1qLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1oaWdobGlnaHRcIjpcIlwiKSsoTi5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1hY3RpdmVcIjpcIlwiKSsoVz9cIiB1aS1wcmlvcml0eS1zZWNvbmRhcnlcIjpcIlwiKStcIicgaHJlZj0nIyc+XCIrTi5nZXREYXRlKCkrXCI8L2E+XCIpK1wiPC90ZD5cIixOLnNldERhdGUoTi5nZXREYXRlKCkrMSksTj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChOKTtTKz16K1wiPC90cj5cIn0rK1o+MTEmJihaPTAsdHQrKyksQys9Uys9XCI8L3Rib2R5PjwvdGFibGU+XCIrKFg/XCI8L2Rpdj5cIisoWVswXT4wJiZrPT09WVsxXS0xP1wiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1yb3ctYnJlYWsnPjwvZGl2PlwiOlwiXCIpOlwiXCIpfXkrPUN9cmV0dXJuIHkrPWgsdC5fa2V5RXZlbnQ9ITEseX0sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKHQsZSxpLG4scyxvLGEscil7dmFyIGwsaCxjLHUsZCxwLGYsZyxtPXRoaXMuX2dldCh0LFwiY2hhbmdlTW9udGhcIiksdj10aGlzLl9nZXQodCxcImNoYW5nZVllYXJcIiksYj10aGlzLl9nZXQodCxcInNob3dNb250aEFmdGVyWWVhclwiKSxfPVwiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci10aXRsZSc+XCIseT1cIlwiO2lmKG98fCFtKXkrPVwiPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPlwiK2FbZV0rXCI8L3NwYW4+XCI7ZWxzZXtmb3IobD1uJiZuLmdldEZ1bGxZZWFyKCk9PT1pLGg9cyYmcy5nZXRGdWxsWWVhcigpPT09aSx5Kz1cIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnIGRhdGEtaGFuZGxlcj0nc2VsZWN0TW9udGgnIGRhdGEtZXZlbnQ9J2NoYW5nZSc+XCIsYz0wO2M8MTI7YysrKSghbHx8Yz49bi5nZXRNb250aCgpKSYmKCFofHxjPD1zLmdldE1vbnRoKCkpJiYoeSs9XCI8b3B0aW9uIHZhbHVlPSdcIitjK1wiJ1wiKyhjPT09ZT9cIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCI6XCJcIikrXCI+XCIrcltjXStcIjwvb3B0aW9uPlwiKTt5Kz1cIjwvc2VsZWN0PlwifWlmKGJ8fChfKz15KyghbyYmbSYmdj9cIlwiOlwiJiN4YTA7XCIpKSwhdC55ZWFyc2h0bWwpaWYodC55ZWFyc2h0bWw9XCJcIixvfHwhdilfKz1cIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInPlwiK2krXCI8L3NwYW4+XCI7ZWxzZXtmb3IodT10aGlzLl9nZXQodCxcInllYXJSYW5nZVwiKS5zcGxpdChcIjpcIiksZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksZj0ocD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9jWytcXC1dLiovKT9pK3BhcnNlSW50KHQuc3Vic3RyaW5nKDEpLDEwKTp0Lm1hdGNoKC9bK1xcLV0uKi8pP2QrcGFyc2VJbnQodCwxMCk6cGFyc2VJbnQodCwxMCk7cmV0dXJuIGlzTmFOKGUpP2Q6ZX0pKHVbMF0pLGc9TWF0aC5tYXgoZixwKHVbMV18fFwiXCIpKSxmPW4/TWF0aC5tYXgoZixuLmdldEZ1bGxZZWFyKCkpOmYsZz1zP01hdGgubWluKGcscy5nZXRGdWxsWWVhcigpKTpnLHQueWVhcnNodG1sKz1cIjxzZWxlY3QgY2xhc3M9J3VpLWRhdGVwaWNrZXIteWVhcicgZGF0YS1oYW5kbGVyPSdzZWxlY3RZZWFyJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiO2Y8PWc7ZisrKXQueWVhcnNodG1sKz1cIjxvcHRpb24gdmFsdWU9J1wiK2YrXCInXCIrKGY9PT1pP1wiIHNlbGVjdGVkPSdzZWxlY3RlZCdcIjpcIlwiKStcIj5cIitmK1wiPC9vcHRpb24+XCI7dC55ZWFyc2h0bWwrPVwiPC9zZWxlY3Q+XCIsXys9dC55ZWFyc2h0bWwsdC55ZWFyc2h0bWw9bnVsbH1yZXR1cm4gXys9dGhpcy5fZ2V0KHQsXCJ5ZWFyU3VmZml4XCIpLGImJihfKz0oIW8mJm0mJnY/XCJcIjpcIiYjeGEwO1wiKSt5KSxfK1wiPC9kaXY+XCJ9LF9hZGp1c3RJbnN0RGF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIG49dC5zZWxlY3RlZFllYXIrKFwiWVwiPT09aT9lOjApLHM9dC5zZWxlY3RlZE1vbnRoKyhcIk1cIj09PWk/ZTowKSxvPU1hdGgubWluKHQuc2VsZWN0ZWREYXksdGhpcy5fZ2V0RGF5c0luTW9udGgobixzKSkrKFwiRFwiPT09aT9lOjApLGE9dGhpcy5fcmVzdHJpY3RNaW5NYXgodCx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShuLHMsbykpKTt0LnNlbGVjdGVkRGF5PWEuZ2V0RGF0ZSgpLHQuZHJhd01vbnRoPXQuc2VsZWN0ZWRNb250aD1hLmdldE1vbnRoKCksdC5kcmF3WWVhcj10LnNlbGVjdGVkWWVhcj1hLmdldEZ1bGxZZWFyKCksXCJNXCIhPT1pJiZcIllcIiE9PWl8fHRoaXMuX25vdGlmeUNoYW5nZSh0KX0sX3Jlc3RyaWN0TWluTWF4OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWluXCIpLG49dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWF4XCIpLHM9aSYmZTxpP2k6ZTtyZXR1cm4gbiYmcz5uP246c30sX25vdGlmeUNoYW5nZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXQodCxcIm9uQ2hhbmdlTW9udGhZZWFyXCIpO2UmJmUuYXBwbHkodC5pbnB1dD90LmlucHV0WzBdOm51bGwsW3Quc2VsZWN0ZWRZZWFyLHQuc2VsZWN0ZWRNb250aCsxLHRdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LFwibnVtYmVyT2ZNb250aHNcIik7cmV0dXJuIG51bGw9PWU/WzEsMV06XCJudW1iZXJcIj09dHlwZW9mIGU/WzEsZV06ZX0sX2dldE1pbk1heERhdGU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fZGV0ZXJtaW5lRGF0ZSh0LHRoaXMuX2dldCh0LGUrXCJEYXRlXCIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodCxlLDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBEYXRlKHQsZSwxKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLG89dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoaSxuKyhlPDA/ZTpzWzBdKnNbMV0pLDEpKTtyZXR1cm4gZTwwJiZvLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgoby5nZXRGdWxsWWVhcigpLG8uZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZSh0LG8pfSxfaXNJblJhbmdlOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1pblwiKSxvPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1heFwiKSxhPW51bGwscj1udWxsLGw9dGhpcy5fZ2V0KHQsXCJ5ZWFyUmFuZ2VcIik7cmV0dXJuIGwmJihpPWwuc3BsaXQoXCI6XCIpLG49KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGE9cGFyc2VJbnQoaVswXSwxMCkscj1wYXJzZUludChpWzFdLDEwKSxpWzBdLm1hdGNoKC9bK1xcLV0uKi8pJiYoYSs9biksaVsxXS5tYXRjaCgvWytcXC1dLiovKSYmKHIrPW4pKSwoIXN8fGUuZ2V0VGltZSgpPj1zLmdldFRpbWUoKSkmJighb3x8ZS5nZXRUaW1lKCk8PW8uZ2V0VGltZSgpKSYmKCFhfHxlLmdldEZ1bGxZZWFyKCk+PWEpJiYoIXJ8fGUuZ2V0RnVsbFllYXIoKTw9cil9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsXCJzaG9ydFllYXJDdXRvZmZcIik7cmV0dXJue3Nob3J0WWVhckN1dG9mZjplPVwic3RyaW5nXCIhPXR5cGVvZiBlP2U6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChlLDEwKSxkYXlOYW1lc1Nob3J0OnRoaXMuX2dldCh0LFwiZGF5TmFtZXNTaG9ydFwiKSxkYXlOYW1lczp0aGlzLl9nZXQodCxcImRheU5hbWVzXCIpLG1vbnRoTmFtZXNTaG9ydDp0aGlzLl9nZXQodCxcIm1vbnRoTmFtZXNTaG9ydFwiKSxtb250aE5hbWVzOnRoaXMuX2dldCh0LFwibW9udGhOYW1lc1wiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxpLG4pe2V8fCh0LmN1cnJlbnREYXk9dC5zZWxlY3RlZERheSx0LmN1cnJlbnRNb250aD10LnNlbGVjdGVkTW9udGgsdC5jdXJyZW50WWVhcj10LnNlbGVjdGVkWWVhcik7dmFyIHM9ZT9cIm9iamVjdFwiPT10eXBlb2YgZT9lOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG4saSxlKSk6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodC5jdXJyZW50WWVhcix0LmN1cnJlbnRNb250aCx0LmN1cnJlbnREYXkpKTtyZXR1cm4gdGhpcy5mb3JtYXREYXRlKHRoaXMuX2dldCh0LFwiZGF0ZUZvcm1hdFwiKSxzLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSl9fSksdC5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fCh0KGRvY3VtZW50KS5vbihcIm1vdXNlZG93blwiLHQuZGF0ZXBpY2tlci5fY2hlY2tFeHRlcm5hbENsaWNrKSx0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApLDA9PT10KFwiI1wiK3QuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJnQoXCJib2R5XCIpLmFwcGVuZCh0LmRhdGVwaWNrZXIuZHBEaXYpO3ZhciBpPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZXx8XCJpc0Rpc2FibGVkXCIhPT1lJiZcImdldERhdGVcIiE9PWUmJlwid2lkZ2V0XCIhPT1lP1wib3B0aW9uXCI9PT1lJiYyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGFyZ3VtZW50c1sxXT90LmRhdGVwaWNrZXJbXCJfXCIrZStcIkRhdGVwaWNrZXJcIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpOnRoaXMuZWFjaChmdW5jdGlvbigpe1wic3RyaW5nXCI9PXR5cGVvZiBlP3QuZGF0ZXBpY2tlcltcIl9cIitlK1wiRGF0ZXBpY2tlclwiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNdLmNvbmNhdChpKSk6dC5kYXRlcGlja2VyLl9hdHRhY2hEYXRlcGlja2VyKHRoaXMsZSl9KTp0LmRhdGVwaWNrZXJbXCJfXCIrZStcIkRhdGVwaWNrZXJcIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpfSx0LmRhdGVwaWNrZXI9bmV3IGUsdC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLHQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLHQuZGF0ZXBpY2tlci52ZXJzaW9uPVwiMS4xMi4xXCI7dmFyIGQ9KHQuZGF0ZXBpY2tlcix0LnVpLmllPSEhL21zaWUgW1xcdy5dKy8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpLCExKTt0KGRvY3VtZW50KS5vbihcIm1vdXNldXBcIixmdW5jdGlvbigpe2Q9ITF9KSx0LndpZGdldChcInVpLm1vdXNlXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntjYW5jZWw6XCJpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbiwgc2VsZWN0LCBvcHRpb25cIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZWxlbWVudC5vbihcIm1vdXNlZG93bi5cIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24odCl7cmV0dXJuIGUuX21vdXNlRG93bih0KX0pLm9uKFwiY2xpY2suXCIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGkpe2lmKCEwPT09dC5kYXRhKGkudGFyZ2V0LGUud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSlyZXR1cm4gdC5yZW1vdmVEYXRhKGkudGFyZ2V0LGUud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSxpLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLCExfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50Lm9mZihcIi5cIit0aGlzLndpZGdldE5hbWUpLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlJiZ0aGlzLmRvY3VtZW50Lm9mZihcIm1vdXNlbW92ZS5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLm9mZihcIm1vdXNldXAuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24oZSl7aWYoIWQpe3RoaXMuX21vdXNlTW92ZWQ9ITEsdGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKGUpLHRoaXMuX21vdXNlRG93bkV2ZW50PWU7dmFyIGk9dGhpcyxuPTE9PT1lLndoaWNoLHM9IShcInN0cmluZ1wiIT10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbHx8IWUudGFyZ2V0Lm5vZGVOYW1lKSYmdChlLnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg7cmV0dXJuIShuJiYhcyYmdGhpcy5fbW91c2VDYXB0dXJlKGUpJiYodGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZSkmJnRoaXMuX21vdXNlRGVsYXlNZXQoZSkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEhPT10aGlzLl9tb3VzZVN0YXJ0KGUpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyhlLnByZXZlbnREZWZhdWx0KCksMCk6KCEwPT09dC5kYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSYmdC5yZW1vdmVEYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaS5fbW91c2VNb3ZlKHQpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21vdXNlVXAodCl9LHRoaXMuZG9jdW1lbnQub24oXCJtb3VzZW1vdmUuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5vbihcIm1vdXNldXAuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksZS5wcmV2ZW50RGVmYXVsdCgpLGQ9ITAsMCkpKX19LF9tb3VzZU1vdmU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fbW91c2VNb3ZlZCl7aWYodC51aS5pZSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fGRvY3VtZW50LmRvY3VtZW50TW9kZTw5KSYmIWUuYnV0dG9uKXJldHVybiB0aGlzLl9tb3VzZVVwKGUpO2lmKCFlLndoaWNoKWlmKGUub3JpZ2luYWxFdmVudC5hbHRLZXl8fGUub3JpZ2luYWxFdmVudC5jdHJsS2V5fHxlLm9yaWdpbmFsRXZlbnQubWV0YUtleXx8ZS5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5KXRoaXMuaWdub3JlTWlzc2luZ1doaWNoPSEwO2Vsc2UgaWYoIXRoaXMuaWdub3JlTWlzc2luZ1doaWNoKXJldHVybiB0aGlzLl9tb3VzZVVwKGUpfXJldHVybihlLndoaWNofHxlLmJ1dHRvbikmJih0aGlzLl9tb3VzZU1vdmVkPSEwKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/KHRoaXMuX21vdXNlRHJhZyhlKSxlLnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGUpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGUpJiYodGhpcy5fbW91c2VTdGFydGVkPSExIT09dGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCxlKSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/dGhpcy5fbW91c2VEcmFnKGUpOnRoaXMuX21vdXNlVXAoZSkpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpfSxfbW91c2VVcDpmdW5jdGlvbihlKXt0aGlzLmRvY3VtZW50Lm9mZihcIm1vdXNlbW92ZS5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLm9mZihcIm1vdXNldXAuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSksdGhpcy5fbW91c2VTdGFydGVkJiYodGhpcy5fbW91c2VTdGFydGVkPSExLGUudGFyZ2V0PT09dGhpcy5fbW91c2VEb3duRXZlbnQudGFyZ2V0JiZ0LmRhdGEoZS50YXJnZXQsdGhpcy53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIsITApLHRoaXMuX21vdXNlU3RvcChlKSksdGhpcy5fbW91c2VEZWxheVRpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuX21vdXNlRGVsYXlUaW1lciksZGVsZXRlIHRoaXMuX21vdXNlRGVsYXlUaW1lciksdGhpcy5pZ25vcmVNaXNzaW5nV2hpY2g9ITEsZD0hMSxlLnByZXZlbnREZWZhdWx0KCl9LF9tb3VzZURpc3RhbmNlTWV0OmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLm1heChNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWC10LnBhZ2VYKSxNYXRoLmFicyh0aGlzLl9tb3VzZURvd25FdmVudC5wYWdlWS10LnBhZ2VZKSk+PXRoaXMub3B0aW9ucy5kaXN0YW5jZX0sX21vdXNlRGVsYXlNZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbigpe30sX21vdXNlRHJhZzpmdW5jdGlvbigpe30sX21vdXNlU3RvcDpmdW5jdGlvbigpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbigpe3JldHVybiEwfX0pLHQudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG89dC51aVtlXS5wcm90b3R5cGU7Zm9yKHMgaW4gbilvLnBsdWdpbnNbc109by5wbHVnaW5zW3NdfHxbXSxvLnBsdWdpbnNbc10ucHVzaChbaSxuW3NdXSl9LGNhbGw6ZnVuY3Rpb24odCxlLGksbil7dmFyIHMsbz10LnBsdWdpbnNbZV07aWYobyYmKG58fHQuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PXQuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3Iocz0wO3M8by5sZW5ndGg7cysrKXQub3B0aW9uc1tvW3NdWzBdXSYmb1tzXVsxXS5hcHBseSh0LmVsZW1lbnQsaSl9fSx0LnVpLnNhZmVCbHVyPWZ1bmN0aW9uKGUpe2UmJlwiYm9keVwiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZ0KGUpLnRyaWdnZXIoXCJibHVyXCIpfSx0LndpZGdldChcInVpLmRyYWdnYWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcImRyYWdcIixvcHRpb25zOnthZGRDbGFzc2VzOiEwLGFwcGVuZFRvOlwicGFyZW50XCIsYXhpczohMSxjb25uZWN0VG9Tb3J0YWJsZTohMSxjb250YWlubWVudDohMSxjdXJzb3I6XCJhdXRvXCIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOlwib3JpZ2luYWxcIixpZnJhbWVGaXg6ITEsb3BhY2l0eTohMSxyZWZyZXNoUG9zaXRpb25zOiExLHJldmVydDohMSxyZXZlcnREdXJhdGlvbjo1MDAsc2NvcGU6XCJkZWZhdWx0XCIsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ITEsc25hcE1vZGU6XCJib3RoXCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7XCJvcmlnaW5hbFwiPT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5fc2V0UG9zaXRpb25SZWxhdGl2ZSgpLHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzJiZ0aGlzLl9hZGRDbGFzcyhcInVpLWRyYWdnYWJsZVwiKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9tb3VzZUluaXQoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3N1cGVyKHQsZSksXCJoYW5kbGVcIj09PXQmJih0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7KHRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQpLmlzKFwiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZ1wiKT90aGlzLmRlc3Ryb3lPbkNsZWFyPSEwOih0aGlzLl9yZW1vdmVIYW5kbGVDbGFzc05hbWUoKSx0aGlzLl9tb3VzZURlc3Ryb3koKSl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiEodGhpcy5oZWxwZXJ8fGkuZGlzYWJsZWR8fHQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKS5sZW5ndGg+MHx8KHRoaXMuaGFuZGxlPXRoaXMuX2dldEhhbmRsZShlKSwhdGhpcy5oYW5kbGV8fCh0aGlzLl9ibHVyQWN0aXZlRWxlbWVudChlKSx0aGlzLl9ibG9ja0ZyYW1lcyghMD09PWkuaWZyYW1lRml4P1wiaWZyYW1lXCI6aS5pZnJhbWVGaXgpLDApKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbihlKXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQoZSkubWFwKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtyZXR1cm4gdChcIjxkaXY+XCIpLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKS5hcHBlbmRUbyhlLnBhcmVudCgpKS5vdXRlcldpZHRoKGUub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodChlLm91dGVySGVpZ2h0KCkpLm9mZnNldChlLm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2JsdXJBY3RpdmVFbGVtZW50OmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSk7dChlLnRhcmdldCkuY2xvc2VzdChpKS5sZW5ndGh8fHQudWkuc2FmZUJsdXIoaSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGUpLHRoaXMuX2FkZENsYXNzKHRoaXMuaGVscGVyLFwidWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0LnVpLmRkbWFuYWdlciYmKHQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoXCJwb3NpdGlvblwiKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoITApLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMuaGFzRml4ZWRBbmNlc3Rvcj10aGlzLmhlbHBlci5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuXCJmaXhlZFwiPT09dCh0aGlzKS5jc3MoXCJwb3NpdGlvblwiKX0pLmxlbmd0aD4wLHRoaXMucG9zaXRpb25BYnM9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX3JlZnJlc2hPZmZzZXRzKGUpLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSwhMSksdGhpcy5vcmlnaW5hbFBhZ2VYPWUucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPWUucGFnZVksaS5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihpLmN1cnNvckF0KSx0aGlzLl9zZXRDb250YWlubWVudCgpLCExPT09dGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsZSk/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdC51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsZSksdGhpcy5fbW91c2VEcmFnKGUsITApLHQudWkuZGRtYW5hZ2VyJiZ0LnVpLmRkbWFuYWdlci5kcmFnU3RhcnQodGhpcyxlKSwhMCl9LF9yZWZyZXNoT2Zmc2V0czpmdW5jdGlvbih0KXt0aGlzLm9mZnNldD17dG9wOnRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLnBvc2l0aW9uQWJzLmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQsc2Nyb2xsOiExLHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSx0aGlzLm9mZnNldC5jbGljaz17bGVmdDp0LnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOnQucGFnZVktdGhpcy5vZmZzZXQudG9wfX0sX21vdXNlRHJhZzpmdW5jdGlvbihlLGkpe2lmKHRoaXMuaGFzRml4ZWRBbmNlc3RvciYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSksdGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUsITApLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oXCJhYnNvbHV0ZVwiKSwhaSl7dmFyIG49dGhpcy5fdWlIYXNoKCk7aWYoITE9PT10aGlzLl90cmlnZ2VyKFwiZHJhZ1wiLGUsbikpcmV0dXJuIHRoaXMuX21vdXNlVXAobmV3IHQuRXZlbnQoXCJtb3VzZXVwXCIsZSkpLCExO3RoaXMucG9zaXRpb249bi5wb3NpdGlvbn1yZXR1cm4gdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrXCJweFwiLHRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIsdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxlKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLG49ITE7cmV0dXJuIHQudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihuPXQudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyxlKSksXG50aGlzLmRyb3BwZWQmJihuPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpLFwiaW52YWxpZFwiPT09dGhpcy5vcHRpb25zLnJldmVydCYmIW58fFwidmFsaWRcIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJm58fCEwPT09dGhpcy5vcHRpb25zLnJldmVydHx8dC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LG4pP3QodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXshMSE9PWkuX3RyaWdnZXIoXCJzdG9wXCIsZSkmJmkuX2NsZWFyKCl9KTohMSE9PXRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsZSkmJnRoaXMuX2NsZWFyKCksITF9LF9tb3VzZVVwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl91bmJsb2NrRnJhbWVzKCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsZSksdGhpcy5oYW5kbGVFbGVtZW50LmlzKGUudGFyZ2V0KSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0LnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsZSl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcyhcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIik/dGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIix7dGFyZ2V0OnRoaXMuZWxlbWVudFswXX0pKTp0aGlzLl9jbGVhcigpLHRoaXN9LF9nZXRIYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMub3B0aW9ucy5oYW5kbGV8fCEhdChlLnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGFuZGxlKSkubGVuZ3RofSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVFbGVtZW50PXRoaXMub3B0aW9ucy5oYW5kbGU/dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSk6dGhpcy5lbGVtZW50LHRoaXMuX2FkZENsYXNzKHRoaXMuaGFuZGxlRWxlbWVudCxcInVpLWRyYWdnYWJsZS1oYW5kbGVcIil9LF9yZW1vdmVIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhhbmRsZUVsZW1lbnQsXCJ1aS1kcmFnZ2FibGUtaGFuZGxlXCIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxuPXQuaXNGdW5jdGlvbihpLmhlbHBlcikscz1uP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlXSkpOlwiY2xvbmVcIj09PWkuaGVscGVyP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoXCJpZFwiKTp0aGlzLmVsZW1lbnQ7cmV0dXJuIHMucGFyZW50cyhcImJvZHlcIikubGVuZ3RofHxzLmFwcGVuZFRvKFwicGFyZW50XCI9PT1pLmFwcGVuZFRvP3RoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlOmkuYXBwZW5kVG8pLG4mJnNbMF09PT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSxzWzBdPT09dGhpcy5lbGVtZW50WzBdfHwvKGZpeGVkfGFic29sdXRlKS8udGVzdChzLmNzcyhcInBvc2l0aW9uXCIpKXx8cy5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksc30sX3NldFBvc2l0aW9uUmVsYXRpdmU6ZnVuY3Rpb24oKXsvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKFwicG9zaXRpb25cIikpfHwodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KFwiIFwiKSksdC5pc0FycmF5KGUpJiYoZT17bGVmdDorZVswXSx0b3A6K2VbMV18fDB9KSxcImxlZnRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWUubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksXCJyaWdodFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInRvcFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD1lLnRvcCt0aGlzLm1hcmdpbnMudG9wKSxcImJvdHRvbVwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1lLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdCh0LnRhZ05hbWUpfHx0PT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm5cImFic29sdXRlXCI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PWkmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksZS50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSx0aGlzLl9pc1Jvb3ROb2RlKHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKGU9e3RvcDowLGxlZnQ6MH0pLHt0b3A6ZS50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCksbGVmdDplLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoXCJyZWxhdGl2ZVwiIT09dGhpcy5jc3NQb3NpdGlvbilyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgdD10aGlzLmVsZW1lbnQucG9zaXRpb24oKSxlPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6dC50b3AtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSwxMCl8fDApKyhlPzA6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLGxlZnQ6dC5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpLDEwKXx8MCkrKGU/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCkpfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKFwibWFyZ2luTGVmdFwiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5Ub3BcIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5SaWdodFwiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5Cb3R0b21cIiksMTApfHwwfX0sX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlclByb3BvcnRpb25zPXt3aWR0aDp0aGlzLmhlbHBlci5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCl9fSxfc2V0Q29udGFpbm1lbnQ6ZnVuY3Rpb24oKXt2YXIgZSxpLG4scz10aGlzLm9wdGlvbnMsbz10aGlzLmRvY3VtZW50WzBdO3JldHVybiB0aGlzLnJlbGF0aXZlQ29udGFpbmVyPW51bGwscy5jb250YWlubWVudD9cIndpbmRvd1wiPT09cy5jb250YWlubWVudD92b2lkKHRoaXMuY29udGFpbm1lbnQ9W3Qod2luZG93KS5zY3JvbGxMZWZ0KCktdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCx0KHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsdCh3aW5kb3cpLnNjcm9sbExlZnQoKSt0KHdpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LHQod2luZG93KS5zY3JvbGxUb3AoKSsodCh3aW5kb3cpLmhlaWdodCgpfHxvLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKTpcImRvY3VtZW50XCI9PT1zLmNvbnRhaW5tZW50P3ZvaWQodGhpcy5jb250YWlubWVudD1bMCwwLHQobykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LCh0KG8pLmhlaWdodCgpfHxvLmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKTpzLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/dm9pZCh0aGlzLmNvbnRhaW5tZW50PXMuY29udGFpbm1lbnQpOihcInBhcmVudFwiPT09cy5jb250YWlubWVudCYmKHMuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksdm9pZCgobj0oaT10KHMuY29udGFpbm1lbnQpKVswXSkmJihlPS8oc2Nyb2xsfGF1dG8pLy50ZXN0KGkuY3NzKFwib3ZlcmZsb3dcIikpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludChpLmNzcyhcInBhZGRpbmdMZWZ0XCIpLDEwKXx8MCksKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nVG9wXCIpLDEwKXx8MCksKGU/TWF0aC5tYXgobi5zY3JvbGxXaWR0aCxuLm9mZnNldFdpZHRoKTpuLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ1JpZ2h0XCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKGU/TWF0aC5tYXgobi5zY3JvbGxIZWlnaHQsbi5vZmZzZXRIZWlnaHQpOm4ub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJCb3R0b21XaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChpLmNzcyhcInBhZGRpbmdCb3R0b21cIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wLXRoaXMubWFyZ2lucy5ib3R0b21dLHRoaXMucmVsYXRpdmVDb250YWluZXI9aSkpKTp2b2lkKHRoaXMuY29udGFpbm1lbnQ9bnVsbCl9LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbih0LGUpe2V8fChlPXRoaXMucG9zaXRpb24pO3ZhciBpPVwiYWJzb2x1dGVcIj09PXQ/MTotMSxuPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6ZS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKmkrdGhpcy5vZmZzZXQucGFyZW50LnRvcCppLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOm4/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSppLGxlZnQ6ZS5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqaSt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCppLShcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwubGVmdDpuPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpKml9fSxfZ2VuZXJhdGVQb3NpdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpLG4scyxvLGE9dGhpcy5vcHRpb25zLHI9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSksbD10LnBhZ2VYLGg9dC5wYWdlWTtyZXR1cm4gciYmdGhpcy5vZmZzZXQuc2Nyb2xsfHwodGhpcy5vZmZzZXQuc2Nyb2xsPXt0b3A6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCl9KSxlJiYodGhpcy5jb250YWlubWVudCYmKHRoaXMucmVsYXRpdmVDb250YWluZXI/KG49dGhpcy5yZWxhdGl2ZUNvbnRhaW5lci5vZmZzZXQoKSxpPVt0aGlzLmNvbnRhaW5tZW50WzBdK24ubGVmdCx0aGlzLmNvbnRhaW5tZW50WzFdK24udG9wLHRoaXMuY29udGFpbm1lbnRbMl0rbi5sZWZ0LHRoaXMuY29udGFpbm1lbnRbM10rbi50b3BdKTppPXRoaXMuY29udGFpbm1lbnQsdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PGlbMF0mJihsPWlbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8aVsxXSYmKGg9aVsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdJiYobD1pWzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10mJihoPWlbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksYS5ncmlkJiYocz1hLmdyaWRbMV0/dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKGgtdGhpcy5vcmlnaW5hbFBhZ2VZKS9hLmdyaWRbMV0pKmEuZ3JpZFsxXTp0aGlzLm9yaWdpbmFsUGFnZVksaD1pP3MtdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdfHxzLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdP3M6cy10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV0/cy1hLmdyaWRbMV06cythLmdyaWRbMV06cyxvPWEuZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgobC10aGlzLm9yaWdpbmFsUGFnZVgpL2EuZ3JpZFswXSkqYS5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWCxsPWk/by10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdfHxvLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXT9vOm8tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXT9vLWEuZ3JpZFswXTpvK2EuZ3JpZFswXTpvKSxcInlcIj09PWEuYXhpcyYmKGw9dGhpcy5vcmlnaW5hbFBhZ2VYKSxcInhcIj09PWEuYXhpcyYmKGg9dGhpcy5vcmlnaW5hbFBhZ2VZKSkse3RvcDpoLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpyPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCksbGVmdDpsLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsoXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cj8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaGVscGVyLFwidWktZHJhZ2dhYmxlLWRyYWdnaW5nXCIpLHRoaXMuaGVscGVyWzBdPT09dGhpcy5lbGVtZW50WzBdfHx0aGlzLmNhbmNlbEhlbHBlclJlbW92YWx8fHRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwsdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHRoaXMuZGVzdHJveU9uQ2xlYXImJnRoaXMuZGVzdHJveSgpfSxfdHJpZ2dlcjpmdW5jdGlvbihlLGksbil7cmV0dXJuIG49bnx8dGhpcy5fdWlIYXNoKCksdC51aS5wbHVnaW4uY2FsbCh0aGlzLGUsW2ksbix0aGlzXSwhMCksL14oZHJhZ3xzdGFydHxzdG9wKS8udGVzdChlKSYmKHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oXCJhYnNvbHV0ZVwiKSxuLm9mZnNldD10aGlzLnBvc2l0aW9uQWJzKSx0LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLGUsaSxuKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKCl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcImNvbm5lY3RUb1NvcnRhYmxlXCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxuKXt2YXIgcz10LmV4dGVuZCh7fSxpLHtpdGVtOm4uZWxlbWVudH0pO24uc29ydGFibGVzPVtdLHQobi5vcHRpb25zLmNvbm5lY3RUb1NvcnRhYmxlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKS5zb3J0YWJsZShcImluc3RhbmNlXCIpO2kmJiFpLm9wdGlvbnMuZGlzYWJsZWQmJihuLnNvcnRhYmxlcy5wdXNoKGkpLGkucmVmcmVzaFBvc2l0aW9ucygpLGkuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLGUscykpfSl9LHN0b3A6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPXQuZXh0ZW5kKHt9LGkse2l0ZW06bi5lbGVtZW50fSk7bi5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHQuZWFjaChuLnNvcnRhYmxlcyxmdW5jdGlvbigpe3ZhciB0PXRoaXM7dC5pc092ZXI/KHQuaXNPdmVyPTAsbi5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHQuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0Ll9zdG9yZWRDU1M9e3Bvc2l0aW9uOnQucGxhY2Vob2xkZXIuY3NzKFwicG9zaXRpb25cIiksdG9wOnQucGxhY2Vob2xkZXIuY3NzKFwidG9wXCIpLGxlZnQ6dC5wbGFjZWhvbGRlci5jc3MoXCJsZWZ0XCIpfSx0Ll9tb3VzZVN0b3AoZSksdC5vcHRpb25zLmhlbHBlcj10Lm9wdGlvbnMuX2hlbHBlcik6KHQuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0Ll90cmlnZ2VyKFwiZGVhY3RpdmF0ZVwiLGUscykpfSl9LGRyYWc6ZnVuY3Rpb24oZSxpLG4pe3QuZWFjaChuLnNvcnRhYmxlcyxmdW5jdGlvbigpe3ZhciBzPSExLG89dGhpcztvLnBvc2l0aW9uQWJzPW4ucG9zaXRpb25BYnMsby5oZWxwZXJQcm9wb3J0aW9ucz1uLmhlbHBlclByb3BvcnRpb25zLG8ub2Zmc2V0LmNsaWNrPW4ub2Zmc2V0LmNsaWNrLG8uX2ludGVyc2VjdHNXaXRoKG8uY29udGFpbmVyQ2FjaGUpJiYocz0hMCx0LmVhY2gobi5zb3J0YWJsZXMsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbkFicz1uLnBvc2l0aW9uQWJzLHRoaXMuaGVscGVyUHJvcG9ydGlvbnM9bi5oZWxwZXJQcm9wb3J0aW9ucyx0aGlzLm9mZnNldC5jbGljaz1uLm9mZnNldC5jbGljayx0aGlzIT09byYmdGhpcy5faW50ZXJzZWN0c1dpdGgodGhpcy5jb250YWluZXJDYWNoZSkmJnQuY29udGFpbnMoby5lbGVtZW50WzBdLHRoaXMuZWxlbWVudFswXSkmJihzPSExKSxzfSkpLHM/KG8uaXNPdmVyfHwoby5pc092ZXI9MSxuLl9wYXJlbnQ9aS5oZWxwZXIucGFyZW50KCksby5jdXJyZW50SXRlbT1pLmhlbHBlci5hcHBlbmRUbyhvLmVsZW1lbnQpLmRhdGEoXCJ1aS1zb3J0YWJsZS1pdGVtXCIsITApLG8ub3B0aW9ucy5faGVscGVyPW8ub3B0aW9ucy5oZWxwZXIsby5vcHRpb25zLmhlbHBlcj1mdW5jdGlvbigpe3JldHVybiBpLmhlbHBlclswXX0sZS50YXJnZXQ9by5jdXJyZW50SXRlbVswXSxvLl9tb3VzZUNhcHR1cmUoZSwhMCksby5fbW91c2VTdGFydChlLCEwLCEwKSxvLm9mZnNldC5jbGljay50b3A9bi5vZmZzZXQuY2xpY2sudG9wLG8ub2Zmc2V0LmNsaWNrLmxlZnQ9bi5vZmZzZXQuY2xpY2subGVmdCxvLm9mZnNldC5wYXJlbnQubGVmdC09bi5vZmZzZXQucGFyZW50LmxlZnQtby5vZmZzZXQucGFyZW50LmxlZnQsby5vZmZzZXQucGFyZW50LnRvcC09bi5vZmZzZXQucGFyZW50LnRvcC1vLm9mZnNldC5wYXJlbnQudG9wLG4uX3RyaWdnZXIoXCJ0b1NvcnRhYmxlXCIsZSksbi5kcm9wcGVkPW8uZWxlbWVudCx0LmVhY2gobi5zb3J0YWJsZXMsZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKX0pLG4uY3VycmVudEl0ZW09bi5lbGVtZW50LG8uZnJvbU91dHNpZGU9biksby5jdXJyZW50SXRlbSYmKG8uX21vdXNlRHJhZyhlKSxpLnBvc2l0aW9uPW8ucG9zaXRpb24pKTpvLmlzT3ZlciYmKG8uaXNPdmVyPTAsby5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLG8ub3B0aW9ucy5fcmV2ZXJ0PW8ub3B0aW9ucy5yZXZlcnQsby5vcHRpb25zLnJldmVydD0hMSxvLl90cmlnZ2VyKFwib3V0XCIsZSxvLl91aUhhc2gobykpLG8uX21vdXNlU3RvcChlLCEwKSxvLm9wdGlvbnMucmV2ZXJ0PW8ub3B0aW9ucy5fcmV2ZXJ0LG8ub3B0aW9ucy5oZWxwZXI9by5vcHRpb25zLl9oZWxwZXIsby5wbGFjZWhvbGRlciYmby5wbGFjZWhvbGRlci5yZW1vdmUoKSxpLmhlbHBlci5hcHBlbmRUbyhuLl9wYXJlbnQpLG4uX3JlZnJlc2hPZmZzZXRzKGUpLGkucG9zaXRpb249bi5fZ2VuZXJhdGVQb3NpdGlvbihlLCEwKSxuLl90cmlnZ2VyKFwiZnJvbVNvcnRhYmxlXCIsZSksbi5kcm9wcGVkPSExLHQuZWFjaChuLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMucmVmcmVzaFBvc2l0aW9ucygpfSkpfSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJjdXJzb3JcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPXQoXCJib2R5XCIpLG89bi5vcHRpb25zO3MuY3NzKFwiY3Vyc29yXCIpJiYoby5fY3Vyc29yPXMuY3NzKFwiY3Vyc29yXCIpKSxzLmNzcyhcImN1cnNvclwiLG8uY3Vyc29yKX0sc3RvcDpmdW5jdGlvbihlLGksbil7dmFyIHM9bi5vcHRpb25zO3MuX2N1cnNvciYmdChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIscy5fY3Vyc29yKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcIm9wYWNpdHlcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPXQoaS5oZWxwZXIpLG89bi5vcHRpb25zO3MuY3NzKFwib3BhY2l0eVwiKSYmKG8uX29wYWNpdHk9cy5jc3MoXCJvcGFjaXR5XCIpKSxzLmNzcyhcIm9wYWNpdHlcIixvLm9wYWNpdHkpfSxzdG9wOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcz1uLm9wdGlvbnM7cy5fb3BhY2l0eSYmdChpLmhlbHBlcikuY3NzKFwib3BhY2l0eVwiLHMuX29wYWNpdHkpfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwic2Nyb2xsXCIse3N0YXJ0OmZ1bmN0aW9uKHQsZSxpKXtpLnNjcm9sbFBhcmVudE5vdEhpZGRlbnx8KGkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuPWkuaGVscGVyLnNjcm9sbFBhcmVudCghMSkpLGkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdIT09aS5kb2N1bWVudFswXSYmXCJIVE1MXCIhPT1pLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXS50YWdOYW1lJiYoaS5vdmVyZmxvd09mZnNldD1pLnNjcm9sbFBhcmVudE5vdEhpZGRlbi5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPW4ub3B0aW9ucyxvPSExLGE9bi5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0scj1uLmRvY3VtZW50WzBdO2EhPT1yJiZcIkhUTUxcIiE9PWEudGFnTmFtZT8ocy5heGlzJiZcInhcIj09PXMuYXhpc3x8KG4ub3ZlcmZsb3dPZmZzZXQudG9wK2Eub2Zmc2V0SGVpZ2h0LWUucGFnZVk8cy5zY3JvbGxTZW5zaXRpdml0eT9hLnNjcm9sbFRvcD1vPWEuc2Nyb2xsVG9wK3Muc2Nyb2xsU3BlZWQ6ZS5wYWdlWS1uLm92ZXJmbG93T2Zmc2V0LnRvcDxzLnNjcm9sbFNlbnNpdGl2aXR5JiYoYS5zY3JvbGxUb3A9bz1hLnNjcm9sbFRvcC1zLnNjcm9sbFNwZWVkKSkscy5heGlzJiZcInlcIj09PXMuYXhpc3x8KG4ub3ZlcmZsb3dPZmZzZXQubGVmdCthLm9mZnNldFdpZHRoLWUucGFnZVg8cy5zY3JvbGxTZW5zaXRpdml0eT9hLnNjcm9sbExlZnQ9bz1hLnNjcm9sbExlZnQrcy5zY3JvbGxTcGVlZDplLnBhZ2VYLW4ub3ZlcmZsb3dPZmZzZXQubGVmdDxzLnNjcm9sbFNlbnNpdGl2aXR5JiYoYS5zY3JvbGxMZWZ0PW89YS5zY3JvbGxMZWZ0LXMuc2Nyb2xsU3BlZWQpKSk6KHMuYXhpcyYmXCJ4XCI9PT1zLmF4aXN8fChlLnBhZ2VZLXQocikuc2Nyb2xsVG9wKCk8cy5zY3JvbGxTZW5zaXRpdml0eT9vPXQocikuc2Nyb2xsVG9wKHQocikuc2Nyb2xsVG9wKCktcy5zY3JvbGxTcGVlZCk6dCh3aW5kb3cpLmhlaWdodCgpLShlLnBhZ2VZLXQocikuc2Nyb2xsVG9wKCkpPHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihvPXQocikuc2Nyb2xsVG9wKHQocikuc2Nyb2xsVG9wKCkrcy5zY3JvbGxTcGVlZCkpKSxzLmF4aXMmJlwieVwiPT09cy5heGlzfHwoZS5wYWdlWC10KHIpLnNjcm9sbExlZnQoKTxzLnNjcm9sbFNlbnNpdGl2aXR5P289dChyKS5zY3JvbGxMZWZ0KHQocikuc2Nyb2xsTGVmdCgpLXMuc2Nyb2xsU3BlZWQpOnQod2luZG93KS53aWR0aCgpLShlLnBhZ2VYLXQocikuc2Nyb2xsTGVmdCgpKTxzLnNjcm9sbFNlbnNpdGl2aXR5JiYobz10KHIpLnNjcm9sbExlZnQodChyKS5zY3JvbGxMZWZ0KCkrcy5zY3JvbGxTcGVlZCkpKSksITEhPT1vJiZ0LnVpLmRkbWFuYWdlciYmIXMuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMobixlKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInNuYXBcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPW4ub3B0aW9ucztuLnNuYXBFbGVtZW50cz1bXSx0KHMuc25hcC5jb25zdHJ1Y3RvciE9PVN0cmluZz9zLnNuYXAuaXRlbXN8fFwiOmRhdGEodWktZHJhZ2dhYmxlKVwiOnMuc25hcCkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksaT1lLm9mZnNldCgpO3RoaXMhPT1uLmVsZW1lbnRbMF0mJm4uc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpLHRvcDppLnRvcCxsZWZ0OmkubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG8sYSxyLGwsaCxjLHUsZCxwLGY9bi5vcHRpb25zLGc9Zi5zbmFwVG9sZXJhbmNlLG09aS5vZmZzZXQubGVmdCx2PW0rbi5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxiPWkub2Zmc2V0LnRvcCxfPWIrbi5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKGQ9bi5zbmFwRWxlbWVudHMubGVuZ3RoLTE7ZD49MDtkLS0paD0obD1uLnNuYXBFbGVtZW50c1tkXS5sZWZ0LW4ubWFyZ2lucy5sZWZ0KStuLnNuYXBFbGVtZW50c1tkXS53aWR0aCx1PShjPW4uc25hcEVsZW1lbnRzW2RdLnRvcC1uLm1hcmdpbnMudG9wKStuLnNuYXBFbGVtZW50c1tkXS5oZWlnaHQsdjxsLWd8fG0+aCtnfHxfPGMtZ3x8Yj51K2d8fCF0LmNvbnRhaW5zKG4uc25hcEVsZW1lbnRzW2RdLml0ZW0ub3duZXJEb2N1bWVudCxuLnNuYXBFbGVtZW50c1tkXS5pdGVtKT8obi5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmcmJm4ub3B0aW9ucy5zbmFwLnJlbGVhc2UmJm4ub3B0aW9ucy5zbmFwLnJlbGVhc2UuY2FsbChuLmVsZW1lbnQsZSx0LmV4dGVuZChuLl91aUhhc2goKSx7c25hcEl0ZW06bi5zbmFwRWxlbWVudHNbZF0uaXRlbX0pKSxuLnNuYXBFbGVtZW50c1tkXS5zbmFwcGluZz0hMSk6KFwiaW5uZXJcIiE9PWYuc25hcE1vZGUmJihzPU1hdGguYWJzKGMtXyk8PWcsbz1NYXRoLmFicyh1LWIpPD1nLGE9TWF0aC5hYnMobC12KTw9ZyxyPU1hdGguYWJzKGgtbSk8PWcscyYmKGkucG9zaXRpb24udG9wPW4uX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOmMtbi5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi50b3A9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6dSxsZWZ0OjB9KS50b3ApLGEmJihpLnBvc2l0aW9uLmxlZnQ9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6MCxsZWZ0Omwtbi5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6MCxsZWZ0Omh9KS5sZWZ0KSkscD1zfHxvfHxhfHxyLFwib3V0ZXJcIiE9PWYuc25hcE1vZGUmJihzPU1hdGguYWJzKGMtYik8PWcsbz1NYXRoLmFicyh1LV8pPD1nLGE9TWF0aC5hYnMobC1tKTw9ZyxyPU1hdGguYWJzKGgtdik8PWcscyYmKGkucG9zaXRpb24udG9wPW4uX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOmMsbGVmdDowfSkudG9wKSxvJiYoaS5wb3NpdGlvbi50b3A9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6dS1uLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3ApLGEmJihpLnBvc2l0aW9uLmxlZnQ9bi5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6MCxsZWZ0Omx9KS5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PW4uX2NvbnZlcnRQb3NpdGlvblRvKFwicmVsYXRpdmVcIix7dG9wOjAsbGVmdDpoLW4uaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0KSksIW4uc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nJiYoc3x8b3x8YXx8cnx8cCkmJm4ub3B0aW9ucy5zbmFwLnNuYXAmJm4ub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChuLmVsZW1lbnQsZSx0LmV4dGVuZChuLl91aUhhc2goKSx7c25hcEl0ZW06bi5zbmFwRWxlbWVudHNbZF0uaXRlbX0pKSxuLnNuYXBFbGVtZW50c1tkXS5zbmFwcGluZz1zfHxvfHxhfHxyfHxwKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcInN0YWNrXCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxuKXt2YXIgcyxvPW4ub3B0aW9ucyxhPXQubWFrZUFycmF5KHQoby5zdGFjaykpLnNvcnQoZnVuY3Rpb24oZSxpKXtyZXR1cm4ocGFyc2VJbnQodChlKS5jc3MoXCJ6SW5kZXhcIiksMTApfHwwKS0ocGFyc2VJbnQodChpKS5jc3MoXCJ6SW5kZXhcIiksMTApfHwwKX0pO2EubGVuZ3RoJiYocz1wYXJzZUludCh0KGFbMF0pLmNzcyhcInpJbmRleFwiKSwxMCl8fDAsdChhKS5lYWNoKGZ1bmN0aW9uKGUpe3QodGhpcykuY3NzKFwiekluZGV4XCIscytlKX0pLHRoaXMuY3NzKFwiekluZGV4XCIscythLmxlbmd0aCkpfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwiekluZGV4XCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSxuKXt2YXIgcz10KGkuaGVscGVyKSxvPW4ub3B0aW9ucztzLmNzcyhcInpJbmRleFwiKSYmKG8uX3pJbmRleD1zLmNzcyhcInpJbmRleFwiKSkscy5jc3MoXCJ6SW5kZXhcIixvLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPW4ub3B0aW9ucztzLl96SW5kZXgmJnQoaS5oZWxwZXIpLmNzcyhcInpJbmRleFwiLHMuX3pJbmRleCl9fSksdC51aS5kcmFnZ2FibGUsdC53aWRnZXQoXCJ1aS5yZXNpemFibGVcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJyZXNpemVcIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOlwic2xvd1wiLGFuaW1hdGVFYXNpbmc6XCJzd2luZ1wiLGFzcGVjdFJhdGlvOiExLGF1dG9IaWRlOiExLGNsYXNzZXM6e1widWktcmVzaXphYmxlLXNlXCI6XCJ1aS1pY29uIHVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlXCJ9LGNvbnRhaW5tZW50OiExLGdob3N0OiExLGdyaWQ6ITEsaGFuZGxlczpcImUscyxzZVwiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6OTAscmVzaXplOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9udW06ZnVuY3Rpb24odCl7cmV0dXJuIHBhcnNlRmxvYXQodCl8fDB9LF9pc051bWJlcjpmdW5jdGlvbih0KXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdCh0KSl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oZSxpKXtpZihcImhpZGRlblwiPT09dChlKS5jc3MoXCJvdmVyZmxvd1wiKSlyZXR1cm4hMTt2YXIgbj1pJiZcImxlZnRcIj09PWk/XCJzY3JvbGxMZWZ0XCI6XCJzY3JvbGxUb3BcIixzPSExO3JldHVybiBlW25dPjB8fChlW25dPTEscz1lW25dPjAsZVtuXT0wLHMpfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMsbj10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktcmVzaXphYmxlXCIpLHQuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIWkuYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86aS5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6aS5oZWxwZXJ8fGkuZ2hvc3R8fGkuYW5pbWF0ZT9pLmhlbHBlcnx8XCJ1aS1yZXNpemFibGUtaGVscGVyXCI6bnVsbH0pLHRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvXihjYW52YXN8dGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbnxpbWcpJC9pKSYmKHRoaXMuZWxlbWVudC53cmFwKHQoXCI8ZGl2IGNsYXNzPSd1aS13cmFwcGVyJyBzdHlsZT0nb3ZlcmZsb3c6IGhpZGRlbjsnPjwvZGl2PlwiKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSx3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSx0b3A6dGhpcy5lbGVtZW50LmNzcyhcInRvcFwiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoXCJsZWZ0XCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YShcInVpLXJlc2l6YWJsZVwiLHRoaXMuZWxlbWVudC5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyPSEwLGU9e21hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5Ub3BcIiksbWFyZ2luUmlnaHQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luUmlnaHRcIiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpbkxlZnRcIil9LHRoaXMuZWxlbWVudC5jc3MoZSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luXCIsMCksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJyZXNpemVcIixcIm5vbmVcIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246XCJzdGF0aWNcIix6b29tOjEsZGlzcGxheTpcImJsb2NrXCJ9KSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKGUpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuX3NldHVwSGFuZGxlcygpLGkuYXV0b0hpZGUmJnQodGhpcy5lbGVtZW50KS5vbihcIm1vdXNlZW50ZXJcIixmdW5jdGlvbigpe2kuZGlzYWJsZWR8fChuLl9yZW1vdmVDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSxuLl9oYW5kbGVzLnNob3coKSl9KS5vbihcIm1vdXNlbGVhdmVcIixmdW5jdGlvbigpe2kuZGlzYWJsZWR8fG4ucmVzaXppbmd8fChuLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSxuLl9oYW5kbGVzLmhpZGUoKSl9KSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTt2YXIgZSxpPWZ1bmN0aW9uKGUpe3QoZSkucmVtb3ZlRGF0YShcInJlc2l6YWJsZVwiKS5yZW1vdmVEYXRhKFwidWktcmVzaXphYmxlXCIpLm9mZihcIi5yZXNpemFibGVcIikuZmluZChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIpLnJlbW92ZSgpfTtyZXR1cm4gdGhpcy5lbGVtZW50SXNXcmFwcGVyJiYoaSh0aGlzLmVsZW1lbnQpLGU9dGhpcy5lbGVtZW50LHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246ZS5jc3MoXCJwb3NpdGlvblwiKSx3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpLHRvcDplLmNzcyhcInRvcFwiKSxsZWZ0OmUuY3NzKFwibGVmdFwiKX0pLmluc2VydEFmdGVyKGUpLGUucmVtb3ZlKCkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZSksaSh0aGlzLm9yaWdpbmFsRWxlbWVudCksdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3N3aXRjaCh0aGlzLl9zdXBlcih0LGUpLHQpe2Nhc2VcImhhbmRsZXNcIjp0aGlzLl9yZW1vdmVIYW5kbGVzKCksdGhpcy5fc2V0dXBIYW5kbGVzKCl9fSxfc2V0dXBIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIGUsaSxuLHMsbyxhPXRoaXMub3B0aW9ucyxyPXRoaXM7aWYodGhpcy5oYW5kbGVzPWEuaGFuZGxlc3x8KHQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiLHRoaXMuZWxlbWVudCkubGVuZ3RoP3tuOlwiLnVpLXJlc2l6YWJsZS1uXCIsZTpcIi51aS1yZXNpemFibGUtZVwiLHM6XCIudWktcmVzaXphYmxlLXNcIix3OlwiLnVpLXJlc2l6YWJsZS13XCIsc2U6XCIudWktcmVzaXphYmxlLXNlXCIsc3c6XCIudWktcmVzaXphYmxlLXN3XCIsbmU6XCIudWktcmVzaXphYmxlLW5lXCIsbnc6XCIudWktcmVzaXphYmxlLW53XCJ9OlwiZSxzLHNlXCIpLHRoaXMuX2hhbmRsZXM9dCgpLHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3Rvcj09PVN0cmluZylmb3IoXCJhbGxcIj09PXRoaXMuaGFuZGxlcyYmKHRoaXMuaGFuZGxlcz1cIm4sZSxzLHcsc2Usc3csbmUsbndcIiksbj10aGlzLmhhbmRsZXMuc3BsaXQoXCIsXCIpLHRoaXMuaGFuZGxlcz17fSxpPTA7aTxuLmxlbmd0aDtpKyspcz1cInVpLXJlc2l6YWJsZS1cIisoZT10LnRyaW0obltpXSkpLG89dChcIjxkaXY+XCIpLHRoaXMuX2FkZENsYXNzKG8sXCJ1aS1yZXNpemFibGUtaGFuZGxlIFwiK3MpLG8uY3NzKHt6SW5kZXg6YS56SW5kZXh9KSx0aGlzLmhhbmRsZXNbZV09XCIudWktcmVzaXphYmxlLVwiK2UsdGhpcy5lbGVtZW50LmFwcGVuZChvKTt0aGlzLl9yZW5kZXJBeGlzPWZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvO2ZvcihpIGluIGU9ZXx8dGhpcy5lbGVtZW50LHRoaXMuaGFuZGxlcyl0aGlzLmhhbmRsZXNbaV0uY29uc3RydWN0b3I9PT1TdHJpbmc/dGhpcy5oYW5kbGVzW2ldPXRoaXMuZWxlbWVudC5jaGlsZHJlbih0aGlzLmhhbmRsZXNbaV0pLmZpcnN0KCkuc2hvdygpOih0aGlzLmhhbmRsZXNbaV0uanF1ZXJ5fHx0aGlzLmhhbmRsZXNbaV0ubm9kZVR5cGUpJiYodGhpcy5oYW5kbGVzW2ldPXQodGhpcy5oYW5kbGVzW2ldKSx0aGlzLl9vbih0aGlzLmhhbmRsZXNbaV0se21vdXNlZG93bjpyLl9tb3VzZURvd259KSksdGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvXih0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9uKSQvaSkmJihuPXQodGhpcy5oYW5kbGVzW2ldLHRoaXMuZWxlbWVudCksbz0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KGkpP24ub3V0ZXJIZWlnaHQoKTpuLm91dGVyV2lkdGgoKSxzPVtcInBhZGRpbmdcIiwvbmV8bnd8bi8udGVzdChpKT9cIlRvcFwiOi9zZXxzd3xzLy50ZXN0KGkpP1wiQm90dG9tXCI6L15lJC8udGVzdChpKT9cIlJpZ2h0XCI6XCJMZWZ0XCJdLmpvaW4oXCJcIiksZS5jc3MocyxvKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLl9oYW5kbGVzPXRoaXMuX2hhbmRsZXMuYWRkKHRoaXMuaGFuZGxlc1tpXSl9LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPXRoaXMuX2hhbmRsZXMuYWRkKHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIikpLHRoaXMuX2hhbmRsZXMuZGlzYWJsZVNlbGVjdGlvbigpLHRoaXMuX2hhbmRsZXMub24oXCJtb3VzZW92ZXJcIixmdW5jdGlvbigpe3IucmVzaXppbmd8fCh0aGlzLmNsYXNzTmFtZSYmKG89dGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSkpLHIuYXhpcz1vJiZvWzFdP29bMV06XCJzZVwiKX0pLGEuYXV0b0hpZGUmJih0aGlzLl9oYW5kbGVzLmhpZGUoKSx0aGlzLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1hdXRvaGlkZVwiKSl9LF9yZW1vdmVIYW5kbGVzOmZ1bmN0aW9uKCl7dGhpcy5faGFuZGxlcy5yZW1vdmUoKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaSxuLHM9ITE7Zm9yKGkgaW4gdGhpcy5oYW5kbGVzKSgobj10KHRoaXMuaGFuZGxlc1tpXSlbMF0pPT09ZS50YXJnZXR8fHQuY29udGFpbnMobixlLnRhcmdldCkpJiYocz0hMCk7cmV0dXJuIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmc30sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG89dGhpcy5vcHRpb25zLGE9dGhpcy5lbGVtZW50O3JldHVybiB0aGlzLnJlc2l6aW5nPSEwLHRoaXMuX3JlbmRlclByb3h5KCksaT10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKFwibGVmdFwiKSksbj10aGlzLl9udW0odGhpcy5oZWxwZXIuY3NzKFwidG9wXCIpKSxvLmNvbnRhaW5tZW50JiYoaSs9dChvLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAsbis9dChvLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDppLHRvcDpufSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDp0aGlzLmhlbHBlci53aWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5oZWlnaHQoKX06e3dpZHRoOmEud2lkdGgoKSxoZWlnaHQ6YS5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDphLm91dGVyV2lkdGgoKSxoZWlnaHQ6YS5vdXRlckhlaWdodCgpfTp7d2lkdGg6YS53aWR0aCgpLGhlaWdodDphLmhlaWdodCgpfSx0aGlzLnNpemVEaWZmPXt3aWR0aDphLm91dGVyV2lkdGgoKS1hLndpZHRoKCksaGVpZ2h0OmEub3V0ZXJIZWlnaHQoKS1hLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e2xlZnQ6aSx0b3A6bn0sdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb249e2xlZnQ6ZS5wYWdlWCx0b3A6ZS5wYWdlWX0sdGhpcy5hc3BlY3RSYXRpbz1cIm51bWJlclwiPT10eXBlb2Ygby5hc3BlY3RSYXRpbz9vLmFzcGVjdFJhdGlvOnRoaXMub3JpZ2luYWxTaXplLndpZHRoL3RoaXMub3JpZ2luYWxTaXplLmhlaWdodHx8MSxzPXQoXCIudWktcmVzaXphYmxlLVwiK3RoaXMuYXhpcykuY3NzKFwiY3Vyc29yXCIpLHQoXCJib2R5XCIpLmNzcyhcImN1cnNvclwiLFwiYXV0b1wiPT09cz90aGlzLmF4aXMrXCItcmVzaXplXCI6cyksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiksdGhpcy5fcHJvcGFnYXRlKFwic3RhcnRcIixlKSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgaSxuLHM9dGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb24sbz10aGlzLmF4aXMsYT1lLnBhZ2VYLXMubGVmdHx8MCxyPWUucGFnZVktcy50b3B8fDAsbD10aGlzLl9jaGFuZ2Vbb107cmV0dXJuIHRoaXMuX3VwZGF0ZVByZXZQcm9wZXJ0aWVzKCksISFsJiYoaT1sLmFwcGx5KHRoaXMsW2UsYSxyXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoZS5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHxlLnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSxlKSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLGUpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZShcInJlc2l6ZVwiLGUpLG49dGhpcy5fYXBwbHlDaGFuZ2VzKCksIXRoaXMuX2hlbHBlciYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCksdC5pc0VtcHR5T2JqZWN0KG4pfHwodGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSx0aGlzLl90cmlnZ2VyKFwicmVzaXplXCIsZSx0aGlzLnVpKCkpLHRoaXMuX2FwcGx5Q2hhbmdlcygpKSwhMSl9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7dGhpcy5yZXNpemluZz0hMTt2YXIgaSxuLHMsbyxhLHIsbCxoPXRoaXMub3B0aW9ucyxjPXRoaXM7cmV0dXJuIHRoaXMuX2hlbHBlciYmKHM9KG49KGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cykubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KGlbMF0ubm9kZU5hbWUpKSYmdGhpcy5faGFzU2Nyb2xsKGlbMF0sXCJsZWZ0XCIpPzA6Yy5zaXplRGlmZi5oZWlnaHQsbz1uPzA6Yy5zaXplRGlmZi53aWR0aCxhPXt3aWR0aDpjLmhlbHBlci53aWR0aCgpLW8saGVpZ2h0OmMuaGVscGVyLmhlaWdodCgpLXN9LHI9cGFyc2VGbG9hdChjLmVsZW1lbnQuY3NzKFwibGVmdFwiKSkrKGMucG9zaXRpb24ubGVmdC1jLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsbD1wYXJzZUZsb2F0KGMuZWxlbWVudC5jc3MoXCJ0b3BcIikpKyhjLnBvc2l0aW9uLnRvcC1jLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbCxoLmFuaW1hdGV8fHRoaXMuZWxlbWVudC5jc3ModC5leHRlbmQoYSx7dG9wOmwsbGVmdDpyfSkpLGMuaGVscGVyLmhlaWdodChjLnNpemUuaGVpZ2h0KSxjLmhlbHBlci53aWR0aChjLnNpemUud2lkdGgpLHRoaXMuX2hlbHBlciYmIWguYW5pbWF0ZSYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsXCJhdXRvXCIpLHRoaXMuX3JlbW92ZUNsYXNzKFwidWktcmVzaXphYmxlLXJlc2l6aW5nXCIpLHRoaXMuX3Byb3BhZ2F0ZShcInN0b3BcIixlKSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlUHJldlByb3BlcnRpZXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZQb3NpdGlvbj17dG9wOnRoaXMucG9zaXRpb24udG9wLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0fSx0aGlzLnByZXZTaXplPXt3aWR0aDp0aGlzLnNpemUud2lkdGgsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHR9fSxfYXBwbHlDaGFuZ2VzOmZ1bmN0aW9uKCl7dmFyIHQ9e307cmV0dXJuIHRoaXMucG9zaXRpb24udG9wIT09dGhpcy5wcmV2UG9zaXRpb24udG9wJiYodC50b3A9dGhpcy5wb3NpdGlvbi50b3ArXCJweFwiKSx0aGlzLnBvc2l0aW9uLmxlZnQhPT10aGlzLnByZXZQb3NpdGlvbi5sZWZ0JiYodC5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIpLHRoaXMuc2l6ZS53aWR0aCE9PXRoaXMucHJldlNpemUud2lkdGgmJih0LndpZHRoPXRoaXMuc2l6ZS53aWR0aCtcInB4XCIpLHRoaXMuc2l6ZS5oZWlnaHQhPT10aGlzLnByZXZTaXplLmhlaWdodCYmKHQuaGVpZ2h0PXRoaXMuc2l6ZS5oZWlnaHQrXCJweFwiKSx0aGlzLmhlbHBlci5jc3ModCksdH0sX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOmZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLG8sYT10aGlzLm9wdGlvbnM7bz17bWluV2lkdGg6dGhpcy5faXNOdW1iZXIoYS5taW5XaWR0aCk/YS5taW5XaWR0aDowLG1heFdpZHRoOnRoaXMuX2lzTnVtYmVyKGEubWF4V2lkdGgpP2EubWF4V2lkdGg6MS8wLG1pbkhlaWdodDp0aGlzLl9pc051bWJlcihhLm1pbkhlaWdodCk/YS5taW5IZWlnaHQ6MCxtYXhIZWlnaHQ6dGhpcy5faXNOdW1iZXIoYS5tYXhIZWlnaHQpP2EubWF4SGVpZ2h0OjEvMH0sKHRoaXMuX2FzcGVjdFJhdGlvfHx0KSYmKGU9by5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxuPW8ubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxpPW8ubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8scz1vLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sZT5vLm1pbldpZHRoJiYoby5taW5XaWR0aD1lKSxuPm8ubWluSGVpZ2h0JiYoby5taW5IZWlnaHQ9biksaTxvLm1heFdpZHRoJiYoby5tYXhXaWR0aD1pKSxzPG8ubWF4SGVpZ2h0JiYoby5tYXhIZWlnaHQ9cykpLHRoaXMuX3ZCb3VuZGFyaWVzPW99LF91cGRhdGVDYWNoZTpmdW5jdGlvbih0KXt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLl9pc051bWJlcih0LmxlZnQpJiYodGhpcy5wb3NpdGlvbi5sZWZ0PXQubGVmdCksdGhpcy5faXNOdW1iZXIodC50b3ApJiYodGhpcy5wb3NpdGlvbi50b3A9dC50b3ApLHRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9dC5oZWlnaHQpLHRoaXMuX2lzTnVtYmVyKHQud2lkdGgpJiYodGhpcy5zaXplLndpZHRoPXQud2lkdGgpfSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wb3NpdGlvbixpPXRoaXMuc2l6ZSxuPXRoaXMuYXhpcztyZXR1cm4gdGhpcy5faXNOdW1iZXIodC5oZWlnaHQpP3Qud2lkdGg9dC5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbzp0aGlzLl9pc051bWJlcih0LndpZHRoKSYmKHQuaGVpZ2h0PXQud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksXCJzd1wiPT09biYmKHQubGVmdD1lLmxlZnQrKGkud2lkdGgtdC53aWR0aCksdC50b3A9bnVsbCksXCJud1wiPT09biYmKHQudG9wPWUudG9wKyhpLmhlaWdodC10LmhlaWdodCksdC5sZWZ0PWUubGVmdCsoaS53aWR0aC10LndpZHRoKSksdH0sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3ZCb3VuZGFyaWVzLGk9dGhpcy5heGlzLG49dGhpcy5faXNOdW1iZXIodC53aWR0aCkmJmUubWF4V2lkdGgmJmUubWF4V2lkdGg8dC53aWR0aCxzPXRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KSYmZS5tYXhIZWlnaHQmJmUubWF4SGVpZ2h0PHQuaGVpZ2h0LG89dGhpcy5faXNOdW1iZXIodC53aWR0aCkmJmUubWluV2lkdGgmJmUubWluV2lkdGg+dC53aWR0aCxhPXRoaXMuX2lzTnVtYmVyKHQuaGVpZ2h0KSYmZS5taW5IZWlnaHQmJmUubWluSGVpZ2h0PnQuaGVpZ2h0LHI9dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrdGhpcy5vcmlnaW5hbFNpemUud2lkdGgsbD10aGlzLm9yaWdpbmFsUG9zaXRpb24udG9wK3RoaXMub3JpZ2luYWxTaXplLmhlaWdodCxoPS9zd3xud3x3Ly50ZXN0KGkpLGM9L253fG5lfG4vLnRlc3QoaSk7cmV0dXJuIG8mJih0LndpZHRoPWUubWluV2lkdGgpLGEmJih0LmhlaWdodD1lLm1pbkhlaWdodCksbiYmKHQud2lkdGg9ZS5tYXhXaWR0aCkscyYmKHQuaGVpZ2h0PWUubWF4SGVpZ2h0KSxvJiZoJiYodC5sZWZ0PXItZS5taW5XaWR0aCksbiYmaCYmKHQubGVmdD1yLWUubWF4V2lkdGgpLGEmJmMmJih0LnRvcD1sLWUubWluSGVpZ2h0KSxzJiZjJiYodC50b3A9bC1lLm1heEhlaWdodCksdC53aWR0aHx8dC5oZWlnaHR8fHQubGVmdHx8IXQudG9wP3Qud2lkdGh8fHQuaGVpZ2h0fHx0LnRvcHx8IXQubGVmdHx8KHQubGVmdD1udWxsKTp0LnRvcD1udWxsLHR9LF9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnM6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAsaT1bXSxuPVt0LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLHQuY3NzKFwiYm9yZGVyUmlnaHRXaWR0aFwiKSx0LmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLHQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpXSxzPVt0LmNzcyhcInBhZGRpbmdUb3BcIiksdC5jc3MoXCJwYWRkaW5nUmlnaHRcIiksdC5jc3MoXCJwYWRkaW5nQm90dG9tXCIpLHQuY3NzKFwicGFkZGluZ0xlZnRcIildO2U8NDtlKyspaVtlXT1wYXJzZUZsb2F0KG5bZV0pfHwwLGlbZV0rPXBhcnNlRmxvYXQoc1tlXSl8fDA7cmV0dXJue2hlaWdodDppWzBdK2lbMl0sd2lkdGg6aVsxXStpWzNdfX0sX3Byb3BvcnRpb25hbGx5UmVzaXplOmZ1bmN0aW9uKCl7aWYodGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5sZW5ndGgpZm9yKHZhciB0LGU9MCxpPXRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQ7ZTx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aDtlKyspdD10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW2VdLHRoaXMub3V0ZXJEaW1lbnNpb25zfHwodGhpcy5vdXRlckRpbWVuc2lvbnM9dGhpcy5fZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zKHQpKSx0LmNzcyh7aGVpZ2h0OmkuaGVpZ2h0KCktdGhpcy5vdXRlckRpbWVuc2lvbnMuaGVpZ2h0fHwwLHdpZHRoOmkud2lkdGgoKS10aGlzLm91dGVyRGltZW5zaW9ucy53aWR0aHx8MH0pfSxfcmVuZGVyUHJveHk6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQsaT10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50T2Zmc2V0PWUub2Zmc2V0KCksdGhpcy5faGVscGVyPyh0aGlzLmhlbHBlcj10aGlzLmhlbHBlcnx8dChcIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcix0aGlzLl9oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkscG9zaXRpb246XCJhYnNvbHV0ZVwiLGxlZnQ6dGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQrXCJweFwiLHRvcDp0aGlzLmVsZW1lbnRPZmZzZXQudG9wK1wicHhcIix6SW5kZXg6KytpLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKFwiYm9keVwiKS5kaXNhYmxlU2VsZWN0aW9uKCkpOnRoaXMuaGVscGVyPXRoaXMuZWxlbWVudH0sX2NoYW5nZTp7ZTpmdW5jdGlvbih0LGUpe3JldHVybnt3aWR0aDp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCtlfX0sdzpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMub3JpZ2luYWxTaXplO3JldHVybntsZWZ0OnRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K2Usd2lkdGg6aS53aWR0aC1lfX0sbjpmdW5jdGlvbih0LGUsaSl7dmFyIG49dGhpcy5vcmlnaW5hbFNpemU7cmV0dXJue3RvcDp0aGlzLm9yaWdpbmFsUG9zaXRpb24udG9wK2ksaGVpZ2h0Om4uaGVpZ2h0LWl9fSxzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtpfX0sc2U6ZnVuY3Rpb24oZSxpLG4pe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbZSxpLG5dKSl9LHN3OmZ1bmN0aW9uKGUsaSxuKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW2UsaSxuXSkpfSxuZTpmdW5jdGlvbihlLGksbil7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtlLGksbl0pKX0sbnc6ZnVuY3Rpb24oZSxpLG4pe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZSxpLG5dKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKGUsaSl7dC51aS5wbHVnaW4uY2FsbCh0aGlzLGUsW2ksdGhpcy51aSgpXSksXCJyZXNpemVcIiE9PWUmJnRoaXMuX3RyaWdnZXIoZSxpLHRoaXMudWkoKSl9LHBsdWdpbnM6e30sdWk6ZnVuY3Rpb24oKXtyZXR1cm57b3JpZ2luYWxFbGVtZW50OnRoaXMub3JpZ2luYWxFbGVtZW50LGVsZW1lbnQ6dGhpcy5lbGVtZW50LGhlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLHNpemU6dGhpcy5zaXplLG9yaWdpbmFsU2l6ZTp0aGlzLm9yaWdpbmFsU2l6ZSxvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbn19fSksdC51aS5wbHVnaW4uYWRkKFwicmVzaXphYmxlXCIsXCJhbmltYXRlXCIse3N0b3A6ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxuPWkub3B0aW9ucyxzPWkuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsbz1zLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChzWzBdLm5vZGVOYW1lKSxhPW8mJmkuX2hhc1Njcm9sbChzWzBdLFwibGVmdFwiKT8wOmkuc2l6ZURpZmYuaGVpZ2h0LHI9bz8wOmkuc2l6ZURpZmYud2lkdGgsbD17d2lkdGg6aS5zaXplLndpZHRoLXIsaGVpZ2h0Omkuc2l6ZS5oZWlnaHQtYX0saD1wYXJzZUZsb2F0KGkuZWxlbWVudC5jc3MoXCJsZWZ0XCIpKSsoaS5wb3NpdGlvbi5sZWZ0LWkub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxjPXBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcInRvcFwiKSkrKGkucG9zaXRpb24udG9wLWkub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsO2kuZWxlbWVudC5hbmltYXRlKHQuZXh0ZW5kKGwsYyYmaD97dG9wOmMsbGVmdDpofTp7fSkse2R1cmF0aW9uOm4uYW5pbWF0ZUR1cmF0aW9uLGVhc2luZzpuLmFuaW1hdGVFYXNpbmcsc3RlcDpmdW5jdGlvbigpe3ZhciBuPXt3aWR0aDpwYXJzZUZsb2F0KGkuZWxlbWVudC5jc3MoXCJ3aWR0aFwiKSksaGVpZ2h0OnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImhlaWdodFwiKSksdG9wOnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcInRvcFwiKSksbGVmdDpwYXJzZUZsb2F0KGkuZWxlbWVudC5jc3MoXCJsZWZ0XCIpKX07cyYmcy5sZW5ndGgmJnQoc1swXSkuY3NzKHt3aWR0aDpuLndpZHRoLGhlaWdodDpuLmhlaWdodH0pLGkuX3VwZGF0ZUNhY2hlKG4pLGkuX3Byb3BhZ2F0ZShcInJlc2l6ZVwiLGUpfX0pfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiY29udGFpbm1lbnRcIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZSxpLG4scyxvLGEscixsPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksaD1sLm9wdGlvbnMsYz1sLmVsZW1lbnQsdT1oLmNvbnRhaW5tZW50LGQ9dSBpbnN0YW5jZW9mIHQ/dS5nZXQoMCk6L3BhcmVudC8udGVzdCh1KT9jLnBhcmVudCgpLmdldCgwKTp1O2QmJihsLmNvbnRhaW5lckVsZW1lbnQ9dChkKSwvZG9jdW1lbnQvLnRlc3QodSl8fHU9PT1kb2N1bWVudD8obC5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0sbC5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxsLnBhcmVudERhdGE9e2VsZW1lbnQ6dChkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOnQoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OnQoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fSk6KGU9dChkKSxpPVtdLHQoW1wiVG9wXCIsXCJSaWdodFwiLFwiTGVmdFwiLFwiQm90dG9tXCJdKS5lYWNoKGZ1bmN0aW9uKHQsbil7aVt0XT1sLl9udW0oZS5jc3MoXCJwYWRkaW5nXCIrbikpfSksbC5jb250YWluZXJPZmZzZXQ9ZS5vZmZzZXQoKSxsLmNvbnRhaW5lclBvc2l0aW9uPWUucG9zaXRpb24oKSxsLmNvbnRhaW5lclNpemU9e2hlaWdodDplLmlubmVySGVpZ2h0KCktaVszXSx3aWR0aDplLmlubmVyV2lkdGgoKS1pWzFdfSxuPWwuY29udGFpbmVyT2Zmc2V0LHM9bC5jb250YWluZXJTaXplLmhlaWdodCxvPWwuY29udGFpbmVyU2l6ZS53aWR0aCxhPWwuX2hhc1Njcm9sbChkLFwibGVmdFwiKT9kLnNjcm9sbFdpZHRoOm8scj1sLl9oYXNTY3JvbGwoZCk/ZC5zY3JvbGxIZWlnaHQ6cyxsLnBhcmVudERhdGE9e2VsZW1lbnQ6ZCxsZWZ0Om4ubGVmdCx0b3A6bi50b3Asd2lkdGg6YSxoZWlnaHQ6cn0pKX0scmVzaXplOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvLGE9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxyPWEub3B0aW9ucyxsPWEuY29udGFpbmVyT2Zmc2V0LGg9YS5wb3NpdGlvbixjPWEuX2FzcGVjdFJhdGlvfHxlLnNoaWZ0S2V5LHU9e3RvcDowLGxlZnQ6MH0sZD1hLmNvbnRhaW5lckVsZW1lbnQscD0hMDtkWzBdIT09ZG9jdW1lbnQmJi9zdGF0aWMvLnRlc3QoZC5jc3MoXCJwb3NpdGlvblwiKSkmJih1PWwpLGgubGVmdDwoYS5faGVscGVyP2wubGVmdDowKSYmKGEuc2l6ZS53aWR0aD1hLnNpemUud2lkdGgrKGEuX2hlbHBlcj9hLnBvc2l0aW9uLmxlZnQtbC5sZWZ0OmEucG9zaXRpb24ubGVmdC11LmxlZnQpLGMmJihhLnNpemUuaGVpZ2h0PWEuc2l6ZS53aWR0aC9hLmFzcGVjdFJhdGlvLHA9ITEpLGEucG9zaXRpb24ubGVmdD1yLmhlbHBlcj9sLmxlZnQ6MCksaC50b3A8KGEuX2hlbHBlcj9sLnRvcDowKSYmKGEuc2l6ZS5oZWlnaHQ9YS5zaXplLmhlaWdodCsoYS5faGVscGVyP2EucG9zaXRpb24udG9wLWwudG9wOmEucG9zaXRpb24udG9wKSxjJiYoYS5zaXplLndpZHRoPWEuc2l6ZS5oZWlnaHQqYS5hc3BlY3RSYXRpbyxwPSExKSxhLnBvc2l0aW9uLnRvcD1hLl9oZWxwZXI/bC50b3A6MCkscz1hLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT09YS5lbGVtZW50LnBhcmVudCgpLmdldCgwKSxvPS9yZWxhdGl2ZXxhYnNvbHV0ZS8udGVzdChhLmNvbnRhaW5lckVsZW1lbnQuY3NzKFwicG9zaXRpb25cIikpLHMmJm8/KGEub2Zmc2V0LmxlZnQ9YS5wYXJlbnREYXRhLmxlZnQrYS5wb3NpdGlvbi5sZWZ0LGEub2Zmc2V0LnRvcD1hLnBhcmVudERhdGEudG9wK2EucG9zaXRpb24udG9wKTooYS5vZmZzZXQubGVmdD1hLmVsZW1lbnQub2Zmc2V0KCkubGVmdCxhLm9mZnNldC50b3A9YS5lbGVtZW50Lm9mZnNldCgpLnRvcCksaT1NYXRoLmFicyhhLnNpemVEaWZmLndpZHRoKyhhLl9oZWxwZXI/YS5vZmZzZXQubGVmdC11LmxlZnQ6YS5vZmZzZXQubGVmdC1sLmxlZnQpKSxuPU1hdGguYWJzKGEuc2l6ZURpZmYuaGVpZ2h0KyhhLl9oZWxwZXI/YS5vZmZzZXQudG9wLXUudG9wOmEub2Zmc2V0LnRvcC1sLnRvcCkpLGkrYS5zaXplLndpZHRoPj1hLnBhcmVudERhdGEud2lkdGgmJihhLnNpemUud2lkdGg9YS5wYXJlbnREYXRhLndpZHRoLWksYyYmKGEuc2l6ZS5oZWlnaHQ9YS5zaXplLndpZHRoL2EuYXNwZWN0UmF0aW8scD0hMSkpLG4rYS5zaXplLmhlaWdodD49YS5wYXJlbnREYXRhLmhlaWdodCYmKGEuc2l6ZS5oZWlnaHQ9YS5wYXJlbnREYXRhLmhlaWdodC1uLGMmJihhLnNpemUud2lkdGg9YS5zaXplLmhlaWdodCphLmFzcGVjdFJhdGlvLHA9ITEpKSxwfHwoYS5wb3NpdGlvbi5sZWZ0PWEucHJldlBvc2l0aW9uLmxlZnQsYS5wb3NpdGlvbi50b3A9YS5wcmV2UG9zaXRpb24udG9wLGEuc2l6ZS53aWR0aD1hLnByZXZTaXplLndpZHRoLGEuc2l6ZS5oZWlnaHQ9YS5wcmV2U2l6ZS5oZWlnaHQpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPWUub3B0aW9ucyxuPWUuY29udGFpbmVyT2Zmc2V0LHM9ZS5jb250YWluZXJQb3NpdGlvbixvPWUuY29udGFpbmVyRWxlbWVudCxhPXQoZS5oZWxwZXIpLHI9YS5vZmZzZXQoKSxsPWEub3V0ZXJXaWR0aCgpLWUuc2l6ZURpZmYud2lkdGgsaD1hLm91dGVySGVpZ2h0KCktZS5zaXplRGlmZi5oZWlnaHQ7ZS5faGVscGVyJiYhaS5hbmltYXRlJiYvcmVsYXRpdmUvLnRlc3Qoby5jc3MoXCJwb3NpdGlvblwiKSkmJnQodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1zLmxlZnQtbi5sZWZ0LHdpZHRoOmwsaGVpZ2h0Omh9KSxlLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9zdGF0aWMvLnRlc3Qoby5jc3MoXCJwb3NpdGlvblwiKSkmJnQodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1zLmxlZnQtbi5sZWZ0LHdpZHRoOmwsaGVpZ2h0Omh9KX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImFsc29SZXNpemVcIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLm9wdGlvbnM7dChlLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIse3dpZHRoOnBhcnNlRmxvYXQoZS53aWR0aCgpKSxoZWlnaHQ6cGFyc2VGbG9hdChlLmhlaWdodCgpKSxsZWZ0OnBhcnNlRmxvYXQoZS5jc3MoXCJsZWZ0XCIpKSx0b3A6cGFyc2VGbG9hdChlLmNzcyhcInRvcFwiKSl9KX0pfSxyZXNpemU6ZnVuY3Rpb24oZSxpKXt2YXIgbj10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHM9bi5vcHRpb25zLG89bi5vcmlnaW5hbFNpemUsYT1uLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0Om4uc2l6ZS5oZWlnaHQtby5oZWlnaHR8fDAsd2lkdGg6bi5zaXplLndpZHRoLW8ud2lkdGh8fDAsdG9wOm4ucG9zaXRpb24udG9wLWEudG9wfHwwLGxlZnQ6bi5wb3NpdGlvbi5sZWZ0LWEubGVmdHx8MH07dChzLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLG49dCh0aGlzKS5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIikscz17fSxvPWUucGFyZW50cyhpLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1tcIndpZHRoXCIsXCJoZWlnaHRcIl06W1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCJdO3QuZWFjaChvLGZ1bmN0aW9uKHQsZSl7dmFyIGk9KG5bZV18fDApKyhyW2VdfHwwKTtpJiZpPj0wJiYoc1tlXT1pfHxudWxsKX0pLGUuY3NzKHMpfSl9LHN0b3A6ZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZURhdGEoXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdob3N0XCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPWUuc2l6ZTtlLmdob3N0PWUub3JpZ2luYWxFbGVtZW50LmNsb25lKCksZS5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6XCJibG9ja1wiLHBvc2l0aW9uOlwicmVsYXRpdmVcIixoZWlnaHQ6aS5oZWlnaHQsd2lkdGg6aS53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KSxlLl9hZGRDbGFzcyhlLmdob3N0LFwidWktcmVzaXphYmxlLWdob3N0XCIpLCExIT09dC51aUJhY2tDb21wYXQmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm9wdGlvbnMuZ2hvc3QmJmUuZ2hvc3QuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmdob3N0KSxlLmdob3N0LmFwcGVuZFRvKGUuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKTtlLmdob3N0JiZlLmdob3N0LmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLGhlaWdodDplLnNpemUuaGVpZ2h0LHdpZHRoOmUuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKTtlLmdob3N0JiZlLmhlbHBlciYmZS5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKGUuZ2hvc3QuZ2V0KDApKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdyaWRcIix7cmVzaXplOmZ1bmN0aW9uKCl7XG52YXIgZSxpPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksbj1pLm9wdGlvbnMscz1pLnNpemUsbz1pLm9yaWdpbmFsU2l6ZSxhPWkub3JpZ2luYWxQb3NpdGlvbixyPWkuYXhpcyxsPVwibnVtYmVyXCI9PXR5cGVvZiBuLmdyaWQ/W24uZ3JpZCxuLmdyaWRdOm4uZ3JpZCxoPWxbMF18fDEsYz1sWzFdfHwxLHU9TWF0aC5yb3VuZCgocy53aWR0aC1vLndpZHRoKS9oKSpoLGQ9TWF0aC5yb3VuZCgocy5oZWlnaHQtby5oZWlnaHQpL2MpKmMscD1vLndpZHRoK3UsZj1vLmhlaWdodCtkLGc9bi5tYXhXaWR0aCYmbi5tYXhXaWR0aDxwLG09bi5tYXhIZWlnaHQmJm4ubWF4SGVpZ2h0PGYsdj1uLm1pbldpZHRoJiZuLm1pbldpZHRoPnAsYj1uLm1pbkhlaWdodCYmbi5taW5IZWlnaHQ+ZjtuLmdyaWQ9bCx2JiYocCs9aCksYiYmKGYrPWMpLGcmJihwLT1oKSxtJiYoZi09YyksL14oc2V8c3xlKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9Zik6L14obmUpJC8udGVzdChyKT8oaS5zaXplLndpZHRoPXAsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wLWQpOi9eKHN3KSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0LXUpOigoZi1jPD0wfHxwLWg8PTApJiYoZT1pLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnModGhpcykpLGYtYz4wPyhpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9YS50b3AtZCk6KGY9Yy1lLmhlaWdodCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi50b3A9YS50b3Arby5oZWlnaHQtZikscC1oPjA/KGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1hLmxlZnQtdSk6KHA9aC1lLndpZHRoLGkuc2l6ZS53aWR0aD1wLGkucG9zaXRpb24ubGVmdD1hLmxlZnQrby53aWR0aC1wKSl9fSksdC51aS5yZXNpemFibGUsdC53aWRnZXQoXCJ1aS5kaWFsb2dcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2FwcGVuZFRvOlwiYm9keVwiLGF1dG9PcGVuOiEwLGJ1dHRvbnM6W10sY2xhc3Nlczp7XCJ1aS1kaWFsb2dcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLWRpYWxvZy10aXRsZWJhclwiOlwidWktY29ybmVyLWFsbFwifSxjbG9zZU9uRXNjYXBlOiEwLGNsb3NlVGV4dDpcIkNsb3NlXCIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6XCJhdXRvXCIsbWF4SGVpZ2h0Om51bGwsbWF4V2lkdGg6bnVsbCxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6XCJjZW50ZXJcIixhdDpcImNlbnRlclwiLG9mOndpbmRvdyxjb2xsaXNpb246XCJmaXRcIix1c2luZzpmdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLmNzcyhlKS5vZmZzZXQoKS50b3A7aTwwJiZ0KHRoaXMpLmNzcyhcInRvcFwiLGUudG9wLWkpfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCx0aXRsZTpudWxsLHdpZHRoOjMwMCxiZWZvcmVDbG9zZTpudWxsLGNsb3NlOm51bGwsZHJhZzpudWxsLGRyYWdTdGFydDpudWxsLGRyYWdTdG9wOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzaXplOm51bGwscmVzaXplU3RhcnQ6bnVsbCxyZXNpemVTdG9wOm51bGx9LHNpemVSZWxhdGVkT3B0aW9uczp7YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0scmVzaXphYmxlUmVsYXRlZE9wdGlvbnM6e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsQ3NzPXtkaXNwbGF5OnRoaXMuZWxlbWVudFswXS5zdHlsZS5kaXNwbGF5LHdpZHRoOnRoaXMuZWxlbWVudFswXS5zdHlsZS53aWR0aCxtaW5IZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1pbkhlaWdodCxtYXhIZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLm1heEhlaWdodCxoZWlnaHQ6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmhlaWdodH0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtwYXJlbnQ6dGhpcy5lbGVtZW50LnBhcmVudCgpLGluZGV4OnRoaXMuZWxlbWVudC5wYXJlbnQoKS5jaGlsZHJlbigpLmluZGV4KHRoaXMuZWxlbWVudCl9LHRoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpLG51bGw9PXRoaXMub3B0aW9ucy50aXRsZSYmbnVsbCE9dGhpcy5vcmlnaW5hbFRpdGxlJiYodGhpcy5vcHRpb25zLnRpdGxlPXRoaXMub3JpZ2luYWxUaXRsZSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPSExKSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKFwidGl0bGVcIikuYXBwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kaWFsb2ctY29udGVudFwiLFwidWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fY3JlYXRlVGl0bGViYXIoKSx0aGlzLl9jcmVhdGVCdXR0b25QYW5lKCksdGhpcy5vcHRpb25zLmRyYWdnYWJsZSYmdC5mbi5kcmFnZ2FibGUmJnRoaXMuX21ha2VEcmFnZ2FibGUoKSx0aGlzLm9wdGlvbnMucmVzaXphYmxlJiZ0LmZuLnJlc2l6YWJsZSYmdGhpcy5fbWFrZVJlc2l6YWJsZSgpLHRoaXMuX2lzT3Blbj0hMSx0aGlzLl90cmFja0ZvY3VzKCl9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZS5qcXVlcnl8fGUubm9kZVR5cGUpP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGV8fFwiYm9keVwiKS5lcSgwKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMub3JpZ2luYWxQb3NpdGlvbjt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSx0aGlzLnVpRGlhbG9nLnJlbW92ZSgpLHRoaXMub3JpZ2luYWxUaXRsZSYmdGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiLHRoaXMub3JpZ2luYWxUaXRsZSksKHQ9ZS5wYXJlbnQuY2hpbGRyZW4oKS5lcShlLmluZGV4KSkubGVuZ3RoJiZ0WzBdIT09dGhpcy5lbGVtZW50WzBdP3QuYmVmb3JlKHRoaXMuZWxlbWVudCk6ZS5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxkaXNhYmxlOnQubm9vcCxlbmFibGU6dC5ub29wLGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7dGhpcy5faXNPcGVuJiYhMSE9PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVDbG9zZVwiLGUpJiYodGhpcy5faXNPcGVuPSExLHRoaXMuX2ZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLm9wZW5lci5maWx0ZXIoXCI6Zm9jdXNhYmxlXCIpLnRyaWdnZXIoXCJmb2N1c1wiKS5sZW5ndGh8fHQudWkuc2FmZUJsdXIodC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSksdGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5fdHJpZ2dlcihcImNsb3NlXCIsZSl9KSl9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbigpe3RoaXMuX21vdmVUb1RvcCgpfSxfbW92ZVRvVG9wOmZ1bmN0aW9uKGUsaSl7dmFyIG49ITEscz10aGlzLnVpRGlhbG9nLnNpYmxpbmdzKFwiLnVpLWZyb250OnZpc2libGVcIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuK3QodGhpcykuY3NzKFwiei1pbmRleFwiKX0pLmdldCgpLG89TWF0aC5tYXguYXBwbHkobnVsbCxzKTtyZXR1cm4gbz49K3RoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiKSYmKHRoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiLG8rMSksbj0hMCksbiYmIWkmJnRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUpLG59LG9wZW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2lzT3Blbj90aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpOih0aGlzLl9pc09wZW49ITAsdGhpcy5vcGVuZXI9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSx0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fbW92ZVRvVG9wKG51bGwsITApLHRoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmNzcyhcInotaW5kZXhcIix0aGlzLnVpRGlhbG9nLmNzcyhcInotaW5kZXhcIiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7ZS5fZm9jdXNUYWJiYWJsZSgpLGUuX3RyaWdnZXIoXCJmb2N1c1wiKX0pLHRoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9mb2N1c2VkRWxlbWVudDt0fHwodD10aGlzLmVsZW1lbnQuZmluZChcIlthdXRvZm9jdXNdXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy5lbGVtZW50LmZpbmQoXCI6dGFiYmFibGVcIikpLHQubGVuZ3RofHwodD10aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5maW5kKFwiOnRhYmJhYmxlXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuZmlsdGVyKFwiOnRhYmJhYmxlXCIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZyksdC5lcSgwKS50cmlnZ2VyKFwiZm9jdXNcIil9LF9rZWVwRm9jdXM6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaSgpe3ZhciBlPXQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSk7dGhpcy51aURpYWxvZ1swXT09PWV8fHQuY29udGFpbnModGhpcy51aURpYWxvZ1swXSxlKXx8dGhpcy5fZm9jdXNUYWJiYWJsZSgpfWUucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5fZGVsYXkoaSl9LF9jcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZz10KFwiPGRpdj5cIikuaGlkZSgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6XCJkaWFsb2dcIn0pLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2csXCJ1aS1kaWFsb2dcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1mcm9udFwiKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nLHtrZXlkb3duOmZ1bmN0aW9uKGUpe2lmKHRoaXMub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmZS5rZXlDb2RlJiZlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuRVNDQVBFKXJldHVybiBlLnByZXZlbnREZWZhdWx0KCksdm9pZCB0aGlzLmNsb3NlKGUpO2lmKGUua2V5Q29kZT09PXQudWkua2V5Q29kZS5UQUImJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLnVpRGlhbG9nLmZpbmQoXCI6dGFiYmFibGVcIiksbj1pLmZpbHRlcihcIjpmaXJzdFwiKSxzPWkuZmlsdGVyKFwiOmxhc3RcIik7ZS50YXJnZXQhPT1zWzBdJiZlLnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fGUuc2hpZnRLZXk/ZS50YXJnZXQhPT1uWzBdJiZlLnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fCFlLnNoaWZ0S2V5fHwodGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtzLnRyaWdnZXIoXCJmb2N1c1wiKX0pLGUucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7bi50cmlnZ2VyKFwiZm9jdXNcIil9KSxlLnByZXZlbnREZWZhdWx0KCkpfX0sbW91c2Vkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmVUb1RvcCh0KSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpfX0pLHRoaXMuZWxlbWVudC5maW5kKFwiW2FyaWEtZGVzY3JpYmVkYnldXCIpLmxlbmd0aHx8dGhpcy51aURpYWxvZy5hdHRyKHtcImFyaWEtZGVzY3JpYmVkYnlcIjp0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKFwiaWRcIil9KX0sX2NyZWF0ZVRpdGxlYmFyOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy51aURpYWxvZ1RpdGxlYmFyPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nVGl0bGViYXIsXCJ1aS1kaWFsb2ctdGl0bGViYXJcIixcInVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4XCIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhcix7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3QoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlXCIpfHx0aGlzLnVpRGlhbG9nLnRyaWdnZXIoXCJmb2N1c1wiKX19KSx0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZT10KFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiKS5idXR0b24oe2xhYmVsOnQoXCI8YT5cIikudGV4dCh0aGlzLm9wdGlvbnMuY2xvc2VUZXh0KS5odG1sKCksaWNvbjpcInVpLWljb24tY2xvc2V0aGlja1wiLHNob3dMYWJlbDohMX0pLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UsXCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2VcIiksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2Use2NsaWNrOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHQpfX0pLGU9dChcIjxzcGFuPlwiKS51bmlxdWVJZCgpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX2FkZENsYXNzKGUsXCJ1aS1kaWFsb2ctdGl0bGVcIiksdGhpcy5fdGl0bGUoZSksdGhpcy51aURpYWxvZ1RpdGxlYmFyLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nKSx0aGlzLnVpRGlhbG9nLmF0dHIoe1wiYXJpYS1sYWJlbGxlZGJ5XCI6ZS5hdHRyKFwiaWRcIil9KX0sX3RpdGxlOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy50aXRsZT90LnRleHQodGhpcy5vcHRpb25zLnRpdGxlKTp0Lmh0bWwoXCImIzE2MDtcIil9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9dChcIjxkaXY+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLFwidWktZGlhbG9nLWJ1dHRvbnBhbmVcIixcInVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeFwiKSx0aGlzLnVpQnV0dG9uU2V0PXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZSksdGhpcy5fYWRkQ2xhc3ModGhpcy51aUJ1dHRvblNldCxcInVpLWRpYWxvZy1idXR0b25zZXRcIiksdGhpcy5fY3JlYXRlQnV0dG9ucygpfSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10aGlzLm9wdGlvbnMuYnV0dG9uczt0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5yZW1vdmUoKSx0aGlzLnVpQnV0dG9uU2V0LmVtcHR5KCksdC5pc0VtcHR5T2JqZWN0KGkpfHx0LmlzQXJyYXkoaSkmJiFpLmxlbmd0aD90aGlzLl9yZW1vdmVDbGFzcyh0aGlzLnVpRGlhbG9nLFwidWktZGlhbG9nLWJ1dHRvbnNcIik6KHQuZWFjaChpLGZ1bmN0aW9uKGksbil7dmFyIHMsbztuPXQuaXNGdW5jdGlvbihuKT97Y2xpY2s6bix0ZXh0Oml9Om4sbj10LmV4dGVuZCh7dHlwZTpcImJ1dHRvblwifSxuKSxzPW4uY2xpY2ssbz17aWNvbjpuLmljb24saWNvblBvc2l0aW9uOm4uaWNvblBvc2l0aW9uLHNob3dMYWJlbDpuLnNob3dMYWJlbCxpY29uczpuLmljb25zLHRleHQ6bi50ZXh0fSxkZWxldGUgbi5jbGljayxkZWxldGUgbi5pY29uLGRlbGV0ZSBuLmljb25Qb3NpdGlvbixkZWxldGUgbi5zaG93TGFiZWwsZGVsZXRlIG4uaWNvbnMsXCJib29sZWFuXCI9PXR5cGVvZiBuLnRleHQmJmRlbGV0ZSBuLnRleHQsdChcIjxidXR0b24+PC9idXR0b24+XCIsbikuYnV0dG9uKG8pLmFwcGVuZFRvKGUudWlCdXR0b25TZXQpLm9uKFwiY2xpY2tcIixmdW5jdGlvbigpe3MuYXBwbHkoZS5lbGVtZW50WzBdLGFyZ3VtZW50cyl9KX0pLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2csXCJ1aS1kaWFsb2ctYnV0dG9uc1wiKSx0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSl9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm57cG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5vZmZzZXR9fXZhciBpPXRoaXMsbj10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDpcIi51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiLGhhbmRsZTpcIi51aS1kaWFsb2ctdGl0bGViYXJcIixjb250YWlubWVudDpcImRvY3VtZW50XCIsc3RhcnQ6ZnVuY3Rpb24obixzKXtpLl9hZGRDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcImRyYWdTdGFydFwiLG4sZShzKSl9LGRyYWc6ZnVuY3Rpb24odCxuKXtpLl90cmlnZ2VyKFwiZHJhZ1wiLHQsZShuKSl9LHN0b3A6ZnVuY3Rpb24ocyxvKXt2YXIgYT1vLm9mZnNldC5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLHI9by5vZmZzZXQudG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7bi5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhhPj0wP1wiK1wiOlwiXCIpK2ErXCIgdG9wXCIrKHI+PTA/XCIrXCI6XCJcIikrcixvZjppLndpbmRvd30saS5fcmVtb3ZlQ2xhc3ModCh0aGlzKSxcInVpLWRpYWxvZy1kcmFnZ2luZ1wiKSxpLl91bmJsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcImRyYWdTdG9wXCIscyxlKG8pKX19KX0sX21ha2VSZXNpemFibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybntvcmlnaW5hbFBvc2l0aW9uOnQub3JpZ2luYWxQb3NpdGlvbixvcmlnaW5hbFNpemU6dC5vcmlnaW5hbFNpemUscG9zaXRpb246dC5wb3NpdGlvbixzaXplOnQuc2l6ZX19dmFyIGk9dGhpcyxuPXRoaXMub3B0aW9ucyxzPW4ucmVzaXphYmxlLG89dGhpcy51aURpYWxvZy5jc3MoXCJwb3NpdGlvblwiKSxhPVwic3RyaW5nXCI9PXR5cGVvZiBzP3M6XCJuLGUscyx3LHNlLHN3LG5lLG53XCI7dGhpcy51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDpcIi51aS1kaWFsb2ctY29udGVudFwiLGNvbnRhaW5tZW50OlwiZG9jdW1lbnRcIixhbHNvUmVzaXplOnRoaXMuZWxlbWVudCxtYXhXaWR0aDpuLm1heFdpZHRoLG1heEhlaWdodDpuLm1heEhlaWdodCxtaW5XaWR0aDpuLm1pbldpZHRoLG1pbkhlaWdodDp0aGlzLl9taW5IZWlnaHQoKSxoYW5kbGVzOmEsc3RhcnQ6ZnVuY3Rpb24obixzKXtpLl9hZGRDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLXJlc2l6aW5nXCIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcInJlc2l6ZVN0YXJ0XCIsbixlKHMpKX0scmVzaXplOmZ1bmN0aW9uKHQsbil7aS5fdHJpZ2dlcihcInJlc2l6ZVwiLHQsZShuKSl9LHN0b3A6ZnVuY3Rpb24ocyxvKXt2YXIgYT1pLnVpRGlhbG9nLm9mZnNldCgpLHI9YS5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLGw9YS50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtuLmhlaWdodD1pLnVpRGlhbG9nLmhlaWdodCgpLG4ud2lkdGg9aS51aURpYWxvZy53aWR0aCgpLG4ucG9zaXRpb249e215OlwibGVmdCB0b3BcIixhdDpcImxlZnRcIisocj49MD9cIitcIjpcIlwiKStyK1wiIHRvcFwiKyhsPj0wP1wiK1wiOlwiXCIpK2wsb2Y6aS53aW5kb3d9LGkuX3JlbW92ZUNsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoXCJyZXNpemVTdG9wXCIscyxlKG8pKX19KS5jc3MoXCJwb3NpdGlvblwiLG8pfSxfdHJhY2tGb2N1czpmdW5jdGlvbigpe3RoaXMuX29uKHRoaXMud2lkZ2V0KCkse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dGhpcy5fbWFrZUZvY3VzVGFyZ2V0KCksdGhpcy5fZm9jdXNlZEVsZW1lbnQ9dChlLnRhcmdldCl9fSl9LF9tYWtlRm9jdXNUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpLnVuc2hpZnQodGhpcyl9LF91bnRyYWNrSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFja2luZ0luc3RhbmNlcygpLGk9dC5pbkFycmF5KHRoaXMsZSk7LTEhPT1pJiZlLnNwbGljZShpLDEpfSxfdHJhY2tpbmdJbnN0YW5jZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctaW5zdGFuY2VzXCIpO3JldHVybiB0fHwodD1bXSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctaW5zdGFuY2VzXCIsdCkpLHR9LF9taW5IZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuXCJhdXRvXCI9PT10LmhlaWdodD90Lm1pbkhlaWdodDpNYXRoLm1pbih0Lm1pbkhlaWdodCx0LmhlaWdodCl9LF9wb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMudWlEaWFsb2cuaXMoXCI6dmlzaWJsZVwiKTt0fHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksdHx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMsbj0hMSxzPXt9O3QuZWFjaChlLGZ1bmN0aW9uKHQsZSl7aS5fc2V0T3B0aW9uKHQsZSksdCBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKG49ITApLHQgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKHNbdF09ZSl9KSxuJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZShcIm9wdGlvblwiLHMpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvPXRoaXMudWlEaWFsb2c7XCJkaXNhYmxlZFwiIT09ZSYmKHRoaXMuX3N1cGVyKGUsaSksXCJhcHBlbmRUb1wiPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxcImJ1dHRvbnNcIj09PWUmJnRoaXMuX2NyZWF0ZUJ1dHRvbnMoKSxcImNsb3NlVGV4dFwiPT09ZSYmdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuYnV0dG9uKHtsYWJlbDp0KFwiPGE+XCIpLnRleHQoXCJcIit0aGlzLm9wdGlvbnMuY2xvc2VUZXh0KS5odG1sKCl9KSxcImRyYWdnYWJsZVwiPT09ZSYmKChuPW8uaXMoXCI6ZGF0YSh1aS1kcmFnZ2FibGUpXCIpKSYmIWkmJm8uZHJhZ2dhYmxlKFwiZGVzdHJveVwiKSwhbiYmaSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSxcInBvc2l0aW9uXCI9PT1lJiZ0aGlzLl9wb3NpdGlvbigpLFwicmVzaXphYmxlXCI9PT1lJiYoKHM9by5pcyhcIjpkYXRhKHVpLXJlc2l6YWJsZSlcIikpJiYhaSYmby5yZXNpemFibGUoXCJkZXN0cm95XCIpLHMmJlwic3RyaW5nXCI9PXR5cGVvZiBpJiZvLnJlc2l6YWJsZShcIm9wdGlvblwiLFwiaGFuZGxlc1wiLGkpLHN8fCExPT09aXx8dGhpcy5fbWFrZVJlc2l6YWJsZSgpKSxcInRpdGxlXCI9PT1lJiZ0aGlzLl90aXRsZSh0aGlzLnVpRGlhbG9nVGl0bGViYXIuZmluZChcIi51aS1kaWFsb2ctdGl0bGVcIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgdCxlLGksbj10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOlwiYXV0b1wiLG1pbkhlaWdodDowLG1heEhlaWdodDpcIm5vbmVcIixoZWlnaHQ6MH0pLG4ubWluV2lkdGg+bi53aWR0aCYmKG4ud2lkdGg9bi5taW5XaWR0aCksdD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OlwiYXV0b1wiLHdpZHRoOm4ud2lkdGh9KS5vdXRlckhlaWdodCgpLGU9TWF0aC5tYXgoMCxuLm1pbkhlaWdodC10KSxpPVwibnVtYmVyXCI9PXR5cGVvZiBuLm1heEhlaWdodD9NYXRoLm1heCgwLG4ubWF4SGVpZ2h0LXQpOlwibm9uZVwiLFwiYXV0b1wiPT09bi5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OmUsbWF4SGVpZ2h0OmksaGVpZ2h0OlwiYXV0b1wifSk6dGhpcy5lbGVtZW50LmhlaWdodChNYXRoLm1heCgwLG4uaGVpZ2h0LXQpKSx0aGlzLnVpRGlhbG9nLmlzKFwiOmRhdGEodWktcmVzaXphYmxlKVwiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoXCJvcHRpb25cIixcIm1pbkhlaWdodFwiLHRoaXMuX21pbkhlaWdodCgpKX0sX2Jsb2NrRnJhbWVzOmZ1bmN0aW9uKCl7dGhpcy5pZnJhbWVCbG9ja3M9dGhpcy5kb2N1bWVudC5maW5kKFwiaWZyYW1lXCIpLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIHQoXCI8ZGl2PlwiKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpfSkuYXBwZW5kVG8oZS5wYXJlbnQoKSkub2Zmc2V0KGUub2Zmc2V0KCkpWzBdfSl9LF91bmJsb2NrRnJhbWVzOmZ1bmN0aW9uKCl7dGhpcy5pZnJhbWVCbG9ja3MmJih0aGlzLmlmcmFtZUJsb2Nrcy5yZW1vdmUoKSxkZWxldGUgdGhpcy5pZnJhbWVCbG9ja3MpfSxfYWxsb3dJbnRlcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4hIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGlhbG9nXCIpLmxlbmd0aHx8ISF0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLWRhdGVwaWNrZXJcIikubGVuZ3RofSxfY3JlYXRlT3ZlcmxheTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5tb2RhbCl7dmFyIGU9ITA7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtlPSExfSksdGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpfHx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtmb2N1c2luOmZ1bmN0aW9uKHQpe2V8fHRoaXMuX2FsbG93SW50ZXJhY3Rpb24odCl8fCh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKVswXS5fZm9jdXNUYWJiYWJsZSgpKX19KSx0aGlzLm92ZXJsYXk9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX2FkZENsYXNzKHRoaXMub3ZlcmxheSxudWxsLFwidWktd2lkZ2V0LW92ZXJsYXkgdWktZnJvbnRcIiksdGhpcy5fb24odGhpcy5vdmVybGF5LHttb3VzZWRvd246XCJfa2VlcEZvY3VzXCJ9KSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiwodGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpfHwwKSsxKX19LF9kZXN0cm95T3ZlcmxheTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5tb2RhbCYmdGhpcy5vdmVybGF5KXt2YXIgdD10aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiktMTt0P3RoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiLHQpOih0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcImZvY3VzaW5cIiksdGhpcy5kb2N1bWVudC5yZW1vdmVEYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpKSx0aGlzLm92ZXJsYXkucmVtb3ZlKCksdGhpcy5vdmVybGF5PW51bGx9fX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkuZGlhbG9nXCIsdC51aS5kaWFsb2cse29wdGlvbnM6e2RpYWxvZ0NsYXNzOlwiXCJ9LF9jcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLnVpRGlhbG9nLmFkZENsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcImRpYWxvZ0NsYXNzXCI9PT10JiZ0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MoZSksdGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpfX0pLHQudWkuZGlhbG9nLHQud2lkZ2V0KFwidWkuZHJvcHBhYmxlXCIse3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcImRyb3BcIixvcHRpb25zOnthY2NlcHQ6XCIqXCIsYWRkQ2xhc3NlczohMCxncmVlZHk6ITEsc2NvcGU6XCJkZWZhdWx0XCIsdG9sZXJhbmNlOlwiaW50ZXJzZWN0XCIsYWN0aXZhdGU6bnVsbCxkZWFjdGl2YXRlOm51bGwsZHJvcDpudWxsLG91dDpudWxsLG92ZXI6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5vcHRpb25zLG49aS5hY2NlcHQ7dGhpcy5pc292ZXI9ITEsdGhpcy5pc291dD0hMCx0aGlzLmFjY2VwdD10LmlzRnVuY3Rpb24obik/bjpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhuKX0sdGhpcy5wcm9wb3J0aW9ucz1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlfHwoZT17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSk7ZT1hcmd1bWVudHNbMF19LHRoaXMuX2FkZFRvTWFuYWdlcihpLnNjb3BlKSxpLmFkZENsYXNzZXMmJnRoaXMuX2FkZENsYXNzKFwidWktZHJvcHBhYmxlXCIpfSxfYWRkVG9NYW5hZ2VyOmZ1bmN0aW9uKGUpe3QudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZV09dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXXx8W10sdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXS5wdXNoKHRoaXMpfSxfc3BsaWNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09PT10aGlzJiZ0LnNwbGljZShlLDEpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UoZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXtpZihcImFjY2VwdFwiPT09ZSl0aGlzLmFjY2VwdD10LmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhpKX07ZWxzZSBpZihcInNjb3BlXCI9PT1lKXt2YXIgbj10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07dGhpcy5fc3BsaWNlKG4pLHRoaXMuX2FkZFRvTWFuYWdlcihpKX10aGlzLl9zdXBlcihlLGkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLl9hZGRBY3RpdmVDbGFzcygpLGkmJnRoaXMuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLGUsdGhpcy51aShpKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKSxpJiZ0aGlzLl90cmlnZ2VyKFwiZGVhY3RpdmF0ZVwiLGUsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLl9hZGRIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbihlKXt2YXIgaT10LnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5fcmVtb3ZlSG92ZXJDbGFzcygpLHRoaXMuX3RyaWdnZXIoXCJvdXRcIixlLHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24oZSxpKXt2YXIgbj1pfHx0LnVpLmRkbWFuYWdlci5jdXJyZW50LHM9ITE7cmV0dXJuISghbnx8KG4uY3VycmVudEl0ZW18fG4uZWxlbWVudClbMF09PT10aGlzLmVsZW1lbnRbMF0pJiYodGhpcy5lbGVtZW50LmZpbmQoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLm5vdChcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIikuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIik7aWYoaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09bi5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpJiZwKG4sdC5leHRlbmQoaSx7b2Zmc2V0OmkuZWxlbWVudC5vZmZzZXQoKX0pLGkub3B0aW9ucy50b2xlcmFuY2UsZSkpcmV0dXJuIHM9ITAsITF9KSwhcyYmISF0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpJiYodGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKSx0aGlzLl9yZW1vdmVIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcImRyb3BcIixlLHRoaXMudWkobikpLHRoaXMuZWxlbWVudCkpfSx1aTpmdW5jdGlvbih0KXtyZXR1cm57ZHJhZ2dhYmxlOnQuY3VycmVudEl0ZW18fHQuZWxlbWVudCxoZWxwZXI6dC5oZWxwZXIscG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5wb3NpdGlvbkFic319LF9hZGRIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcm9wcGFibGUtaG92ZXJcIil9LF9yZW1vdmVIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1kcm9wcGFibGUtaG92ZXJcIil9LF9hZGRBY3RpdmVDbGFzczpmdW5jdGlvbigpe3RoaXMuX2FkZENsYXNzKFwidWktZHJvcHBhYmxlLWFjdGl2ZVwiKX0sX3JlbW92ZUFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1kcm9wcGFibGUtYWN0aXZlXCIpfX0pO3ZhciBwPXQudWkuaW50ZXJzZWN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsaSl7cmV0dXJuIHQ+PWUmJnQ8ZStpfXJldHVybiBmdW5jdGlvbihlLGksbixzKXtpZighaS5vZmZzZXQpcmV0dXJuITE7dmFyIG89KGUucG9zaXRpb25BYnN8fGUucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQrZS5tYXJnaW5zLmxlZnQsYT0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wK2UubWFyZ2lucy50b3Ascj1vK2UuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsbD1hK2UuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGg9aS5vZmZzZXQubGVmdCxjPWkub2Zmc2V0LnRvcCx1PWgraS5wcm9wb3J0aW9ucygpLndpZHRoLGQ9YytpLnByb3BvcnRpb25zKCkuaGVpZ2h0O3N3aXRjaChuKXtjYXNlXCJmaXRcIjpyZXR1cm4gaDw9byYmcjw9dSYmYzw9YSYmbDw9ZDtjYXNlXCJpbnRlcnNlY3RcIjpyZXR1cm4gaDxvK2UuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmci1lLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI8dSYmYzxhK2UuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzImJmwtZS5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMjxkO2Nhc2VcInBvaW50ZXJcIjpyZXR1cm4gdChzLnBhZ2VZLGMsaS5wcm9wb3J0aW9ucygpLmhlaWdodCkmJnQocy5wYWdlWCxoLGkucHJvcG9ydGlvbnMoKS53aWR0aCk7Y2FzZVwidG91Y2hcIjpyZXR1cm4oYT49YyYmYTw9ZHx8bD49YyYmbDw9ZHx8YTxjJiZsPmQpJiYobz49aCYmbzw9dXx8cj49aCYmcjw9dXx8bzxoJiZyPnUpO2RlZmF1bHQ6cmV0dXJuITF9fX0oKTt0LnVpLmRkbWFuYWdlcj17Y3VycmVudDpudWxsLGRyb3BwYWJsZXM6e2RlZmF1bHQ6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKGUsaSl7dmFyIG4scyxvPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXXx8W10sYT1pP2kudHlwZTpudWxsLHI9KGUuY3VycmVudEl0ZW18fGUuZWxlbWVudCkuZmluZChcIjpkYXRhKHVpLWRyb3BwYWJsZSlcIikuYWRkQmFjaygpO3Q6Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpZighKG9bbl0ub3B0aW9ucy5kaXNhYmxlZHx8ZSYmIW9bbl0uYWNjZXB0LmNhbGwob1tuXS5lbGVtZW50WzBdLGUuY3VycmVudEl0ZW18fGUuZWxlbWVudCkpKXtmb3Iocz0wO3M8ci5sZW5ndGg7cysrKWlmKHJbc109PT1vW25dLmVsZW1lbnRbMF0pe29bbl0ucHJvcG9ydGlvbnMoKS5oZWlnaHQ9MDtjb250aW51ZSB0fW9bbl0udmlzaWJsZT1cIm5vbmVcIiE9PW9bbl0uZWxlbWVudC5jc3MoXCJkaXNwbGF5XCIpLG9bbl0udmlzaWJsZSYmKFwibW91c2Vkb3duXCI9PT1hJiZvW25dLl9hY3RpdmF0ZS5jYWxsKG9bbl0saSksb1tuXS5vZmZzZXQ9b1tuXS5lbGVtZW50Lm9mZnNldCgpLG9bbl0ucHJvcG9ydGlvbnMoe3dpZHRoOm9bbl0uZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6b1tuXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodH0pKX19LGRyb3A6ZnVuY3Rpb24oZSxpKXt2YXIgbj0hMTtyZXR1cm4gdC5lYWNoKCh0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV18fFtdKS5zbGljZSgpLGZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zJiYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZwKGUsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlLGkpJiYobj10aGlzLl9kcm9wLmNhbGwodGhpcyxpKXx8biksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpJiYodGhpcy5pc291dD0hMCx0aGlzLmlzb3Zlcj0hMSx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxpKSkpfSksbn0sZHJhZ1N0YXJ0OmZ1bmN0aW9uKGUsaSl7ZS5lbGVtZW50LnBhcmVudHNVbnRpbChcImJvZHlcIikub24oXCJzY3JvbGwuZHJvcHBhYmxlXCIsZnVuY3Rpb24oKXtlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8dC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZSxpKX0pfSxkcmFnOmZ1bmN0aW9uKGUsaSl7ZS5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGUsaSksdC5lYWNoKHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zLmRpc2FibGVkJiYhdGhpcy5ncmVlZHlDaGlsZCYmdGhpcy52aXNpYmxlKXt2YXIgbixzLG8sYT1wKGUsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlLGkpLHI9IWEmJnRoaXMuaXNvdmVyP1wiaXNvdXRcIjphJiYhdGhpcy5pc292ZXI/XCJpc292ZXJcIjpudWxsO3ImJih0aGlzLm9wdGlvbnMuZ3JlZWR5JiYocz10aGlzLm9wdGlvbnMuc2NvcGUsKG89dGhpcy5lbGVtZW50LnBhcmVudHMoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0KHRoaXMpLmRyb3BwYWJsZShcImluc3RhbmNlXCIpLm9wdGlvbnMuc2NvcGU9PT1zfSkpLmxlbmd0aCYmKChuPXQob1swXSkuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIikpLmdyZWVkeUNoaWxkPVwiaXNvdmVyXCI9PT1yKSksbiYmXCJpc292ZXJcIj09PXImJihuLmlzb3Zlcj0hMSxuLmlzb3V0PSEwLG4uX291dC5jYWxsKG4saSkpLHRoaXNbcl09ITAsdGhpc1tcImlzb3V0XCI9PT1yP1wiaXNvdmVyXCI6XCJpc291dFwiXT0hMSx0aGlzW1wiaXNvdmVyXCI9PT1yP1wiX292ZXJcIjpcIl9vdXRcIl0uY2FsbCh0aGlzLGkpLG4mJlwiaXNvdXRcIj09PXImJihuLmlzb3V0PSExLG4uaXNvdmVyPSEwLG4uX292ZXIuY2FsbChuLGkpKSl9fSl9LGRyYWdTdG9wOmZ1bmN0aW9uKGUsaSl7ZS5lbGVtZW50LnBhcmVudHNVbnRpbChcImJvZHlcIikub2ZmKFwic2Nyb2xsLmRyb3BwYWJsZVwiKSxlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8dC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZSxpKX19LCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkuZHJvcHBhYmxlXCIsdC51aS5kcm9wcGFibGUse29wdGlvbnM6e2hvdmVyQ2xhc3M6ITEsYWN0aXZlQ2xhc3M6ITF9LF9hZGRBY3RpdmVDbGFzczpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKX0sX3JlbW92ZUFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpfSxfYWRkSG92ZXJDbGFzczpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyl9LF9yZW1vdmVIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKX19KSx0LnVpLmRyb3BwYWJsZSx0LndpZGdldChcInVpLnByb2dyZXNzYmFyXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntjbGFzc2VzOntcInVpLXByb2dyZXNzYmFyXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1wcm9ncmVzc2Jhci12YWx1ZVwiOlwidWktY29ybmVyLWxlZnRcIixcInVpLXByb2dyZXNzYmFyLWNvbXBsZXRlXCI6XCJ1aS1jb3JuZXItcmlnaHRcIn0sbWF4OjEwMCx2YWx1ZTowLGNoYW5nZTpudWxsLGNvbXBsZXRlOm51bGx9LG1pbjowLF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9sZFZhbHVlPXRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKCksdGhpcy5lbGVtZW50LmF0dHIoe3JvbGU6XCJwcm9ncmVzc2JhclwiLFwiYXJpYS12YWx1ZW1pblwiOnRoaXMubWlufSksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1wcm9ncmVzc2JhclwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMudmFsdWVEaXY9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksdGhpcy5fYWRkQ2xhc3ModGhpcy52YWx1ZURpdixcInVpLXByb2dyZXNzYmFyLXZhbHVlXCIsXCJ1aS13aWRnZXQtaGVhZGVyXCIpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwicm9sZSBhcmlhLXZhbHVlbWluIGFyaWEtdmFsdWVtYXggYXJpYS12YWx1ZW5vd1wiKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpfSx2YWx1ZTpmdW5jdGlvbih0KXtpZih2b2lkIDA9PT10KXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWU7dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUodCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jb25zdHJhaW5lZFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD10aGlzLm9wdGlvbnMudmFsdWUpLHRoaXMuaW5kZXRlcm1pbmF0ZT0hMT09PXQsXCJudW1iZXJcIiE9dHlwZW9mIHQmJih0PTApLCF0aGlzLmluZGV0ZXJtaW5hdGUmJk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sdCkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlO2RlbGV0ZSB0LnZhbHVlLHRoaXMuX3N1cGVyKHQpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKGUpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7XCJtYXhcIj09PXQmJihlPU1hdGgubWF4KHRoaXMubWluLGUpKSx0aGlzLl9zdXBlcih0LGUpfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5lbGVtZW50LmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlPzEwMDoxMDAqKHRoaXMub3B0aW9ucy52YWx1ZS10aGlzLm1pbikvKHRoaXMub3B0aW9ucy5tYXgtdGhpcy5taW4pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnZhbHVlLGk9dGhpcy5fcGVyY2VudGFnZSgpO3RoaXMudmFsdWVEaXYudG9nZ2xlKHRoaXMuaW5kZXRlcm1pbmF0ZXx8ZT50aGlzLm1pbikud2lkdGgoaS50b0ZpeGVkKDApK1wiJVwiKSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLnZhbHVlRGl2LFwidWktcHJvZ3Jlc3NiYXItY29tcGxldGVcIixudWxsLGU9PT10aGlzLm9wdGlvbnMubWF4KS5fdG9nZ2xlQ2xhc3MoXCJ1aS1wcm9ncmVzc2Jhci1pbmRldGVybWluYXRlXCIsbnVsbCx0aGlzLmluZGV0ZXJtaW5hdGUpLHRoaXMuaW5kZXRlcm1pbmF0ZT8odGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhcmlhLXZhbHVlbm93XCIpLHRoaXMub3ZlcmxheURpdnx8KHRoaXMub3ZlcmxheURpdj10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy52YWx1ZURpdiksdGhpcy5fYWRkQ2xhc3ModGhpcy5vdmVybGF5RGl2LFwidWktcHJvZ3Jlc3NiYXItb3ZlcmxheVwiKSkpOih0aGlzLmVsZW1lbnQuYXR0cih7XCJhcmlhLXZhbHVlbWF4XCI6dGhpcy5vcHRpb25zLm1heCxcImFyaWEtdmFsdWVub3dcIjplfSksdGhpcy5vdmVybGF5RGl2JiYodGhpcy5vdmVybGF5RGl2LnJlbW92ZSgpLHRoaXMub3ZlcmxheURpdj1udWxsKSksdGhpcy5vbGRWYWx1ZSE9PWUmJih0aGlzLm9sZFZhbHVlPWUsdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiKSksZT09PXRoaXMub3B0aW9ucy5tYXgmJnRoaXMuX3RyaWdnZXIoXCJjb21wbGV0ZVwiKX19KSx0LndpZGdldChcInVpLnNlbGVjdGFibGVcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7YXBwZW5kVG86XCJib2R5XCIsYXV0b1JlZnJlc2g6ITAsZGlzdGFuY2U6MCxmaWx0ZXI6XCIqXCIsdG9sZXJhbmNlOlwidG91Y2hcIixzZWxlY3RlZDpudWxsLHNlbGVjdGluZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLHVuc2VsZWN0ZWQ6bnVsbCx1bnNlbGVjdGluZzpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9hZGRDbGFzcyhcInVpLXNlbGVjdGFibGVcIiksdGhpcy5kcmFnZ2VkPSExLHRoaXMucmVmcmVzaD1mdW5jdGlvbigpe2UuZWxlbWVudFBvcz10KGUuZWxlbWVudFswXSkub2Zmc2V0KCksZS5zZWxlY3RlZXM9dChlLm9wdGlvbnMuZmlsdGVyLGUuZWxlbWVudFswXSksZS5fYWRkQ2xhc3MoZS5zZWxlY3RlZXMsXCJ1aS1zZWxlY3RlZVwiKSxlLnNlbGVjdGVlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkub2Zmc2V0KCkscz17bGVmdDpuLmxlZnQtZS5lbGVtZW50UG9zLmxlZnQsdG9wOm4udG9wLWUuZWxlbWVudFBvcy50b3B9O3QuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIse2VsZW1lbnQ6dGhpcywkZWxlbWVudDppLGxlZnQ6cy5sZWZ0LHRvcDpzLnRvcCxyaWdodDpzLmxlZnQraS5vdXRlcldpZHRoKCksYm90dG9tOnMudG9wK2kub3V0ZXJIZWlnaHQoKSxzdGFydHNlbGVjdGVkOiExLHNlbGVjdGVkOmkuaGFzQ2xhc3MoXCJ1aS1zZWxlY3RlZFwiKSxzZWxlY3Rpbmc6aS5oYXNDbGFzcyhcInVpLXNlbGVjdGluZ1wiKSx1bnNlbGVjdGluZzppLmhhc0NsYXNzKFwidWktdW5zZWxlY3RpbmdcIil9KX0pfSx0aGlzLnJlZnJlc2goKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmhlbHBlcj10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1zZWxlY3RhYmxlLWhlbHBlclwiKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVlcy5yZW1vdmVEYXRhKFwic2VsZWN0YWJsZS1pdGVtXCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLG49dGhpcy5vcHRpb25zO3RoaXMub3Bvcz1bZS5wYWdlWCxlLnBhZ2VZXSx0aGlzLmVsZW1lbnRQb3M9dCh0aGlzLmVsZW1lbnRbMF0pLm9mZnNldCgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWVzPXQobi5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKFwic3RhcnRcIixlKSx0KG4uYXBwZW5kVG8pLmFwcGVuZCh0aGlzLmhlbHBlciksdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmUucGFnZVgsdG9wOmUucGFnZVksd2lkdGg6MCxoZWlnaHQ6MH0pLG4uYXV0b1JlZnJlc2gmJnRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzLmZpbHRlcihcIi51aS1zZWxlY3RlZFwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIik7bi5zdGFydHNlbGVjdGVkPSEwLGUubWV0YUtleXx8ZS5jdHJsS2V5fHwoaS5fcmVtb3ZlQ2xhc3Mobi4kZWxlbWVudCxcInVpLXNlbGVjdGVkXCIpLG4uc2VsZWN0ZWQ9ITEsaS5fYWRkQ2xhc3Mobi4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLG4udW5zZWxlY3Rpbmc9ITAsaS5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6bi5lbGVtZW50fSkpfSksdChlLnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG4scz10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKTtpZihzKXJldHVybiBuPSFlLm1ldGFLZXkmJiFlLmN0cmxLZXl8fCFzLiRlbGVtZW50Lmhhc0NsYXNzKFwidWktc2VsZWN0ZWRcIiksaS5fcmVtb3ZlQ2xhc3Mocy4kZWxlbWVudCxuP1widWktdW5zZWxlY3RpbmdcIjpcInVpLXNlbGVjdGVkXCIpLl9hZGRDbGFzcyhzLiRlbGVtZW50LG4/XCJ1aS1zZWxlY3RpbmdcIjpcInVpLXVuc2VsZWN0aW5nXCIpLHMudW5zZWxlY3Rpbmc9IW4scy5zZWxlY3Rpbmc9bixzLnNlbGVjdGVkPW4sbj9pLl90cmlnZ2VyKFwic2VsZWN0aW5nXCIsZSx7c2VsZWN0aW5nOnMuZWxlbWVudH0pOmkuX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOnMuZWxlbWVudH0pLCExfSkpfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe2lmKHRoaXMuZHJhZ2dlZD0hMCwhdGhpcy5vcHRpb25zLmRpc2FibGVkKXt2YXIgaSxuPXRoaXMscz10aGlzLm9wdGlvbnMsbz10aGlzLm9wb3NbMF0sYT10aGlzLm9wb3NbMV0scj1lLnBhZ2VYLGw9ZS5wYWdlWTtyZXR1cm4gbz5yJiYoaT1yLHI9byxvPWkpLGE+bCYmKGk9bCxsPWEsYT1pKSx0aGlzLmhlbHBlci5jc3Moe2xlZnQ6byx0b3A6YSx3aWR0aDpyLW8saGVpZ2h0OmwtYX0pLHRoaXMuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKSxoPSExLGM9e307aSYmaS5lbGVtZW50IT09bi5lbGVtZW50WzBdJiYoYy5sZWZ0PWkubGVmdCtuLmVsZW1lbnRQb3MubGVmdCxjLnJpZ2h0PWkucmlnaHQrbi5lbGVtZW50UG9zLmxlZnQsYy50b3A9aS50b3Arbi5lbGVtZW50UG9zLnRvcCxjLmJvdHRvbT1pLmJvdHRvbStuLmVsZW1lbnRQb3MudG9wLFwidG91Y2hcIj09PXMudG9sZXJhbmNlP2g9IShjLmxlZnQ+cnx8Yy5yaWdodDxvfHxjLnRvcD5sfHxjLmJvdHRvbTxhKTpcImZpdFwiPT09cy50b2xlcmFuY2UmJihoPWMubGVmdD5vJiZjLnJpZ2h0PHImJmMudG9wPmEmJmMuYm90dG9tPGwpLGg/KGkuc2VsZWN0ZWQmJihuLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIiksaS5zZWxlY3RlZD0hMSksaS51bnNlbGVjdGluZyYmKG4uX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxpLnVuc2VsZWN0aW5nPSExKSxpLnNlbGVjdGluZ3x8KG4uX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RpbmdcIiksaS5zZWxlY3Rpbmc9ITAsbi5fdHJpZ2dlcihcInNlbGVjdGluZ1wiLGUse3NlbGVjdGluZzppLmVsZW1lbnR9KSkpOihpLnNlbGVjdGluZyYmKChlLm1ldGFLZXl8fGUuY3RybEtleSkmJmkuc3RhcnRzZWxlY3RlZD8obi5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMSxuLl9hZGRDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIiksaS5zZWxlY3RlZD0hMCk6KG4uX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RpbmdcIiksaS5zZWxlY3Rpbmc9ITEsaS5zdGFydHNlbGVjdGVkJiYobi5fYWRkQ2xhc3MoaS4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLGkudW5zZWxlY3Rpbmc9ITApLG4uX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSksaS5zZWxlY3RlZCYmKGUubWV0YUtleXx8ZS5jdHJsS2V5fHxpLnN0YXJ0c2VsZWN0ZWR8fChuLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIiksaS5zZWxlY3RlZD0hMSxuLl9hZGRDbGFzcyhpLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksaS51bnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIixlLHt1bnNlbGVjdGluZzppLmVsZW1lbnR9KSkpKSl9KSwhMX19LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcztyZXR1cm4gdGhpcy5kcmFnZ2VkPSExLHQoXCIudWktdW5zZWxlY3RpbmdcIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKTtpLl9yZW1vdmVDbGFzcyhuLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksbi51bnNlbGVjdGluZz0hMSxuLnN0YXJ0c2VsZWN0ZWQ9ITEsaS5fdHJpZ2dlcihcInVuc2VsZWN0ZWRcIixlLHt1bnNlbGVjdGVkOm4uZWxlbWVudH0pfSksdChcIi51aS1zZWxlY3RpbmdcIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKTtpLl9yZW1vdmVDbGFzcyhuLiRlbGVtZW50LFwidWktc2VsZWN0aW5nXCIpLl9hZGRDbGFzcyhuLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIiksbi5zZWxlY3Rpbmc9ITEsbi5zZWxlY3RlZD0hMCxuLnN0YXJ0c2VsZWN0ZWQ9ITAsaS5fdHJpZ2dlcihcInNlbGVjdGVkXCIsZSx7c2VsZWN0ZWQ6bi5lbGVtZW50fSl9KSx0aGlzLl90cmlnZ2VyKFwic3RvcFwiLGUpLHRoaXMuaGVscGVyLnJlbW92ZSgpLCExfX0pLHQud2lkZ2V0KFwidWkuc2VsZWN0bWVudVwiLFt0LnVpLmZvcm1SZXNldE1peGluLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8c2VsZWN0PlwiLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsY2xhc3Nlczp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6XCJ1aS1jb3JuZXItdG9wXCIsXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcInVpLWNvcm5lci1hbGxcIn0sZGlzYWJsZWQ6bnVsbCxpY29uczp7YnV0dG9uOlwidWktaWNvbi10cmlhbmdsZS0xLXNcIn0scG9zaXRpb246e215OlwibGVmdCB0b3BcIixhdDpcImxlZnQgYm90dG9tXCIsY29sbGlzaW9uOlwibm9uZVwifSx3aWR0aDohMSxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpO3RoaXMuaWRzPXtlbGVtZW50OmUsYnV0dG9uOmUrXCItYnV0dG9uXCIsbWVudTplK1wiLW1lbnVcIn0sdGhpcy5fZHJhd0J1dHRvbigpLHRoaXMuX2RyYXdNZW51KCksdGhpcy5fYmluZEZvcm1SZXNldEhhbmRsZXIoKSx0aGlzLl9yZW5kZXJlZD0hMSx0aGlzLm1lbnVJdGVtcz10KCl9LF9kcmF3QnV0dG9uOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLG49dGhpcy5fcGFyc2VPcHRpb24odGhpcy5lbGVtZW50LmZpbmQoXCJvcHRpb246c2VsZWN0ZWRcIiksdGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpO3RoaXMubGFiZWxzPXRoaXMuZWxlbWVudC5sYWJlbHMoKS5hdHRyKFwiZm9yXCIsdGhpcy5pZHMuYnV0dG9uKSx0aGlzLl9vbih0aGlzLmxhYmVscyx7Y2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5idXR0b24uZm9jdXMoKSx0LnByZXZlbnREZWZhdWx0KCl9fSksdGhpcy5lbGVtZW50LmhpZGUoKSx0aGlzLmJ1dHRvbj10KFwiPHNwYW4+XCIse3RhYmluZGV4OnRoaXMub3B0aW9ucy5kaXNhYmxlZD8tMTowLGlkOnRoaXMuaWRzLmJ1dHRvbixyb2xlOlwiY29tYm9ib3hcIixcImFyaWEtZXhwYW5kZWRcIjpcImZhbHNlXCIsXCJhcmlhLWF1dG9jb21wbGV0ZVwiOlwibGlzdFwiLFwiYXJpYS1vd25zXCI6dGhpcy5pZHMubWVudSxcImFyaWEtaGFzcG9wdXBcIjpcInRydWVcIix0aXRsZTp0aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpfSkuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmJ1dHRvbixcInVpLXNlbGVjdG1lbnUtYnV0dG9uIHVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiLFwidWktYnV0dG9uIHVpLXdpZGdldFwiKSxlPXQoXCI8c3Bhbj5cIikuYXBwZW5kVG8odGhpcy5idXR0b24pLHRoaXMuX2FkZENsYXNzKGUsXCJ1aS1zZWxlY3RtZW51LWljb25cIixcInVpLWljb24gXCIrdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbiksdGhpcy5idXR0b25JdGVtPXRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0obikuYXBwZW5kVG8odGhpcy5idXR0b24pLCExIT09dGhpcy5vcHRpb25zLndpZHRoJiZ0aGlzLl9yZXNpemVCdXR0b24oKSx0aGlzLl9vbih0aGlzLmJ1dHRvbix0aGlzLl9idXR0b25FdmVudHMpLHRoaXMuYnV0dG9uLm9uZShcImZvY3VzaW5cIixmdW5jdGlvbigpe2kuX3JlbmRlcmVkfHxpLl9yZWZyZXNoTWVudSgpfSl9LF9kcmF3TWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5tZW51PXQoXCI8dWw+XCIse1wiYXJpYS1oaWRkZW5cIjpcInRydWVcIixcImFyaWEtbGFiZWxsZWRieVwiOnRoaXMuaWRzLmJ1dHRvbixpZDp0aGlzLmlkcy5tZW51fSksdGhpcy5tZW51V3JhcD10KFwiPGRpdj5cIikuYXBwZW5kKHRoaXMubWVudSksdGhpcy5fYWRkQ2xhc3ModGhpcy5tZW51V3JhcCxcInVpLXNlbGVjdG1lbnUtbWVudVwiLFwidWktZnJvbnRcIiksdGhpcy5tZW51V3JhcC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSx0aGlzLm1lbnVJbnN0YW5jZT10aGlzLm1lbnUubWVudSh7Y2xhc3Nlczp7XCJ1aS1tZW51XCI6XCJ1aS1jb3JuZXItYm90dG9tXCJ9LHJvbGU6XCJsaXN0Ym94XCIsc2VsZWN0OmZ1bmN0aW9uKHQsaSl7dC5wcmV2ZW50RGVmYXVsdCgpLGUuX3NldFNlbGVjdGlvbigpLGUuX3NlbGVjdChpLml0ZW0uZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKSx0KX0sZm9jdXM6ZnVuY3Rpb24odCxpKXt2YXIgbj1pLml0ZW0uZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiKTtudWxsIT1lLmZvY3VzSW5kZXgmJm4uaW5kZXghPT1lLmZvY3VzSW5kZXgmJihlLl90cmlnZ2VyKFwiZm9jdXNcIix0LHtpdGVtOm59KSxlLmlzT3Blbnx8ZS5fc2VsZWN0KG4sdCkpLGUuZm9jdXNJbmRleD1uLmluZGV4LGUuYnV0dG9uLmF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIixlLm1lbnVJdGVtcy5lcShuLmluZGV4KS5hdHRyKFwiaWRcIikpfX0pLm1lbnUoXCJpbnN0YW5jZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fb2ZmKHRoaXMubWVudSxcIm1vdXNlbGVhdmVcIiksdGhpcy5tZW51SW5zdGFuY2UuX2Nsb3NlT25Eb2N1bWVudENsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuITF9LHRoaXMubWVudUluc3RhbmNlLl9pc0RpdmlkZXI9ZnVuY3Rpb24oKXtyZXR1cm4hMX19LHJlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9yZWZyZXNoTWVudSgpLHRoaXMuYnV0dG9uSXRlbS5yZXBsYWNlV2l0aCh0aGlzLmJ1dHRvbkl0ZW09dGhpcy5fcmVuZGVyQnV0dG9uSXRlbSh0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpfHx7fSkpLG51bGw9PT10aGlzLm9wdGlvbnMud2lkdGgmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfcmVmcmVzaE1lbnU6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMuZWxlbWVudC5maW5kKFwib3B0aW9uXCIpO3RoaXMubWVudS5lbXB0eSgpLHRoaXMuX3BhcnNlT3B0aW9ucyhlKSx0aGlzLl9yZW5kZXJNZW51KHRoaXMubWVudSx0aGlzLml0ZW1zKSx0aGlzLm1lbnVJbnN0YW5jZS5yZWZyZXNoKCksdGhpcy5tZW51SXRlbXM9dGhpcy5tZW51LmZpbmQoXCJsaVwiKS5ub3QoXCIudWktc2VsZWN0bWVudS1vcHRncm91cFwiKS5maW5kKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLHRoaXMuX3JlbmRlcmVkPSEwLGUubGVuZ3RoJiYodD10aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLHQpLHRoaXMuX3NldEFyaWEodC5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpKSx0aGlzLl9zZXRPcHRpb24oXCJkaXNhYmxlZFwiLHRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIikpKX0sb3BlbjpmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fCh0aGlzLl9yZW5kZXJlZD8odGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5tZW51LmZpbmQoXCIudWktc3RhdGUtYWN0aXZlXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5tZW51SW5zdGFuY2UuZm9jdXMobnVsbCx0aGlzLl9nZXRTZWxlY3RlZEl0ZW0oKSkpOnRoaXMuX3JlZnJlc2hNZW51KCksdGhpcy5tZW51SXRlbXMubGVuZ3RoJiYodGhpcy5pc09wZW49ITAsdGhpcy5fdG9nZ2xlQXR0cigpLHRoaXMuX3Jlc2l6ZU1lbnUoKSx0aGlzLl9wb3NpdGlvbigpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQsdGhpcy5fZG9jdW1lbnRDbGljayksdGhpcy5fdHJpZ2dlcihcIm9wZW5cIix0KSkpfSxfcG9zaXRpb246ZnVuY3Rpb24oKXt0aGlzLm1lbnVXcmFwLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjp0aGlzLmJ1dHRvbn0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSl9LGNsb3NlOmZ1bmN0aW9uKHQpe3RoaXMuaXNPcGVuJiYodGhpcy5pc09wZW49ITEsdGhpcy5fdG9nZ2xlQXR0cigpLHRoaXMucmFuZ2U9bnVsbCx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCksdGhpcy5fdHJpZ2dlcihcImNsb3NlXCIsdCkpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b259LG1lbnVXaWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51fSxfcmVuZGVyQnV0dG9uSXRlbTpmdW5jdGlvbihlKXt2YXIgaT10KFwiPHNwYW4+XCIpO3JldHVybiB0aGlzLl9zZXRUZXh0KGksZS5sYWJlbCksdGhpcy5fYWRkQ2xhc3MoaSxcInVpLXNlbGVjdG1lbnUtdGV4dFwiKSxpfSxfcmVuZGVyTWVudTpmdW5jdGlvbihlLGkpe3ZhciBuPXRoaXMscz1cIlwiO3QuZWFjaChpLGZ1bmN0aW9uKGksbyl7dmFyIGE7by5vcHRncm91cCE9PXMmJihhPXQoXCI8bGk+XCIse3RleHQ6by5vcHRncm91cH0pLG4uX2FkZENsYXNzKGEsXCJ1aS1zZWxlY3RtZW51LW9wdGdyb3VwXCIsXCJ1aS1tZW51LWRpdmlkZXJcIisoby5lbGVtZW50LnBhcmVudChcIm9wdGdyb3VwXCIpLnByb3AoXCJkaXNhYmxlZFwiKT9cIiB1aS1zdGF0ZS1kaXNhYmxlZFwiOlwiXCIpKSxhLmFwcGVuZFRvKGUpLHM9by5vcHRncm91cCksbi5fcmVuZGVySXRlbURhdGEoZSxvKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbSh0LGUpLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIixlKX0sX3JlbmRlckl0ZW06ZnVuY3Rpb24oZSxpKXt2YXIgbj10KFwiPGxpPlwiKSxzPXQoXCI8ZGl2PlwiLHt0aXRsZTppLmVsZW1lbnQuYXR0cihcInRpdGxlXCIpfSk7cmV0dXJuIGkuZGlzYWJsZWQmJnRoaXMuX2FkZENsYXNzKG4sbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIpLHRoaXMuX3NldFRleHQocyxpLmxhYmVsKSxuLmFwcGVuZChzKS5hcHBlbmRUbyhlKX0sX3NldFRleHQ6ZnVuY3Rpb24odCxlKXtlP3QudGV4dChlKTp0Lmh0bWwoXCImIzE2MDtcIil9LF9tb3ZlOmZ1bmN0aW9uKHQsZSl7dmFyIGksbixzPVwiLnVpLW1lbnUtaXRlbVwiO3RoaXMuaXNPcGVuP2k9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5mb2N1c0luZGV4KS5wYXJlbnQoXCJsaVwiKTooaT10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleCkucGFyZW50KFwibGlcIikscys9XCI6bm90KC51aS1zdGF0ZS1kaXNhYmxlZClcIiksKG49XCJmaXJzdFwiPT09dHx8XCJsYXN0XCI9PT10P2lbXCJmaXJzdFwiPT09dD9cInByZXZBbGxcIjpcIm5leHRBbGxcIl0ocykuZXEoLTEpOmlbdCtcIkFsbFwiXShzKS5lcSgwKSkubGVuZ3RoJiZ0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhlLG4pfSxfZ2V0U2VsZWN0ZWRJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KS5wYXJlbnQoXCJsaVwiKX0sX3RvZ2dsZTpmdW5jdGlvbih0KXt0aGlzW3RoaXMuaXNPcGVuP1wiY2xvc2VcIjpcIm9wZW5cIl0odCl9LF9zZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnJhbmdlJiYod2luZG93LmdldFNlbGVjdGlvbj8oKHQ9d2luZG93LmdldFNlbGVjdGlvbigpKS5yZW1vdmVBbGxSYW5nZXMoKSx0LmFkZFJhbmdlKHRoaXMucmFuZ2UpKTp0aGlzLnJhbmdlLnNlbGVjdCgpLHRoaXMuYnV0dG9uLmZvY3VzKCkpfSxfZG9jdW1lbnRDbGljazp7bW91c2Vkb3duOmZ1bmN0aW9uKGUpe3RoaXMuaXNPcGVuJiYodChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1zZWxlY3RtZW51LW1lbnUsICNcIit0LnVpLmVzY2FwZVNlbGVjdG9yKHRoaXMuaWRzLmJ1dHRvbikpLmxlbmd0aHx8dGhpcy5jbG9zZShlKSl9fSxfYnV0dG9uRXZlbnRzOnttb3VzZWRvd246ZnVuY3Rpb24oKXt2YXIgdDt3aW5kb3cuZ2V0U2VsZWN0aW9uPyh0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKSkucmFuZ2VDb3VudCYmKHRoaXMucmFuZ2U9dC5nZXRSYW5nZUF0KDApKTp0aGlzLnJhbmdlPWRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpfSxjbGljazpmdW5jdGlvbih0KXt0aGlzLl9zZXRTZWxlY3Rpb24oKSx0aGlzLl90b2dnbGUodCl9LGtleWRvd246ZnVuY3Rpb24oZSl7dmFyIGk9ITA7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuVEFCOmNhc2UgdC51aS5rZXlDb2RlLkVTQ0FQRTp0aGlzLmNsb3NlKGUpLGk9ITE7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6dGhpcy5pc09wZW4mJnRoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlVQOmUuYWx0S2V5P3RoaXMuX3RvZ2dsZShlKTp0aGlzLl9tb3ZlKFwicHJldlwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046XG5lLmFsdEtleT90aGlzLl90b2dnbGUoZSk6dGhpcy5fbW92ZShcIm5leHRcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5TUEFDRTp0aGlzLmlzT3Blbj90aGlzLl9zZWxlY3RGb2N1c2VkSXRlbShlKTp0aGlzLl90b2dnbGUoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDp0aGlzLl9tb3ZlKFwicHJldlwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlJJR0hUOnRoaXMuX21vdmUoXCJuZXh0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMuX21vdmUoXCJmaXJzdFwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVORDpjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046dGhpcy5fbW92ZShcImxhc3RcIixlKTticmVhaztkZWZhdWx0OnRoaXMubWVudS50cmlnZ2VyKGUpLGk9ITF9aSYmZS5wcmV2ZW50RGVmYXVsdCgpfX0sX3NlbGVjdEZvY3VzZWRJdGVtOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZm9jdXNJbmRleCkucGFyZW50KFwibGlcIik7ZS5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpfHx0aGlzLl9zZWxlY3QoZS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpLHQpfSxfc2VsZWN0OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXg7dGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXg9dC5pbmRleCx0aGlzLmJ1dHRvbkl0ZW0ucmVwbGFjZVdpdGgodGhpcy5idXR0b25JdGVtPXRoaXMuX3JlbmRlckJ1dHRvbkl0ZW0odCkpLHRoaXMuX3NldEFyaWEodCksdGhpcy5fdHJpZ2dlcihcInNlbGVjdFwiLGUse2l0ZW06dH0pLHQuaW5kZXghPT1pJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx7aXRlbTp0fSksdGhpcy5jbG9zZShlKX0sX3NldEFyaWE6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tZW51SXRlbXMuZXEodC5pbmRleCkuYXR0cihcImlkXCIpO3RoaXMuYnV0dG9uLmF0dHIoe1wiYXJpYS1sYWJlbGxlZGJ5XCI6ZSxcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiOmV9KSx0aGlzLm1lbnUuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJpY29uc1wiPT09dCl7dmFyIGk9dGhpcy5idXR0b24uZmluZChcInNwYW4udWktaWNvblwiKTt0aGlzLl9yZW1vdmVDbGFzcyhpLG51bGwsdGhpcy5vcHRpb25zLmljb25zLmJ1dHRvbikuX2FkZENsYXNzKGksbnVsbCxlLmJ1dHRvbil9dGhpcy5fc3VwZXIodCxlKSxcImFwcGVuZFRvXCI9PT10JiZ0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLFwid2lkdGhcIj09PXQmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5tZW51SW5zdGFuY2Uub3B0aW9uKFwiZGlzYWJsZWRcIix0KSx0aGlzLmJ1dHRvbi5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLHQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMuYnV0dG9uLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLHQpLHRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIix0KSx0Pyh0aGlzLmJ1dHRvbi5hdHRyKFwidGFiaW5kZXhcIiwtMSksdGhpcy5jbG9zZSgpKTp0aGlzLmJ1dHRvbi5hdHRyKFwidGFiaW5kZXhcIiwwKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZT1lLmpxdWVyeXx8ZS5ub2RlVHlwZT90KGUpOnRoaXMuZG9jdW1lbnQuZmluZChlKS5lcSgwKSksZSYmZVswXXx8KGU9dGhpcy5lbGVtZW50LmNsb3Nlc3QoXCIudWktZnJvbnQsIGRpYWxvZ1wiKSksZS5sZW5ndGh8fChlPXRoaXMuZG9jdW1lbnRbMF0uYm9keSksZX0sX3RvZ2dsZUF0dHI6ZnVuY3Rpb24oKXt0aGlzLmJ1dHRvbi5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLHRoaXMuaXNPcGVuKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmJ1dHRvbixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLVwiKyh0aGlzLmlzT3Blbj9cImNsb3NlZFwiOlwib3BlblwiKSkuX2FkZENsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24tXCIrKHRoaXMuaXNPcGVuP1wib3BlblwiOlwiY2xvc2VkXCIpKS5fdG9nZ2xlQ2xhc3ModGhpcy5tZW51V3JhcCxcInVpLXNlbGVjdG1lbnUtb3BlblwiLG51bGwsdGhpcy5pc09wZW4pLHRoaXMubWVudS5hdHRyKFwiYXJpYS1oaWRkZW5cIiwhdGhpcy5pc09wZW4pfSxfcmVzaXplQnV0dG9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLndpZHRoOyExIT09dD8obnVsbD09PXQmJih0PXRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpLHRoaXMuZWxlbWVudC5oaWRlKCkpLHRoaXMuYnV0dG9uLm91dGVyV2lkdGgodCkpOnRoaXMuYnV0dG9uLmNzcyhcIndpZHRoXCIsXCJcIil9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51Lm91dGVyV2lkdGgoTWF0aC5tYXgodGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLHRoaXMubWVudS53aWR0aChcIlwiKS5vdXRlcldpZHRoKCkrMSkpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1cGVyKCk7cmV0dXJuIHQuZGlzYWJsZWQ9dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSx0fSxfcGFyc2VPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMsbj1bXTtlLmVhY2goZnVuY3Rpb24oZSxzKXtuLnB1c2goaS5fcGFyc2VPcHRpb24odChzKSxlKSl9KSx0aGlzLml0ZW1zPW59LF9wYXJzZU9wdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpPXQucGFyZW50KFwib3B0Z3JvdXBcIik7cmV0dXJue2VsZW1lbnQ6dCxpbmRleDplLHZhbHVlOnQudmFsKCksbGFiZWw6dC50ZXh0KCksb3B0Z3JvdXA6aS5hdHRyKFwibGFiZWxcIil8fFwiXCIsZGlzYWJsZWQ6aS5wcm9wKFwiZGlzYWJsZWRcIil8fHQucHJvcChcImRpc2FibGVkXCIpfX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl91bmJpbmRGb3JtUmVzZXRIYW5kbGVyKCksdGhpcy5tZW51V3JhcC5yZW1vdmUoKSx0aGlzLmJ1dHRvbi5yZW1vdmUoKSx0aGlzLmVsZW1lbnQuc2hvdygpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLHRoaXMubGFiZWxzLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5lbGVtZW50KX19XSksdC53aWRnZXQoXCJ1aS5zbGlkZXJcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJzbGlkZVwiLG9wdGlvbnM6e2FuaW1hdGU6ITEsY2xhc3Nlczp7XCJ1aS1zbGlkZXJcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXNsaWRlci1oYW5kbGVcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXNsaWRlci1yYW5nZVwiOlwidWktY29ybmVyLWFsbCB1aS13aWRnZXQtaGVhZGVyXCJ9LGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjpcImhvcml6b250YWxcIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbCxjaGFuZ2U6bnVsbCxzbGlkZTpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxudW1QYWdlczo1LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9hZGRDbGFzcyhcInVpLXNsaWRlciB1aS1zbGlkZXItXCIrdGhpcy5vcmllbnRhdGlvbixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9jcmVhdGVSYW5nZSgpLHRoaXMuX2NyZWF0ZUhhbmRsZXMoKSx0aGlzLl9zZXR1cEV2ZW50cygpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfY3JlYXRlSGFuZGxlczpmdW5jdGlvbigpe3ZhciBlLGksbj10aGlzLm9wdGlvbnMscz10aGlzLmVsZW1lbnQuZmluZChcIi51aS1zbGlkZXItaGFuZGxlXCIpLG89W107Zm9yKGk9bi52YWx1ZXMmJm4udmFsdWVzLmxlbmd0aHx8MSxzLmxlbmd0aD5pJiYocy5zbGljZShpKS5yZW1vdmUoKSxzPXMuc2xpY2UoMCxpKSksZT1zLmxlbmd0aDtlPGk7ZSsrKW8ucHVzaChcIjxzcGFuIHRhYmluZGV4PScwJz48L3NwYW4+XCIpO3RoaXMuaGFuZGxlcz1zLmFkZCh0KG8uam9pbihcIlwiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5fYWRkQ2xhc3ModGhpcy5oYW5kbGVzLFwidWktc2xpZGVyLWhhbmRsZVwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLmhhbmRsZT10aGlzLmhhbmRsZXMuZXEoMCksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24oZSl7dCh0aGlzKS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiLGUpLmF0dHIoXCJ0YWJJbmRleFwiLDApfSl9LF9jcmVhdGVSYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLnJhbmdlPyghMD09PWUucmFuZ2UmJihlLnZhbHVlcz9lLnZhbHVlcy5sZW5ndGgmJjIhPT1lLnZhbHVlcy5sZW5ndGg/ZS52YWx1ZXM9W2UudmFsdWVzWzBdLGUudmFsdWVzWzBdXTp0LmlzQXJyYXkoZS52YWx1ZXMpJiYoZS52YWx1ZXM9ZS52YWx1ZXMuc2xpY2UoMCkpOmUudmFsdWVzPVt0aGlzLl92YWx1ZU1pbigpLHRoaXMuX3ZhbHVlTWluKCldKSx0aGlzLnJhbmdlJiZ0aGlzLnJhbmdlLmxlbmd0aD8odGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5yYW5nZSxcInVpLXNsaWRlci1yYW5nZS1taW4gdWktc2xpZGVyLXJhbmdlLW1heFwiKSx0aGlzLnJhbmdlLmNzcyh7bGVmdDpcIlwiLGJvdHRvbTpcIlwifSkpOih0aGlzLnJhbmdlPXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMucmFuZ2UsXCJ1aS1zbGlkZXItcmFuZ2VcIikpLFwibWluXCIhPT1lLnJhbmdlJiZcIm1heFwiIT09ZS5yYW5nZXx8dGhpcy5fYWRkQ2xhc3ModGhpcy5yYW5nZSxcInVpLXNsaWRlci1yYW5nZS1cIitlLnJhbmdlKSk6KHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5yYW5nZT1udWxsKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKCl7dGhpcy5fb2ZmKHRoaXMuaGFuZGxlcyksdGhpcy5fb24odGhpcy5oYW5kbGVzLHRoaXMuX2hhbmRsZUV2ZW50cyksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGFuZGxlcyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGFuZGxlcyl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVzLnJlbW92ZSgpLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UucmVtb3ZlKCksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG8sYSxyLGwsaD10aGlzLGM9dGhpcy5vcHRpb25zO3JldHVybiFjLmRpc2FibGVkJiYodGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9LHRoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksaT17eDplLnBhZ2VYLHk6ZS5wYWdlWX0sbj10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UoaSkscz10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkrMSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihlKXt2YXIgaT1NYXRoLmFicyhuLWgudmFsdWVzKGUpKTsocz5pfHxzPT09aSYmKGU9PT1oLl9sYXN0Q2hhbmdlZFZhbHVlfHxoLnZhbHVlcyhlKT09PWMubWluKSkmJihzPWksbz10KHRoaXMpLGE9ZSl9KSwhMSE9PXRoaXMuX3N0YXJ0KGUsYSkmJih0aGlzLl9tb3VzZVNsaWRpbmc9ITAsdGhpcy5faGFuZGxlSW5kZXg9YSx0aGlzLl9hZGRDbGFzcyhvLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksby50cmlnZ2VyKFwiZm9jdXNcIikscj1vLm9mZnNldCgpLGw9IXQoZS50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoXCIudWktc2xpZGVyLWhhbmRsZVwiKSx0aGlzLl9jbGlja09mZnNldD1sP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OmUucGFnZVgtci5sZWZ0LW8ud2lkdGgoKS8yLHRvcDplLnBhZ2VZLXIudG9wLW8uaGVpZ2h0KCkvMi0ocGFyc2VJbnQoby5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLShwYXJzZUludChvLmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KG8uY3NzKFwibWFyZ2luVG9wXCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpfHx0aGlzLl9zbGlkZShlLGEsbiksdGhpcy5fYW5pbWF0ZU9mZj0hMCwhMCkpfSxfbW91c2VTdGFydDpmdW5jdGlvbigpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBlPXt4OnQucGFnZVgseTp0LnBhZ2VZfSxpPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShlKTtyZXR1cm4gdGhpcy5fc2xpZGUodCx0aGlzLl9oYW5kbGVJbmRleCxpKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5oYW5kbGVzLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AodCx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKHQsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj9cInZlcnRpY2FsXCI6XCJob3Jpem9udGFsXCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24odCl7dmFyIGUsaSxuLHMsbztyZXR1cm5cImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24/KGU9dGhpcy5lbGVtZW50U2l6ZS53aWR0aCxpPXQueC10aGlzLmVsZW1lbnRPZmZzZXQubGVmdC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQubGVmdDowKSk6KGU9dGhpcy5lbGVtZW50U2l6ZS5oZWlnaHQsaT10LnktdGhpcy5lbGVtZW50T2Zmc2V0LnRvcC0odGhpcy5fY2xpY2tPZmZzZXQ/dGhpcy5fY2xpY2tPZmZzZXQudG9wOjApKSwobj1pL2UpPjEmJihuPTEpLG48MCYmKG49MCksXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmKG49MS1uKSxzPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSxvPXRoaXMuX3ZhbHVlTWluKCkrbipzLHRoaXMuX3RyaW1BbGlnblZhbHVlKG8pfSxfdWlIYXNoOmZ1bmN0aW9uKHQsZSxpKXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSxoYW5kbGVJbmRleDp0LHZhbHVlOnZvaWQgMCE9PWU/ZTp0aGlzLnZhbHVlKCl9O3JldHVybiB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpJiYobi52YWx1ZT12b2lkIDAhPT1lP2U6dGhpcy52YWx1ZXModCksbi52YWx1ZXM9aXx8dGhpcy52YWx1ZXMoKSksbn0sX2hhc011bHRpcGxlVmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RofSxfc3RhcnQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsdCx0aGlzLl91aUhhc2goZSkpfSxfc2xpZGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBuLHM9dGhpcy52YWx1ZSgpLG89dGhpcy52YWx1ZXMoKTt0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpJiYobj10aGlzLnZhbHVlcyhlPzA6MSkscz10aGlzLnZhbHVlcyhlKSwyPT09dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJiEwPT09dGhpcy5vcHRpb25zLnJhbmdlJiYoaT0wPT09ZT9NYXRoLm1pbihuLGkpOk1hdGgubWF4KG4saSkpLG9bZV09aSksaSE9PXMmJiExIT09dGhpcy5fdHJpZ2dlcihcInNsaWRlXCIsdCx0aGlzLl91aUhhc2goZSxpLG8pKSYmKHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy52YWx1ZXMoZSxpKTp0aGlzLnZhbHVlKGkpKX0sX3N0b3A6ZnVuY3Rpb24odCxlKXt0aGlzLl90cmlnZ2VyKFwic3RvcFwiLHQsdGhpcy5fdWlIYXNoKGUpKX0sX2NoYW5nZTpmdW5jdGlvbih0LGUpe3RoaXMuX2tleVNsaWRpbmd8fHRoaXMuX21vdXNlU2xpZGluZ3x8KHRoaXMuX2xhc3RDaGFuZ2VkVmFsdWU9ZSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsdCx0aGlzLl91aUhhc2goZSkpKX0sdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl90cmltQWxpZ25WYWx1ZSh0KSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx2b2lkIHRoaXMuX2NoYW5nZShudWxsLDApKTp0aGlzLl92YWx1ZSgpfSx2YWx1ZXM6ZnVuY3Rpb24oZSxpKXt2YXIgbixzLG87aWYoYXJndW1lbnRzLmxlbmd0aD4xKXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzW2VdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHZvaWQgdGhpcy5fY2hhbmdlKG51bGwsZSk7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3ZhbHVlcygpO2lmKCF0LmlzQXJyYXkoYXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLl92YWx1ZXMoZSk6dGhpcy52YWx1ZSgpO2ZvcihuPXRoaXMub3B0aW9ucy52YWx1ZXMscz1hcmd1bWVudHNbMF0sbz0wO288bi5sZW5ndGg7bys9MSluW29dPXRoaXMuX3RyaW1BbGlnblZhbHVlKHNbb10pLHRoaXMuX2NoYW5nZShudWxsLG8pO3RoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIG4scz0wO3N3aXRjaChcInJhbmdlXCI9PT1lJiYhMD09PXRoaXMub3B0aW9ucy5yYW5nZSYmKFwibWluXCI9PT1pPyh0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKDApLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCk6XCJtYXhcIj09PWkmJih0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdmFsdWVzKHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoLTEpLHRoaXMub3B0aW9ucy52YWx1ZXM9bnVsbCkpLHQuaXNBcnJheSh0aGlzLm9wdGlvbnMudmFsdWVzKSYmKHM9dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgpLHRoaXMuX3N1cGVyKGUsaSksZSl7Y2FzZVwib3JpZW50YXRpb25cIjp0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX3JlbW92ZUNsYXNzKFwidWktc2xpZGVyLWhvcml6b250YWwgdWktc2xpZGVyLXZlcnRpY2FsXCIpLl9hZGRDbGFzcyhcInVpLXNsaWRlci1cIit0aGlzLm9yaWVudGF0aW9uKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLm9wdGlvbnMucmFuZ2UmJnRoaXMuX3JlZnJlc2hSYW5nZShpKSx0aGlzLmhhbmRsZXMuY3NzKFwiaG9yaXpvbnRhbFwiPT09aT9cImJvdHRvbVwiOlwibGVmdFwiLFwiXCIpO2JyZWFrO2Nhc2VcInZhbHVlXCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2VcInZhbHVlc1wiOmZvcih0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLG49cy0xO24+PTA7bi0tKXRoaXMuX2NoYW5nZShudWxsLG4pO3RoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZVwic3RlcFwiOmNhc2VcIm1pblwiOmNhc2VcIm1heFwiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fY2FsY3VsYXRlTmV3TWF4KCksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJyYW5nZVwiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaCgpLHRoaXMuX2FuaW1hdGVPZmY9ITF9fSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiB0aGlzLl90cmltQWxpZ25WYWx1ZSh0KX0sX3ZhbHVlczpmdW5jdGlvbih0KXt2YXIgZSxpLG47aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT10aGlzLm9wdGlvbnMudmFsdWVzW3RdLHRoaXMuX3RyaW1BbGlnblZhbHVlKGUpO2lmKHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkpe2ZvcihpPXRoaXMub3B0aW9ucy52YWx1ZXMuc2xpY2UoKSxuPTA7bjxpLmxlbmd0aDtuKz0xKWlbbl09dGhpcy5fdHJpbUFsaWduVmFsdWUoaVtuXSk7cmV0dXJuIGl9cmV0dXJuW119LF90cmltQWxpZ25WYWx1ZTpmdW5jdGlvbih0KXtpZih0PD10aGlzLl92YWx1ZU1pbigpKXJldHVybiB0aGlzLl92YWx1ZU1pbigpO2lmKHQ+PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7dmFyIGU9dGhpcy5vcHRpb25zLnN0ZXA+MD90aGlzLm9wdGlvbnMuc3RlcDoxLGk9KHQtdGhpcy5fdmFsdWVNaW4oKSklZSxuPXQtaTtyZXR1cm4gMipNYXRoLmFicyhpKT49ZSYmKG4rPWk+MD9lOi1lKSxwYXJzZUZsb2F0KG4udG9GaXhlZCg1KSl9LF9jYWxjdWxhdGVOZXdNYXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMubWF4LGU9dGhpcy5fdmFsdWVNaW4oKSxpPXRoaXMub3B0aW9ucy5zdGVwOyh0PU1hdGgucm91bmQoKHQtZSkvaSkqaStlKT50aGlzLm9wdGlvbnMubWF4JiYodC09aSksdGhpcy5tYXg9cGFyc2VGbG9hdCh0LnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJih0PU1hdGgubWF4KHQsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSx0fSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygpLGk9ZS5pbmRleE9mKFwiLlwiKTtyZXR1cm4tMT09PWk/MDplLmxlbmd0aC1pLTF9LF92YWx1ZU1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWlufSxfdmFsdWVNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXh9LF9yZWZyZXNoUmFuZ2U6ZnVuY3Rpb24odCl7XCJ2ZXJ0aWNhbFwiPT09dCYmdGhpcy5yYW5nZS5jc3Moe3dpZHRoOlwiXCIsbGVmdDpcIlwifSksXCJob3Jpem9udGFsXCI9PT10JiZ0aGlzLnJhbmdlLmNzcyh7aGVpZ2h0OlwiXCIsYm90dG9tOlwiXCJ9KX0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciBlLGksbixzLG8sYT10aGlzLm9wdGlvbnMucmFuZ2Uscj10aGlzLm9wdGlvbnMsbD10aGlzLGg9IXRoaXMuX2FuaW1hdGVPZmYmJnIuYW5pbWF0ZSxjPXt9O3RoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24obil7aT0obC52YWx1ZXMobiktbC5fdmFsdWVNaW4oKSkvKGwuX3ZhbHVlTWF4KCktbC5fdmFsdWVNaW4oKSkqMTAwLGNbXCJob3Jpem9udGFsXCI9PT1sLm9yaWVudGF0aW9uP1wibGVmdFwiOlwiYm90dG9tXCJdPWkrXCIlXCIsdCh0aGlzKS5zdG9wKDEsMSlbaD9cImFuaW1hdGVcIjpcImNzc1wiXShjLHIuYW5pbWF0ZSksITA9PT1sLm9wdGlvbnMucmFuZ2UmJihcImhvcml6b250YWxcIj09PWwub3JpZW50YXRpb24/KDA9PT1uJiZsLnJhbmdlLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtsZWZ0OmkrXCIlXCJ9LHIuYW5pbWF0ZSksMT09PW4mJmwucmFuZ2VbaD9cImFuaW1hdGVcIjpcImNzc1wiXSh7d2lkdGg6aS1lK1wiJVwifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpOigwPT09biYmbC5yYW5nZS5zdG9wKDEsMSlbaD9cImFuaW1hdGVcIjpcImNzc1wiXSh7Ym90dG9tOmkrXCIlXCJ9LHIuYW5pbWF0ZSksMT09PW4mJmwucmFuZ2VbaD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OmktZStcIiVcIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pKSksZT1pfSk6KG49dGhpcy52YWx1ZSgpLHM9dGhpcy5fdmFsdWVNaW4oKSxvPXRoaXMuX3ZhbHVlTWF4KCksaT1vIT09cz8obi1zKS8oby1zKSoxMDA6MCxjW1wiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbj9cImxlZnRcIjpcImJvdHRvbVwiXT1pK1wiJVwiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKGMsci5hbmltYXRlKSxcIm1pblwiPT09YSYmXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDppK1wiJVwifSxyLmFuaW1hdGUpLFwibWF4XCI9PT1hJiZcImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2g/XCJhbmltYXRlXCI6XCJjc3NcIl0oe3dpZHRoOjEwMC1pK1wiJVwifSxyLmFuaW1hdGUpLFwibWluXCI9PT1hJiZcInZlcnRpY2FsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtoP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6aStcIiVcIn0sci5hbmltYXRlKSxcIm1heFwiPT09YSYmXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbaD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OjEwMC1pK1wiJVwifSxyLmFuaW1hdGUpKX0sX2hhbmRsZUV2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbz10KGUudGFyZ2V0KS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiKTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5IT01FOmNhc2UgdC51aS5rZXlDb2RlLkVORDpjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5SSUdIVDpjYXNlIHQudWkua2V5Q29kZS5ET1dOOmNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMCx0aGlzLl9hZGRDbGFzcyh0KGUudGFyZ2V0KSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLCExPT09dGhpcy5fc3RhcnQoZSxvKSkpcmV0dXJufXN3aXRjaChzPXRoaXMub3B0aW9ucy5zdGVwLGk9bj10aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpP3RoaXMudmFsdWVzKG8pOnRoaXMudmFsdWUoKSxlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6bj10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVORDpuPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDpuPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOm49dGhpcy5fdHJpbUFsaWduVmFsdWUoaS0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5SSUdIVDppZihpPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShpK3MpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDppZihpPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47bj10aGlzLl90cmltQWxpZ25WYWx1ZShpLXMpfXRoaXMuX3NsaWRlKGUsbyxuKX0sa2V5dXA6ZnVuY3Rpb24oZSl7dmFyIGk9dChlLnRhcmdldCkuZGF0YShcInVpLXNsaWRlci1oYW5kbGUtaW5kZXhcIik7dGhpcy5fa2V5U2xpZGluZyYmKHRoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fc3RvcChlLGkpLHRoaXMuX2NoYW5nZShlLGkpLHRoaXMuX3JlbW92ZUNsYXNzKHQoZS50YXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIikpfX19KSx0LndpZGdldChcInVpLnNvcnRhYmxlXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4Olwic29ydFwiLHJlYWR5OiExLG9wdGlvbnM6e2FwcGVuZFRvOlwicGFyZW50XCIsYXhpczohMSxjb25uZWN0V2l0aDohMSxjb250YWlubWVudDohMSxjdXJzb3I6XCJhdXRvXCIsY3Vyc29yQXQ6ITEsZHJvcE9uRW1wdHk6ITAsZm9yY2VQbGFjZWhvbGRlclNpemU6ITEsZm9yY2VIZWxwZXJTaXplOiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjpcIm9yaWdpbmFsXCIsaXRlbXM6XCI+ICpcIixvcGFjaXR5OiExLHBsYWNlaG9sZGVyOiExLHJldmVydDohMSxzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc2NvcGU6XCJkZWZhdWx0XCIsdG9sZXJhbmNlOlwiaW50ZXJzZWN0XCIsekluZGV4OjFlMyxhY3RpdmF0ZTpudWxsLGJlZm9yZVN0b3A6bnVsbCxjaGFuZ2U6bnVsbCxkZWFjdGl2YXRlOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsLHJlY2VpdmU6bnVsbCxyZW1vdmU6bnVsbCxzb3J0Om51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdXBkYXRlOm51bGx9LF9pc092ZXJBeGlzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdD49ZSYmdDxlK2l9LF9pc0Zsb2F0aW5nOmZ1bmN0aW9uKHQpe3JldHVybi9sZWZ0fHJpZ2h0Ly50ZXN0KHQuY3NzKFwiZmxvYXRcIikpfHwvaW5saW5lfHRhYmxlLWNlbGwvLnRlc3QodC5jc3MoXCJkaXNwbGF5XCIpKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5fYWRkQ2xhc3MoXCJ1aS1zb3J0YWJsZVwiKSx0aGlzLnJlZnJlc2goKSx0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWFkeT0hMH0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3N1cGVyKHQsZSksXCJoYW5kbGVcIj09PXQmJnRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpfSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQuZmluZChcIi51aS1zb3J0YWJsZS1oYW5kbGVcIiksXCJ1aS1zb3J0YWJsZS1oYW5kbGVcIiksdC5lYWNoKHRoaXMuaXRlbXMsZnVuY3Rpb24oKXtlLl9hZGRDbGFzcyh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlP3RoaXMuaXRlbS5maW5kKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGUpOnRoaXMuaXRlbSxcInVpLXNvcnRhYmxlLWhhbmRsZVwiKX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgdD10aGlzLml0ZW1zLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuaXRlbXNbdF0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZStcIi1pdGVtXCIpO3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUsaSl7dmFyIG49bnVsbCxzPSExLG89dGhpcztyZXR1cm4hKHRoaXMucmV2ZXJ0aW5nfHx0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fFwic3RhdGljXCI9PT10aGlzLm9wdGlvbnMudHlwZXx8KHRoaXMuX3JlZnJlc2hJdGVtcyhlKSx0KGUudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lmKHQuZGF0YSh0aGlzLG8ud2lkZ2V0TmFtZStcIi1pdGVtXCIpPT09bylyZXR1cm4gbj10KHRoaXMpLCExfSksdC5kYXRhKGUudGFyZ2V0LG8ud2lkZ2V0TmFtZStcIi1pdGVtXCIpPT09byYmKG49dChlLnRhcmdldCkpLCFufHx0aGlzLm9wdGlvbnMuaGFuZGxlJiYhaSYmKHQodGhpcy5vcHRpb25zLmhhbmRsZSxuKS5maW5kKFwiKlwiKS5hZGRCYWNrKCkuZWFjaChmdW5jdGlvbigpe3RoaXM9PT1lLnRhcmdldCYmKHM9ITApfSksIXMpfHwodGhpcy5jdXJyZW50SXRlbT1uLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksMCkpKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzLG8sYT10aGlzLm9wdGlvbnM7aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGUpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSx0LmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6ZS5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDplLnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoXCJwb3NpdGlvblwiKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxhLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGEuY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxhLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLGEuY3Vyc29yJiZcImF1dG9cIiE9PWEuY3Vyc29yJiYobz10aGlzLmRvY3VtZW50LmZpbmQoXCJib2R5XCIpLHRoaXMuc3RvcmVkQ3Vyc29yPW8uY3NzKFwiY3Vyc29yXCIpLG8uY3NzKFwiY3Vyc29yXCIsYS5jdXJzb3IpLHRoaXMuc3RvcmVkU3R5bGVzaGVldD10KFwiPHN0eWxlPip7IGN1cnNvcjogXCIrYS5jdXJzb3IrXCIgIWltcG9ydGFudDsgfTwvc3R5bGU+XCIpLmFwcGVuZFRvKG8pKSxhLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIpJiYodGhpcy5fc3RvcmVkT3BhY2l0eT10aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIpKSx0aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIsYS5vcGFjaXR5KSksYS56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIikmJih0aGlzLl9zdG9yZWRaSW5kZXg9dGhpcy5oZWxwZXIuY3NzKFwiekluZGV4XCIpKSx0aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIixhLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmXCJIVE1MXCIhPT10aGlzLnNjcm9sbFBhcmVudFswXS50YWdOYW1lJiYodGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKSksdGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9uc3x8dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCFuKWZvcihzPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtzPj0wO3MtLSl0aGlzLmNvbnRhaW5lcnNbc10uX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gdC51aS5kZG1hbmFnZXImJih0LnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLHQudWkuZGRtYW5hZ2VyJiYhYS5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGUpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiksdGhpcy5fbW91c2VEcmFnKGUpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciBpLG4scyxvLGE9dGhpcy5vcHRpb25zLHI9ITE7Zm9yKHRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKFwiYWJzb2x1dGVcIiksdGhpcy5sYXN0UG9zaXRpb25BYnN8fCh0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzKSx0aGlzLm9wdGlvbnMuc2Nyb2xsJiYodGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHRoaXMub3ZlcmZsb3dPZmZzZXQudG9wK3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC1lLnBhZ2VZPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK2Euc2Nyb2xsU3BlZWQ6ZS5wYWdlWS10aGlzLm92ZXJmbG93T2Zmc2V0LnRvcDxhLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLWEuc2Nyb2xsU3BlZWQpLHRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC1lLnBhZ2VYPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQrYS5zY3JvbGxTcGVlZDplLnBhZ2VYLXRoaXMub3ZlcmZsb3dPZmZzZXQubGVmdDxhLnNjcm9sbFNlbnNpdGl2aXR5JiYodGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtYS5zY3JvbGxTcGVlZCkpOihlLnBhZ2VZLXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCk8YS5zY3JvbGxTZW5zaXRpdml0eT9yPXRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKHRoaXMuZG9jdW1lbnQuc2Nyb2xsVG9wKCktYS5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cuaGVpZ2h0KCktKGUucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSk8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKSthLnNjcm9sbFNwZWVkKSksZS5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKTxhLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLWEuc2Nyb2xsU3BlZWQpOnRoaXMud2luZG93LndpZHRoKCktKGUucGFnZVgtdGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCkpPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCh0aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSthLnNjcm9sbFNwZWVkKSkpLCExIT09ciYmdC51aS5kZG1hbmFnZXImJiFhLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsZSkpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oXCJhYnNvbHV0ZVwiKSx0aGlzLm9wdGlvbnMuYXhpcyYmXCJ5XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8KHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0K1wicHhcIiksdGhpcy5vcHRpb25zLmF4aXMmJlwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fCh0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArXCJweFwiKSxpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0paWYocz0obj10aGlzLml0ZW1zW2ldKS5pdGVtWzBdLChvPXRoaXMuX2ludGVyc2VjdHNXaXRoUG9pbnRlcihuKSkmJm4uaW5zdGFuY2U9PT10aGlzLmN1cnJlbnRDb250YWluZXImJiEocz09PXRoaXMuY3VycmVudEl0ZW1bMF18fHRoaXMucGxhY2Vob2xkZXJbMT09PW8/XCJuZXh0XCI6XCJwcmV2XCJdKClbMF09PT1zfHx0LmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0scyl8fFwic2VtaS1keW5hbWljXCI9PT10aGlzLm9wdGlvbnMudHlwZSYmdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0scykpKXtpZih0aGlzLmRpcmVjdGlvbj0xPT09bz9cImRvd25cIjpcInVwXCIsXCJwb2ludGVyXCIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiYhdGhpcy5faW50ZXJzZWN0c1dpdGhTaWRlcyhuKSlicmVhazt0aGlzLl9yZWFycmFuZ2UoZSxuKSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx0aGlzLl91aUhhc2goKSk7YnJlYWt9cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKGUpLHQudWkuZGRtYW5hZ2VyJiZ0LnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsZSksdGhpcy5fdHJpZ2dlcihcInNvcnRcIixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUsaSl7aWYoZSl7aWYodC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLGUpLHRoaXMub3B0aW9ucy5yZXZlcnQpe3ZhciBuPXRoaXMscz10aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpLG89dGhpcy5vcHRpb25zLmF4aXMsYT17fTtvJiZcInhcIiE9PW98fChhLmxlZnQ9cy5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0Kyh0aGlzLm9mZnNldFBhcmVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYm9keT8wOnRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbExlZnQpKSxvJiZcInlcIiE9PW98fChhLnRvcD1zLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKSksdGhpcy5yZXZlcnRpbmc9ITAsdCh0aGlzLmhlbHBlcikuYW5pbWF0ZShhLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnQsMTApfHw1MDAsZnVuY3Rpb24oKXtuLl9jbGVhcihlKX0pfWVsc2UgdGhpcy5fY2xlYXIoZSxpKTtyZXR1cm4hMX19LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAobmV3IHQuRXZlbnQoXCJtb3VzZXVwXCIse3RhcmdldDpudWxsfSkpLFwib3JpZ2luYWxcIj09PXRoaXMub3B0aW9ucy5oZWxwZXI/KHRoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUyksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5jdXJyZW50SXRlbSxcInVpLXNvcnRhYmxlLWhlbHBlclwiKSk6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciBlPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW2VdLl90cmlnZ2VyKFwib3V0XCIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyPTApfXJldHVybiB0aGlzLnBsYWNlaG9sZGVyJiYodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlJiZ0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksXCJvcmlnaW5hbFwiIT09dGhpcy5vcHRpb25zLmhlbHBlciYmdGhpcy5oZWxwZXImJnRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUmJnRoaXMuaGVscGVyLnJlbW92ZSgpLHQuZXh0ZW5kKHRoaXMse2hlbHBlcjpudWxsLGRyYWdnaW5nOiExLHJldmVydGluZzohMSxfbm9GaW5hbFNvcnQ6bnVsbH0pLHRoaXMuZG9tUG9zaXRpb24ucHJldj90KHRoaXMuZG9tUG9zaXRpb24ucHJldikuYWZ0ZXIodGhpcy5jdXJyZW50SXRlbSk6dCh0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCkucHJlcGVuZCh0aGlzLmN1cnJlbnRJdGVtKSksdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2dldEl0ZW1zQXNqUXVlcnkoZSYmZS5jb25uZWN0ZWQpLG49W107cmV0dXJuIGU9ZXx8e30sdChpKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9KHQoZS5pdGVtfHx0aGlzKS5hdHRyKGUuYXR0cmlidXRlfHxcImlkXCIpfHxcIlwiKS5tYXRjaChlLmV4cHJlc3Npb258fC8oLispW1xcLT1fXSguKykvKTtpJiZuLnB1c2goKGUua2V5fHxpWzFdK1wiW11cIikrXCI9XCIrKGUua2V5JiZlLmV4cHJlc3Npb24/aVsxXTppWzJdKSl9KSwhbi5sZW5ndGgmJmUua2V5JiZuLnB1c2goZS5rZXkrXCI9XCIpLG4uam9pbihcIiZcIil9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeShlJiZlLmNvbm5lY3RlZCksbj1bXTtyZXR1cm4gZT1lfHx7fSxpLmVhY2goZnVuY3Rpb24oKXtuLnB1c2godChlLml0ZW18fHRoaXMpLmF0dHIoZS5hdHRyaWJ1dGV8fFwiaWRcIil8fFwiXCIpfSksbn0sX2ludGVyc2VjdHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMubGVmdCxpPWUrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxuPXRoaXMucG9zaXRpb25BYnMudG9wLHM9bit0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxvPXQubGVmdCxhPW8rdC53aWR0aCxyPXQudG9wLGw9cit0LmhlaWdodCxoPXRoaXMub2Zmc2V0LmNsaWNrLnRvcCxjPXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdT1cInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHxuK2g+ciYmbitoPGwsZD1cInlcIj09PXRoaXMub3B0aW9ucy5heGlzfHxlK2M+byYmZStjPGEscD11JiZkO3JldHVyblwicG9pbnRlclwiPT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZXx8dGhpcy5vcHRpb25zLmZvcmNlUG9pbnRlckZvckNvbnRhaW5lcnN8fFwicG9pbnRlclwiIT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZSYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nP1wid2lkdGhcIjpcImhlaWdodFwiXT50W3RoaXMuZmxvYXRpbmc/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJdP3A6bzxlK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmaS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI8YSYmcjxuK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzImJnMtdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMjxsfSxfaW50ZXJzZWN0c1dpdGhQb2ludGVyOmZ1bmN0aW9uKHQpe3ZhciBlLGksbj1cInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCx0LmhlaWdodCkscz1cInlcIj09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LHQubGVmdCx0LndpZHRoKTtyZXR1cm4hKCFufHwhcykmJihlPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLGk9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKSx0aGlzLmZsb2F0aW5nP1wicmlnaHRcIj09PWl8fFwiZG93blwiPT09ZT8yOjE6ZSYmKFwiZG93blwiPT09ZT8yOjEpKX0sX2ludGVyc2VjdHNXaXRoU2lkZXM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsdC50b3ArdC5oZWlnaHQvMix0LmhlaWdodCksaT10aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LHQubGVmdCt0LndpZHRoLzIsdC53aWR0aCksbj10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxzPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7cmV0dXJuIHRoaXMuZmxvYXRpbmcmJnM/XCJyaWdodFwiPT09cyYmaXx8XCJsZWZ0XCI9PT1zJiYhaTpuJiYoXCJkb3duXCI9PT1uJiZlfHxcInVwXCI9PT1uJiYhZSl9LF9nZXREcmFnVmVydGljYWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLnRvcC10aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7cmV0dXJuIDAhPT10JiYodD4wP1wiZG93blwiOlwidXBcIil9LF9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLmxhc3RQb3NpdGlvbkFicy5sZWZ0O3JldHVybiAwIT09dCYmKHQ+MD9cInJpZ2h0XCI6XCJsZWZ0XCIpfSxyZWZyZXNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXModCksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3JldHVybiB0LmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT09U3RyaW5nP1t0LmNvbm5lY3RXaXRoXTp0LmNvbm5lY3RXaXRofSxfZ2V0SXRlbXNBc2pRdWVyeTpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7ci5wdXNoKHRoaXMpfXZhciBuLHMsbyxhLHI9W10sbD1bXSxoPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoaCYmZSlmb3Iobj1oLmxlbmd0aC0xO24+PTA7bi0tKWZvcihzPShvPXQoaFtuXSx0aGlzLmRvY3VtZW50WzBdKSkubGVuZ3RoLTE7cz49MDtzLS0pKGE9dC5kYXRhKG9bc10sdGhpcy53aWRnZXRGdWxsTmFtZSkpJiZhIT09dGhpcyYmIWEub3B0aW9ucy5kaXNhYmxlZCYmbC5wdXNoKFt0LmlzRnVuY3Rpb24oYS5vcHRpb25zLml0ZW1zKT9hLm9wdGlvbnMuaXRlbXMuY2FsbChhLmVsZW1lbnQpOnQoYS5vcHRpb25zLml0ZW1zLGEuZWxlbWVudCkubm90KFwiLnVpLXNvcnRhYmxlLWhlbHBlclwiKS5ub3QoXCIudWktc29ydGFibGUtcGxhY2Vob2xkZXJcIiksYV0pO2ZvcihsLnB1c2goW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudCxudWxsLHtvcHRpb25zOnRoaXMub3B0aW9ucyxpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLm5vdChcIi51aS1zb3J0YWJsZS1oZWxwZXJcIikubm90KFwiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIpLHRoaXNdKSxuPWwubGVuZ3RoLTE7bj49MDtuLS0pbFtuXVswXS5lYWNoKGkpO3JldHVybiB0KHIpfSxfcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRJdGVtLmZpbmQoXCI6ZGF0YShcIit0aGlzLndpZGdldE5hbWUrXCItaXRlbSlcIik7dGhpcy5pdGVtcz10LmdyZXAodGhpcy5pdGVtcyxmdW5jdGlvbih0KXtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldPT09dC5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24oZSl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBpLG4scyxvLGEscixsLGgsYz10aGlzLml0ZW1zLHU9W1t0LmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sZSx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6dCh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0sZD10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGQmJnRoaXMucmVhZHkpZm9yKGk9ZC5sZW5ndGgtMTtpPj0wO2ktLSlmb3Iobj0ocz10KGRbaV0sdGhpcy5kb2N1bWVudFswXSkpLmxlbmd0aC0xO24+PTA7bi0tKShvPXQuZGF0YShzW25dLHRoaXMud2lkZ2V0RnVsbE5hbWUpKSYmbyE9PXRoaXMmJiFvLm9wdGlvbnMuZGlzYWJsZWQmJih1LnB1c2goW3QuaXNGdW5jdGlvbihvLm9wdGlvbnMuaXRlbXMpP28ub3B0aW9ucy5pdGVtcy5jYWxsKG8uZWxlbWVudFswXSxlLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KG8ub3B0aW9ucy5pdGVtcyxvLmVsZW1lbnQpLG9dKSx0aGlzLmNvbnRhaW5lcnMucHVzaChvKSk7Zm9yKGk9dS5sZW5ndGgtMTtpPj0wO2ktLSlmb3IoYT11W2ldWzFdLG49MCxoPShyPXVbaV1bMF0pLmxlbmd0aDtuPGg7bisrKShsPXQocltuXSkpLmRhdGEodGhpcy53aWRnZXROYW1lK1wiLWl0ZW1cIixhKSxjLnB1c2goe2l0ZW06bCxpbnN0YW5jZTphLHdpZHRoOjAsaGVpZ2h0OjAsbGVmdDowLHRvcDowfSl9LHJlZnJlc2hQb3NpdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIGksbixzLG87Zm9yKHRoaXMuZmxvYXRpbmc9ISF0aGlzLml0ZW1zLmxlbmd0aCYmKFwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzRmxvYXRpbmcodGhpcy5pdGVtc1swXS5pdGVtKSksdGhpcy5vZmZzZXRQYXJlbnQmJnRoaXMuaGVscGVyJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSxpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pKG49dGhpcy5pdGVtc1tpXSkuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmbi5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXXx8KHM9dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/dCh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxuLml0ZW0pOm4uaXRlbSxlfHwobi53aWR0aD1zLm91dGVyV2lkdGgoKSxuLmhlaWdodD1zLm91dGVySGVpZ2h0KCkpLG89cy5vZmZzZXQoKSxuLmxlZnQ9by5sZWZ0LG4udG9wPW8udG9wKTtpZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlvPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm9mZnNldCgpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5sZWZ0PW8ubGVmdCx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUudG9wPW8udG9wLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbaV0uZWxlbWVudC5vdXRlckhlaWdodCgpO3JldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSl7dmFyIGksbj0oZT1lfHx0aGlzKS5vcHRpb25zO24ucGxhY2Vob2xkZXImJm4ucGxhY2Vob2xkZXIuY29uc3RydWN0b3IhPT1TdHJpbmd8fChpPW4ucGxhY2Vob2xkZXIsbi5wbGFjZWhvbGRlcj17ZWxlbWVudDpmdW5jdGlvbigpe3ZhciBuPWUuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxzPXQoXCI8XCIrbitcIj5cIixlLmRvY3VtZW50WzBdKTtyZXR1cm4gZS5fYWRkQ2xhc3MocyxcInVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyXCIsaXx8ZS5jdXJyZW50SXRlbVswXS5jbGFzc05hbWUpLl9yZW1vdmVDbGFzcyhzLFwidWktc29ydGFibGUtaGVscGVyXCIpLFwidGJvZHlcIj09PW4/ZS5fY3JlYXRlVHJQbGFjZWhvbGRlcihlLmN1cnJlbnRJdGVtLmZpbmQoXCJ0clwiKS5lcSgwKSx0KFwiPHRyPlwiLGUuZG9jdW1lbnRbMF0pLmFwcGVuZFRvKHMpKTpcInRyXCI9PT1uP2UuX2NyZWF0ZVRyUGxhY2Vob2xkZXIoZS5jdXJyZW50SXRlbSxzKTpcImltZ1wiPT09biYmcy5hdHRyKFwic3JjXCIsZS5jdXJyZW50SXRlbS5hdHRyKFwic3JjXCIpKSxpfHxzLmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSxzfSx1cGRhdGU6ZnVuY3Rpb24odCxzKXtpJiYhbi5mb3JjZVBsYWNlaG9sZGVyU2l6ZXx8KHMuaGVpZ2h0KCl8fHMuaGVpZ2h0KGUuY3VycmVudEl0ZW0uaW5uZXJIZWlnaHQoKS1wYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcyhcInBhZGRpbmdUb3BcIil8fDAsMTApLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ0JvdHRvbVwiKXx8MCwxMCkpLHMud2lkdGgoKXx8cy53aWR0aChlLmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcyhcInBhZGRpbmdMZWZ0XCIpfHwwLDEwKS1wYXJzZUludChlLmN1cnJlbnRJdGVtLmNzcyhcInBhZGRpbmdSaWdodFwiKXx8MCwxMCkpKX19KSxlLnBsYWNlaG9sZGVyPXQobi5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwoZS5lbGVtZW50LGUuY3VycmVudEl0ZW0pKSxlLmN1cnJlbnRJdGVtLmFmdGVyKGUucGxhY2Vob2xkZXIpLG4ucGxhY2Vob2xkZXIudXBkYXRlKGUsZS5wbGFjZWhvbGRlcil9LF9jcmVhdGVUclBsYWNlaG9sZGVyOmZ1bmN0aW9uKGUsaSl7dmFyIG49dGhpcztlLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3QoXCI8dGQ+JiMxNjA7PC90ZD5cIixuLmRvY3VtZW50WzBdKS5hdHRyKFwiY29sc3BhblwiLHQodGhpcykuYXR0cihcImNvbHNwYW5cIil8fDEpLmFwcGVuZFRvKGkpfSl9LF9jb250YWN0Q29udGFpbmVyczpmdW5jdGlvbihlKXt2YXIgaSxuLHMsbyxhLHIsbCxoLGMsdSxkPW51bGwscD1udWxsO2ZvcihpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlpZighdC5jb250YWlucyh0aGlzLmN1cnJlbnRJdGVtWzBdLHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50WzBdKSlpZih0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUpKXtpZihkJiZ0LmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50WzBdLGQuZWxlbWVudFswXSkpY29udGludWU7ZD10aGlzLmNvbnRhaW5lcnNbaV0scD1pfWVsc2UgdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbaV0uX3RyaWdnZXIoXCJvdXRcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYoZClpZigxPT09dGhpcy5jb250YWluZXJzLmxlbmd0aCl0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcnx8KHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MSk7ZWxzZXtmb3Iocz0xZTQsbz1udWxsLGE9KGM9ZC5mbG9hdGluZ3x8dGhpcy5faXNGbG9hdGluZyh0aGlzLmN1cnJlbnRJdGVtKSk/XCJsZWZ0XCI6XCJ0b3BcIixyPWM/XCJ3aWR0aFwiOlwiaGVpZ2h0XCIsdT1jP1wicGFnZVhcIjpcInBhZ2VZXCIsbj10aGlzLml0ZW1zLmxlbmd0aC0xO24+PTA7bi0tKXQuY29udGFpbnModGhpcy5jb250YWluZXJzW3BdLmVsZW1lbnRbMF0sdGhpcy5pdGVtc1tuXS5pdGVtWzBdKSYmdGhpcy5pdGVtc1tuXS5pdGVtWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmKGw9dGhpcy5pdGVtc1tuXS5pdGVtLm9mZnNldCgpW2FdLGg9ITEsZVt1XS1sPnRoaXMuaXRlbXNbbl1bcl0vMiYmKGg9ITApLE1hdGguYWJzKGVbdV0tbCk8cyYmKHM9TWF0aC5hYnMoZVt1XS1sKSxvPXRoaXMuaXRlbXNbbl0sdGhpcy5kaXJlY3Rpb249aD9cInVwXCI6XCJkb3duXCIpKTtpZighbyYmIXRoaXMub3B0aW9ucy5kcm9wT25FbXB0eSlyZXR1cm47aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPT09dGhpcy5jb250YWluZXJzW3BdKXJldHVybiB2b2lkKHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyfHwodGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY3VycmVudENvbnRhaW5lci5jb250YWluZXJDYWNoZS5vdmVyPTEpKTtvP3RoaXMuX3JlYXJyYW5nZShlLG8sbnVsbCwhMCk6dGhpcy5fcmVhcnJhbmdlKGUsbnVsbCx0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudCwhMCksdGhpcy5fdHJpZ2dlcihcImNoYW5nZVwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcImNoYW5nZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcy5jb250YWluZXJzW3BdLHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlci51cGRhdGUodGhpcy5jdXJyZW50Q29udGFpbmVyLHRoaXMucGxhY2Vob2xkZXIpLHRoaXMuY29udGFpbmVyc1twXS5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3BdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLG49dC5pc0Z1bmN0aW9uKGkuaGVscGVyKT90KGkuaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbZSx0aGlzLmN1cnJlbnRJdGVtXSkpOlwiY2xvbmVcIj09PWkuaGVscGVyP3RoaXMuY3VycmVudEl0ZW0uY2xvbmUoKTp0aGlzLmN1cnJlbnRJdGVtO3JldHVybiBuLnBhcmVudHMoXCJib2R5XCIpLmxlbmd0aHx8dChcInBhcmVudFwiIT09aS5hcHBlbmRUbz9pLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoblswXSksblswXT09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKFwicG9zaXRpb25cIiksdG9wOnRoaXMuY3VycmVudEl0ZW0uY3NzKFwidG9wXCIpLGxlZnQ6dGhpcy5jdXJyZW50SXRlbS5jc3MoXCJsZWZ0XCIpfSksblswXS5zdHlsZS53aWR0aCYmIWkuZm9yY2VIZWxwZXJTaXplfHxuLndpZHRoKHRoaXMuY3VycmVudEl0ZW0ud2lkdGgoKSksblswXS5zdHlsZS5oZWlnaHQmJiFpLmZvcmNlSGVscGVyU2l6ZXx8bi5oZWlnaHQodGhpcy5jdXJyZW50SXRlbS5oZWlnaHQoKSksbn0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oZSl7XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPWUuc3BsaXQoXCIgXCIpKSx0LmlzQXJyYXkoZSkmJihlPXtsZWZ0OitlWzBdLHRvcDorZVsxXXx8MH0pLFwibGVmdFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9ZS5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInJpZ2h0XCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLWUucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLFwidG9wXCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPWUudG9wK3RoaXMubWFyZ2lucy50b3ApLFwiYm90dG9tXCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWUuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7cmV0dXJuXCJhYnNvbHV0ZVwiPT09dGhpcy5jc3NQb3NpdGlvbiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZ0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKGUubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLGUudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiZcImh0bWxcIj09PXRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmdC51aS5pZSkmJihlPXt0b3A6MCxsZWZ0OjB9KSx7dG9wOmUudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApLGxlZnQ6ZS5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKFwicmVsYXRpdmVcIj09PXRoaXMuY3NzUG9zaXRpb24pe3ZhciB0PXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOnQudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJ0b3BcIiksMTApfHwwKSt0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSxsZWZ0OnQubGVmdC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwibGVmdFwiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoXCJtYXJnaW5MZWZ0XCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoXCJtYXJnaW5Ub3BcIiksMTApfHwwfX0sX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlclByb3BvcnRpb25zPXt3aWR0aDp0aGlzLmhlbHBlci5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCl9fSxfc2V0Q29udGFpbm1lbnQ6ZnVuY3Rpb24oKXt2YXIgZSxpLG4scz10aGlzLm9wdGlvbnM7XCJwYXJlbnRcIj09PXMuY29udGFpbm1lbnQmJihzLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLFxuXCJkb2N1bWVudFwiIT09cy5jb250YWlubWVudCYmXCJ3aW5kb3dcIiE9PXMuY29udGFpbm1lbnR8fCh0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxcImRvY3VtZW50XCI9PT1zLmNvbnRhaW5tZW50P3RoaXMuZG9jdW1lbnQud2lkdGgoKTp0aGlzLndpbmRvdy53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKFwiZG9jdW1lbnRcIj09PXMuY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodDp0aGlzLndpbmRvdy5oZWlnaHQoKXx8dGhpcy5kb2N1bWVudFswXS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSksL14oZG9jdW1lbnR8d2luZG93fHBhcmVudCkkLy50ZXN0KHMuY29udGFpbm1lbnQpfHwoZT10KHMuY29udGFpbm1lbnQpWzBdLGk9dChzLmNvbnRhaW5tZW50KS5vZmZzZXQoKSxuPVwiaGlkZGVuXCIhPT10KGUpLmNzcyhcIm92ZXJmbG93XCIpLHRoaXMuY29udGFpbm1lbnQ9W2kubGVmdCsocGFyc2VJbnQodChlKS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQodChlKS5jc3MoXCJwYWRkaW5nTGVmdFwiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ1RvcFwiKSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3AsaS5sZWZ0KyhuP01hdGgubWF4KGUuc2Nyb2xsV2lkdGgsZS5vZmZzZXRXaWR0aCk6ZS5vZmZzZXRXaWR0aCktKHBhcnNlSW50KHQoZSkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ1JpZ2h0XCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxpLnRvcCsobj9NYXRoLm1heChlLnNjcm9sbEhlaWdodCxlLm9mZnNldEhlaWdodCk6ZS5vZmZzZXRIZWlnaHQpLShwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGUsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIG49XCJhYnNvbHV0ZVwiPT09ZT8xOi0xLHM9XCJhYnNvbHV0ZVwiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZ0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxvPS8oaHRtbHxib2R5KS9pLnRlc3Qoc1swXS50YWdOYW1lKTtyZXR1cm57dG9wOmkudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpuK3RoaXMub2Zmc2V0LnBhcmVudC50b3Aqbi0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bz8wOnMuc2Nyb2xsVG9wKCkpKm4sbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpuK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0Km4tKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpvPzA6cy5zY3JvbGxMZWZ0KCkpKm59fSxfZ2VuZXJhdGVQb3NpdGlvbjpmdW5jdGlvbihlKXt2YXIgaSxuLHM9dGhpcy5vcHRpb25zLG89ZS5wYWdlWCxhPWUucGFnZVkscj1cImFic29sdXRlXCIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGw9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpO3JldHVyblwicmVsYXRpdmVcIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJihlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKG89dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYoYT10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihvPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXSYmKGE9dGhpcy5jb250YWlubWVudFszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxzLmdyaWQmJihpPXRoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChhLXRoaXMub3JpZ2luYWxQYWdlWSkvcy5ncmlkWzFdKSpzLmdyaWRbMV0sYT10aGlzLmNvbnRhaW5tZW50P2ktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdJiZpLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDw9dGhpcy5jb250YWlubWVudFszXT9pOmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPj10aGlzLmNvbnRhaW5tZW50WzFdP2ktcy5ncmlkWzFdOmkrcy5ncmlkWzFdOmksbj10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVgpL3MuZ3JpZFswXSkqcy5ncmlkWzBdLG89dGhpcy5jb250YWlubWVudD9uLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PXRoaXMuY29udGFpbm1lbnRbMF0mJm4tdGhpcy5vZmZzZXQuY2xpY2subGVmdDw9dGhpcy5jb250YWlubWVudFsyXT9uOm4tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXT9uLXMuZ3JpZFswXTpuK3MuZ3JpZFswXTpuKSkse3RvcDphLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bD8wOnIuc2Nyb2xsVG9wKCkpLGxlZnQ6by10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpsPzA6ci5zY3JvbGxMZWZ0KCkpfX0sX3JlYXJyYW5nZTpmdW5jdGlvbih0LGUsaSxuKXtpP2lbMF0uYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSk6ZS5pdGVtWzBdLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXJbMF0sXCJkb3duXCI9PT10aGlzLmRpcmVjdGlvbj9lLml0ZW1bMF06ZS5pdGVtWzBdLm5leHRTaWJsaW5nKSx0aGlzLmNvdW50ZXI9dGhpcy5jb3VudGVyPysrdGhpcy5jb3VudGVyOjE7dmFyIHM9dGhpcy5jb3VudGVyO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7cz09PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFuKX0pfSxfY2xlYXI6ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpKXtyZXR1cm4gZnVuY3Rpb24obil7aS5fdHJpZ2dlcih0LG4sZS5fdWlIYXNoKGUpKX19dGhpcy5yZXZlcnRpbmc9ITE7dmFyIG4scz1bXTtpZighdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsLHRoaXMuaGVscGVyWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKG4gaW4gdGhpcy5fc3RvcmVkQ1NTKVwiYXV0b1wiIT09dGhpcy5fc3RvcmVkQ1NTW25dJiZcInN0YXRpY1wiIT09dGhpcy5fc3RvcmVkQ1NTW25dfHwodGhpcy5fc3RvcmVkQ1NTW25dPVwiXCIpO3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUyksdGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5jdXJyZW50SXRlbSxcInVpLXNvcnRhYmxlLWhlbHBlclwiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih0aGlzLmZyb21PdXRzaWRlJiYhZSYmcy5wdXNoKGZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXIoXCJyZWNlaXZlXCIsdCx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksIXRoaXMuZnJvbU91dHNpZGUmJnRoaXMuZG9tUG9zaXRpb24ucHJldj09PXRoaXMuY3VycmVudEl0ZW0ucHJldigpLm5vdChcIi51aS1zb3J0YWJsZS1oZWxwZXJcIilbMF0mJnRoaXMuZG9tUG9zaXRpb24ucGFyZW50PT09dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXXx8ZXx8cy5wdXNoKGZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXIoXCJ1cGRhdGVcIix0LHRoaXMuX3VpSGFzaCgpKX0pLHRoaXMhPT10aGlzLmN1cnJlbnRDb250YWluZXImJihlfHwocy5wdXNoKGZ1bmN0aW9uKHQpe3RoaXMuX3RyaWdnZXIoXCJyZW1vdmVcIix0LHRoaXMuX3VpSGFzaCgpKX0pLHMucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcihcInJlY2VpdmVcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkscy5wdXNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0Ll90cmlnZ2VyKFwidXBkYXRlXCIsZSx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpKSksbj10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7bj49MDtuLS0pZXx8cy5wdXNoKGkoXCJkZWFjdGl2YXRlXCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbbl0pKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHMucHVzaChpKFwib3V0XCIsdGhpcyx0aGlzLmNvbnRhaW5lcnNbbl0pKSx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZih0aGlzLnN0b3JlZEN1cnNvciYmKHRoaXMuZG9jdW1lbnQuZmluZChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsdGhpcy5zdG9yZWRDdXJzb3IpLHRoaXMuc3RvcmVkU3R5bGVzaGVldC5yZW1vdmUoKSksdGhpcy5fc3RvcmVkT3BhY2l0eSYmdGhpcy5oZWxwZXIuY3NzKFwib3BhY2l0eVwiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKFwiekluZGV4XCIsXCJhdXRvXCI9PT10aGlzLl9zdG9yZWRaSW5kZXg/XCJcIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITEsZXx8dGhpcy5fdHJpZ2dlcihcImJlZm9yZVN0b3BcIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHwodGhpcy5oZWxwZXJbMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsKSwhZSl7Zm9yKG49MDtuPHMubGVuZ3RoO24rKylzW25dLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKFwic3RvcFwiLHQsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWx9LF90cmlnZ2VyOmZ1bmN0aW9uKCl7ITE9PT10LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpJiZ0aGlzLmNhbmNlbCgpfSxfdWlIYXNoOmZ1bmN0aW9uKGUpe3ZhciBpPWV8fHRoaXM7cmV0dXJue2hlbHBlcjppLmhlbHBlcixwbGFjZWhvbGRlcjppLnBsYWNlaG9sZGVyfHx0KFtdKSxwb3NpdGlvbjppLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246aS5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDppLnBvc2l0aW9uQWJzLGl0ZW06aS5jdXJyZW50SXRlbSxzZW5kZXI6ZT9lLmVsZW1lbnQ6bnVsbH19fSksdC53aWRnZXQoXCJ1aS5zcGlubmVyXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxpbnB1dD5cIix3aWRnZXRFdmVudFByZWZpeDpcInNwaW5cIixvcHRpb25zOntjbGFzc2VzOntcInVpLXNwaW5uZXJcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXNwaW5uZXItZG93blwiOlwidWktY29ybmVyLWJyXCIsXCJ1aS1zcGlubmVyLXVwXCI6XCJ1aS1jb3JuZXItdHJcIn0sY3VsdHVyZTpudWxsLGljb25zOntkb3duOlwidWktaWNvbi10cmlhbmdsZS0xLXNcIix1cDpcInVpLWljb24tdHJpYW5nbGUtMS1uXCJ9LGluY3JlbWVudGFsOiEwLG1heDpudWxsLG1pbjpudWxsLG51bWJlckZvcm1hdDpudWxsLHBhZ2U6MTAsc3RlcDoxLGNoYW5nZTpudWxsLHNwaW46bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbihcIm1heFwiLHRoaXMub3B0aW9ucy5tYXgpLHRoaXMuX3NldE9wdGlvbihcIm1pblwiLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbihcInN0ZXBcIix0aGlzLm9wdGlvbnMuc3RlcCksXCJcIiE9PXRoaXMudmFsdWUoKSYmdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpLCEwKSx0aGlzLl9kcmF3KCksdGhpcy5fb24odGhpcy5fZXZlbnRzKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlXCIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3N1cGVyKCksaT10aGlzLmVsZW1lbnQ7cmV0dXJuIHQuZWFjaChbXCJtaW5cIixcIm1heFwiLFwic3RlcFwiXSxmdW5jdGlvbih0LG4pe3ZhciBzPWkuYXR0cihuKTtudWxsIT1zJiZzLmxlbmd0aCYmKGVbbl09cyl9KSxlfSxfZXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0KHQpJiZ0aGlzLl9rZXlkb3duKHQpJiZ0LnByZXZlbnREZWZhdWx0KCl9LGtleXVwOlwiX3N0b3BcIixmb2N1czpmdW5jdGlvbigpe3RoaXMucHJldmlvdXM9dGhpcy5lbGVtZW50LnZhbCgpfSxibHVyOmZ1bmN0aW9uKHQpe3RoaXMuY2FuY2VsQmx1cj9kZWxldGUgdGhpcy5jYW5jZWxCbHVyOih0aGlzLl9zdG9wKCksdGhpcy5fcmVmcmVzaCgpLHRoaXMucHJldmlvdXMhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0KSl9LG1vdXNld2hlZWw6ZnVuY3Rpb24odCxlKXtpZihlKXtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KHQpKXJldHVybiExO3RoaXMuX3NwaW4oKGU+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCx0KSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcCh0KX0sMTAwKSx0LnByZXZlbnREZWZhdWx0KCl9fSxcIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b25cIjpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7dGhpcy5lbGVtZW50WzBdPT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKXx8KHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIiksdGhpcy5wcmV2aW91cz1uLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1ufSkpfXZhciBuO249dGhpcy5lbGVtZW50WzBdPT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKT90aGlzLnByZXZpb3VzOnRoaXMuZWxlbWVudC52YWwoKSxlLnByZXZlbnREZWZhdWx0KCksaS5jYWxsKHRoaXMpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsaS5jYWxsKHRoaXMpfSksITEhPT10aGlzLl9zdGFydChlKSYmdGhpcy5fcmVwZWF0KG51bGwsdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKFwidWktc3Bpbm5lci11cFwiKT8xOi0xLGUpfSxcIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uXCI6XCJfc3RvcFwiLFwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b25cIjpmdW5jdGlvbihlKXtpZih0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIikpcmV0dXJuITEhPT10aGlzLl9zdGFydChlKSYmdm9pZCB0aGlzLl9yZXBlYXQobnVsbCx0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zcGlubmVyLXVwXCIpPzE6LTEsZSl9LFwibW91c2VsZWF2ZSAudWktc3Bpbm5lci1idXR0b25cIjpcIl9zdG9wXCJ9LF9lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy51aVNwaW5uZXI9dGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKS53cmFwKFwiPHNwYW4+XCIpLnBhcmVudCgpLmFwcGVuZChcIjxhPjwvYT48YT48L2E+XCIpfSxfZHJhdzpmdW5jdGlvbigpe3RoaXMuX2VuaGFuY2UoKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpU3Bpbm5lcixcInVpLXNwaW5uZXJcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl9hZGRDbGFzcyhcInVpLXNwaW5uZXItaW5wdXRcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJyb2xlXCIsXCJzcGluYnV0dG9uXCIpLHRoaXMuYnV0dG9ucz10aGlzLnVpU3Bpbm5lci5jaGlsZHJlbihcImFcIikuYXR0cihcInRhYkluZGV4XCIsLTEpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCEwKS5idXR0b24oe2NsYXNzZXM6e1widWktYnV0dG9uXCI6XCJcIn19KSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmJ1dHRvbnMsXCJ1aS1jb3JuZXItYWxsXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9ucy5maXJzdCgpLFwidWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci11cFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmJ1dHRvbnMubGFzdCgpLFwidWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci1kb3duXCIpLHRoaXMuYnV0dG9ucy5maXJzdCgpLmJ1dHRvbih7aWNvbjp0aGlzLm9wdGlvbnMuaWNvbnMudXAsc2hvd0xhYmVsOiExfSksdGhpcy5idXR0b25zLmxhc3QoKS5idXR0b24oe2ljb246dGhpcy5vcHRpb25zLmljb25zLmRvd24sc2hvd0xhYmVsOiExfSksdGhpcy5idXR0b25zLmhlaWdodCgpPk1hdGguY2VpbCguNSp0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKSkmJnRoaXMudWlTcGlubmVyLmhlaWdodCgpPjAmJnRoaXMudWlTcGlubmVyLmhlaWdodCh0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKSl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxuPXQudWkua2V5Q29kZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIG4uVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLDEsZSksITA7Y2FzZSBuLkRPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC0xLGUpLCEwO2Nhc2Ugbi5QQUdFX1VQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCxpLnBhZ2UsZSksITA7Y2FzZSBuLlBBR0VfRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLWkucGFnZSxlKSwhMH1yZXR1cm4hMX0sX3N0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiEoIXRoaXMuc3Bpbm5pbmcmJiExPT09dGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsdCl8fCh0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksdGhpcy5zcGlubmluZz0hMCwwKSl9LF9yZXBlYXQ6ZnVuY3Rpb24odCxlLGkpe3Q9dHx8NTAwLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fcmVwZWF0KDQwLGUsaSl9LHQpLHRoaXMuX3NwaW4oZSp0aGlzLm9wdGlvbnMuc3RlcCxpKX0sX3NwaW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnZhbHVlKCl8fDA7dGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLGk9dGhpcy5fYWRqdXN0VmFsdWUoaSt0KnRoaXMuX2luY3JlbWVudCh0aGlzLmNvdW50ZXIpKSx0aGlzLnNwaW5uaW5nJiYhMT09PXRoaXMuX3RyaWdnZXIoXCJzcGluXCIsZSx7dmFsdWU6aX0pfHwodGhpcy5fdmFsdWUoaSksdGhpcy5jb3VudGVyKyspfSxfaW5jcmVtZW50OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtyZXR1cm4gaT90LmlzRnVuY3Rpb24oaSk/aShlKTpNYXRoLmZsb29yKGUqZSplLzVlNC1lKmUvNTAwKzE3KmUvMjAwKzEpOjF9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIG51bGwhPT10aGlzLm9wdGlvbnMubWluJiYodD1NYXRoLm1heCh0LHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksdH0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKHQpe3ZhciBlPXQudG9TdHJpbmcoKSxpPWUuaW5kZXhPZihcIi5cIik7cmV0dXJuLTE9PT1pPzA6ZS5sZW5ndGgtaS0xfSxfYWRqdXN0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxuPXRoaXMub3B0aW9ucztyZXR1cm4gaT10LShlPW51bGwhPT1uLm1pbj9uLm1pbjowKSx0PWUrKGk9TWF0aC5yb3VuZChpL24uc3RlcCkqbi5zdGVwKSx0PXBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSksbnVsbCE9PW4ubWF4JiZ0Pm4ubWF4P24ubWF4Om51bGwhPT1uLm1pbiYmdDxuLm1pbj9uLm1pbjp0fSxfc3RvcDpmdW5jdGlvbih0KXt0aGlzLnNwaW5uaW5nJiYoY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5jb3VudGVyPTAsdGhpcy5zcGlubmluZz0hMSx0aGlzLl90cmlnZ2VyKFwic3RvcFwiLHQpKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3ZhciBpLG4scztpZihcImN1bHR1cmVcIj09PXR8fFwibnVtYmVyRm9ybWF0XCI9PT10KXJldHVybiBpPXRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSksdGhpcy5vcHRpb25zW3RdPWUsdm9pZCB0aGlzLmVsZW1lbnQudmFsKHRoaXMuX2Zvcm1hdChpKSk7XCJtYXhcIiE9PXQmJlwibWluXCIhPT10JiZcInN0ZXBcIiE9PXR8fFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT10aGlzLl9wYXJzZShlKSksXCJpY29uc1wiPT09dCYmKG49dGhpcy5idXR0b25zLmZpcnN0KCkuZmluZChcIi51aS1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKG4sbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMudXApLHRoaXMuX2FkZENsYXNzKG4sbnVsbCxlLnVwKSxzPXRoaXMuYnV0dG9ucy5sYXN0KCkuZmluZChcIi51aS1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKHMsbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuZG93biksdGhpcy5fYWRkQ2xhc3MocyxudWxsLGUuZG93bikpLHRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLnVpU3Bpbm5lcixudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwhIXQpLHRoaXMuYnV0dG9ucy5idXR0b24odD9cImRpc2FibGVcIjpcImVuYWJsZVwiKX0sX3NldE9wdGlvbnM6byhmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KX0pLF9wYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmXCJcIiE9PXQmJih0PXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQodCwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K3QpLFwiXCI9PT10fHxpc05hTih0KT9udWxsOnR9LF9mb3JtYXQ6ZnVuY3Rpb24odCl7cmV0dXJuXCJcIj09PXQ/XCJcIjp3aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5mb3JtYXQodCx0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LHRoaXMub3B0aW9ucy5jdWx0dXJlKTp0fSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtaW5cIjp0aGlzLm9wdGlvbnMubWluLFwiYXJpYS12YWx1ZW1heFwiOnRoaXMub3B0aW9ucy5tYXgsXCJhcmlhLXZhbHVlbm93XCI6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0pfSxpc1ZhbGlkOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy52YWx1ZSgpO3JldHVybiBudWxsIT09dCYmdD09PXRoaXMuX2FkanVzdFZhbHVlKHQpfSxfdmFsdWU6ZnVuY3Rpb24odCxlKXt2YXIgaTtcIlwiIT09dCYmbnVsbCE9PShpPXRoaXMuX3BhcnNlKHQpKSYmKGV8fChpPXRoaXMuX2FkanVzdFZhbHVlKGkpKSx0PXRoaXMuX2Zvcm1hdChpKSksdGhpcy5lbGVtZW50LnZhbCh0KSx0aGlzLl9yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLCExKS5yZW1vdmVBdHRyKFwiYXV0b2NvbXBsZXRlIHJvbGUgYXJpYS12YWx1ZW1pbiBhcmlhLXZhbHVlbWF4IGFyaWEtdmFsdWVub3dcIiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOm8oZnVuY3Rpb24odCl7dGhpcy5fc3RlcFVwKHQpfSksX3N0ZXBVcDpmdW5jdGlvbih0KXt0aGlzLl9zdGFydCgpJiYodGhpcy5fc3BpbigodHx8MSkqdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHN0ZXBEb3duOm8oZnVuY3Rpb24odCl7dGhpcy5fc3RlcERvd24odCl9KSxfc3RlcERvd246ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKHR8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCksdGhpcy5fc3RvcCgpKX0scGFnZVVwOm8oZnVuY3Rpb24odCl7dGhpcy5fc3RlcFVwKCh0fHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjpvKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBEb3duKCh0fHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbih0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKTtvKHRoaXMuX3ZhbHVlKS5jYWxsKHRoaXMsdCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpU3Bpbm5lcn19KSwhMSE9PXQudWlCYWNrQ29tcGF0JiZ0LndpZGdldChcInVpLnNwaW5uZXJcIix0LnVpLnNwaW5uZXIse19lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy51aVNwaW5uZXI9dGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSl9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuXCI8c3Bhbj5cIn0sX2J1dHRvbkh0bWw6ZnVuY3Rpb24oKXtyZXR1cm5cIjxhPjwvYT48YT48L2E+XCJ9fSksdC51aS5zcGlubmVyLHQud2lkZ2V0KFwidWkudGFic1wiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNsYXNzZXM6e1widWktdGFic1wiOlwidWktY29ybmVyLWFsbFwiLFwidWktdGFicy1uYXZcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXRhYnMtcGFuZWxcIjpcInVpLWNvcm5lci1ib3R0b21cIixcInVpLXRhYnMtdGFiXCI6XCJ1aS1jb3JuZXItdG9wXCJ9LGNvbGxhcHNpYmxlOiExLGV2ZW50OlwiY2xpY2tcIixoZWlnaHRTdHlsZTpcImNvbnRlbnRcIixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfaXNMb2NhbDpmdW5jdGlvbigpe3ZhciB0PS8jLiokLztyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGksbjtpPWUuaHJlZi5yZXBsYWNlKHQsXCJcIiksbj1sb2NhdGlvbi5ocmVmLnJlcGxhY2UodCxcIlwiKTt0cnl7aT1kZWNvZGVVUklDb21wb25lbnQoaSl9Y2F0Y2godCl7fXRyeXtuPWRlY29kZVVSSUNvbXBvbmVudChuKX1jYXRjaCh0KXt9cmV0dXJuIGUuaGFzaC5sZW5ndGg+MSYmaT09PW59fSgpLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLl9hZGRDbGFzcyhcInVpLXRhYnNcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl90b2dnbGVDbGFzcyhcInVpLXRhYnMtY29sbGFwc2libGVcIixudWxsLGkuY29sbGFwc2libGUpLHRoaXMuX3Byb2Nlc3NUYWJzKCksaS5hY3RpdmU9dGhpcy5faW5pdGlhbEFjdGl2ZSgpLHQuaXNBcnJheShpLmRpc2FibGVkKSYmKGkuZGlzYWJsZWQ9dC51bmlxdWUoaS5kaXNhYmxlZC5jb25jYXQodC5tYXAodGhpcy50YWJzLmZpbHRlcihcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSxmdW5jdGlvbih0KXtyZXR1cm4gZS50YWJzLmluZGV4KHQpfSkpKS5zb3J0KCkpLCExIT09dGhpcy5vcHRpb25zLmFjdGl2ZSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKTp0aGlzLmFjdGl2ZT10KCksdGhpcy5fcmVmcmVzaCgpLHRoaXMuYWN0aXZlLmxlbmd0aCYmdGhpcy5sb2FkKGkuYWN0aXZlKX0sX2luaXRpYWxBY3RpdmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYWN0aXZlLGk9dGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlLG49bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7cmV0dXJuIG51bGw9PT1lJiYobiYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oaSxzKXtpZih0KHMpLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpPT09bilyZXR1cm4gZT1pLCExfSksbnVsbD09PWUmJihlPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKFwiLnVpLXRhYnMtYWN0aXZlXCIpKSksbnVsbCE9PWUmJi0xIT09ZXx8KGU9ISF0aGlzLnRhYnMubGVuZ3RoJiYwKSksITEhPT1lJiYtMT09PShlPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZXEoZSkpKSYmKGU9IWkmJjApLCFpJiYhMT09PWUmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJihlPTApLGV9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFiOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSk6dCgpfX0sX3RhYktleWRvd246ZnVuY3Rpb24oZSl7dmFyIGk9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKS5jbG9zZXN0KFwibGlcIiksbj10aGlzLnRhYnMuaW5kZXgoaSkscz0hMDtpZighdGhpcy5faGFuZGxlUGFnZU5hdihlKSl7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpuKys7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDpzPSExLG4tLTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6bj10aGlzLmFuY2hvcnMubGVuZ3RoLTE7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpuPTA7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6cmV0dXJuIGUucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx2b2lkIHRoaXMuX2FjdGl2YXRlKG4pO2Nhc2UgdC51aS5rZXlDb2RlLkVOVEVSOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdm9pZCB0aGlzLl9hY3RpdmF0ZShuIT09dGhpcy5vcHRpb25zLmFjdGl2ZSYmbik7ZGVmYXVsdDpyZXR1cm59ZS5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLG49dGhpcy5fZm9jdXNOZXh0VGFiKG4scyksZS5jdHJsS2V5fHxlLm1ldGFLZXl8fChpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsXCJmYWxzZVwiKSx0aGlzLnRhYnMuZXEobikuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixcInRydWVcIiksdGhpcy5hY3RpdmF0aW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5vcHRpb24oXCJhY3RpdmVcIixuKX0sdGhpcy5kZWxheSkpfX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9oYW5kbGVQYWdlTmF2KGUpfHxlLmN0cmxLZXkmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5VUCYmKGUucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS50cmlnZ2VyKFwiZm9jdXNcIikpfSxfaGFuZGxlUGFnZU5hdjpmdW5jdGlvbihlKXtyZXR1cm4gZS5hbHRLZXkmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5QQUdFX1VQPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZS0xLCExKSksITApOmUuYWx0S2V5JiZlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuUEFHRV9ET1dOPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITApOnZvaWQgMH0sX2ZpbmROZXh0VGFiOmZ1bmN0aW9uKGUsaSl7Zm9yKHZhciBuPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PXQuaW5BcnJheSgoZT5uJiYoZT0wKSxlPDAmJihlPW4pLGUpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCk7KWU9aT9lKzE6ZS0xO3JldHVybiBlfSxfZm9jdXNOZXh0VGFiOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9dGhpcy5fZmluZE5leHRUYWIodCxlKSx0aGlzLnRhYnMuZXEodCkudHJpZ2dlcihcImZvY3VzXCIpLHR9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcImFjdGl2ZVwiIT09dD8odGhpcy5fc3VwZXIodCxlKSxcImNvbGxhcHNpYmxlXCI9PT10JiYodGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS10YWJzLWNvbGxhcHNpYmxlXCIsbnVsbCxlKSxlfHwhMSE9PXRoaXMub3B0aW9ucy5hY3RpdmV8fHRoaXMuX2FjdGl2YXRlKDApKSxcImV2ZW50XCI9PT10JiZ0aGlzLl9zZXR1cEV2ZW50cyhlKSxcImhlaWdodFN0eWxlXCI9PT10JiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKGUpKTp0aGlzLl9hY3RpdmF0ZShlKX0sX3Nhbml0aXplU2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5yZXBsYWNlKC9bIVwiJCUmJygpKissLlxcLzo7PD0+P0BcXFtcXF1cXF5ge3x9fl0vZyxcIlxcXFwkJlwiKTpcIlwifSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGk9dGhpcy50YWJsaXN0LmNoaWxkcmVuKFwiOmhhcyhhW2hyZWZdKVwiKTtlLmRpc2FibGVkPXQubWFwKGkuZmlsdGVyKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4KHQpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKSwhMSE9PWUuYWN0aXZlJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuYWN0aXZlLmxlbmd0aCYmIXQuY29udGFpbnModGhpcy50YWJsaXN0WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLnRhYnMubGVuZ3RoPT09ZS5kaXNhYmxlZC5sZW5ndGg/KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSk6dGhpcy5fYWN0aXZhdGUodGhpcy5fZmluZE5leHRUYWIoTWF0aC5tYXgoMCxlLmFjdGl2ZS0xKSwhMSkpOmUuYWN0aXZlPXRoaXMudGFicy5pbmRleCh0aGlzLmFjdGl2ZSk6KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSksdGhpcy5fcmVmcmVzaCgpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbkRpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzLm5vdCh0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkpLmhpZGUoKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFjdGl2ZSxcInVpLXRhYnMtYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKFwidGFiSW5kZXhcIiwwKX0sX3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXRoaXMudGFicyxuPXRoaXMuYW5jaG9ycyxzPXRoaXMucGFuZWxzO3RoaXMudGFibGlzdD10aGlzLl9nZXRMaXN0KCkuYXR0cihcInJvbGVcIixcInRhYmxpc3RcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy50YWJsaXN0LFwidWktdGFicy1uYXZcIixcInVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlclwiKSx0aGlzLnRhYmxpc3Qub24oXCJtb3VzZWRvd25cIit0aGlzLmV2ZW50TmFtZXNwYWNlLFwiPiBsaVwiLGZ1bmN0aW9uKGUpe3QodGhpcykuaXMoXCIudWktc3RhdGUtZGlzYWJsZWRcIikmJmUucHJldmVudERlZmF1bHQoKX0pLm9uKFwiZm9jdXNcIit0aGlzLmV2ZW50TmFtZXNwYWNlLFwiLnVpLXRhYnMtYW5jaG9yXCIsZnVuY3Rpb24oKXt0KHRoaXMpLmNsb3Nlc3QoXCJsaVwiKS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmdGhpcy5ibHVyKCl9KSx0aGlzLnRhYnM9dGhpcy50YWJsaXN0LmZpbmQoXCI+IGxpOmhhcyhhW2hyZWZdKVwiKS5hdHRyKHtyb2xlOlwidGFiXCIsdGFiSW5kZXg6LTF9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLnRhYnMsXCJ1aS10YWJzLXRhYlwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLmFuY2hvcnM9dGhpcy50YWJzLm1hcChmdW5jdGlvbigpe3JldHVybiB0KFwiYVwiLHRoaXMpWzBdfSkuYXR0cih7cm9sZTpcInByZXNlbnRhdGlvblwiLHRhYkluZGV4Oi0xfSksdGhpcy5fYWRkQ2xhc3ModGhpcy5hbmNob3JzLFwidWktdGFicy1hbmNob3JcIiksdGhpcy5wYW5lbHM9dCgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGksbil7dmFyIHMsbyxhLHI9dChuKS51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKSxsPXQobikuY2xvc2VzdChcImxpXCIpLGg9bC5hdHRyKFwiYXJpYS1jb250cm9sc1wiKTtlLl9pc0xvY2FsKG4pPyhhPShzPW4uaGFzaCkuc3Vic3RyaW5nKDEpLG89ZS5lbGVtZW50LmZpbmQoZS5fc2FuaXRpemVTZWxlY3RvcihzKSkpOihzPVwiI1wiKyhhPWwuYXR0cihcImFyaWEtY29udHJvbHNcIil8fHQoe30pLnVuaXF1ZUlkKClbMF0uaWQpLChvPWUuZWxlbWVudC5maW5kKHMpKS5sZW5ndGh8fChvPWUuX2NyZWF0ZVBhbmVsKGEpKS5pbnNlcnRBZnRlcihlLnBhbmVsc1tpLTFdfHxlLnRhYmxpc3QpLG8uYXR0cihcImFyaWEtbGl2ZVwiLFwicG9saXRlXCIpKSxvLmxlbmd0aCYmKGUucGFuZWxzPWUucGFuZWxzLmFkZChvKSksaCYmbC5kYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIsaCksbC5hdHRyKHtcImFyaWEtY29udHJvbHNcIjphLFwiYXJpYS1sYWJlbGxlZGJ5XCI6cn0pLG8uYXR0cihcImFyaWEtbGFiZWxsZWRieVwiLHIpfSksdGhpcy5wYW5lbHMuYXR0cihcInJvbGVcIixcInRhYnBhbmVsXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMucGFuZWxzLFwidWktdGFicy1wYW5lbFwiLFwidWktd2lkZ2V0LWNvbnRlbnRcIiksaSYmKHRoaXMuX29mZihpLm5vdCh0aGlzLnRhYnMpKSx0aGlzLl9vZmYobi5ub3QodGhpcy5hbmNob3JzKSksdGhpcy5fb2ZmKHMubm90KHRoaXMucGFuZWxzKSkpfSxfZ2V0TGlzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhYmxpc3R8fHRoaXMuZWxlbWVudC5maW5kKFwib2wsIHVsXCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoXCI8ZGl2PlwiKS5hdHRyKFwiaWRcIixlKS5kYXRhKFwidWktdGFicy1kZXN0cm95XCIsITApfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24oZSl7dmFyIGksbixzO2Zvcih0LmlzQXJyYXkoZSkmJihlLmxlbmd0aD9lLmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJihlPSEwKTplPSExKSxzPTA7bj10aGlzLnRhYnNbc107cysrKWk9dChuKSwhMD09PWV8fC0xIT09dC5pbkFycmF5KHMsZSk/KGkuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIiksdGhpcy5fYWRkQ2xhc3MoaSxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIikpOihpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIpKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9ZSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLndpZGdldCgpLHRoaXMud2lkZ2V0RnVsbE5hbWUrXCItZGlzYWJsZWRcIixudWxsLCEwPT09ZSl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbihlKXt2YXIgaT17fTtlJiZ0LmVhY2goZS5zcGxpdChcIiBcIiksZnVuY3Rpb24odCxlKXtpW2VdPVwiX2V2ZW50SGFuZGxlclwifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbighMCx0aGlzLmFuY2hvcnMse2NsaWNrOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX19KSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsaSksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOlwiX3RhYktleWRvd25cIn0pLHRoaXMuX29uKHRoaXMucGFuZWxzLHtrZXlkb3duOlwiX3BhbmVsS2V5ZG93blwifSksdGhpcy5fZm9jdXNhYmxlKHRoaXMudGFicyksdGhpcy5faG92ZXJhYmxlKHRoaXMudGFicyl9LF9zZXR1cEhlaWdodFN0eWxlOmZ1bmN0aW9uKGUpe3ZhciBpLG49dGhpcy5lbGVtZW50LnBhcmVudCgpO1wiZmlsbFwiPT09ZT8oaT1uLmhlaWdodCgpLGktPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoXCI6dmlzaWJsZVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxuPWUuY3NzKFwicG9zaXRpb25cIik7XCJhYnNvbHV0ZVwiIT09biYmXCJmaXhlZFwiIT09biYmKGktPWUub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuZWxlbWVudC5jaGlsZHJlbigpLm5vdCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2ktPXQodGhpcykub3V0ZXJIZWlnaHQoITApfSksdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe3QodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsaS10KHRoaXMpLmlubmVySGVpZ2h0KCkrdCh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIikpOlwiYXV0b1wiPT09ZSYmKGk9MCx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7aT1NYXRoLm1heChpLHQodGhpcykuaGVpZ2h0KFwiXCIpLmhlaWdodCgpKX0pLmhlaWdodChpKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLG49dGhpcy5hY3RpdmUscz10KGUuY3VycmVudFRhcmdldCkuY2xvc2VzdChcImxpXCIpLG89c1swXT09PW5bMF0sYT1vJiZpLmNvbGxhcHNpYmxlLHI9YT90KCk6dGhpcy5fZ2V0UGFuZWxGb3JUYWIocyksbD1uLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYihuKTp0KCksaD17b2xkVGFiOm4sb2xkUGFuZWw6bCxuZXdUYWI6YT90KCk6cyxuZXdQYW5lbDpyfTtlLnByZXZlbnREZWZhdWx0KCkscy5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpfHxzLmhhc0NsYXNzKFwidWktdGFicy1sb2FkaW5nXCIpfHx0aGlzLnJ1bm5pbmd8fG8mJiFpLmNvbGxhcHNpYmxlfHwhMT09PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVBY3RpdmF0ZVwiLGUsaCl8fChpLmFjdGl2ZT0hYSYmdGhpcy50YWJzLmluZGV4KHMpLHRoaXMuYWN0aXZlPW8/dCgpOnMsdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksbC5sZW5ndGh8fHIubGVuZ3RofHx0LmVycm9yKFwialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuXCIpLHIubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KHMpLGUpLHRoaXMuX3RvZ2dsZShlLGgpKX0sX3RvZ2dsZTpmdW5jdGlvbihlLGkpe2Z1bmN0aW9uIG4oKXtvLnJ1bm5pbmc9ITEsby5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSxpKX1mdW5jdGlvbiBzKCl7by5fYWRkQ2xhc3MoaS5uZXdUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxhLmxlbmd0aCYmby5vcHRpb25zLnNob3c/by5fc2hvdyhhLG8ub3B0aW9ucy5zaG93LG4pOihhLnNob3coKSxuKCkpfXZhciBvPXRoaXMsYT1pLm5ld1BhbmVsLHI9aS5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAsci5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocix0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe28uX3JlbW92ZUNsYXNzKGkub2xkVGFiLmNsb3Nlc3QoXCJsaVwiKSxcInVpLXRhYnMtYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIikscygpfSk6KHRoaXMuX3JlbW92ZUNsYXNzKGkub2xkVGFiLmNsb3Nlc3QoXCJsaVwiKSxcInVpLXRhYnMtYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksci5oaWRlKCkscygpKSxyLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxpLm9sZFRhYi5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSksYS5sZW5ndGgmJnIubGVuZ3RoP2kub2xkVGFiLmF0dHIoXCJ0YWJJbmRleFwiLC0xKTphLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09dCh0aGlzKS5hdHRyKFwidGFiSW5kZXhcIil9KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksYS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLGkubmV3VGFiLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpLG49dGhpcy5fZmluZEFjdGl2ZShlKTtuWzBdIT09dGhpcy5hY3RpdmVbMF0mJihuLmxlbmd0aHx8KG49dGhpcy5hY3RpdmUpLGk9bi5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OnQubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT1lP3QoKTp0aGlzLnRhYnMuZXEoZSl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoXCJbaHJlZiQ9J1wiK3QudWkuZXNjYXBlU2VsZWN0b3IoZSkrXCInXVwiKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy50YWJsaXN0LnJlbW92ZUF0dHIoXCJyb2xlXCIpLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmFuY2hvcnMucmVtb3ZlQXR0cihcInJvbGUgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYnMuYWRkKHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7dC5kYXRhKHRoaXMsXCJ1aS10YWJzLWRlc3Ryb3lcIik/dCh0aGlzKS5yZW1vdmUoKTp0KHRoaXMpLnJlbW92ZUF0dHIoXCJyb2xlIHRhYkluZGV4IGFyaWEtbGl2ZSBhcmlhLWJ1c3kgYXJpYS1zZWxlY3RlZCBhcmlhLWxhYmVsbGVkYnkgYXJpYS1oaWRkZW4gYXJpYS1leHBhbmRlZFwiKX0pLHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUuZGF0YShcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiKTtpP2UuYXR0cihcImFyaWEtY29udHJvbHNcIixpKS5yZW1vdmVEYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIpOmUucmVtb3ZlQXR0cihcImFyaWEtY29udHJvbHNcIil9KSx0aGlzLnBhbmVscy5zaG93KCksXCJjb250ZW50XCIhPT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJnRoaXMucGFuZWxzLmNzcyhcImhlaWdodFwiLFwiXCIpfSxlbmFibGU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkOyExIT09aSYmKHZvaWQgMD09PWU/aT0hMTooZT10aGlzLl9nZXRJbmRleChlKSxpPXQuaXNBcnJheShpKT90Lm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT90Om51bGx9KTp0Lm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24odCxpKXtyZXR1cm4gaSE9PWU/aTpudWxsfSkpLHRoaXMuX3NldE9wdGlvbkRpc2FibGVkKGkpKX0sZGlzYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYoITAhPT1pKXtpZih2b2lkIDA9PT1lKWk9ITA7ZWxzZXtpZihlPXRoaXMuX2dldEluZGV4KGUpLC0xIT09dC5pbkFycmF5KGUsaSkpcmV0dXJuO2k9dC5pc0FycmF5KGkpP3QubWVyZ2UoW2VdLGkpLnNvcnQoKTpbZV19dGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoaSl9fSxsb2FkOmZ1bmN0aW9uKGUsaSl7ZT10aGlzLl9nZXRJbmRleChlKTt2YXIgbj10aGlzLHM9dGhpcy50YWJzLmVxKGUpLG89cy5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpLGE9dGhpcy5fZ2V0UGFuZWxGb3JUYWIocykscj17dGFiOnMscGFuZWw6YX0sbD1mdW5jdGlvbih0LGUpe1wiYWJvcnRcIj09PWUmJm4ucGFuZWxzLnN0b3AoITEsITApLG4uX3JlbW92ZUNsYXNzKHMsXCJ1aS10YWJzLWxvYWRpbmdcIiksYS5yZW1vdmVBdHRyKFwiYXJpYS1idXN5XCIpLHQ9PT1uLnhociYmZGVsZXRlIG4ueGhyfTt0aGlzLl9pc0xvY2FsKG9bMF0pfHwodGhpcy54aHI9dC5hamF4KHRoaXMuX2FqYXhTZXR0aW5ncyhvLGkscikpLHRoaXMueGhyJiZcImNhbmNlbGVkXCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYodGhpcy5fYWRkQ2xhc3MocyxcInVpLXRhYnMtbG9hZGluZ1wiKSxhLmF0dHIoXCJhcmlhLWJ1c3lcIixcInRydWVcIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbih0LGUscyl7c2V0VGltZW91dChmdW5jdGlvbigpe2EuaHRtbCh0KSxuLl90cmlnZ2VyKFwibG9hZFwiLGksciksbChzLGUpfSwxKX0pLmZhaWwoZnVuY3Rpb24odCxlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7bCh0LGUpfSwxKX0pKSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24oZSxpLG4pe3ZhciBzPXRoaXM7cmV0dXJue3VybDplLmF0dHIoXCJocmVmXCIpLnJlcGxhY2UoLyMuKiQvLFwiXCIpLGJlZm9yZVNlbmQ6ZnVuY3Rpb24oZSxvKXtyZXR1cm4gcy5fdHJpZ2dlcihcImJlZm9yZUxvYWRcIixpLHQuZXh0ZW5kKHtqcVhIUjplLGFqYXhTZXR0aW5nczpvfSxuKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSkuYXR0cihcImFyaWEtY29udHJvbHNcIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoXCIjXCIraSkpfX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkudGFic1wiLHQudWkudGFicyx7X3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMuX2FkZENsYXNzKHRoaXMudGFicyxcInVpLXRhYlwiKX19KSx0LnVpLnRhYnMsdC53aWRnZXQoXCJ1aS50b29sdGlwXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntjbGFzc2VzOntcInVpLXRvb2x0aXBcIjpcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LXNoYWRvd1wifSxjb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5hdHRyKFwidGl0bGVcIil8fFwiXCI7cmV0dXJuIHQoXCI8YT5cIikudGV4dChlKS5odG1sKCl9LGhpZGU6ITAsaXRlbXM6XCJbdGl0bGVdOm5vdChbZGlzYWJsZWRdKVwiLHBvc2l0aW9uOntteTpcImxlZnQgdG9wKzE1XCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcImZsaXBmaXQgZmxpcFwifSxzaG93OiEwLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfYWRkRGVzY3JpYmVkQnk6ZnVuY3Rpb24oZSxpKXt2YXIgbj0oZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKXx8XCJcIikuc3BsaXQoL1xccysvKTtuLnB1c2goaSksZS5kYXRhKFwidWktdG9vbHRpcC1pZFwiLGkpLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsdC50cmltKG4uam9pbihcIiBcIikpKX0sX3JlbW92ZURlc2NyaWJlZEJ5OmZ1bmN0aW9uKGUpe3ZhciBpPWUuZGF0YShcInVpLXRvb2x0aXAtaWRcIiksbj0oZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKXx8XCJcIikuc3BsaXQoL1xccysvKSxzPXQuaW5BcnJheShpLG4pOy0xIT09cyYmbi5zcGxpY2UocywxKSxlLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLWlkXCIpLChuPXQudHJpbShuLmpvaW4oXCIgXCIpKSk/ZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLG4pOmUucmVtb3ZlQXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vbih7bW91c2VvdmVyOlwib3BlblwiLGZvY3VzaW46XCJvcGVuXCJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLmxpdmVSZWdpb249dChcIjxkaXY+XCIpLmF0dHIoe3JvbGU6XCJsb2dcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fYWRkQ2xhc3ModGhpcy5saXZlUmVnaW9uLG51bGwsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5kaXNhYmxlZFRpdGxlcz10KFtdKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBuPXRoaXM7dGhpcy5fc3VwZXIoZSxpKSxcImNvbnRlbnRcIj09PWUmJnQuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKHQsZSl7bi5fdXBkYXRlQ29udGVudChlLmVsZW1lbnQpfSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzW3Q/XCJfZGlzYWJsZVwiOlwiX2VuYWJsZVwiXSgpfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxuKXt2YXIgcz10LkV2ZW50KFwiYmx1clwiKTtzLnRhcmdldD1zLmN1cnJlbnRUYXJnZXQ9bi5lbGVtZW50WzBdLGUuY2xvc2UocywhMCl9KSx0aGlzLmRpc2FibGVkVGl0bGVzPXRoaXMuZGlzYWJsZWRUaXRsZXMuYWRkKHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7aWYoZS5pcyhcIlt0aXRsZV1cIikpcmV0dXJuIGUuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIixlLmF0dHIoXCJ0aXRsZVwiKSkucmVtb3ZlQXR0cihcInRpdGxlXCIpfSkpfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZFRpdGxlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiZlLmF0dHIoXCJ0aXRsZVwiLGUuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpfSksdGhpcy5kaXNhYmxlZFRpdGxlcz10KFtdKX0sb3BlbjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLG49dChlP2UudGFyZ2V0OnRoaXMuZWxlbWVudCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuaXRlbXMpO24ubGVuZ3RoJiYhbi5kYXRhKFwidWktdG9vbHRpcC1pZFwiKSYmKG4uYXR0cihcInRpdGxlXCIpJiZuLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIsbi5hdHRyKFwidGl0bGVcIikpLG4uZGF0YShcInVpLXRvb2x0aXAtb3BlblwiLCEwKSxlJiZcIm1vdXNlb3ZlclwiPT09ZS50eXBlJiZuLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsbj10KHRoaXMpO24uZGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSYmKChlPXQuRXZlbnQoXCJibHVyXCIpKS50YXJnZXQ9ZS5jdXJyZW50VGFyZ2V0PXRoaXMsaS5jbG9zZShlLCEwKSksbi5hdHRyKFwidGl0bGVcIikmJihuLnVuaXF1ZUlkKCksaS5wYXJlbnRzW3RoaXMuaWRdPXtlbGVtZW50OnRoaXMsdGl0bGU6bi5hdHRyKFwidGl0bGVcIil9LG4uYXR0cihcInRpdGxlXCIsXCJcIikpfSksdGhpcy5fcmVnaXN0ZXJDbG9zZUhhbmRsZXJzKGUsbiksdGhpcy5fdXBkYXRlQ29udGVudChuLGUpKX0sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxuPXRoaXMub3B0aW9ucy5jb250ZW50LHM9dGhpcyxvPWU/ZS50eXBlOm51bGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG58fG4ubm9kZVR5cGV8fG4uanF1ZXJ5KXJldHVybiB0aGlzLl9vcGVuKGUsdCxuKTsoaT1uLmNhbGwodFswXSxmdW5jdGlvbihpKXtzLl9kZWxheShmdW5jdGlvbigpe3QuZGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSYmKGUmJihlLnR5cGU9byksdGhpcy5fb3BlbihlLHQsaSkpfSl9KSkmJnRoaXMuX29wZW4oZSx0LGkpfSxfb3BlbjpmdW5jdGlvbihlLGksbil7ZnVuY3Rpb24gcyh0KXtoLm9mPXQsYS5pcyhcIjpoaWRkZW5cIil8fGEucG9zaXRpb24oaCl9dmFyIG8sYSxyLGwsaD10LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKG4pe2lmKG89dGhpcy5fZmluZChpKSlyZXR1cm4gdm9pZCBvLnRvb2x0aXAuZmluZChcIi51aS10b29sdGlwLWNvbnRlbnRcIikuaHRtbChuKTtpLmlzKFwiW3RpdGxlXVwiKSYmKGUmJlwibW91c2VvdmVyXCI9PT1lLnR5cGU/aS5hdHRyKFwidGl0bGVcIixcIlwiKTppLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKSksbz10aGlzLl90b29sdGlwKGkpLGE9by50b29sdGlwLHRoaXMuX2FkZERlc2NyaWJlZEJ5KGksYS5hdHRyKFwiaWRcIikpLGEuZmluZChcIi51aS10b29sdGlwLWNvbnRlbnRcIikuaHRtbChuKSx0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksKGw9dChcIjxkaXY+XCIpLmh0bWwoYS5maW5kKFwiLnVpLXRvb2x0aXAtY29udGVudFwiKS5odG1sKCkpKS5yZW1vdmVBdHRyKFwibmFtZVwiKS5maW5kKFwiW25hbWVdXCIpLnJlbW92ZUF0dHIoXCJuYW1lXCIpLGwucmVtb3ZlQXR0cihcImlkXCIpLmZpbmQoXCJbaWRdXCIpLnJlbW92ZUF0dHIoXCJpZFwiKSxsLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbiksdGhpcy5vcHRpb25zLnRyYWNrJiZlJiYvXm1vdXNlLy50ZXN0KGUudHlwZSk/KHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlbW92ZTpzfSkscyhlKSk6YS5wb3NpdGlvbih0LmV4dGVuZCh7b2Y6aX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksYS5oaWRlKCksdGhpcy5fc2hvdyhhLHRoaXMub3B0aW9ucy5zaG93KSx0aGlzLm9wdGlvbnMudHJhY2smJnRoaXMub3B0aW9ucy5zaG93JiZ0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSYmKHI9dGhpcy5kZWxheWVkU2hvdz1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2EuaXMoXCI6dmlzaWJsZVwiKSYmKHMoaC5vZiksY2xlYXJJbnRlcnZhbChyKSl9LHQuZnguaW50ZXJ2YWwpKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiLGUse3Rvb2x0aXA6YX0pfX0sX3JlZ2lzdGVyQ2xvc2VIYW5kbGVyczpmdW5jdGlvbihlLGkpe3ZhciBuPXtrZXl1cDpmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuRVNDQVBFKXt2YXIgbj10LkV2ZW50KGUpO24uY3VycmVudFRhcmdldD1pWzBdLHRoaXMuY2xvc2UobiwhMCl9fX07aVswXSE9PXRoaXMuZWxlbWVudFswXSYmKG4ucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlVG9vbHRpcCh0aGlzLl9maW5kKGkpLnRvb2x0aXApfSksZSYmXCJtb3VzZW92ZXJcIiE9PWUudHlwZXx8KG4ubW91c2VsZWF2ZT1cImNsb3NlXCIpLGUmJlwiZm9jdXNpblwiIT09ZS50eXBlfHwobi5mb2N1c291dD1cImNsb3NlXCIpLHRoaXMuX29uKCEwLGksbil9LGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBpLG49dGhpcyxzPXQoZT9lLmN1cnJlbnRUYXJnZXQ6dGhpcy5lbGVtZW50KSxvPXRoaXMuX2ZpbmQocyk7bz8oaT1vLnRvb2x0aXAsby5jbG9zaW5nfHwoY2xlYXJJbnRlcnZhbCh0aGlzLmRlbGF5ZWRTaG93KSxzLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiYhcy5hdHRyKFwidGl0bGVcIikmJnMuYXR0cihcInRpdGxlXCIscy5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSksdGhpcy5fcmVtb3ZlRGVzY3JpYmVkQnkocyksby5oaWRpbmc9ITAsaS5zdG9wKCEwKSx0aGlzLl9oaWRlKGksdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtuLl9yZW1vdmVUb29sdGlwKHQodGhpcykpfSkscy5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpLHRoaXMuX29mZihzLFwibW91c2VsZWF2ZSBmb2N1c291dCBrZXl1cFwiKSxzWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYocyxcInJlbW92ZVwiKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcIm1vdXNlbW92ZVwiKSxlJiZcIm1vdXNlbGVhdmVcIj09PWUudHlwZSYmdC5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbihlLGkpe3QoaS5lbGVtZW50KS5hdHRyKFwidGl0bGVcIixpLnRpdGxlKSxkZWxldGUgbi5wYXJlbnRzW2VdfSksby5jbG9zaW5nPSEwLHRoaXMuX3RyaWdnZXIoXCJjbG9zZVwiLGUse3Rvb2x0aXA6aX0pLG8uaGlkaW5nfHwoby5jbG9zaW5nPSExKSkpOnMucmVtb3ZlRGF0YShcInVpLXRvb2x0aXAtb3BlblwiKX0sX3Rvb2x0aXA6ZnVuY3Rpb24oZSl7dmFyIGk9dChcIjxkaXY+XCIpLmF0dHIoXCJyb2xlXCIsXCJ0b29sdGlwXCIpLG49dChcIjxkaXY+XCIpLmFwcGVuZFRvKGkpLHM9aS51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKTtyZXR1cm4gdGhpcy5fYWRkQ2xhc3MobixcInVpLXRvb2x0aXAtY29udGVudFwiKSx0aGlzLl9hZGRDbGFzcyhpLFwidWktdG9vbHRpcFwiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLGkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oZSkpLHRoaXMudG9vbHRpcHNbc109e2VsZW1lbnQ6ZSx0b29sdGlwOml9fSxfZmluZDpmdW5jdGlvbih0KXt2YXIgZT10LmRhdGEoXCJ1aS10b29sdGlwLWlkXCIpO3JldHVybiBlP3RoaXMudG9vbHRpcHNbZV06bnVsbH0sX3JlbW92ZVRvb2x0aXA6ZnVuY3Rpb24odCl7dC5yZW1vdmUoKSxkZWxldGUgdGhpcy50b29sdGlwc1t0LmF0dHIoXCJpZFwiKV19LF9hcHBlbmRUbzpmdW5jdGlvbih0KXt2YXIgZT10LmNsb3Nlc3QoXCIudWktZnJvbnQsIGRpYWxvZ1wiKTtyZXR1cm4gZS5sZW5ndGh8fChlPXRoaXMuZG9jdW1lbnRbMF0uYm9keSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGksbil7dmFyIHM9dC5FdmVudChcImJsdXJcIiksbz1uLmVsZW1lbnQ7cy50YXJnZXQ9cy5jdXJyZW50VGFyZ2V0PW9bMF0sZS5jbG9zZShzLCEwKSx0KFwiI1wiK2kpLnJlbW92ZSgpLG8uZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikmJihvLmF0dHIoXCJ0aXRsZVwiKXx8by5hdHRyKFwidGl0bGVcIixvLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKSxvLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpKX0pLHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKX19KSwhMSE9PXQudWlCYWNrQ29tcGF0JiZ0LndpZGdldChcInVpLnRvb2x0aXBcIix0LnVpLnRvb2x0aXAse29wdGlvbnM6e3Rvb2x0aXBDbGFzczpudWxsfSxfdG9vbHRpcDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyYmdC50b29sdGlwLmFkZENsYXNzKHRoaXMub3B0aW9ucy50b29sdGlwQ2xhc3MpLHR9fSksdC51aS50b29sdGlwfSksZnVuY3Rpb24odCl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIl0sdCk6dChcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9yZXF1aXJlKFwianF1ZXJ5XCIpOndpbmRvdy5qUXVlcnl8fHdpbmRvdy5aZXB0byl9KGZ1bmN0aW9uKHQpe3ZhciBlLGksbixzLG8sYSxyPWZ1bmN0aW9uKCl7fSxsPSEhd2luZG93LmpRdWVyeSxoPXQod2luZG93KSxjPWZ1bmN0aW9uKHQsaSl7ZS5ldi5vbihcIm1mcFwiK3QrXCIubWZwXCIsaSl9LHU9ZnVuY3Rpb24oZSxpLG4scyl7dmFyIG89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gby5jbGFzc05hbWU9XCJtZnAtXCIrZSxuJiYoby5pbm5lckhUTUw9bikscz9pJiZpLmFwcGVuZENoaWxkKG8pOihvPXQobyksaSYmby5hcHBlbmRUbyhpKSksb30sZD1mdW5jdGlvbihpLG4pe2UuZXYudHJpZ2dlckhhbmRsZXIoXCJtZnBcIitpLG4pLGUuc3QuY2FsbGJhY2tzJiYoaT1pLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpK2kuc2xpY2UoMSksZS5zdC5jYWxsYmFja3NbaV0mJmUuc3QuY2FsbGJhY2tzW2ldLmFwcGx5KGUsdC5pc0FycmF5KG4pP246W25dKSl9LHA9ZnVuY3Rpb24oaSl7cmV0dXJuIGk9PT1hJiZlLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bnx8KGUuY3VyclRlbXBsYXRlLmNsb3NlQnRuPXQoZS5zdC5jbG9zZU1hcmt1cC5yZXBsYWNlKFwiJXRpdGxlJVwiLGUuc3QudENsb3NlKSksYT1pKSxlLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bn0sZj1mdW5jdGlvbigpe3QubWFnbmlmaWNQb3B1cC5pbnN0YW5jZXx8KChlPW5ldyByKS5pbml0KCksdC5tYWduaWZpY1BvcHVwLmluc3RhbmNlPWUpfTtyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cixpbml0OmZ1bmN0aW9uKCl7dmFyIGk9bmF2aWdhdG9yLmFwcFZlcnNpb247ZS5pc0xvd0lFPWUuaXNJRTg9ZG9jdW1lbnQuYWxsJiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcixlLmlzQW5kcm9pZD0vYW5kcm9pZC9naS50ZXN0KGkpLGUuaXNJT1M9L2lwaG9uZXxpcGFkfGlwb2QvZ2kudGVzdChpKSxlLnN1cHBvcnRzVHJhbnNpdGlvbj1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJwXCIpLnN0eWxlLGU9W1wibXNcIixcIk9cIixcIk1velwiLFwiV2Via2l0XCJdO2lmKHZvaWQgMCE9PXQudHJhbnNpdGlvbilyZXR1cm4hMFxuO2Zvcig7ZS5sZW5ndGg7KWlmKGUucG9wKCkrXCJUcmFuc2l0aW9uXCJpbiB0KXJldHVybiEwO3JldHVybiExfSgpLGUucHJvYmFibHlNb2JpbGU9ZS5pc0FuZHJvaWR8fGUuaXNJT1N8fC8oT3BlcmEgTWluaSl8S2luZGxlfHdlYk9TfEJsYWNrQmVycnl8KE9wZXJhIE1vYmkpfChXaW5kb3dzIFBob25lKXxJRU1vYmlsZS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksbj10KGRvY3VtZW50KSxlLnBvcHVwc0NhY2hlPXt9fSxvcGVuOmZ1bmN0aW9uKGkpe3ZhciBzO2lmKCExPT09aS5pc09iail7ZS5pdGVtcz1pLml0ZW1zLnRvQXJyYXkoKSxlLmluZGV4PTA7dmFyIGEscj1pLml0ZW1zO2ZvcihzPTA7czxyLmxlbmd0aDtzKyspaWYoKGE9cltzXSkucGFyc2VkJiYoYT1hLmVsWzBdKSxhPT09aS5lbFswXSl7ZS5pbmRleD1zO2JyZWFrfX1lbHNlIGUuaXRlbXM9dC5pc0FycmF5KGkuaXRlbXMpP2kuaXRlbXM6W2kuaXRlbXNdLGUuaW5kZXg9aS5pbmRleHx8MDtpZighZS5pc09wZW4pe2UudHlwZXM9W10sbz1cIlwiLGkubWFpbkVsJiZpLm1haW5FbC5sZW5ndGg/ZS5ldj1pLm1haW5FbC5lcSgwKTplLmV2PW4saS5rZXk/KGUucG9wdXBzQ2FjaGVbaS5rZXldfHwoZS5wb3B1cHNDYWNoZVtpLmtleV09e30pLGUuY3VyclRlbXBsYXRlPWUucG9wdXBzQ2FjaGVbaS5rZXldKTplLmN1cnJUZW1wbGF0ZT17fSxlLnN0PXQuZXh0ZW5kKCEwLHt9LHQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cyxpKSxlLmZpeGVkQ29udGVudFBvcz1cImF1dG9cIj09PWUuc3QuZml4ZWRDb250ZW50UG9zPyFlLnByb2JhYmx5TW9iaWxlOmUuc3QuZml4ZWRDb250ZW50UG9zLGUuc3QubW9kYWwmJihlLnN0LmNsb3NlT25Db250ZW50Q2xpY2s9ITEsZS5zdC5jbG9zZU9uQmdDbGljaz0hMSxlLnN0LnNob3dDbG9zZUJ0bj0hMSxlLnN0LmVuYWJsZUVzY2FwZUtleT0hMSksZS5iZ092ZXJsYXl8fChlLmJnT3ZlcmxheT11KFwiYmdcIikub24oXCJjbGljay5tZnBcIixmdW5jdGlvbigpe2UuY2xvc2UoKX0pLGUud3JhcD11KFwid3JhcFwiKS5hdHRyKFwidGFiaW5kZXhcIiwtMSkub24oXCJjbGljay5tZnBcIixmdW5jdGlvbih0KXtlLl9jaGVja0lmQ2xvc2UodC50YXJnZXQpJiZlLmNsb3NlKCl9KSxlLmNvbnRhaW5lcj11KFwiY29udGFpbmVyXCIsZS53cmFwKSksZS5jb250ZW50Q29udGFpbmVyPXUoXCJjb250ZW50XCIpLGUuc3QucHJlbG9hZGVyJiYoZS5wcmVsb2FkZXI9dShcInByZWxvYWRlclwiLGUuY29udGFpbmVyLGUuc3QudExvYWRpbmcpKTt2YXIgbD10Lm1hZ25pZmljUG9wdXAubW9kdWxlcztmb3Iocz0wO3M8bC5sZW5ndGg7cysrKXt2YXIgZj1sW3NdO2Y9Zi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStmLnNsaWNlKDEpLGVbXCJpbml0XCIrZl0uY2FsbChlKX1kKFwiQmVmb3JlT3BlblwiKSxlLnN0LnNob3dDbG9zZUJ0biYmKGUuc3QuY2xvc2VCdG5JbnNpZGU/KGMoXCJNYXJrdXBQYXJzZVwiLGZ1bmN0aW9uKHQsZSxpLG4pe2kuY2xvc2VfcmVwbGFjZVdpdGg9cChuLnR5cGUpfSksbys9XCIgbWZwLWNsb3NlLWJ0bi1pblwiKTplLndyYXAuYXBwZW5kKHAoKSkpLGUuc3QuYWxpZ25Ub3AmJihvKz1cIiBtZnAtYWxpZ24tdG9wXCIpLGUuZml4ZWRDb250ZW50UG9zP2Uud3JhcC5jc3Moe292ZXJmbG93OmUuc3Qub3ZlcmZsb3dZLG92ZXJmbG93WDpcImhpZGRlblwiLG92ZXJmbG93WTplLnN0Lm92ZXJmbG93WX0pOmUud3JhcC5jc3Moe3RvcDpoLnNjcm9sbFRvcCgpLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLCghMT09PWUuc3QuZml4ZWRCZ1Bvc3x8XCJhdXRvXCI9PT1lLnN0LmZpeGVkQmdQb3MmJiFlLmZpeGVkQ29udGVudFBvcykmJmUuYmdPdmVybGF5LmNzcyh7aGVpZ2h0Om4uaGVpZ2h0KCkscG9zaXRpb246XCJhYnNvbHV0ZVwifSksZS5zdC5lbmFibGVFc2NhcGVLZXkmJm4ub24oXCJrZXl1cC5tZnBcIixmdW5jdGlvbih0KXsyNz09PXQua2V5Q29kZSYmZS5jbG9zZSgpfSksaC5vbihcInJlc2l6ZS5tZnBcIixmdW5jdGlvbigpe2UudXBkYXRlU2l6ZSgpfSksZS5zdC5jbG9zZU9uQ29udGVudENsaWNrfHwobys9XCIgbWZwLWF1dG8tY3Vyc29yXCIpLG8mJmUud3JhcC5hZGRDbGFzcyhvKTt2YXIgZz1lLndIPWguaGVpZ2h0KCksbT17fTtpZihlLmZpeGVkQ29udGVudFBvcyYmZS5faGFzU2Nyb2xsQmFyKGcpKXt2YXIgdj1lLl9nZXRTY3JvbGxiYXJTaXplKCk7diYmKG0ubWFyZ2luUmlnaHQ9dil9ZS5maXhlZENvbnRlbnRQb3MmJihlLmlzSUU3P3QoXCJib2R5LCBodG1sXCIpLmNzcyhcIm92ZXJmbG93XCIsXCJoaWRkZW5cIik6bS5vdmVyZmxvdz1cImhpZGRlblwiKTt2YXIgYj1lLnN0Lm1haW5DbGFzcztyZXR1cm4gZS5pc0lFNyYmKGIrPVwiIG1mcC1pZTdcIiksYiYmZS5fYWRkQ2xhc3NUb01GUChiKSxlLnVwZGF0ZUl0ZW1IVE1MKCksZChcIkJ1aWxkQ29udHJvbHNcIiksdChcImh0bWxcIikuY3NzKG0pLGUuYmdPdmVybGF5LmFkZChlLndyYXApLnByZXBlbmRUbyhlLnN0LnByZXBlbmRUb3x8dChkb2N1bWVudC5ib2R5KSksZS5fbGFzdEZvY3VzZWRFbD1kb2N1bWVudC5hY3RpdmVFbGVtZW50LHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmNvbnRlbnQ/KGUuX2FkZENsYXNzVG9NRlAoXCJtZnAtcmVhZHlcIiksZS5fc2V0Rm9jdXMoKSk6ZS5iZ092ZXJsYXkuYWRkQ2xhc3MoXCJtZnAtcmVhZHlcIiksbi5vbihcImZvY3VzaW4ubWZwXCIsZS5fb25Gb2N1c0luKX0sMTYpLGUuaXNPcGVuPSEwLGUudXBkYXRlU2l6ZShnKSxkKFwiT3BlblwiKSxpfWUudXBkYXRlSXRlbUhUTUwoKX0sY2xvc2U6ZnVuY3Rpb24oKXtlLmlzT3BlbiYmKGQoXCJCZWZvcmVDbG9zZVwiKSxlLmlzT3Blbj0hMSxlLnN0LnJlbW92YWxEZWxheSYmIWUuaXNMb3dJRSYmZS5zdXBwb3J0c1RyYW5zaXRpb24/KGUuX2FkZENsYXNzVG9NRlAoXCJtZnAtcmVtb3ZpbmdcIiksc2V0VGltZW91dChmdW5jdGlvbigpe2UuX2Nsb3NlKCl9LGUuc3QucmVtb3ZhbERlbGF5KSk6ZS5fY2xvc2UoKSl9LF9jbG9zZTpmdW5jdGlvbigpe2QoXCJDbG9zZVwiKTt2YXIgaT1cIm1mcC1yZW1vdmluZyBtZnAtcmVhZHkgXCI7aWYoZS5iZ092ZXJsYXkuZGV0YWNoKCksZS53cmFwLmRldGFjaCgpLGUuY29udGFpbmVyLmVtcHR5KCksZS5zdC5tYWluQ2xhc3MmJihpKz1lLnN0Lm1haW5DbGFzcytcIiBcIiksZS5fcmVtb3ZlQ2xhc3NGcm9tTUZQKGkpLGUuZml4ZWRDb250ZW50UG9zKXt2YXIgcz17bWFyZ2luUmlnaHQ6XCJcIn07ZS5pc0lFNz90KFwiYm9keSwgaHRtbFwiKS5jc3MoXCJvdmVyZmxvd1wiLFwiXCIpOnMub3ZlcmZsb3c9XCJcIix0KFwiaHRtbFwiKS5jc3Mocyl9bi5vZmYoXCJrZXl1cC5tZnAgZm9jdXNpbi5tZnBcIiksZS5ldi5vZmYoXCIubWZwXCIpLGUud3JhcC5hdHRyKFwiY2xhc3NcIixcIm1mcC13cmFwXCIpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKSxlLmJnT3ZlcmxheS5hdHRyKFwiY2xhc3NcIixcIm1mcC1iZ1wiKSxlLmNvbnRhaW5lci5hdHRyKFwiY2xhc3NcIixcIm1mcC1jb250YWluZXJcIiksIWUuc3Quc2hvd0Nsb3NlQnRufHxlLnN0LmNsb3NlQnRuSW5zaWRlJiYhMCE9PWUuY3VyclRlbXBsYXRlW2UuY3Vyckl0ZW0udHlwZV18fGUuY3VyclRlbXBsYXRlLmNsb3NlQnRuJiZlLmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bi5kZXRhY2goKSxlLnN0LmF1dG9Gb2N1c0xhc3QmJmUuX2xhc3RGb2N1c2VkRWwmJnQoZS5fbGFzdEZvY3VzZWRFbCkuZm9jdXMoKSxlLmN1cnJJdGVtPW51bGwsZS5jb250ZW50PW51bGwsZS5jdXJyVGVtcGxhdGU9bnVsbCxlLnByZXZIZWlnaHQ9MCxkKFwiQWZ0ZXJDbG9zZVwiKX0sdXBkYXRlU2l6ZTpmdW5jdGlvbih0KXtpZihlLmlzSU9TKXt2YXIgaT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgvd2luZG93LmlubmVyV2lkdGgsbj13aW5kb3cuaW5uZXJIZWlnaHQqaTtlLndyYXAuY3NzKFwiaGVpZ2h0XCIsbiksZS53SD1ufWVsc2UgZS53SD10fHxoLmhlaWdodCgpO2UuZml4ZWRDb250ZW50UG9zfHxlLndyYXAuY3NzKFwiaGVpZ2h0XCIsZS53SCksZChcIlJlc2l6ZVwiKX0sdXBkYXRlSXRlbUhUTUw6ZnVuY3Rpb24oKXt2YXIgaT1lLml0ZW1zW2UuaW5kZXhdO2UuY29udGVudENvbnRhaW5lci5kZXRhY2goKSxlLmNvbnRlbnQmJmUuY29udGVudC5kZXRhY2goKSxpLnBhcnNlZHx8KGk9ZS5wYXJzZUVsKGUuaW5kZXgpKTt2YXIgbj1pLnR5cGU7aWYoZChcIkJlZm9yZUNoYW5nZVwiLFtlLmN1cnJJdGVtP2UuY3Vyckl0ZW0udHlwZTpcIlwiLG5dKSxlLmN1cnJJdGVtPWksIWUuY3VyclRlbXBsYXRlW25dKXt2YXIgbz0hIWUuc3Rbbl0mJmUuc3Rbbl0ubWFya3VwO2QoXCJGaXJzdE1hcmt1cFBhcnNlXCIsbyksZS5jdXJyVGVtcGxhdGVbbl09IW98fHQobyl9cyYmcyE9PWkudHlwZSYmZS5jb250YWluZXIucmVtb3ZlQ2xhc3MoXCJtZnAtXCIrcytcIi1ob2xkZXJcIik7dmFyIGE9ZVtcImdldFwiK24uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbi5zbGljZSgxKV0oaSxlLmN1cnJUZW1wbGF0ZVtuXSk7ZS5hcHBlbmRDb250ZW50KGEsbiksaS5wcmVsb2FkZWQ9ITAsZChcIkNoYW5nZVwiLGkpLHM9aS50eXBlLGUuY29udGFpbmVyLnByZXBlbmQoZS5jb250ZW50Q29udGFpbmVyKSxkKFwiQWZ0ZXJDaGFuZ2VcIil9LGFwcGVuZENvbnRlbnQ6ZnVuY3Rpb24odCxpKXtlLmNvbnRlbnQ9dCx0P2Uuc3Quc2hvd0Nsb3NlQnRuJiZlLnN0LmNsb3NlQnRuSW5zaWRlJiYhMD09PWUuY3VyclRlbXBsYXRlW2ldP2UuY29udGVudC5maW5kKFwiLm1mcC1jbG9zZVwiKS5sZW5ndGh8fGUuY29udGVudC5hcHBlbmQocCgpKTplLmNvbnRlbnQ9dDplLmNvbnRlbnQ9XCJcIixkKFwiQmVmb3JlQXBwZW5kXCIpLGUuY29udGFpbmVyLmFkZENsYXNzKFwibWZwLVwiK2krXCItaG9sZGVyXCIpLGUuY29udGVudENvbnRhaW5lci5hcHBlbmQoZS5jb250ZW50KX0scGFyc2VFbDpmdW5jdGlvbihpKXt2YXIgbixzPWUuaXRlbXNbaV07aWYocy50YWdOYW1lP3M9e2VsOnQocyl9OihuPXMudHlwZSxzPXtkYXRhOnMsc3JjOnMuc3JjfSkscy5lbCl7Zm9yKHZhciBvPWUudHlwZXMsYT0wO2E8by5sZW5ndGg7YSsrKWlmKHMuZWwuaGFzQ2xhc3MoXCJtZnAtXCIrb1thXSkpe249b1thXTticmVha31zLnNyYz1zLmVsLmF0dHIoXCJkYXRhLW1mcC1zcmNcIikscy5zcmN8fChzLnNyYz1zLmVsLmF0dHIoXCJocmVmXCIpKX1yZXR1cm4gcy50eXBlPW58fGUuc3QudHlwZXx8XCJpbmxpbmVcIixzLmluZGV4PWkscy5wYXJzZWQ9ITAsZS5pdGVtc1tpXT1zLGQoXCJFbGVtZW50UGFyc2VcIixzKSxlLml0ZW1zW2ldfSxhZGRHcm91cDpmdW5jdGlvbih0LGkpe3ZhciBuPWZ1bmN0aW9uKG4pe24ubWZwRWw9dGhpcyxlLl9vcGVuQ2xpY2sobix0LGkpfTtpfHwoaT17fSk7dmFyIHM9XCJjbGljay5tYWduaWZpY1BvcHVwXCI7aS5tYWluRWw9dCxpLml0ZW1zPyhpLmlzT2JqPSEwLHQub2ZmKHMpLm9uKHMsbikpOihpLmlzT2JqPSExLGkuZGVsZWdhdGU/dC5vZmYocykub24ocyxpLmRlbGVnYXRlLG4pOihpLml0ZW1zPXQsdC5vZmYocykub24ocyxuKSkpfSxfb3BlbkNsaWNrOmZ1bmN0aW9uKGksbixzKXtpZigodm9pZCAwIT09cy5taWRDbGljaz9zLm1pZENsaWNrOnQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5taWRDbGljayl8fCEoMj09PWkud2hpY2h8fGkuY3RybEtleXx8aS5tZXRhS2V5fHxpLmFsdEtleXx8aS5zaGlmdEtleSkpe3ZhciBvPXZvaWQgMCE9PXMuZGlzYWJsZU9uP3MuZGlzYWJsZU9uOnQubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5kaXNhYmxlT247aWYobylpZih0LmlzRnVuY3Rpb24obykpe2lmKCFvLmNhbGwoZSkpcmV0dXJuITB9ZWxzZSBpZihoLndpZHRoKCk8bylyZXR1cm4hMDtpLnR5cGUmJihpLnByZXZlbnREZWZhdWx0KCksZS5pc09wZW4mJmkuc3RvcFByb3BhZ2F0aW9uKCkpLHMuZWw9dChpLm1mcEVsKSxzLmRlbGVnYXRlJiYocy5pdGVtcz1uLmZpbmQocy5kZWxlZ2F0ZSkpLGUub3BlbihzKX19LHVwZGF0ZVN0YXR1czpmdW5jdGlvbih0LG4pe2lmKGUucHJlbG9hZGVyKXtpIT09dCYmZS5jb250YWluZXIucmVtb3ZlQ2xhc3MoXCJtZnAtcy1cIitpKSxufHxcImxvYWRpbmdcIiE9PXR8fChuPWUuc3QudExvYWRpbmcpO3ZhciBzPXtzdGF0dXM6dCx0ZXh0Om59O2QoXCJVcGRhdGVTdGF0dXNcIixzKSx0PXMuc3RhdHVzLG49cy50ZXh0LGUucHJlbG9hZGVyLmh0bWwobiksZS5wcmVsb2FkZXIuZmluZChcImFcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKHQpe3Quc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9KSxlLmNvbnRhaW5lci5hZGRDbGFzcyhcIm1mcC1zLVwiK3QpLGk9dH19LF9jaGVja0lmQ2xvc2U6ZnVuY3Rpb24oaSl7aWYoIXQoaSkuaGFzQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKSl7dmFyIG49ZS5zdC5jbG9zZU9uQ29udGVudENsaWNrLHM9ZS5zdC5jbG9zZU9uQmdDbGljaztpZihuJiZzKXJldHVybiEwO2lmKCFlLmNvbnRlbnR8fHQoaSkuaGFzQ2xhc3MoXCJtZnAtY2xvc2VcIil8fGUucHJlbG9hZGVyJiZpPT09ZS5wcmVsb2FkZXJbMF0pcmV0dXJuITA7aWYoaT09PWUuY29udGVudFswXXx8dC5jb250YWlucyhlLmNvbnRlbnRbMF0saSkpe2lmKG4pcmV0dXJuITB9ZWxzZSBpZihzJiZ0LmNvbnRhaW5zKGRvY3VtZW50LGkpKXJldHVybiEwO3JldHVybiExfX0sX2FkZENsYXNzVG9NRlA6ZnVuY3Rpb24odCl7ZS5iZ092ZXJsYXkuYWRkQ2xhc3ModCksZS53cmFwLmFkZENsYXNzKHQpfSxfcmVtb3ZlQ2xhc3NGcm9tTUZQOmZ1bmN0aW9uKHQpe3RoaXMuYmdPdmVybGF5LnJlbW92ZUNsYXNzKHQpLGUud3JhcC5yZW1vdmVDbGFzcyh0KX0sX2hhc1Njcm9sbEJhcjpmdW5jdGlvbih0KXtyZXR1cm4oZS5pc0lFNz9uLmhlaWdodCgpOmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KT4odHx8aC5oZWlnaHQoKSl9LF9zZXRGb2N1czpmdW5jdGlvbigpeyhlLnN0LmZvY3VzP2UuY29udGVudC5maW5kKGUuc3QuZm9jdXMpLmVxKDApOmUud3JhcCkuZm9jdXMoKX0sX29uRm9jdXNJbjpmdW5jdGlvbihpKXtpZihpLnRhcmdldCE9PWUud3JhcFswXSYmIXQuY29udGFpbnMoZS53cmFwWzBdLGkudGFyZ2V0KSlyZXR1cm4gZS5fc2V0Rm9jdXMoKSwhMX0sX3BhcnNlTWFya3VwOmZ1bmN0aW9uKGUsaSxuKXt2YXIgcztuLmRhdGEmJihpPXQuZXh0ZW5kKG4uZGF0YSxpKSksZChcIk1hcmt1cFBhcnNlXCIsW2UsaSxuXSksdC5lYWNoKGksZnVuY3Rpb24oaSxuKXtpZih2b2lkIDA9PT1ufHwhMT09PW4pcmV0dXJuITA7aWYoKHM9aS5zcGxpdChcIl9cIikpLmxlbmd0aD4xKXt2YXIgbz1lLmZpbmQoXCIubWZwLVwiK3NbMF0pO2lmKG8ubGVuZ3RoPjApe3ZhciBhPXNbMV07XCJyZXBsYWNlV2l0aFwiPT09YT9vWzBdIT09blswXSYmby5yZXBsYWNlV2l0aChuKTpcImltZ1wiPT09YT9vLmlzKFwiaW1nXCIpP28uYXR0cihcInNyY1wiLG4pOm8ucmVwbGFjZVdpdGgodChcIjxpbWc+XCIpLmF0dHIoXCJzcmNcIixuKS5hdHRyKFwiY2xhc3NcIixvLmF0dHIoXCJjbGFzc1wiKSkpOm8uYXR0cihzWzFdLG4pfX1lbHNlIGUuZmluZChcIi5tZnAtXCIraSkuaHRtbChuKX0pfSxfZ2V0U2Nyb2xsYmFyU2l6ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PWUuc2Nyb2xsYmFyU2l6ZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LnN0eWxlLmNzc1RleHQ9XCJ3aWR0aDogOTlweDsgaGVpZ2h0OiA5OXB4OyBvdmVyZmxvdzogc2Nyb2xsOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTk5OTlweDtcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHQpLGUuc2Nyb2xsYmFyU2l6ZT10Lm9mZnNldFdpZHRoLXQuY2xpZW50V2lkdGgsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0KX1yZXR1cm4gZS5zY3JvbGxiYXJTaXplfX0sdC5tYWduaWZpY1BvcHVwPXtpbnN0YW5jZTpudWxsLHByb3RvOnIucHJvdG90eXBlLG1vZHVsZXM6W10sb3BlbjpmdW5jdGlvbihlLGkpe3JldHVybiBmKCksKGU9ZT90LmV4dGVuZCghMCx7fSxlKTp7fSkuaXNPYmo9ITAsZS5pbmRleD1pfHwwLHRoaXMuaW5zdGFuY2Uub3BlbihlKX0sY2xvc2U6ZnVuY3Rpb24oKXtyZXR1cm4gdC5tYWduaWZpY1BvcHVwLmluc3RhbmNlJiZ0Lm1hZ25pZmljUG9wdXAuaW5zdGFuY2UuY2xvc2UoKX0scmVnaXN0ZXJNb2R1bGU6ZnVuY3Rpb24oZSxpKXtpLm9wdGlvbnMmJih0Lm1hZ25pZmljUG9wdXAuZGVmYXVsdHNbZV09aS5vcHRpb25zKSx0LmV4dGVuZCh0aGlzLnByb3RvLGkucHJvdG8pLHRoaXMubW9kdWxlcy5wdXNoKGUpfSxkZWZhdWx0czp7ZGlzYWJsZU9uOjAsa2V5Om51bGwsbWlkQ2xpY2s6ITEsbWFpbkNsYXNzOlwiXCIscHJlbG9hZGVyOiEwLGZvY3VzOlwiXCIsY2xvc2VPbkNvbnRlbnRDbGljazohMSxjbG9zZU9uQmdDbGljazohMCxjbG9zZUJ0bkluc2lkZTohMCxzaG93Q2xvc2VCdG46ITAsZW5hYmxlRXNjYXBlS2V5OiEwLG1vZGFsOiExLGFsaWduVG9wOiExLHJlbW92YWxEZWxheTowLHByZXBlbmRUbzpudWxsLGZpeGVkQ29udGVudFBvczpcImF1dG9cIixmaXhlZEJnUG9zOlwiYXV0b1wiLG92ZXJmbG93WTpcImF1dG9cIixjbG9zZU1hcmt1cDonPGJ1dHRvbiB0aXRsZT1cIiV0aXRsZSVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZnAtY2xvc2VcIj4mIzIxNTs8L2J1dHRvbj4nLHRDbG9zZTpcIkNsb3NlIChFc2MpXCIsdExvYWRpbmc6XCJMb2FkaW5nLi4uXCIsYXV0b0ZvY3VzTGFzdDohMH19LHQuZm4ubWFnbmlmaWNQb3B1cD1mdW5jdGlvbihpKXtmKCk7dmFyIG49dCh0aGlzKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSlpZihcIm9wZW5cIj09PWkpe3ZhciBzLG89bD9uLmRhdGEoXCJtYWduaWZpY1BvcHVwXCIpOm5bMF0ubWFnbmlmaWNQb3B1cCxhPXBhcnNlSW50KGFyZ3VtZW50c1sxXSwxMCl8fDA7by5pdGVtcz9zPW8uaXRlbXNbYV06KHM9bixvLmRlbGVnYXRlJiYocz1zLmZpbmQoby5kZWxlZ2F0ZSkpLHM9cy5lcShhKSksZS5fb3BlbkNsaWNrKHttZnBFbDpzfSxuLG8pfWVsc2UgZS5pc09wZW4mJmVbaV0uYXBwbHkoZSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpO2Vsc2UgaT10LmV4dGVuZCghMCx7fSxpKSxsP24uZGF0YShcIm1hZ25pZmljUG9wdXBcIixpKTpuWzBdLm1hZ25pZmljUG9wdXA9aSxlLmFkZEdyb3VwKG4saSk7cmV0dXJuIG59O3ZhciBnLG0sdixiPWZ1bmN0aW9uKCl7diYmKG0uYWZ0ZXIodi5hZGRDbGFzcyhnKSkuZGV0YWNoKCksdj1udWxsKX07dC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiaW5saW5lXCIse29wdGlvbnM6e2hpZGRlbkNsYXNzOlwiaGlkZVwiLG1hcmt1cDpcIlwiLHROb3RGb3VuZDpcIkNvbnRlbnQgbm90IGZvdW5kXCJ9LHByb3RvOntpbml0SW5saW5lOmZ1bmN0aW9uKCl7ZS50eXBlcy5wdXNoKFwiaW5saW5lXCIpLGMoXCJDbG9zZS5pbmxpbmVcIixmdW5jdGlvbigpe2IoKX0pfSxnZXRJbmxpbmU6ZnVuY3Rpb24oaSxuKXtpZihiKCksaS5zcmMpe3ZhciBzPWUuc3QuaW5saW5lLG89dChpLnNyYyk7aWYoby5sZW5ndGgpe3ZhciBhPW9bMF0ucGFyZW50Tm9kZTthJiZhLnRhZ05hbWUmJihtfHwoZz1zLmhpZGRlbkNsYXNzLG09dShnKSxnPVwibWZwLVwiK2cpLHY9by5hZnRlcihtKS5kZXRhY2goKS5yZW1vdmVDbGFzcyhnKSksZS51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKX1lbHNlIGUudXBkYXRlU3RhdHVzKFwiZXJyb3JcIixzLnROb3RGb3VuZCksbz10KFwiPGRpdj5cIik7cmV0dXJuIGkuaW5saW5lRWxlbWVudD1vLG99cmV0dXJuIGUudXBkYXRlU3RhdHVzKFwicmVhZHlcIiksZS5fcGFyc2VNYXJrdXAobix7fSxpKSxufX19KTt2YXIgXyx5LHcseD1mdW5jdGlvbigpe18mJnQoZG9jdW1lbnQuYm9keSkucmVtb3ZlQ2xhc3MoXyl9LEM9ZnVuY3Rpb24oKXt4KCksZS5yZXEmJmUucmVxLmFib3J0KCl9O3QubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcImFqYXhcIix7b3B0aW9uczp7c2V0dGluZ3M6bnVsbCxjdXJzb3I6XCJtZnAtYWpheC1jdXJcIix0RXJyb3I6JzxhIGhyZWY9XCIldXJsJVwiPlRoZSBjb250ZW50PC9hPiBjb3VsZCBub3QgYmUgbG9hZGVkLid9LHByb3RvOntpbml0QWpheDpmdW5jdGlvbigpe2UudHlwZXMucHVzaChcImFqYXhcIiksXz1lLnN0LmFqYXguY3Vyc29yLGMoXCJDbG9zZS5hamF4XCIsQyksYyhcIkJlZm9yZUNoYW5nZS5hamF4XCIsQyl9LGdldEFqYXg6ZnVuY3Rpb24oaSl7XyYmdChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhfKSxlLnVwZGF0ZVN0YXR1cyhcImxvYWRpbmdcIik7dmFyIG49dC5leHRlbmQoe3VybDppLnNyYyxzdWNjZXNzOmZ1bmN0aW9uKG4scyxvKXt2YXIgYT17ZGF0YTpuLHhocjpvfTtkKFwiUGFyc2VBamF4XCIsYSksZS5hcHBlbmRDb250ZW50KHQoYS5kYXRhKSxcImFqYXhcIiksaS5maW5pc2hlZD0hMCx4KCksZS5fc2V0Rm9jdXMoKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS53cmFwLmFkZENsYXNzKFwibWZwLXJlYWR5XCIpfSwxNiksZS51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKSxkKFwiQWpheENvbnRlbnRBZGRlZFwiKX0sZXJyb3I6ZnVuY3Rpb24oKXt4KCksaS5maW5pc2hlZD1pLmxvYWRFcnJvcj0hMCxlLnVwZGF0ZVN0YXR1cyhcImVycm9yXCIsZS5zdC5hamF4LnRFcnJvci5yZXBsYWNlKFwiJXVybCVcIixpLnNyYykpfX0sZS5zdC5hamF4LnNldHRpbmdzKTtyZXR1cm4gZS5yZXE9dC5hamF4KG4pLFwiXCJ9fX0pLHQubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcImltYWdlXCIse29wdGlvbnM6e21hcmt1cDonPGRpdiBjbGFzcz1cIm1mcC1maWd1cmVcIj48ZGl2IGNsYXNzPVwibWZwLWNsb3NlXCI+PC9kaXY+PGZpZ3VyZT48ZGl2IGNsYXNzPVwibWZwLWltZ1wiPjwvZGl2PjxmaWdjYXB0aW9uPjxkaXYgY2xhc3M9XCJtZnAtYm90dG9tLWJhclwiPjxkaXYgY2xhc3M9XCJtZnAtdGl0bGVcIj48L2Rpdj48ZGl2IGNsYXNzPVwibWZwLWNvdW50ZXJcIj48L2Rpdj48L2Rpdj48L2ZpZ2NhcHRpb24+PC9maWd1cmU+PC9kaXY+JyxjdXJzb3I6XCJtZnAtem9vbS1vdXQtY3VyXCIsdGl0bGVTcmM6XCJ0aXRsZVwiLHZlcnRpY2FsRml0OiEwLHRFcnJvcjonPGEgaHJlZj1cIiV1cmwlXCI+VGhlIGltYWdlPC9hPiBjb3VsZCBub3QgYmUgbG9hZGVkLid9LHByb3RvOntpbml0SW1hZ2U6ZnVuY3Rpb24oKXt2YXIgaT1lLnN0LmltYWdlLG49XCIuaW1hZ2VcIjtlLnR5cGVzLnB1c2goXCJpbWFnZVwiKSxjKFwiT3BlblwiK24sZnVuY3Rpb24oKXtcImltYWdlXCI9PT1lLmN1cnJJdGVtLnR5cGUmJmkuY3Vyc29yJiZ0KGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKGkuY3Vyc29yKX0pLGMoXCJDbG9zZVwiK24sZnVuY3Rpb24oKXtpLmN1cnNvciYmdChkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyhpLmN1cnNvciksaC5vZmYoXCJyZXNpemUubWZwXCIpfSksYyhcIlJlc2l6ZVwiK24sZS5yZXNpemVJbWFnZSksZS5pc0xvd0lFJiZjKFwiQWZ0ZXJDaGFuZ2VcIixlLnJlc2l6ZUltYWdlKX0scmVzaXplSW1hZ2U6ZnVuY3Rpb24oKXt2YXIgdD1lLmN1cnJJdGVtO2lmKHQmJnQuaW1nJiZlLnN0LmltYWdlLnZlcnRpY2FsRml0KXt2YXIgaT0wO2UuaXNMb3dJRSYmKGk9cGFyc2VJbnQodC5pbWcuY3NzKFwicGFkZGluZy10b3BcIiksMTApK3BhcnNlSW50KHQuaW1nLmNzcyhcInBhZGRpbmctYm90dG9tXCIpLDEwKSksdC5pbWcuY3NzKFwibWF4LWhlaWdodFwiLGUud0gtaSl9fSxfb25JbWFnZUhhc1NpemU6ZnVuY3Rpb24odCl7dC5pbWcmJih0Lmhhc1NpemU9ITAseSYmY2xlYXJJbnRlcnZhbCh5KSx0LmlzQ2hlY2tpbmdJbWdTaXplPSExLGQoXCJJbWFnZUhhc1NpemVcIix0KSx0LmltZ0hpZGRlbiYmKGUuY29udGVudCYmZS5jb250ZW50LnJlbW92ZUNsYXNzKFwibWZwLWxvYWRpbmdcIiksdC5pbWdIaWRkZW49ITEpKX0sZmluZEltYWdlU2l6ZTpmdW5jdGlvbih0KXt2YXIgaT0wLG49dC5pbWdbMF0scz1mdW5jdGlvbihvKXt5JiZjbGVhckludGVydmFsKHkpLHk9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtuLm5hdHVyYWxXaWR0aD4wP2UuX29uSW1hZ2VIYXNTaXplKHQpOihpPjIwMCYmY2xlYXJJbnRlcnZhbCh5KSwzPT0rK2k/cygxMCk6NDA9PT1pP3MoNTApOjEwMD09PWkmJnMoNTAwKSl9LG8pfTtzKDEpfSxnZXRJbWFnZTpmdW5jdGlvbihpLG4pe3ZhciBzPTAsbz1mdW5jdGlvbigpe2kmJihpLmltZ1swXS5jb21wbGV0ZT8oaS5pbWcub2ZmKFwiLm1mcGxvYWRlclwiKSxpPT09ZS5jdXJySXRlbSYmKGUuX29uSW1hZ2VIYXNTaXplKGkpLGUudXBkYXRlU3RhdHVzKFwicmVhZHlcIikpLGkuaGFzU2l6ZT0hMCxpLmxvYWRlZD0hMCxkKFwiSW1hZ2VMb2FkQ29tcGxldGVcIikpOisrczwyMDA/c2V0VGltZW91dChvLDEwMCk6YSgpKX0sYT1mdW5jdGlvbigpe2kmJihpLmltZy5vZmYoXCIubWZwbG9hZGVyXCIpLGk9PT1lLmN1cnJJdGVtJiYoZS5fb25JbWFnZUhhc1NpemUoaSksZS51cGRhdGVTdGF0dXMoXCJlcnJvclwiLHIudEVycm9yLnJlcGxhY2UoXCIldXJsJVwiLGkuc3JjKSkpLGkuaGFzU2l6ZT0hMCxpLmxvYWRlZD0hMCxpLmxvYWRFcnJvcj0hMCl9LHI9ZS5zdC5pbWFnZSxsPW4uZmluZChcIi5tZnAtaW1nXCIpO2lmKGwubGVuZ3RoKXt2YXIgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO2guY2xhc3NOYW1lPVwibWZwLWltZ1wiLGkuZWwmJmkuZWwuZmluZChcImltZ1wiKS5sZW5ndGgmJihoLmFsdD1pLmVsLmZpbmQoXCJpbWdcIikuYXR0cihcImFsdFwiKSksaS5pbWc9dChoKS5vbihcImxvYWQubWZwbG9hZGVyXCIsbykub24oXCJlcnJvci5tZnBsb2FkZXJcIixhKSxoLnNyYz1pLnNyYyxsLmlzKFwiaW1nXCIpJiYoaS5pbWc9aS5pbWcuY2xvbmUoKSksKGg9aS5pbWdbMF0pLm5hdHVyYWxXaWR0aD4wP2kuaGFzU2l6ZT0hMDpoLndpZHRofHwoaS5oYXNTaXplPSExKX1yZXR1cm4gZS5fcGFyc2VNYXJrdXAobix7dGl0bGU6ZnVuY3Rpb24oaSl7aWYoaS5kYXRhJiZ2b2lkIDAhPT1pLmRhdGEudGl0bGUpcmV0dXJuIGkuZGF0YS50aXRsZTt2YXIgbj1lLnN0LmltYWdlLnRpdGxlU3JjO2lmKG4pe2lmKHQuaXNGdW5jdGlvbihuKSlyZXR1cm4gbi5jYWxsKGUsaSk7aWYoaS5lbClyZXR1cm4gaS5lbC5hdHRyKG4pfHxcIlwifXJldHVyblwiXCJ9KGkpLGltZ19yZXBsYWNlV2l0aDppLmltZ30saSksZS5yZXNpemVJbWFnZSgpLGkuaGFzU2l6ZT8oeSYmY2xlYXJJbnRlcnZhbCh5KSxpLmxvYWRFcnJvcj8obi5hZGRDbGFzcyhcIm1mcC1sb2FkaW5nXCIpLGUudXBkYXRlU3RhdHVzKFwiZXJyb3JcIixyLnRFcnJvci5yZXBsYWNlKFwiJXVybCVcIixpLnNyYykpKToobi5yZW1vdmVDbGFzcyhcIm1mcC1sb2FkaW5nXCIpLGUudXBkYXRlU3RhdHVzKFwicmVhZHlcIikpLG4pOihlLnVwZGF0ZVN0YXR1cyhcImxvYWRpbmdcIiksaS5sb2FkaW5nPSEwLGkuaGFzU2l6ZXx8KGkuaW1nSGlkZGVuPSEwLG4uYWRkQ2xhc3MoXCJtZnAtbG9hZGluZ1wiKSxlLmZpbmRJbWFnZVNpemUoaSkpLG4pfX19KSx0Lm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJ6b29tXCIse29wdGlvbnM6e2VuYWJsZWQ6ITEsZWFzaW5nOlwiZWFzZS1pbi1vdXRcIixkdXJhdGlvbjozMDAsb3BlbmVyOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKFwiaW1nXCIpP3Q6dC5maW5kKFwiaW1nXCIpfX0scHJvdG86e2luaXRab29tOmZ1bmN0aW9uKCl7dmFyIHQsaT1lLnN0Lnpvb20sbj1cIi56b29tXCI7aWYoaS5lbmFibGVkJiZlLnN1cHBvcnRzVHJhbnNpdGlvbil7dmFyIHMsbyxhPWkuZHVyYXRpb24scj1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCkucmVtb3ZlQXR0cihcInN0eWxlXCIpLnJlbW92ZUF0dHIoXCJjbGFzc1wiKS5hZGRDbGFzcyhcIm1mcC1hbmltYXRlZC1pbWFnZVwiKSxuPVwiYWxsIFwiK2kuZHVyYXRpb24vMWUzK1wicyBcIitpLmVhc2luZyxzPXtwb3NpdGlvbjpcImZpeGVkXCIsekluZGV4Ojk5OTksbGVmdDowLHRvcDowLFwiLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5XCI6XCJoaWRkZW5cIn0sbz1cInRyYW5zaXRpb25cIjtyZXR1cm4gc1tcIi13ZWJraXQtXCIrb109c1tcIi1tb3otXCIrb109c1tcIi1vLVwiK29dPXNbb109bixlLmNzcyhzKSxlfSxsPWZ1bmN0aW9uKCl7ZS5jb250ZW50LmNzcyhcInZpc2liaWxpdHlcIixcInZpc2libGVcIil9O2MoXCJCdWlsZENvbnRyb2xzXCIrbixmdW5jdGlvbigpe2lmKGUuX2FsbG93Wm9vbSgpKXtpZihjbGVhclRpbWVvdXQocyksZS5jb250ZW50LmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSwhKHQ9ZS5fZ2V0SXRlbVRvWm9vbSgpKSlyZXR1cm4gdm9pZCBsKCk7KG89cih0KSkuY3NzKGUuX2dldE9mZnNldCgpKSxlLndyYXAuYXBwZW5kKG8pLHM9c2V0VGltZW91dChmdW5jdGlvbigpe28uY3NzKGUuX2dldE9mZnNldCghMCkpLHM9c2V0VGltZW91dChmdW5jdGlvbigpe2woKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7by5yZW1vdmUoKSx0PW89bnVsbCxkKFwiWm9vbUFuaW1hdGlvbkVuZGVkXCIpfSwxNil9LGEpfSwxNil9fSksYyhcIkJlZm9yZUNsb3NlXCIrbixmdW5jdGlvbigpe2lmKGUuX2FsbG93Wm9vbSgpKXtpZihjbGVhclRpbWVvdXQocyksZS5zdC5yZW1vdmFsRGVsYXk9YSwhdCl7aWYoISh0PWUuX2dldEl0ZW1Ub1pvb20oKSkpcmV0dXJuO289cih0KX1vLmNzcyhlLl9nZXRPZmZzZXQoITApKSxlLndyYXAuYXBwZW5kKG8pLGUuY29udGVudC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIiksc2V0VGltZW91dChmdW5jdGlvbigpe28uY3NzKGUuX2dldE9mZnNldCgpKX0sMTYpfX0pLGMoXCJDbG9zZVwiK24sZnVuY3Rpb24oKXtlLl9hbGxvd1pvb20oKSYmKGwoKSxvJiZvLnJlbW92ZSgpLHQ9bnVsbCl9KX19LF9hbGxvd1pvb206ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlXCI9PT1lLmN1cnJJdGVtLnR5cGV9LF9nZXRJdGVtVG9ab29tOmZ1bmN0aW9uKCl7cmV0dXJuISFlLmN1cnJJdGVtLmhhc1NpemUmJmUuY3Vyckl0ZW0uaW1nfSxfZ2V0T2Zmc2V0OmZ1bmN0aW9uKGkpe3ZhciBuLHM9KG49aT9lLmN1cnJJdGVtLmltZzplLnN0Lnpvb20ub3BlbmVyKGUuY3Vyckl0ZW0uZWx8fGUuY3Vyckl0ZW0pKS5vZmZzZXQoKSxvPXBhcnNlSW50KG4uY3NzKFwicGFkZGluZy10b3BcIiksMTApLGE9cGFyc2VJbnQobi5jc3MoXCJwYWRkaW5nLWJvdHRvbVwiKSwxMCk7cy50b3AtPXQod2luZG93KS5zY3JvbGxUb3AoKS1vO3ZhciByPXt3aWR0aDpuLndpZHRoKCksaGVpZ2h0OihsP24uaW5uZXJIZWlnaHQoKTpuWzBdLm9mZnNldEhlaWdodCktYS1vfTtyZXR1cm4gdm9pZCAwPT09dyYmKHc9dm9pZCAwIT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIikuc3R5bGUuTW96VHJhbnNmb3JtKSx3P3JbXCItbW96LXRyYW5zZm9ybVwiXT1yLnRyYW5zZm9ybT1cInRyYW5zbGF0ZShcIitzLmxlZnQrXCJweCxcIitzLnRvcCtcInB4KVwiOihyLmxlZnQ9cy5sZWZ0LHIudG9wPXMudG9wKSxyfX19KTt2YXIgaz1mdW5jdGlvbih0KXtpZihlLmN1cnJUZW1wbGF0ZS5pZnJhbWUpe3ZhciBpPWUuY3VyclRlbXBsYXRlLmlmcmFtZS5maW5kKFwiaWZyYW1lXCIpO2kubGVuZ3RoJiYodHx8KGlbMF0uc3JjPVwiLy9hYm91dDpibGFua1wiKSxlLmlzSUU4JiZpLmNzcyhcImRpc3BsYXlcIix0P1wiYmxvY2tcIjpcIm5vbmVcIikpfX07dC5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiaWZyYW1lXCIse29wdGlvbnM6e21hcmt1cDonPGRpdiBjbGFzcz1cIm1mcC1pZnJhbWUtc2NhbGVyXCI+PGRpdiBjbGFzcz1cIm1mcC1jbG9zZVwiPjwvZGl2PjxpZnJhbWUgY2xhc3M9XCJtZnAtaWZyYW1lXCIgc3JjPVwiLy9hYm91dDpibGFua1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT48L2Rpdj4nLHNyY0FjdGlvbjpcImlmcmFtZV9zcmNcIixwYXR0ZXJuczp7eW91dHViZTp7aW5kZXg6XCJ5b3V0dWJlLmNvbVwiLGlkOlwidj1cIixzcmM6XCIvL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8laWQlP2F1dG9wbGF5PTFcIn0sdmltZW86e2luZGV4OlwidmltZW8uY29tL1wiLGlkOlwiL1wiLHNyYzpcIi8vcGxheWVyLnZpbWVvLmNvbS92aWRlby8laWQlP2F1dG9wbGF5PTFcIn0sZ21hcHM6e2luZGV4OlwiLy9tYXBzLmdvb2dsZS5cIixzcmM6XCIlaWQlJm91dHB1dD1lbWJlZFwifX19LHByb3RvOntpbml0SWZyYW1lOmZ1bmN0aW9uKCl7ZS50eXBlcy5wdXNoKFwiaWZyYW1lXCIpLGMoXCJCZWZvcmVDaGFuZ2VcIixmdW5jdGlvbih0LGUsaSl7ZSE9PWkmJihcImlmcmFtZVwiPT09ZT9rKCk6XCJpZnJhbWVcIj09PWkmJmsoITApKX0pLGMoXCJDbG9zZS5pZnJhbWVcIixmdW5jdGlvbigpe2soKX0pfSxnZXRJZnJhbWU6ZnVuY3Rpb24oaSxuKXt2YXIgcz1pLnNyYyxvPWUuc3QuaWZyYW1lO3QuZWFjaChvLnBhdHRlcm5zLGZ1bmN0aW9uKCl7aWYocy5pbmRleE9mKHRoaXMuaW5kZXgpPi0xKXJldHVybiB0aGlzLmlkJiYocz1cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5pZD9zLnN1YnN0cihzLmxhc3RJbmRleE9mKHRoaXMuaWQpK3RoaXMuaWQubGVuZ3RoLHMubGVuZ3RoKTp0aGlzLmlkLmNhbGwodGhpcyxzKSkscz10aGlzLnNyYy5yZXBsYWNlKFwiJWlkJVwiLHMpLCExfSk7dmFyIGE9e307cmV0dXJuIG8uc3JjQWN0aW9uJiYoYVtvLnNyY0FjdGlvbl09cyksZS5fcGFyc2VNYXJrdXAobixhLGkpLGUudXBkYXRlU3RhdHVzKFwicmVhZHlcIiksbn19fSk7dmFyIFQ9ZnVuY3Rpb24odCl7dmFyIGk9ZS5pdGVtcy5sZW5ndGg7cmV0dXJuIHQ+aS0xP3QtaTp0PDA/aSt0OnR9LEQ9ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0LnJlcGxhY2UoLyVjdXJyJS9naSxlKzEpLnJlcGxhY2UoLyV0b3RhbCUvZ2ksaSl9O3QubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcImdhbGxlcnlcIix7b3B0aW9uczp7ZW5hYmxlZDohMSxhcnJvd01hcmt1cDonPGJ1dHRvbiB0aXRsZT1cIiV0aXRsZSVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZnAtYXJyb3cgbWZwLWFycm93LSVkaXIlXCI+PC9idXR0b24+JyxwcmVsb2FkOlswLDJdLG5hdmlnYXRlQnlJbWdDbGljazohMCxhcnJvd3M6ITAsdFByZXY6XCJQcmV2aW91cyAoTGVmdCBhcnJvdyBrZXkpXCIsdE5leHQ6XCJOZXh0IChSaWdodCBhcnJvdyBrZXkpXCIsdENvdW50ZXI6XCIlY3VyciUgb2YgJXRvdGFsJVwifSxwcm90bzp7aW5pdEdhbGxlcnk6ZnVuY3Rpb24oKXt2YXIgaT1lLnN0LmdhbGxlcnkscz1cIi5tZnAtZ2FsbGVyeVwiO2lmKGUuZGlyZWN0aW9uPSEwLCFpfHwhaS5lbmFibGVkKXJldHVybiExO28rPVwiIG1mcC1nYWxsZXJ5XCIsYyhcIk9wZW5cIitzLGZ1bmN0aW9uKCl7aS5uYXZpZ2F0ZUJ5SW1nQ2xpY2smJmUud3JhcC5vbihcImNsaWNrXCIrcyxcIi5tZnAtaW1nXCIsZnVuY3Rpb24oKXtpZihlLml0ZW1zLmxlbmd0aD4xKXJldHVybiBlLm5leHQoKSwhMX0pLG4ub24oXCJrZXlkb3duXCIrcyxmdW5jdGlvbih0KXszNz09PXQua2V5Q29kZT9lLnByZXYoKTozOT09PXQua2V5Q29kZSYmZS5uZXh0KCl9KX0pLGMoXCJVcGRhdGVTdGF0dXNcIitzLGZ1bmN0aW9uKHQsaSl7aS50ZXh0JiYoaS50ZXh0PUQoaS50ZXh0LGUuY3Vyckl0ZW0uaW5kZXgsZS5pdGVtcy5sZW5ndGgpKX0pLGMoXCJNYXJrdXBQYXJzZVwiK3MsZnVuY3Rpb24odCxuLHMsbyl7dmFyIGE9ZS5pdGVtcy5sZW5ndGg7cy5jb3VudGVyPWE+MT9EKGkudENvdW50ZXIsby5pbmRleCxhKTpcIlwifSksYyhcIkJ1aWxkQ29udHJvbHNcIitzLGZ1bmN0aW9uKCl7aWYoZS5pdGVtcy5sZW5ndGg+MSYmaS5hcnJvd3MmJiFlLmFycm93TGVmdCl7dmFyIG49aS5hcnJvd01hcmt1cCxzPWUuYXJyb3dMZWZ0PXQobi5yZXBsYWNlKC8ldGl0bGUlL2dpLGkudFByZXYpLnJlcGxhY2UoLyVkaXIlL2dpLFwibGVmdFwiKSkuYWRkQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKSxvPWUuYXJyb3dSaWdodD10KG4ucmVwbGFjZSgvJXRpdGxlJS9naSxpLnROZXh0KS5yZXBsYWNlKC8lZGlyJS9naSxcInJpZ2h0XCIpKS5hZGRDbGFzcyhcIm1mcC1wcmV2ZW50LWNsb3NlXCIpO3MuY2xpY2soZnVuY3Rpb24oKXtlLnByZXYoKX0pLG8uY2xpY2soZnVuY3Rpb24oKXtlLm5leHQoKX0pLGUuY29udGFpbmVyLmFwcGVuZChzLmFkZChvKSl9fSksYyhcIkNoYW5nZVwiK3MsZnVuY3Rpb24oKXtlLl9wcmVsb2FkVGltZW91dCYmY2xlYXJUaW1lb3V0KGUuX3ByZWxvYWRUaW1lb3V0KSxlLl9wcmVsb2FkVGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5wcmVsb2FkTmVhcmJ5SW1hZ2VzKCksZS5fcHJlbG9hZFRpbWVvdXQ9bnVsbH0sMTYpfSksYyhcIkNsb3NlXCIrcyxmdW5jdGlvbigpe24ub2ZmKHMpLGUud3JhcC5vZmYoXCJjbGlja1wiK3MpLGUuYXJyb3dSaWdodD1lLmFycm93TGVmdD1udWxsfSl9LG5leHQ6ZnVuY3Rpb24oKXtlLmRpcmVjdGlvbj0hMCxlLmluZGV4PVQoZS5pbmRleCsxKSxlLnVwZGF0ZUl0ZW1IVE1MKCl9LHByZXY6ZnVuY3Rpb24oKXtlLmRpcmVjdGlvbj0hMSxlLmluZGV4PVQoZS5pbmRleC0xKSxlLnVwZGF0ZUl0ZW1IVE1MKCl9LGdvVG86ZnVuY3Rpb24odCl7ZS5kaXJlY3Rpb249dD49ZS5pbmRleCxlLmluZGV4PXQsZS51cGRhdGVJdGVtSFRNTCgpfSxwcmVsb2FkTmVhcmJ5SW1hZ2VzOmZ1bmN0aW9uKCl7dmFyIHQsaT1lLnN0LmdhbGxlcnkucHJlbG9hZCxuPU1hdGgubWluKGlbMF0sZS5pdGVtcy5sZW5ndGgpLHM9TWF0aC5taW4oaVsxXSxlLml0ZW1zLmxlbmd0aCk7Zm9yKHQ9MTt0PD0oZS5kaXJlY3Rpb24/czpuKTt0KyspZS5fcHJlbG9hZEl0ZW0oZS5pbmRleCt0KTtmb3IodD0xO3Q8PShlLmRpcmVjdGlvbj9uOnMpO3QrKyllLl9wcmVsb2FkSXRlbShlLmluZGV4LXQpfSxfcHJlbG9hZEl0ZW06ZnVuY3Rpb24oaSl7aWYoaT1UKGkpLCFlLml0ZW1zW2ldLnByZWxvYWRlZCl7dmFyIG49ZS5pdGVtc1tpXTtuLnBhcnNlZHx8KG49ZS5wYXJzZUVsKGkpKSxkKFwiTGF6eUxvYWRcIixuKSxcImltYWdlXCI9PT1uLnR5cGUmJihuLmltZz10KCc8aW1nIGNsYXNzPVwibWZwLWltZ1wiIC8+Jykub24oXCJsb2FkLm1mcGxvYWRlclwiLGZ1bmN0aW9uKCl7bi5oYXNTaXplPSEwfSkub24oXCJlcnJvci5tZnBsb2FkZXJcIixmdW5jdGlvbigpe24uaGFzU2l6ZT0hMCxuLmxvYWRFcnJvcj0hMCxkKFwiTGF6eUxvYWRFcnJvclwiLG4pfSkuYXR0cihcInNyY1wiLG4uc3JjKSksbi5wcmVsb2FkZWQ9ITB9fX19KSx0Lm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJyZXRpbmFcIix7b3B0aW9uczp7cmVwbGFjZVNyYzpmdW5jdGlvbih0KXtyZXR1cm4gdC5zcmMucmVwbGFjZSgvXFwuXFx3KyQvLGZ1bmN0aW9uKHQpe3JldHVyblwiQDJ4XCIrdH0pfSxyYXRpbzoxfSxwcm90bzp7aW5pdFJldGluYTpmdW5jdGlvbigpe2lmKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvPjEpe3ZhciB0PWUuc3QucmV0aW5hLGk9dC5yYXRpbzsoaT1pc05hTihpKT9pKCk6aSk+MSYmKGMoXCJJbWFnZUhhc1NpemUucmV0aW5hXCIsZnVuY3Rpb24odCxlKXtlLmltZy5jc3Moe1wibWF4LXdpZHRoXCI6ZS5pbWdbMF0ubmF0dXJhbFdpZHRoL2ksd2lkdGg6XCIxMDAlXCJ9KX0pLGMoXCJFbGVtZW50UGFyc2UucmV0aW5hXCIsZnVuY3Rpb24oZSxuKXtuLnNyYz10LnJlcGxhY2VTcmMobixpKX0pKX19fX0pLGYoKX0pLGZ1bmN0aW9uKHQpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoW1wianF1ZXJ5XCJdLHQpOlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBvcnRzP21vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcImpxdWVyeVwiKSk6dChqUXVlcnkpfShmdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2YXIgZT10aGlzLGk9ZnVuY3Rpb24oaSl7cmV0dXJuIHQuaXNOdW1lcmljKGkpJiYoaT1NYXRoLmZsb29yKGkpKSx0KCdvcHRpb25bdmFsdWU9XCInK2krJ1wiXScsZS4kZWxlbSl9LG49ZnVuY3Rpb24oKXt2YXIgbj1lLm9wdGlvbnMuaW5pdGlhbFJhdGluZztyZXR1cm4gbj9pKG4pOnQoXCJvcHRpb246c2VsZWN0ZWRcIixlLiRlbGVtKX0scz1mdW5jdGlvbigpe3ZhciBpPWUuJGVsZW0uZmluZCgnb3B0aW9uW3ZhbHVlPVwiJytlLm9wdGlvbnMuZW1wdHlWYWx1ZSsnXCJdJyk7cmV0dXJuIWkubGVuZ3RoJiZlLm9wdGlvbnMuYWxsb3dFbXB0eT8oaT10KFwiPG9wdGlvbiAvPlwiLHt2YWx1ZTplLm9wdGlvbnMuZW1wdHlWYWx1ZX0pKS5wcmVwZW5kVG8oZS4kZWxlbSk6aX0sbz1mdW5jdGlvbih0KXt2YXIgaT1lLiRlbGVtLmRhdGEoXCJiYXJyYXRpbmdcIik7cmV0dXJuIHZvaWQgMCE9PXQ/aVt0XTppfSxhPWZ1bmN0aW9uKHQsaSl7bnVsbCE9PWkmJlwib2JqZWN0XCI9PXR5cGVvZiBpP2UuJGVsZW0uZGF0YShcImJhcnJhdGluZ1wiLGkpOmUuJGVsZW0uZGF0YShcImJhcnJhdGluZ1wiKVt0XT1pfSxyPWZ1bmN0aW9uKCl7cmV0dXJuIG8oXCJyYXRpbmdUZXh0XCIpfSxsPWZ1bmN0aW9uKCl7cmV0dXJuIG8oXCJyYXRpbmdWYWx1ZVwiKX0saD1mdW5jdGlvbigpe3JldHVybiBvKFwidXNlck9wdGlvbnNcIikucmV2ZXJzZT9cIm5leHRBbGxcIjpcInByZXZBbGxcIn0sYz1mdW5jdGlvbih0KXtpKHQpLnByb3AoXCJzZWxlY3RlZFwiLCEwKSxlLiRlbGVtLmNoYW5nZSgpfSx1PWZ1bmN0aW9uKCl7dChcIm9wdGlvblwiLGUuJGVsZW0pLnByb3AoXCJzZWxlY3RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFNlbGVjdGVkfSksZS4kZWxlbS5jaGFuZ2UoKX0sZD1mdW5jdGlvbih0KXsodD10fHxyKCkpPT1vKFwiZW1wdHlSYXRpbmdUZXh0XCIpJiYodD1cIlwiKSxlLm9wdGlvbnMuc2hvd1NlbGVjdGVkUmF0aW5nJiZlLiRlbGVtLnBhcmVudCgpLmZpbmQoXCIuYnItY3VycmVudC1yYXRpbmdcIikudGV4dCh0KX0scD1mdW5jdGlvbigpe2UuJHdpZGdldC5maW5kKFwiYVwiKS5yZW1vdmVDbGFzcyhmdW5jdGlvbih0LGUpe3JldHVybihlLm1hdGNoKC8oXnxcXHMpYnItXFxTKy9nKXx8W10pLmpvaW4oXCIgXCIpfSl9LGY9ZnVuY3Rpb24oKXt2YXIgaSxuLHM9ZS4kd2lkZ2V0LmZpbmQoJ2FbZGF0YS1yYXRpbmctdmFsdWU9XCInK2woKSsnXCJdJyksYT1vKFwidXNlck9wdGlvbnNcIikuaW5pdGlhbFJhdGluZyxyPXQuaXNOdW1lcmljKGwoKSk/bCgpOjAsYz1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5yb3VuZChNYXRoLmZsb29yKDEwKnQpLzEwJTEqMTAwKX0oYSk7aWYocCgpLHMuYWRkQ2xhc3MoXCJici1zZWxlY3RlZCBici1jdXJyZW50XCIpW2goKV0oKS5hZGRDbGFzcyhcImJyLXNlbGVjdGVkXCIpLCFvKFwicmF0aW5nTWFkZVwiKSYmdC5pc051bWVyaWMoYSkpe2lmKHI+PWF8fCFjKXJldHVybjtpPWUuJHdpZGdldC5maW5kKFwiYVwiKSwobj1zLmxlbmd0aD9zW28oXCJ1c2VyT3B0aW9uc1wiKS5yZXZlcnNlP1wicHJldlwiOlwibmV4dFwiXSgpOmlbbyhcInVzZXJPcHRpb25zXCIpLnJldmVyc2U/XCJsYXN0XCI6XCJmaXJzdFwiXSgpKS5hZGRDbGFzcyhcImJyLWZyYWN0aW9uYWxcIiksbi5hZGRDbGFzcyhcImJyLWZyYWN0aW9uYWwtXCIrYyl9fSxnPWZ1bmN0aW9uKGkpe2kub24oXCJjbGljay5iYXJyYXRpbmdcIixmdW5jdGlvbihpKXt2YXIgbixzLGg9dCh0aGlzKSx1PW8oXCJ1c2VyT3B0aW9uc1wiKTtyZXR1cm4gaS5wcmV2ZW50RGVmYXVsdCgpLG49aC5hdHRyKFwiZGF0YS1yYXRpbmctdmFsdWVcIikscz1oLmF0dHIoXCJkYXRhLXJhdGluZy10ZXh0XCIpLGZ1bmN0aW9uKHQpe3JldHVybiEoIW8oXCJhbGxvd0VtcHR5XCIpfHwhbyhcInVzZXJPcHRpb25zXCIpLmRlc2VsZWN0YWJsZSkmJmwoKT09dC5hdHRyKFwiZGF0YS1yYXRpbmctdmFsdWVcIil9KGgpJiYobj1vKFwiZW1wdHlSYXRpbmdWYWx1ZVwiKSxzPW8oXCJlbXB0eVJhdGluZ1RleHRcIikpLGEoXCJyYXRpbmdWYWx1ZVwiLG4pLGEoXCJyYXRpbmdUZXh0XCIscyksYShcInJhdGluZ01hZGVcIiwhMCksYyhuKSxkKHMpLGYoKSx1Lm9uU2VsZWN0LmNhbGwoZSxsKCkscigpLGkpLCExfSl9LG09ZnVuY3Rpb24oZSl7ZS5vbihcIm1vdXNlZW50ZXIuYmFycmF0aW5nXCIsZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3AoKSxlLmFkZENsYXNzKFwiYnItYWN0aXZlXCIpW2goKV0oKS5hZGRDbGFzcyhcImJyLWFjdGl2ZVwiKSxkKGUuYXR0cihcImRhdGEtcmF0aW5nLXRleHRcIikpfSl9LHY9ZnVuY3Rpb24oZSl7ZS5vbihcInRvdWNoc3RhcnQuYmFycmF0aW5nXCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdCh0aGlzKS5jbGljaygpfSl9LGI9ZnVuY3Rpb24odCl7dC5vZmYoXCIuYmFycmF0aW5nXCIpfSxfPWZ1bmN0aW9uKHQpe3ZhciBpPWUuJHdpZGdldC5maW5kKFwiYVwiKTt2JiZ2KGkpLHQ/KGIoaSksaS5vbihcImNsaWNrLmJhcnJhdGluZ1wiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pKTpmdW5jdGlvbih0KXtnKHQpLGUub3B0aW9ucy5ob3ZlclN0YXRlJiYobSh0KSxlLiR3aWRnZXQub24oXCJtb3VzZWxlYXZlLmJhcnJhdGluZyBibHVyLmJhcnJhdGluZ1wiLGZ1bmN0aW9uKCl7ZCgpLGYoKX0pKX0oaSl9O3RoaXMuc2hvdz1mdW5jdGlvbigpe3ZhciBpO28oKXx8KGk9W1wiYnItd3JhcHBlclwiXSxcIlwiIT09ZS5vcHRpb25zLnRoZW1lJiZpLnB1c2goXCJici10aGVtZS1cIitlLm9wdGlvbnMudGhlbWUpLGUuJGVsZW0ud3JhcCh0KFwiPGRpdiAvPlwiLHtjbGFzczppLmpvaW4oXCIgXCIpfSkpLGZ1bmN0aW9uKCl7dmFyIHQ9bigpLGk9cygpLG89dC52YWwoKSxyPXQuZGF0YShcImh0bWxcIik/dC5kYXRhKFwiaHRtbFwiKTp0LnRleHQoKSxsPW51bGwhPT1lLm9wdGlvbnMuYWxsb3dFbXB0eT9lLm9wdGlvbnMuYWxsb3dFbXB0eTohIWkubGVuZ3RoLGg9aS5sZW5ndGg/aS52YWwoKTpudWxsLGM9aS5sZW5ndGg/aS50ZXh0KCk6bnVsbDthKG51bGwse3VzZXJPcHRpb25zOmUub3B0aW9ucyxyYXRpbmdWYWx1ZTpvLHJhdGluZ1RleHQ6cixvcmlnaW5hbFJhdGluZ1ZhbHVlOm8sb3JpZ2luYWxSYXRpbmdUZXh0OnIsYWxsb3dFbXB0eTpsLGVtcHR5UmF0aW5nVmFsdWU6aCxlbXB0eVJhdGluZ1RleHQ6YyxyZWFkT25seTplLm9wdGlvbnMucmVhZG9ubHkscmF0aW5nTWFkZTohMX0pfSgpLGUuJHdpZGdldD1mdW5jdGlvbigpe3ZhciBpPXQoXCI8ZGl2IC8+XCIse2NsYXNzOlwiYnItd2lkZ2V0XCJ9KTtyZXR1cm4gZS4kZWxlbS5maW5kKFwib3B0aW9uXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgbixzLGEscjsobj10KHRoaXMpLnZhbCgpKSE9PW8oXCJlbXB0eVJhdGluZ1ZhbHVlXCIpJiYocz10KHRoaXMpLnRleHQoKSwoYT10KHRoaXMpLmRhdGEoXCJodG1sXCIpKSYmKHM9YSkscj10KFwiPGEgLz5cIix7aHJlZjpcIiNcIixcImRhdGEtcmF0aW5nLXZhbHVlXCI6bixcImRhdGEtcmF0aW5nLXRleHRcIjpzLGh0bWw6ZS5vcHRpb25zLnNob3dWYWx1ZXM/czpcIlwifSksaS5hcHBlbmQocikpfSksZS5vcHRpb25zLnNob3dTZWxlY3RlZFJhdGluZyYmaS5hcHBlbmQodChcIjxkaXYgLz5cIix7dGV4dDpcIlwiLGNsYXNzOlwiYnItY3VycmVudC1yYXRpbmdcIn0pKSxlLm9wdGlvbnMucmV2ZXJzZSYmaS5hZGRDbGFzcyhcImJyLXJldmVyc2VcIiksZS5vcHRpb25zLnJlYWRvbmx5JiZpLmFkZENsYXNzKFwiYnItcmVhZG9ubHlcIiksaX0oKSxlLiR3aWRnZXQuaW5zZXJ0QWZ0ZXIoZS4kZWxlbSksZigpLGQoKSxfKGUub3B0aW9ucy5yZWFkb25seSksZS4kZWxlbS5oaWRlKCkpfSx0aGlzLnJlYWRvbmx5PWZ1bmN0aW9uKHQpe1wiYm9vbGVhblwiPT10eXBlb2YgdCYmbyhcInJlYWRPbmx5XCIpIT10JiYoXyh0KSxhKFwicmVhZE9ubHlcIix0KSxlLiR3aWRnZXQudG9nZ2xlQ2xhc3MoXCJici1yZWFkb25seVwiKSl9LHRoaXMuc2V0PWZ1bmN0aW9uKHQpe3ZhciBpPW8oXCJ1c2VyT3B0aW9uc1wiKTswIT09ZS4kZWxlbS5maW5kKCdvcHRpb25bdmFsdWU9XCInK3QrJ1wiXScpLmxlbmd0aCYmKGEoXCJyYXRpbmdWYWx1ZVwiLHQpLGEoXCJyYXRpbmdUZXh0XCIsZS4kZWxlbS5maW5kKCdvcHRpb25bdmFsdWU9XCInK3QrJ1wiXScpLnRleHQoKSksYShcInJhdGluZ01hZGVcIiwhMCksYyhsKCkpLGQocigpKSxmKCksaS5zaWxlbnR8fGkub25TZWxlY3QuY2FsbCh0aGlzLGwoKSxyKCkpKX0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3ZhciB0PW8oXCJ1c2VyT3B0aW9uc1wiKTthKFwicmF0aW5nVmFsdWVcIixvKFwib3JpZ2luYWxSYXRpbmdWYWx1ZVwiKSksYShcInJhdGluZ1RleHRcIixvKFwib3JpZ2luYWxSYXRpbmdUZXh0XCIpKSxhKFwicmF0aW5nTWFkZVwiLCExKSx1KCksZChyKCkpLGYoKSx0Lm9uQ2xlYXIuY2FsbCh0aGlzLGwoKSxyKCkpfSx0aGlzLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD1sKCksaT1yKCksbj1vKFwidXNlck9wdGlvbnNcIik7YihlLiR3aWRnZXQuZmluZChcImFcIikpLGUuJHdpZGdldC5yZW1vdmUoKSxlLiRlbGVtLnJlbW92ZURhdGEoXCJiYXJyYXRpbmdcIiksZS4kZWxlbS51bndyYXAoKSxlLiRlbGVtLnNob3coKSxuLm9uRGVzdHJveS5jYWxsKHRoaXMsdCxpKX19cmV0dXJuIGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdGhpcy4kZWxlbT10KGkpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSx0LmZuLmJhcnJhdGluZy5kZWZhdWx0cyxlKSx0aGlzLm9wdGlvbnN9LGV9KCk7dC5mbi5iYXJyYXRpbmc9ZnVuY3Rpb24oaSxuKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9bmV3IGU7aWYodCh0aGlzKS5pcyhcInNlbGVjdFwiKXx8dC5lcnJvcihcIlNvcnJ5LCB0aGlzIHBsdWdpbiBvbmx5IHdvcmtzIHdpdGggc2VsZWN0IGZpZWxkcy5cIikscy5oYXNPd25Qcm9wZXJ0eShpKSl7aWYocy5pbml0KG4sdGhpcyksXCJzaG93XCI9PT1pKXJldHVybiBzLnNob3cobik7aWYocy4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIpKXJldHVybiBzLiR3aWRnZXQ9dCh0aGlzKS5uZXh0KFwiLmJyLXdpZGdldFwiKSxzW2ldKG4pfWVsc2V7aWYoXCJvYmplY3RcIj09dHlwZW9mIGl8fCFpKXJldHVybiBuPWkscy5pbml0KG4sdGhpcykscy5zaG93KCk7dC5lcnJvcihcIk1ldGhvZCBcIitpK1wiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5iYXJyYXRpbmdcIil9fSl9LHQuZm4uYmFycmF0aW5nLmRlZmF1bHRzPXt0aGVtZTpcIlwiLGluaXRpYWxSYXRpbmc6bnVsbCxhbGxvd0VtcHR5Om51bGwsZW1wdHlWYWx1ZTpcIlwiLHNob3dWYWx1ZXM6ITEsc2hvd1NlbGVjdGVkUmF0aW5nOiEwLGRlc2VsZWN0YWJsZTohMCxyZXZlcnNlOiExLHJlYWRvbmx5OiExLGZhc3RDbGlja3M6ITAsaG92ZXJTdGF0ZTohMCxzaWxlbnQ6ITEsb25TZWxlY3Q6ZnVuY3Rpb24odCxlLGkpe30sb25DbGVhcjpmdW5jdGlvbih0LGUpe30sb25EZXN0cm95OmZ1bmN0aW9uKHQsZSl7fX0sdC5mbi5iYXJyYXRpbmcuQmFyUmF0aW5nPWV9KSxcInVuZGVmaW5lZFwiPT10eXBlb2YgalF1ZXJ5KXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5XCIpOyFmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1qUXVlcnkuZm4uanF1ZXJ5LnNwbGl0KFwiIFwiKVswXS5zcGxpdChcIi5cIik7aWYoZVswXTwyJiZlWzFdPDl8fDE9PWVbMF0mJjk9PWVbMV0mJmVbMl08MXx8ZVswXT4zKXRocm93IG5ldyBFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5IHZlcnNpb24gMS45LjEgb3IgaGlnaGVyLCBidXQgbG93ZXIgdGhhbiB2ZXJzaW9uIDRcIil9KCksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD1mdW5jdGlvbihlKXt2YXIgaT0hMSxuPXRoaXM7cmV0dXJuIHQodGhpcykub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtpPSEwfSksc2V0VGltZW91dChmdW5jdGlvbigpe2l8fHQobikudHJpZ2dlcih0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQpfSxlKSx0aGlzfSx0KGZ1bmN0aW9uKCl7dC5zdXBwb3J0LnRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYm9vdHN0cmFwXCIpLGU9e1dlYmtpdFRyYW5zaXRpb246XCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsTW96VHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIixPVHJhbnNpdGlvbjpcIm9UcmFuc2l0aW9uRW5kIG90cmFuc2l0aW9uZW5kXCIsdHJhbnNpdGlvbjpcInRyYW5zaXRpb25lbmRcIn07Zm9yKHZhciBpIGluIGUpaWYodm9pZCAwIT09dC5zdHlsZVtpXSlyZXR1cm57ZW5kOmVbaV19O3JldHVybiExfSgpLHQuc3VwcG9ydC50cmFuc2l0aW9uJiYodC5ldmVudC5zcGVjaWFsLmJzVHJhbnNpdGlvbkVuZD17YmluZFR5cGU6dC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGRlbGVnYXRlVHlwZTp0LnN1cHBvcnQudHJhbnNpdGlvbi5lbmQsaGFuZGxlOmZ1bmN0aW9uKGUpe2lmKHQoZS50YXJnZXQpLmlzKHRoaXMpKXJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3ZhciBlPSdbZGF0YS1kaXNtaXNzPVwiYWxlcnRcIl0nLGk9ZnVuY3Rpb24oaSl7dChpKS5vbihcImNsaWNrXCIsZSx0aGlzLmNsb3NlKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGkucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXthLmRldGFjaCgpLnRyaWdnZXIoXCJjbG9zZWQuYnMuYWxlcnRcIikucmVtb3ZlKCl9dmFyIHM9dCh0aGlzKSxvPXMuYXR0cihcImRhdGEtdGFyZ2V0XCIpO298fChvPShvPXMuYXR0cihcImhyZWZcIikpJiZvLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sXCJcIikpO3ZhciBhPXQoXCIjXCI9PT1vP1tdOm8pO2UmJmUucHJldmVudERlZmF1bHQoKSxhLmxlbmd0aHx8KGE9cy5jbG9zZXN0KFwiLmFsZXJ0XCIpKSxhLnRyaWdnZXIoZT10LkV2ZW50KFwiY2xvc2UuYnMuYWxlcnRcIikpLGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fChhLnJlbW92ZUNsYXNzKFwiaW5cIiksdC5zdXBwb3J0LnRyYW5zaXRpb24mJmEuaGFzQ2xhc3MoXCJmYWRlXCIpP2Eub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsbikuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpuKCkpfTt2YXIgbj10LmZuLmFsZXJ0O3QuZm4uYWxlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcykscz1uLmRhdGEoXCJicy5hbGVydFwiKTtzfHxuLmRhdGEoXCJicy5hbGVydFwiLHM9bmV3IGkodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZzW2VdLmNhbGwobil9KX0sdC5mbi5hbGVydC5Db25zdHJ1Y3Rvcj1pLHQuZm4uYWxlcnQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmFsZXJ0PW4sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5hbGVydC5kYXRhLWFwaVwiLGUsaS5wcm90b3R5cGUuY2xvc2UpfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcykscz1uLmRhdGEoXCJicy5idXR0b25cIiksbz1cIm9iamVjdFwiPT10eXBlb2YgZSYmZTtzfHxuLmRhdGEoXCJicy5idXR0b25cIixzPW5ldyBpKHRoaXMsbykpLFwidG9nZ2xlXCI9PWU/cy50b2dnbGUoKTplJiZzLnNldFN0YXRlKGUpfSl9dmFyIGk9ZnVuY3Rpb24oZSxuKXt0aGlzLiRlbGVtZW50PXQoZSksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGkuREVGQVVMVFMsbiksdGhpcy5pc0xvYWRpbmc9ITF9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5ERUZBVUxUUz17bG9hZGluZ1RleHQ6XCJsb2FkaW5nLi4uXCJ9LGkucHJvdG90eXBlLnNldFN0YXRlPWZ1bmN0aW9uKGUpe3ZhciBpPVwiZGlzYWJsZWRcIixuPXRoaXMuJGVsZW1lbnQscz1uLmlzKFwiaW5wdXRcIik/XCJ2YWxcIjpcImh0bWxcIixvPW4uZGF0YSgpO2UrPVwiVGV4dFwiLG51bGw9PW8ucmVzZXRUZXh0JiZuLmRhdGEoXCJyZXNldFRleHRcIixuW3NdKCkpLHNldFRpbWVvdXQodC5wcm94eShmdW5jdGlvbigpe25bc10obnVsbD09b1tlXT90aGlzLm9wdGlvbnNbZV06b1tlXSksXCJsb2FkaW5nVGV4dFwiPT1lPyh0aGlzLmlzTG9hZGluZz0hMCxuLmFkZENsYXNzKGkpLmF0dHIoaSxpKS5wcm9wKGksITApKTp0aGlzLmlzTG9hZGluZyYmKHRoaXMuaXNMb2FkaW5nPSExLG4ucmVtb3ZlQ2xhc3MoaSkucmVtb3ZlQXR0cihpKS5wcm9wKGksITEpKX0sdGhpcyksMCl9LGkucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9dGhpcy4kZWxlbWVudC5jbG9zZXN0KCdbZGF0YS10b2dnbGU9XCJidXR0b25zXCJdJyk7aWYoZS5sZW5ndGgpe3ZhciBpPXRoaXMuJGVsZW1lbnQuZmluZChcImlucHV0XCIpO1wicmFkaW9cIj09aS5wcm9wKFwidHlwZVwiKT8oaS5wcm9wKFwiY2hlY2tlZFwiKSYmKHQ9ITEpLGUuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImFjdGl2ZVwiKSk6XCJjaGVja2JveFwiPT1pLnByb3AoXCJ0eXBlXCIpJiYoaS5wcm9wKFwiY2hlY2tlZFwiKSE9PXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikmJih0PSExKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpKSxpLnByb3AoXCJjaGVja2VkXCIsdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImFjdGl2ZVwiKSksdCYmaS50cmlnZ2VyKFwiY2hhbmdlXCIpfWVsc2UgdGhpcy4kZWxlbWVudC5hdHRyKFwiYXJpYS1wcmVzc2VkXCIsIXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLHRoaXMuJGVsZW1lbnQudG9nZ2xlQ2xhc3MoXCJhY3RpdmVcIil9O3ZhciBuPXQuZm4uYnV0dG9uO3QuZm4uYnV0dG9uPWUsdC5mbi5idXR0b24uQ29uc3RydWN0b3I9aSx0LmZuLmJ1dHRvbi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uYnV0dG9uPW4sdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5idXR0b24uZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlXj1cImJ1dHRvblwiXScsZnVuY3Rpb24oaSl7dmFyIG49dChpLnRhcmdldCkuY2xvc2VzdChcIi5idG5cIik7ZS5jYWxsKG4sXCJ0b2dnbGVcIiksdChpLnRhcmdldCkuaXMoJ2lucHV0W3R5cGU9XCJyYWRpb1wiXSwgaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJyl8fChpLnByZXZlbnREZWZhdWx0KCksbi5pcyhcImlucHV0LGJ1dHRvblwiKT9uLnRyaWdnZXIoXCJmb2N1c1wiKTpuLmZpbmQoXCJpbnB1dDp2aXNpYmxlLGJ1dHRvbjp2aXNpYmxlXCIpLmZpcnN0KCkudHJpZ2dlcihcImZvY3VzXCIpKX0pLm9uKFwiZm9jdXMuYnMuYnV0dG9uLmRhdGEtYXBpIGJsdXIuYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGUpe3QoZS50YXJnZXQpLmNsb3Nlc3QoXCIuYnRuXCIpLnRvZ2dsZUNsYXNzKFwiZm9jdXNcIiwvXmZvY3VzKGluKT8kLy50ZXN0KGUudHlwZSkpfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPW4uZGF0YShcImJzLmNhcm91c2VsXCIpLG89dC5leHRlbmQoe30saS5ERUZBVUxUUyxuLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgZSYmZSksYT1cInN0cmluZ1wiPT10eXBlb2YgZT9lOm8uc2xpZGU7c3x8bi5kYXRhKFwiYnMuY2Fyb3VzZWxcIixzPW5ldyBpKHRoaXMsbykpLFwibnVtYmVyXCI9PXR5cGVvZiBlP3MudG8oZSk6YT9zW2FdKCk6by5pbnRlcnZhbCYmcy5wYXVzZSgpLmN5Y2xlKCl9KX12YXIgaT1mdW5jdGlvbihlLGkpe3RoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLiRpbmRpY2F0b3JzPXRoaXMuJGVsZW1lbnQuZmluZChcIi5jYXJvdXNlbC1pbmRpY2F0b3JzXCIpLHRoaXMub3B0aW9ucz1pLHRoaXMucGF1c2VkPW51bGwsdGhpcy5zbGlkaW5nPW51bGwsdGhpcy5pbnRlcnZhbD1udWxsLHRoaXMuJGFjdGl2ZT1udWxsLHRoaXMuJGl0ZW1zPW51bGwsdGhpcy5vcHRpb25zLmtleWJvYXJkJiZ0aGlzLiRlbGVtZW50Lm9uKFwia2V5ZG93bi5icy5jYXJvdXNlbFwiLHQucHJveHkodGhpcy5rZXlkb3duLHRoaXMpKSxcImhvdmVyXCI9PXRoaXMub3B0aW9ucy5wYXVzZSYmIShcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmdGhpcy4kZWxlbWVudC5vbihcIm1vdXNlZW50ZXIuYnMuY2Fyb3VzZWxcIix0LnByb3h5KHRoaXMucGF1c2UsdGhpcykpLm9uKFwibW91c2VsZWF2ZS5icy5jYXJvdXNlbFwiLHQucHJveHkodGhpcy5jeWNsZSx0aGlzKSl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5UUkFOU0lUSU9OX0RVUkFUSU9OPTYwMCxpLkRFRkFVTFRTPXtpbnRlcnZhbDo1ZTMscGF1c2U6XCJob3ZlclwiLHdyYXA6ITAsa2V5Ym9hcmQ6ITB9LGkucHJvdG90eXBlLmtleWRvd249ZnVuY3Rpb24odCl7aWYoIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QodC50YXJnZXQudGFnTmFtZSkpe3N3aXRjaCh0LndoaWNoKXtjYXNlIDM3OnRoaXMucHJldigpO2JyZWFrO2Nhc2UgMzk6dGhpcy5uZXh0KCk7YnJlYWs7ZGVmYXVsdDpyZXR1cm59dC5wcmV2ZW50RGVmYXVsdCgpfX0saS5wcm90b3R5cGUuY3ljbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fCh0aGlzLnBhdXNlZD0hMSksdGhpcy5pbnRlcnZhbCYmY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsKSx0aGlzLm9wdGlvbnMuaW50ZXJ2YWwmJiF0aGlzLnBhdXNlZCYmKHRoaXMuaW50ZXJ2YWw9c2V0SW50ZXJ2YWwodC5wcm94eSh0aGlzLm5leHQsdGhpcyksdGhpcy5vcHRpb25zLmludGVydmFsKSksdGhpc30saS5wcm90b3R5cGUuZ2V0SXRlbUluZGV4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLiRpdGVtcz10LnBhcmVudCgpLmNoaWxkcmVuKFwiLml0ZW1cIiksdGhpcy4kaXRlbXMuaW5kZXgodHx8dGhpcy4kYWN0aXZlKX0saS5wcm90b3R5cGUuZ2V0SXRlbUZvckRpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuZ2V0SXRlbUluZGV4KGUpO2lmKChcInByZXZcIj09dCYmMD09PWl8fFwibmV4dFwiPT10JiZpPT10aGlzLiRpdGVtcy5sZW5ndGgtMSkmJiF0aGlzLm9wdGlvbnMud3JhcClyZXR1cm4gZTt2YXIgbj0oaSsoXCJwcmV2XCI9PXQ/LTE6MSkpJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEobil9LGkucHJvdG90eXBlLnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpKTtpZighKHQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fHQ8MCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIixmdW5jdGlvbigpe2UudG8odCl9KTppPT10P3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUodD5pP1wibmV4dFwiOlwicHJldlwiLHRoaXMuJGl0ZW1zLmVxKHQpKX0saS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKFwiLm5leHQsIC5wcmV2XCIpLmxlbmd0aCYmdC5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIodC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGkucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zbGlkaW5nKXJldHVybiB0aGlzLnNsaWRlKFwibmV4dFwiKX0saS5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJwcmV2XCIpfSxpLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihlLG4pe3ZhciBzPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtLmFjdGl2ZVwiKSxvPW58fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihlLHMpLGE9dGhpcy5pbnRlcnZhbCxyPVwibmV4dFwiPT1lP1wibGVmdFwiOlwicmlnaHRcIixsPXRoaXM7aWYoby5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBoPW9bMF0sYz10LkV2ZW50KFwic2xpZGUuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpoLGRpcmVjdGlvbjpyfSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGMpLCFjLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsYSYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciB1PXQodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KG8pXSk7dSYmdS5hZGRDbGFzcyhcImFjdGl2ZVwiKX12YXIgZD10LkV2ZW50KFwic2xpZC5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmgsZGlyZWN0aW9uOnJ9KTtyZXR1cm4gdC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJzbGlkZVwiKT8oby5hZGRDbGFzcyhlKSxvWzBdLm9mZnNldFdpZHRoLHMuYWRkQ2xhc3Mociksby5hZGRDbGFzcyhyKSxzLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7by5yZW1vdmVDbGFzcyhbZSxyXS5qb2luKFwiIFwiKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIikscy5yZW1vdmVDbGFzcyhbXCJhY3RpdmVcIixyXS5qb2luKFwiIFwiKSksbC5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLiRlbGVtZW50LnRyaWdnZXIoZCl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KHMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksby5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKGQpKSxhJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBuPXQuZm4uY2Fyb3VzZWw7dC5mbi5jYXJvdXNlbD1lLHQuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9aSx0LmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5jYXJvdXNlbD1uLHRoaXN9O3ZhciBzPWZ1bmN0aW9uKGkpe1xudmFyIG4scz10KHRoaXMpLG89dChzLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KG49cy5hdHRyKFwiaHJlZlwiKSkmJm4ucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKSk7aWYoby5oYXNDbGFzcyhcImNhcm91c2VsXCIpKXt2YXIgYT10LmV4dGVuZCh7fSxvLmRhdGEoKSxzLmRhdGEoKSkscj1zLmF0dHIoXCJkYXRhLXNsaWRlLXRvXCIpO3ImJihhLmludGVydmFsPSExKSxlLmNhbGwobyxhKSxyJiZvLmRhdGEoXCJicy5jYXJvdXNlbFwiKS50byhyKSxpLnByZXZlbnREZWZhdWx0KCl9fTt0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZV1cIixzKS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZS10b11cIixzKSx0KHdpbmRvdykub24oXCJsb2FkXCIsZnVuY3Rpb24oKXt0KCdbZGF0YS1yaWRlPVwiY2Fyb3VzZWxcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKTtlLmNhbGwoaSxpLmRhdGEoKSl9KX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7dmFyIGksbj1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8KGk9ZS5hdHRyKFwiaHJlZlwiKSkmJmkucmVwbGFjZSgvLiooPz0jW15cXHNdKyQpLyxcIlwiKTtyZXR1cm4gdChuKX1mdW5jdGlvbiBpKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5kYXRhKFwiYnMuY29sbGFwc2VcIiksbz10LmV4dGVuZCh7fSxuLkRFRkFVTFRTLGkuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKTshcyYmby50b2dnbGUmJi9zaG93fGhpZGUvLnRlc3QoZSkmJihvLnRvZ2dsZT0hMSksc3x8aS5kYXRhKFwiYnMuY29sbGFwc2VcIixzPW5ldyBuKHRoaXMsbykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZzW2VdKCl9KX12YXIgbj1mdW5jdGlvbihlLGkpe3RoaXMuJGVsZW1lbnQ9dChlKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sbi5ERUZBVUxUUyxpKSx0aGlzLiR0cmlnZ2VyPXQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2hyZWY9XCIjJytlLmlkKydcIl0sW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS10YXJnZXQ9XCIjJytlLmlkKydcIl0nKSx0aGlzLnRyYW5zaXRpb25pbmc9bnVsbCx0aGlzLm9wdGlvbnMucGFyZW50P3RoaXMuJHBhcmVudD10aGlzLmdldFBhcmVudCgpOnRoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuJGVsZW1lbnQsdGhpcy4kdHJpZ2dlciksdGhpcy5vcHRpb25zLnRvZ2dsZSYmdGhpcy50b2dnbGUoKX07bi5WRVJTSU9OPVwiMy4zLjdcIixuLlRSQU5TSVRJT05fRFVSQVRJT049MzUwLG4uREVGQVVMVFM9e3RvZ2dsZTohMH0sbi5wcm90b3R5cGUuZGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJ3aWR0aFwiKT9cIndpZHRoXCI6XCJoZWlnaHRcIn0sbi5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJiF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIikpe3ZhciBlLHM9dGhpcy4kcGFyZW50JiZ0aGlzLiRwYXJlbnQuY2hpbGRyZW4oXCIucGFuZWxcIikuY2hpbGRyZW4oXCIuaW4sIC5jb2xsYXBzaW5nXCIpO2lmKCEocyYmcy5sZW5ndGgmJihlPXMuZGF0YShcImJzLmNvbGxhcHNlXCIpKSYmZS50cmFuc2l0aW9uaW5nKSl7dmFyIG89dC5FdmVudChcInNob3cuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKG8pLCFvLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtzJiZzLmxlbmd0aCYmKGkuY2FsbChzLFwiaGlkZVwiKSxlfHxzLmRhdGEoXCJicy5jb2xsYXBzZVwiLG51bGwpKTt2YXIgYT10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZVwiKS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIilbYV0oMCkuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy4kdHJpZ2dlci5yZW1vdmVDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgcj1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2UgaW5cIilbYV0oXCJcIiksdGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuY29sbGFwc2VcIil9O2lmKCF0LnN1cHBvcnQudHJhbnNpdGlvbilyZXR1cm4gci5jYWxsKHRoaXMpO3ZhciBsPXQuY2FtZWxDYXNlKFtcInNjcm9sbFwiLGFdLmpvaW4oXCItXCIpKTt0aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkocix0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobi5UUkFOU0lUSU9OX0RVUkFUSU9OKVthXSh0aGlzLiRlbGVtZW50WzBdW2xdKX19fX0sbi5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe2lmKCF0aGlzLnRyYW5zaXRpb25pbmcmJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKSl7dmFyIGU9dC5FdmVudChcImhpZGUuYnMuY29sbGFwc2VcIik7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGUpLCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLmRpbWVuc2lvbigpO3RoaXMuJGVsZW1lbnRbaV0odGhpcy4kZWxlbWVudFtpXSgpKVswXS5vZmZzZXRIZWlnaHQsdGhpcy4kZWxlbWVudC5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBpblwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLiR0cmlnZ2VyLmFkZENsYXNzKFwiY29sbGFwc2VkXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITEpLHRoaXMudHJhbnNpdGlvbmluZz0xO3ZhciBzPWZ1bmN0aW9uKCl7dGhpcy50cmFuc2l0aW9uaW5nPTAsdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhcImNvbGxhcHNpbmdcIikuYWRkQ2xhc3MoXCJjb2xsYXBzZVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLmNvbGxhcHNlXCIpfTtpZighdC5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIHMuY2FsbCh0aGlzKTt0aGlzLiRlbGVtZW50W2ldKDApLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkocyx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobi5UUkFOU0lUSU9OX0RVUkFUSU9OKX19fSxuLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzW3RoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJpblwiKT9cImhpZGVcIjpcInNob3dcIl0oKX0sbi5wcm90b3R5cGUuZ2V0UGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcy5vcHRpb25zLnBhcmVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl1bZGF0YS1wYXJlbnQ9XCInK3RoaXMub3B0aW9ucy5wYXJlbnQrJ1wiXScpLmVhY2godC5wcm94eShmdW5jdGlvbihpLG4pe3ZhciBzPXQobik7dGhpcy5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoZShzKSxzKX0sdGhpcykpLmVuZCgpfSxuLnByb3RvdHlwZS5hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgaT10Lmhhc0NsYXNzKFwiaW5cIik7dC5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLGkpLGUudG9nZ2xlQ2xhc3MoXCJjb2xsYXBzZWRcIiwhaSkuYXR0cihcImFyaWEtZXhwYW5kZWRcIixpKX07dmFyIHM9dC5mbi5jb2xsYXBzZTt0LmZuLmNvbGxhcHNlPWksdC5mbi5jb2xsYXBzZS5Db25zdHJ1Y3Rvcj1uLHQuZm4uY29sbGFwc2Uubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmNvbGxhcHNlPXMsdGhpc30sdChkb2N1bWVudCkub24oXCJjbGljay5icy5jb2xsYXBzZS5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXScsZnVuY3Rpb24obil7dmFyIHM9dCh0aGlzKTtzLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8bi5wcmV2ZW50RGVmYXVsdCgpO3ZhciBvPWUocyksYT1vLmRhdGEoXCJicy5jb2xsYXBzZVwiKT9cInRvZ2dsZVwiOnMuZGF0YSgpO2kuY2FsbChvLGEpfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXt2YXIgaT1lLmF0dHIoXCJkYXRhLXRhcmdldFwiKTtpfHwoaT0oaT1lLmF0dHIoXCJocmVmXCIpKSYmLyNbQS1aYS16XS8udGVzdChpKSYmaS5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKTt2YXIgbj1pJiZ0KGkpO3JldHVybiBuJiZuLmxlbmd0aD9uOmUucGFyZW50KCl9ZnVuY3Rpb24gaShpKXtpJiYzPT09aS53aGljaHx8KHQobikucmVtb3ZlKCksdChzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPWUobiksbz17cmVsYXRlZFRhcmdldDp0aGlzfTtzLmhhc0NsYXNzKFwib3BlblwiKSYmKGkmJlwiY2xpY2tcIj09aS50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGkudGFyZ2V0LnRhZ05hbWUpJiZ0LmNvbnRhaW5zKHNbMF0saS50YXJnZXQpfHwocy50cmlnZ2VyKGk9dC5FdmVudChcImhpZGUuYnMuZHJvcGRvd25cIixvKSksaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KG4uYXR0cihcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLHMucmVtb3ZlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIodC5FdmVudChcImhpZGRlbi5icy5kcm9wZG93blwiLG8pKSkpKX0pKX12YXIgbj1cIi5kcm9wZG93bi1iYWNrZHJvcFwiLHM9J1tkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJdJyxvPWZ1bmN0aW9uKGUpe3QoZSkub24oXCJjbGljay5icy5kcm9wZG93blwiLHRoaXMudG9nZ2xlKX07by5WRVJTSU9OPVwiMy4zLjdcIixvLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24obil7dmFyIHM9dCh0aGlzKTtpZighcy5pcyhcIi5kaXNhYmxlZCwgOmRpc2FibGVkXCIpKXt2YXIgbz1lKHMpLGE9by5oYXNDbGFzcyhcIm9wZW5cIik7aWYoaSgpLCFhKXtcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhby5jbG9zZXN0KFwiLm5hdmJhci1uYXZcIikubGVuZ3RoJiZ0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmFkZENsYXNzKFwiZHJvcGRvd24tYmFja2Ryb3BcIikuaW5zZXJ0QWZ0ZXIodCh0aGlzKSkub24oXCJjbGlja1wiLGkpO3ZhciByPXtyZWxhdGVkVGFyZ2V0OnRoaXN9O2lmKG8udHJpZ2dlcihuPXQuRXZlbnQoXCJzaG93LmJzLmRyb3Bkb3duXCIscikpLG4uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO3MudHJpZ2dlcihcImZvY3VzXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJ0cnVlXCIpLG8udG9nZ2xlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIodC5FdmVudChcInNob3duLmJzLmRyb3Bkb3duXCIscikpfXJldHVybiExfX0sby5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihpKXtpZigvKDM4fDQwfDI3fDMyKS8udGVzdChpLndoaWNoKSYmIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoaS50YXJnZXQudGFnTmFtZSkpe3ZhciBuPXQodGhpcyk7aWYoaS5wcmV2ZW50RGVmYXVsdCgpLGkuc3RvcFByb3BhZ2F0aW9uKCksIW4uaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIG89ZShuKSxhPW8uaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKCFhJiYyNyE9aS53aGljaHx8YSYmMjc9PWkud2hpY2gpcmV0dXJuIDI3PT1pLndoaWNoJiZvLmZpbmQocykudHJpZ2dlcihcImZvY3VzXCIpLG4udHJpZ2dlcihcImNsaWNrXCIpO3ZhciByPW8uZmluZChcIi5kcm9wZG93bi1tZW51IGxpOm5vdCguZGlzYWJsZWQpOnZpc2libGUgYVwiKTtpZihyLmxlbmd0aCl7dmFyIGw9ci5pbmRleChpLnRhcmdldCk7Mzg9PWkud2hpY2gmJmw+MCYmbC0tLDQwPT1pLndoaWNoJiZsPHIubGVuZ3RoLTEmJmwrKyx+bHx8KGw9MCksci5lcShsKS50cmlnZ2VyKFwiZm9jdXNcIil9fX19O3ZhciBhPXQuZm4uZHJvcGRvd247dC5mbi5kcm9wZG93bj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkuZGF0YShcImJzLmRyb3Bkb3duXCIpO258fGkuZGF0YShcImJzLmRyb3Bkb3duXCIsbj1uZXcgbyh0aGlzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJm5bZV0uY2FsbChpKX0pfSx0LmZuLmRyb3Bkb3duLkNvbnN0cnVjdG9yPW8sdC5mbi5kcm9wZG93bi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uZHJvcGRvd249YSx0aGlzfSx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsaSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duIGZvcm1cIixmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSkub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLHMsby5wcm90b3R5cGUudG9nZ2xlKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixzLG8ucHJvdG90eXBlLmtleWRvd24pLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLFwiLmRyb3Bkb3duLW1lbnVcIixvLnByb3RvdHlwZS5rZXlkb3duKX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUsbil7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQodGhpcyksbz1zLmRhdGEoXCJicy5tb2RhbFwiKSxhPXQuZXh0ZW5kKHt9LGkuREVGQVVMVFMscy5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpO298fHMuZGF0YShcImJzLm1vZGFsXCIsbz1uZXcgaSh0aGlzLGEpKSxcInN0cmluZ1wiPT10eXBlb2YgZT9vW2VdKG4pOmEuc2hvdyYmby5zaG93KG4pfSl9dmFyIGk9ZnVuY3Rpb24oZSxpKXt0aGlzLm9wdGlvbnM9aSx0aGlzLiRib2R5PXQoZG9jdW1lbnQuYm9keSksdGhpcy4kZWxlbWVudD10KGUpLHRoaXMuJGRpYWxvZz10aGlzLiRlbGVtZW50LmZpbmQoXCIubW9kYWwtZGlhbG9nXCIpLHRoaXMuJGJhY2tkcm9wPW51bGwsdGhpcy5pc1Nob3duPW51bGwsdGhpcy5vcmlnaW5hbEJvZHlQYWQ9bnVsbCx0aGlzLnNjcm9sbGJhcldpZHRoPTAsdGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrPSExLHRoaXMub3B0aW9ucy5yZW1vdGUmJnRoaXMuJGVsZW1lbnQuZmluZChcIi5tb2RhbC1jb250ZW50XCIpLmxvYWQodGhpcy5vcHRpb25zLnJlbW90ZSx0LnByb3h5KGZ1bmN0aW9uKCl7dGhpcy4kZWxlbWVudC50cmlnZ2VyKFwibG9hZGVkLmJzLm1vZGFsXCIpfSx0aGlzKSl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5UUkFOU0lUSU9OX0RVUkFUSU9OPTMwMCxpLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT049MTUwLGkuREVGQVVMVFM9e2JhY2tkcm9wOiEwLGtleWJvYXJkOiEwLHNob3c6ITB9LGkucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc1Nob3duP3RoaXMuaGlkZSgpOnRoaXMuc2hvdyh0KX0saS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihlKXt2YXIgbj10aGlzLHM9dC5FdmVudChcInNob3cuYnMubW9kYWxcIix7cmVsYXRlZFRhcmdldDplfSk7dGhpcy4kZWxlbWVudC50cmlnZ2VyKHMpLHRoaXMuaXNTaG93bnx8cy5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KHRoaXMuaXNTaG93bj0hMCx0aGlzLmNoZWNrU2Nyb2xsYmFyKCksdGhpcy5zZXRTY3JvbGxiYXIoKSx0aGlzLiRib2R5LmFkZENsYXNzKFwibW9kYWwtb3BlblwiKSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIiwnW2RhdGEtZGlzbWlzcz1cIm1vZGFsXCJdJyx0LnByb3h5KHRoaXMuaGlkZSx0aGlzKSksdGhpcy4kZGlhbG9nLm9uKFwibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWxcIixmdW5jdGlvbigpe24uJGVsZW1lbnQub25lKFwibW91c2V1cC5kaXNtaXNzLmJzLm1vZGFsXCIsZnVuY3Rpb24oZSl7dChlLnRhcmdldCkuaXMobi4kZWxlbWVudCkmJihuLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITApfSl9KSx0aGlzLmJhY2tkcm9wKGZ1bmN0aW9uKCl7dmFyIHM9dC5zdXBwb3J0LnRyYW5zaXRpb24mJm4uJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpO24uJGVsZW1lbnQucGFyZW50KCkubGVuZ3RofHxuLiRlbGVtZW50LmFwcGVuZFRvKG4uJGJvZHkpLG4uJGVsZW1lbnQuc2hvdygpLnNjcm9sbFRvcCgwKSxuLmFkanVzdERpYWxvZygpLHMmJm4uJGVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsbi4kZWxlbWVudC5hZGRDbGFzcyhcImluXCIpLG4uZW5mb3JjZUZvY3VzKCk7dmFyIG89dC5FdmVudChcInNob3duLmJzLm1vZGFsXCIse3JlbGF0ZWRUYXJnZXQ6ZX0pO3M/bi4kZGlhbG9nLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7bi4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIikudHJpZ2dlcihvKX0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6bi4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIikudHJpZ2dlcihvKX0pKX0saS5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksZT10LkV2ZW50KFwiaGlkZS5icy5tb2RhbFwiKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSksdGhpcy5pc1Nob3duJiYhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmKHRoaXMuaXNTaG93bj0hMSx0aGlzLmVzY2FwZSgpLHRoaXMucmVzaXplKCksdChkb2N1bWVudCkub2ZmKFwiZm9jdXNpbi5icy5tb2RhbFwiKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwiaW5cIikub2ZmKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiKS5vZmYoXCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWxcIiksdGhpcy4kZGlhbG9nLm9mZihcIm1vdXNlZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIpLHQuc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKT90aGlzLiRlbGVtZW50Lm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLHQucHJveHkodGhpcy5oaWRlTW9kYWwsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6dGhpcy5oaWRlTW9kYWwoKSl9LGkucHJvdG90eXBlLmVuZm9yY2VGb2N1cz1mdW5jdGlvbigpe3QoZG9jdW1lbnQpLm9mZihcImZvY3VzaW4uYnMubW9kYWxcIikub24oXCJmb2N1c2luLmJzLm1vZGFsXCIsdC5wcm94eShmdW5jdGlvbih0KXtkb2N1bWVudD09PXQudGFyZ2V0fHx0aGlzLiRlbGVtZW50WzBdPT09dC50YXJnZXR8fHRoaXMuJGVsZW1lbnQuaGFzKHQudGFyZ2V0KS5sZW5ndGh8fHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpfSx0aGlzKSl9LGkucHJvdG90eXBlLmVzY2FwZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmtleWJvYXJkP3RoaXMuJGVsZW1lbnQub24oXCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWxcIix0LnByb3h5KGZ1bmN0aW9uKHQpezI3PT10LndoaWNoJiZ0aGlzLmhpZGUoKX0sdGhpcykpOnRoaXMuaXNTaG93bnx8dGhpcy4kZWxlbWVudC5vZmYoXCJrZXlkb3duLmRpc21pc3MuYnMubW9kYWxcIil9LGkucHJvdG90eXBlLnJlc2l6ZT1mdW5jdGlvbigpe3RoaXMuaXNTaG93bj90KHdpbmRvdykub24oXCJyZXNpemUuYnMubW9kYWxcIix0LnByb3h5KHRoaXMuaGFuZGxlVXBkYXRlLHRoaXMpKTp0KHdpbmRvdykub2ZmKFwicmVzaXplLmJzLm1vZGFsXCIpfSxpLnByb3RvdHlwZS5oaWRlTW9kYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJGVsZW1lbnQuaGlkZSgpLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt0LiRib2R5LnJlbW92ZUNsYXNzKFwibW9kYWwtb3BlblwiKSx0LnJlc2V0QWRqdXN0bWVudHMoKSx0LnJlc2V0U2Nyb2xsYmFyKCksdC4kZWxlbWVudC50cmlnZ2VyKFwiaGlkZGVuLmJzLm1vZGFsXCIpfSl9LGkucHJvdG90eXBlLnJlbW92ZUJhY2tkcm9wPWZ1bmN0aW9uKCl7dGhpcy4kYmFja2Ryb3AmJnRoaXMuJGJhY2tkcm9wLnJlbW92ZSgpLHRoaXMuJGJhY2tkcm9wPW51bGx9LGkucHJvdG90eXBlLmJhY2tkcm9wPWZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMscz10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKT9cImZhZGVcIjpcIlwiO2lmKHRoaXMuaXNTaG93biYmdGhpcy5vcHRpb25zLmJhY2tkcm9wKXt2YXIgbz10LnN1cHBvcnQudHJhbnNpdGlvbiYmcztpZih0aGlzLiRiYWNrZHJvcD10KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmFkZENsYXNzKFwibW9kYWwtYmFja2Ryb3AgXCIrcykuYXBwZW5kVG8odGhpcy4kYm9keSksdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIix0LnByb3h5KGZ1bmN0aW9uKHQpe3RoaXMuaWdub3JlQmFja2Ryb3BDbGljaz90aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITE6dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJihcInN0YXRpY1wiPT10aGlzLm9wdGlvbnMuYmFja2Ryb3A/dGhpcy4kZWxlbWVudFswXS5mb2N1cygpOnRoaXMuaGlkZSgpKX0sdGhpcykpLG8mJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKFwiaW5cIiksIWUpcmV0dXJuO28/dGhpcy4kYmFja2Ryb3Aub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTplKCl9ZWxzZSBpZighdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcCl7dGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoXCJpblwiKTt2YXIgYT1mdW5jdGlvbigpe24ucmVtb3ZlQmFja2Ryb3AoKSxlJiZlKCl9O3Quc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKT90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmEoKX1lbHNlIGUmJmUoKX0saS5wcm90b3R5cGUuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5hZGp1c3REaWFsb2coKX0saS5wcm90b3R5cGUuYWRqdXN0RGlhbG9nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDt0aGlzLiRlbGVtZW50LmNzcyh7cGFkZGluZ0xlZnQ6IXRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnQ/dGhpcy5zY3JvbGxiYXJXaWR0aDpcIlwiLHBhZGRpbmdSaWdodDp0aGlzLmJvZHlJc092ZXJmbG93aW5nJiYhdD90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCJ9KX0saS5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDpcIlwiLHBhZGRpbmdSaWdodDpcIlwifSl9LGkucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9d2luZG93LmlubmVyV2lkdGg7aWYoIXQpe3ZhciBlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PWUucmlnaHQtTWF0aC5hYnMoZS5sZWZ0KX10aGlzLmJvZHlJc092ZXJmbG93aW5nPWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8dCx0aGlzLnNjcm9sbGJhcldpZHRoPXRoaXMubWVhc3VyZVNjcm9sbGJhcigpfSxpLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1wYXJzZUludCh0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHxcIlwiLHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiLHQrdGhpcy5zY3JvbGxiYXJXaWR0aCl9LGkucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxpLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmNsYXNzTmFtZT1cIm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlXCIsdGhpcy4kYm9keS5hcHBlbmQodCk7dmFyIGU9dC5vZmZzZXRXaWR0aC10LmNsaWVudFdpZHRoO3JldHVybiB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKHQpLGV9O3ZhciBuPXQuZm4ubW9kYWw7dC5mbi5tb2RhbD1lLHQuZm4ubW9kYWwuQ29uc3RydWN0b3I9aSx0LmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5tb2RhbD1uLHRoaXN9LHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMubW9kYWwuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLGZ1bmN0aW9uKGkpe3ZhciBuPXQodGhpcykscz1uLmF0dHIoXCJocmVmXCIpLG89dChuLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8cyYmcy5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpKSxhPW8uZGF0YShcImJzLm1vZGFsXCIpP1widG9nZ2xlXCI6dC5leHRlbmQoe3JlbW90ZTohLyMvLnRlc3QocykmJnN9LG8uZGF0YSgpLG4uZGF0YSgpKTtuLmlzKFwiYVwiKSYmaS5wcmV2ZW50RGVmYXVsdCgpLG8ub25lKFwic2hvdy5icy5tb2RhbFwiLGZ1bmN0aW9uKHQpe3QuaXNEZWZhdWx0UHJldmVudGVkKCl8fG8ub25lKFwiaGlkZGVuLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtuLmlzKFwiOnZpc2libGVcIikmJm4udHJpZ2dlcihcImZvY3VzXCIpfSl9KSxlLmNhbGwobyxhLHRoaXMpfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KFwidG9vbHRpcFwiLHQsZSl9O2UuVkVSU0lPTj1cIjMuMy43XCIsZS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxlLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OlwidG9wXCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOlwiYm9keVwiLHBhZGRpbmc6MH19LGUucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSxpLG4pe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9ZSx0aGlzLiRlbGVtZW50PXQoaSksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhuKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJnQodC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgXCIrdGhpcy50eXBlK1wiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IVwiKTtmb3IodmFyIHM9dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoXCIgXCIpLG89cy5sZW5ndGg7by0tOyl7dmFyIGE9c1tvXTtpZihcImNsaWNrXCI9PWEpdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsdC5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZihcIm1hbnVhbFwiIT1hKXt2YXIgcj1cImhvdmVyXCI9PWE/XCJtb3VzZWVudGVyXCI6XCJmb2N1c2luXCIsbD1cImhvdmVyXCI9PWE/XCJtb3VzZWxlYXZlXCI6XCJmb2N1c291dFwiO3RoaXMuJGVsZW1lbnQub24ocitcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLHQucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihsK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsdC5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuZml4VGl0bGUoKX0sZS5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gZS5ERUZBVUxUU30sZS5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4oZT10LmV4dGVuZCh7fSx0aGlzLmdldERlZmF1bHRzKCksdGhpcy4kZWxlbWVudC5kYXRhKCksZSkpLmRlbGF5JiZcIm51bWJlclwiPT10eXBlb2YgZS5kZWxheSYmKGUuZGVsYXk9e3Nob3c6ZS5kZWxheSxoaWRlOmUuZGVsYXl9KSxlfSxlLnByb3RvdHlwZS5nZXREZWxlZ2F0ZU9wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT17fSxpPXRoaXMuZ2V0RGVmYXVsdHMoKTtyZXR1cm4gdGhpcy5fb3B0aW9ucyYmdC5lYWNoKHRoaXMuX29wdGlvbnMsZnVuY3Rpb24odCxuKXtpW3RdIT1uJiYoZVt0XT1uKX0pLGV9LGUucHJvdG90eXBlLmVudGVyPWZ1bmN0aW9uKGUpe3ZhciBpPWUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2U6dChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpO3JldHVybiBpfHwoaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksdChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsaSkpLGUgaW5zdGFuY2VvZiB0LkV2ZW50JiYoaS5pblN0YXRlW1wiZm9jdXNpblwiPT1lLnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ITApLGkudGlwKCkuaGFzQ2xhc3MoXCJpblwiKXx8XCJpblwiPT1pLmhvdmVyU3RhdGU/dm9pZChpLmhvdmVyU3RhdGU9XCJpblwiKTooY2xlYXJUaW1lb3V0KGkudGltZW91dCksaS5ob3ZlclN0YXRlPVwiaW5cIixpLm9wdGlvbnMuZGVsYXkmJmkub3B0aW9ucy5kZWxheS5zaG93P3ZvaWQoaS50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcImluXCI9PWkuaG92ZXJTdGF0ZSYmaS5zaG93KCl9LGkub3B0aW9ucy5kZWxheS5zaG93KSk6aS5zaG93KCkpfSxlLnByb3RvdHlwZS5pc0luU3RhdGVUcnVlPWZ1bmN0aW9uKCl7Zm9yKHZhciB0IGluIHRoaXMuaW5TdGF0ZSlpZih0aGlzLmluU3RhdGVbdF0pcmV0dXJuITA7cmV0dXJuITF9LGUucHJvdG90eXBlLmxlYXZlPWZ1bmN0aW9uKGUpe3ZhciBpPWUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2U6dChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUpO2lmKGl8fChpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSx0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxpKSksZSBpbnN0YW5jZW9mIHQuRXZlbnQmJihpLmluU3RhdGVbXCJmb2N1c291dFwiPT1lLnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ITEpLCFpLmlzSW5TdGF0ZVRydWUoKSl7aWYoY2xlYXJUaW1lb3V0KGkudGltZW91dCksaS5ob3ZlclN0YXRlPVwib3V0XCIsIWkub3B0aW9ucy5kZWxheXx8IWkub3B0aW9ucy5kZWxheS5oaWRlKXJldHVybiBpLmhpZGUoKTtpLnRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe1wib3V0XCI9PWkuaG92ZXJTdGF0ZSYmaS5oaWRlKCl9LGkub3B0aW9ucy5kZWxheS5oaWRlKX19LGUucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgaT10LkV2ZW50KFwic2hvdy5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuaGFzQ29udGVudCgpJiZ0aGlzLmVuYWJsZWQpe3RoaXMuJGVsZW1lbnQudHJpZ2dlcihpKTt2YXIgbj10LmNvbnRhaW5zKHRoaXMuJGVsZW1lbnRbMF0ub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy4kZWxlbWVudFswXSk7aWYoaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8IW4pcmV0dXJuO3ZhciBzPXRoaXMsbz10aGlzLnRpcCgpLGE9dGhpcy5nZXRVSUQodGhpcy50eXBlKTt0aGlzLnNldENvbnRlbnQoKSxvLmF0dHIoXCJpZFwiLGEpLHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIixhKSx0aGlzLm9wdGlvbnMuYW5pbWF0aW9uJiZvLmFkZENsYXNzKFwiZmFkZVwiKTt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMucGxhY2VtZW50P3RoaXMub3B0aW9ucy5wbGFjZW1lbnQuY2FsbCh0aGlzLG9bMF0sdGhpcy4kZWxlbWVudFswXSk6dGhpcy5vcHRpb25zLnBsYWNlbWVudCxsPS9cXHM/YXV0bz9cXHM/L2ksaD1sLnRlc3Qocik7aCYmKHI9ci5yZXBsYWNlKGwsXCJcIil8fFwidG9wXCIpLG8uZGV0YWNoKCkuY3NzKHt0b3A6MCxsZWZ0OjAsZGlzcGxheTpcImJsb2NrXCJ9KS5hZGRDbGFzcyhyKS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLHRoaXMpLHRoaXMub3B0aW9ucy5jb250YWluZXI/by5hcHBlbmRUbyh0aGlzLm9wdGlvbnMuY29udGFpbmVyKTpvLmluc2VydEFmdGVyKHRoaXMuJGVsZW1lbnQpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImluc2VydGVkLmJzLlwiK3RoaXMudHlwZSk7dmFyIGM9dGhpcy5nZXRQb3NpdGlvbigpLHU9b1swXS5vZmZzZXRXaWR0aCxkPW9bMF0ub2Zmc2V0SGVpZ2h0O2lmKGgpe3ZhciBwPXIsZj10aGlzLmdldFBvc2l0aW9uKHRoaXMuJHZpZXdwb3J0KTtyPVwiYm90dG9tXCI9PXImJmMuYm90dG9tK2Q+Zi5ib3R0b20/XCJ0b3BcIjpcInRvcFwiPT1yJiZjLnRvcC1kPGYudG9wP1wiYm90dG9tXCI6XCJyaWdodFwiPT1yJiZjLnJpZ2h0K3U+Zi53aWR0aD9cImxlZnRcIjpcImxlZnRcIj09ciYmYy5sZWZ0LXU8Zi5sZWZ0P1wicmlnaHRcIjpyLG8ucmVtb3ZlQ2xhc3MocCkuYWRkQ2xhc3Mocil9dmFyIGc9dGhpcy5nZXRDYWxjdWxhdGVkT2Zmc2V0KHIsYyx1LGQpO3RoaXMuYXBwbHlQbGFjZW1lbnQoZyxyKTt2YXIgbT1mdW5jdGlvbigpe3ZhciB0PXMuaG92ZXJTdGF0ZTtzLiRlbGVtZW50LnRyaWdnZXIoXCJzaG93bi5icy5cIitzLnR5cGUpLHMuaG92ZXJTdGF0ZT1udWxsLFwib3V0XCI9PXQmJnMubGVhdmUocyl9O3Quc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiR0aXAuaGFzQ2xhc3MoXCJmYWRlXCIpP28ub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsbSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoZS5UUkFOU0lUSU9OX0RVUkFUSU9OKTptKCl9fSxlLnByb3RvdHlwZS5hcHBseVBsYWNlbWVudD1mdW5jdGlvbihlLGkpe3ZhciBuPXRoaXMudGlwKCkscz1uWzBdLm9mZnNldFdpZHRoLG89blswXS5vZmZzZXRIZWlnaHQsYT1wYXJzZUludChuLmNzcyhcIm1hcmdpbi10b3BcIiksMTApLHI9cGFyc2VJbnQobi5jc3MoXCJtYXJnaW4tbGVmdFwiKSwxMCk7aXNOYU4oYSkmJihhPTApLGlzTmFOKHIpJiYocj0wKSxlLnRvcCs9YSxlLmxlZnQrPXIsdC5vZmZzZXQuc2V0T2Zmc2V0KG5bMF0sdC5leHRlbmQoe3VzaW5nOmZ1bmN0aW9uKHQpe24uY3NzKHt0b3A6TWF0aC5yb3VuZCh0LnRvcCksbGVmdDpNYXRoLnJvdW5kKHQubGVmdCl9KX19LGUpLDApLG4uYWRkQ2xhc3MoXCJpblwiKTt2YXIgbD1uWzBdLm9mZnNldFdpZHRoLGg9blswXS5vZmZzZXRIZWlnaHQ7XCJ0b3BcIj09aSYmaCE9byYmKGUudG9wPWUudG9wK28taCk7dmFyIGM9dGhpcy5nZXRWaWV3cG9ydEFkanVzdGVkRGVsdGEoaSxlLGwsaCk7Yy5sZWZ0P2UubGVmdCs9Yy5sZWZ0OmUudG9wKz1jLnRvcDt2YXIgdT0vdG9wfGJvdHRvbS8udGVzdChpKSxkPXU/MipjLmxlZnQtcytsOjIqYy50b3AtbytoLHA9dT9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIjtuLm9mZnNldChlKSx0aGlzLnJlcGxhY2VBcnJvdyhkLG5bMF1bcF0sdSl9LGUucHJvdG90eXBlLnJlcGxhY2VBcnJvdz1mdW5jdGlvbih0LGUsaSl7dGhpcy5hcnJvdygpLmNzcyhpP1wibGVmdFwiOlwidG9wXCIsNTAqKDEtdC9lKStcIiVcIikuY3NzKGk/XCJ0b3BcIjpcImxlZnRcIixcIlwiKX0sZS5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudGlwKCksZT10aGlzLmdldFRpdGxlKCk7dC5maW5kKFwiLnRvb2x0aXAtaW5uZXJcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGUpLHQucmVtb3ZlQ2xhc3MoXCJmYWRlIGluIHRvcCBib3R0b20gbGVmdCByaWdodFwiKX0sZS5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbihpKXtmdW5jdGlvbiBuKCl7XCJpblwiIT1zLmhvdmVyU3RhdGUmJm8uZGV0YWNoKCkscy4kZWxlbWVudCYmcy4kZWxlbWVudC5yZW1vdmVBdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKS50cmlnZ2VyKFwiaGlkZGVuLmJzLlwiK3MudHlwZSksaSYmaSgpfXZhciBzPXRoaXMsbz10KHRoaXMuJHRpcCksYT10LkV2ZW50KFwiaGlkZS5icy5cIit0aGlzLnR5cGUpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihhKSwhYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm4gby5yZW1vdmVDbGFzcyhcImluXCIpLHQuc3VwcG9ydC50cmFuc2l0aW9uJiZvLmhhc0NsYXNzKFwiZmFkZVwiKT9vLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLG4pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGUuVFJBTlNJVElPTl9EVVJBVElPTik6bigpLHRoaXMuaG92ZXJTdGF0ZT1udWxsLHRoaXN9LGUucHJvdG90eXBlLmZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudDsodC5hdHRyKFwidGl0bGVcIil8fFwic3RyaW5nXCIhPXR5cGVvZiB0LmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpKSYmdC5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiLHQuYXR0cihcInRpdGxlXCIpfHxcIlwiKS5hdHRyKFwidGl0bGVcIixcIlwiKX0sZS5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl9LGUucHJvdG90eXBlLmdldFBvc2l0aW9uPWZ1bmN0aW9uKGUpe3ZhciBpPShlPWV8fHRoaXMuJGVsZW1lbnQpWzBdLG49XCJCT0RZXCI9PWkudGFnTmFtZSxzPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bnVsbD09cy53aWR0aCYmKHM9dC5leHRlbmQoe30scyx7d2lkdGg6cy5yaWdodC1zLmxlZnQsaGVpZ2h0OnMuYm90dG9tLXMudG9wfSkpO3ZhciBvPXdpbmRvdy5TVkdFbGVtZW50JiZpIGluc3RhbmNlb2Ygd2luZG93LlNWR0VsZW1lbnQsYT1uP3t0b3A6MCxsZWZ0OjB9Om8/bnVsbDplLm9mZnNldCgpLHI9e3Njcm9sbDpuP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOmUuc2Nyb2xsVG9wKCl9LGw9bj97d2lkdGg6dCh3aW5kb3cpLndpZHRoKCksaGVpZ2h0OnQod2luZG93KS5oZWlnaHQoKX06bnVsbDtyZXR1cm4gdC5leHRlbmQoe30scyxyLGwsYSl9LGUucHJvdG90eXBlLmdldENhbGN1bGF0ZWRPZmZzZXQ9ZnVuY3Rpb24odCxlLGksbil7cmV0dXJuXCJib3R0b21cIj09dD97dG9wOmUudG9wK2UuaGVpZ2h0LGxlZnQ6ZS5sZWZ0K2Uud2lkdGgvMi1pLzJ9OlwidG9wXCI9PXQ/e3RvcDplLnRvcC1uLGxlZnQ6ZS5sZWZ0K2Uud2lkdGgvMi1pLzJ9OlwibGVmdFwiPT10P3t0b3A6ZS50b3ArZS5oZWlnaHQvMi1uLzIsbGVmdDplLmxlZnQtaX06e3RvcDplLnRvcCtlLmhlaWdodC8yLW4vMixsZWZ0OmUubGVmdCtlLndpZHRofX0sZS5wcm90b3R5cGUuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhPWZ1bmN0aW9uKHQsZSxpLG4pe3ZhciBzPXt0b3A6MCxsZWZ0OjB9O2lmKCF0aGlzLiR2aWV3cG9ydClyZXR1cm4gczt2YXIgbz10aGlzLm9wdGlvbnMudmlld3BvcnQmJnRoaXMub3B0aW9ucy52aWV3cG9ydC5wYWRkaW5nfHwwLGE9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7aWYoL3JpZ2h0fGxlZnQvLnRlc3QodCkpe3ZhciByPWUudG9wLW8tYS5zY3JvbGwsbD1lLnRvcCtvLWEuc2Nyb2xsK247cjxhLnRvcD9zLnRvcD1hLnRvcC1yOmw+YS50b3ArYS5oZWlnaHQmJihzLnRvcD1hLnRvcCthLmhlaWdodC1sKX1lbHNle3ZhciBoPWUubGVmdC1vLGM9ZS5sZWZ0K28raTtoPGEubGVmdD9zLmxlZnQ9YS5sZWZ0LWg6Yz5hLnJpZ2h0JiYocy5sZWZ0PWEubGVmdCthLndpZHRoLWMpfXJldHVybiBzfSxlLnByb3RvdHlwZS5nZXRUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQsZT10aGlzLm9wdGlvbnM7cmV0dXJuIHQuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIil8fChcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRpdGxlP2UudGl0bGUuY2FsbCh0WzBdKTplLnRpdGxlKX0sZS5wcm90b3R5cGUuZ2V0VUlEPWZ1bmN0aW9uKHQpe2Rve3QrPX5+KDFlNipNYXRoLnJhbmRvbSgpKX13aGlsZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSk7cmV0dXJuIHR9LGUucHJvdG90eXBlLnRpcD1mdW5jdGlvbigpe2lmKCF0aGlzLiR0aXAmJih0aGlzLiR0aXA9dCh0aGlzLm9wdGlvbnMudGVtcGxhdGUpLDEhPXRoaXMuJHRpcC5sZW5ndGgpKXRocm93IG5ldyBFcnJvcih0aGlzLnR5cGUrXCIgYHRlbXBsYXRlYCBvcHRpb24gbXVzdCBjb25zaXN0IG9mIGV4YWN0bHkgMSB0b3AtbGV2ZWwgZWxlbWVudCFcIik7cmV0dXJuIHRoaXMuJHRpcH0sZS5wcm90b3R5cGUuYXJyb3c9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kYXJyb3c9dGhpcy4kYXJyb3d8fHRoaXMudGlwKCkuZmluZChcIi50b29sdGlwLWFycm93XCIpfSxlLnByb3RvdHlwZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITB9LGUucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9ITF9LGUucHJvdG90eXBlLnRvZ2dsZUVuYWJsZWQ9ZnVuY3Rpb24oKXt0aGlzLmVuYWJsZWQ9IXRoaXMuZW5hYmxlZH0sZS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7ZSYmKChpPXQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKSl8fChpPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUuY3VycmVudFRhcmdldCx0aGlzLmdldERlbGVnYXRlT3B0aW9ucygpKSx0KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSxpKSkpLGU/KGkuaW5TdGF0ZS5jbGljaz0haS5pblN0YXRlLmNsaWNrLGkuaXNJblN0YXRlVHJ1ZSgpP2kuZW50ZXIoaSk6aS5sZWF2ZShpKSk6aS50aXAoKS5oYXNDbGFzcyhcImluXCIpP2kubGVhdmUoaSk6aS5lbnRlcihpKX0sZS5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PXRoaXM7Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCksdGhpcy5oaWRlKGZ1bmN0aW9uKCl7dC4kZWxlbWVudC5vZmYoXCIuXCIrdC50eXBlKS5yZW1vdmVEYXRhKFwiYnMuXCIrdC50eXBlKSx0LiR0aXAmJnQuJHRpcC5kZXRhY2goKSx0LiR0aXA9bnVsbCx0LiRhcnJvdz1udWxsLHQuJHZpZXdwb3J0PW51bGwsdC4kZWxlbWVudD1udWxsfSl9O3ZhciBpPXQuZm4udG9vbHRpcDt0LmZuLnRvb2x0aXA9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcykscz1uLmRhdGEoXCJicy50b29sdGlwXCIpLG89XCJvYmplY3RcIj09dHlwZW9mIGkmJmk7IXMmJi9kZXN0cm95fGhpZGUvLnRlc3QoaSl8fChzfHxuLmRhdGEoXCJicy50b29sdGlwXCIscz1uZXcgZSh0aGlzLG8pKSxcInN0cmluZ1wiPT10eXBlb2YgaSYmc1tpXSgpKX0pfSx0LmZuLnRvb2x0aXAuQ29uc3RydWN0b3I9ZSx0LmZuLnRvb2x0aXAubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLnRvb2x0aXA9aSx0aGlzfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt2YXIgZT1mdW5jdGlvbih0LGUpe3RoaXMuaW5pdChcInBvcG92ZXJcIix0LGUpfTtpZighdC5mbi50b29sdGlwKXRocm93IG5ldyBFcnJvcihcIlBvcG92ZXIgcmVxdWlyZXMgdG9vbHRpcC5qc1wiKTtlLlZFUlNJT049XCIzLjMuN1wiLGUuREVGQVVMVFM9dC5leHRlbmQoe30sdC5mbi50b29sdGlwLkNvbnN0cnVjdG9yLkRFRkFVTFRTLHtwbGFjZW1lbnQ6XCJyaWdodFwiLHRyaWdnZXI6XCJjbGlja1wiLGNvbnRlbnQ6XCJcIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItdGl0bGVcIj48L2gzPjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nfSksKGUucHJvdG90eXBlPXQuZXh0ZW5kKHt9LHQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1lLGUucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJuIGUuREVGQVVMVFN9LGUucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRpcCgpLGU9dGhpcy5nZXRUaXRsZSgpLGk9dGhpcy5nZXRDb250ZW50KCk7dC5maW5kKFwiLnBvcG92ZXItdGl0bGVcIilbdGhpcy5vcHRpb25zLmh0bWw/XCJodG1sXCI6XCJ0ZXh0XCJdKGUpLHQuZmluZChcIi5wb3BvdmVyLWNvbnRlbnRcIikuY2hpbGRyZW4oKS5kZXRhY2goKS5lbmQoKVt0aGlzLm9wdGlvbnMuaHRtbD9cInN0cmluZ1wiPT10eXBlb2YgaT9cImh0bWxcIjpcImFwcGVuZFwiOlwidGV4dFwiXShpKSx0LnJlbW92ZUNsYXNzKFwiZmFkZSB0b3AgYm90dG9tIGxlZnQgcmlnaHQgaW5cIiksdC5maW5kKFwiLnBvcG92ZXItdGl0bGVcIikuaHRtbCgpfHx0LmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5oaWRlKCl9LGUucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfHx0aGlzLmdldENvbnRlbnQoKX0sZS5wcm90b3R5cGUuZ2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQsZT10aGlzLm9wdGlvbnM7cmV0dXJuIHQuYXR0cihcImRhdGEtY29udGVudFwiKXx8KFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY29udGVudD9lLmNvbnRlbnQuY2FsbCh0WzBdKTplLmNvbnRlbnQpfSxlLnByb3RvdHlwZS5hcnJvdz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRhcnJvdz10aGlzLiRhcnJvd3x8dGhpcy50aXAoKS5maW5kKFwiLmFycm93XCIpfTt2YXIgaT10LmZuLnBvcG92ZXI7dC5mbi5wb3BvdmVyPWZ1bmN0aW9uKGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMucG9wb3ZlclwiKSxvPVwib2JqZWN0XCI9PXR5cGVvZiBpJiZpOyFzJiYvZGVzdHJveXxoaWRlLy50ZXN0KGkpfHwoc3x8bi5kYXRhKFwiYnMucG9wb3ZlclwiLHM9bmV3IGUodGhpcyxvKSksXCJzdHJpbmdcIj09dHlwZW9mIGkmJnNbaV0oKSl9KX0sdC5mbi5wb3BvdmVyLkNvbnN0cnVjdG9yPWUsdC5mbi5wb3BvdmVyLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5wb3BvdmVyPWksdGhpc319KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShpLG4pe3RoaXMuJGJvZHk9dChkb2N1bWVudC5ib2R5KSx0aGlzLiRzY3JvbGxFbGVtZW50PXQodChpKS5pcyhkb2N1bWVudC5ib2R5KT93aW5kb3c6aSksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGUuREVGQVVMVFMsbiksdGhpcy5zZWxlY3Rvcj0odGhpcy5vcHRpb25zLnRhcmdldHx8XCJcIikrXCIgLm5hdiBsaSA+IGFcIix0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5zY3JvbGxIZWlnaHQ9MCx0aGlzLiRzY3JvbGxFbGVtZW50Lm9uKFwic2Nyb2xsLmJzLnNjcm9sbHNweVwiLHQucHJveHkodGhpcy5wcm9jZXNzLHRoaXMpKSx0aGlzLnJlZnJlc2goKSx0aGlzLnByb2Nlc3MoKX1mdW5jdGlvbiBpKGkpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMuc2Nyb2xsc3B5XCIpLG89XCJvYmplY3RcIj09dHlwZW9mIGkmJmk7c3x8bi5kYXRhKFwiYnMuc2Nyb2xsc3B5XCIscz1uZXcgZSh0aGlzLG8pKSxcInN0cmluZ1wiPT10eXBlb2YgaSYmc1tpXSgpfSl9ZS5WRVJTSU9OPVwiMy4zLjdcIixlLkRFRkFVTFRTPXtvZmZzZXQ6MTB9LGUucHJvdG90eXBlLmdldFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRzY3JvbGxFbGVtZW50WzBdLnNjcm9sbEhlaWdodHx8TWF0aC5tYXgodGhpcy4kYm9keVswXS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9LGUucHJvdG90eXBlLnJlZnJlc2g9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9XCJvZmZzZXRcIixuPTA7dGhpcy5vZmZzZXRzPVtdLHRoaXMudGFyZ2V0cz1bXSx0aGlzLnNjcm9sbEhlaWdodD10aGlzLmdldFNjcm9sbEhlaWdodCgpLHQuaXNXaW5kb3codGhpcy4kc2Nyb2xsRWxlbWVudFswXSl8fChpPVwicG9zaXRpb25cIixuPXRoaXMuJHNjcm9sbEVsZW1lbnQuc2Nyb2xsVG9wKCkpLHRoaXMuJGJvZHkuZmluZCh0aGlzLnNlbGVjdG9yKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9ZS5kYXRhKFwidGFyZ2V0XCIpfHxlLmF0dHIoXCJocmVmXCIpLG89L14jLi8udGVzdChzKSYmdChzKTtyZXR1cm4gbyYmby5sZW5ndGgmJm8uaXMoXCI6dmlzaWJsZVwiKSYmW1tvW2ldKCkudG9wK24sc11dfHxudWxsfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybiB0WzBdLWVbMF19KS5lYWNoKGZ1bmN0aW9uKCl7ZS5vZmZzZXRzLnB1c2godGhpc1swXSksZS50YXJnZXRzLnB1c2godGhpc1sxXSl9KX0sZS5wcm90b3R5cGUucHJvY2Vzcz1mdW5jdGlvbigpe3ZhciB0LGU9dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSt0aGlzLm9wdGlvbnMub2Zmc2V0LGk9dGhpcy5nZXRTY3JvbGxIZWlnaHQoKSxuPXRoaXMub3B0aW9ucy5vZmZzZXQraS10aGlzLiRzY3JvbGxFbGVtZW50LmhlaWdodCgpLHM9dGhpcy5vZmZzZXRzLG89dGhpcy50YXJnZXRzLGE9dGhpcy5hY3RpdmVUYXJnZXQ7aWYodGhpcy5zY3JvbGxIZWlnaHQhPWkmJnRoaXMucmVmcmVzaCgpLGU+PW4pcmV0dXJuIGEhPSh0PW9bby5sZW5ndGgtMV0pJiZ0aGlzLmFjdGl2YXRlKHQpO2lmKGEmJmU8c1swXSlyZXR1cm4gdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLmNsZWFyKCk7Zm9yKHQ9cy5sZW5ndGg7dC0tOylhIT1vW3RdJiZlPj1zW3RdJiYodm9pZCAwPT09c1t0KzFdfHxlPHNbdCsxXSkmJnRoaXMuYWN0aXZhdGUob1t0XSl9LGUucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlVGFyZ2V0PWUsdGhpcy5jbGVhcigpO3ZhciBpPXRoaXMuc2VsZWN0b3IrJ1tkYXRhLXRhcmdldD1cIicrZSsnXCJdLCcrdGhpcy5zZWxlY3RvcisnW2hyZWY9XCInK2UrJ1wiXScsbj10KGkpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTtuLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmKG49bi5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikpLG4udHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiKX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0KHRoaXMuc2VsZWN0b3IpLnBhcmVudHNVbnRpbCh0aGlzLm9wdGlvbnMudGFyZ2V0LFwiLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX07dmFyIG49dC5mbi5zY3JvbGxzcHk7dC5mbi5zY3JvbGxzcHk9aSx0LmZuLnNjcm9sbHNweS5Db25zdHJ1Y3Rvcj1lLHQuZm4uc2Nyb2xsc3B5Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5zY3JvbGxzcHk9bix0aGlzfSx0KHdpbmRvdykub24oXCJsb2FkLmJzLnNjcm9sbHNweS5kYXRhLWFwaVwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtc3B5PVwic2Nyb2xsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7aS5jYWxsKGUsZS5kYXRhKCkpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj10KHRoaXMpLHM9bi5kYXRhKFwiYnMudGFiXCIpO3N8fG4uZGF0YShcImJzLnRhYlwiLHM9bmV3IGkodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZzW2VdKCl9KX12YXIgaT1mdW5jdGlvbihlKXt0aGlzLmVsZW1lbnQ9dChlKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MTUwLGkucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQsaT1lLmNsb3Nlc3QoXCJ1bDpub3QoLmRyb3Bkb3duLW1lbnUpXCIpLG49ZS5kYXRhKFwidGFyZ2V0XCIpO2lmKG58fChuPShuPWUuYXR0cihcImhyZWZcIikpJiZuLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sXCJcIikpLCFlLnBhcmVudChcImxpXCIpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXt2YXIgcz1pLmZpbmQoXCIuYWN0aXZlOmxhc3QgYVwiKSxvPXQuRXZlbnQoXCJoaWRlLmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OmVbMF19KSxhPXQuRXZlbnQoXCJzaG93LmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OnNbMF19KTtpZihzLnRyaWdnZXIobyksZS50cmlnZ2VyKGEpLCFhLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYhby5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIHI9dChuKTt0aGlzLmFjdGl2YXRlKGUuY2xvc2VzdChcImxpXCIpLGkpLHRoaXMuYWN0aXZhdGUocixyLnBhcmVudCgpLGZ1bmN0aW9uKCl7cy50cmlnZ2VyKHt0eXBlOlwiaGlkZGVuLmJzLnRhYlwiLHJlbGF0ZWRUYXJnZXQ6ZVswXX0pLGUudHJpZ2dlcih7dHlwZTpcInNob3duLmJzLnRhYlwiLHJlbGF0ZWRUYXJnZXQ6c1swXX0pfSl9fX0saS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZSxuLHMpe2Z1bmN0aW9uIG8oKXthLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLmZpbmQoXCI+IC5kcm9wZG93bi1tZW51ID4gLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5lbmQoKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSxlLmFkZENsYXNzKFwiYWN0aXZlXCIpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLHI/KGVbMF0ub2Zmc2V0V2lkdGgsZS5hZGRDbGFzcyhcImluXCIpKTplLnJlbW92ZUNsYXNzKFwiZmFkZVwiKSxlLnBhcmVudChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCYmZS5jbG9zZXN0KFwibGkuZHJvcGRvd25cIikuYWRkQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCkscyYmcygpfXZhciBhPW4uZmluZChcIj4gLmFjdGl2ZVwiKSxyPXMmJnQuc3VwcG9ydC50cmFuc2l0aW9uJiYoYS5sZW5ndGgmJmEuaGFzQ2xhc3MoXCJmYWRlXCIpfHwhIW4uZmluZChcIj4gLmZhZGVcIikubGVuZ3RoKTthLmxlbmd0aCYmcj9hLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLG8pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6bygpLGEucmVtb3ZlQ2xhc3MoXCJpblwiKX07dmFyIG49dC5mbi50YWI7dC5mbi50YWI9ZSx0LmZuLnRhYi5Db25zdHJ1Y3Rvcj1pLHQuZm4udGFiLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi50YWI9bix0aGlzfTt2YXIgcz1mdW5jdGlvbihpKXtpLnByZXZlbnREZWZhdWx0KCksZS5jYWxsKHQodGhpcyksXCJzaG93XCIpfTt0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nLHMpLm9uKFwiY2xpY2suYnMudGFiLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZT1cInBpbGxcIl0nLHMpfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcykscz1uLmRhdGEoXCJicy5hZmZpeFwiKSxvPVwib2JqZWN0XCI9PXR5cGVvZiBlJiZlO3N8fG4uZGF0YShcImJzLmFmZml4XCIscz1uZXcgaSh0aGlzLG8pKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmc1tlXSgpfSl9dmFyIGk9ZnVuY3Rpb24oZSxuKXt0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30saS5ERUZBVUxUUyxuKSx0aGlzLiR0YXJnZXQ9dCh0aGlzLm9wdGlvbnMudGFyZ2V0KS5vbihcInNjcm9sbC5icy5hZmZpeC5kYXRhLWFwaVwiLHQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uLHRoaXMpKS5vbihcImNsaWNrLmJzLmFmZml4LmRhdGEtYXBpXCIsdC5wcm94eSh0aGlzLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wLHRoaXMpKSx0aGlzLiRlbGVtZW50PXQoZSksdGhpcy5hZmZpeGVkPW51bGwsdGhpcy51bnBpbj1udWxsLHRoaXMucGlubmVkT2Zmc2V0PW51bGwsdGhpcy5jaGVja1Bvc2l0aW9uKCl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5SRVNFVD1cImFmZml4IGFmZml4LXRvcCBhZmZpeC1ib3R0b21cIixpLkRFRkFVTFRTPXtvZmZzZXQ6MCx0YXJnZXQ6d2luZG93fSxpLnByb3RvdHlwZS5nZXRTdGF0ZT1mdW5jdGlvbih0LGUsaSxuKXt2YXIgcz10aGlzLiR0YXJnZXQuc2Nyb2xsVG9wKCksbz10aGlzLiRlbGVtZW50Lm9mZnNldCgpLGE9dGhpcy4kdGFyZ2V0LmhlaWdodCgpO2lmKG51bGwhPWkmJlwidG9wXCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gczxpJiZcInRvcFwiO2lmKFwiYm90dG9tXCI9PXRoaXMuYWZmaXhlZClyZXR1cm4gbnVsbCE9aT8hKHMrdGhpcy51bnBpbjw9by50b3ApJiZcImJvdHRvbVwiOiEocythPD10LW4pJiZcImJvdHRvbVwiO3ZhciByPW51bGw9PXRoaXMuYWZmaXhlZCxsPXI/czpvLnRvcDtyZXR1cm4gbnVsbCE9aSYmczw9aT9cInRvcFwiOm51bGwhPW4mJmwrKHI/YTplKT49dC1uJiZcImJvdHRvbVwifSxpLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhpLlJFU0VUKS5hZGRDbGFzcyhcImFmZml4XCIpO3ZhciB0PXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxlPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCk7cmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0PWUudG9wLXR9LGkucHJvdG90eXBlLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wPWZ1bmN0aW9uKCl7c2V0VGltZW91dCh0LnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0saS5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSl7dmFyIGU9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxuPXRoaXMub3B0aW9ucy5vZmZzZXQscz1uLnRvcCxvPW4uYm90dG9tLGE9TWF0aC5tYXgodChkb2N1bWVudCkuaGVpZ2h0KCksdChkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7XCJvYmplY3RcIiE9dHlwZW9mIG4mJihvPXM9biksXCJmdW5jdGlvblwiPT10eXBlb2YgcyYmKHM9bi50b3AodGhpcy4kZWxlbWVudCkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIG8mJihvPW4uYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgcj10aGlzLmdldFN0YXRlKGEsZSxzLG8pO2lmKHRoaXMuYWZmaXhlZCE9cil7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoXCJ0b3BcIixcIlwiKTt2YXIgbD1cImFmZml4XCIrKHI/XCItXCIrcjpcIlwiKSxoPXQuRXZlbnQobCtcIi5icy5hZmZpeFwiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaCksaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPXIsdGhpcy51bnBpbj1cImJvdHRvbVwiPT1yP3RoaXMuZ2V0UGlubmVkT2Zmc2V0KCk6bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGkuUkVTRVQpLmFkZENsYXNzKGwpLnRyaWdnZXIobC5yZXBsYWNlKFwiYWZmaXhcIixcImFmZml4ZWRcIikrXCIuYnMuYWZmaXhcIil9XCJib3R0b21cIj09ciYmdGhpcy4kZWxlbWVudC5vZmZzZXQoe3RvcDphLWUtb30pfX07dmFyIG49dC5mbi5hZmZpeDt0LmZuLmFmZml4PWUsdC5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1pLHQuZm4uYWZmaXgubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmFmZml4PW4sdGhpc30sdCh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtc3B5PVwiYWZmaXhcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkuZGF0YSgpO24ub2Zmc2V0PW4ub2Zmc2V0fHx7fSxudWxsIT1uLm9mZnNldEJvdHRvbSYmKG4ub2Zmc2V0LmJvdHRvbT1uLm9mZnNldEJvdHRvbSksbnVsbCE9bi5vZmZzZXRUb3AmJihuLm9mZnNldC50b3A9bi5vZmZzZXRUb3ApLGUuY2FsbChpLG4pfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQpe2lmKCF0KXJldHVyblwiXCI7dmFyIGUsaT1cIlwiO2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKz0xKWkrPU1bdC5jaGFyQXQoZSldfHx0LmNoYXJBdChlKTtyZXR1cm4gaX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnJlcGxhY2UoL1tcXC1cXFtcXF1cXC9cXHtcXH1cXChcXClcXCpcXCtcXD9cXC5cXFxcXFxeXFwkXFx8XS9nLFwiXFxcXCQmXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIHZvaWQgMCE9PXR9ZnVuY3Rpb24gcyhlLGksbyxhKXtyZXR1cm4gbihlKSYmIXQuaXNBcnJheShlKT90LmlzRnVuY3Rpb24oZSk/ZS5hcHBseSh0aGlzLGkpOmE6bihvKT9zLmNhbGwodGhpcyxvLGkpOmF9ZnVuY3Rpb24gbyh0LGUsaSxvKXtyZXR1cm4gcy5jYWxsKHRoaXMsbih0aGlzLnNvdXJjZVtlXSkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnNvdXJjZVtlXSx0KT90aGlzLnNvdXJjZVtlXVt0XTp2b2lkIDAsaSxmdW5jdGlvbigpe3JldHVybiBzLmNhbGwodGhpcyxuKHRoaXNbdF1bZV0pP3RoaXNbdF1bZV06bih0aGlzW3RdWzBdKT90aGlzW3RdWzBdOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLHQpP3RoaXNbdF06dm9pZCAwLGksU1t0XVtlXXx8U1t0XVswXXx8U1t0XSxvKX0sbyl9ZnVuY3Rpb24gYShlLGkpe3JldHVybiBuKGkpfHwoaT0wKSx0LmlzQXJyYXkodGhpcy5zb3VyY2UpJiZuKHRoaXMuc291cmNlW2ldKSYmbih0aGlzLnNvdXJjZVtpXVtlXSk/dGhpcy5zb3VyY2VbaV1bZV06bih0aGlzW2VdKT90LmlzQXJyYXkodGhpc1tlXSk/bih0aGlzW2VdW2ldKT90aGlzW2VdW2ldOm4odGhpc1tlXVswXSk/dGhpc1tlXVswXTpudWxsOnRoaXNbZV06bnVsbH1mdW5jdGlvbiByKGUsaSxuLHMpe2kueGhyJiZpLnhoci5hYm9ydCgpLGkueGhyPXQuYWpheCh0LmV4dGVuZCghMCx7dXJsOmUsdHlwZTpcIkdFVFwiLGFzeW5jOiEwLGNhY2hlOiExLGRhdGFUeXBlOlwianNvblwifSxpLmFqYXgpKS5kb25lKGZ1bmN0aW9uKGUpe24mJm4uYXBwbHkodGhpcyx0Lm1ha2VBcnJheShhcmd1bWVudHMpKX0pLmZhaWwoZnVuY3Rpb24odCxlKXtzJiZjb25zb2xlLmxvZyhcIlJlcXVlc3QgZmFpbGVkOiBcIitlKX0pfWZ1bmN0aW9uIGwodCxlKXt2YXIgaSxuPSExO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKz0xKWlmKG49by5jYWxsKHRoaXMsXCJmaW5kUmlnaHRcIixpLFt0W2ldLGUsaV0pKXJldHVybntyaWdodDpuLHNvdXJjZTppfTtyZXR1cm4hMX1mdW5jdGlvbiBoKHQsZSl7dmFyIGk7Zm9yKGZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpPTA7aTx0Lmxlbmd0aDtpKyspdFtpXT1vLmNhbGwodGhpcyxcInByZXBhcnNlXCIsaSxbdFtpXSxlXSx0W2ldKX0uY2FsbCh0aGlzLHQsZSksaT0wO2k8dC5sZW5ndGg7aSs9MSl0W2ldPW8uY2FsbCh0aGlzLFwiZmlsdGVyXCIsaSxbdFtpXSxlLGldLHRbaV0pfWZ1bmN0aW9uIGMoZSxpLGEpe3ZhciBsLGg9dGhpcztpZih0LmlzRnVuY3Rpb24oaC5zb3VyY2UpKWguc291cmNlLmFwcGx5KGgsW2UsZnVuY3Rpb24odCl7aT1bdF0scy5jYWxsKGgsYSxbZV0pfSxpLDBdKTtlbHNlIGZvcihsPTA7bDxoLnNvdXJjZS5sZW5ndGg7bCs9MSlpZih0LmlzQXJyYXkoaC5zb3VyY2VbbF0pKWlbbF09aC5zb3VyY2VbbF07ZWxzZSBpZih0LmlzRnVuY3Rpb24oaC5zb3VyY2VbbF0pKSFmdW5jdGlvbihuKXtoLnNvdXJjZVtuXS5hcHBseShoLFtlLGZ1bmN0aW9uKG8pe2lmKGlbbl18fChpW25dPVtdKSxvJiZ0LmlzQXJyYXkobykpc3dpdGNoKGguYXBwZW5kTWV0aG9kKXtjYXNlXCJyZXBsYWNlXCI6aVtuXT1vO2JyZWFrO2RlZmF1bHQ6aVtuXT1pW25dLmNvbmNhdChvKX1zLmNhbGwoaCxhLFtlXSl9LGksbl0pfShsKTtlbHNlIHN3aXRjaChoLnNvdXJjZVtsXS50eXBlKXtjYXNlXCJyZW1vdGVcIjppZihuKGguc291cmNlW2xdLnVybCkmJighbihoLnNvdXJjZVtsXS5taW5MZW5ndGgpfHxlLmxlbmd0aD49aC5zb3VyY2VbbF0ubWluTGVuZ3RoKSl7dmFyIGM9by5jYWxsKGgsXCJyZXBsYWNlXCIsbCxbaC5zb3VyY2VbbF0udXJsLGVdLFwiXCIpO2lbbF18fChpW2xdPVtdKSxmdW5jdGlvbih0KXtyKGMsaC5zb3VyY2VbdF0sZnVuY3Rpb24obil7aVt0XT1uLHMuY2FsbChoLGEsW2VdKX0saC5kZWJ1Zyl9KGwpfWJyZWFrO2RlZmF1bHQ6bihoLnNvdXJjZVtsXS5kYXRhKT9pW2xdPWguc291cmNlW2xdLmRhdGE6aVtsXT1oLnNvdXJjZVtsXX1zLmNhbGwoaCxhLFtlXSl9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiEhKG4odC5kYXRhKFwic291cmNlXCIpKSYmbih0LmRhdGEoXCJwaWRcIikpJiZuKGVbdC5kYXRhKFwic291cmNlXCIpXSkmJm4oZVt0LmRhdGEoXCJzb3VyY2VcIildW3QuZGF0YShcInBpZFwiKV0pKSYmZVt0LmRhdGEoXCJzb3VyY2VcIildW3QuZGF0YShcInBpZFwiKV19ZnVuY3Rpb24gZChlLGkpe2Z1bmN0aW9uIHMoKXtpZihFLnZhbCgpIT1OKXtpZigoTj1FLnZhbCgpKS5sZW5ndGg8aS5taW5MZW5ndGgpcmV0dXJuIHZvaWQgRS50cmlnZ2VyKFwiY2xvc2UueGRzb2Z0XCIpO2MuY2FsbChpLE4sTSxmdW5jdGlvbih0KXt2YXIgZTtpZih0PT1OKWlmKGguY2FsbChpLE0sdCksRS50cmlnZ2VyKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIiksaS5zaG93SGludCYmTi5sZW5ndGgmJk4ubGVuZ3RoPD1FLnByb3AoXCJzaXplXCIpJiYoZT1sLmNhbGwoaSxNLE4pKSl7XG52YXIgbj1vLmNhbGwoaSxcImdldFRpdGxlXCIsZS5zb3VyY2UsW2UucmlnaHQsZS5zb3VyY2VdKTtuPXQrbi5zdWJzdHIodC5sZW5ndGgpLFMudmFsKG4pfWVsc2UgUy52YWwoXCJcIil9KX19aWYoIXQoZSkuaGFzQ2xhc3MoXCJ4ZHNvZnRfaW5wdXRcIikpe3ZhciBhLHI9dCgnPGRpdiBjbGFzcz1cInhkc29mdF9hdXRvY29tcGxldGVcIj48L2Rpdj4nKSxkPXQoJzxkaXYgY2xhc3M9XCJ4ZHNvZnRfYXV0b2NvbXBsZXRlX2Ryb3Bkb3duXCI+PC9kaXY+JyksUz10KCc8aW5wdXQgcmVhZG9ubHkgY2xhc3M9XCJ4ZHNvZnRfYXV0b2NvbXBsZXRlX2hpbnRcIi8+JyksRT10KGUpLE09W10sQT0hMSxPPVwiXCIsTj1cIlwiLEg9bnVsbCx6PTA7RS5kYXRhKFwiYXV0b2NvbXBsZXRlX29wdGlvbnNcIixpKSxkLm9uKFwibW91c2Vkb3duXCIsZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCl9KS5vbihcInVwZGF0ZXNjcm9sbC54ZHNvZnRcIixmdW5jdGlvbigpe3ZhciB0PWQuZmluZChcIi5hY3RpdmVcIik7aWYodC5sZW5ndGgpe3ZhciBlPXQucG9zaXRpb24oKS50b3AsaT10Lm91dGVySGVpZ2h0KCEwKSxuPWQuc2Nyb2xsVG9wKCkscz1kLmhlaWdodCgpO2U8MD9kLnNjcm9sbFRvcChuLU1hdGguYWJzKGUpKTplK2k+cyYmZC5zY3JvbGxUb3AobitlK2ktcyl9fSksci5jc3Moe2Rpc3BsYXk6RS5jc3MoXCJkaXNwbGF5XCIpLHdpZHRoOkUuY3NzKFwid2lkdGhcIil9KSxpLnN0eWxlJiZyLmNzcyhpLnN0eWxlKSxFLmFkZENsYXNzKFwieGRzb2Z0X2lucHV0XCIpLmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKTt2YXIgTD1udWxsLFc9bnVsbCxSPSExO2Qub24oXCJtb3VzZW1vdmVcIixcImRpdlwiLGZ1bmN0aW9uKCl7aWYodCh0aGlzKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4hMDtkLmZpbmQoXCJkaXZcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdCh0aGlzKS5hZGRDbGFzcyhcImFjdGl2ZVwiKX0pLm9uKFwibW91c2Vkb3duXCIsXCJkaXZcIixmdW5jdGlvbihlKXtkLmZpbmQoXCJkaXZcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksdCh0aGlzKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxFLnRyaWdnZXIoXCJwaWNrLnhkc29mdFwiKX0pLm9uKFwidG91Y2hzdGFydFwiLFwiZGl2XCIsZnVuY3Rpb24odCl7TD10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRYLFc9dC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WX0pLm9uKFwidG91Y2hlbmRcIixcImRpdlwiLGZ1bmN0aW9uKGUpeyExPT09UiYmKGQuZmluZChcImRpdlwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSx0KHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlXCIpLEUudHJpZ2dlcihcInBpY2sueGRzb2Z0XCIpKSxSPSExfSkub24oXCJ0b3VjaG1vdmVcIixcImRpdlwiLGZ1bmN0aW9uKHQpe2lmKEwmJlcpe3ZhciBlPXQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgsaT10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRZLG49TC1lLHM9Vy1pO1I9TWF0aC5hYnMobik+TWF0aC5hYnMocyk/bj4wP1wibGVmdFwiOlwicmlnaHRcIjpzPjA/XCJ0b3BcIjpcImJvdHRtXCIsTD1udWxsLFc9bnVsbH19KSxFLmRhdGEoXCJ4ZHNvZnRfYXV0b2NvbXBsZXRlXCIsTSkuYWZ0ZXIocikub24oXCJwaWNrLnhkc29mdFwiLGZ1bmN0aW9uKHQsZSl7RS50cmlnZ2VyKFwidGltZXBpY2sueGRzb2Z0XCIsZSksTj1FLnZhbCgpLEUudHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKSwoSD1kLmZpbmQoXCJkaXYuYWN0aXZlXCIpLmVxKDApKS5sZW5ndGh8fChIPWQuY2hpbGRyZW4oKS5maXJzdCgpKSxFLnRyaWdnZXIoXCJzZWxlY3RlZC54ZHNvZnRcIixbdShILE0pXSksaS5hZnRlclNlbGVjdGVkJiZpLmFmdGVyU2VsZWN0ZWQoKX0pLm9uKFwidGltZXBpY2sueGRzb2Z0XCIsZnVuY3Rpb24odCxlKXsoSD1kLmZpbmQoXCJkaXYuYWN0aXZlXCIpKS5sZW5ndGh8fChIPWQuY2hpbGRyZW4oKS5maXJzdCgpKSxILmxlbmd0aCYmKG4oZSk/RS52YWwoZSk6RS52YWwoZnVuY3Rpb24odCxlKXt2YXIgaT11KHQsZSk7cmV0dXJuIGk/by5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLHQuZGF0YShcInNvdXJjZVwiKSxbaSx0LmRhdGEoXCJzb3VyY2VcIildKTpuKHQuZGF0YShcInZhbHVlXCIpKT9kZWNvZGVVUklDb21wb25lbnQodC5kYXRhKFwidmFsdWVcIikpOnQuaHRtbCgpfS5jYWxsKGksSCxNKSksRS50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlZC54ZHNvZnRcIixbdShILE0pXSksUy52YWwoXCJcIiksZnVuY3Rpb24odCxlKXtpZih0LnNldFNlbGVjdGlvblJhbmdlKXQuZm9jdXMoKSx0LnNldFNlbGVjdGlvblJhbmdlKGUsZSk7ZWxzZSBpZih0LmNyZWF0ZVRleHRSYW5nZSl7dmFyIGk9dC5jcmVhdGVUZXh0UmFuZ2UoKTtpLmNvbGxhcHNlKCEwKSxpLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIixlKSxpLm1vdmVTdGFydChcImNoYXJhY3RlclwiLGUpLGkuc2VsZWN0KCl9fShFWzBdLEUudmFsKCkubGVuZ3RoKSl9KS5vbihcImtleWRvd24ueGRzb2Z0IGlucHV0Lnhkc29mdCBjdXQueGRzb2Z0IHBhc3RlLnhkc29mdFwiLGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKHQpe3ZhciBlLG49dC5rZXlDb2RlO3N3aXRjaChuKXtjYXNlIHg6Y2FzZSBDOmNhc2UgazpjYXNlIFQ6Y2FzZSBEOmlmKHQuc2hpZnRLZXl8fHQuY3RybEtleSlyZXR1cm4hMDticmVhaztjYXNlIF86Y2FzZSBiOnJldHVybiEwO2Nhc2UgZjpjYXNlIHA6cmV0dXJuISEoSXx8UHx8dC5zaGlmdEtleXx8dC5jdHJsS2V5KXx8KE89RS52YWwoKSx6PWZ1bmN0aW9uKHQpe2lmKHQpe2lmKHQuc2VsZWN0aW9uU3RhcnQpcmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQ7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0LmZvY3VzKCk7dmFyIGU9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksaT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0Lmxlbmd0aDtyZXR1cm4gZS5tb3ZlU3RhcnQoXCJjaGFyYWN0ZXJcIiwtdC52YWx1ZS5sZW5ndGgpLGUudGV4dC5sZW5ndGgtaX19fShFWzBdKSxuIT09Znx8eiE9PU8ubGVuZ3RofHwoKGU9bC5jYWxsKGksTSxPKSk/RS50cmlnZ2VyKFwicGljay54ZHNvZnRcIixbby5jYWxsKGksXCJnZXRWYWx1ZVwiLGUuc291cmNlLFtlLnJpZ2h0LGUuc291cmNlXSldKTpFLnRyaWdnZXIoXCJwaWNrLnhkc29mdFwiKSx0LnByZXZlbnREZWZhdWx0KCksITEpKTtjYXNlIHY6cmV0dXJuITA7Y2FzZSB5OnJldHVybiFBfHwoRS50cmlnZ2VyKFwicGljay54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExKTtjYXNlIHc6cmV0dXJuIEUudmFsKE4pLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExO2Nhc2UgbTpjYXNlIGc6aWYoIUEpcmV0dXJuIEUudHJpZ2dlcihcIm9wZW4ueGRzb2Z0XCIpLEUudHJpZ2dlcihcInVwZGF0ZUNvbnRlbnQueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMTtIPWQuZmluZChcImRpdi5hY3RpdmVcIik7dmFyIHM9bj09bT9cIm5leHRcIjpcInByZXZcIixhPSEwO3JldHVybiBILmxlbmd0aD8oSC5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSxIW3NdKCkubGVuZ3RoP0hbc10oKS5hZGRDbGFzcyhcImFjdGl2ZVwiKTooRS52YWwoTiksYT0hMSkpOmQuY2hpbGRyZW4oKS5lcShuPT1tPzA6LTEpLmFkZENsYXNzKFwiYWN0aXZlXCIpLGEmJkUudHJpZ2dlcihcInRpbWVwaWNrLnhkc29mdFwiKSxkLnRyaWdnZXIoXCJ1cGRhdGVzY3JvbGwueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMX19KHQpO2lmKCExPT09ZXx8ITA9PT1lKXJldHVybiBlO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtzKCl9LDEpLHMoKX0pLm9uKFwiY2hhbmdlLnhkc29mdFwiLGZ1bmN0aW9uKHQpe049RS52YWwoKX0pLE49RS52YWwoKSxjLmNhbGwoaSxFLnZhbCgpLE0sZnVuY3Rpb24odCl7aC5jYWxsKGksTSx0KX0pLGkub3Blbk9uRm9jdXMmJkUub24oXCJmb2N1c2luLnhkc29mdFwiLGZ1bmN0aW9uKCl7RS50cmlnZ2VyKFwib3Blbi54ZHNvZnRcIiksRS50cmlnZ2VyKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIil9KSxpLmNsb3NlT25CbHVyJiZFLm9uKFwiZm9jdXNvdXQueGRzb2Z0XCIsZnVuY3Rpb24oKXtFLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIil9KSxyLmFwcGVuZChFKS5hcHBlbmQoZCk7dmFyICQ9ITEsaj0wO0Uub24oXCJ1cGRhdGVIZWxwZXJQb3NpdGlvbi54ZHNvZnRcIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChqKSxqPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihyLmNzcyh7ZGlzcGxheTpFLmNzcyhcImRpc3BsYXlcIiksd2lkdGg6RS5jc3MoXCJ3aWR0aFwiKX0pLGQuY3NzKHQuZXh0ZW5kKCEwLHtsZWZ0OkUucG9zaXRpb24oKS5sZWZ0LHRvcDpFLnBvc2l0aW9uKCkudG9wK3BhcnNlSW50KEUuY3NzKFwibWFyZ2luVG9wXCIpKStwYXJzZUludChFWzBdLm9mZnNldEhlaWdodCksbWFyZ2luTGVmdDpFLmNzcyhcIm1hcmdpbkxlZnRcIiksbWFyZ2luUmlnaHQ6RS5jc3MoXCJtYXJnaW5SaWdodFwiKSx3aWR0aDpcIjEwMCVcIj09aS5kcm9wZG93bldpZHRoP0VbMF0ub2Zmc2V0V2lkdGg6aS5kcm9wZG93bldpZHRofSxpLmRyb3Bkb3duU3R5bGUpKSxpLnNob3dIaW50KXt2YXIgZT1nZXRDb21wdXRlZFN0eWxlKEVbMF0sXCJcIik7U1swXS5zdHlsZS5jc3NUZXh0PWUuY3NzVGV4dCxTLmNzcyh7XCJib3gtc2l6aW5nXCI6ZS5ib3hTaXppbmcsYm9yZGVyU3R5bGU6XCJzb2xpZFwiLGJvcmRlckNvbGxhcHNlOmUuYm9yZGVyQ29sbGFwc2UsYm9yZGVyTGVmdFdpZHRoOmUuYm9yZGVyTGVmdFdpZHRoLGJvcmRlclJpZ2h0V2lkdGg6ZS5ib3JkZXJSaWdodFdpZHRoLGJvcmRlclRvcFdpZHRoOmUuYm9yZGVyVG9wV2lkdGgsYm9yZGVyQm90dG9tV2lkdGg6ZS5ib3JkZXJCb3R0b21XaWR0aCxwYWRkaW5nQm90dG9tOmUucGFkZGluZ0JvdHRvbSxtYXJnaW5Cb3R0b206ZS5tYXJnaW5Cb3R0b20scGFkZGluZ1RvcDplLnBhZGRpbmdUb3AsbWFyZ2luVG9wOmUubWFyZ2luVG9wLHBhZGRpbmdMZWZ0OmUucGFkZGluZ0xlZnQsbWFyZ2luTGVmdDplLm1hcmdpbkxlZnQscGFkZGluZ1JpZ2h0OmUucGFkZGluZ1JpZ2h0LG1hcmdpblJpZ2h0OmUubWFyZ2luUmlnaHQsbWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG1pbkhlaWdodDplLm1pbkhlaWdodCxtYXhXaWR0aDplLm1heFdpZHRoLG1pbldpZHRoOmUubWluV2lkdGgsd2lkdGg6ZS53aWR0aCxsZXR0ZXJTcGFjaW5nOmUubGV0dGVyU3BhY2luZyxsaW5lSGVpZ2h0OmUubGluZUhlaWdodCxvdXRsaW5lV2lkdGg6ZS5vdXRsaW5lV2lkdGgsZm9udEZhbWlseTplLmZvbnRGYW1pbHksZm9udFZhcmlhbnQ6ZS5mb250VmFyaWFudCxmb250U3R5bGU6RS5jc3MoXCJmb250U3R5bGVcIiksZm9udFNpemU6RS5jc3MoXCJmb250U2l6ZVwiKSxmb250V2VpZ2h0OkUuY3NzKFwiZm9udFdlaWdodFwiKSxmbGV4OmUuZmxleCxqdXN0aWZ5Q29udGVudDplLmp1c3RpZnlDb250ZW50LGJvcmRlclJhZGl1czplLmJvcmRlclJhZGl1cyxcIi13ZWJraXQtYm94LXNoYWRvd1wiOlwibm9uZVwiLFwiYm94LXNoYWRvd1wiOlwibm9uZVwifSksRS5jc3MoXCJmb250LXNpemVcIixFLmNzcyhcImZvbnRTaXplXCIpKSxTLmlubmVySGVpZ2h0KEUuaW5uZXJIZWlnaHQoKSksUy5jc3ModC5leHRlbmQoITAse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix6SW5kZXg6XCIxXCIsYm9yZGVyQ29sb3I6XCJ0cmFuc3BhcmVudFwiLG91dGxpbmVDb2xvcjpcInRyYW5zcGFyZW50XCIsbGVmdDpFLnBvc2l0aW9uKCkubGVmdCx0b3A6RS5wb3NpdGlvbigpLnRvcCxiYWNrZ3JvdW5kOkUuY3NzKFwiYmFja2dyb3VuZFwiKX0saS5oaW50U3R5bGUpKSwhMSE9PSQ/Uy5jc3MoXCJiYWNrZ3JvdW5kXCIsJCk6JD1FLmNzcyhcImJhY2tncm91bmRcIik7dHJ5e0VbMF0uc3R5bGUuc2V0UHJvcGVydHkoXCJiYWNrZ3JvdW5kXCIsXCJ0cmFuc3BhcmVudFwiLFwiaW1wb3J0YW50XCIpfWNhdGNoKHQpe0UuY3NzKFwiYmFja2dyb3VuZFwiLFwidHJhbnNwYXJlbnRcIil9ci5hcHBlbmQoUyl9fSxpLnRpbWVvdXRVcGRhdGV8fDEpfSksRS5pcyhcIjp2aXNpYmxlXCIpP0UudHJpZ2dlcihcInVwZGF0ZUhlbHBlclBvc2l0aW9uLnhkc29mdFwiKTphPXNldEludGVydmFsKGZ1bmN0aW9uKCl7RS5pcyhcIjp2aXNpYmxlXCIpJiYoRS50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpLGNsZWFySW50ZXJ2YWwoYSkpfSwxMDApLHQod2luZG93KS5vbihcInJlc2l6ZVwiLGZ1bmN0aW9uKCl7ci5jc3Moe3dpZHRoOlwiYXV0b1wifSksRS50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpfSksRS5vbihcImNsb3NlLnhkc29mdFwiLGZ1bmN0aW9uKCl7QSYmKGQuaGlkZSgpLFMudmFsKFwiXCIpLGkuYXV0b3NlbGVjdHx8RS52YWwoTiksQT0hMSl9KS5vbihcInVwZGF0ZUNvbnRlbnQueGRzb2Z0XCIsZnVuY3Rpb24oKXt2YXIgZSxuPWZ1bmN0aW9uKGUsaSl7dmFyIG4scyxhLHI9W107Zm9yKG49MDtuPGUubGVuZ3RoO24rPTEpZm9yKHM9MDtzPGVbbl0ubGVuZ3RoJiYhKHIubGVuZ3RoPj10aGlzLmxpbWl0KTtzKz0xKShhPXQoby5jYWxsKHRoaXMsXCJyZW5kZXJcIixuLFtlW25dW3NdLG4scyxpXSxcIlwiKSkpLmRhdGEoXCJzb3VyY2VcIixuKSxhLmRhdGEoXCJwaWRcIixzKSxhLmRhdGEoXCJpdGVtXCIsZVtuXVtzXSksci5wdXNoKGEpO3JldHVybiByfS5jYWxsKGksTSxFLnZhbCgpKTtuLmxlbmd0aD8oRS50cmlnZ2VyKFwib3Blbi54ZHNvZnRcIiksdChuKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5jc3ModC5leHRlbmQoITAse3BhZGRpbmdMZWZ0OkUuY3NzKFwicGFkZGluZ0xlZnRcIikscGFkZGluZ1JpZ2h0OkUuY3NzKFwicGFkZGluZ1JpZ2h0XCIpfSxpLml0ZW1TdHlsZSkpfSksZC5odG1sKG4pLGU9aS52aXNpYmxlSGVpZ2h0P2kudmlzaWJsZUhlaWdodDppLnZpc2libGVMaW1pdCooKG5bMF0/blswXS5vdXRlckhlaWdodCghMCk6MCl8fGkuZGVmYXVsdEhlaWdodEl0ZW0pKzUsZC5jc3MoXCJtYXhIZWlnaHRcIixlK1wicHhcIikpOkUudHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKX0pLm9uKFwib3Blbi54ZHNvZnRcIixmdW5jdGlvbigpe0F8fChkLnNob3coKSxBPSEwKX0pLm9uKFwiZGVzdHJveS54ZHNvZnRcIixmdW5jdGlvbigpe0UucmVtb3ZlQ2xhc3MoXCJ4ZHNvZnRcIiksci5hZnRlcihFKSxyLnJlbW92ZSgpLGNsZWFyVGltZW91dCgwKSxjbGVhclRpbWVvdXQoYSksRS5kYXRhKFwieGRzb2Z0X2F1dG9jb21wbGV0ZVwiLG51bGwpLEUub2ZmKFwiLnhkc29mdFwiKX0pfX12YXIgcD0zNyxmPTM5LGc9MzgsbT00MCx2PTksYj0xNyxfPTE2LHk9MTMsdz0yNyx4PTY1LEM9Njcsaz04NixUPTkwLEQ9ODksUz17fSxJPSExLFA9ITEsRT17fSxNPXtcIuG6mlwiOlwiYVwiLFwiw4FcIjpcImFcIixcIsOhXCI6XCJhXCIsXCLDgFwiOlwiYVwiLFwiw6BcIjpcImFcIixcIsSCXCI6XCJhXCIsXCLEg1wiOlwiYVwiLFwi4bquXCI6XCJhXCIsXCLhuq9cIjpcImFcIixcIuG6sFwiOlwiYVwiLFwi4bqxXCI6XCJhXCIsXCLhurRcIjpcImFcIixcIuG6tVwiOlwiYVwiLFwi4bqyXCI6XCJhXCIsXCLhuqpcIjpcImFcIixcIuG6q1wiOlwiYVwiLFwi4bqoXCI6XCJhXCIsXCLhuqlcIjpcImFcIixcIseNXCI6XCJhXCIsXCLHjlwiOlwiYVwiLFwiw4VcIjpcImFcIixcIsOlXCI6XCJhXCIsXCLHulwiOlwiYVwiLFwix7tcIjpcImFcIixcIsOEXCI6XCJhXCIsXCLDpFwiOlwiYVwiLFwix55cIjpcImFcIixcIsefXCI6XCJhXCIsXCLDg1wiOlwiYVwiLFwiw6NcIjpcImFcIixcIsimXCI6XCJhXCIsXCLIp1wiOlwiYVwiLFwix6BcIjpcImFcIixcIsehXCI6XCJhXCIsXCLEhFwiOlwiYVwiLFwixIVcIjpcImFcIixcIsSAXCI6XCJhXCIsXCLEgVwiOlwiYVwiLFwi4bqiXCI6XCJhXCIsXCLhuqNcIjpcImFcIixcIsiAXCI6XCJhXCIsXCLIgVwiOlwiYVwiLFwiyIJcIjpcImFcIixcIsiDXCI6XCJhXCIsXCLhuqBcIjpcImFcIixcIuG6oVwiOlwiYVwiLFwi4bq2XCI6XCJhXCIsXCLhurdcIjpcImFcIixcIuG6rFwiOlwiYVwiLFwi4bqtXCI6XCJhXCIsXCLhuIBcIjpcImFcIixcIuG4gVwiOlwiYVwiLFwiyLpcIjpcImFcIixcIuKxpVwiOlwiYVwiLFwix7xcIjpcImFcIixcIse9XCI6XCJhXCIsXCLHolwiOlwiYVwiLFwix6NcIjpcImFcIixcIuG4glwiOlwiYlwiLFwi4biDXCI6XCJiXCIsXCLhuIRcIjpcImJcIixcIuG4hVwiOlwiYlwiLFwi4biGXCI6XCJiXCIsXCLhuIdcIjpcImJcIixcIsmDXCI6XCJiXCIsXCLGgFwiOlwiYlwiLFwi4bWsXCI6XCJiXCIsXCLGgVwiOlwiYlwiLFwiyZNcIjpcImJcIixcIsaCXCI6XCJiXCIsXCLGg1wiOlwiYlwiLFwixIZcIjpcImNcIixcIsSHXCI6XCJjXCIsXCLEiFwiOlwiY1wiLFwixIlcIjpcImNcIixcIsSMXCI6XCJjXCIsXCLEjVwiOlwiY1wiLFwixIpcIjpcImNcIixcIsSLXCI6XCJjXCIsXCLDh1wiOlwiY1wiLFwiw6dcIjpcImNcIixcIuG4iFwiOlwiY1wiLFwi4biJXCI6XCJjXCIsXCLIu1wiOlwiY1wiLFwiyLxcIjpcImNcIixcIsaHXCI6XCJjXCIsXCLGiFwiOlwiY1wiLFwiyZVcIjpcImNcIixcIsSOXCI6XCJkXCIsXCLEj1wiOlwiZFwiLFwi4biKXCI6XCJkXCIsXCLhuItcIjpcImRcIixcIuG4kFwiOlwiZFwiLFwi4biRXCI6XCJkXCIsXCLhuIxcIjpcImRcIixcIuG4jVwiOlwiZFwiLFwi4biSXCI6XCJkXCIsXCLhuJNcIjpcImRcIixcIuG4jlwiOlwiZFwiLFwi4biPXCI6XCJkXCIsXCLEkFwiOlwiZFwiLFwixJFcIjpcImRcIixcIuG1rVwiOlwiZFwiLFwixolcIjpcImRcIixcIsmWXCI6XCJkXCIsXCLGilwiOlwiZFwiLFwiyZdcIjpcImRcIixcIsaLXCI6XCJkXCIsXCLGjFwiOlwiZFwiLFwiyKFcIjpcImRcIixcIsOwXCI6XCJkXCIsXCLDiVwiOlwiZVwiLFwixo9cIjpcImVcIixcIsaOXCI6XCJlXCIsXCLHnVwiOlwiZVwiLFwiw6lcIjpcImVcIixcIsOIXCI6XCJlXCIsXCLDqFwiOlwiZVwiLFwixJRcIjpcImVcIixcIsSVXCI6XCJlXCIsXCLDilwiOlwiZVwiLFwiw6pcIjpcImVcIixcIuG6vlwiOlwiZVwiLFwi4bq/XCI6XCJlXCIsXCLhu4BcIjpcImVcIixcIuG7gVwiOlwiZVwiLFwi4buEXCI6XCJlXCIsXCLhu4VcIjpcImVcIixcIuG7glwiOlwiZVwiLFwi4buDXCI6XCJlXCIsXCLEmlwiOlwiZVwiLFwixJtcIjpcImVcIixcIsOLXCI6XCJlXCIsXCLDq1wiOlwiZVwiLFwi4bq8XCI6XCJlXCIsXCLhur1cIjpcImVcIixcIsSWXCI6XCJlXCIsXCLEl1wiOlwiZVwiLFwiyKhcIjpcImVcIixcIsipXCI6XCJlXCIsXCLhuJxcIjpcImVcIixcIuG4nVwiOlwiZVwiLFwixJhcIjpcImVcIixcIsSZXCI6XCJlXCIsXCLEklwiOlwiZVwiLFwixJNcIjpcImVcIixcIuG4llwiOlwiZVwiLFwi4biXXCI6XCJlXCIsXCLhuJRcIjpcImVcIixcIuG4lVwiOlwiZVwiLFwi4bq6XCI6XCJlXCIsXCLhurtcIjpcImVcIixcIsiEXCI6XCJlXCIsXCLIhVwiOlwiZVwiLFwiyIZcIjpcImVcIixcIsiHXCI6XCJlXCIsXCLhurhcIjpcImVcIixcIuG6uVwiOlwiZVwiLFwi4buGXCI6XCJlXCIsXCLhu4dcIjpcImVcIixcIuG4mFwiOlwiZVwiLFwi4biZXCI6XCJlXCIsXCLhuJpcIjpcImVcIixcIuG4m1wiOlwiZVwiLFwiyYZcIjpcImVcIixcIsmHXCI6XCJlXCIsXCLJmlwiOlwiZVwiLFwiyZ1cIjpcImVcIixcIuG4nlwiOlwiZlwiLFwi4bifXCI6XCJmXCIsXCLhta5cIjpcImZcIixcIsaRXCI6XCJmXCIsXCLGklwiOlwiZlwiLFwix7RcIjpcImdcIixcIse1XCI6XCJnXCIsXCLEnlwiOlwiZ1wiLFwixJ9cIjpcImdcIixcIsScXCI6XCJnXCIsXCLEnVwiOlwiZ1wiLFwix6ZcIjpcImdcIixcIsenXCI6XCJnXCIsXCLEoFwiOlwiZ1wiLFwixKFcIjpcImdcIixcIsSiXCI6XCJnXCIsXCLEo1wiOlwiZ1wiLFwi4bigXCI6XCJnXCIsXCLhuKFcIjpcImdcIixcIsekXCI6XCJnXCIsXCLHpVwiOlwiZ1wiLFwixpNcIjpcImdcIixcIsmgXCI6XCJnXCIsXCLEpFwiOlwiaFwiLFwixKVcIjpcImhcIixcIsieXCI6XCJoXCIsXCLIn1wiOlwiaFwiLFwi4bimXCI6XCJoXCIsXCLhuKdcIjpcImhcIixcIuG4olwiOlwiaFwiLFwi4bijXCI6XCJoXCIsXCLhuKhcIjpcImhcIixcIuG4qVwiOlwiaFwiLFwi4bikXCI6XCJoXCIsXCLhuKVcIjpcImhcIixcIuG4qlwiOlwiaFwiLFwi4birXCI6XCJoXCIsSDpcImhcIixcIsyxXCI6XCJoXCIsXCLhupZcIjpcImhcIixcIsSmXCI6XCJoXCIsXCLEp1wiOlwiaFwiLFwi4rGnXCI6XCJoXCIsXCLisahcIjpcImhcIixcIsONXCI6XCJpXCIsXCLDrVwiOlwiaVwiLFwiw4xcIjpcImlcIixcIsOsXCI6XCJpXCIsXCLErFwiOlwiaVwiLFwixK1cIjpcImlcIixcIsOOXCI6XCJpXCIsXCLDrlwiOlwiaVwiLFwix49cIjpcImlcIixcIseQXCI6XCJpXCIsXCLDj1wiOlwiaVwiLFwiw69cIjpcImlcIixcIuG4rlwiOlwiaVwiLFwi4bivXCI6XCJpXCIsXCLEqFwiOlwiaVwiLFwixKlcIjpcImlcIixcIsSwXCI6XCJpXCIsaTpcImlcIixcIsSuXCI6XCJpXCIsXCLEr1wiOlwiaVwiLFwixKpcIjpcImlcIixcIsSrXCI6XCJpXCIsXCLhu4hcIjpcImlcIixcIuG7iVwiOlwiaVwiLFwiyIhcIjpcImlcIixcIsiJXCI6XCJpXCIsXCLIilwiOlwiaVwiLFwiyItcIjpcImlcIixcIuG7ilwiOlwiaVwiLFwi4buLXCI6XCJpXCIsXCLhuKxcIjpcImlcIixcIuG4rVwiOlwiaVwiLEk6XCJpXCIsXCLEsVwiOlwiaVwiLFwixpdcIjpcImlcIixcIsmoXCI6XCJpXCIsXCLEtFwiOlwialwiLFwixLVcIjpcImpcIixKOlwialwiLFwizIxcIjpcImpcIixcIsewXCI6XCJqXCIsXCLIt1wiOlwialwiLFwiyYhcIjpcImpcIixcIsmJXCI6XCJqXCIsXCLKnVwiOlwialwiLFwiyZ9cIjpcImpcIixcIsqEXCI6XCJqXCIsXCLhuLBcIjpcImtcIixcIuG4sVwiOlwia1wiLFwix6hcIjpcImtcIixcIsepXCI6XCJrXCIsXCLEtlwiOlwia1wiLFwixLdcIjpcImtcIixcIuG4slwiOlwia1wiLFwi4bizXCI6XCJrXCIsXCLhuLRcIjpcImtcIixcIuG4tVwiOlwia1wiLFwixphcIjpcImtcIixcIsaZXCI6XCJrXCIsXCLisalcIjpcImtcIixcIuKxqlwiOlwia1wiLFwixLlcIjpcImFcIixcIsS6XCI6XCJsXCIsXCLEvVwiOlwibFwiLFwixL5cIjpcImxcIixcIsS7XCI6XCJsXCIsXCLEvFwiOlwibFwiLFwi4bi2XCI6XCJsXCIsXCLhuLdcIjpcImxcIixcIuG4uFwiOlwibFwiLFwi4bi5XCI6XCJsXCIsXCLhuLxcIjpcImxcIixcIuG4vVwiOlwibFwiLFwi4bi6XCI6XCJsXCIsXCLhuLtcIjpcImxcIixcIsWBXCI6XCJsXCIsXCLFglwiOlwibFwiLFwizKNcIjpcImxcIixcIsS/XCI6XCJsXCIsXCLFgFwiOlwibFwiLFwiyL1cIjpcImxcIixcIsaaXCI6XCJsXCIsXCLisaBcIjpcImxcIixcIuKxoVwiOlwibFwiLFwi4rGiXCI6XCJsXCIsXCLJq1wiOlwibFwiLFwiyaxcIjpcImxcIixcIsmtXCI6XCJsXCIsXCLItFwiOlwibFwiLFwi4bi+XCI6XCJtXCIsXCLhuL9cIjpcIm1cIixcIuG5gFwiOlwibVwiLFwi4bmBXCI6XCJtXCIsXCLhuYJcIjpcIm1cIixcIuG5g1wiOlwibVwiLFwiybFcIjpcIm1cIixcIsWDXCI6XCJuXCIsXCLFhFwiOlwiblwiLFwix7hcIjpcIm5cIixcIse5XCI6XCJuXCIsXCLFh1wiOlwiblwiLFwixYhcIjpcIm5cIixcIsORXCI6XCJuXCIsXCLDsVwiOlwiblwiLFwi4bmEXCI6XCJuXCIsXCLhuYVcIjpcIm5cIixcIsWFXCI6XCJuXCIsXCLFhlwiOlwiblwiLFwi4bmGXCI6XCJuXCIsXCLhuYdcIjpcIm5cIixcIuG5ilwiOlwiblwiLFwi4bmLXCI6XCJuXCIsXCLhuYhcIjpcIm5cIixcIuG5iVwiOlwiblwiLFwixp1cIjpcIm5cIixcIsmyXCI6XCJuXCIsXCLIoFwiOlwiblwiLFwixp5cIjpcIm5cIixcIsmzXCI6XCJuXCIsXCLItVwiOlwiblwiLE46XCJuXCIsXCLMiFwiOlwiblwiLG46XCJuXCIsXCLDk1wiOlwib1wiLFwiw7NcIjpcIm9cIixcIsOSXCI6XCJvXCIsXCLDslwiOlwib1wiLFwixY5cIjpcIm9cIixcIsWPXCI6XCJvXCIsXCLDlFwiOlwib1wiLFwiw7RcIjpcIm9cIixcIuG7kFwiOlwib1wiLFwi4buRXCI6XCJvXCIsXCLhu5JcIjpcIm9cIixcIuG7k1wiOlwib1wiLFwi4buWXCI6XCJvXCIsXCLhu5dcIjpcIm9cIixcIuG7lFwiOlwib1wiLFwi4buVXCI6XCJvXCIsXCLHkVwiOlwib1wiLFwix5JcIjpcIm9cIixcIsOWXCI6XCJvXCIsXCLDtlwiOlwib1wiLFwiyKpcIjpcIm9cIixcIsirXCI6XCJvXCIsXCLFkFwiOlwib1wiLFwixZFcIjpcIm9cIixcIsOVXCI6XCJvXCIsXCLDtVwiOlwib1wiLFwi4bmMXCI6XCJvXCIsXCLhuY1cIjpcIm9cIixcIuG5jlwiOlwib1wiLFwi4bmPXCI6XCJvXCIsXCLIrFwiOlwib1wiLFwiyK1cIjpcIm9cIixcIsiuXCI6XCJvXCIsXCLIr1wiOlwib1wiLFwiyLBcIjpcIm9cIixcIsixXCI6XCJvXCIsXCLDmFwiOlwib1wiLFwiw7hcIjpcIm9cIixcIse+XCI6XCJvXCIsXCLHv1wiOlwib1wiLFwix6pcIjpcIm9cIixcIserXCI6XCJvXCIsXCLHrFwiOlwib1wiLFwix61cIjpcIm9cIixcIsWMXCI6XCJvXCIsXCLFjVwiOlwib1wiLFwi4bmSXCI6XCJvXCIsXCLhuZNcIjpcIm9cIixcIuG5kFwiOlwib1wiLFwi4bmRXCI6XCJvXCIsXCLhu45cIjpcIm9cIixcIuG7j1wiOlwib1wiLFwiyIxcIjpcIm9cIixcIsiNXCI6XCJvXCIsXCLIjlwiOlwib1wiLFwiyI9cIjpcIm9cIixcIsagXCI6XCJvXCIsXCLGoVwiOlwib1wiLFwi4buaXCI6XCJvXCIsXCLhu5tcIjpcIm9cIixcIuG7nFwiOlwib1wiLFwi4budXCI6XCJvXCIsXCLhu6BcIjpcIm9cIixcIuG7oVwiOlwib1wiLFwi4bueXCI6XCJvXCIsXCLhu59cIjpcIm9cIixcIuG7olwiOlwib1wiLFwi4bujXCI6XCJvXCIsXCLhu4xcIjpcIm9cIixcIuG7jVwiOlwib1wiLFwi4buYXCI6XCJvXCIsXCLhu5lcIjpcIm9cIixcIsafXCI6XCJvXCIsXCLJtVwiOlwib1wiLFwi4bmUXCI6XCJwXCIsXCLhuZVcIjpcInBcIixcIuG5llwiOlwicFwiLFwi4bmXXCI6XCJwXCIsXCLisaNcIjpcInBcIixcIsakXCI6XCJwXCIsXCLGpVwiOlwicFwiLFA6XCJwXCIsXCLMg1wiOlwicFwiLHA6XCJwXCIsXCLKoFwiOlwicVwiLFwiyYpcIjpcInFcIixcIsmLXCI6XCJxXCIsXCLFlFwiOlwiclwiLFwixZVcIjpcInJcIixcIsWYXCI6XCJyXCIsXCLFmVwiOlwiclwiLFwi4bmYXCI6XCJyXCIsXCLhuZlcIjpcInJcIixcIsWWXCI6XCJyXCIsXCLFl1wiOlwiclwiLFwiyJBcIjpcInJcIixcIsiRXCI6XCJyXCIsXCLIklwiOlwiclwiLFwiyJNcIjpcInJcIixcIuG5mlwiOlwiclwiLFwi4bmbXCI6XCJyXCIsXCLhuZxcIjpcInJcIixcIuG5nVwiOlwiclwiLFwi4bmeXCI6XCJyXCIsXCLhuZ9cIjpcInJcIixcIsmMXCI6XCJyXCIsXCLJjVwiOlwiclwiLFwi4bWyXCI6XCJyXCIsXCLJvFwiOlwiclwiLFwi4rGkXCI6XCJyXCIsXCLJvVwiOlwiclwiLFwiyb5cIjpcInJcIixcIuG1s1wiOlwiclwiLFwiw59cIjpcInNcIixcIsWaXCI6XCJzXCIsXCLFm1wiOlwic1wiLFwi4bmkXCI6XCJzXCIsXCLhuaVcIjpcInNcIixcIsWcXCI6XCJzXCIsXCLFnVwiOlwic1wiLFwixaBcIjpcInNcIixcIsWhXCI6XCJzXCIsXCLhuaZcIjpcInNcIixcIuG5p1wiOlwic1wiLFwi4bmgXCI6XCJzXCIsXCLhuaFcIjpcInNcIixcIuG6m1wiOlwic1wiLFwixZ5cIjpcInNcIixcIsWfXCI6XCJzXCIsXCLhuaJcIjpcInNcIixcIuG5o1wiOlwic1wiLFwi4bmoXCI6XCJzXCIsXCLhualcIjpcInNcIixcIsiYXCI6XCJzXCIsXCLImVwiOlwic1wiLFwiyoJcIjpcInNcIixTOlwic1wiLFwizKlcIjpcInNcIixzOlwic1wiLFwiw55cIjpcInRcIixcIsO+XCI6XCJ0XCIsXCLFpFwiOlwidFwiLFwixaVcIjpcInRcIixUOlwidFwiLFwi4bqXXCI6XCJ0XCIsXCLhuapcIjpcInRcIixcIuG5q1wiOlwidFwiLFwixaJcIjpcInRcIixcIsWjXCI6XCJ0XCIsXCLhuaxcIjpcInRcIixcIuG5rVwiOlwidFwiLFwiyJpcIjpcInRcIixcIsibXCI6XCJ0XCIsXCLhubBcIjpcInRcIixcIuG5sVwiOlwidFwiLFwi4bmuXCI6XCJ0XCIsXCLhua9cIjpcInRcIixcIsWmXCI6XCJ0XCIsXCLFp1wiOlwidFwiLFwiyL5cIjpcInRcIixcIuKxplwiOlwidFwiLFwi4bW1XCI6XCJ0XCIsXCLGq1wiOlwidFwiLFwixqxcIjpcInRcIixcIsatXCI6XCJ0XCIsXCLGrlwiOlwidFwiLFwiyohcIjpcInRcIixcIsi2XCI6XCJ0XCIsXCLDmlwiOlwidVwiLFwiw7pcIjpcInVcIixcIsOZXCI6XCJ1XCIsXCLDuVwiOlwidVwiLFwixaxcIjpcInVcIixcIsWtXCI6XCJ1XCIsXCLDm1wiOlwidVwiLFwiw7tcIjpcInVcIixcIseTXCI6XCJ1XCIsXCLHlFwiOlwidVwiLFwixa5cIjpcInVcIixcIsWvXCI6XCJ1XCIsXCLDnFwiOlwidVwiLFwiw7xcIjpcInVcIixcIseXXCI6XCJ1XCIsXCLHmFwiOlwidVwiLFwix5tcIjpcInVcIixcIsecXCI6XCJ1XCIsXCLHmVwiOlwidVwiLFwix5pcIjpcInVcIixcIseVXCI6XCJ1XCIsXCLHllwiOlwidVwiLFwixbBcIjpcInVcIixcIsWxXCI6XCJ1XCIsXCLFqFwiOlwidVwiLFwixalcIjpcInVcIixcIuG5uFwiOlwidVwiLFwi4bm5XCI6XCJ1XCIsXCLFslwiOlwidVwiLFwixbNcIjpcInVcIixcIsWqXCI6XCJ1XCIsXCLFq1wiOlwidVwiLFwi4bm6XCI6XCJ1XCIsXCLhubtcIjpcInVcIixcIuG7plwiOlwidVwiLFwi4bunXCI6XCJ1XCIsXCLIlFwiOlwidVwiLFwiyJVcIjpcInVcIixcIsiWXCI6XCJ1XCIsXCLIl1wiOlwidVwiLFwixq9cIjpcInVcIixcIsawXCI6XCJ1XCIsXCLhu6hcIjpcInVcIixcIuG7qVwiOlwidVwiLFwi4buqXCI6XCJ1XCIsXCLhu6tcIjpcInVcIixcIuG7rlwiOlwidVwiLFwi4buvXCI6XCJ1XCIsXCLhu6xcIjpcInVcIixcIuG7rVwiOlwidVwiLFwi4buwXCI6XCJ1XCIsXCLhu7FcIjpcInVcIixcIuG7pFwiOlwidVwiLFwi4bulXCI6XCJ1XCIsXCLhubJcIjpcInVcIixcIuG5s1wiOlwidVwiLFwi4bm2XCI6XCJ1XCIsXCLhubdcIjpcInVcIixcIuG5tFwiOlwidVwiLFwi4bm1XCI6XCJ1XCIsXCLJhFwiOlwidVwiLFwiyolcIjpcInVcIixcIuG5vFwiOlwidlwiLFwi4bm9XCI6XCJ2XCIsXCLhub5cIjpcInZcIixcIuG5v1wiOlwidlwiLFwixrJcIjpcInZcIixcIsqLXCI6XCJ2XCIsXCLhuoJcIjpcIndcIixcIuG6g1wiOlwid1wiLFwi4bqAXCI6XCJ3XCIsXCLhuoFcIjpcIndcIixcIsW0XCI6XCJ3XCIsXCLFtVwiOlwid1wiLFc6XCJ3XCIsXCLMilwiOlwid1wiLFwi4bqYXCI6XCJ3XCIsXCLhuoRcIjpcIndcIixcIuG6hVwiOlwid1wiLFwi4bqGXCI6XCJ3XCIsXCLhuodcIjpcIndcIixcIuG6iFwiOlwid1wiLFwi4bqJXCI6XCJ3XCIsXCLhuoxcIjpcInhcIixcIuG6jVwiOlwieFwiLFwi4bqKXCI6XCJ4XCIsXCLhuotcIjpcInhcIixcIsOdXCI6XCJ5XCIsXCLDvVwiOlwieVwiLFwi4buyXCI6XCJ5XCIsXCLhu7NcIjpcInlcIixcIsW2XCI6XCJ5XCIsXCLFt1wiOlwieVwiLFk6XCJ5XCIsXCLhuplcIjpcInlcIixcIsW4XCI6XCJ5XCIsXCLDv1wiOlwieVwiLFwi4bu4XCI6XCJ5XCIsXCLhu7lcIjpcInlcIixcIuG6jlwiOlwieVwiLFwi4bqPXCI6XCJ5XCIsXCLIslwiOlwieVwiLFwiyLNcIjpcInlcIixcIuG7tlwiOlwieVwiLFwi4bu3XCI6XCJ5XCIsXCLhu7RcIjpcInlcIixcIuG7tVwiOlwieVwiLFwiyo9cIjpcInlcIixcIsmOXCI6XCJ5XCIsXCLJj1wiOlwieVwiLFwixrNcIjpcInlcIixcIsa0XCI6XCJ5XCIsXCLFuVwiOlwielwiLFwixbpcIjpcInpcIixcIuG6kFwiOlwielwiLFwi4bqRXCI6XCJ6XCIsXCLFvVwiOlwielwiLFwixb5cIjpcInpcIixcIsW7XCI6XCJ6XCIsXCLFvFwiOlwielwiLFwi4bqSXCI6XCJ6XCIsXCLhupNcIjpcInpcIixcIuG6lFwiOlwielwiLFwi4bqVXCI6XCJ6XCIsXCLGtVwiOlwielwiLFwixrZcIjpcInpcIixcIsikXCI6XCJ6XCIsXCLIpVwiOlwielwiLFwiypBcIjpcInpcIixcIsqRXCI6XCJ6XCIsXCLisatcIjpcInpcIixcIuKxrFwiOlwielwiLFwix65cIjpcInpcIixcIsevXCI6XCJ6XCIsXCLGulwiOlwielwiLFwi77ySXCI6XCIyXCIsXCLvvJZcIjpcIjZcIixcIu+8olwiOlwiQlwiLFwi77ymXCI6XCJGXCIsXCLvvKpcIjpcIkpcIixcIu+8rlwiOlwiTlwiLFwi77yyXCI6XCJSXCIsXCLvvLZcIjpcIlZcIixcIu+8ulwiOlwiWlwiLFwi772CXCI6XCJiXCIsXCLvvYZcIjpcImZcIixcIu+9ilwiOlwialwiLFwi772OXCI6XCJuXCIsXCLvvZJcIjpcInJcIixcIu+9llwiOlwidlwiLFwi772aXCI6XCJ6XCIsXCLvvJFcIjpcIjFcIixcIu+8lVwiOlwiNVwiLFwi77yZXCI6XCI5XCIsXCLvvKFcIjpcIkFcIixcIu+8pVwiOlwiRVwiLFwi77ypXCI6XCJJXCIsXCLvvK1cIjpcIk1cIixcIu+8sVwiOlwiUVwiLFwi77y1XCI6XCJVXCIsXCLvvLlcIjpcIllcIixcIu+9gVwiOlwiYVwiLFwi772FXCI6XCJlXCIsXCLvvYlcIjpcImlcIixcIu+9jVwiOlwibVwiLFwi772RXCI6XCJxXCIsXCLvvZVcIjpcInVcIixcIu+9mVwiOlwieVwiLFwi77yQXCI6XCIwXCIsXCLvvJRcIjpcIjRcIixcIu+8mFwiOlwiOFwiLFwi77ykXCI6XCJEXCIsXCLvvKhcIjpcIkhcIixcIu+8rFwiOlwiTFwiLFwi77ywXCI6XCJQXCIsXCLvvLRcIjpcIlRcIixcIu+8uFwiOlwiWFwiLFwi772EXCI6XCJkXCIsXCLvvYhcIjpcImhcIixcIu+9jFwiOlwibFwiLFwi772QXCI6XCJwXCIsXCLvvZRcIjpcInRcIixcIu+9mFwiOlwieFwiLFwi77yTXCI6XCIzXCIsXCLvvJdcIjpcIjdcIixcIu+8o1wiOlwiQ1wiLFwi77ynXCI6XCJHXCIsXCLvvKtcIjpcIktcIixcIu+8r1wiOlwiT1wiLFwi77yzXCI6XCJTXCIsXCLvvLdcIjpcIldcIixcIu+9g1wiOlwiY1wiLFwi772HXCI6XCJnXCIsXCLvvYtcIjpcImtcIixcIu+9j1wiOlwib1wiLFwi772TXCI6XCJzXCIsXCLvvZdcIjpcIndcIixcIuG6s1wiOlwiYVwiLFwiw4JcIjpcImFcIixcIsOiXCI6XCJhXCIsXCLhuqRcIjpcImFcIixcIuG6pVwiOlwiYVwiLFwi4bqmXCI6XCJhXCIsXCLhuqdcIjpcImFcIn07dm9pZCAwPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUmJih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxpLG4scyl7dmFyIG8sYT1pW25dLHI9cGFyc2VGbG9hdChhKSxsPWEuc3BsaXQoL1xcZC8pWzBdO3JldHVybiBzPW51bGwhPT1zP3M6LyV8ZW0vLnRlc3QobCkmJmUucGFyZW50RWxlbWVudD90KGUucGFyZW50RWxlbWVudCxlLnBhcmVudEVsZW1lbnQuY3VycmVudFN0eWxlLFwiZm9udFNpemVcIixudWxsKToxNixvPVwiZm9udFNpemVcIj09PW4/czovd2lkdGgvaS50ZXN0KG4pP2UuY2xpZW50V2lkdGg6ZS5jbGllbnRIZWlnaHQsXCJlbVwiPT09bD9yKnM6XCJpblwiPT09bD85NipyOlwicHRcIj09PWw/OTYqci83MjpcIiVcIj09PWw/ci8xMDAqbzpyfWZ1bmN0aW9uIGUodCxlKXt2YXIgaT1cImJvcmRlclwiPT09ZT9cIldpZHRoXCI6XCJcIixuPWUrXCJUb3BcIitpLHM9ZStcIlJpZ2h0XCIraSxvPWUrXCJCb3R0b21cIitpLGE9ZStcIkxlZnRcIitpO3RbZV09KHRbbl09PT10W3NdPT09dFtvXT09PXRbYV0/W3Rbbl1dOnRbbl09PT10W29dJiZ0W2FdPT09dFtzXT9bdFtuXSx0W3NdXTp0W2FdPT09dFtzXT9bdFtuXSx0W3NdLHRbb11dOlt0W25dLHRbc10sdFtvXSx0W2FdXSkuam9pbihcIiBcIil9ZnVuY3Rpb24gaShpKXt2YXIgbixzPWkuY3VycmVudFN0eWxlLG89dGhpcyxhPXQoaSxzLFwiZm9udFNpemVcIixudWxsKTtmb3IobiBpbiBzKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLG4pJiYoL3dpZHRofGhlaWdodHxtYXJnaW4ufHBhZGRpbmcufGJvcmRlci4rVy8udGVzdChuKSYmXCJhdXRvXCIhPT1vW25dP29bbl09dChpLHMsbixhKStcInB4XCI6XCJzdHlsZUZsb2F0XCI9PT1uP28uZmxvYXQ9c1tuXTpvW25dPXNbbl0pO3JldHVybiBlKG8sXCJtYXJnaW5cIiksZShvLFwicGFkZGluZ1wiKSxlKG8sXCJib3JkZXJcIiksby5mb250U2l6ZT1hK1wicHhcIixvfXJldHVybiBpLnByb3RvdHlwZT17Y29uc3RydWN0b3I6aSxnZXRQcm9wZXJ0eVByaW9yaXR5OmZ1bmN0aW9uKCl7fSxnZXRQcm9wZXJ0eVZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3RdfHxcIlwifSxpdGVtOmZ1bmN0aW9uKCl7fSxyZW1vdmVQcm9wZXJ0eTpmdW5jdGlvbigpe30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oKXt9LGdldFByb3BlcnR5Q1NTVmFsdWU6ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9fSgpKSx0KGRvY3VtZW50KS5vbihcImtleWRvd24ueGRzb2Z0Y3RybFwiLGZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PWImJihJPSEwKSx0LmtleUNvZGU9PT1fJiYoST0hMCl9KS5vbihcImtleXVwLnhkc29mdGN0cmxcIixmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1iJiYoST0hMSksdC5rZXlDb2RlPT09XyYmKEk9ITEpfSksUz17bWluTGVuZ3RoOjAsdmFsdWVLZXk6XCJ2YWx1ZVwiLHRpdGxlS2V5OlwidGl0bGVcIixoaWdobGlnaHQ6ITAsc2hvd0hpbnQ6ITAsZHJvcGRvd25XaWR0aDpcIjEwMCVcIixkcm9wZG93blN0eWxlOnt9LGl0ZW1TdHlsZTp7fSxoaW50U3R5bGU6ITEsc3R5bGU6ITEsZGVidWc6ITAsb3Blbk9uRm9jdXM6ITEsY2xvc2VPbkJsdXI6ITAsYXV0b3NlbGVjdDohMSxhY2NlbnRzOiEwLHJlcGxhY2VBY2NlbnRzRm9yUmVtb3RlOiEwLGxpbWl0OjIwLHZpc2libGVMaW1pdDoyMCx2aXNpYmxlSGVpZ2h0OjAsZGVmYXVsdEhlaWdodEl0ZW06MzAsdGltZW91dFVwZGF0ZToxMCxnZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gYS5jYWxsKHRoaXMsdCxlKX0scmVwbGFjZTpbZnVuY3Rpb24odCxpKXtyZXR1cm4gdGhpcy5yZXBsYWNlQWNjZW50c0ZvclJlbW90ZSYmKGk9ZShpKSksdC5yZXBsYWNlKFwiJVFVRVJZJVwiLGVuY29kZVVSSUNvbXBvbmVudChpKSl9XSxlcXVhbDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PXQuc3Vic3RyKDAsZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCl9LGZpbmRSaWdodDpbZnVuY3Rpb24odCxlLGkpe3ZhciBuLHM9XCJcIjtpZih0KWZvcihuPTA7bjx0Lmxlbmd0aDtuKz0xKWlmKHM9by5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLGksW3Rbbl0saV0pLG8uY2FsbCh0aGlzLFwiZXF1YWxcIixpLFtzLGUsaV0sITEpKXJldHVybiB0W25dO3JldHVybiExfV0sdmFsaWQ6W2Z1bmN0aW9uKHQsaSl7cmV0dXJuIHRoaXMuYWNjZW50cyYmKHQ9ZSh0KSxpPWUoaSkpLC0xIT10LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihpLnRvTG93ZXJDYXNlKCkpfV0sZmlsdGVyOltmdW5jdGlvbih0LGUsaSl7dmFyIHMsYT1bXSxyPVwiXCI7aWYodClmb3Iocz0wO3M8dC5sZW5ndGg7cys9MSlyPW4odFtzXVt0aGlzLmdldChcInZhbHVlS2V5XCIsaSldKT90W3NdW3RoaXMuZ2V0KFwidmFsdWVLZXlcIixpKV06dFtzXS50b1N0cmluZygpLG8uY2FsbCh0aGlzLFwidmFsaWRcIixpLFtyLGVdKSYmYS5wdXNoKHRbc10pO3JldHVybiBhfV0scHJlcGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGdldFZhbHVlOltmdW5jdGlvbih0LGUpe3JldHVybiBuKHRbdGhpcy5nZXQoXCJ2YWx1ZUtleVwiLGUpXSk/dFt0aGlzLmdldChcInZhbHVlS2V5XCIsZSldOnQudG9TdHJpbmcoKX1dLGdldFRpdGxlOltmdW5jdGlvbih0LGUpe3JldHVybiBuKHRbdGhpcy5nZXQoXCJ0aXRsZUtleVwiLGUpXSk/dFt0aGlzLmdldChcInRpdGxlS2V5XCIsZSldOnQudG9TdHJpbmcoKX1dLHJlbmRlcjpbZnVuY3Rpb24odCxuLHMsYSl7dmFyIHIsbCxoLGM9by5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLG4sW3Qsbl0sUy5nZXRWYWx1ZVswXS5jYWxsKHRoaXMsdCxuKSksdT1vLmNhbGwodGhpcyxcImdldFRpdGxlXCIsbixbdCxuXSxTLmdldFRpdGxlWzBdLmNhbGwodGhpcyx0LG4pKSxkPVwiXCIscD1cIlwiLGY9XCJcIixnPVwiXCIsbT0wO2lmKHRoaXMuaGlnaGxpZ2h0KWlmKHRoaXMuYWNjZW50cyl7Zm9yKHA9ZSh1KS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1s8Pl0rL2csXCJcIiksZD1lKGEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWzw+XSsvZyxcIlwiKSxmPXAucmVwbGFjZShuZXcgUmVnRXhwKGkoZCksXCJnXCIpLFwiPFwiK2QrXCI+XCIpLGg9MDtoPGYubGVuZ3RoO2grPTEpcj11LmNoYXJBdChtKSxcIjxcIj09PShsPWYuY2hhckF0KGgpKT9nKz1cIjxiPlwiOlwiPlwiPT09bD9nKz1cIjwvYj5cIjoobSs9MSxnKz1yKTt1PWd9ZWxzZSB1PXUucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiK2koYSkrXCIpXCIsXCJpXCIpLFwiPGI+JDE8L2I+XCIpO3JldHVyblwiPGRpdiBcIisoYz09YT8nY2xhc3M9XCJhY3RpdmVcIic6XCJcIikrJyBkYXRhLXZhbHVlPVwiJytlbmNvZGVVUklDb21wb25lbnQoYykrJ1wiPicrdStcIjwvZGl2PlwifV0sYXBwZW5kTWV0aG9kOlwiY29uY2F0XCIsc291cmNlOltdLGFmdGVyU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt9fSxFPXtkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJpZ2dlcihcImRlc3Ryb3kueGRzb2Z0XCIpfSx1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpfSxvcHRpb25zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSYmdC5pc1BsYWluT2JqZWN0KGUpJiZ0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiLHQuZXh0ZW5kKCEwLHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpLGUpKSx0aGlzfSxzZXRTb3VyY2U6ZnVuY3Rpb24oZSxpKXtpZih0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSYmKHQuaXNQbGFpbk9iamVjdChlKXx8dC5pc0Z1bmN0aW9uKGUpfHx0LmlzQXJyYXkoZSkpKXt2YXIgbj10aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSxzPXRoaXMuZGF0YShcInhkc29mdF9hdXRvY29tcGxldGVcIiksbz1uLnNvdXJjZTt2b2lkIDA9PT1pfHxpc05hTihpKT90LmlzRnVuY3Rpb24oZSk/dGhpcy5kYXRhKFwiYXV0b2NvbXBsZXRlX29wdGlvbnNcIikuc291cmNlPWU6dC5leHRlbmQoITAsbyxlKTp0LmlzUGxhaW5PYmplY3QoZSl8fHQuaXNBcnJheShlKT9vW2ldPXQuZXh0ZW5kKCEwLHQuaXNBcnJheShlKT9bXTp7fSxlKTpvW2ldPWUsYy5jYWxsKG4sdGhpcy52YWwoKSxzLGZ1bmN0aW9uKHQpe2guY2FsbChuLHMsdCl9KX1yZXR1cm4gdGhpc30sZ2V0U291cmNlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpKXt2YXIgZT10aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKS5zb3VyY2U7cmV0dXJuIHZvaWQgMCE9PXQmJiFpc05hTih0KSYmZVt0XT9lW3RdOmV9cmV0dXJuIG51bGx9fSx0LmZuLmF1dG9jb21wbGV0ZT1mdW5jdGlvbihlLGksbil7cmV0dXJuXCJzdHJpbmdcIj09PXQudHlwZShlKSYmRVtlXT9FW2VdLmNhbGwodGhpcyxpLG4pOnRoaXMuZWFjaChmdW5jdGlvbigpe2QodGhpcyx0LmV4dGVuZCghMCx7fSxTLGUpKX0pfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt0KFwiI3NlYXJjaFwiKS5rZXl1cChmdW5jdGlvbigpe3QuYWpheCh7dHlwZTpcIlBPU1RcIix1cmw6XCIvc2VhcmNoL1wiLGRhdGE6e3NlYXJjaF90ZXh0OnQoXCIjc2VhcmNoXCIpLnZhbCgpLGNzcmZtaWRkbGV3YXJldG9rZW46dChcImlucHV0W25hbWU9Y3NyZm1pZGRsZXdhcmV0b2tlbl1cIikudmFsKCl9LHN1Y2Nlc3M6c2VhcmNoU3VjY2VzcyxkYXRhVHlwZTpcImh0bWxcIn0pfSl9KCQpLCQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpeyQoXCIuYmFza2V0LWl0ZW1zXCIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuXCIpfXZhciBlPSQoXCIjZm9ybS1idXlpbmctcHJvZHVjdHNcIik7ZS5vbihcInN1Ym1pdFwiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSwkKFwiI251bWJlclwiKS52YWwoKTt2YXIgaT0kKFwiI251bWJlclwiKS52YWwoKSxuPSQoXCIjc3VibWl0LWJ0blwiKSxzPW4uZGF0YShcInByb2R1Y3RzLWlkXCIpLG89KG4uZGF0YShcInByb2R1Y3RzLW5hbWVcIiksbi5kYXRhKFwicHJvZHVjdHMtcHJpY2VcIikse30pO28ucHJvZHVjdF9pZD1zLG8ubm1iPWk7dmFyIGE9JCgnI2Zvcm0tYnV5aW5nLXByb2R1Y3RzIFtuYW1lPVwiY3NyZm1pZGRsZXdhcmV0b2tlblwiXScpLnZhbCgpO28uY3NyZm1pZGRsZXdhcmV0b2tlbj1hO3ZhciByPWUuYXR0cihcImFjdGlvblwiKTskLmFqYXgoe3VybDpyLHR5cGU6XCJQT1NUXCIsZGF0YTpvLGNhY2hlOiEwLHN1Y2Nlc3M6ZnVuY3Rpb24odCl7dC5wcm9kdWN0c190b3RhbF9ubWImJigkKFwiI2Jhc2tldF90b3RhbF9ubWJcIikudGV4dChcIihcIit0LnByb2R1Y3RzX3RvdGFsX25tYitcIilcIiksJChcIi5iYXNrZXQtaXRlbXMgdWxcIikuaHRtbChcIlwiKSwkLmVhY2godC5wcm9kdWN0cyxmdW5jdGlvbih0LGUpeyQoXCIuYmFza2V0LWl0ZW1zIHVsXCIpLmFwcGVuZChcIjxsaT5cIitlLm5hbWUrXCIsIFwiK2Uubm1iK1wicGMuIGZvciBcIitlLnByaWNlX3Blcl9pdGVtK1wicnViLiAgPC9saT5cIil9KSl9LGVycm9yOmZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCJlcnJvclwiKX19KX0pLCQoXCIuYmFza2V0LWNvbnRhaW5lclwiKS5tb3VzZW92ZXIoZnVuY3Rpb24oKXt0KCl9KSwkKFwiLmJhc2tldC1jb250YWluZXJcIikubW91c2VvdXQoZnVuY3Rpb24oKXt0KCl9KSwkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsXCIuZGVsZXRlLWl0ZW1cIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksJCh0aGlzKS5jbG9zZXN0KFwibGlcIikucmVtb3ZlKCl9KX0pLGZ1bmN0aW9uKHQpe3QoZnVuY3Rpb24oKXt2YXIgZT10KFwiI3JhbmdlXCIpLGk9ZS5hdHRyKFwiZGF0YS1taW5cIiksbj1lLmF0dHIoXCJkYXRhLW1heFwiKSxzPXQoXCIuZmlsdGVyX19taW5cIiksbz10KFwiLmZpbHRlcl9fbWF4XCIpO3MudmFsKGkpLG8udmFsKG4pLHM8MCYmKHM9MCksbzwwJiYobz0wKSxlLnNsaWRlcih7cmFuZ2U6ITAsbWF4Om4sdmFsdWVzOltpLG5dLGNoYW5nZTpmdW5jdGlvbih0LGkpe3ZhciBuPWUuc2xpZGVyKFwidmFsdWVzXCIsMCksYT1lLnNsaWRlcihcInZhbHVlc1wiLDEpO2NvbnNvbGUubG9nKG4sYSkscy52YWwobiksby52YWwoYSl9fSksdChcIi5maWx0ZXJfX2NhdGVnb3J5IC5maWx0ZXJfX2NhdGVnb3J5LWl0ZW0gdWxcIikudG9nZ2xlKCksdChcIi5maWx0ZXJfX2NhdGVnb3J5IC5maWx0ZXJfX2NhdGVnb3J5LWl0ZW0gLmNhdGVnb3J5X190aXRsZVwiKS5jbGljayhmdW5jdGlvbigpe3QodGhpcykucGFyZW50KCkuZmluZChcInVsXCIpLnNsaWRlVG9nZ2xlKCl9KSx0KFwiI21lbnVfYWN0aXZlXCIpLmNsaWNrKGZ1bmN0aW9uKCl7dChcIi5tb2JhaWwtbWVudVwiKS5zbGlkZVRvZ2dsZSgpfSksdChcIiNjb250ZW50X19jYXRlZ29yeS1idG5cIikuY2xpY2soZnVuY3Rpb24oKXt0KFwiLmNvbnRlbnRfX2NhdGVnb3J5XCIpLnNsaWRlVG9nZ2xlKCl9KSx0KFwiLmJhbm5lcl9fY2xvc2VcIikuY2xpY2soZnVuY3Rpb24oKXt0KFwiLmJhbm5lcl9fY2xvc2VcIikucGFyZW50KCkuaGlkZSgpfSksdChcIi5jZXJ0aWZpY2F0ZV9faXRlbVwiKS5tYWduaWZpY1BvcHVwKHt0eXBlOlwiaW1hZ2VcIn0pO3ZhciBhPXQoXCIuc3RhcnNcIik7YS5iYXJyYXRpbmcoe3RoZW1lOlwiZm9udGF3ZXNvbWUtc3RhcnNcIn0pO3ZhciByPWEuYXR0cihcImRhdGEtcmF0aW5nXCIpO2EuYmFycmF0aW5nKFwic2V0XCIscik7dmFyIGw9dChcIi5zbGlkZXJfX21haW4taW1hZ2UgaW1nXCIpLGg9dChcIi5zbGlkZXJfX2xpc3QgbGlcIik7bC5hdHRyKFwic3JjXCIsaC5maW5kKFwiaW1nXCIpLmF0dHIoXCJzcmNcIikpLGguY2xpY2soZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLmZpbmQoXCJpbWdcIikuYXR0cihcInNyY1wiKTtsLmF0dHIoXCJzcmNcIixlKX0pfSl9KCQpLCQoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjskKFwiI3FcIikuYXV0b2NvbXBsZXRlKHtzZXJ2aWNlVXJsOlwiaHR0cDovLzEyNy4wLjAuMTo4MDAxL3NlYXJjaC9hdXRvY29tcGxldGUvXCIsbWluQ2hhcnM6MixkYXRhVHlwZTpcImpzb25cIix0eXBlOlwiR0VUXCIsb25TZWxlY3Q6ZnVuY3Rpb24odCl7Y29uc29sZS5sb2codC52YWx1ZStcIiwgZGF0YSA6XCIrdC5kYXRhKX19KX0pLCQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7dmFyIHQ9Z2V0UXVlcnlQYXJhbXMoKTtjb25zb2xlLmxvZygpLCQuZWFjaCh0LGZ1bmN0aW9uKHQsZSl7aWQ9ZGVjb2RlVVJJQ29tcG9uZW50KHQpLnJlcGxhY2UoL1xccy9nLFwiXCIpLCQoXCIjXCIraWQpLmF0dHIoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpfSl9KSxmdW5jdGlvbih0KXt0KGZ1bmN0aW9uKCl7dmFyIGU9dChcIiNyYW5nZVwiKSxpPWUuYXR0cihcImRhdGEtbWluXCIpLG49ZS5hdHRyKFwiZGF0YS1tYXhcIikscz10KFwiLmZpbHRlcl9fbWluXCIpLG89dChcIi5maWx0ZXJfX21heFwiKTtzLnZhbChpKSxvLnZhbChuKSxzPDAmJihzPTApLG88MCYmKG89MCksZS5zbGlkZXIoe3JhbmdlOiEwLG1heDpuLHZhbHVlczpbaSxuXSxjaGFuZ2U6ZnVuY3Rpb24odCxpKXt2YXIgbj1lLnNsaWRlcihcInZhbHVlc1wiLDApLGE9ZS5zbGlkZXIoXCJ2YWx1ZXNcIiwxKTtjb25zb2xlLmxvZyhuLGEpLHMudmFsKG4pLG8udmFsKGEpfX0pLHQoXCIuZmlsdGVyX19jYXRlZ29yeSAuZmlsdGVyX19jYXRlZ29yeS1pdGVtIHVsXCIpLnRvZ2dsZSgpLHQoXCIuZmlsdGVyX19jYXRlZ29yeSAuZmlsdGVyX19jYXRlZ29yeS1pdGVtIC5jYXRlZ29yeV9fdGl0bGVcIikuY2xpY2soZnVuY3Rpb24oKXt0KHRoaXMpLnBhcmVudCgpLmZpbmQoXCJ1bFwiKS5zbGlkZVRvZ2dsZSgpfSksdChcIiNtZW51X2FjdGl2ZVwiKS5jbGljayhmdW5jdGlvbigpe3QoXCIubW9iYWlsLW1lbnVcIikuc2xpZGVUb2dnbGUoKX0pLHQoXCIjY29udGVudF9fY2F0ZWdvcnktYnRuXCIpLmNsaWNrKGZ1bmN0aW9uKCl7dChcIi5jb250ZW50X19jYXRlZ29yeVwiKS5zbGlkZVRvZ2dsZSgpfSksdChcIi5iYW5uZXJfX2Nsb3NlXCIpLmNsaWNrKGZ1bmN0aW9uKCl7dChcIi5iYW5uZXJfX2Nsb3NlXCIpLnBhcmVudCgpLmhpZGUoKX0pLHQoXCIuY2VydGlmaWNhdGVfX2l0ZW1cIikubWFnbmlmaWNQb3B1cCh7dHlwZTpcImltYWdlXCJ9KTt2YXIgYT10KFwiLnN0YXJzXCIpO2EuYmFycmF0aW5nKHt0aGVtZTpcImZvbnRhd2Vzb21lLXN0YXJzXCJ9KTt2YXIgcj1hLmF0dHIoXCJkYXRhLXJhdGluZ1wiKTthLmJhcnJhdGluZyhcInNldFwiLHIpO3ZhciBsPXQoXCIuc2xpZGVyX19tYWluLWltYWdlIGltZ1wiKSxoPXQoXCIuc2xpZGVyX19saXN0IGxpXCIpO2wuYXR0cihcInNyY1wiLGguZmluZChcImltZ1wiKS5hdHRyKFwic3JjXCIpKSxoLmNsaWNrKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5maW5kKFwiaW1nXCIpLmF0dHIoXCJzcmNcIik7bC5hdHRyKFwic3JjXCIsZSl9KX0pfSgkKSwkKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7JChcIiNxXCIpLmF1dG9jb21wbGV0ZSh7c2VydmljZVVybDpcImh0dHA6Ly8xMjcuMC4wLjE6ODAwMS9zZWFyY2gvYXV0b2NvbXBsZXRlL1wiLG1pbkNoYXJzOjIsZGF0YVR5cGU6XCJqc29uXCIsdHlwZTpcIkdFVFwiLG9uU2VsZWN0OmZ1bmN0aW9uKHQpe2NvbnNvbGUubG9nKHQudmFsdWUrXCIsIGRhdGEgOlwiK3QuZGF0YSl9fSl9KSwkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpe3ZhciB0PWdldFF1ZXJ5UGFyYW1zKCk7Y29uc29sZS5sb2coKSwkLmVhY2godCxmdW5jdGlvbih0LGUpe2lkPWRlY29kZVVSSUNvbXBvbmVudCh0KS5yZXBsYWNlKC9cXHMvZyxcIlwiKSwkKFwiI1wiK2lkKS5hdHRyKFwiY2hlY2tlZFwiLFwiY2hlY2tlZFwiKX0pfSk7IiwiIWZ1bmN0aW9uKHQpe3QoZnVuY3Rpb24oKXt2YXIgYT10KFwiI3JhbmdlXCIpLGU9YS5hdHRyKFwiZGF0YS1taW5cIiksaT1hLmF0dHIoXCJkYXRhLW1heFwiKSxyPXQoXCIuZmlsdGVyX19taW5cIiksbj10KFwiLmZpbHRlcl9fbWF4XCIpO3IudmFsKGUpLG4udmFsKGkpLHI8MCYmKHI9MCksbjwwJiYobj0wKSxhLnNsaWRlcih7cmFuZ2U6ITAsbWF4OmksdmFsdWVzOltlLGldLGNoYW5nZTpmdW5jdGlvbih0LGUpe3ZhciBpPWEuc2xpZGVyKFwidmFsdWVzXCIsMCksbD1hLnNsaWRlcihcInZhbHVlc1wiLDEpO2NvbnNvbGUubG9nKGksbCksci52YWwoaSksbi52YWwobCl9fSksdChcIi5maWx0ZXJfX2NhdGVnb3J5IC5maWx0ZXJfX2NhdGVnb3J5LWl0ZW0gdWxcIikudG9nZ2xlKCksdChcIi5maWx0ZXJfX2NhdGVnb3J5IC5maWx0ZXJfX2NhdGVnb3J5LWl0ZW0gLmNhdGVnb3J5X190aXRsZVwiKS5jbGljayhmdW5jdGlvbigpe3QodGhpcykucGFyZW50KCkuZmluZChcInVsXCIpLnNsaWRlVG9nZ2xlKCl9KSx0KFwiI21lbnVfYWN0aXZlXCIpLmNsaWNrKGZ1bmN0aW9uKCl7dChcIi5tb2JhaWwtbWVudVwiKS5zbGlkZVRvZ2dsZSgpfSksdChcIiNjb250ZW50X19jYXRlZ29yeS1idG5cIikuY2xpY2soZnVuY3Rpb24oKXt0KFwiLmNvbnRlbnRfX2NhdGVnb3J5XCIpLnNsaWRlVG9nZ2xlKCl9KSx0KFwiLmJhbm5lcl9fY2xvc2VcIikuY2xpY2soZnVuY3Rpb24oKXt0KFwiLmJhbm5lcl9fY2xvc2VcIikucGFyZW50KCkuaGlkZSgpfSksdChcIi5jZXJ0aWZpY2F0ZV9faXRlbVwiKS5tYWduaWZpY1BvcHVwKHt0eXBlOlwiaW1hZ2VcIn0pO3ZhciBsPXQoXCIuc3RhcnNcIik7bC5iYXJyYXRpbmcoe3RoZW1lOlwiZm9udGF3ZXNvbWUtc3RhcnNcIn0pO3ZhciBjPWwuYXR0cihcImRhdGEtcmF0aW5nXCIpO2wuYmFycmF0aW5nKFwic2V0XCIsYyk7dmFyIG89dChcIi5zbGlkZXJfX21haW4taW1hZ2UgaW1nXCIpLF89dChcIi5zbGlkZXJfX2xpc3QgbGlcIik7by5hdHRyKFwic3JjXCIsXy5maW5kKFwiaW1nXCIpLmF0dHIoXCJzcmNcIikpLF8uY2xpY2soZnVuY3Rpb24oKXt2YXIgYT10KHRoaXMpLmZpbmQoXCJpbWdcIikuYXR0cihcInNyY1wiKTtvLmF0dHIoXCJzcmNcIixhKX0pfSl9KCQpOyIsImZ1bmN0aW9uIGdldFBhcmFtZXRlckJ5TmFtZShlLG4pe258fChuPXdpbmRvdy5sb2NhdGlvbi5ocmVmKSxlPWUucmVwbGFjZSgvW1xcW1xcXV0vZyxcIlxcXFwkJlwiKTt2YXIgdD1uZXcgUmVnRXhwKFwiWz8mXVwiK2UrXCIoPShbXiYjXSopfCZ8I3wkKVwiKSxvPXQuZXhlYyhuKTtyZXR1cm4gbz9vWzJdP2RlY29kZVVSSUNvbXBvbmVudChvWzJdLnJlcGxhY2UoL1xcKy9nLFwiIFwiKSk6XCJcIjpudWxsfWZ1bmN0aW9uIG9uRmFjZXRDaGFuZ2VBcHBsaWVkKCl7dmFyIGU9d2luZG93LmxvY2F0aW9uLmhyZWYuc3BsaXQoXCI/XCIpWzBdLG49Z2V0UGFyYW1ldGVyQnlOYW1lKFwicVwiKSx0PWUrXCI/cT1cIituO3JldHVybiAkKFwiaW5wdXQ6Y2hlY2tib3guZmFjZXRcIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2hlY2tlZD8kKHRoaXMpLnZhbCgpOm51bGwsbj10aGlzLmNoZWNrZWQ/JCh0aGlzKS5hdHRyKFwibmFtZVwiKTpudWxsO251bGwhPT1lJiYodCs9XCImXCIrZW5jb2RlVVJJQ29tcG9uZW50KG4pK1wiPVwiK2VuY29kZVVSSUNvbXBvbmVudChlKSl9KSxsb2NhdGlvbi5ocmVmPXQsITB9ZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbXMoKXtmb3IodmFyIGUsbj17fSx0PXdpbmRvdy5sb2NhdGlvbi5ocmVmLnNsaWNlKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoXCI/XCIpKzEpLnNwbGl0KFwiJlwiKSxvPTA7bzx0Lmxlbmd0aDtvKyspZT10W29dLnNwbGl0KFwiPVwiKSxuW2VbMV1dPWVbMF07cmV0dXJuIG59JChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiOyQoXCIjcVwiKS5hdXRvY29tcGxldGUoe3NlcnZpY2VVcmw6XCJodHRwOi8vMTI3LjAuMC4xOjgwMDEvc2VhcmNoL2F1dG9jb21wbGV0ZS9cIixtaW5DaGFyczoyLGRhdGFUeXBlOlwianNvblwiLHR5cGU6XCJHRVRcIixvblNlbGVjdDpmdW5jdGlvbihlKXtjb25zb2xlLmxvZyhlLnZhbHVlK1wiLCBkYXRhIDpcIitlLmRhdGEpfX0pfSksJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXt2YXIgZT1nZXRRdWVyeVBhcmFtcygpO2NvbnNvbGUubG9nKCksJC5lYWNoKGUsZnVuY3Rpb24oZSxuKXtpZD1kZWNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvXFxzL2csXCJcIiksJChcIiNcIitpZCkuYXR0cihcImNoZWNrZWRcIixcImNoZWNrZWRcIil9KX0pOyJdfQ==