|
|
!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,"'")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?" ":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&&_?"":" ")),!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&&_?"":" ")+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(" ")},_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(" ")},_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> </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">×</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(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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCJub2RlX21vZHVsZXMvanF1ZXJ5LXVpLWRpc3QvanF1ZXJ5LXVpLmpzIiwibm9kZV9tb2R1bGVzL21hZ25pZmljLXBvcHVwL2Rpc3QvanF1ZXJ5Lm1hZ25pZmljLXBvcHVwLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS1iYXItcmF0aW5nL2Rpc3QvanF1ZXJ5LmJhcnJhdGluZy5taW4uanMiLCJub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmpzIiwibm9kZV9tb2R1bGVzL2pxdWVyeS1hdXRvY29tcGxldGUvanF1ZXJ5LmF1dG9jb21wbGV0ZS5qcyIsInN0YXRpYy9qcy9hamF4LmpzIiwic3RhdGljL2pzL2Jhc2tldC50b29scy5qcyIsInN0YXRpYy9qcy9jb21tb24uanMiLCJzdGF0aWMvanMvb3VyX3NlYXJjaF9jb2RlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUNQQTtBQ0FBO0FDQUE7QUFDQTtBQ0RBO0FDQUE7QUNBQTtBQ0FBO0FDQUEiLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIhZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZS5kb2N1bWVudD90KGUsITApOmZ1bmN0aW9uKGUpe2lmKCFlLmRvY3VtZW50KXRocm93IG5ldyBFcnJvcihcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIik7cmV0dXJuIHQoZSl9OnQoZSl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKGUsdCxuKXt0PXR8fGFlO3ZhciByLGk9dC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO2lmKGkudGV4dD1lLG4pZm9yKHIgaW4gYmUpbltyXSYmKGlbcl09bltyXSk7dC5oZWFkLmFwcGVuZENoaWxkKGkpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoaSl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gbnVsbD09ZT9lK1wiXCI6XCJvYmplY3RcIj09dHlwZW9mIGV8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/cGVbZGUuY2FsbChlKV18fFwib2JqZWN0XCI6dHlwZW9mIGV9ZnVuY3Rpb24gaShlKXt2YXIgdD0hIWUmJlwibGVuZ3RoXCJpbiBlJiZlLmxlbmd0aCxuPXIoZSk7cmV0dXJuIW1lKGUpJiYheGUoZSkmJihcImFycmF5XCI9PT1ufHwwPT09dHx8XCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+MCYmdC0xIGluIGUpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dC50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGEoZSx0LG4pe3JldHVybiBtZSh0KT93ZS5ncmVwKGUsZnVuY3Rpb24oZSxyKXtyZXR1cm4hIXQuY2FsbChlLHIsZSkhPT1ufSk6dC5ub2RlVHlwZT93ZS5ncmVwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10IT09bn0pOlwic3RyaW5nXCIhPXR5cGVvZiB0P3dlLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZmUuY2FsbCh0LGUpPi0xIT09bn0pOndlLmZpbHRlcih0LGUsbil9ZnVuY3Rpb24gcyhlLHQpe2Zvcig7KGU9ZVt0XSkmJjEhPT1lLm5vZGVUeXBlOyk7cmV0dXJuIGV9ZnVuY3Rpb24gdShlKXt2YXIgdD17fTtyZXR1cm4gd2UuZWFjaChlLm1hdGNoKExlKXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH1mdW5jdGlvbiBsKGUpe3JldHVybiBlfWZ1bmN0aW9uIGMoZSl7dGhyb3cgZX1mdW5jdGlvbiBmKGUsdCxuLHIpe3ZhciBpO3RyeXtlJiZtZShpPWUucHJvbWlzZSk/aS5jYWxsKGUpLmRvbmUodCkuZmFpbChuKTplJiZtZShpPWUudGhlbik/aS5jYWxsKGUsdCxuKTp0LmFwcGx5KHZvaWQgMCxbZV0uc2xpY2UocikpfWNhdGNoKGUpe24uYXBwbHkodm9pZCAwLFtlXSl9fWZ1bmN0aW9uIHAoKXthZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLHApLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRcIixwKSx3ZS5yZWFkeSgpfWZ1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGUucmVwbGFjZShNZSxcIm1zLVwiKS5yZXBsYWNlKFJlLGQpfWZ1bmN0aW9uIGcoKXt0aGlzLmV4cGFuZG89d2UuZXhwYW5kbytnLnVpZCsrfWZ1bmN0aW9uIHYoZSl7cmV0dXJuXCJ0cnVlXCI9PT1lfHxcImZhbHNlXCIhPT1lJiYoXCJudWxsXCI9PT1lP251bGw6ZT09PStlK1wiXCI/K2U6QmUudGVzdChlKT9KU09OLnBhcnNlKGUpOmUpfWZ1bmN0aW9uIHkoZSx0LG4pe3ZhciByO2lmKHZvaWQgMD09PW4mJjE9PT1lLm5vZGVUeXBlKWlmKHI9XCJkYXRhLVwiK3QucmVwbGFjZShGZSxcIi0kJlwiKS50b0xvd2VyQ2FzZSgpLFwic3RyaW5nXCI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKHIpKSl7dHJ5e249dihuKX1jYXRjaChlKXt9JGUuc2V0KGUsdCxuKX1lbHNlIG49dm9pZCAwO3JldHVybiBufWZ1bmN0aW9uIG0oZSx0LG4scil7dmFyIGksbyxhPTIwLHM9cj9mdW5jdGlvbigpe3JldHVybiByLmN1cigpfTpmdW5jdGlvbigpe3JldHVybiB3ZS5jc3MoZSx0LFwiXCIpfSx1PXMoKSxsPW4mJm5bM118fCh3ZS5jc3NOdW1iZXJbdF0/XCJcIjpcInB4XCIpLGM9KHdlLmNzc051bWJlclt0XXx8XCJweFwiIT09bCYmK3UpJiZ6ZS5leGVjKHdlLmNzcyhlLHQpKTtpZihjJiZjWzNdIT09bCl7Zm9yKHUvPTIsbD1sfHxjWzNdLGM9K3V8fDE7YS0tOyl3ZS5zdHlsZShlLHQsYytsKSwoMS1vKSooMS0obz1zKCkvdXx8LjUpKTw9MCYmKGE9MCksYy89bztjKj0yLHdlLnN0eWxlKGUsdCxjK2wpLG49bnx8W119cmV0dXJuIG4mJihjPStjfHwrdXx8MCxpPW5bMV0/YysoblsxXSsxKSpuWzJdOituWzJdLHImJihyLnVuaXQ9bCxyLnN0YXJ0PWMsci5lbmQ9aSkpLGl9ZnVuY3Rpb24geChlKXt2YXIgdCxuPWUub3duZXJEb2N1bWVudCxyPWUubm9kZU5hbWUsaT1HZVtyXTtyZXR1cm4gaXx8KHQ9bi5ib2R5LmFwcGVuZENoaWxkKG4uY3JlYXRlRWxlbWVudChyKSksaT13ZS5jc3ModCxcImRpc3BsYXlcIiksdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLFwibm9uZVwiPT09aSYmKGk9XCJibG9ja1wiKSxHZVtyXT1pLGkpfWZ1bmN0aW9uIGIoZSx0KXtmb3IodmFyIG4scixpPVtdLG89MCxhPWUubGVuZ3RoO288YTtvKyspcj1lW29dLHIuc3R5bGUmJihuPXIuc3R5bGUuZGlzcGxheSx0PyhcIm5vbmVcIj09PW4mJihpW29dPVdlLmdldChyLFwiZGlzcGxheVwiKXx8bnVsbCxpW29dfHwoci5zdHlsZS5kaXNwbGF5PVwiXCIpKSxcIlwiPT09ci5zdHlsZS5kaXNwbGF5JiZVZShyKSYmKGlbb109eChyKSkpOlwibm9uZVwiIT09biYmKGlbb109XCJub25lXCIsV2Uuc2V0KHIsXCJkaXNwbGF5XCIsbikpKTtmb3Iobz0wO288YTtvKyspbnVsbCE9aVtvXSYmKGVbb10uc3R5bGUuZGlzcGxheT1pW29dKTtyZXR1cm4gZX1mdW5jdGlvbiB3KGUsdCl7dmFyIG47cmV0dXJuIG49dm9pZCAwIT09ZS5nZXRFbGVtZW50c0J5VGFnTmFtZT9lLmdldEVsZW1lbnRzQnlUYWdOYW1lKHR8fFwiKlwiKTp2b2lkIDAhPT1lLnF1ZXJ5U2VsZWN0b3JBbGw/ZS5xdWVyeVNlbGVjdG9yQWxsKHR8fFwiKlwiKTpbXSx2b2lkIDA9PT10fHx0JiZvKGUsdCk/d2UubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gVChlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKylXZS5zZXQoZVtuXSxcImdsb2JhbEV2YWxcIiwhdHx8V2UuZ2V0KHRbbl0sXCJnbG9iYWxFdmFsXCIpKX1mdW5jdGlvbiBDKGUsdCxuLGksbyl7Zm9yKHZhciBhLHMsdSxsLGMsZixwPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W10saD0wLGc9ZS5sZW5ndGg7aDxnO2grKylpZigoYT1lW2hdKXx8MD09PWEpaWYoXCJvYmplY3RcIj09PXIoYSkpd2UubWVyZ2UoZCxhLm5vZGVUeXBlP1thXTphKTtlbHNlIGlmKFplLnRlc3QoYSkpe2ZvcihzPXN8fHAuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSx1PShRZS5leGVjKGEpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKSxsPUtlW3VdfHxLZS5fZGVmYXVsdCxzLmlubmVySFRNTD1sWzFdK3dlLmh0bWxQcmVmaWx0ZXIoYSkrbFsyXSxmPWxbMF07Zi0tOylzPXMubGFzdENoaWxkO3dlLm1lcmdlKGQscy5jaGlsZE5vZGVzKSxzPXAuZmlyc3RDaGlsZCxzLnRleHRDb250ZW50PVwiXCJ9ZWxzZSBkLnB1c2godC5jcmVhdGVUZXh0Tm9kZShhKSk7Zm9yKHAudGV4dENvbnRlbnQ9XCJcIixoPTA7YT1kW2grK107KWlmKGkmJndlLmluQXJyYXkoYSxpKT4tMSlvJiZvLnB1c2goYSk7ZWxzZSBpZihjPXdlLmNvbnRhaW5zKGEub3duZXJEb2N1bWVudCxhKSxzPXcocC5hcHBlbmRDaGlsZChhKSxcInNjcmlwdFwiKSxjJiZUKHMpLG4pZm9yKGY9MDthPXNbZisrXTspSmUudGVzdChhLnR5cGV8fFwiXCIpJiZuLnB1c2goYSk7cmV0dXJuIHB9ZnVuY3Rpb24gRSgpe3JldHVybiEwfWZ1bmN0aW9uIGsoKXtyZXR1cm4hMX1mdW5jdGlvbiBTKCl7dHJ5e3JldHVybiBhZS5hY3RpdmVFbGVtZW50fWNhdGNoKGUpe319ZnVuY3Rpb24gRChlLHQsbixyLGksbyl7dmFyIGEscztpZihcIm9iamVjdFwiPT10eXBlb2YgdCl7XCJzdHJpbmdcIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj12b2lkIDApO2ZvcihzIGluIHQpRChlLHMsbixyLHRbc10sbyk7cmV0dXJuIGV9aWYobnVsbD09ciYmbnVsbD09aT8oaT1uLHI9bj12b2lkIDApOm51bGw9PWkmJihcInN0cmluZ1wiPT10eXBlb2Ygbj8oaT1yLHI9dm9pZCAwKTooaT1yLHI9bixuPXZvaWQgMCkpLCExPT09aSlpPWs7ZWxzZSBpZighaSlyZXR1cm4gZTtyZXR1cm4gMT09PW8mJihhPWksaT1mdW5jdGlvbihlKXtyZXR1cm4gd2UoKS5vZmYoZSksYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1hLmd1aWR8fChhLmd1aWQ9d2UuZ3VpZCsrKSksZS5lYWNoKGZ1bmN0aW9uKCl7d2UuZXZlbnQuYWRkKHRoaXMsdCxpLHIsbil9KX1mdW5jdGlvbiBOKGUsdCl7cmV0dXJuIG8oZSxcInRhYmxlXCIpJiZvKDExIT09dC5ub2RlVHlwZT90OnQuZmlyc3RDaGlsZCxcInRyXCIpP3dlKGUpLmNoaWxkcmVuKFwidGJvZHlcIilbMF18fGU6ZX1mdW5jdGlvbiBBKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZShcInR5cGVcIikpK1wiL1wiK2UudHlwZSxlfWZ1bmN0aW9uIGooZSl7cmV0dXJuXCJ0cnVlL1wiPT09KGUudHlwZXx8XCJcIikuc2xpY2UoMCw1KT9lLnR5cGU9ZS50eXBlLnNsaWNlKDUpOmUucmVtb3ZlQXR0cmlidXRlKFwidHlwZVwiKSxlfWZ1bmN0aW9uIHEoZSx0KXt2YXIgbixyLGksbyxhLHMsdSxsO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihXZS5oYXNEYXRhKGUpJiYobz1XZS5hY2Nlc3MoZSksYT1XZS5zZXQodCxvKSxsPW8uZXZlbnRzKSl7ZGVsZXRlIGEuaGFuZGxlLGEuZXZlbnRzPXt9O2ZvcihpIGluIGwpZm9yKG49MCxyPWxbaV0ubGVuZ3RoO248cjtuKyspd2UuZXZlbnQuYWRkKHQsaSxsW2ldW25dKX0kZS5oYXNEYXRhKGUpJiYocz0kZS5hY2Nlc3MoZSksdT13ZS5leHRlbmQoe30scyksJGUuc2V0KHQsdSkpfX1mdW5jdGlvbiBMKGUsdCl7dmFyIG49dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1wiaW5wdXRcIj09PW4mJlllLnRlc3QoZS50eXBlKT90LmNoZWNrZWQ9ZS5jaGVja2VkOlwiaW5wdXRcIiE9PW4mJlwidGV4dGFyZWFcIiE9PW58fCh0LmRlZmF1bHRWYWx1ZT1lLmRlZmF1bHRWYWx1ZSl9ZnVuY3Rpb24gSChlLHQscixpKXt0PWxlLmFwcGx5KFtdLHQpO3ZhciBvLGEscyx1LGwsYyxmPTAscD1lLmxlbmd0aCxkPXAtMSxoPXRbMF0sZz1tZShoKTtpZihnfHxwPjEmJlwic3RyaW5nXCI9PXR5cGVvZiBoJiYheWUuY2hlY2tDbG9uZSYmYXQudGVzdChoKSlyZXR1cm4gZS5lYWNoKGZ1bmN0aW9uKG4pe3ZhciBvPWUuZXEobik7ZyYmKHRbMF09aC5jYWxsKHRoaXMsbixvLmh0bWwoKSkpLEgobyx0LHIsaSl9KTtpZihwJiYobz1DKHQsZVswXS5vd25lckRvY3VtZW50LCExLGUsaSksYT1vLmZpcnN0Q2hpbGQsMT09PW8uY2hpbGROb2Rlcy5sZW5ndGgmJihvPWEpLGF8fGkpKXtmb3Iocz13ZS5tYXAodyhvLFwic2NyaXB0XCIpLEEpLHU9cy5sZW5ndGg7ZjxwO2YrKylsPW8sZiE9PWQmJihsPXdlLmNsb25lKGwsITAsITApLHUmJndlLm1lcmdlKHMsdyhsLFwic2NyaXB0XCIpKSksci5jYWxsKGVbZl0sbCxmKTtpZih1KWZvcihjPXNbcy5sZW5ndGgtMV0ub3duZXJEb2N1bWVudCx3ZS5tYXAocyxqKSxmPTA7Zjx1O2YrKylsPXNbZl0sSmUudGVzdChsLnR5cGV8fFwiXCIpJiYhV2UuYWNjZXNzKGwsXCJnbG9iYWxFdmFsXCIpJiZ3ZS5jb250YWlucyhjLGwpJiYobC5zcmMmJlwibW9kdWxlXCIhPT0obC50eXBlfHxcIlwiKS50b0xvd2VyQ2FzZSgpP3dlLl9ldmFsVXJsJiZ3ZS5fZXZhbFVybChsLnNyYyk6bihsLnRleHRDb250ZW50LnJlcGxhY2Uoc3QsXCJcIiksYyxsKSl9cmV0dXJuIGV9ZnVuY3Rpb24gTyhlLHQsbil7Zm9yKHZhciByLGk9dD93ZS5maWx0ZXIodCxlKTplLG89MDtudWxsIT0ocj1pW29dKTtvKyspbnx8MSE9PXIubm9kZVR5cGV8fHdlLmNsZWFuRGF0YSh3KHIpKSxyLnBhcmVudE5vZGUmJihuJiZ3ZS5jb250YWlucyhyLm93bmVyRG9jdW1lbnQscikmJlQodyhyLFwic2NyaXB0XCIpKSxyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocikpO3JldHVybiBlfWZ1bmN0aW9uIFAoZSx0LG4pe3ZhciByLGksbyxhLHM9ZS5zdHlsZTtyZXR1cm4gbj1ufHxsdChlKSxuJiYoYT1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0sXCJcIiE9PWF8fHdlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGE9d2Uuc3R5bGUoZSx0KSksIXllLnBpeGVsQm94U3R5bGVzKCkmJnV0LnRlc3QoYSkmJmN0LnRlc3QodCkmJihyPXMud2lkdGgsaT1zLm1pbldpZHRoLG89cy5tYXhXaWR0aCxzLm1pbldpZHRoPXMubWF4V2lkdGg9cy53aWR0aD1hLGE9bi53aWR0aCxzLndpZHRoPXIscy5taW5XaWR0aD1pLHMubWF4V2lkdGg9bykpLHZvaWQgMCE9PWE/YStcIlwiOmF9ZnVuY3Rpb24gTShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSgpP3ZvaWQgZGVsZXRlIHRoaXMuZ2V0Oih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX1mdW5jdGlvbiBSKGUpe2lmKGUgaW4gdnQpcmV0dXJuIGU7Zm9yKHZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49Z3QubGVuZ3RoO24tLTspaWYoKGU9Z3Rbbl0rdClpbiB2dClyZXR1cm4gZX1mdW5jdGlvbiBJKGUpe3ZhciB0PXdlLmNzc1Byb3BzW2VdO3JldHVybiB0fHwodD13ZS5jc3NQcm9wc1tlXT1SKGUpfHxlKSx0fWZ1bmN0aW9uIFcoZSx0LG4pe3ZhciByPXplLmV4ZWModCk7cmV0dXJuIHI/TWF0aC5tYXgoMCxyWzJdLShufHwwKSkrKHJbM118fFwicHhcIik6dH1mdW5jdGlvbiAkKGUsdCxuLHIsaSxvKXt2YXIgYT1cIndpZHRoXCI9PT10PzE6MCxzPTAsdT0wO2lmKG49PT0ocj9cImJvcmRlclwiOlwiY29udGVudFwiKSlyZXR1cm4gMDtmb3IoO2E8NDthKz0yKVwibWFyZ2luXCI9PT1uJiYodSs9d2UuY3NzKGUsbitYZVthXSwhMCxpKSkscj8oXCJjb250ZW50XCI9PT1uJiYodS09d2UuY3NzKGUsXCJwYWRkaW5nXCIrWGVbYV0sITAsaSkpLFwibWFyZ2luXCIhPT1uJiYodS09d2UuY3NzKGUsXCJib3JkZXJcIitYZVthXStcIldpZHRoXCIsITAsaSkpKToodSs9d2UuY3NzKGUsXCJwYWRkaW5nXCIrWGVbYV0sITAsaSksXCJwYWRkaW5nXCIhPT1uP3UrPXdlLmNzcyhlLFwiYm9yZGVyXCIrWGVbYV0rXCJXaWR0aFwiLCEwLGkpOnMrPXdlLmNzcyhlLFwiYm9yZGVyXCIrWGVbYV0rXCJXaWR0aFwiLCEwLGkpKTtyZXR1cm4hciYmbz49MCYmKHUrPU1hdGgubWF4KDAsTWF0aC5jZWlsKGVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0tby11LXMtLjUpKSksdX1mdW5jdGlvbiBCKGUsdCxuKXt2YXIgcj1sdChlKSxpPVAoZSx0LHIpLG89XCJib3JkZXItYm94XCI9PT13ZS5jc3MoZSxcImJveFNpemluZ1wiLCExLHIpLGE9bztpZih1dC50ZXN0KGkpKXtpZighbilyZXR1cm4gaTtpPVwiYXV0b1wifXJldHVybiBhPWEmJih5ZS5ib3hTaXppbmdSZWxpYWJsZSgpfHxpPT09ZS5zdHlsZVt0XSksKFwiYXV0b1wiPT09aXx8IXBhcnNlRmxvYXQoaSkmJlwiaW5saW5lXCI9PT13ZS5jc3MoZSxcImRpc3BsYXlcIiwhMSxyKSkmJihpPWVbXCJvZmZzZXRcIit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKV0sYT0hMCksKGk9cGFyc2VGbG9hdChpKXx8MCkrJChlLHQsbnx8KG8/XCJib3JkZXJcIjpcImNvbnRlbnRcIiksYSxyLGkpK1wicHhcIn1mdW5jdGlvbiBGKGUsdCxuLHIsaSl7cmV0dXJuIG5ldyBGLnByb3RvdHlwZS5pbml0KGUsdCxuLHIsaSl9ZnVuY3Rpb24gXygpe210JiYoITE9PT1hZS5oaWRkZW4mJmUucmVxdWVzdEFuaW1hdGlvbkZyYW1lP2UucmVxdWVzdEFuaW1hdGlvbkZyYW1lKF8pOmUuc2V0VGltZW91dChfLHdlLmZ4LmludGVydmFsKSx3ZS5meC50aWNrKCkpfWZ1bmN0aW9uIHooKXtyZXR1cm4gZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7eXQ9dm9pZCAwfSkseXQ9RGF0ZS5ub3coKX1mdW5jdGlvbiBYKGUsdCl7dmFyIG4scj0wLGk9e2hlaWdodDplfTtmb3IodD10PzE6MDtyPDQ7cis9Mi10KW49WGVbcl0saVtcIm1hcmdpblwiK25dPWlbXCJwYWRkaW5nXCIrbl09ZTtyZXR1cm4gdCYmKGkub3BhY2l0eT1pLndpZHRoPWUpLGl9ZnVuY3Rpb24gVShlLHQsbil7Zm9yKHZhciByLGk9KFkudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoWS50d2VlbmVyc1tcIipcIl0pLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYocj1pW29dLmNhbGwobix0LGUpKXJldHVybiByfWZ1bmN0aW9uIFYoZSx0LG4pe3ZhciByLGksbyxhLHMsdSxsLGMsZj1cIndpZHRoXCJpbiB0fHxcImhlaWdodFwiaW4gdCxwPXRoaXMsZD17fSxoPWUuc3R5bGUsZz1lLm5vZGVUeXBlJiZVZShlKSx2PVdlLmdldChlLFwiZnhzaG93XCIpO24ucXVldWV8fChhPXdlLl9xdWV1ZUhvb2tzKGUsXCJmeFwiKSxudWxsPT1hLnVucXVldWVkJiYoYS51bnF1ZXVlZD0wLHM9YS5lbXB0eS5maXJlLGEuZW1wdHkuZmlyZT1mdW5jdGlvbigpe2EudW5xdWV1ZWR8fHMoKX0pLGEudW5xdWV1ZWQrKyxwLmFsd2F5cyhmdW5jdGlvbigpe3AuYWx3YXlzKGZ1bmN0aW9uKCl7YS51bnF1ZXVlZC0tLHdlLnF1ZXVlKGUsXCJmeFwiKS5sZW5ndGh8fGEuZW1wdHkuZmlyZSgpfSl9KSk7Zm9yKHIgaW4gdClpZihpPXRbcl0seHQudGVzdChpKSl7aWYoZGVsZXRlIHRbcl0sbz1vfHxcInRvZ2dsZVwiPT09aSxpPT09KGc/XCJoaWRlXCI6XCJzaG93XCIpKXtpZihcInNob3dcIiE9PWl8fCF2fHx2b2lkIDA9PT12W3JdKWNvbnRpbnVlO2c9ITB9ZFtyXT12JiZ2W3JdfHx3ZS5zdHlsZShlLHIpfWlmKCh1PSF3ZS5pc0VtcHR5T2JqZWN0KHQpKXx8IXdlLmlzRW1wdHlPYmplY3QoZCkpe2YmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1baC5vdmVyZmxvdyxoLm92ZXJmbG93WCxoLm92ZXJmbG93WV0sbD12JiZ2LmRpc3BsYXksbnVsbD09bCYmKGw9V2UuZ2V0KGUsXCJkaXNwbGF5XCIpKSxjPXdlLmNzcyhlLFwiZGlzcGxheVwiKSxcIm5vbmVcIj09PWMmJihsP2M9bDooYihbZV0sITApLGw9ZS5zdHlsZS5kaXNwbGF5fHxsLGM9d2UuY3NzKGUsXCJkaXNwbGF5XCIpLGIoW2VdKSkpLChcImlubGluZVwiPT09Y3x8XCJpbmxpbmUtYmxvY2tcIj09PWMmJm51bGwhPWwpJiZcIm5vbmVcIj09PXdlLmNzcyhlLFwiZmxvYXRcIikmJih1fHwocC5kb25lKGZ1bmN0aW9uKCl7aC5kaXNwbGF5PWx9KSxudWxsPT1sJiYoYz1oLmRpc3BsYXksbD1cIm5vbmVcIj09PWM/XCJcIjpjKSksaC5kaXNwbGF5PVwiaW5saW5lLWJsb2NrXCIpKSxuLm92ZXJmbG93JiYoaC5vdmVyZmxvdz1cImhpZGRlblwiLHAuYWx3YXlzKGZ1bmN0aW9uKCl7aC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLGgub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0saC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKSx1PSExO2ZvcihyIGluIGQpdXx8KHY/XCJoaWRkZW5cImluIHYmJihnPXYuaGlkZGVuKTp2PVdlLmFjY2VzcyhlLFwiZnhzaG93XCIse2Rpc3BsYXk6bH0pLG8mJih2LmhpZGRlbj0hZyksZyYmYihbZV0sITApLHAuZG9uZShmdW5jdGlvbigpe2d8fGIoW2VdKSxXZS5yZW1vdmUoZSxcImZ4c2hvd1wiKTtmb3IociBpbiBkKXdlLnN0eWxlKGUscixkW3JdKX0pKSx1PVUoZz92W3JdOjAscixwKSxyIGluIHZ8fCh2W3JdPXUuc3RhcnQsZyYmKHUuZW5kPXUuc3RhcnQsdS5zdGFydD0wKSl9fWZ1bmN0aW9uIEcoZSx0KXt2YXIgbixyLGksbyxhO2ZvcihuIGluIGUpaWYocj1oKG4pLGk9dFtyXSxvPWVbbl0sQXJyYXkuaXNBcnJheShvKSYmKGk9b1sxXSxvPWVbbl09b1swXSksbiE9PXImJihlW3JdPW8sZGVsZXRlIGVbbl0pLChhPXdlLmNzc0hvb2tzW3JdKSYmXCJleHBhbmRcImluIGEpe289YS5leHBhbmQobyksZGVsZXRlIGVbcl07Zm9yKG4gaW4gbyluIGluIGV8fChlW25dPW9bbl0sdFtuXT1pKX1lbHNlIHRbcl09aX1mdW5jdGlvbiBZKGUsdCxuKXt2YXIgcixpLG89MCxhPVkucHJlZmlsdGVycy5sZW5ndGgscz13ZS5EZWZlcnJlZCgpLmFsd2F5cyhmdW5jdGlvbigpe2RlbGV0ZSB1LmVsZW19KSx1PWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4hMTtmb3IodmFyIHQ9eXR8fHooKSxuPU1hdGgubWF4KDAsbC5zdGFydFRpbWUrbC5kdXJhdGlvbi10KSxyPW4vbC5kdXJhdGlvbnx8MCxvPTEtcixhPTAsdT1sLnR3ZWVucy5sZW5ndGg7YTx1O2ErKylsLnR3ZWVuc1thXS5ydW4obyk7cmV0dXJuIHMubm90aWZ5V2l0aChlLFtsLG8sbl0pLG88MSYmdT9uOih1fHxzLm5vdGlmeVdpdGgoZSxbbCwxLDBdKSxzLnJlc29sdmVXaXRoKGUsW2xdKSwhMSl9LGw9cy5wcm9taXNlKHtlbGVtOmUscHJvcHM6d2UuZXh0ZW5kKHt9LHQpLG9wdHM6d2UuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9LGVhc2luZzp3ZS5lYXNpbmcuX2RlZmF1bHR9LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTp5dHx8eigpLGR1cmF0aW9uOm4uZHVyYXRpb24sdHdlZW5zOltdLGNyZWF0ZVR3ZWVuOmZ1bmN0aW9uKHQsbil7dmFyIHI9d2UuVHdlZW4oZSxsLm9wdHMsdCxuLGwub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxsLm9wdHMuZWFzaW5nKTtyZXR1cm4gbC50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2wudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7bjxyO24rKylsLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/KHMubm90aWZ5V2l0aChlLFtsLDEsMF0pLHMucmVzb2x2ZVdpdGgoZSxbbCx0XSkpOnMucmVqZWN0V2l0aChlLFtsLHRdKSx0aGlzfX0pLGM9bC5wcm9wcztmb3IoRyhjLGwub3B0cy5zcGVjaWFsRWFzaW5nKTtvPGE7bysrKWlmKHI9WS5wcmVmaWx0ZXJzW29dLmNhbGwobCxlLGMsbC5vcHRzKSlyZXR1cm4gbWUoci5zdG9wKSYmKHdlLl9xdWV1ZUhvb2tzKGwuZWxlbSxsLm9wdHMucXVldWUpLnN0b3A9ci5zdG9wLmJpbmQocikpLHI7cmV0dXJuIHdlLm1hcChjLFUsbCksbWUobC5vcHRzLnN0YXJ0KSYmbC5vcHRzLnN0YXJ0LmNhbGwoZSxsKSxsLnByb2dyZXNzKGwub3B0cy5wcm9ncmVzcykuZG9uZShsLm9wdHMuZG9uZSxsLm9wdHMuY29tcGxldGUpLmZhaWwobC5vcHRzLmZhaWwpLmFsd2F5cyhsLm9wdHMuYWx3YXlzKSx3ZS5meC50aW1lcih3ZS5leHRlbmQodSx7ZWxlbTplLGFuaW06bCxxdWV1ZTpsLm9wdHMucXVldWV9KSksbH1mdW5jdGlvbiBRKGUpe3JldHVybihlLm1hdGNoKExlKXx8W10pLmpvaW4oXCIgXCIpfWZ1bmN0aW9uIEooZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpfHxcIlwifWZ1bmN0aW9uIEsoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZTpcInN0cmluZ1wiPT10eXBlb2YgZT9lLm1hdGNoKExlKXx8W106W119ZnVuY3Rpb24gWihlLHQsbixpKXt2YXIgbztpZihBcnJheS5pc0FycmF5KHQpKXdlLmVhY2godCxmdW5jdGlvbih0LHIpe258fHF0LnRlc3QoZSk/aShlLHIpOlooZStcIltcIisoXCJvYmplY3RcIj09dHlwZW9mIHImJm51bGwhPXI/dDpcIlwiKStcIl1cIixyLG4saSl9KTtlbHNlIGlmKG58fFwib2JqZWN0XCIhPT1yKHQpKWkoZSx0KTtlbHNlIGZvcihvIGluIHQpWihlK1wiW1wiK28rXCJdXCIsdFtvXSxuLGkpfWZ1bmN0aW9uIGVlKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe1wic3RyaW5nXCIhPXR5cGVvZiB0JiYobj10LHQ9XCIqXCIpO3ZhciByLGk9MCxvPXQudG9Mb3dlckNhc2UoKS5tYXRjaChMZSl8fFtdO2lmKG1lKG4pKWZvcig7cj1vW2krK107KVwiK1wiPT09clswXT8ocj1yLnNsaWNlKDEpfHxcIipcIiwoZVtyXT1lW3JdfHxbXSkudW5zaGlmdChuKSk6KGVbcl09ZVtyXXx8W10pLnB1c2gobil9fWZ1bmN0aW9uIHRlKGUsdCxuLHIpe2Z1bmN0aW9uIGkocyl7dmFyIHU7cmV0dXJuIG9bc109ITAsd2UuZWFjaChlW3NdfHxbXSxmdW5jdGlvbihlLHMpe3ZhciBsPXModCxuLHIpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBsfHxhfHxvW2xdP2E/ISh1PWwpOnZvaWQgMDoodC5kYXRhVHlwZXMudW5zaGlmdChsKSxpKGwpLCExKX0pLHV9dmFyIG89e30sYT1lPT09X3Q7cmV0dXJuIGkodC5kYXRhVHlwZXNbMF0pfHwhb1tcIipcIl0mJmkoXCIqXCIpfWZ1bmN0aW9uIG5lKGUsdCl7dmFyIG4scixpPXdlLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl2b2lkIDAhPT10W25dJiYoKGlbbl0/ZTpyfHwocj17fSkpW25dPXRbbl0pO3JldHVybiByJiZ3ZS5leHRlbmQoITAsZSxyKSxlfWZ1bmN0aW9uIHJlKGUsdCxuKXtmb3IodmFyIHIsaSxvLGEscz1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7XCIqXCI9PT11WzBdOyl1LnNoaWZ0KCksdm9pZCAwPT09ciYmKHI9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKSk7aWYocilmb3IoaSBpbiBzKWlmKHNbaV0mJnNbaV0udGVzdChyKSl7dS51bnNoaWZ0KGkpO2JyZWFrfWlmKHVbMF1pbiBuKW89dVswXTtlbHNle2ZvcihpIGluIG4pe2lmKCF1WzBdfHxlLmNvbnZlcnRlcnNbaStcIiBcIit1WzBdXSl7bz1pO2JyZWFrfWF8fChhPWkpfW89b3x8YX1pZihvKXJldHVybiBvIT09dVswXSYmdS51bnNoaWZ0KG8pLG5bb119ZnVuY3Rpb24gaWUoZSx0LG4scil7dmFyIGksbyxhLHMsdSxsPXt9LGM9ZS5kYXRhVHlwZXMuc2xpY2UoKTtpZihjWzFdKWZvcihhIGluIGUuY29udmVydGVycylsW2EudG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW2FdO2ZvcihvPWMuc2hpZnQoKTtvOylpZihlLnJlc3BvbnNlRmllbGRzW29dJiYobltlLnJlc3BvbnNlRmllbGRzW29dXT10KSwhdSYmciYmZS5kYXRhRmlsdGVyJiYodD1lLmRhdGFGaWx0ZXIodCxlLmRhdGFUeXBlKSksdT1vLG89Yy5zaGlmdCgpKWlmKFwiKlwiPT09bylvPXU7ZWxzZSBpZihcIipcIiE9PXUmJnUhPT1vKXtpZighKGE9bFt1K1wiIFwiK29dfHxsW1wiKiBcIitvXSkpZm9yKGkgaW4gbClpZihzPWkuc3BsaXQoXCIgXCIpLHNbMV09PT1vJiYoYT1sW3UrXCIgXCIrc1swXV18fGxbXCIqIFwiK3NbMF1dKSl7ITA9PT1hP2E9bFtpXTohMCE9PWxbaV0mJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZighMCE9PWEpaWYoYSYmZS50aHJvd3MpdD1hKHQpO2Vsc2UgdHJ5e3Q9YSh0KX1jYXRjaChlKXtyZXR1cm57c3RhdGU6XCJwYXJzZXJlcnJvclwiLGVycm9yOmE/ZTpcIk5vIGNvbnZlcnNpb24gZnJvbSBcIit1K1wiIHRvIFwiK299fX1yZXR1cm57c3RhdGU6XCJzdWNjZXNzXCIsZGF0YTp0fX12YXIgb2U9W10sYWU9ZS5kb2N1bWVudCxzZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YsdWU9b2Uuc2xpY2UsbGU9b2UuY29uY2F0LGNlPW9lLnB1c2gsZmU9b2UuaW5kZXhPZixwZT17fSxkZT1wZS50b1N0cmluZyxoZT1wZS5oYXNPd25Qcm9wZXJ0eSxnZT1oZS50b1N0cmluZyx2ZT1nZS5jYWxsKE9iamVjdCkseWU9e30sbWU9ZnVuY3Rpb24oZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgZSYmXCJudW1iZXJcIiE9dHlwZW9mIGUubm9kZVR5cGV9LHhlPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiZlPT09ZS53aW5kb3d9LGJlPXt0eXBlOiEwLHNyYzohMCxub01vZHVsZTohMH0sd2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHdlLmZuLmluaXQoZSx0KX0sVGU9L15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO3dlLmZuPXdlLnByb3RvdHlwZT17anF1ZXJ5OlwiMy4zLjFcIixjb25zdHJ1Y3Rvcjp3ZSxsZW5ndGg6MCx0b0FycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHVlLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT91ZS5jYWxsKHRoaXMpOmU8MD90aGlzW2UrdGhpcy5sZW5ndGhdOnRoaXNbZV19LHB1c2hTdGFjazpmdW5jdGlvbihlKXt2YXIgdD13ZS5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHR9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmVhY2godGhpcyxlKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh3ZS5tYXAodGhpcyxmdW5jdGlvbih0LG4pe3JldHVybiBlLmNhbGwodCxuLHQpfSkpfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayh1ZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxlcTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmxlbmd0aCxuPStlKyhlPDA/dDowKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobj49MCYmbjx0P1t0aGlzW25dXTpbXSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IoKX0scHVzaDpjZSxzb3J0Om9lLnNvcnQsc3BsaWNlOm9lLnNwbGljZX0sd2UuZXh0ZW5kPXdlLmZuLmV4dGVuZD1mdW5jdGlvbigpe3ZhciBlLHQsbixyLGksbyxhPWFyZ3VtZW50c1swXXx8e30scz0xLHU9YXJndW1lbnRzLmxlbmd0aCxsPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIGEmJihsPWEsYT1hcmd1bWVudHNbc118fHt9LHMrKyksXCJvYmplY3RcIj09dHlwZW9mIGF8fG1lKGEpfHwoYT17fSkscz09PXUmJihhPXRoaXMscy0tKTtzPHU7cysrKWlmKG51bGwhPShlPWFyZ3VtZW50c1tzXSkpZm9yKHQgaW4gZSluPWFbdF0scj1lW3RdLGEhPT1yJiYobCYmciYmKHdlLmlzUGxhaW5PYmplY3Qocil8fChpPUFycmF5LmlzQXJyYXkocikpKT8oaT8oaT0hMSxvPW4mJkFycmF5LmlzQXJyYXkobik/bjpbXSk6bz1uJiZ3ZS5pc1BsYWluT2JqZWN0KG4pP246e30sYVt0XT13ZS5leHRlbmQobCxvLHIpKTp2b2lkIDAhPT1yJiYoYVt0XT1yKSk7cmV0dXJuIGF9LHdlLmV4dGVuZCh7ZXhwYW5kbzpcImpRdWVyeVwiKyhcIjMuMy4xXCIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXFxEL2csXCJcIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQsbjtyZXR1cm4hKCFlfHxcIltvYmplY3QgT2JqZWN0XVwiIT09ZGUuY2FsbChlKSkmJighKHQ9c2UoZSkpfHxcImZ1bmN0aW9uXCI9PXR5cGVvZihuPWhlLmNhbGwodCxcImNvbnN0cnVjdG9yXCIpJiZ0LmNvbnN0cnVjdG9yKSYmZ2UuY2FsbChuKT09PXZlKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUpe24oZSl9LGVhY2g6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTA7aWYoaShlKSlmb3Iobj1lLmxlbmd0aDtyPG4mJiExIT09dC5jYWxsKGVbcl0scixlW3JdKTtyKyspO2Vsc2UgZm9yKHIgaW4gZSlpZighMT09PXQuY2FsbChlW3JdLHIsZVtyXSkpYnJlYWs7cmV0dXJuIGV9LHRyaW06ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/XCJcIjooZStcIlwiKS5yZXBsYWNlKFRlLFwiXCIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKGkoT2JqZWN0KGUpKT93ZS5tZXJnZShuLFwic3RyaW5nXCI9PXR5cGVvZiBlP1tlXTplKTpjZS5jYWxsKG4sZSkpLG59LGluQXJyYXk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBudWxsPT10Py0xOmZlLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgscj0wLGk9ZS5sZW5ndGg7cjxuO3IrKyllW2krK109dFtyXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT0wLG89ZS5sZW5ndGgsYT0hbjtpPG87aSsrKSF0KGVbaV0saSkhPT1hJiZyLnB1c2goZVtpXSk7cmV0dXJuIHJ9LG1hcDpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxhPTAscz1bXTtpZihpKGUpKWZvcihyPWUubGVuZ3RoO2E8cjthKyspbnVsbCE9KG89dChlW2FdLGEsbikpJiZzLnB1c2gobyk7ZWxzZSBmb3IoYSBpbiBlKW51bGwhPShvPXQoZVthXSxhLG4pKSYmcy5wdXNoKG8pO3JldHVybiBsZS5hcHBseShbXSxzKX0sZ3VpZDoxLHN1cHBvcnQ6eWV9KSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJih3ZS5mbltTeW1ib2wuaXRlcmF0b3JdPW9lW1N5bWJvbC5pdGVyYXRvcl0pLHdlLmVhY2goXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KFwiIFwiKSxmdW5jdGlvbihlLHQpe3BlW1wiW29iamVjdCBcIit0K1wiXVwiXT10LnRvTG93ZXJDYXNlKCl9KTt2YXIgQ2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQsbixyKXt2YXIgaSxvLGEscyx1LGMscCxkPXQmJnQub3duZXJEb2N1bWVudCxoPXQ/dC5ub2RlVHlwZTo5O2lmKG49bnx8W10sXCJzdHJpbmdcIiE9dHlwZW9mIGV8fCFlfHwxIT09aCYmOSE9PWgmJjExIT09aClyZXR1cm4gbjtpZighciYmKCh0P3Qub3duZXJEb2N1bWVudHx8dDpXKSE9PXEmJmoodCksdD10fHxxLEgpKXtpZigxMSE9PWgmJih1PWdlLmV4ZWMoZSkpKWlmKGk9dVsxXSl7aWYoOT09PWgpe2lmKCEoYT10LmdldEVsZW1lbnRCeUlkKGkpKSlyZXR1cm4gbjtpZihhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZihkJiYoYT1kLmdldEVsZW1lbnRCeUlkKGkpKSYmUih0LGEpJiZhLmlkPT09aSlyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZih1WzJdKXJldHVybiBRLmFwcGx5KG4sdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSksbjtpZigoaT11WzNdKSYmYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZ0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIFEuYXBwbHkobix0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaSkpLG59aWYoYi5xc2EmJiF6W2UrXCIgXCJdJiYoIU98fCFPLnRlc3QoZSkpKXtpZigxIT09aClkPXQscD1lO2Vsc2UgaWYoXCJvYmplY3RcIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKChzPXQuZ2V0QXR0cmlidXRlKFwiaWRcIikpP3M9cy5yZXBsYWNlKHhlLGJlKTp0LnNldEF0dHJpYnV0ZShcImlkXCIscz1JKSxjPUUoZSksbz1jLmxlbmd0aDtvLS07KWNbb109XCIjXCIrcytcIiBcIitmKGNbb10pO3A9Yy5qb2luKFwiLFwiKSxkPXZlLnRlc3QoZSkmJmwodC5wYXJlbnROb2RlKXx8dH1pZihwKXRyeXtyZXR1cm4gUS5hcHBseShuLGQucXVlcnlTZWxlY3RvckFsbChwKSksbn1jYXRjaChlKXt9ZmluYWxseXtzPT09SSYmdC5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKX19fXJldHVybiBTKGUucmVwbGFjZShvZSxcIiQxXCIpLHQsbixyKX1mdW5jdGlvbiBuKCl7ZnVuY3Rpb24gZShuLHIpe3JldHVybiB0LnB1c2gobitcIiBcIik+dy5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbdC5zaGlmdCgpXSxlW24rXCIgXCJdPXJ9dmFyIHQ9W107cmV0dXJuIGV9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZVtJXT0hMCxlfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9cS5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIik7dHJ5e3JldHVybiEhZSh0KX1jYXRjaChlKXtyZXR1cm4hMX1maW5hbGx5e3QucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpLHQ9bnVsbH19ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgbj1lLnNwbGl0KFwifFwiKSxyPW4ubGVuZ3RoO3ItLTspdy5hdHRySGFuZGxlW25bcl1dPXR9ZnVuY3Rpb24gYShlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJmUuc291cmNlSW5kZXgtdC5zb3VyY2VJbmRleDtpZihyKXJldHVybiByO2lmKG4pZm9yKDtuPW4ubmV4dFNpYmxpbmc7KWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuXCJmb3JtXCJpbiB0P3QucGFyZW50Tm9kZSYmITE9PT10LmRpc2FibGVkP1wibGFiZWxcImluIHQ/XCJsYWJlbFwiaW4gdC5wYXJlbnROb2RlP3QucGFyZW50Tm9kZS5kaXNhYmxlZD09PWU6dC5kaXNhYmxlZD09PWU6dC5pc0Rpc2FibGVkPT09ZXx8dC5pc0Rpc2FibGVkIT09IWUmJlRlKHQpPT09ZTp0LmRpc2FibGVkPT09ZTpcImxhYmVsXCJpbiB0JiZ0LmRpc2FibGVkPT09ZX19ZnVuY3Rpb24gdShlKXtyZXR1cm4gcihmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxyKGZ1bmN0aW9uKG4scil7Zm9yKHZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO2EtLTspbltpPW9bYV1dJiYobltpXT0hKHJbaV09bltpXSkpfSl9KX1mdW5jdGlvbiBsKGUpe3JldHVybiBlJiZ2b2lkIDAhPT1lLmdldEVsZW1lbnRzQnlUYWdOYW1lJiZlfWZ1bmN0aW9uIGMoKXt9ZnVuY3Rpb24gZihlKXtmb3IodmFyIHQ9MCxuPWUubGVuZ3RoLHI9XCJcIjt0PG47dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gcChlLHQsbil7dmFyIHI9dC5kaXIsaT10Lm5leHQsbz1pfHxyLGE9biYmXCJwYXJlbnROb2RlXCI9PT1vLHM9QisrO3JldHVybiB0LmZpcnN0P2Z1bmN0aW9uKHQsbixpKXtmb3IoO3Q9dFtyXTspaWYoMT09PXQubm9kZVR5cGV8fGEpcmV0dXJuIGUodCxuLGkpO3JldHVybiExfTpmdW5jdGlvbih0LG4sdSl7dmFyIGwsYyxmLHA9WyQsc107aWYodSl7Zm9yKDt0PXRbcl07KWlmKCgxPT09dC5ub2RlVHlwZXx8YSkmJmUodCxuLHUpKXJldHVybiEwfWVsc2UgZm9yKDt0PXRbcl07KWlmKDE9PT10Lm5vZGVUeXBlfHxhKWlmKGY9dFtJXXx8KHRbSV09e30pLGM9Zlt0LnVuaXF1ZUlEXXx8KGZbdC51bmlxdWVJRF09e30pLGkmJmk9PT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpdD10W3JdfHx0O2Vsc2V7aWYoKGw9Y1tvXSkmJmxbMF09PT0kJiZsWzFdPT09cylyZXR1cm4gcFsyXT1sWzJdO2lmKGNbb109cCxwWzJdPWUodCxuLHUpKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXtmb3IodmFyIGk9ZS5sZW5ndGg7aS0tOylpZighZVtpXSh0LG4scikpcmV0dXJuITE7cmV0dXJuITB9OmVbMF19ZnVuY3Rpb24gaChlLG4scil7Zm9yKHZhciBpPTAsbz1uLmxlbmd0aDtpPG87aSsrKXQoZSxuW2ldLHIpO3JldHVybiByfWZ1bmN0aW9uIGcoZSx0LG4scixpKXtmb3IodmFyIG8sYT1bXSxzPTAsdT1lLmxlbmd0aCxsPW51bGwhPXQ7czx1O3MrKykobz1lW3NdKSYmKG4mJiFuKG8scixpKXx8KGEucHVzaChvKSxsJiZ0LnB1c2gocykpKTtyZXR1cm4gYX1mdW5jdGlvbiB2KGUsdCxuLGksbyxhKXtyZXR1cm4gaSYmIWlbSV0mJihpPXYoaSkpLG8mJiFvW0ldJiYobz12KG8sYSkpLHIoZnVuY3Rpb24ocixhLHMsdSl7dmFyIGwsYyxmLHA9W10sZD1bXSx2PWEubGVuZ3RoLHk9cnx8aCh0fHxcIipcIixzLm5vZGVUeXBlP1tzXTpzLFtdKSxtPSFlfHwhciYmdD95OmcoeSxwLGUscyx1KSx4PW4/b3x8KHI/ZTp2fHxpKT9bXTphOm07aWYobiYmbihtLHgscyx1KSxpKWZvcihsPWcoeCxkKSxpKGwsW10scyx1KSxjPWwubGVuZ3RoO2MtLTspKGY9bFtjXSkmJih4W2RbY11dPSEobVtkW2NdXT1mKSk7aWYocil7aWYob3x8ZSl7aWYobyl7Zm9yKGw9W10sYz14Lmxlbmd0aDtjLS07KShmPXhbY10pJiZsLnB1c2gobVtjXT1mKTtvKG51bGwseD1bXSxsLHUpfWZvcihjPXgubGVuZ3RoO2MtLTspKGY9eFtjXSkmJihsPW8/SyhyLGYpOnBbY10pPi0xJiYocltsXT0hKGFbbF09ZikpfX1lbHNlIHg9Zyh4PT09YT94LnNwbGljZSh2LHgubGVuZ3RoKTp4KSxvP28obnVsbCxhLHgsdSk6US5hcHBseShhLHgpfSl9ZnVuY3Rpb24geShlKXtmb3IodmFyIHQsbixyLGk9ZS5sZW5ndGgsbz13LnJlbGF0aXZlW2VbMF0udHlwZV0sYT1vfHx3LnJlbGF0aXZlW1wiIFwiXSxzPW8/MTowLHU9cChmdW5jdGlvbihlKXtyZXR1cm4gZT09PXR9LGEsITApLGw9cChmdW5jdGlvbihlKXtyZXR1cm4gSyh0LGUpPi0xfSxhLCEwKSxjPVtmdW5jdGlvbihlLG4scil7dmFyIGk9IW8mJihyfHxuIT09RCl8fCgodD1uKS5ub2RlVHlwZT91KGUsbixyKTpsKGUsbixyKSk7cmV0dXJuIHQ9bnVsbCxpfV07czxpO3MrKylpZihuPXcucmVsYXRpdmVbZVtzXS50eXBlXSljPVtwKGQoYyksbildO2Vsc2V7aWYobj13LmZpbHRlcltlW3NdLnR5cGVdLmFwcGx5KG51bGwsZVtzXS5tYXRjaGVzKSxuW0ldKXtmb3Iocj0rK3M7cjxpJiYhdy5yZWxhdGl2ZVtlW3JdLnR5cGVdO3IrKyk7cmV0dXJuIHYocz4xJiZkKGMpLHM+MSYmZihlLnNsaWNlKDAscy0xKS5jb25jYXQoe3ZhbHVlOlwiIFwiPT09ZVtzLTJdLnR5cGU/XCIqXCI6XCJcIn0pKS5yZXBsYWNlKG9lLFwiJDFcIiksbixzPHImJnkoZS5zbGljZShzLHIpKSxyPGkmJnkoZT1lLnNsaWNlKHIpKSxyPGkmJmYoZSkpfWMucHVzaChuKX1yZXR1cm4gZChjKX1mdW5jdGlvbiBtKGUsbil7dmFyIGk9bi5sZW5ndGg+MCxvPWUubGVuZ3RoPjAsYT1mdW5jdGlvbihyLGEscyx1LGwpe3ZhciBjLGYscCxkPTAsaD1cIjBcIix2PXImJltdLHk9W10sbT1ELHg9cnx8byYmdy5maW5kLlRBRyhcIipcIixsKSxiPSQrPW51bGw9PW0/MTpNYXRoLnJhbmRvbSgpfHwuMSxUPXgubGVuZ3RoO2ZvcihsJiYoRD1hPT09cXx8YXx8bCk7aCE9PVQmJm51bGwhPShjPXhbaF0pO2grKyl7aWYobyYmYyl7Zm9yKGY9MCxhfHxjLm93bmVyRG9jdW1lbnQ9PT1xfHwoaihjKSxzPSFIKTtwPWVbZisrXTspaWYocChjLGF8fHEscykpe3UucHVzaChjKTticmVha31sJiYoJD1iKX1pJiYoKGM9IXAmJmMpJiZkLS0sciYmdi5wdXNoKGMpKX1pZihkKz1oLGkmJmghPT1kKXtmb3IoZj0wO3A9bltmKytdOylwKHYseSxhLHMpO2lmKHIpe2lmKGQ+MClmb3IoO2gtLTspdltoXXx8eVtoXXx8KHlbaF09Ry5jYWxsKHUpKTt5PWcoeSl9US5hcHBseSh1LHkpLGwmJiFyJiZ5Lmxlbmd0aD4wJiZkK24ubGVuZ3RoPjEmJnQudW5pcXVlU29ydCh1KX1yZXR1cm4gbCYmKCQ9YixEPW0pLHZ9O3JldHVybiBpP3IoYSk6YX12YXIgeCxiLHcsVCxDLEUsayxTLEQsTixBLGoscSxMLEgsTyxQLE0sUixJPVwic2l6emxlXCIrMSpuZXcgRGF0ZSxXPWUuZG9jdW1lbnQsJD0wLEI9MCxGPW4oKSxfPW4oKSx6PW4oKSxYPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoQT0hMCksMH0sVT17fS5oYXNPd25Qcm9wZXJ0eSxWPVtdLEc9Vi5wb3AsWT1WLnB1c2gsUT1WLnB1c2gsSj1WLnNsaWNlLEs9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxyPWUubGVuZ3RoO248cjtuKyspaWYoZVtuXT09PXQpcmV0dXJuIG47cmV0dXJuLTF9LFo9XCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLGVlPVwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIix0ZT1cIig/OlxcXFxcXFxcLnxbXFxcXHctXXxbXlxcMC1cXFxceGEwXSkrXCIsbmU9XCJcXFxcW1wiK2VlK1wiKihcIit0ZStcIikoPzpcIitlZStcIiooWypeJHwhfl0/PSlcIitlZStcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiK3RlK1wiKSl8KVwiK2VlK1wiKlxcXFxdXCIscmU9XCI6KFwiK3RlK1wiKSg/OlxcXFwoKCgnKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIituZStcIikqKXwuKilcXFxcKXwpXCIsaWU9bmV3IFJlZ0V4cChlZStcIitcIixcImdcIiksb2U9bmV3IFJlZ0V4cChcIl5cIitlZStcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIrZWUrXCIrJFwiLFwiZ1wiKSxhZT1uZXcgUmVnRXhwKFwiXlwiK2VlK1wiKixcIitlZStcIipcIiksc2U9bmV3IFJlZ0V4cChcIl5cIitlZStcIiooWz4rfl18XCIrZWUrXCIpXCIrZWUrXCIqXCIpLHVlPW5ldyBSZWdFeHAoXCI9XCIrZWUrXCIqKFteXFxcXF0nXFxcIl0qPylcIitlZStcIipcXFxcXVwiLFwiZ1wiKSxsZT1uZXcgUmVnRXhwKHJlKSxjZT1uZXcgUmVnRXhwKFwiXlwiK3RlK1wiJFwiKSxmZT17SUQ6bmV3IFJlZ0V4cChcIl4jKFwiK3RlK1wiKVwiKSxDTEFTUzpuZXcgUmVnRXhwKFwiXlxcXFwuKFwiK3RlK1wiKVwiKSxUQUc6bmV3IFJlZ0V4cChcIl4oXCIrdGUrXCJ8WypdKVwiKSxBVFRSOm5ldyBSZWdFeHAoXCJeXCIrbmUpLFBTRVVETzpuZXcgUmVnRXhwKFwiXlwiK3JlKSxDSElMRDpuZXcgUmVnRXhwKFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIitlZStcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiK2VlK1wiKig/OihbKy1dfClcIitlZStcIiooXFxcXGQrKXwpKVwiK2VlK1wiKlxcXFwpfClcIixcImlcIiksYm9vbDpuZXcgUmVnRXhwKFwiXig/OlwiK1orXCIpJFwiLFwiaVwiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cChcIl5cIitlZStcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIrZWUrXCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiK2VlK1wiKlxcXFwpfCkoPz1bXi1dfCQpXCIsXCJpXCIpfSxwZT0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLGRlPS9eaFxcZCQvaSxoZT0vXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLGdlPS9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLHZlPS9bK35dLyx5ZT1uZXcgUmVnRXhwKFwiXFxcXFxcXFwoW1xcXFxkYS1mXXsxLDZ9XCIrZWUrXCI/fChcIitlZStcIil8LilcIixcImlnXCIpLG1lPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1cIjB4XCIrdC02NTUzNjtyZXR1cm4gciE9PXJ8fG4/dDpyPDA/U3RyaW5nLmZyb21DaGFyQ29kZShyKzY1NTM2KTpTdHJpbmcuZnJvbUNoYXJDb2RlKHI+PjEwfDU1Mjk2LDEwMjMmcnw1NjMyMCl9LHhlPS8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLGJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/XCJcXDBcIj09PWU/XCLvv71cIjplLnNsaWNlKDAsLTEpK1wiXFxcXFwiK2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygxNikrXCIgXCI6XCJcXFxcXCIrZX0sd2U9ZnVuY3Rpb24oKXtqKCl9LFRlPXAoZnVuY3Rpb24oZSl7cmV0dXJuITA9PT1lLmRpc2FibGVkJiYoXCJmb3JtXCJpbiBlfHxcImxhYmVsXCJpbiBlKX0se2RpcjpcInBhcmVudE5vZGVcIixuZXh0OlwibGVnZW5kXCJ9KTt0cnl7US5hcHBseShWPUouY2FsbChXLmNoaWxkTm9kZXMpLFcuY2hpbGROb2RlcyksVltXLmNoaWxkTm9kZXMubGVuZ3RoXS5ub2RlVHlwZX1jYXRjaChlKXtRPXthcHBseTpWLmxlbmd0aD9mdW5jdGlvbihlLHQpe1kuYXBwbHkoZSxKLmNhbGwodCkpfTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLmxlbmd0aCxyPTA7ZVtuKytdPXRbcisrXTspO2UubGVuZ3RoPW4tMX19fWI9dC5zdXBwb3J0PXt9LEM9dC5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiYoZS5vd25lckRvY3VtZW50fHxlKS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuISF0JiZcIkhUTUxcIiE9PXQubm9kZU5hbWV9LGo9dC5zZXREb2N1bWVudD1mdW5jdGlvbihlKXt2YXIgdCxuLHI9ZT9lLm93bmVyRG9jdW1lbnR8fGU6VztyZXR1cm4gciE9PXEmJjk9PT1yLm5vZGVUeXBlJiZyLmRvY3VtZW50RWxlbWVudD8ocT1yLEw9cS5kb2N1bWVudEVsZW1lbnQsSD0hQyhxKSxXIT09cSYmKG49cS5kZWZhdWx0VmlldykmJm4udG9wIT09biYmKG4uYWRkRXZlbnRMaXN0ZW5lcj9uLmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIix3ZSwhMSk6bi5hdHRhY2hFdmVudCYmbi5hdHRhY2hFdmVudChcIm9udW5sb2FkXCIsd2UpKSxiLmF0dHJpYnV0ZXM9aShmdW5jdGlvbihlKXtyZXR1cm4gZS5jbGFzc05hbWU9XCJpXCIsIWUuZ2V0QXR0cmlidXRlKFwiY2xhc3NOYW1lXCIpfSksYi5nZXRFbGVtZW50c0J5VGFnTmFtZT1pKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKHEuY3JlYXRlQ29tbWVudChcIlwiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpLmxlbmd0aH0pLGIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1oZS50ZXN0KHEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksYi5nZXRCeUlkPWkoZnVuY3Rpb24oZSl7cmV0dXJuIEwuYXBwZW5kQ2hpbGQoZSkuaWQ9SSwhcS5nZXRFbGVtZW50c0J5TmFtZXx8IXEuZ2V0RWxlbWVudHNCeU5hbWUoSSkubGVuZ3RofSksYi5nZXRCeUlkPyh3LmZpbHRlci5JRD1mdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoeWUsbWUpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoXCJpZFwiKT09PXR9fSx3LmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVsZW1lbnRCeUlkJiZIKXt2YXIgbj10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBuP1tuXTpbXX19KToody5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHllLG1lKTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dm9pZCAwIT09ZS5nZXRBdHRyaWJ1dGVOb2RlJiZlLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSx3LmZpbmQuSUQ9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVsZW1lbnRCeUlkJiZIKXt2YXIgbixyLGksbz10LmdldEVsZW1lbnRCeUlkKGUpO2lmKG8pe2lmKChuPW8uZ2V0QXR0cmlidXRlTm9kZShcImlkXCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW29dO2ZvcihpPXQuZ2V0RWxlbWVudHNCeU5hbWUoZSkscj0wO289aVtyKytdOylpZigobj1vLmdldEF0dHJpYnV0ZU5vZGUoXCJpZFwiKSkmJm4udmFsdWU9PT1lKXJldHVybltvXX1yZXR1cm5bXX19KSx3LmZpbmQuVEFHPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwIT09dC5nZXRFbGVtZW50c0J5VGFnTmFtZT90LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOmIucXNhP3QucXVlcnlTZWxlY3RvckFsbChlKTp2b2lkIDB9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKFwiKlwiPT09ZSl7Zm9yKDtuPW9baSsrXTspMT09PW4ubm9kZVR5cGUmJnIucHVzaChuKTtyZXR1cm4gcn1yZXR1cm4gb30sdy5maW5kLkNMQVNTPWIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT10LmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJkgpcmV0dXJuIHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKX0sUD1bXSxPPVtdLChiLnFzYT1oZS50ZXN0KHEucXVlcnlTZWxlY3RvckFsbCkpJiYoaShmdW5jdGlvbihlKXtMLmFwcGVuZENoaWxkKGUpLmlubmVySFRNTD1cIjxhIGlkPSdcIitJK1wiJz48L2E+PHNlbGVjdCBpZD0nXCIrSStcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiLGUucXVlcnlTZWxlY3RvckFsbChcIlttc2FsbG93Y2FwdHVyZV49JyddXCIpLmxlbmd0aCYmTy5wdXNoKFwiWypeJF09XCIrZWUrXCIqKD86Jyd8XFxcIlxcXCIpXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIltzZWxlY3RlZF1cIikubGVuZ3RofHxPLnB1c2goXCJcXFxcW1wiK2VlK1wiKig/OnZhbHVlfFwiK1orXCIpXCIpLGUucXVlcnlTZWxlY3RvckFsbChcIltpZH49XCIrSStcIi1dXCIpLmxlbmd0aHx8Ty5wdXNoKFwifj1cIiksZS5xdWVyeVNlbGVjdG9yQWxsKFwiOmNoZWNrZWRcIikubGVuZ3RofHxPLnB1c2goXCI6Y2hlY2tlZFwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJhI1wiK0krXCIrKlwiKS5sZW5ndGh8fE8ucHVzaChcIi4jLitbK35dXCIpfSksaShmdW5jdGlvbihlKXtlLmlubmVySFRNTD1cIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO3ZhciB0PXEuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO3Quc2V0QXR0cmlidXRlKFwidHlwZVwiLFwiaGlkZGVuXCIpLGUuYXBwZW5kQ2hpbGQodCkuc2V0QXR0cmlidXRlKFwibmFtZVwiLFwiRFwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbbmFtZT1kXVwiKS5sZW5ndGgmJk8ucHVzaChcIm5hbWVcIitlZStcIipbKl4kfCF+XT89XCIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoXCI6ZW5hYmxlZFwiKS5sZW5ndGgmJk8ucHVzaChcIjplbmFibGVkXCIsXCI6ZGlzYWJsZWRcIiksTC5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKFwiOmRpc2FibGVkXCIpLmxlbmd0aCYmTy5wdXNoKFwiOmVuYWJsZWRcIixcIjpkaXNhYmxlZFwiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqLDp4XCIpLE8ucHVzaChcIiwuKjpcIil9KSksKGIubWF0Y2hlc1NlbGVjdG9yPWhlLnRlc3QoTT1MLm1hdGNoZXN8fEwud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxMLm1vek1hdGNoZXNTZWxlY3Rvcnx8TC5vTWF0Y2hlc1NlbGVjdG9yfHxMLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJmkoZnVuY3Rpb24oZSl7Yi5kaXNjb25uZWN0ZWRNYXRjaD1NLmNhbGwoZSxcIipcIiksTS5jYWxsKGUsXCJbcyE9JyddOnhcIiksUC5wdXNoKFwiIT1cIixyZSl9KSxPPU8ubGVuZ3RoJiZuZXcgUmVnRXhwKE8uam9pbihcInxcIikpLFA9UC5sZW5ndGgmJm5ldyBSZWdFeHAoUC5qb2luKFwifFwiKSksdD1oZS50ZXN0KEwuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLFI9dHx8aGUudGVzdChMLmNvbnRhaW5zKT9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpZm9yKDt0PXQucGFyZW50Tm9kZTspaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LFg9dD9mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBBPSEwLDA7dmFyIG49IWUuY29tcGFyZURvY3VtZW50UG9zaXRpb24tIXQuY29tcGFyZURvY3VtZW50UG9zaXRpb247cmV0dXJuIG58fChuPShlLm93bmVyRG9jdW1lbnR8fGUpPT09KHQub3duZXJEb2N1bWVudHx8dCk/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KToxLDEmbnx8IWIuc29ydERldGFjaGVkJiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09bj9lPT09cXx8ZS5vd25lckRvY3VtZW50PT09VyYmUihXLGUpPy0xOnQ9PT1xfHx0Lm93bmVyRG9jdW1lbnQ9PT1XJiZSKFcsdCk/MTpOP0soTixlKS1LKE4sdCk6MDo0Jm4/LTE6MSl9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIEE9ITAsMDt2YXIgbixyPTAsaT1lLnBhcmVudE5vZGUsbz10LnBhcmVudE5vZGUscz1bZV0sdT1bdF07aWYoIWl8fCFvKXJldHVybiBlPT09cT8tMTp0PT09cT8xOmk/LTE6bz8xOk4/SyhOLGUpLUsoTix0KTowO2lmKGk9PT1vKXJldHVybiBhKGUsdCk7Zm9yKG49ZTtuPW4ucGFyZW50Tm9kZTspcy51bnNoaWZ0KG4pO2ZvcihuPXQ7bj1uLnBhcmVudE5vZGU7KXUudW5zaGlmdChuKTtmb3IoO3Nbcl09PT11W3JdOylyKys7cmV0dXJuIHI/YShzW3JdLHVbcl0pOnNbcl09PT1XPy0xOnVbcl09PT1XPzE6MH0scSk6cX0sdC5tYXRjaGVzPWZ1bmN0aW9uKGUsbil7cmV0dXJuIHQoZSxudWxsLG51bGwsbil9LHQubWF0Y2hlc1NlbGVjdG9yPWZ1bmN0aW9uKGUsbil7aWYoKGUub3duZXJEb2N1bWVudHx8ZSkhPT1xJiZqKGUpLG49bi5yZXBsYWNlKHVlLFwiPSckMSddXCIpLGIubWF0Y2hlc1NlbGVjdG9yJiZIJiYheltuK1wiIFwiXSYmKCFQfHwhUC50ZXN0KG4pKSYmKCFPfHwhTy50ZXN0KG4pKSl0cnl7dmFyIHI9TS5jYWxsKGUsbik7aWYocnx8Yi5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiByfWNhdGNoKGUpe31yZXR1cm4gdChuLHEsbnVsbCxbZV0pLmxlbmd0aD4wfSx0LmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPT1xJiZqKGUpLFIoZSx0KX0sdC5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1xJiZqKGUpO3ZhciBuPXcuYXR0ckhhbmRsZVt0LnRvTG93ZXJDYXNlKCldLHI9biYmVS5jYWxsKHcuYXR0ckhhbmRsZSx0LnRvTG93ZXJDYXNlKCkpP24oZSx0LCFIKTp2b2lkIDA7cmV0dXJuIHZvaWQgMCE9PXI/cjpiLmF0dHJpYnV0ZXN8fCFIP2UuZ2V0QXR0cmlidXRlKHQpOihyPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSkmJnIuc3BlY2lmaWVkP3IudmFsdWU6bnVsbH0sdC5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrXCJcIikucmVwbGFjZSh4ZSxiZSl9LHQuZXJyb3I9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIrZSl9LHQudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLHI9MCxpPTA7aWYoQT0hYi5kZXRlY3REdXBsaWNhdGVzLE49IWIuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoWCksQSl7Zm9yKDt0PWVbaSsrXTspdD09PWVbaV0mJihyPW4ucHVzaChpKSk7Zm9yKDtyLS07KWUuc3BsaWNlKG5bcl0sMSl9cmV0dXJuIE49bnVsbCxlfSxUPXQuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPVwiXCIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZigxPT09aXx8OT09PWl8fDExPT09aSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPVQoZSl9ZWxzZSBpZigzPT09aXx8ND09PWkpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbcisrXTspbis9VCh0KTtyZXR1cm4gbn0sdz10LnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOnIsbWF0Y2g6ZmUsYXR0ckhhbmRsZTp7fSxmaW5kOnt9LHJlbGF0aXZlOntcIj5cIjp7ZGlyOlwicGFyZW50Tm9kZVwiLGZpcnN0OiEwfSxcIiBcIjp7ZGlyOlwicGFyZW50Tm9kZVwifSxcIitcIjp7ZGlyOlwicHJldmlvdXNTaWJsaW5nXCIsZmlyc3Q6ITB9LFwiflwiOntkaXI6XCJwcmV2aW91c1NpYmxpbmdcIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UoeWUsbWUpLGVbM109KGVbM118fGVbNF18fGVbNV18fFwiXCIpLnJlcGxhY2UoeWUsbWUpLFwifj1cIj09PWVbMl0mJihlWzNdPVwiIFwiK2VbM10rXCIgXCIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLFwibnRoXCI9PT1lWzFdLnNsaWNlKDAsMyk/KGVbM118fHQuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooXCJldmVuXCI9PT1lWzNdfHxcIm9kZFwiPT09ZVszXSkpLGVbNV09KyhlWzddK2VbOF18fFwib2RkXCI9PT1lWzNdKSk6ZVszXSYmdC5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gZmUuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdP2VbMl09ZVs0XXx8ZVs1XXx8XCJcIjpuJiZsZS50ZXN0KG4pJiYodD1FKG4sITApKSYmKHQ9bi5pbmRleE9mKFwiKVwiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHllLG1lKS50b0xvd2VyQ2FzZSgpO3JldHVyblwiKlwiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUZbZStcIiBcIl07cmV0dXJuIHR8fCh0PW5ldyBSZWdFeHAoXCIoXnxcIitlZStcIilcIitlK1wiKFwiK2VlK1wifCQpXCIpKSYmRihlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoXCJzdHJpbmdcIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dm9pZCAwIT09ZS5nZXRBdHRyaWJ1dGUmJmUuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIil8fFwiXCIpfSl9LEFUVFI6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgbz10LmF0dHIoaSxlKTtyZXR1cm4gbnVsbD09bz9cIiE9XCI9PT1uOiFufHwobys9XCJcIixcIj1cIj09PW4/bz09PXI6XCIhPVwiPT09bj9vIT09cjpcIl49XCI9PT1uP3ImJjA9PT1vLmluZGV4T2Yocik6XCIqPVwiPT09bj9yJiZvLmluZGV4T2Yocik+LTE6XCIkPVwiPT09bj9yJiZvLnNsaWNlKC1yLmxlbmd0aCk9PT1yOlwifj1cIj09PW4/KFwiIFwiK28ucmVwbGFjZShpZSxcIiBcIikrXCIgXCIpLmluZGV4T2Yocik+LTE6XCJ8PVwiPT09biYmKG89PT1yfHxvLnNsaWNlKDAsci5sZW5ndGgrMSk9PT1yK1wiLVwiKSl9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPVwibnRoXCIhPT1lLnNsaWNlKDAsMyksYT1cImxhc3RcIiE9PWUuc2xpY2UoLTQpLHM9XCJvZi10eXBlXCI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbix1KXt2YXIgbCxjLGYscCxkLGgsZz1vIT09YT9cIm5leHRTaWJsaW5nXCI6XCJwcmV2aW91c1NpYmxpbmdcIix2PXQucGFyZW50Tm9kZSx5PXMmJnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxtPSF1JiYhcyx4PSExO2lmKHYpe2lmKG8pe2Zvcig7Zzspe2ZvcihwPXQ7cD1wW2ddOylpZihzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpcmV0dXJuITE7aD1nPVwib25seVwiPT09ZSYmIWgmJlwibmV4dFNpYmxpbmdcIn1yZXR1cm4hMH1pZihoPVthP3YuZmlyc3RDaGlsZDp2Lmxhc3RDaGlsZF0sYSYmbSl7Zm9yKHA9dixmPXBbSV18fChwW0ldPXt9KSxjPWZbcC51bmlxdWVJRF18fChmW3AudW5pcXVlSURdPXt9KSxsPWNbZV18fFtdLGQ9bFswXT09PSQmJmxbMV0seD1kJiZsWzJdLHA9ZCYmdi5jaGlsZE5vZGVzW2RdO3A9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpOylpZigxPT09cC5ub2RlVHlwZSYmKyt4JiZwPT09dCl7Y1tlXT1bJCxkLHhdO2JyZWFrfX1lbHNlIGlmKG0mJihwPXQsZj1wW0ldfHwocFtJXT17fSksYz1mW3AudW5pcXVlSURdfHwoZltwLnVuaXF1ZUlEXT17fSksbD1jW2VdfHxbXSxkPWxbMF09PT0kJiZsWzFdLHg9ZCksITE9PT14KWZvcig7KHA9KytkJiZwJiZwW2ddfHwoeD1kPTApfHxoLnBvcCgpKSYmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PXk6MSE9PXAubm9kZVR5cGUpfHwhKyt4fHwobSYmKGY9cFtJXXx8KHBbSV09e30pLGM9ZltwLnVuaXF1ZUlEXXx8KGZbcC51bmlxdWVJRF09e30pLGNbZV09WyQseF0pLHAhPT10KSk7KTtyZXR1cm4oeC09aSk9PT1yfHx4JXI9PTAmJngvcj49MH19fSxQU0VVRE86ZnVuY3Rpb24oZSxuKXt2YXIgaSxvPXcucHNldWRvc1tlXXx8dy5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fHQuZXJyb3IoXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiK2UpO3JldHVybiBvW0ldP28obik6by5sZW5ndGg+MT8oaT1bZSxlLFwiXCIsbl0sdy5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/cihmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixpPW8oZSxuKSxhPWkubGVuZ3RoO2EtLTspcj1LKGUsaVthXSksZVtyXT0hKHRbcl09aVthXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gbyhlLDAsaSl9KTpvfX0scHNldWRvczp7bm90OnIoZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1bXSxpPWsoZS5yZXBsYWNlKG9lLFwiJDFcIikpO3JldHVybiBpW0ldP3IoZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvLGE9aShlLG51bGwscixbXSkscz1lLmxlbmd0aDtzLS07KShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rpb24oZSxyLG8pe3JldHVybiB0WzBdPWUsaSh0LG51bGwsbyxuKSx0WzBdPW51bGwsIW4ucG9wKCl9fSksaGFzOnIoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiB0KGUsbikubGVuZ3RoPjB9fSksY29udGFpbnM6cihmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoeWUsbWUpLGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8VCh0KSkuaW5kZXhPZihlKT4tMX19KSxsYW5nOnIoZnVuY3Rpb24oZSl7cmV0dXJuIGNlLnRlc3QoZXx8XCJcIil8fHQuZXJyb3IoXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIitlKSxlPWUucmVwbGFjZSh5ZSxtZSkudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXt2YXIgbjtkb3tpZihuPUg/dC5sYW5nOnQuZ2V0QXR0cmlidXRlKFwieG1sOmxhbmdcIil8fHQuZ2V0QXR0cmlidXRlKFwibGFuZ1wiKSlyZXR1cm4obj1uLnRvTG93ZXJDYXNlKCkpPT09ZXx8MD09PW4uaW5kZXhPZihlK1wiLVwiKX13aGlsZSgodD10LnBhcmVudE5vZGUpJiYxPT09dC5ub2RlVHlwZSk7cmV0dXJuITF9fSksdGFyZ2V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUubG9jYXRpb24mJmUubG9jYXRpb24uaGFzaDtyZXR1cm4gbiYmbi5zbGljZSgxKT09PXQuaWR9LHJvb3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1MfSxmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXEuYWN0aXZlRWxlbWVudCYmKCFxLmhhc0ZvY3VzfHxxLmhhc0ZvY3VzKCkpJiYhIShlLnR5cGV8fGUuaHJlZnx8fmUudGFiSW5kZXgpfSxlbmFibGVkOnMoITEpLGRpc2FibGVkOnMoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVyblwiaW5wdXRcIj09PXQmJiEhZS5jaGVja2VkfHxcIm9wdGlvblwiPT09dCYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCwhMD09PWUuc2VsZWN0ZWR9LFxuZW1wdHk6ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiF3LnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZGUudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHBlLnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuXCJpbnB1dFwiPT09dCYmXCJidXR0b25cIj09PWUudHlwZXx8XCJidXR0b25cIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuXCJpbnB1dFwiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZcInRleHRcIj09PWUudHlwZSYmKG51bGw9PSh0PWUuZ2V0QXR0cmlidXRlKFwidHlwZVwiKSl8fFwidGV4dFwiPT09dC50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6dShmdW5jdGlvbigpe3JldHVyblswXX0pLGxhc3Q6dShmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6dShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOnUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPHQ7bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6dShmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47LS1yPj0wOyllLnB1c2gocik7cmV0dXJuIGV9KSxndDp1KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOysrcjx0OyllLnB1c2gocik7cmV0dXJuIGV9KX19LHcucHNldWRvcy5udGg9dy5wc2V1ZG9zLmVxO2Zvcih4IGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KXcucHNldWRvc1t4XT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuXCJpbnB1dFwiPT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZ0LnR5cGU9PT1lfX0oeCk7Zm9yKHggaW57c3VibWl0OiEwLHJlc2V0OiEwfSl3LnBzZXVkb3NbeF09ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oXCJpbnB1dFwiPT09bnx8XCJidXR0b25cIj09PW4pJiZ0LnR5cGU9PT1lfX0oeCk7cmV0dXJuIGMucHJvdG90eXBlPXcuZmlsdGVycz13LnBzZXVkb3Msdy5zZXRGaWx0ZXJzPW5ldyBjLEU9dC50b2tlbml6ZT1mdW5jdGlvbihlLG4pe3ZhciByLGksbyxhLHMsdSxsLGM9X1tlK1wiIFwiXTtpZihjKXJldHVybiBuPzA6Yy5zbGljZSgwKTtmb3Iocz1lLHU9W10sbD13LnByZUZpbHRlcjtzOyl7ciYmIShpPWFlLmV4ZWMocykpfHwoaSYmKHM9cy5zbGljZShpWzBdLmxlbmd0aCl8fHMpLHUucHVzaChvPVtdKSkscj0hMSwoaT1zZS5leGVjKHMpKSYmKHI9aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6cix0eXBlOmlbMF0ucmVwbGFjZShvZSxcIiBcIil9KSxzPXMuc2xpY2Uoci5sZW5ndGgpKTtmb3IoYSBpbiB3LmZpbHRlcikhKGk9ZmVbYV0uZXhlYyhzKSl8fGxbYV0mJiEoaT1sW2FdKGkpKXx8KHI9aS5zaGlmdCgpLG8ucHVzaCh7dmFsdWU6cix0eXBlOmEsbWF0Y2hlczppfSkscz1zLnNsaWNlKHIubGVuZ3RoKSk7aWYoIXIpYnJlYWt9cmV0dXJuIG4/cy5sZW5ndGg6cz90LmVycm9yKGUpOl8oZSx1KS5zbGljZSgwKX0saz10LmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10sbz16W2UrXCIgXCJdO2lmKCFvKXtmb3IodHx8KHQ9RShlKSksbj10Lmxlbmd0aDtuLS07KW89eSh0W25dKSxvW0ldP3IucHVzaChvKTppLnB1c2gobyk7bz16KGUsbShpLHIpKSxvLnNlbGVjdG9yPWV9cmV0dXJuIG99LFM9dC5zZWxlY3Q9ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsdSxjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUscD0hciYmRShlPWMuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PXAubGVuZ3RoKXtpZihvPXBbMF09cFswXS5zbGljZSgwKSxvLmxlbmd0aD4yJiZcIklEXCI9PT0oYT1vWzBdKS50eXBlJiY5PT09dC5ub2RlVHlwZSYmSCYmdy5yZWxhdGl2ZVtvWzFdLnR5cGVdKXtpZighKHQ9KHcuZmluZC5JRChhLm1hdGNoZXNbMF0ucmVwbGFjZSh5ZSxtZSksdCl8fFtdKVswXSkpcmV0dXJuIG47YyYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2Uoby5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKGk9ZmUubmVlZHNDb250ZXh0LnRlc3QoZSk/MDpvLmxlbmd0aDtpLS0mJihhPW9baV0sIXcucmVsYXRpdmVbcz1hLnR5cGVdKTspaWYoKHU9dy5maW5kW3NdKSYmKHI9dShhLm1hdGNoZXNbMF0ucmVwbGFjZSh5ZSxtZSksdmUudGVzdChvWzBdLnR5cGUpJiZsKHQucGFyZW50Tm9kZSl8fHQpKSl7aWYoby5zcGxpY2UoaSwxKSwhKGU9ci5sZW5ndGgmJmYobykpKXJldHVybiBRLmFwcGx5KG4sciksbjticmVha319cmV0dXJuKGN8fGsoZSxwKSkocix0LCFILG4sIXR8fHZlLnRlc3QoZSkmJmwodC5wYXJlbnROb2RlKXx8dCksbn0sYi5zb3J0U3RhYmxlPUkuc3BsaXQoXCJcIikuc29ydChYKS5qb2luKFwiXCIpPT09SSxiLmRldGVjdER1cGxpY2F0ZXM9ISFBLGooKSxiLnNvcnREZXRhY2hlZD1pKGZ1bmN0aW9uKGUpe3JldHVybiAxJmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24ocS5jcmVhdGVFbGVtZW50KFwiZmllbGRzZXRcIikpfSksaShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9XCI8YSBocmVmPScjJz48L2E+XCIsXCIjXCI9PT1lLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKX0pfHxvKFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLGZ1bmN0aW9uKGUsdCxuKXtpZighbilyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCxcInR5cGVcIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksYi5hdHRyaWJ1dGVzJiZpKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD1cIjxpbnB1dC8+XCIsZS5maXJzdENoaWxkLnNldEF0dHJpYnV0ZShcInZhbHVlXCIsXCJcIiksXCJcIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKX0pfHxvKFwidmFsdWVcIixmdW5jdGlvbihlLHQsbil7aWYoIW4mJlwiaW5wdXRcIj09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxpKGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lLmdldEF0dHJpYnV0ZShcImRpc2FibGVkXCIpfSl8fG8oWixmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToocj1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZyLnNwZWNpZmllZD9yLnZhbHVlOm51bGx9KSx0fShlKTt3ZS5maW5kPUNlLHdlLmV4cHI9Q2Uuc2VsZWN0b3JzLHdlLmV4cHJbXCI6XCJdPXdlLmV4cHIucHNldWRvcyx3ZS51bmlxdWVTb3J0PXdlLnVuaXF1ZT1DZS51bmlxdWVTb3J0LHdlLnRleHQ9Q2UuZ2V0VGV4dCx3ZS5pc1hNTERvYz1DZS5pc1hNTCx3ZS5jb250YWlucz1DZS5jb250YWlucyx3ZS5lc2NhcGVTZWxlY3Rvcj1DZS5lc2NhcGU7dmFyIEVlPWZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9W10saT12b2lkIDAhPT1uOyhlPWVbdF0pJiY5IT09ZS5ub2RlVHlwZTspaWYoMT09PWUubm9kZVR5cGUpe2lmKGkmJndlKGUpLmlzKG4pKWJyZWFrO3IucHVzaChlKX1yZXR1cm4gcn0sa2U9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W107ZTtlPWUubmV4dFNpYmxpbmcpMT09PWUubm9kZVR5cGUmJmUhPT10JiZuLnB1c2goZSk7cmV0dXJuIG59LFNlPXdlLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LERlPS9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pO3dlLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIHI9dFswXTtyZXR1cm4gbiYmKGU9XCI6bm90KFwiK2UrXCIpXCIpLDE9PT10Lmxlbmd0aCYmMT09PXIubm9kZVR5cGU/d2UuZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106d2UuZmluZC5tYXRjaGVzKGUsd2UuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZX0pKX0sd2UuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLmxlbmd0aCxpPXRoaXM7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHdlKGUpLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZih3ZS5jb250YWlucyhpW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxyO3QrKyl3ZS5maW5kKGUsaVt0XSxuKTtyZXR1cm4gcj4xP3dlLnVuaXF1ZVNvcnQobik6bn0sZmlsdGVyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhhKHRoaXMsZXx8W10sITEpKX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhhKHRoaXMsZXx8W10sITApKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFhKHRoaXMsXCJzdHJpbmdcIj09dHlwZW9mIGUmJlNlLnRlc3QoZSk/d2UoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgTmUsQWU9L14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC87KHdlLmZuLmluaXQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk7aWYoIWUpcmV0dXJuIHRoaXM7aWYobj1ufHxOZSxcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoIShyPVwiPFwiPT09ZVswXSYmXCI+XCI9PT1lW2UubGVuZ3RoLTFdJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOkFlLmV4ZWMoZSkpfHwhclsxXSYmdClyZXR1cm4hdHx8dC5qcXVlcnk/KHR8fG4pLmZpbmQoZSk6dGhpcy5jb25zdHJ1Y3Rvcih0KS5maW5kKGUpO2lmKHJbMV0pe2lmKHQ9dCBpbnN0YW5jZW9mIHdlP3RbMF06dCx3ZS5tZXJnZSh0aGlzLHdlLnBhcnNlSFRNTChyWzFdLHQmJnQubm9kZVR5cGU/dC5vd25lckRvY3VtZW50fHx0OmFlLCEwKSksRGUudGVzdChyWzFdKSYmd2UuaXNQbGFpbk9iamVjdCh0KSlmb3IociBpbiB0KW1lKHRoaXNbcl0pP3RoaXNbcl0odFtyXSk6dGhpcy5hdHRyKHIsdFtyXSk7cmV0dXJuIHRoaXN9cmV0dXJuIGk9YWUuZ2V0RWxlbWVudEJ5SWQoclsyXSksaSYmKHRoaXNbMF09aSx0aGlzLmxlbmd0aD0xKSx0aGlzfXJldHVybiBlLm5vZGVUeXBlPyh0aGlzWzBdPWUsdGhpcy5sZW5ndGg9MSx0aGlzKTptZShlKT92b2lkIDAhPT1uLnJlYWR5P24ucmVhZHkoZSk6ZSh3ZSk6d2UubWFrZUFycmF5KGUsdGhpcyl9KS5wcm90b3R5cGU9d2UuZm4sTmU9d2UoYWUpO3ZhciBqZT0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxxZT17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTt3ZS5mbi5leHRlbmQoe2hhczpmdW5jdGlvbihlKXt2YXIgdD13ZShlLHRoaXMpLG49dC5sZW5ndGg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTxuO2UrKylpZih3ZS5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9XCJzdHJpbmdcIiE9dHlwZW9mIGUmJndlKGUpO2lmKCFTZS50ZXN0KGUpKWZvcig7cjxpO3IrKylmb3Iobj10aGlzW3JdO24mJm4hPT10O249bi5wYXJlbnROb2RlKWlmKG4ubm9kZVR5cGU8MTEmJihhP2EuaW5kZXgobik+LTE6MT09PW4ubm9kZVR5cGUmJndlLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG4sZSkpKXtvLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/d2UudW5pcXVlU29ydChvKTpvKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/XCJzdHJpbmdcIj09dHlwZW9mIGU/ZmUuY2FsbCh3ZShlKSx0aGlzWzBdKTpmZS5jYWxsKHRoaXMsZS5qcXVlcnk/ZVswXTplKTp0aGlzWzBdJiZ0aGlzWzBdLnBhcmVudE5vZGU/dGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnB1c2hTdGFjayh3ZS51bmlxdWVTb3J0KHdlLm1lcmdlKHRoaXMuZ2V0KCksd2UoZSx0KSkpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksd2UuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTtyZXR1cm4gdCYmMTEhPT10Lm5vZGVUeXBlP3Q6bnVsbH0scGFyZW50czpmdW5jdGlvbihlKXtyZXR1cm4gRWUoZSxcInBhcmVudE5vZGVcIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEVlKGUsXCJwYXJlbnROb2RlXCIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSxcIm5leHRTaWJsaW5nXCIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBzKGUsXCJwcmV2aW91c1NpYmxpbmdcIil9LG5leHRBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIEVlKGUsXCJuZXh0U2libGluZ1wiKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4gRWUoZSxcInByZXZpb3VzU2libGluZ1wiKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gRWUoZSxcIm5leHRTaWJsaW5nXCIsbil9LHByZXZVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEVlKGUsXCJwcmV2aW91c1NpYmxpbmdcIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGtlKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4ga2UoZS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSxcImlmcmFtZVwiKT9lLmNvbnRlbnREb2N1bWVudDoobyhlLFwidGVtcGxhdGVcIikmJihlPWUuY29udGVudHx8ZSksd2UubWVyZ2UoW10sZS5jaGlsZE5vZGVzKSl9fSxmdW5jdGlvbihlLHQpe3dlLmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9d2UubWFwKHRoaXMsdCxuKTtyZXR1cm5cIlVudGlsXCIhPT1lLnNsaWNlKC01KSYmKHI9biksciYmXCJzdHJpbmdcIj09dHlwZW9mIHImJihpPXdlLmZpbHRlcihyLGkpKSx0aGlzLmxlbmd0aD4xJiYocWVbZV18fHdlLnVuaXF1ZVNvcnQoaSksamUudGVzdChlKSYmaS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGkpfX0pO3ZhciBMZT0vW15cXHgyMFxcdFxcclxcblxcZl0rL2c7d2UuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9XCJzdHJpbmdcIj09dHlwZW9mIGU/dShlKTp3ZS5leHRlbmQoe30sZSk7dmFyIHQsbixpLG8sYT1bXSxzPVtdLGw9LTEsYz1mdW5jdGlvbigpe2ZvcihvPW98fGUub25jZSxpPXQ9ITA7cy5sZW5ndGg7bD0tMSlmb3Iobj1zLnNoaWZ0KCk7KytsPGEubGVuZ3RoOykhMT09PWFbbF0uYXBwbHkoblswXSxuWzFdKSYmZS5zdG9wT25GYWxzZSYmKGw9YS5sZW5ndGgsbj0hMSk7ZS5tZW1vcnl8fChuPSExKSx0PSExLG8mJihhPW4/W106XCJcIil9LGY9e2FkZDpmdW5jdGlvbigpe3JldHVybiBhJiYobiYmIXQmJihsPWEubGVuZ3RoLTEscy5wdXNoKG4pKSxmdW5jdGlvbiB0KG4pe3dlLmVhY2gobixmdW5jdGlvbihuLGkpe21lKGkpP2UudW5pcXVlJiZmLmhhcyhpKXx8YS5wdXNoKGkpOmkmJmkubGVuZ3RoJiZcInN0cmluZ1wiIT09cihpKSYmdChpKX0pfShhcmd1bWVudHMpLG4mJiF0JiZjKCkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiB3ZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbjsobj13ZS5pbkFycmF5KHQsYSxuKSk+LTE7KWEuc3BsaWNlKG4sMSksbjw9bCYmbC0tfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiBlP3dlLmluQXJyYXkoZSxhKT4tMTphLmxlbmd0aD4wfSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiBhJiYoYT1bXSksdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBvPXM9W10sYT1uPVwiXCIsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBvPXM9W10sbnx8dHx8KGE9bj1cIlwiKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99LGZpcmVXaXRoOmZ1bmN0aW9uKGUsbil7cmV0dXJuIG98fChuPW58fFtdLG49W2Usbi5zbGljZT9uLnNsaWNlKCk6bl0scy5wdXNoKG4pLHR8fGMoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBmLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhaX19O3JldHVybiBmfSx3ZS5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKHQpe3ZhciBuPVtbXCJub3RpZnlcIixcInByb2dyZXNzXCIsd2UuQ2FsbGJhY2tzKFwibWVtb3J5XCIpLHdlLkNhbGxiYWNrcyhcIm1lbW9yeVwiKSwyXSxbXCJyZXNvbHZlXCIsXCJkb25lXCIsd2UuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksd2UuQ2FsbGJhY2tzKFwib25jZSBtZW1vcnlcIiksMCxcInJlc29sdmVkXCJdLFtcInJlamVjdFwiLFwiZmFpbFwiLHdlLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLHdlLkNhbGxiYWNrcyhcIm9uY2UgbWVtb3J5XCIpLDEsXCJyZWplY3RlZFwiXV0scj1cInBlbmRpbmdcIixpPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiByfSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gby5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiBpLnRoZW4obnVsbCxlKX0scGlwZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cztyZXR1cm4gd2UuRGVmZXJyZWQoZnVuY3Rpb24odCl7d2UuZWFjaChuLGZ1bmN0aW9uKG4scil7dmFyIGk9bWUoZVtyWzRdXSkmJmVbcls0XV07b1tyWzFdXShmdW5jdGlvbigpe3ZhciBlPWkmJmkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2UmJm1lKGUucHJvbWlzZSk/ZS5wcm9taXNlKCkucHJvZ3Jlc3ModC5ub3RpZnkpLmRvbmUodC5yZXNvbHZlKS5mYWlsKHQucmVqZWN0KTp0W3JbMF0rXCJXaXRoXCJdKHRoaXMsaT9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSx0aGVuOmZ1bmN0aW9uKHQscixpKXtmdW5jdGlvbiBvKHQsbixyLGkpe3JldHVybiBmdW5jdGlvbigpe3ZhciBzPXRoaXMsdT1hcmd1bWVudHMsZj1mdW5jdGlvbigpe3ZhciBlLGY7aWYoISh0PGEpKXtpZigoZT1yLmFwcGx5KHMsdSkpPT09bi5wcm9taXNlKCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiKTtmPWUmJihcIm9iamVjdFwiPT10eXBlb2YgZXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJmUudGhlbixtZShmKT9pP2YuY2FsbChlLG8oYSxuLGwsaSksbyhhLG4sYyxpKSk6KGErKyxmLmNhbGwoZSxvKGEsbixsLGkpLG8oYSxuLGMsaSksbyhhLG4sbCxuLm5vdGlmeVdpdGgpKSk6KHIhPT1sJiYocz12b2lkIDAsdT1bZV0pLChpfHxuLnJlc29sdmVXaXRoKShzLHUpKX19LHA9aT9mOmZ1bmN0aW9uKCl7dHJ5e2YoKX1jYXRjaChlKXt3ZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rJiZ3ZS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUscC5zdGFja1RyYWNlKSx0KzE+PWEmJihyIT09YyYmKHM9dm9pZCAwLHU9W2VdKSxuLnJlamVjdFdpdGgocyx1KSl9fTt0P3AoKTood2UuRGVmZXJyZWQuZ2V0U3RhY2tIb29rJiYocC5zdGFja1RyYWNlPXdlLkRlZmVycmVkLmdldFN0YWNrSG9vaygpKSxlLnNldFRpbWVvdXQocCkpfX12YXIgYT0wO3JldHVybiB3ZS5EZWZlcnJlZChmdW5jdGlvbihlKXtuWzBdWzNdLmFkZChvKDAsZSxtZShpKT9pOmwsZS5ub3RpZnlXaXRoKSksblsxXVszXS5hZGQobygwLGUsbWUodCk/dDpsKSksblsyXVszXS5hZGQobygwLGUsbWUocik/cjpjKSl9KS5wcm9taXNlKCl9LHByb21pc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPWU/d2UuZXh0ZW5kKGUsaSk6aX19LG89e307cmV0dXJuIHdlLmVhY2gobixmdW5jdGlvbihlLHQpe3ZhciBhPXRbMl0scz10WzVdO2lbdFsxXV09YS5hZGQscyYmYS5hZGQoZnVuY3Rpb24oKXtyPXN9LG5bMy1lXVsyXS5kaXNhYmxlLG5bMy1lXVszXS5kaXNhYmxlLG5bMF1bMl0ubG9jayxuWzBdWzNdLmxvY2spLGEuYWRkKHRbM10uZmlyZSksb1t0WzBdXT1mdW5jdGlvbigpe3JldHVybiBvW3RbMF0rXCJXaXRoXCJdKHRoaXM9PT1vP3ZvaWQgMDp0aGlzLGFyZ3VtZW50cyksdGhpc30sb1t0WzBdK1wiV2l0aFwiXT1hLmZpcmVXaXRofSksaS5wcm9taXNlKG8pLHQmJnQuY2FsbChvLG8pLG99LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxuPXQscj1BcnJheShuKSxpPXVlLmNhbGwoYXJndW1lbnRzKSxvPXdlLkRlZmVycmVkKCksYT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24obil7cltlXT10aGlzLGlbZV09YXJndW1lbnRzLmxlbmd0aD4xP3VlLmNhbGwoYXJndW1lbnRzKTpuLC0tdHx8by5yZXNvbHZlV2l0aChyLGkpfX07aWYodDw9MSYmKGYoZSxvLmRvbmUoYShuKSkucmVzb2x2ZSxvLnJlamVjdCwhdCksXCJwZW5kaW5nXCI9PT1vLnN0YXRlKCl8fG1lKGlbbl0mJmlbbl0udGhlbikpKXJldHVybiBvLnRoZW4oKTtmb3IoO24tLTspZihpW25dLGEobiksby5yZWplY3QpO3JldHVybiBvLnByb21pc2UoKX19KTt2YXIgSGU9L14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87d2UuRGVmZXJyZWQuZXhjZXB0aW9uSG9vaz1mdW5jdGlvbih0LG4pe2UuY29uc29sZSYmZS5jb25zb2xlLndhcm4mJnQmJkhlLnRlc3QodC5uYW1lKSYmZS5jb25zb2xlLndhcm4oXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIit0Lm1lc3NhZ2UsdC5zdGFjayxuKX0sd2UucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24odCl7ZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgdH0pfTt2YXIgT2U9d2UuRGVmZXJyZWQoKTt3ZS5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gT2UudGhlbihlKS5jYXRjaChmdW5jdGlvbihlKXt3ZS5yZWFkeUV4Y2VwdGlvbihlKX0pLHRoaXN9LHdlLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0td2UucmVhZHlXYWl0OndlLmlzUmVhZHkpfHwod2UuaXNSZWFkeT0hMCwhMCE9PWUmJi0td2UucmVhZHlXYWl0PjB8fE9lLnJlc29sdmVXaXRoKGFlLFt3ZV0pKX19KSx3ZS5yZWFkeS50aGVuPU9lLnRoZW4sXCJjb21wbGV0ZVwiPT09YWUucmVhZHlTdGF0ZXx8XCJsb2FkaW5nXCIhPT1hZS5yZWFkeVN0YXRlJiYhYWUuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsP2Uuc2V0VGltZW91dCh3ZS5yZWFkeSk6KGFlLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIscCksZS5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHApKTt2YXIgUGU9ZnVuY3Rpb24oZSx0LG4saSxvLGEscyl7dmFyIHU9MCxsPWUubGVuZ3RoLGM9bnVsbD09bjtpZihcIm9iamVjdFwiPT09cihuKSl7bz0hMDtmb3IodSBpbiBuKVBlKGUsdCx1LG5bdV0sITAsYSxzKX1lbHNlIGlmKHZvaWQgMCE9PWkmJihvPSEwLG1lKGkpfHwocz0hMCksYyYmKHM/KHQuY2FsbChlLGkpLHQ9bnVsbCk6KGM9dCx0PWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYy5jYWxsKHdlKGUpLG4pfSkpLHQpKWZvcig7dTxsO3UrKyl0KGVbdV0sbixzP2k6aS5jYWxsKGVbdV0sdSx0KGVbdV0sbikpKTtyZXR1cm4gbz9lOmM/dC5jYWxsKGUpOmw/dChlWzBdLG4pOmF9LE1lPS9eLW1zLS8sUmU9Ly0oW2Etel0pL2csSWU9ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfTtnLnVpZD0xLGcucHJvdG90eXBlPXtjYWNoZTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHR8fCh0PXt9LEllKGUpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFuZG8se3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9dGhpcy5jYWNoZShlKTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpW2godCldPW47ZWxzZSBmb3IociBpbiB0KWlbaChyKV09dFtyXTtyZXR1cm4gaX0sZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/dGhpcy5jYWNoZShlKTplW3RoaXMuZXhwYW5kb10mJmVbdGhpcy5leHBhbmRvXVtoKHQpXX0sYWNjZXNzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdm9pZCAwPT09dHx8dCYmXCJzdHJpbmdcIj09dHlwZW9mIHQmJnZvaWQgMD09PW4/dGhpcy5nZXQoZSx0KToodGhpcy5zZXQoZSx0LG4pLHZvaWQgMCE9PW4/bjp0KX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1lW3RoaXMuZXhwYW5kb107aWYodm9pZCAwIT09cil7aWYodm9pZCAwIT09dCl7QXJyYXkuaXNBcnJheSh0KT90PXQubWFwKGgpOih0PWgodCksdD10IGluIHI/W3RdOnQubWF0Y2goTGUpfHxbXSksbj10Lmxlbmd0aDtmb3IoO24tLTspZGVsZXRlIHJbdFtuXV19KHZvaWQgMD09PXR8fHdlLmlzRW1wdHlPYmplY3QocikpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lW3RoaXMuZXhwYW5kb107cmV0dXJuIHZvaWQgMCE9PXQmJiF3ZS5pc0VtcHR5T2JqZWN0KHQpfX07dmFyIFdlPW5ldyBnLCRlPW5ldyBnLEJlPS9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxGZT0vW0EtWl0vZzt3ZS5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuICRlLmhhc0RhdGEoZSl8fFdlLmhhc0RhdGEoZSl9LGRhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAkZS5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7JGUucmVtb3ZlKGUsdCl9LF9kYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gV2UuYWNjZXNzKGUsdCxuKX0sX3JlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtXZS5yZW1vdmUoZSx0KX19KSx3ZS5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGksbz10aGlzWzBdLGE9byYmby5hdHRyaWJ1dGVzO2lmKHZvaWQgMD09PWUpe2lmKHRoaXMubGVuZ3RoJiYoaT0kZS5nZXQobyksMT09PW8ubm9kZVR5cGUmJiFXZS5nZXQobyxcImhhc0RhdGFBdHRyc1wiKSkpe2ZvcihuPWEubGVuZ3RoO24tLTspYVtuXSYmKHI9YVtuXS5uYW1lLDA9PT1yLmluZGV4T2YoXCJkYXRhLVwiKSYmKHI9aChyLnNsaWNlKDUpKSx5KG8scixpW3JdKSkpO1dlLnNldChvLFwiaGFzRGF0YUF0dHJzXCIsITApfXJldHVybiBpfXJldHVyblwib2JqZWN0XCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpeyRlLnNldCh0aGlzLGUpfSk6UGUodGhpcyxmdW5jdGlvbih0KXt2YXIgbjtpZihvJiZ2b2lkIDA9PT10KXtpZih2b2lkIDAhPT0obj0kZS5nZXQobyxlKSkpcmV0dXJuIG47aWYodm9pZCAwIT09KG49eShvLGUpKSlyZXR1cm4gbn1lbHNlIHRoaXMuZWFjaChmdW5jdGlvbigpeyRlLnNldCh0aGlzLGUsdCl9KX0sbnVsbCx0LGFyZ3VtZW50cy5sZW5ndGg+MSxudWxsLCEwKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7JGUucmVtb3ZlKHRoaXMsZSl9KX19KSx3ZS5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtpZihlKXJldHVybiB0PSh0fHxcImZ4XCIpK1wicXVldWVcIixyPVdlLmdldChlLHQpLG4mJighcnx8QXJyYXkuaXNBcnJheShuKT9yPVdlLmFjY2VzcyhlLHQsd2UubWFrZUFycmF5KG4pKTpyLnB1c2gobikpLHJ8fFtdfSxkZXF1ZXVlOmZ1bmN0aW9uKGUsdCl7dD10fHxcImZ4XCI7dmFyIG49d2UucXVldWUoZSx0KSxyPW4ubGVuZ3RoLGk9bi5zaGlmdCgpLG89d2UuX3F1ZXVlSG9va3MoZSx0KSxhPWZ1bmN0aW9uKCl7d2UuZGVxdWV1ZShlLHQpfTtcImlucHJvZ3Jlc3NcIj09PWkmJihpPW4uc2hpZnQoKSxyLS0pLGkmJihcImZ4XCI9PT10JiZuLnVuc2hpZnQoXCJpbnByb2dyZXNzXCIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsYSxvKSksIXImJm8mJm8uZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrXCJxdWV1ZUhvb2tzXCI7cmV0dXJuIFdlLmdldChlLG4pfHxXZS5hY2Nlc3MoZSxuLHtlbXB0eTp3ZS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKS5hZGQoZnVuY3Rpb24oKXtXZS5yZW1vdmUoZSxbdCtcInF1ZXVlXCIsbl0pfSl9KX19KSx3ZS5mbi5leHRlbmQoe3F1ZXVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49MjtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZSYmKHQ9ZSxlPVwiZnhcIixuLS0pLGFyZ3VtZW50cy5sZW5ndGg8bj93ZS5xdWV1ZSh0aGlzWzBdLGUpOnZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbj13ZS5xdWV1ZSh0aGlzLGUsdCk7d2UuX3F1ZXVlSG9va3ModGhpcyxlKSxcImZ4XCI9PT1lJiZcImlucHJvZ3Jlc3NcIiE9PW5bMF0mJndlLmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3ZS5kZXF1ZXVlKHRoaXMsZSl9KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHxcImZ4XCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0xLGk9d2UuRGVmZXJyZWQoKSxvPXRoaXMsYT10aGlzLmxlbmd0aCxzPWZ1bmN0aW9uKCl7LS1yfHxpLnJlc29sdmVXaXRoKG8sW29dKX07Zm9yKFwic3RyaW5nXCIhPXR5cGVvZiBlJiYodD1lLGU9dm9pZCAwKSxlPWV8fFwiZnhcIjthLS07KShuPVdlLmdldChvW2FdLGUrXCJxdWV1ZUhvb2tzXCIpKSYmbi5lbXB0eSYmKHIrKyxuLmVtcHR5LmFkZChzKSk7cmV0dXJuIHMoKSxpLnByb21pc2UodCl9fSk7dmFyIF9lPS9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvLnNvdXJjZSx6ZT1uZXcgUmVnRXhwKFwiXig/OihbKy1dKT18KShcIitfZStcIikoW2EteiVdKikkXCIsXCJpXCIpLFhlPVtcIlRvcFwiLFwiUmlnaHRcIixcIkJvdHRvbVwiLFwiTGVmdFwiXSxVZT1mdW5jdGlvbihlLHQpe3JldHVybiBlPXR8fGUsXCJub25lXCI9PT1lLnN0eWxlLmRpc3BsYXl8fFwiXCI9PT1lLnN0eWxlLmRpc3BsYXkmJndlLmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKSYmXCJub25lXCI9PT13ZS5jc3MoZSxcImRpc3BsYXlcIil9LFZlPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYT17fTtmb3IobyBpbiB0KWFbb109ZS5zdHlsZVtvXSxlLnN0eWxlW29dPXRbb107aT1uLmFwcGx5KGUscnx8W10pO2ZvcihvIGluIHQpZS5zdHlsZVtvXT1hW29dO3JldHVybiBpfSxHZT17fTt3ZS5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBiKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiBlP2U/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7VWUodGhpcyk/d2UodGhpcykuc2hvdygpOndlKHRoaXMpLmhpZGUoKX0pfX0pO3ZhciBZZT0vXig/OmNoZWNrYm94fHJhZGlvKSQvaSxRZT0vPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSspL2ksSmU9L14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSxLZT17b3B0aW9uOlsxLFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLFwiPC9zZWxlY3Q+XCJdLHRoZWFkOlsxLFwiPHRhYmxlPlwiLFwiPC90YWJsZT5cIl0sY29sOlsyLFwiPHRhYmxlPjxjb2xncm91cD5cIixcIjwvY29sZ3JvdXA+PC90YWJsZT5cIl0sdHI6WzIsXCI8dGFibGU+PHRib2R5PlwiLFwiPC90Ym9keT48L3RhYmxlPlwiXSx0ZDpbMyxcIjx0YWJsZT48dGJvZHk+PHRyPlwiLFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCJdLF9kZWZhdWx0OlswLFwiXCIsXCJcIl19O0tlLm9wdGdyb3VwPUtlLm9wdGlvbixLZS50Ym9keT1LZS50Zm9vdD1LZS5jb2xncm91cD1LZS5jYXB0aW9uPUtlLnRoZWFkLEtlLnRoPUtlLnRkO3ZhciBaZT0vPHwmIz9cXHcrOy87IWZ1bmN0aW9uKCl7dmFyIGU9YWUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLHQ9ZS5hcHBlbmRDaGlsZChhZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKSxuPWFlLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtuLnNldEF0dHJpYnV0ZShcInR5cGVcIixcInJhZGlvXCIpLG4uc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLFwiY2hlY2tlZFwiKSxuLnNldEF0dHJpYnV0ZShcIm5hbWVcIixcInRcIiksdC5hcHBlbmRDaGlsZChuKSx5ZS5jaGVja0Nsb25lPXQuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHQuaW5uZXJIVE1MPVwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiLHllLm5vQ2xvbmVDaGVja2VkPSEhdC5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWV9KCk7dmFyIGV0PWFlLmRvY3VtZW50RWxlbWVudCx0dD0vXmtleS8sbnQ9L14oPzptb3VzZXxwb2ludGVyfGNvbnRleHRtZW51fGRyYWd8ZHJvcCl8Y2xpY2svLHJ0PS9eKFteLl0qKSg/OlxcLiguKyl8KS87d2UuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQsaCxnLHY9V2UuZ2V0KGUpO2lmKHYpZm9yKG4uaGFuZGxlciYmKG89bixuPW8uaGFuZGxlcixpPW8uc2VsZWN0b3IpLGkmJndlLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGV0LGkpLG4uZ3VpZHx8KG4uZ3VpZD13ZS5ndWlkKyspLCh1PXYuZXZlbnRzKXx8KHU9di5ldmVudHM9e30pLChhPXYuaGFuZGxlKXx8KGE9di5oYW5kbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXdlJiZ3ZS5ldmVudC50cmlnZ2VyZWQhPT10LnR5cGU/d2UuZXZlbnQuZGlzcGF0Y2guYXBwbHkoZSxhcmd1bWVudHMpOnZvaWQgMH0pLHQ9KHR8fFwiXCIpLm1hdGNoKExlKXx8W1wiXCJdLGw9dC5sZW5ndGg7bC0tOylzPXJ0LmV4ZWModFtsXSl8fFtdLGQ9Zz1zWzFdLGg9KHNbMl18fFwiXCIpLnNwbGl0KFwiLlwiKS5zb3J0KCksZCYmKGY9d2UuZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0oaT9mLmRlbGVnYXRlVHlwZTpmLmJpbmRUeXBlKXx8ZCxmPXdlLmV2ZW50LnNwZWNpYWxbZF18fHt9LGM9d2UuZXh0ZW5kKHt0eXBlOmQsb3JpZ1R5cGU6ZyxkYXRhOnIsaGFuZGxlcjpuLGd1aWQ6bi5ndWlkLHNlbGVjdG9yOmksbmVlZHNDb250ZXh0OmkmJndlLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoaSksbmFtZXNwYWNlOmguam9pbihcIi5cIil9LG8pLChwPXVbZF0pfHwocD11W2RdPVtdLHAuZGVsZWdhdGVDb3VudD0wLGYuc2V0dXAmJiExIT09Zi5zZXR1cC5jYWxsKGUscixoLGEpfHxlLmFkZEV2ZW50TGlzdGVuZXImJmUuYWRkRXZlbnRMaXN0ZW5lcihkLGEpKSxmLmFkZCYmKGYuYWRkLmNhbGwoZSxjKSxjLmhhbmRsZXIuZ3VpZHx8KGMuaGFuZGxlci5ndWlkPW4uZ3VpZCkpLGk/cC5zcGxpY2UocC5kZWxlZ2F0ZUNvdW50KyssMCxjKTpwLnB1c2goYyksd2UuZXZlbnQuZ2xvYmFsW2RdPSEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLHUsbCxjLGYscCxkLGgsZyx2PVdlLmhhc0RhdGEoZSkmJldlLmdldChlKTtpZih2JiYodT12LmV2ZW50cykpe2Zvcih0PSh0fHxcIlwiKS5tYXRjaChMZSl8fFtcIlwiXSxsPXQubGVuZ3RoO2wtLTspaWYocz1ydC5leGVjKHRbbF0pfHxbXSxkPWc9c1sxXSxoPShzWzJdfHxcIlwiKS5zcGxpdChcIi5cIikuc29ydCgpLGQpe2ZvcihmPXdlLmV2ZW50LnNwZWNpYWxbZF18fHt9LGQ9KHI/Zi5kZWxlZ2F0ZVR5cGU6Zi5iaW5kVHlwZSl8fGQscD11W2RdfHxbXSxzPXNbMl0mJm5ldyBSZWdFeHAoXCIoXnxcXFxcLilcIitoLmpvaW4oXCJcXFxcLig/Oi4qXFxcXC58KVwiKStcIihcXFxcLnwkKVwiKSxhPW89cC5sZW5ndGg7by0tOyljPXBbb10sIWkmJmchPT1jLm9yaWdUeXBlfHxuJiZuLmd1aWQhPT1jLmd1aWR8fHMmJiFzLnRlc3QoYy5uYW1lc3BhY2UpfHxyJiZyIT09Yy5zZWxlY3RvciYmKFwiKipcIiE9PXJ8fCFjLnNlbGVjdG9yKXx8KHAuc3BsaWNlKG8sMSksYy5zZWxlY3RvciYmcC5kZWxlZ2F0ZUNvdW50LS0sZi5yZW1vdmUmJmYucmVtb3ZlLmNhbGwoZSxjKSk7YSYmIXAubGVuZ3RoJiYoZi50ZWFyZG93biYmITEhPT1mLnRlYXJkb3duLmNhbGwoZSxoLHYuaGFuZGxlKXx8d2UucmVtb3ZlRXZlbnQoZSxkLHYuaGFuZGxlKSxkZWxldGUgdVtkXSl9ZWxzZSBmb3IoZCBpbiB1KXdlLmV2ZW50LnJlbW92ZShlLGQrdFtsXSxuLHIsITApO3dlLmlzRW1wdHlPYmplY3QodSkmJldlLnJlbW92ZShlLFwiaGFuZGxlIGV2ZW50c1wiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzPXdlLmV2ZW50LmZpeChlKSx1PW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxsPShXZS5nZXQodGhpcyxcImV2ZW50c1wiKXx8e30pW3MudHlwZV18fFtdLGM9d2UuZXZlbnQuc3BlY2lhbFtzLnR5cGVdfHx7fTtmb3IodVswXT1zLHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXVbdF09YXJndW1lbnRzW3RdO2lmKHMuZGVsZWdhdGVUYXJnZXQ9dGhpcywhYy5wcmVEaXNwYXRjaHx8ITEhPT1jLnByZURpc3BhdGNoLmNhbGwodGhpcyxzKSl7Zm9yKGE9d2UuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLHMsbCksdD0wOyhpPWFbdCsrXSkmJiFzLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWZvcihzLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDsobz1pLmhhbmRsZXJzW24rK10pJiYhcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOylzLnJuYW1lc3BhY2UmJiFzLnJuYW1lc3BhY2UudGVzdChvLm5hbWVzcGFjZSl8fChzLmhhbmRsZU9iaj1vLHMuZGF0YT1vLmRhdGEsdm9pZCAwIT09KHI9KCh3ZS5ldmVudC5zcGVjaWFsW28ub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxvLmhhbmRsZXIpLmFwcGx5KGkuZWxlbSx1KSkmJiExPT09KHMucmVzdWx0PXIpJiYocy5wcmV2ZW50RGVmYXVsdCgpLHMuc3RvcFByb3BhZ2F0aW9uKCkpKTtyZXR1cm4gYy5wb3N0RGlzcGF0Y2gmJmMucG9zdERpc3BhdGNoLmNhbGwodGhpcyxzKSxzLnJlc3VsdH19LGhhbmRsZXJzOmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzPVtdLHU9dC5kZWxlZ2F0ZUNvdW50LGw9ZS50YXJnZXQ7aWYodSYmbC5ub2RlVHlwZSYmIShcImNsaWNrXCI9PT1lLnR5cGUmJmUuYnV0dG9uPj0xKSlmb3IoO2whPT10aGlzO2w9bC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1sLm5vZGVUeXBlJiYoXCJjbGlja1wiIT09ZS50eXBlfHwhMCE9PWwuZGlzYWJsZWQpKXtmb3Iobz1bXSxhPXt9LG49MDtuPHU7bisrKXI9dFtuXSxpPXIuc2VsZWN0b3IrXCIgXCIsdm9pZCAwPT09YVtpXSYmKGFbaV09ci5uZWVkc0NvbnRleHQ/d2UoaSx0aGlzKS5pbmRleChsKT4tMTp3ZS5maW5kKGksdGhpcyxudWxsLFtsXSkubGVuZ3RoKSxhW2ldJiZvLnB1c2gocik7by5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOm99KX1yZXR1cm4gbD10aGlzLHU8dC5sZW5ndGgmJnMucHVzaCh7ZWxlbTpsLGhhbmRsZXJzOnQuc2xpY2UodSl9KSxzfSxhZGRQcm9wOmZ1bmN0aW9uKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHdlLkV2ZW50LnByb3RvdHlwZSxlLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bWUodCk/ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHQodGhpcy5vcmlnaW5hbEV2ZW50KX06ZnVuY3Rpb24oKXtpZih0aGlzLm9yaWdpbmFsRXZlbnQpcmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFtlXX0sc2V0OmZ1bmN0aW9uKHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLGUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KX19KX0sZml4OmZ1bmN0aW9uKGUpe3JldHVybiBlW3dlLmV4cGFuZG9dP2U6bmV3IHdlLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e3RyaWdnZXI6ZnVuY3Rpb24oKXtpZih0aGlzIT09UygpJiZ0aGlzLmZvY3VzKXJldHVybiB0aGlzLmZvY3VzKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3VzaW5cIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe2lmKHRoaXM9PT1TKCkmJnRoaXMuYmx1cilyZXR1cm4gdGhpcy5ibHVyKCksITF9LGRlbGVnYXRlVHlwZTpcImZvY3Vzb3V0XCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYoXCJjaGVja2JveFwiPT09dGhpcy50eXBlJiZ0aGlzLmNsaWNrJiZvKHRoaXMsXCJpbnB1dFwiKSlyZXR1cm4gdGhpcy5jbGljaygpLCExfSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4gbyhlLnRhcmdldCxcImFcIil9fSxiZWZvcmV1bmxvYWQ6e3Bvc3REaXNwYXRjaDpmdW5jdGlvbihlKXt2b2lkIDAhPT1lLnJlc3VsdCYmZS5vcmlnaW5hbEV2ZW50JiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fX0sd2UucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LHdlLkV2ZW50PWZ1bmN0aW9uKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2Ygd2UuRXZlbnQpKXJldHVybiBuZXcgd2UuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT9FOmssdGhpcy50YXJnZXQ9ZS50YXJnZXQmJjM9PT1lLnRhcmdldC5ub2RlVHlwZT9lLnRhcmdldC5wYXJlbnROb2RlOmUudGFyZ2V0LHRoaXMuY3VycmVudFRhcmdldD1lLmN1cnJlbnRUYXJnZXQsdGhpcy5yZWxhdGVkVGFyZ2V0PWUucmVsYXRlZFRhcmdldCk6dGhpcy50eXBlPWUsdCYmd2UuZXh0ZW5kKHRoaXMsdCksdGhpcy50aW1lU3RhbXA9ZSYmZS50aW1lU3RhbXB8fERhdGUubm93KCksdGhpc1t3ZS5leHBhbmRvXT0hMH0sd2UuRXZlbnQucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp3ZS5FdmVudCxpc0RlZmF1bHRQcmV2ZW50ZWQ6ayxpc1Byb3BhZ2F0aW9uU3RvcHBlZDprLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmssaXNTaW11bGF0ZWQ6ITEscHJldmVudERlZmF1bHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9RSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1FLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1FLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9fSx3ZS5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLGNoYXI6ITAsY2hhckNvZGU6ITAsa2V5OiEwLGtleUNvZGU6ITAsYnV0dG9uOiEwLGJ1dHRvbnM6ITAsY2xpZW50WDohMCxjbGllbnRZOiEwLG9mZnNldFg6ITAsb2Zmc2V0WTohMCxwb2ludGVySWQ6ITAscG9pbnRlclR5cGU6ITAsc2NyZWVuWDohMCxzY3JlZW5ZOiEwLHRhcmdldFRvdWNoZXM6ITAsdG9FbGVtZW50OiEwLHRvdWNoZXM6ITAsd2hpY2g6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5idXR0b247cmV0dXJuIG51bGw9PWUud2hpY2gmJnR0LnRlc3QoZS50eXBlKT9udWxsIT1lLmNoYXJDb2RlP2UuY2hhckNvZGU6ZS5rZXlDb2RlOiFlLndoaWNoJiZ2b2lkIDAhPT10JiZudC50ZXN0KGUudHlwZSk/MSZ0PzE6MiZ0PzM6NCZ0PzI6MDplLndoaWNofX0sd2UuZXZlbnQuYWRkUHJvcCksd2UuZWFjaCh7bW91c2VlbnRlcjpcIm1vdXNlb3ZlclwiLG1vdXNlbGVhdmU6XCJtb3VzZW91dFwiLHBvaW50ZXJlbnRlcjpcInBvaW50ZXJvdmVyXCIscG9pbnRlcmxlYXZlOlwicG9pbnRlcm91dFwifSxmdW5jdGlvbihlLHQpe3dlLmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTp0LGJpbmRUeXBlOnQsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuLHI9dGhpcyxpPWUucmVsYXRlZFRhcmdldCxvPWUuaGFuZGxlT2JqO3JldHVybiBpJiYoaT09PXJ8fHdlLmNvbnRhaW5zKHIsaSkpfHwoZS50eXBlPW8ub3JpZ1R5cGUsbj1vLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudHlwZT10KSxufX19KSx3ZS5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBEKHRoaXMsZSx0LG4scil9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gRCh0aGlzLGUsdCxuLHIsMSl9LG9mZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsaTtpZihlJiZlLnByZXZlbnREZWZhdWx0JiZlLmhhbmRsZU9iailyZXR1cm4gcj1lLmhhbmRsZU9iaix3ZShlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoci5uYW1lc3BhY2U/ci5vcmlnVHlwZStcIi5cIityLm5hbWVzcGFjZTpyLm9yaWdUeXBlLHIuc2VsZWN0b3Isci5oYW5kbGVyKSx0aGlzO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBlKXtmb3IoaSBpbiBlKXRoaXMub2ZmKGksdCxlW2ldKTtyZXR1cm4gdGhpc31yZXR1cm4hMSE9PXQmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49ayksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7d2UuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSl9fSk7dmFyIGl0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKilbXj5dKilcXC8+L2dpLG90PS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGF0PS9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksc3Q9L15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO3dlLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKGl0LFwiPCQxPjwvJDI+XCIpfSxjbG9uZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscz1lLmNsb25lTm9kZSghMCksdT13ZS5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSk7aWYoISh5ZS5ub0Nsb25lQ2hlY2tlZHx8MSE9PWUubm9kZVR5cGUmJjExIT09ZS5ub2RlVHlwZXx8d2UuaXNYTUxEb2MoZSkpKWZvcihhPXcocyksbz13KGUpLHI9MCxpPW8ubGVuZ3RoO3I8aTtyKyspTChvW3JdLGFbcl0pO2lmKHQpaWYobilmb3Iobz1vfHx3KGUpLGE9YXx8dyhzKSxyPTAsaT1vLmxlbmd0aDtyPGk7cisrKXEob1tyXSxhW3JdKTtlbHNlIHEoZSxzKTtyZXR1cm4gYT13KHMsXCJzY3JpcHRcIiksYS5sZW5ndGg+MCYmVChhLCF1JiZ3KGUsXCJzY3JpcHRcIikpLHN9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixyLGk9d2UuZXZlbnQuc3BlY2lhbCxvPTA7dm9pZCAwIT09KG49ZVtvXSk7bysrKWlmKEllKG4pKXtpZih0PW5bV2UuZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihyIGluIHQuZXZlbnRzKWlbcl0/d2UuZXZlbnQucmVtb3ZlKG4scik6d2UucmVtb3ZlRXZlbnQobixyLHQuaGFuZGxlKTtuW1dlLmV4cGFuZG9dPXZvaWQgMH1uWyRlLmV4cGFuZG9dJiYoblskZS5leHBhbmRvXT12b2lkIDApfX19KSx3ZS5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gTyh0aGlzLGUsITApfSxyZW1vdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIE8odGhpcyxlKX0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT93ZS50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEgodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7aWYoMT09PXRoaXMubm9kZVR5cGV8fDExPT09dGhpcy5ub2RlVHlwZXx8OT09PXRoaXMubm9kZVR5cGUpe04odGhpcyxlKS5hcHBlbmRDaGlsZChlKX19KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiBIKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1OKHRoaXMsZSk7dC5pbnNlcnRCZWZvcmUoZSx0LmZpcnN0Q2hpbGQpfX0pfSxiZWZvcmU6ZnVuY3Rpb24oKXtyZXR1cm4gSCh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSx0aGlzKX0pfSxhZnRlcjpmdW5jdGlvbigpe3JldHVybiBIKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJih3ZS5jbGVhbkRhdGEodyhlLCExKSksZS50ZXh0Q29udGVudD1cIlwiKTtyZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lJiZlLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gd2UuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpc1swXXx8e30sbj0wLHI9dGhpcy5sZW5ndGg7aWYodm9pZCAwPT09ZSYmMT09PXQubm9kZVR5cGUpcmV0dXJuIHQuaW5uZXJIVE1MO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhb3QudGVzdChlKSYmIUtlWyhRZS5leGVjKGUpfHxbXCJcIixcIlwiXSlbMV0udG9Mb3dlckNhc2UoKV0pe2U9d2UuaHRtbFByZWZpbHRlcihlKTt0cnl7Zm9yKDtuPHI7bisrKXQ9dGhpc1tuXXx8e30sMT09PXQubm9kZVR5cGUmJih3ZS5jbGVhbkRhdGEodyh0LCExKSksdC5pbm5lckhUTUw9ZSk7dD0wfWNhdGNoKGUpe319dCYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbigpe3ZhciBlPVtdO3JldHVybiBIKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTt3ZS5pbkFycmF5KHRoaXMsZSk8MCYmKHdlLmNsZWFuRGF0YSh3KHRoaXMpKSxuJiZuLnJlcGxhY2VDaGlsZCh0LHRoaXMpKX0sZSl9fSksd2UuZWFjaCh7YXBwZW5kVG86XCJhcHBlbmRcIixwcmVwZW5kVG86XCJwcmVwZW5kXCIsaW5zZXJ0QmVmb3JlOlwiYmVmb3JlXCIsaW5zZXJ0QWZ0ZXI6XCJhZnRlclwiLHJlcGxhY2VBbGw6XCJyZXBsYWNlV2l0aFwifSxmdW5jdGlvbihlLHQpe3dlLmZuW2VdPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbixyPVtdLGk9d2UoZSksbz1pLmxlbmd0aC0xLGE9MDthPD1vO2ErKyluPWE9PT1vP3RoaXM6dGhpcy5jbG9uZSghMCksd2UoaVthXSlbdF0obiksY2UuYXBwbHkocixuLmdldCgpKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2socil9fSk7dmFyIHV0PW5ldyBSZWdFeHAoXCJeKFwiK19lK1wiKSg/IXB4KVthLXolXSskXCIsXCJpXCIpLGx0PWZ1bmN0aW9uKHQpe3ZhciBuPXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4gbiYmbi5vcGVuZXJ8fChuPWUpLG4uZ2V0Q29tcHV0ZWRTdHlsZSh0KX0sY3Q9bmV3IFJlZ0V4cChYZS5qb2luKFwifFwiKSxcImlcIik7IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2lmKGwpe3Uuc3R5bGUuY3NzVGV4dD1cInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDttYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIixsLnN0eWxlLmNzc1RleHQ9XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7bWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDt3aWR0aDo2MCU7dG9wOjElXCIsZXQuYXBwZW5kQ2hpbGQodSkuYXBwZW5kQ2hpbGQobCk7dmFyIHQ9ZS5nZXRDb21wdXRlZFN0eWxlKGwpO3I9XCIxJVwiIT09dC50b3Ascz0xMj09PW4odC5tYXJnaW5MZWZ0KSxsLnN0eWxlLnJpZ2h0PVwiNjAlXCIsYT0zNj09PW4odC5yaWdodCksaT0zNj09PW4odC53aWR0aCksbC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsbz0zNj09PWwub2Zmc2V0V2lkdGh8fFwiYWJzb2x1dGVcIixldC5yZW1vdmVDaGlsZCh1KSxsPW51bGx9fWZ1bmN0aW9uIG4oZSl7cmV0dXJuIE1hdGgucm91bmQocGFyc2VGbG9hdChlKSl9dmFyIHIsaSxvLGEscyx1PWFlLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksbD1hZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO2wuc3R5bGUmJihsLnN0eWxlLmJhY2tncm91bmRDbGlwPVwiY29udGVudC1ib3hcIixsLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9XCJcIix5ZS5jbGVhckNsb25lU3R5bGU9XCJjb250ZW50LWJveFwiPT09bC5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCx3ZS5leHRlbmQoeWUse2JveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxpfSxwaXhlbEJveFN0eWxlczpmdW5jdGlvbigpe3JldHVybiB0KCksYX0scGl4ZWxQb3NpdGlvbjpmdW5jdGlvbigpe3JldHVybiB0KCkscn0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxzfSxzY3JvbGxib3hTaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHQoKSxvfX0pKX0oKTt2YXIgZnQ9L14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLHB0PS9eLS0vLGR0PXtwb3NpdGlvbjpcImFic29sdXRlXCIsdmlzaWJpbGl0eTpcImhpZGRlblwiLGRpc3BsYXk6XCJibG9ja1wifSxodD17bGV0dGVyU3BhY2luZzpcIjBcIixmb250V2VpZ2h0OlwiNDAwXCJ9LGd0PVtcIldlYmtpdFwiLFwiTW96XCIsXCJtc1wiXSx2dD1hZS5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLnN0eWxlO3dlLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciBuPVAoZSxcIm9wYWNpdHlcIik7cmV0dXJuXCJcIj09PW4/XCIxXCI6bn19fX0sY3NzTnVtYmVyOnthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxjb2x1bW5Db3VudDohMCxmaWxsT3BhY2l0eTohMCxmbGV4R3JvdzohMCxmbGV4U2hyaW5rOiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7fSxzdHlsZTpmdW5jdGlvbihlLHQsbixyKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciBpLG8sYSxzPWgodCksdT1wdC50ZXN0KHQpLGw9ZS5zdHlsZTtpZih1fHwodD1JKHMpKSxhPXdlLmNzc0hvb2tzW3RdfHx3ZS5jc3NIb29rc1tzXSx2b2lkIDA9PT1uKXJldHVybiBhJiZcImdldFwiaW4gYSYmdm9pZCAwIT09KGk9YS5nZXQoZSwhMSxyKSk/aTpsW3RdO289dHlwZW9mIG4sXCJzdHJpbmdcIj09PW8mJihpPXplLmV4ZWMobikpJiZpWzFdJiYobj1tKGUsdCxpKSxvPVwibnVtYmVyXCIpLG51bGwhPW4mJm49PT1uJiYoXCJudW1iZXJcIj09PW8mJihuKz1pJiZpWzNdfHwod2UuY3NzTnVtYmVyW3NdP1wiXCI6XCJweFwiKSkseWUuY2xlYXJDbG9uZVN0eWxlfHxcIlwiIT09bnx8MCE9PXQuaW5kZXhPZihcImJhY2tncm91bmRcIil8fChsW3RdPVwiaW5oZXJpdFwiKSxhJiZcInNldFwiaW4gYSYmdm9pZCAwPT09KG49YS5zZXQoZSxuLHIpKXx8KHU/bC5zZXRQcm9wZXJ0eSh0LG4pOmxbdF09bikpfX0sY3NzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzPWgodCk7cmV0dXJuIHB0LnRlc3QodCl8fCh0PUkocykpLGE9d2UuY3NzSG9va3NbdF18fHdlLmNzc0hvb2tzW3NdLGEmJlwiZ2V0XCJpbiBhJiYoaT1hLmdldChlLCEwLG4pKSx2b2lkIDA9PT1pJiYoaT1QKGUsdCxyKSksXCJub3JtYWxcIj09PWkmJnQgaW4gaHQmJihpPWh0W3RdKSxcIlwiPT09bnx8bj8obz1wYXJzZUZsb2F0KGkpLCEwPT09bnx8aXNGaW5pdGUobyk/b3x8MDppKTppfX0pLHdlLmVhY2goW1wiaGVpZ2h0XCIsXCJ3aWR0aFwiXSxmdW5jdGlvbihlLHQpe3dlLmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuLHIpe2lmKG4pcmV0dXJuIWZ0LnRlc3Qod2UuY3NzKGUsXCJkaXNwbGF5XCIpKXx8ZS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCYmZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aD9CKGUsdCxyKTpWZShlLGR0LGZ1bmN0aW9uKCl7cmV0dXJuIEIoZSx0LHIpfSl9LHNldDpmdW5jdGlvbihlLG4scil7dmFyIGksbz1sdChlKSxhPVwiYm9yZGVyLWJveFwiPT09d2UuY3NzKGUsXCJib3hTaXppbmdcIiwhMSxvKSxzPXImJiQoZSx0LHIsYSxvKTtyZXR1cm4gYSYmeWUuc2Nyb2xsYm94U2l6ZSgpPT09by5wb3NpdGlvbiYmKHMtPU1hdGguY2VpbChlW1wib2Zmc2V0XCIrdFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSldLXBhcnNlRmxvYXQob1t0XSktJChlLHQsXCJib3JkZXJcIiwhMSxvKS0uNSkpLHMmJihpPXplLmV4ZWMobikpJiZcInB4XCIhPT0oaVszXXx8XCJweFwiKSYmKGUuc3R5bGVbdF09bixuPXdlLmNzcyhlLHQpKSxXKGUsbixzKX19fSksd2UuY3NzSG9va3MubWFyZ2luTGVmdD1NKHllLnJlbGlhYmxlTWFyZ2luTGVmdCxmdW5jdGlvbihlLHQpe2lmKHQpcmV0dXJuKHBhcnNlRmxvYXQoUChlLFwibWFyZ2luTGVmdFwiKSl8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1WZShlLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKStcInB4XCJ9KSx3ZS5lYWNoKHttYXJnaW46XCJcIixwYWRkaW5nOlwiXCIsYm9yZGVyOlwiV2lkdGhcIn0sZnVuY3Rpb24oZSx0KXt3ZS5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7Zm9yKHZhciByPTAsaT17fSxvPVwic3RyaW5nXCI9PXR5cGVvZiBuP24uc3BsaXQoXCIgXCIpOltuXTtyPDQ7cisrKWlbZStYZVtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSxcIm1hcmdpblwiIT09ZSYmKHdlLmNzc0hvb2tzW2UrdF0uc2V0PVcpfSksd2UuZm4uZXh0ZW5kKHtjc3M6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvPXt9LGE9MDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3Iocj1sdChlKSxpPXQubGVuZ3RoO2E8aTthKyspb1t0W2FdXT13ZS5jc3MoZSx0W2FdLCExLHIpO3JldHVybiBvfXJldHVybiB2b2lkIDAhPT1uP3dlLnN0eWxlKGUsdCxuKTp3ZS5jc3MoZSx0KX0sZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9fSksd2UuVHdlZW49RixGLnByb3RvdHlwZT17Y29uc3RydWN0b3I6Rixpbml0OmZ1bmN0aW9uKGUsdCxuLHIsaSxvKXt0aGlzLmVsZW09ZSx0aGlzLnByb3A9bix0aGlzLmVhc2luZz1pfHx3ZS5lYXNpbmcuX2RlZmF1bHQsdGhpcy5vcHRpb25zPXQsdGhpcy5zdGFydD10aGlzLm5vdz10aGlzLmN1cigpLHRoaXMuZW5kPXIsdGhpcy51bml0PW98fCh3ZS5jc3NOdW1iZXJbbl0/XCJcIjpcInB4XCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1GLnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybiBlJiZlLmdldD9lLmdldCh0aGlzKTpGLnByb3BIb29rcy5fZGVmYXVsdC5nZXQodGhpcyl9LHJ1bjpmdW5jdGlvbihlKXt2YXIgdCxuPUYucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PXdlLmVhc2luZ1t0aGlzLmVhc2luZ10oZSx0aGlzLm9wdGlvbnMuZHVyYXRpb24qZSwwLDEsdGhpcy5vcHRpb25zLmR1cmF0aW9uKTp0aGlzLnBvcz10PWUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6Ri5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxGLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZT1GLnByb3RvdHlwZSxGLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gMSE9PWUuZWxlbS5ub2RlVHlwZXx8bnVsbCE9ZS5lbGVtW2UucHJvcF0mJm51bGw9PWUuZWxlbS5zdHlsZVtlLnByb3BdP2UuZWxlbVtlLnByb3BdOih0PXdlLmNzcyhlLmVsZW0sZS5wcm9wLFwiXCIpLHQmJlwiYXV0b1wiIT09dD90OjApfSxzZXQ6ZnVuY3Rpb24oZSl7d2UuZnguc3RlcFtlLnByb3BdP3dlLmZ4LnN0ZXBbZS5wcm9wXShlKToxIT09ZS5lbGVtLm5vZGVUeXBlfHxudWxsPT1lLmVsZW0uc3R5bGVbd2UuY3NzUHJvcHNbZS5wcm9wXV0mJiF3ZS5jc3NIb29rc1tlLnByb3BdP2UuZWxlbVtlLnByb3BdPWUubm93OndlLnN0eWxlKGUuZWxlbSxlLnByb3AsZS5ub3crZS51bml0KX19fSxGLnByb3BIb29rcy5zY3JvbGxUb3A9Ri5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx3ZS5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDpcInN3aW5nXCJ9LHdlLmZ4PUYucHJvdG90eXBlLmluaXQsd2UuZnguc3RlcD17fTt2YXIgeXQsbXQseHQ9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGJ0PS9xdWV1ZUhvb2tzJC87d2UuQW5pbWF0aW9uPXdlLmV4dGVuZChZLHt0d2VlbmVyczp7XCIqXCI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpO3JldHVybiBtKG4uZWxlbSxlLHplLmV4ZWModCksbiksbn1dfSx0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7bWUoZSk/KHQ9ZSxlPVtcIipcIl0pOmU9ZS5tYXRjaChMZSk7Zm9yKHZhciBuLHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspbj1lW3JdLFkudHdlZW5lcnNbbl09WS50d2VlbmVyc1tuXXx8W10sWS50d2VlbmVyc1tuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXJzOltWXSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P1kucHJlZmlsdGVycy51bnNoaWZ0KGUpOlkucHJlZmlsdGVycy5wdXNoKGUpfX0pLHdlLnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiZcIm9iamVjdFwiPT10eXBlb2YgZT93ZS5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHxtZShlKSYmZSxkdXJhdGlvbjplLGVhc2luZzpuJiZ0fHx0JiYhbWUodCkmJnR9O3JldHVybiB3ZS5meC5vZmY/ci5kdXJhdGlvbj0wOlwibnVtYmVyXCIhPXR5cGVvZiByLmR1cmF0aW9uJiYoci5kdXJhdGlvbiBpbiB3ZS5meC5zcGVlZHM/ci5kdXJhdGlvbj13ZS5meC5zcGVlZHNbci5kdXJhdGlvbl06ci5kdXJhdGlvbj13ZS5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPXIucXVldWUmJiEwIT09ci5xdWV1ZXx8KHIucXVldWU9XCJmeFwiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXttZShyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmd2UuZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx3ZS5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoVWUpLmNzcyhcIm9wYWNpdHlcIiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9d2UuaXNFbXB0eU9iamVjdChlKSxvPXdlLnNwZWVkKHQsbixyKSxhPWZ1bmN0aW9uKCl7dmFyIHQ9WSh0aGlzLHdlLmV4dGVuZCh7fSxlKSxvKTsoaXx8V2UuZ2V0KHRoaXMsXCJmaW5pc2hcIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHwhMT09PW8ucXVldWU/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChuKX07cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXQsdD1lLGU9dm9pZCAwKSx0JiYhMSE9PWUmJnRoaXMucXVldWUoZXx8XCJmeFwiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxpPW51bGwhPWUmJmUrXCJxdWV1ZUhvb2tzXCIsbz13ZS50aW1lcnMsYT1XZS5nZXQodGhpcyk7aWYoaSlhW2ldJiZhW2ldLnN0b3AmJnIoYVtpXSk7ZWxzZSBmb3IoaSBpbiBhKWFbaV0mJmFbaV0uc3RvcCYmYnQudGVzdChpKSYmcihhW2ldKTtmb3IoaT1vLmxlbmd0aDtpLS07KW9baV0uZWxlbSE9PXRoaXN8fG51bGwhPWUmJm9baV0ucXVldWUhPT1lfHwob1tpXS5hbmltLnN0b3AobiksdD0hMSxvLnNwbGljZShpLDEpKTshdCYmbnx8d2UuZGVxdWV1ZSh0aGlzLGUpfSl9LGZpbmlzaDpmdW5jdGlvbihlKXtyZXR1cm4hMSE9PWUmJihlPWV8fFwiZnhcIiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7XG52YXIgdCxuPVdlLmdldCh0aGlzKSxyPW5bZStcInF1ZXVlXCJdLGk9bltlK1wicXVldWVIb29rc1wiXSxvPXdlLnRpbWVycyxhPXI/ci5sZW5ndGg6MDtmb3Iobi5maW5pc2g9ITAsd2UucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO3Q8YTt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSksd2UuZWFjaChbXCJ0b2dnbGVcIixcInNob3dcIixcImhpZGVcIl0sZnVuY3Rpb24oZSx0KXt2YXIgbj13ZS5mblt0XTt3ZS5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fFwiYm9vbGVhblwiPT10eXBlb2YgZT9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTp0aGlzLmFuaW1hdGUoWCh0LCEwKSxlLHIsaSl9fSksd2UuZWFjaCh7c2xpZGVEb3duOlgoXCJzaG93XCIpLHNsaWRlVXA6WChcImhpZGVcIiksc2xpZGVUb2dnbGU6WChcInRvZ2dsZVwiKSxmYWRlSW46e29wYWNpdHk6XCJzaG93XCJ9LGZhZGVPdXQ6e29wYWNpdHk6XCJoaWRlXCJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6XCJ0b2dnbGVcIn19LGZ1bmN0aW9uKGUsdCl7d2UuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksd2UudGltZXJzPVtdLHdlLmZ4LnRpY2s9ZnVuY3Rpb24oKXt2YXIgZSx0PTAsbj13ZS50aW1lcnM7Zm9yKHl0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8d2UuZnguc3RvcCgpLHl0PXZvaWQgMH0sd2UuZngudGltZXI9ZnVuY3Rpb24oZSl7d2UudGltZXJzLnB1c2goZSksd2UuZnguc3RhcnQoKX0sd2UuZnguaW50ZXJ2YWw9MTMsd2UuZnguc3RhcnQ9ZnVuY3Rpb24oKXttdHx8KG10PSEwLF8oKSl9LHdlLmZ4LnN0b3A9ZnVuY3Rpb24oKXttdD1udWxsfSx3ZS5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0sd2UuZm4uZGVsYXk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdD13ZS5meD93ZS5meC5zcGVlZHNbdF18fHQ6dCxuPW58fFwiZnhcIix0aGlzLnF1ZXVlKG4sZnVuY3Rpb24obixyKXt2YXIgaT1lLnNldFRpbWVvdXQobix0KTtyLnN0b3A9ZnVuY3Rpb24oKXtlLmNsZWFyVGltZW91dChpKX19KX0sZnVuY3Rpb24oKXt2YXIgZT1hZS5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiksdD1hZS5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpLG49dC5hcHBlbmRDaGlsZChhZS5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpKTtlLnR5cGU9XCJjaGVja2JveFwiLHllLmNoZWNrT249XCJcIiE9PWUudmFsdWUseWUub3B0U2VsZWN0ZWQ9bi5zZWxlY3RlZCxlPWFlLmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKSxlLnZhbHVlPVwidFwiLGUudHlwZT1cInJhZGlvXCIseWUucmFkaW9WYWx1ZT1cInRcIj09PWUudmFsdWV9KCk7dmFyIHd0LFR0PXdlLmV4cHIuYXR0ckhhbmRsZTt3ZS5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gUGUodGhpcyx3ZS5hdHRyLGUsdCxhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt3ZS5yZW1vdmVBdHRyKHRoaXMsZSl9KX19KSx3ZS5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz1lLm5vZGVUeXBlO2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuIHZvaWQgMD09PWUuZ2V0QXR0cmlidXRlP3dlLnByb3AoZSx0LG4pOigxPT09byYmd2UuaXNYTUxEb2MoZSl8fChpPXdlLmF0dHJIb29rc1t0LnRvTG93ZXJDYXNlKCldfHwod2UuZXhwci5tYXRjaC5ib29sLnRlc3QodCk/d3Q6dm9pZCAwKSksdm9pZCAwIT09bj9udWxsPT09bj92b2lkIHdlLnJlbW92ZUF0dHIoZSx0KTppJiZcInNldFwiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOihlLnNldEF0dHJpYnV0ZSh0LG4rXCJcIiksbik6aSYmXCJnZXRcImluIGkmJm51bGwhPT0ocj1pLmdldChlLHQpKT9yOihyPXdlLmZpbmQuYXR0cihlLHQpLG51bGw9PXI/dm9pZCAwOnIpKX0sYXR0ckhvb2tzOnt0eXBlOntzZXQ6ZnVuY3Rpb24oZSx0KXtpZigheWUucmFkaW9WYWx1ZSYmXCJyYWRpb1wiPT09dCYmbyhlLFwiaW5wdXRcIikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKFwidHlwZVwiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10JiZ0Lm1hdGNoKExlKTtpZihpJiYxPT09ZS5ub2RlVHlwZSlmb3IoO249aVtyKytdOyllLnJlbW92ZUF0dHJpYnV0ZShuKX19KSx3dD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4hMT09PXQ/d2UucmVtb3ZlQXR0cihlLG4pOmUuc2V0QXR0cmlidXRlKG4sbiksbn19LHdlLmVhY2god2UuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCgvXFx3Ky9nKSxmdW5jdGlvbihlLHQpe3ZhciBuPVR0W3RdfHx3ZS5maW5kLmF0dHI7VHRbdF09ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG8sYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIHJ8fChvPVR0W2FdLFR0W2FdPWksaT1udWxsIT1uKGUsdCxyKT9hOm51bGwsVHRbYV09byksaX19KTt2YXIgQ3Q9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxFdD0vXig/OmF8YXJlYSkkL2k7d2UuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIFBlKHRoaXMsd2UucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXNbd2UucHJvcEZpeFtlXXx8ZV19KX19KSx3ZS5leHRlbmQoe3Byb3A6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbz1lLm5vZGVUeXBlO2lmKDMhPT1vJiY4IT09byYmMiE9PW8pcmV0dXJuIDE9PT1vJiZ3ZS5pc1hNTERvYyhlKXx8KHQ9d2UucHJvcEZpeFt0XXx8dCxpPXdlLnByb3BIb29rc1t0XSksdm9pZCAwIT09bj9pJiZcInNldFwiaW4gaSYmdm9pZCAwIT09KHI9aS5zZXQoZSxuLHQpKT9yOmVbdF09bjppJiZcImdldFwiaW4gaSYmbnVsbCE9PShyPWkuZ2V0KGUsdCkpP3I6ZVt0XX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXdlLmZpbmQuYXR0cihlLFwidGFiaW5kZXhcIik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6Q3QudGVzdChlLm5vZGVOYW1lKXx8RXQudGVzdChlLm5vZGVOYW1lKSYmZS5ocmVmPzA6LTF9fX0scHJvcEZpeDp7Zm9yOlwiaHRtbEZvclwiLGNsYXNzOlwiY2xhc3NOYW1lXCJ9fSkseWUub3B0U2VsZWN0ZWR8fCh3ZS5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFyZW50Tm9kZTt0JiYodC5zZWxlY3RlZEluZGV4LHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgpfX0pLHdlLmVhY2goW1widGFiSW5kZXhcIixcInJlYWRPbmx5XCIsXCJtYXhMZW5ndGhcIixcImNlbGxTcGFjaW5nXCIsXCJjZWxsUGFkZGluZ1wiLFwicm93U3BhblwiLFwiY29sU3BhblwiLFwidXNlTWFwXCIsXCJmcmFtZUJvcmRlclwiLFwiY29udGVudEVkaXRhYmxlXCJdLGZ1bmN0aW9uKCl7d2UucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx3ZS5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYSxzLHU9MDtpZihtZShlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3dlKHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsSih0aGlzKSkpfSk7aWYodD1LKGUpLHQubGVuZ3RoKWZvcig7bj10aGlzW3UrK107KWlmKGk9SihuKSxyPTE9PT1uLm5vZGVUeXBlJiZcIiBcIitRKGkpK1wiIFwiKXtmb3IoYT0wO289dFthKytdOylyLmluZGV4T2YoXCIgXCIrbytcIiBcIik8MCYmKHIrPW8rXCIgXCIpO3M9UShyKSxpIT09cyYmbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGEscyx1PTA7aWYobWUoZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt3ZSh0aGlzKS5yZW1vdmVDbGFzcyhlLmNhbGwodGhpcyx0LEoodGhpcykpKX0pO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLmF0dHIoXCJjbGFzc1wiLFwiXCIpO2lmKHQ9SyhlKSx0Lmxlbmd0aClmb3IoO249dGhpc1t1KytdOylpZihpPUoobikscj0xPT09bi5ub2RlVHlwZSYmXCIgXCIrUShpKStcIiBcIil7Zm9yKGE9MDtvPXRbYSsrXTspZm9yKDtyLmluZGV4T2YoXCIgXCIrbytcIiBcIik+LTE7KXI9ci5yZXBsYWNlKFwiIFwiK28rXCIgXCIsXCIgXCIpO3M9UShyKSxpIT09cyYmbi5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlLHI9XCJzdHJpbmdcIj09PW58fEFycmF5LmlzQXJyYXkoZSk7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0JiZyP3Q/dGhpcy5hZGRDbGFzcyhlKTp0aGlzLnJlbW92ZUNsYXNzKGUpOm1lKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt3ZSh0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLEoodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdCxpLG8sYTtpZihyKWZvcihpPTAsbz13ZSh0aGlzKSxhPUsoZSk7dD1hW2krK107KW8uaGFzQ2xhc3ModCk/by5yZW1vdmVDbGFzcyh0KTpvLmFkZENsYXNzKHQpO2Vsc2Ugdm9pZCAwIT09ZSYmXCJib29sZWFuXCIhPT1ufHwodD1KKHRoaXMpLHQmJldlLnNldCh0aGlzLFwiX19jbGFzc05hbWVfX1wiLHQpLHRoaXMuc2V0QXR0cmlidXRlJiZ0aGlzLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsdHx8ITE9PT1lP1wiXCI6V2UuZ2V0KHRoaXMsXCJfX2NsYXNzTmFtZV9fXCIpfHxcIlwiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPTA7Zm9yKHQ9XCIgXCIrZStcIiBcIjtuPXRoaXNbcisrXTspaWYoMT09PW4ubm9kZVR5cGUmJihcIiBcIitRKEoobikpK1wiIFwiKS5pbmRleE9mKHQpPi0xKXJldHVybiEwO3JldHVybiExfX0pO3ZhciBrdD0vXFxyL2c7d2UuZm4uZXh0ZW5kKHt2YWw6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGk9dGhpc1swXTt7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gcj1tZShlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIGk7MT09PXRoaXMubm9kZVR5cGUmJihpPXI/ZS5jYWxsKHRoaXMsbix3ZSh0aGlzKS52YWwoKSk6ZSxudWxsPT1pP2k9XCJcIjpcIm51bWJlclwiPT10eXBlb2YgaT9pKz1cIlwiOkFycmF5LmlzQXJyYXkoaSkmJihpPXdlLm1hcChpLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP1wiXCI6ZStcIlwifSkpLCh0PXdlLnZhbEhvb2tzW3RoaXMudHlwZV18fHdlLnZhbEhvb2tzW3RoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0pJiZcInNldFwiaW4gdCYmdm9pZCAwIT09dC5zZXQodGhpcyxpLFwidmFsdWVcIil8fCh0aGlzLnZhbHVlPWkpKX0pO2lmKGkpcmV0dXJuKHQ9d2UudmFsSG9va3NbaS50eXBlXXx8d2UudmFsSG9va3NbaS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJlwiZ2V0XCJpbiB0JiZ2b2lkIDAhPT0obj10LmdldChpLFwidmFsdWVcIikpP246KG49aS52YWx1ZSxcInN0cmluZ1wiPT10eXBlb2Ygbj9uLnJlcGxhY2Uoa3QsXCJcIik6bnVsbD09bj9cIlwiOm4pfX19KSx3ZS5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD13ZS5maW5kLmF0dHIoZSxcInZhbHVlXCIpO3JldHVybiBudWxsIT10P3Q6USh3ZS50ZXh0KGUpKX19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpPWUub3B0aW9ucyxhPWUuc2VsZWN0ZWRJbmRleCxzPVwic2VsZWN0LW9uZVwiPT09ZS50eXBlLHU9cz9udWxsOltdLGw9cz9hKzE6aS5sZW5ndGg7Zm9yKHI9YTwwP2w6cz9hOjA7cjxsO3IrKylpZihuPWlbcl0sKG4uc2VsZWN0ZWR8fHI9PT1hKSYmIW4uZGlzYWJsZWQmJighbi5wYXJlbnROb2RlLmRpc2FibGVkfHwhbyhuLnBhcmVudE5vZGUsXCJvcHRncm91cFwiKSkpe2lmKHQ9d2UobikudmFsKCkscylyZXR1cm4gdDt1LnB1c2godCl9cmV0dXJuIHV9LHNldDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyLGk9ZS5vcHRpb25zLG89d2UubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7YS0tOylyPWlbYV0sKHIuc2VsZWN0ZWQ9d2UuaW5BcnJheSh3ZS52YWxIb29rcy5vcHRpb24uZ2V0KHIpLG8pPi0xKSYmKG49ITApO3JldHVybiBufHwoZS5zZWxlY3RlZEluZGV4PS0xKSxvfX19fSksd2UuZWFjaChbXCJyYWRpb1wiLFwiY2hlY2tib3hcIl0sZnVuY3Rpb24oKXt3ZS52YWxIb29rc1t0aGlzXT17c2V0OmZ1bmN0aW9uKGUsdCl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPXdlLmluQXJyYXkod2UoZSkudmFsKCksdCk+LTF9fSx5ZS5jaGVja09ufHwod2UudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKT9cIm9uXCI6ZS52YWx1ZX0pfSkseWUuZm9jdXNpbj1cIm9uZm9jdXNpblwiaW4gZTt2YXIgU3Q9L14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLER0PWZ1bmN0aW9uKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9O3dlLmV4dGVuZCh3ZS5ldmVudCx7dHJpZ2dlcjpmdW5jdGlvbih0LG4scixpKXt2YXIgbyxhLHMsdSxsLGMsZixwLGQ9W3J8fGFlXSxoPWhlLmNhbGwodCxcInR5cGVcIik/dC50eXBlOnQsZz1oZS5jYWxsKHQsXCJuYW1lc3BhY2VcIik/dC5uYW1lc3BhY2Uuc3BsaXQoXCIuXCIpOltdO2lmKGE9cD1zPXI9cnx8YWUsMyE9PXIubm9kZVR5cGUmJjghPT1yLm5vZGVUeXBlJiYhU3QudGVzdChoK3dlLmV2ZW50LnRyaWdnZXJlZCkmJihoLmluZGV4T2YoXCIuXCIpPi0xJiYoZz1oLnNwbGl0KFwiLlwiKSxoPWcuc2hpZnQoKSxnLnNvcnQoKSksbD1oLmluZGV4T2YoXCI6XCIpPDAmJlwib25cIitoLHQ9dFt3ZS5leHBhbmRvXT90Om5ldyB3ZS5FdmVudChoLFwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0KSx0LmlzVHJpZ2dlcj1pPzI6Myx0Lm5hbWVzcGFjZT1nLmpvaW4oXCIuXCIpLHQucm5hbWVzcGFjZT10Lm5hbWVzcGFjZT9uZXcgUmVnRXhwKFwiKF58XFxcXC4pXCIrZy5qb2luKFwiXFxcXC4oPzouKlxcXFwufClcIikrXCIoXFxcXC58JClcIik6bnVsbCx0LnJlc3VsdD12b2lkIDAsdC50YXJnZXR8fCh0LnRhcmdldD1yKSxuPW51bGw9PW4/W3RdOndlLm1ha2VBcnJheShuLFt0XSksZj13ZS5ldmVudC5zcGVjaWFsW2hdfHx7fSxpfHwhZi50cmlnZ2VyfHwhMSE9PWYudHJpZ2dlci5hcHBseShyLG4pKSl7aWYoIWkmJiFmLm5vQnViYmxlJiYheGUocikpe2Zvcih1PWYuZGVsZWdhdGVUeXBlfHxoLFN0LnRlc3QodStoKXx8KGE9YS5wYXJlbnROb2RlKTthO2E9YS5wYXJlbnROb2RlKWQucHVzaChhKSxzPWE7cz09PShyLm93bmVyRG9jdW1lbnR8fGFlKSYmZC5wdXNoKHMuZGVmYXVsdFZpZXd8fHMucGFyZW50V2luZG93fHxlKX1mb3Iobz0wOyhhPWRbbysrXSkmJiF0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KXA9YSx0LnR5cGU9bz4xP3U6Zi5iaW5kVHlwZXx8aCxjPShXZS5nZXQoYSxcImV2ZW50c1wiKXx8e30pW3QudHlwZV0mJldlLmdldChhLFwiaGFuZGxlXCIpLGMmJmMuYXBwbHkoYSxuKSwoYz1sJiZhW2xdKSYmYy5hcHBseSYmSWUoYSkmJih0LnJlc3VsdD1jLmFwcGx5KGEsbiksITE9PT10LnJlc3VsdCYmdC5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gdC50eXBlPWgsaXx8dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8Zi5fZGVmYXVsdCYmITEhPT1mLl9kZWZhdWx0LmFwcGx5KGQucG9wKCksbil8fCFJZShyKXx8bCYmbWUocltoXSkmJiF4ZShyKSYmKHM9cltsXSxzJiYocltsXT1udWxsKSx3ZS5ldmVudC50cmlnZ2VyZWQ9aCx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJnAuYWRkRXZlbnRMaXN0ZW5lcihoLER0KSxyW2hdKCksdC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpJiZwLnJlbW92ZUV2ZW50TGlzdGVuZXIoaCxEdCksd2UuZXZlbnQudHJpZ2dlcmVkPXZvaWQgMCxzJiYocltsXT1zKSksdC5yZXN1bHR9fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9d2UuZXh0ZW5kKG5ldyB3ZS5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITB9KTt3ZS5ldmVudC50cmlnZ2VyKHIsbnVsbCx0KX19KSx3ZS5mbi5leHRlbmQoe3RyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7d2UuZXZlbnQudHJpZ2dlcihlLHQsdGhpcyl9KX0sdHJpZ2dlckhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzWzBdO2lmKG4pcmV0dXJuIHdlLmV2ZW50LnRyaWdnZXIoZSx0LG4sITApfX0pLHllLmZvY3VzaW58fHdlLmVhY2goe2ZvY3VzOlwiZm9jdXNpblwiLGJsdXI6XCJmb2N1c291dFwifSxmdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKGUpe3dlLmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsd2UuZXZlbnQuZml4KGUpKX07d2UuZXZlbnQuc3BlY2lhbFt0XT17c2V0dXA6ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsaT1XZS5hY2Nlc3Mocix0KTtpfHxyLmFkZEV2ZW50TGlzdGVuZXIoZSxuLCEwKSxXZS5hY2Nlc3Mocix0LChpfHwwKSsxKX0sdGVhcmRvd246ZnVuY3Rpb24oKXt2YXIgcj10aGlzLm93bmVyRG9jdW1lbnR8fHRoaXMsaT1XZS5hY2Nlc3Mocix0KS0xO2k/V2UuYWNjZXNzKHIsdCxpKTooci5yZW1vdmVFdmVudExpc3RlbmVyKGUsbiwhMCksV2UucmVtb3ZlKHIsdCkpfX19KTt2YXIgTnQ9ZS5sb2NhdGlvbixBdD1EYXRlLm5vdygpLGp0PS9cXD8vO3dlLnBhcnNlWE1MPWZ1bmN0aW9uKHQpe3ZhciBuO2lmKCF0fHxcInN0cmluZ1wiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0cnl7bj0obmV3IGUuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodCxcInRleHQveG1sXCIpfWNhdGNoKGUpe249dm9pZCAwfXJldHVybiBuJiYhbi5nZXRFbGVtZW50c0J5VGFnTmFtZShcInBhcnNlcmVycm9yXCIpLmxlbmd0aHx8d2UuZXJyb3IoXCJJbnZhbGlkIFhNTDogXCIrdCksbn07dmFyIHF0PS9cXFtcXF0kLyxMdD0vXFxyP1xcbi9nLEh0PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxPdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7d2UucGFyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9ZnVuY3Rpb24oZSx0KXt2YXIgbj1tZSh0KT90KCk6dDtyW3IubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrXCI9XCIrZW5jb2RlVVJJQ29tcG9uZW50KG51bGw9PW4/XCJcIjpuKX07aWYoQXJyYXkuaXNBcnJheShlKXx8ZS5qcXVlcnkmJiF3ZS5pc1BsYWluT2JqZWN0KGUpKXdlLmVhY2goZSxmdW5jdGlvbigpe2kodGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IobiBpbiBlKVoobixlW25dLHQsaSk7cmV0dXJuIHIuam9pbihcIiZcIil9LHdlLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHdlLnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGU9d2UucHJvcCh0aGlzLFwiZWxlbWVudHNcIik7cmV0dXJuIGU/d2UubWFrZUFycmF5KGUpOnRoaXN9KS5maWx0ZXIoZnVuY3Rpb24oKXt2YXIgZT10aGlzLnR5cGU7cmV0dXJuIHRoaXMubmFtZSYmIXdlKHRoaXMpLmlzKFwiOmRpc2FibGVkXCIpJiZPdC50ZXN0KHRoaXMubm9kZU5hbWUpJiYhSHQudGVzdChlKSYmKHRoaXMuY2hlY2tlZHx8IVllLnRlc3QoZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49d2UodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP3dlLm1hcChuLGZ1bmN0aW9uKGUpe3JldHVybntuYW1lOnQubmFtZSx2YWx1ZTplLnJlcGxhY2UoTHQsXCJcXHJcXG5cIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShMdCxcIlxcclxcblwiKX19KS5nZXQoKX19KTt2YXIgUHQ9LyUyMC9nLE10PS8jLiokLyxSdD0vKFs/Jl0pXz1bXiZdKi8sSXQ9L14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9nbSxXdD0vXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLywkdD0vXig/OkdFVHxIRUFEKSQvLEJ0PS9eXFwvXFwvLyxGdD17fSxfdD17fSx6dD1cIiovXCIuY29uY2F0KFwiKlwiKSxYdD1hZS5jcmVhdGVFbGVtZW50KFwiYVwiKTtYdC5ocmVmPU50LmhyZWYsd2UuZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDpOdC5ocmVmLHR5cGU6XCJHRVRcIixpc0xvY2FsOld0LnRlc3QoTnQucHJvdG9jb2wpLGdsb2JhbDohMCxwcm9jZXNzRGF0YTohMCxhc3luYzohMCxjb250ZW50VHlwZTpcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLGFjY2VwdHM6e1wiKlwiOnp0LHRleHQ6XCJ0ZXh0L3BsYWluXCIsaHRtbDpcInRleHQvaHRtbFwiLHhtbDpcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixqc29uOlwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJ9LGNvbnRlbnRzOnt4bWw6L1xcYnhtbFxcYi8saHRtbDovXFxiaHRtbC8sanNvbjovXFxianNvblxcYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6XCJyZXNwb25zZVhNTFwiLHRleHQ6XCJyZXNwb25zZVRleHRcIixqc29uOlwicmVzcG9uc2VKU09OXCJ9LGNvbnZlcnRlcnM6e1wiKiB0ZXh0XCI6U3RyaW5nLFwidGV4dCBodG1sXCI6ITAsXCJ0ZXh0IGpzb25cIjpKU09OLnBhcnNlLFwidGV4dCB4bWxcIjp3ZS5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/bmUobmUoZSx3ZS5hamF4U2V0dGluZ3MpLHQpOm5lKHdlLmFqYXhTZXR0aW5ncyxlKX0sYWpheFByZWZpbHRlcjplZShGdCksYWpheFRyYW5zcG9ydDplZShfdCksYWpheDpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIodCxuLHIscyl7dmFyIGwscCxkLGIsdyxUPW47Y3x8KGM9ITAsdSYmZS5jbGVhclRpbWVvdXQodSksaT12b2lkIDAsYT1zfHxcIlwiLEMucmVhZHlTdGF0ZT10PjA/NDowLGw9dD49MjAwJiZ0PDMwMHx8MzA0PT09dCxyJiYoYj1yZShoLEMscikpLGI9aWUoaCxiLEMsbCksbD8oaC5pZk1vZGlmaWVkJiYodz1DLmdldFJlc3BvbnNlSGVhZGVyKFwiTGFzdC1Nb2RpZmllZFwiKSx3JiYod2UubGFzdE1vZGlmaWVkW29dPXcpLCh3PUMuZ2V0UmVzcG9uc2VIZWFkZXIoXCJldGFnXCIpKSYmKHdlLmV0YWdbb109dykpLDIwND09PXR8fFwiSEVBRFwiPT09aC50eXBlP1Q9XCJub2NvbnRlbnRcIjozMDQ9PT10P1Q9XCJub3Rtb2RpZmllZFwiOihUPWIuc3RhdGUscD1iLmRhdGEsZD1iLmVycm9yLGw9IWQpKTooZD1ULCF0JiZUfHwoVD1cImVycm9yXCIsdDwwJiYodD0wKSkpLEMuc3RhdHVzPXQsQy5zdGF0dXNUZXh0PShufHxUKStcIlwiLGw/eS5yZXNvbHZlV2l0aChnLFtwLFQsQ10pOnkucmVqZWN0V2l0aChnLFtDLFQsZF0pLEMuc3RhdHVzQ29kZSh4KSx4PXZvaWQgMCxmJiZ2LnRyaWdnZXIobD9cImFqYXhTdWNjZXNzXCI6XCJhamF4RXJyb3JcIixbQyxoLGw/cDpkXSksbS5maXJlV2l0aChnLFtDLFRdKSxmJiYodi50cmlnZ2VyKFwiYWpheENvbXBsZXRlXCIsW0MsaF0pLC0td2UuYWN0aXZlfHx3ZS5ldmVudC50cmlnZ2VyKFwiYWpheFN0b3BcIikpKX1cIm9iamVjdFwiPT10eXBlb2YgdCYmKG49dCx0PXZvaWQgMCksbj1ufHx7fTt2YXIgaSxvLGEscyx1LGwsYyxmLHAsZCxoPXdlLmFqYXhTZXR1cCh7fSxuKSxnPWguY29udGV4dHx8aCx2PWguY29udGV4dCYmKGcubm9kZVR5cGV8fGcuanF1ZXJ5KT93ZShnKTp3ZS5ldmVudCx5PXdlLkRlZmVycmVkKCksbT13ZS5DYWxsYmFja3MoXCJvbmNlIG1lbW9yeVwiKSx4PWguc3RhdHVzQ29kZXx8e30sYj17fSx3PXt9LFQ9XCJjYW5jZWxlZFwiLEM9e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighcylmb3Iocz17fTt0PUl0LmV4ZWMoYSk7KXNbdFsxXS50b0xvd2VyQ2FzZSgpXT10WzJdO3Q9c1tlLnRvTG93ZXJDYXNlKCldfXJldHVybiBudWxsPT10P251bGw6dH0sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIGM/YTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG51bGw9PWMmJihlPXdbZS50b0xvd2VyQ2FzZSgpXT13W2UudG9Mb3dlckNhc2UoKV18fGUsYltlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1jJiYoaC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoYylDLmFsd2F5cyhlW0Muc3RhdHVzXSk7ZWxzZSBmb3IodCBpbiBlKXhbdF09W3hbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe3ZhciB0PWV8fFQ7cmV0dXJuIGkmJmkuYWJvcnQodCkscigwLHQpLHRoaXN9fTtpZih5LnByb21pc2UoQyksaC51cmw9KCh0fHxoLnVybHx8TnQuaHJlZikrXCJcIikucmVwbGFjZShCdCxOdC5wcm90b2NvbCtcIi8vXCIpLGgudHlwZT1uLm1ldGhvZHx8bi50eXBlfHxoLm1ldGhvZHx8aC50eXBlLGguZGF0YVR5cGVzPShoLmRhdGFUeXBlfHxcIipcIikudG9Mb3dlckNhc2UoKS5tYXRjaChMZSl8fFtcIlwiXSxudWxsPT1oLmNyb3NzRG9tYWluKXtsPWFlLmNyZWF0ZUVsZW1lbnQoXCJhXCIpO3RyeXtsLmhyZWY9aC51cmwsbC5ocmVmPWwuaHJlZixoLmNyb3NzRG9tYWluPVh0LnByb3RvY29sK1wiLy9cIitYdC5ob3N0IT1sLnByb3RvY29sK1wiLy9cIitsLmhvc3R9Y2F0Y2goZSl7aC5jcm9zc0RvbWFpbj0hMH19aWYoaC5kYXRhJiZoLnByb2Nlc3NEYXRhJiZcInN0cmluZ1wiIT10eXBlb2YgaC5kYXRhJiYoaC5kYXRhPXdlLnBhcmFtKGguZGF0YSxoLnRyYWRpdGlvbmFsKSksdGUoRnQsaCxuLEMpLGMpcmV0dXJuIEM7Zj13ZS5ldmVudCYmaC5nbG9iYWwsZiYmMD09d2UuYWN0aXZlKysmJndlLmV2ZW50LnRyaWdnZXIoXCJhamF4U3RhcnRcIiksaC50eXBlPWgudHlwZS50b1VwcGVyQ2FzZSgpLGguaGFzQ29udGVudD0hJHQudGVzdChoLnR5cGUpLG89aC51cmwucmVwbGFjZShNdCxcIlwiKSxoLmhhc0NvbnRlbnQ/aC5kYXRhJiZoLnByb2Nlc3NEYXRhJiYwPT09KGguY29udGVudFR5cGV8fFwiXCIpLmluZGV4T2YoXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIikmJihoLmRhdGE9aC5kYXRhLnJlcGxhY2UoUHQsXCIrXCIpKTooZD1oLnVybC5zbGljZShvLmxlbmd0aCksaC5kYXRhJiYoaC5wcm9jZXNzRGF0YXx8XCJzdHJpbmdcIj09dHlwZW9mIGguZGF0YSkmJihvKz0oanQudGVzdChvKT9cIiZcIjpcIj9cIikraC5kYXRhLGRlbGV0ZSBoLmRhdGEpLCExPT09aC5jYWNoZSYmKG89by5yZXBsYWNlKFJ0LFwiJDFcIiksZD0oanQudGVzdChvKT9cIiZcIjpcIj9cIikrXCJfPVwiK0F0KysrZCksaC51cmw9bytkKSxoLmlmTW9kaWZpZWQmJih3ZS5sYXN0TW9kaWZpZWRbb10mJkMuc2V0UmVxdWVzdEhlYWRlcihcIklmLU1vZGlmaWVkLVNpbmNlXCIsd2UubGFzdE1vZGlmaWVkW29dKSx3ZS5ldGFnW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoXCJJZi1Ob25lLU1hdGNoXCIsd2UuZXRhZ1tvXSkpLChoLmRhdGEmJmguaGFzQ29udGVudCYmITEhPT1oLmNvbnRlbnRUeXBlfHxuLmNvbnRlbnRUeXBlKSYmQy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsaC5jb250ZW50VHlwZSksQy5zZXRSZXF1ZXN0SGVhZGVyKFwiQWNjZXB0XCIsaC5kYXRhVHlwZXNbMF0mJmguYWNjZXB0c1toLmRhdGFUeXBlc1swXV0/aC5hY2NlcHRzW2guZGF0YVR5cGVzWzBdXSsoXCIqXCIhPT1oLmRhdGFUeXBlc1swXT9cIiwgXCIrenQrXCI7IHE9MC4wMVwiOlwiXCIpOmguYWNjZXB0c1tcIipcIl0pO2ZvcihwIGluIGguaGVhZGVycylDLnNldFJlcXVlc3RIZWFkZXIocCxoLmhlYWRlcnNbcF0pO2lmKGguYmVmb3JlU2VuZCYmKCExPT09aC5iZWZvcmVTZW5kLmNhbGwoZyxDLGgpfHxjKSlyZXR1cm4gQy5hYm9ydCgpO2lmKFQ9XCJhYm9ydFwiLG0uYWRkKGguY29tcGxldGUpLEMuZG9uZShoLnN1Y2Nlc3MpLEMuZmFpbChoLmVycm9yKSxpPXRlKF90LGgsbixDKSl7aWYoQy5yZWFkeVN0YXRlPTEsZiYmdi50cmlnZ2VyKFwiYWpheFNlbmRcIixbQyxoXSksYylyZXR1cm4gQztoLmFzeW5jJiZoLnRpbWVvdXQ+MCYmKHU9ZS5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Qy5hYm9ydChcInRpbWVvdXRcIil9LGgudGltZW91dCkpO3RyeXtjPSExLGkuc2VuZChiLHIpfWNhdGNoKGUpe2lmKGMpdGhyb3cgZTtyKC0xLGUpfX1lbHNlIHIoLTEsXCJObyBUcmFuc3BvcnRcIik7cmV0dXJuIEN9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB3ZS5nZXQoZSx0LG4sXCJqc29uXCIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gd2UuZ2V0KGUsdm9pZCAwLHQsXCJzY3JpcHRcIil9fSksd2UuZWFjaChbXCJnZXRcIixcInBvc3RcIl0sZnVuY3Rpb24oZSx0KXt3ZVt0XT1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gbWUobikmJihpPWl8fHIscj1uLG49dm9pZCAwKSx3ZS5hamF4KHdlLmV4dGVuZCh7dXJsOmUsdHlwZTp0LGRhdGFUeXBlOmksZGF0YTpuLHN1Y2Nlc3M6cn0sd2UuaXNQbGFpbk9iamVjdChlKSYmZSkpfX0pLHdlLl9ldmFsVXJsPWZ1bmN0aW9uKGUpe3JldHVybiB3ZS5hamF4KHt1cmw6ZSx0eXBlOlwiR0VUXCIsZGF0YVR5cGU6XCJzY3JpcHRcIixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsdGhyb3dzOiEwfSl9LHdlLmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gdGhpc1swXSYmKG1lKGUpJiYoZT1lLmNhbGwodGhpc1swXSkpLHQ9d2UoZSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKSx0aGlzWzBdLnBhcmVudE5vZGUmJnQuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLHQubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXM7ZS5maXJzdEVsZW1lbnRDaGlsZDspZT1lLmZpcnN0RWxlbWVudENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpKSx0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG1lKGUpP3RoaXMuZWFjaChmdW5jdGlvbih0KXt3ZSh0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9d2UodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9bWUoZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt3ZSh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoXCJib2R5XCIpLmVhY2goZnVuY3Rpb24oKXt3ZSh0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSksdGhpc319KSx3ZS5leHByLnBzZXVkb3MuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiF3ZS5leHByLnBzZXVkb3MudmlzaWJsZShlKX0sd2UuZXhwci5wc2V1ZG9zLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuISEoZS5vZmZzZXRXaWR0aHx8ZS5vZmZzZXRIZWlnaHR8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSx3ZS5hamF4U2V0dGluZ3MueGhyPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdH1jYXRjaChlKXt9fTt2YXIgVXQ9ezA6MjAwLDEyMjM6MjA0fSxWdD13ZS5hamF4U2V0dGluZ3MueGhyKCk7eWUuY29ycz0hIVZ0JiZcIndpdGhDcmVkZW50aWFsc1wiaW4gVnQseWUuYWpheD1WdD0hIVZ0LHdlLmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24odCl7dmFyIG4scjtpZih5ZS5jb3JzfHxWdCYmIXQuY3Jvc3NEb21haW4pcmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxvKXt2YXIgYSxzPXQueGhyKCk7aWYocy5vcGVuKHQudHlwZSx0LnVybCx0LmFzeW5jLHQudXNlcm5hbWUsdC5wYXNzd29yZCksdC54aHJGaWVsZHMpZm9yKGEgaW4gdC54aHJGaWVsZHMpc1thXT10LnhockZpZWxkc1thXTt0Lm1pbWVUeXBlJiZzLm92ZXJyaWRlTWltZVR5cGUmJnMub3ZlcnJpZGVNaW1lVHlwZSh0Lm1pbWVUeXBlKSx0LmNyb3NzRG9tYWlufHxpW1wiWC1SZXF1ZXN0ZWQtV2l0aFwiXXx8KGlbXCJYLVJlcXVlc3RlZC1XaXRoXCJdPVwiWE1MSHR0cFJlcXVlc3RcIik7Zm9yKGEgaW4gaSlzLnNldFJlcXVlc3RIZWFkZXIoYSxpW2FdKTtuPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe24mJihuPXI9cy5vbmxvYWQ9cy5vbmVycm9yPXMub25hYm9ydD1zLm9udGltZW91dD1zLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLFwiYWJvcnRcIj09PWU/cy5hYm9ydCgpOlwiZXJyb3JcIj09PWU/XCJudW1iZXJcIiE9dHlwZW9mIHMuc3RhdHVzP28oMCxcImVycm9yXCIpOm8ocy5zdGF0dXMscy5zdGF0dXNUZXh0KTpvKFV0W3Muc3RhdHVzXXx8cy5zdGF0dXMscy5zdGF0dXNUZXh0LFwidGV4dFwiIT09KHMucmVzcG9uc2VUeXBlfHxcInRleHRcIil8fFwic3RyaW5nXCIhPXR5cGVvZiBzLnJlc3BvbnNlVGV4dD97YmluYXJ5OnMucmVzcG9uc2V9Ont0ZXh0OnMucmVzcG9uc2VUZXh0fSxzLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSl9fSxzLm9ubG9hZD1uKCkscj1zLm9uZXJyb3I9cy5vbnRpbWVvdXQ9bihcImVycm9yXCIpLHZvaWQgMCE9PXMub25hYm9ydD9zLm9uYWJvcnQ9cjpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1zLnJlYWR5U3RhdGUmJmUuc2V0VGltZW91dChmdW5jdGlvbigpe24mJnIoKX0pfSxuPW4oXCJhYm9ydFwiKTt0cnl7cy5zZW5kKHQuaGFzQ29udGVudCYmdC5kYXRhfHxudWxsKX1jYXRjaChlKXtpZihuKXRocm93IGV9fSxhYm9ydDpmdW5jdGlvbigpe24mJm4oKX19fSksd2UuYWpheFByZWZpbHRlcihmdW5jdGlvbihlKXtlLmNyb3NzRG9tYWluJiYoZS5jb250ZW50cy5zY3JpcHQ9ITEpfSksd2UuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6XCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwifSxjb250ZW50czp7c2NyaXB0Oi9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL30sY29udmVydGVyczp7XCJ0ZXh0IHNjcmlwdFwiOmZ1bmN0aW9uKGUpe3JldHVybiB3ZS5nbG9iYWxFdmFsKGUpLGV9fX0pLHdlLmFqYXhQcmVmaWx0ZXIoXCJzY3JpcHRcIixmdW5jdGlvbihlKXt2b2lkIDA9PT1lLmNhY2hlJiYoZS5jYWNoZT0hMSksZS5jcm9zc0RvbWFpbiYmKGUudHlwZT1cIkdFVFwiKX0pLHdlLmFqYXhUcmFuc3BvcnQoXCJzY3JpcHRcIixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgdCxuO3JldHVybntzZW5kOmZ1bmN0aW9uKHIsaSl7dD13ZShcIjxzY3JpcHQ+XCIpLnByb3Aoe2NoYXJzZXQ6ZS5zY3JpcHRDaGFyc2V0LHNyYzplLnVybH0pLm9uKFwibG9hZCBlcnJvclwiLG49ZnVuY3Rpb24oZSl7dC5yZW1vdmUoKSxuPW51bGwsZSYmaShcImVycm9yXCI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksYWUuaGVhZC5hcHBlbmRDaGlsZCh0WzBdKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuKCl9fX19KTt2YXIgR3Q9W10sWXQ9Lyg9KVxcPyg/PSZ8JCl8XFw/XFw/Lzt3ZS5hamF4U2V0dXAoe2pzb25wOlwiY2FsbGJhY2tcIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9R3QucG9wKCl8fHdlLmV4cGFuZG8rXCJfXCIrQXQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHdlLmFqYXhQcmVmaWx0ZXIoXCJqc29uIGpzb25wXCIsZnVuY3Rpb24odCxuLHIpe3ZhciBpLG8sYSxzPSExIT09dC5qc29ucCYmKFl0LnRlc3QodC51cmwpP1widXJsXCI6XCJzdHJpbmdcIj09dHlwZW9mIHQuZGF0YSYmMD09PSh0LmNvbnRlbnRUeXBlfHxcIlwiKS5pbmRleE9mKFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpJiZZdC50ZXN0KHQuZGF0YSkmJlwiZGF0YVwiKTtpZihzfHxcImpzb25wXCI9PT10LmRhdGFUeXBlc1swXSlyZXR1cm4gaT10Lmpzb25wQ2FsbGJhY2s9bWUodC5qc29ucENhbGxiYWNrKT90Lmpzb25wQ2FsbGJhY2soKTp0Lmpzb25wQ2FsbGJhY2sscz90W3NdPXRbc10ucmVwbGFjZShZdCxcIiQxXCIraSk6ITEhPT10Lmpzb25wJiYodC51cmwrPShqdC50ZXN0KHQudXJsKT9cIiZcIjpcIj9cIikrdC5qc29ucCtcIj1cIitpKSx0LmNvbnZlcnRlcnNbXCJzY3JpcHQganNvblwiXT1mdW5jdGlvbigpe3JldHVybiBhfHx3ZS5lcnJvcihpK1wiIHdhcyBub3QgY2FsbGVkXCIpLGFbMF19LHQuZGF0YVR5cGVzWzBdPVwianNvblwiLG89ZVtpXSxlW2ldPWZ1bmN0aW9uKCl7YT1hcmd1bWVudHN9LHIuYWx3YXlzKGZ1bmN0aW9uKCl7dm9pZCAwPT09bz93ZShlKS5yZW1vdmVQcm9wKGkpOmVbaV09byx0W2ldJiYodC5qc29ucENhbGxiYWNrPW4uanNvbnBDYWxsYmFjayxHdC5wdXNoKGkpKSxhJiZtZShvKSYmbyhhWzBdKSxhPW89dm9pZCAwfSksXCJzY3JpcHRcIn0pLHllLmNyZWF0ZUhUTUxEb2N1bWVudD1mdW5jdGlvbigpe3ZhciBlPWFlLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcIlwiKS5ib2R5O3JldHVybiBlLmlubmVySFRNTD1cIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCIsMj09PWUuY2hpbGROb2Rlcy5sZW5ndGh9KCksd2UucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtpZihcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm5bXTtcImJvb2xlYW5cIj09dHlwZW9mIHQmJihuPXQsdD0hMSk7dmFyIHIsaSxvO3JldHVybiB0fHwoeWUuY3JlYXRlSFRNTERvY3VtZW50Pyh0PWFlLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChcIlwiKSxyPXQuY3JlYXRlRWxlbWVudChcImJhc2VcIiksci5ocmVmPWFlLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKHIpKTp0PWFlKSxpPURlLmV4ZWMoZSksbz0hbiYmW10saT9bdC5jcmVhdGVFbGVtZW50KGlbMV0pXTooaT1DKFtlXSx0LG8pLG8mJm8ubGVuZ3RoJiZ3ZShvKS5yZW1vdmUoKSx3ZS5tZXJnZShbXSxpLmNoaWxkTm9kZXMpKX0sd2UuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGE9dGhpcyxzPWUuaW5kZXhPZihcIiBcIik7cmV0dXJuIHM+LTEmJihyPVEoZS5zbGljZShzKSksZT1lLnNsaWNlKDAscykpLG1lKHQpPyhuPXQsdD12b2lkIDApOnQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiYoaT1cIlBPU1RcIiksYS5sZW5ndGg+MCYmd2UuYWpheCh7dXJsOmUsdHlwZTppfHxcIkdFVFwiLGRhdGFUeXBlOlwiaHRtbFwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMsYS5odG1sKHI/d2UoXCI8ZGl2PlwiKS5hcHBlbmQod2UucGFyc2VIVE1MKGUpKS5maW5kKHIpOmUpfSkuYWx3YXlzKG4mJmZ1bmN0aW9uKGUsdCl7YS5lYWNoKGZ1bmN0aW9uKCl7bi5hcHBseSh0aGlzLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pfSksdGhpc30sd2UuZWFjaChbXCJhamF4U3RhcnRcIixcImFqYXhTdG9wXCIsXCJhamF4Q29tcGxldGVcIixcImFqYXhFcnJvclwiLFwiYWpheFN1Y2Nlc3NcIixcImFqYXhTZW5kXCJdLGZ1bmN0aW9uKGUsdCl7d2UuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub24odCxlKX19KSx3ZS5leHByLnBzZXVkb3MuYW5pbWF0ZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHdlLmdyZXAod2UudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSx3ZS5vZmZzZXQ9e3NldE9mZnNldDpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxvLGEscyx1LGwsYz13ZS5jc3MoZSxcInBvc2l0aW9uXCIpLGY9d2UoZSkscD17fTtcInN0YXRpY1wiPT09YyYmKGUuc3R5bGUucG9zaXRpb249XCJyZWxhdGl2ZVwiKSxzPWYub2Zmc2V0KCksbz13ZS5jc3MoZSxcInRvcFwiKSx1PXdlLmNzcyhlLFwibGVmdFwiKSxsPShcImFic29sdXRlXCI9PT1jfHxcImZpeGVkXCI9PT1jKSYmKG8rdSkuaW5kZXhPZihcImF1dG9cIik+LTEsbD8ocj1mLnBvc2l0aW9uKCksYT1yLnRvcCxpPXIubGVmdCk6KGE9cGFyc2VGbG9hdChvKXx8MCxpPXBhcnNlRmxvYXQodSl8fDApLG1lKHQpJiYodD10LmNhbGwoZSxuLHdlLmV4dGVuZCh7fSxzKSkpLG51bGwhPXQudG9wJiYocC50b3A9dC50b3Atcy50b3ArYSksbnVsbCE9dC5sZWZ0JiYocC5sZWZ0PXQubGVmdC1zLmxlZnQraSksXCJ1c2luZ1wiaW4gdD90LnVzaW5nLmNhbGwoZSxwKTpmLmNzcyhwKX19LHdlLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PWU/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7d2Uub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgdCxuLHI9dGhpc1swXTtpZihyKXJldHVybiByLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyh0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1yLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDp0LnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6dC5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfX0scG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG4scj10aGlzWzBdLGk9e3RvcDowLGxlZnQ6MH07aWYoXCJmaXhlZFwiPT09d2UuY3NzKHIsXCJwb3NpdGlvblwiKSl0PXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZXtmb3IodD10aGlzLm9mZnNldCgpLG49ci5vd25lckRvY3VtZW50LGU9ci5vZmZzZXRQYXJlbnR8fG4uZG9jdW1lbnRFbGVtZW50O2UmJihlPT09bi5ib2R5fHxlPT09bi5kb2N1bWVudEVsZW1lbnQpJiZcInN0YXRpY1wiPT09d2UuY3NzKGUsXCJwb3NpdGlvblwiKTspZT1lLnBhcmVudE5vZGU7ZSYmZSE9PXImJjE9PT1lLm5vZGVUeXBlJiYoaT13ZShlKS5vZmZzZXQoKSxpLnRvcCs9d2UuY3NzKGUsXCJib3JkZXJUb3BXaWR0aFwiLCEwKSxpLmxlZnQrPXdlLmNzcyhlLFwiYm9yZGVyTGVmdFdpZHRoXCIsITApKX1yZXR1cm57dG9wOnQudG9wLWkudG9wLXdlLmNzcyhyLFwibWFyZ2luVG9wXCIsITApLGxlZnQ6dC5sZWZ0LWkubGVmdC13ZS5jc3MocixcIm1hcmdpbkxlZnRcIiwhMCl9fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMub2Zmc2V0UGFyZW50O2UmJlwic3RhdGljXCI9PT13ZS5jc3MoZSxcInBvc2l0aW9uXCIpOyllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxldH0pfX0pLHdlLmVhY2goe3Njcm9sbExlZnQ6XCJwYWdlWE9mZnNldFwiLHNjcm9sbFRvcDpcInBhZ2VZT2Zmc2V0XCJ9LGZ1bmN0aW9uKGUsdCl7dmFyIG49XCJwYWdlWU9mZnNldFwiPT09dDt3ZS5mbltlXT1mdW5jdGlvbihyKXtyZXR1cm4gUGUodGhpcyxmdW5jdGlvbihlLHIsaSl7dmFyIG87aWYoeGUoZSk/bz1lOjk9PT1lLm5vZGVUeXBlJiYobz1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1pKXJldHVybiBvP29bdF06ZVtyXTtvP28uc2Nyb2xsVG8obj9vLnBhZ2VYT2Zmc2V0Omksbj9pOm8ucGFnZVlPZmZzZXQpOmVbcl09aX0sZSxyLGFyZ3VtZW50cy5sZW5ndGgpfX0pLHdlLmVhY2goW1widG9wXCIsXCJsZWZ0XCJdLGZ1bmN0aW9uKGUsdCl7d2UuY3NzSG9va3NbdF09TSh5ZS5waXhlbFBvc2l0aW9uLGZ1bmN0aW9uKGUsbil7aWYobilyZXR1cm4gbj1QKGUsdCksdXQudGVzdChuKT93ZShlKS5wb3NpdGlvbigpW3RdK1wicHhcIjpufSl9KSx3ZS5lYWNoKHtIZWlnaHQ6XCJoZWlnaHRcIixXaWR0aDpcIndpZHRoXCJ9LGZ1bmN0aW9uKGUsdCl7d2UuZWFjaCh7cGFkZGluZzpcImlubmVyXCIrZSxjb250ZW50OnQsXCJcIjpcIm91dGVyXCIrZX0sZnVuY3Rpb24obixyKXt3ZS5mbltyXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihufHxcImJvb2xlYW5cIiE9dHlwZW9mIGkpLHM9bnx8KCEwPT09aXx8ITA9PT1vP1wibWFyZ2luXCI6XCJib3JkZXJcIik7cmV0dXJuIFBlKHRoaXMsZnVuY3Rpb24odCxuLGkpe3ZhciBvO3JldHVybiB4ZSh0KT8wPT09ci5pbmRleE9mKFwib3V0ZXJcIik/dFtcImlubmVyXCIrZV06dC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbXCJjbGllbnRcIitlXTo5PT09dC5ub2RlVHlwZT8obz10LmRvY3VtZW50RWxlbWVudCxNYXRoLm1heCh0LmJvZHlbXCJzY3JvbGxcIitlXSxvW1wic2Nyb2xsXCIrZV0sdC5ib2R5W1wib2Zmc2V0XCIrZV0sb1tcIm9mZnNldFwiK2VdLG9bXCJjbGllbnRcIitlXSkpOnZvaWQgMD09PWk/d2UuY3NzKHQsbixzKTp3ZS5zdHlsZSh0LG4saSxzKX0sdCxhP2k6dm9pZCAwLGEpfX0pfSksd2UuZWFjaChcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIi5zcGxpdChcIiBcIiksZnVuY3Rpb24oZSx0KXt3ZS5mblt0XT1mdW5jdGlvbihlLG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9fSksd2UuZm4uZXh0ZW5kKHtob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSx3ZS5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsXCIqKlwiKTp0aGlzLm9mZih0LGV8fFwiKipcIixuKX19KSx3ZS5wcm94eT1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaTtpZihcInN0cmluZ1wiPT10eXBlb2YgdCYmKG49ZVt0XSx0PWUsZT1uKSxtZShlKSlyZXR1cm4gcj11ZS5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodHx8dGhpcyxyLmNvbmNhdCh1ZS5jYWxsKGFyZ3VtZW50cykpKX0saS5ndWlkPWUuZ3VpZD1lLmd1aWR8fHdlLmd1aWQrKyxpfSx3ZS5ob2xkUmVhZHk9ZnVuY3Rpb24oZSl7ZT93ZS5yZWFkeVdhaXQrKzp3ZS5yZWFkeSghMCl9LHdlLmlzQXJyYXk9QXJyYXkuaXNBcnJheSx3ZS5wYXJzZUpTT049SlNPTi5wYXJzZSx3ZS5ub2RlTmFtZT1vLHdlLmlzRnVuY3Rpb249bWUsd2UuaXNXaW5kb3c9eGUsd2UuY2FtZWxDYXNlPWgsd2UudHlwZT1yLHdlLm5vdz1EYXRlLm5vdyx3ZS5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9d2UudHlwZShlKTtyZXR1cm4oXCJudW1iZXJcIj09PXR8fFwic3RyaW5nXCI9PT10KSYmIWlzTmFOKGUtcGFyc2VGbG9hdChlKSl9LFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKFwianF1ZXJ5XCIsW10sZnVuY3Rpb24oKXtyZXR1cm4gd2V9KTt2YXIgUXQ9ZS5qUXVlcnksSnQ9ZS4kO3JldHVybiB3ZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT13ZSYmKGUuJD1KdCksdCYmZS5qUXVlcnk9PT13ZSYmKGUualF1ZXJ5PVF0KSx3ZX0sdHx8KGUualF1ZXJ5PWUuJD13ZSksd2V9KTsiLCIhZnVuY3Rpb24odCl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIl0sdCk6dChqUXVlcnkpfShmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe2Zvcih2YXIgZT10LmNzcyhcInZpc2liaWxpdHlcIik7XCJpbmhlcml0XCI9PT1lOyl0PXQucGFyZW50KCksZT10LmNzcyhcInZpc2liaWxpdHlcIik7cmV0dXJuXCJoaWRkZW5cIiE9PWV9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGUsaTt0Lmxlbmd0aCYmdFswXSE9PWRvY3VtZW50Oyl7aWYoKFwiYWJzb2x1dGVcIj09PShlPXQuY3NzKFwicG9zaXRpb25cIikpfHxcInJlbGF0aXZlXCI9PT1lfHxcImZpeGVkXCI9PT1lKSYmKGk9cGFyc2VJbnQodC5jc3MoXCJ6SW5kZXhcIiksMTApLCFpc05hTihpKSYmMCE9PWkpKXJldHVybiBpO3Q9dC5wYXJlbnQoKX1yZXR1cm4gMH1mdW5jdGlvbiBzKCl7dGhpcy5fY3VySW5zdD1udWxsLHRoaXMuX2tleUV2ZW50PSExLHRoaXMuX2Rpc2FibGVkSW5wdXRzPVtdLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLHRoaXMuX2luRGlhbG9nPSExLHRoaXMuX21haW5EaXZJZD1cInVpLWRhdGVwaWNrZXItZGl2XCIsdGhpcy5faW5saW5lQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLWlubGluZVwiLHRoaXMuX2FwcGVuZENsYXNzPVwidWktZGF0ZXBpY2tlci1hcHBlbmRcIix0aGlzLl90cmlnZ2VyQ2xhc3M9XCJ1aS1kYXRlcGlja2VyLXRyaWdnZXJcIix0aGlzLl9kaWFsb2dDbGFzcz1cInVpLWRhdGVwaWNrZXItZGlhbG9nXCIsdGhpcy5fZGlzYWJsZUNsYXNzPVwidWktZGF0ZXBpY2tlci1kaXNhYmxlZFwiLHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzPVwidWktZGF0ZXBpY2tlci11bnNlbGVjdGFibGVcIix0aGlzLl9jdXJyZW50Q2xhc3M9XCJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5XCIsdGhpcy5fZGF5T3ZlckNsYXNzPVwidWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlclwiLHRoaXMucmVnaW9uYWw9W10sdGhpcy5yZWdpb25hbFtcIlwiXT17Y2xvc2VUZXh0OlwiRG9uZVwiLHByZXZUZXh0OlwiUHJldlwiLG5leHRUZXh0OlwiTmV4dFwiLGN1cnJlbnRUZXh0OlwiVG9kYXlcIixtb250aE5hbWVzOltcIkphbnVhcnlcIixcIkZlYnJ1YXJ5XCIsXCJNYXJjaFwiLFwiQXByaWxcIixcIk1heVwiLFwiSnVuZVwiLFwiSnVseVwiLFwiQXVndXN0XCIsXCJTZXB0ZW1iZXJcIixcIk9jdG9iZXJcIixcIk5vdmVtYmVyXCIsXCJEZWNlbWJlclwiXSxtb250aE5hbWVzU2hvcnQ6W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXSxkYXlOYW1lczpbXCJTdW5kYXlcIixcIk1vbmRheVwiLFwiVHVlc2RheVwiLFwiV2VkbmVzZGF5XCIsXCJUaHVyc2RheVwiLFwiRnJpZGF5XCIsXCJTYXR1cmRheVwiXSxkYXlOYW1lc1Nob3J0OltcIlN1blwiLFwiTW9uXCIsXCJUdWVcIixcIldlZFwiLFwiVGh1XCIsXCJGcmlcIixcIlNhdFwiXSxkYXlOYW1lc01pbjpbXCJTdVwiLFwiTW9cIixcIlR1XCIsXCJXZVwiLFwiVGhcIixcIkZyXCIsXCJTYVwiXSx3ZWVrSGVhZGVyOlwiV2tcIixkYXRlRm9ybWF0OlwibW0vZGQveXlcIixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OlwiXCJ9LHRoaXMuX2RlZmF1bHRzPXtzaG93T246XCJmb2N1c1wiLHNob3dBbmltOlwiZmFkZUluXCIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OlwiXCIsYnV0dG9uVGV4dDpcIi4uLlwiLGJ1dHRvbkltYWdlOlwiXCIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZTpcImMtMTA6YysxMFwiLHNob3dPdGhlck1vbnRoczohMSxzZWxlY3RPdGhlck1vbnRoczohMSxzaG93V2VlazohMSxjYWxjdWxhdGVXZWVrOnRoaXMuaXNvODYwMVdlZWssc2hvcnRZZWFyQ3V0b2ZmOlwiKzEwXCIsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCxkdXJhdGlvbjpcImZhc3RcIixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6XCJcIixhbHRGb3JtYXQ6XCJcIixjb25zdHJhaW5JbnB1dDohMCxzaG93QnV0dG9uUGFuZWw6ITEsYXV0b1NpemU6ITEsZGlzYWJsZWQ6ITF9LHQuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLHRoaXMucmVnaW9uYWxbXCJcIl0pLHRoaXMucmVnaW9uYWwuZW49dC5leHRlbmQoITAse30sdGhpcy5yZWdpb25hbFtcIlwiXSksdGhpcy5yZWdpb25hbFtcImVuLVVTXCJdPXQuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWwuZW4pLHRoaXMuZHBEaXY9bih0KFwiPGRpdiBpZD0nXCIrdGhpcy5fbWFpbkRpdklkK1wiJyBjbGFzcz0ndWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PlwiKSl9ZnVuY3Rpb24gbihlKXt2YXIgaT1cImJ1dHRvbiwgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXItbmV4dCwgLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIgdGQgYVwiO3JldHVybiBlLm9uKFwibW91c2VvdXRcIixpLGZ1bmN0aW9uKCl7dCh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItcHJldlwiKSYmdCh0aGlzKS5yZW1vdmVDbGFzcyhcInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLW5leHRcIikmJnQodGhpcykucmVtb3ZlQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXJcIil9KS5vbihcIm1vdXNlb3ZlclwiLGksbyl9ZnVuY3Rpb24gbygpe3QuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIocC5pbmxpbmU/cC5kcERpdi5wYXJlbnQoKVswXTpwLmlucHV0WzBdKXx8KHQodGhpcykucGFyZW50cyhcIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyXCIpLmZpbmQoXCJhXCIpLnJlbW92ZUNsYXNzKFwidWktc3RhdGUtaG92ZXJcIiksdCh0aGlzKS5hZGRDbGFzcyhcInVpLXN0YXRlLWhvdmVyXCIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZihcInVpLWRhdGVwaWNrZXItcHJldlwiKSYmdCh0aGlzKS5hZGRDbGFzcyhcInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlclwiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoXCJ1aS1kYXRlcGlja2VyLW5leHRcIikmJnQodGhpcykuYWRkQ2xhc3MoXCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXJcIikpfWZ1bmN0aW9uIGEoZSxpKXt0LmV4dGVuZChlLGkpO2Zvcih2YXIgcyBpbiBpKW51bGw9PWlbc10mJihlW3NdPWlbc10pO3JldHVybiBlfWZ1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LnZhbCgpO3QuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3JlZnJlc2goKSxlIT09dGhpcy5lbGVtZW50LnZhbCgpJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIpfX10LnVpPXQudWl8fHt9O3ZhciBoPSh0LnVpLnZlcnNpb249XCIxLjEyLjFcIiwwKSxsPUFycmF5LnByb3RvdHlwZS5zbGljZTt0LmNsZWFuRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7dmFyIHMsbixvO2ZvcihvPTA7bnVsbCE9KG49aVtvXSk7bysrKXRyeXtzPXQuX2RhdGEobixcImV2ZW50c1wiKSxzJiZzLnJlbW92ZSYmdChuKS50cmlnZ2VySGFuZGxlcihcInJlbW92ZVwiKX1jYXRjaCh0KXt9ZShpKX19KHQuY2xlYW5EYXRhKSx0LndpZGdldD1mdW5jdGlvbihlLGkscyl7dmFyIG4sbyxhLHI9e30saD1lLnNwbGl0KFwiLlwiKVswXTtlPWUuc3BsaXQoXCIuXCIpWzFdO3ZhciBsPWgrXCItXCIrZTtyZXR1cm4gc3x8KHM9aSxpPXQuV2lkZ2V0KSx0LmlzQXJyYXkocykmJihzPXQuZXh0ZW5kLmFwcGx5KG51bGwsW3t9XS5jb25jYXQocykpKSx0LmV4cHJbXCI6XCJdW2wudG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24oZSl7cmV0dXJuISF0LmRhdGEoZSxsKX0sdFtoXT10W2hdfHx7fSxuPXRbaF1bZV0sbz10W2hdW2VdPWZ1bmN0aW9uKHQsZSl7aWYoIXRoaXMuX2NyZWF0ZVdpZGdldClyZXR1cm4gbmV3IG8odCxlKTthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQodCxlKX0sdC5leHRlbmQobyxuLHt2ZXJzaW9uOnMudmVyc2lvbixfcHJvdG86dC5leHRlbmQoe30scyksX2NoaWxkQ29uc3RydWN0b3JzOltdfSksYT1uZXcgaSxhLm9wdGlvbnM9dC53aWRnZXQuZXh0ZW5kKHt9LGEub3B0aW9ucyksdC5lYWNoKHMsZnVuY3Rpb24oZSxzKXtpZighdC5pc0Z1bmN0aW9uKHMpKXJldHVybiB2b2lkKHJbZV09cyk7cltlXT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaS5wcm90b3R5cGVbZV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGkucHJvdG90eXBlW2VdLmFwcGx5KHRoaXMsdCl9cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLl9zdXBlcixvPXRoaXMuX3N1cGVyQXBwbHk7cmV0dXJuIHRoaXMuX3N1cGVyPXQsdGhpcy5fc3VwZXJBcHBseT1uLGU9cy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fc3VwZXI9aSx0aGlzLl9zdXBlckFwcGx5PW8sZX19KCl9KSxvLnByb3RvdHlwZT10LndpZGdldC5leHRlbmQoYSx7d2lkZ2V0RXZlbnRQcmVmaXg6bj9hLndpZGdldEV2ZW50UHJlZml4fHxlOmV9LHIse2NvbnN0cnVjdG9yOm8sbmFtZXNwYWNlOmgsd2lkZ2V0TmFtZTplLHdpZGdldEZ1bGxOYW1lOmx9KSxuPyh0LmVhY2gobi5fY2hpbGRDb25zdHJ1Y3RvcnMsZnVuY3Rpb24oZSxpKXt2YXIgcz1pLnByb3RvdHlwZTt0LndpZGdldChzLm5hbWVzcGFjZStcIi5cIitzLndpZGdldE5hbWUsbyxpLl9wcm90byl9KSxkZWxldGUgbi5fY2hpbGRDb25zdHJ1Y3RvcnMpOmkuX2NoaWxkQ29uc3RydWN0b3JzLnB1c2gobyksdC53aWRnZXQuYnJpZGdlKGUsbyksb30sdC53aWRnZXQuZXh0ZW5kPWZ1bmN0aW9uKGUpe2Zvcih2YXIgaSxzLG49bC5jYWxsKGFyZ3VtZW50cywxKSxvPTAsYT1uLmxlbmd0aDtvPGE7bysrKWZvcihpIGluIG5bb10pcz1uW29dW2ldLG5bb10uaGFzT3duUHJvcGVydHkoaSkmJnZvaWQgMCE9PXMmJih0LmlzUGxhaW5PYmplY3Qocyk/ZVtpXT10LmlzUGxhaW5PYmplY3QoZVtpXSk/dC53aWRnZXQuZXh0ZW5kKHt9LGVbaV0scyk6dC53aWRnZXQuZXh0ZW5kKHt9LHMpOmVbaV09cyk7cmV0dXJuIGV9LHQud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihlLGkpe3ZhciBzPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHxlO3QuZm5bZV09ZnVuY3Rpb24obil7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIG4sYT1sLmNhbGwoYXJndW1lbnRzLDEpLHI9dGhpcztyZXR1cm4gbz90aGlzLmxlbmd0aHx8XCJpbnN0YW5jZVwiIT09bj90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaSxvPXQuZGF0YSh0aGlzLHMpO3JldHVyblwiaW5zdGFuY2VcIj09PW4/KHI9bywhMSk6bz90LmlzRnVuY3Rpb24ob1tuXSkmJlwiX1wiIT09bi5jaGFyQXQoMCk/KGk9b1tuXS5hcHBseShvLGEpLGkhPT1vJiZ2b2lkIDAhPT1pPyhyPWkmJmkuanF1ZXJ5P3IucHVzaFN0YWNrKGkuZ2V0KCkpOmksITEpOnZvaWQgMCk6dC5lcnJvcihcIm5vIHN1Y2ggbWV0aG9kICdcIituK1wiJyBmb3IgXCIrZStcIiB3aWRnZXQgaW5zdGFuY2VcIik6dC5lcnJvcihcImNhbm5vdCBjYWxsIG1ldGhvZHMgb24gXCIrZStcIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICdcIituK1wiJ1wiKX0pOnI9dm9pZCAwOihhLmxlbmd0aCYmKG49dC53aWRnZXQuZXh0ZW5kLmFwcGx5KG51bGwsW25dLmNvbmNhdChhKSkpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQuZGF0YSh0aGlzLHMpO2U/KGUub3B0aW9uKG58fHt9KSxlLl9pbml0JiZlLl9pbml0KCkpOnQuZGF0YSh0aGlzLHMsbmV3IGkobix0aGlzKSl9KSkscn19LHQuV2lkZ2V0PWZ1bmN0aW9uKCl7fSx0LldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sdC5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOlwid2lkZ2V0XCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJcIixkZWZhdWx0RWxlbWVudDpcIjxkaXY+XCIsb3B0aW9uczp7Y2xhc3Nlczp7fSxkaXNhYmxlZDohMSxjcmVhdGU6bnVsbH0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbihlLGkpe2k9dChpfHx0aGlzLmRlZmF1bHRFbGVtZW50fHx0aGlzKVswXSx0aGlzLmVsZW1lbnQ9dChpKSx0aGlzLnV1aWQ9aCsrLHRoaXMuZXZlbnROYW1lc3BhY2U9XCIuXCIrdGhpcy53aWRnZXROYW1lK3RoaXMudXVpZCx0aGlzLmJpbmRpbmdzPXQoKSx0aGlzLmhvdmVyYWJsZT10KCksdGhpcy5mb2N1c2FibGU9dCgpLHRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXA9e30saSE9PXRoaXMmJih0LmRhdGEoaSx0aGlzLndpZGdldEZ1bGxOYW1lLHRoaXMpLHRoaXMuX29uKCEwLHRoaXMuZWxlbWVudCx7cmVtb3ZlOmZ1bmN0aW9uKHQpe3QudGFyZ2V0PT09aSYmdGhpcy5kZXN0cm95KCl9fSksdGhpcy5kb2N1bWVudD10KGkuc3R5bGU/aS5vd25lckRvY3VtZW50OmkuZG9jdW1lbnR8fGkpLHRoaXMud2luZG93PXQodGhpcy5kb2N1bWVudFswXS5kZWZhdWx0Vmlld3x8dGhpcy5kb2N1bWVudFswXS5wYXJlbnRXaW5kb3cpKSx0aGlzLm9wdGlvbnM9dC53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksZSksdGhpcy5fY3JlYXRlKCksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLl9zZXRPcHRpb25EaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3RyaWdnZXIoXCJjcmVhdGVcIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7cmV0dXJue319LF9nZXRDcmVhdGVFdmVudERhdGE6dC5ub29wLF9jcmVhdGU6dC5ub29wLF9pbml0OnQubm9vcCxkZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9kZXN0cm95KCksdC5lYWNoKHRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXAsZnVuY3Rpb24odCxpKXtlLl9yZW1vdmVDbGFzcyhpLHQpfSksdGhpcy5lbGVtZW50Lm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLHRoaXMud2lkZ2V0KCkub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoXCJhcmlhLWRpc2FibGVkXCIpLHRoaXMuYmluZGluZ3Mub2ZmKHRoaXMuZXZlbnROYW1lc3BhY2UpfSxfZGVzdHJveTp0Lm5vb3Asd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudH0sb3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvLGE9ZTtpZigwPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdC53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpaWYoYT17fSxzPWUuc3BsaXQoXCIuXCIpLGU9cy5zaGlmdCgpLHMubGVuZ3RoKXtmb3Iobj1hW2VdPXQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbZV0pLG89MDtvPHMubGVuZ3RoLTE7bysrKW5bc1tvXV09bltzW29dXXx8e30sbj1uW3Nbb11dO2lmKGU9cy5wb3AoKSwxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09bltlXT9udWxsOm5bZV07bltlXT1pfWVsc2V7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9uc1tlXT9udWxsOnRoaXMub3B0aW9uc1tlXTthW2VdPWl9cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoYSksdGhpc30sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU7Zm9yKGUgaW4gdCl0aGlzLl9zZXRPcHRpb24oZSx0W2VdKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3JldHVyblwiY2xhc3Nlc1wiPT09dCYmdGhpcy5fc2V0T3B0aW9uQ2xhc3NlcyhlKSx0aGlzLm9wdGlvbnNbdF09ZSxcImRpc2FibGVkXCI9PT10JiZ0aGlzLl9zZXRPcHRpb25EaXNhYmxlZChlKSx0aGlzfSxfc2V0T3B0aW9uQ2xhc3NlczpmdW5jdGlvbihlKXt2YXIgaSxzLG47Zm9yKGkgaW4gZSluPXRoaXMuY2xhc3Nlc0VsZW1lbnRMb29rdXBbaV0sZVtpXSE9PXRoaXMub3B0aW9ucy5jbGFzc2VzW2ldJiZuJiZuLmxlbmd0aCYmKHM9dChuLmdldCgpKSx0aGlzLl9yZW1vdmVDbGFzcyhuLGkpLHMuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcyh7ZWxlbWVudDpzLGtleXM6aSxjbGFzc2VzOmUsYWRkOiEwfSkpKX0sX3NldE9wdGlvbkRpc2FibGVkOmZ1bmN0aW9uKHQpe3RoaXMuX3RvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0KCksdGhpcy53aWRnZXRGdWxsTmFtZStcIi1kaXNhYmxlZFwiLG51bGwsISF0KSx0JiYodGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5ob3ZlcmFibGUsbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuZm9jdXNhYmxlLG51bGwsXCJ1aS1zdGF0ZS1mb2N1c1wiKSl9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMX0pfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiEwfSl9LF9jbGFzc2VzOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoaSxvKXt2YXIgYSxyO2ZvcihyPTA7cjxpLmxlbmd0aDtyKyspYT1uLmNsYXNzZXNFbGVtZW50TG9va3VwW2lbcl1dfHx0KCksYT10KGUuYWRkP3QudW5pcXVlKGEuZ2V0KCkuY29uY2F0KGUuZWxlbWVudC5nZXQoKSkpOmEubm90KGUuZWxlbWVudCkuZ2V0KCkpLG4uY2xhc3Nlc0VsZW1lbnRMb29rdXBbaVtyXV09YSxzLnB1c2goaVtyXSksbyYmZS5jbGFzc2VzW2lbcl1dJiZzLnB1c2goZS5jbGFzc2VzW2lbcl1dKX12YXIgcz1bXSxuPXRoaXM7cmV0dXJuIGU9dC5leHRlbmQoe2VsZW1lbnQ6dGhpcy5lbGVtZW50LGNsYXNzZXM6dGhpcy5vcHRpb25zLmNsYXNzZXN8fHt9fSxlKSx0aGlzLl9vbihlLmVsZW1lbnQse3JlbW92ZTpcIl91bnRyYWNrQ2xhc3Nlc0VsZW1lbnRcIn0pLGUua2V5cyYmaShlLmtleXMubWF0Y2goL1xcUysvZyl8fFtdLCEwKSxlLmV4dHJhJiZpKGUuZXh0cmEubWF0Y2goL1xcUysvZyl8fFtdKSxzLmpvaW4oXCIgXCIpfSxfdW50cmFja0NsYXNzZXNFbGVtZW50OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7dC5lYWNoKGkuY2xhc3Nlc0VsZW1lbnRMb29rdXAsZnVuY3Rpb24ocyxuKXstMSE9PXQuaW5BcnJheShlLnRhcmdldCxuKSYmKGkuY2xhc3Nlc0VsZW1lbnRMb29rdXBbc109dChuLm5vdChlLnRhcmdldCkuZ2V0KCkpKX0pfSxfcmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCxlLGkpe3JldHVybiB0aGlzLl90b2dnbGVDbGFzcyh0LGUsaSwhMSl9LF9hZGRDbGFzczpmdW5jdGlvbih0LGUsaSl7cmV0dXJuIHRoaXMuX3RvZ2dsZUNsYXNzKHQsZSxpLCEwKX0sX3RvZ2dsZUNsYXNzOmZ1bmN0aW9uKHQsZSxpLHMpe3M9XCJib29sZWFuXCI9PXR5cGVvZiBzP3M6aTt2YXIgbj1cInN0cmluZ1wiPT10eXBlb2YgdHx8bnVsbD09PXQsbz17ZXh0cmE6bj9lOmksa2V5czpuP3Q6ZSxlbGVtZW50Om4/dGhpcy5lbGVtZW50OnQsYWRkOnN9O3JldHVybiBvLmVsZW1lbnQudG9nZ2xlQ2xhc3ModGhpcy5fY2xhc3NlcyhvKSxzKSx0aGlzfSxfb246ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG89dGhpcztcImJvb2xlYW5cIiE9dHlwZW9mIGUmJihzPWksaT1lLGU9ITEpLHM/KGk9bj10KGkpLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5ncy5hZGQoaSkpOihzPWksaT10aGlzLmVsZW1lbnQsbj10aGlzLndpZGdldCgpKSx0LmVhY2gocyxmdW5jdGlvbihzLGEpe2Z1bmN0aW9uIHIoKXtpZihlfHwhMCE9PW8ub3B0aW9ucy5kaXNhYmxlZCYmIXQodGhpcykuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSlyZXR1cm4oXCJzdHJpbmdcIj09dHlwZW9mIGE/b1thXTphKS5hcHBseShvLGFyZ3VtZW50cyl9XCJzdHJpbmdcIiE9dHlwZW9mIGEmJihyLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8ci5ndWlkfHx0Lmd1aWQrKyk7dmFyIGg9cy5tYXRjaCgvXihbXFx3Oi1dKilcXHMqKC4qKSQvKSxsPWhbMV0rby5ldmVudE5hbWVzcGFjZSxjPWhbMl07Yz9uLm9uKGwsYyxyKTppLm9uKGwscil9KX0sX29mZjpmdW5jdGlvbihlLGkpe2k9KGl8fFwiXCIpLnNwbGl0KFwiIFwiKS5qb2luKHRoaXMuZXZlbnROYW1lc3BhY2UrXCIgXCIpK3RoaXMuZXZlbnROYW1lc3BhY2UsZS5vZmYoaSkub2ZmKGkpLHRoaXMuYmluZGluZ3M9dCh0aGlzLmJpbmRpbmdzLm5vdChlKS5nZXQoKSksdGhpcy5mb2N1c2FibGU9dCh0aGlzLmZvY3VzYWJsZS5ub3QoZSkuZ2V0KCkpLHRoaXMuaG92ZXJhYmxlPXQodGhpcy5ob3ZlcmFibGUubm90KGUpLmdldCgpKX0sX2RlbGF5OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSgpe3JldHVybihcInN0cmluZ1wiPT10eXBlb2YgdD9zW3RdOnQpLmFwcGx5KHMsYXJndW1lbnRzKX12YXIgcz10aGlzO3JldHVybiBzZXRUaW1lb3V0KGksZXx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24oZSl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKGUpLHRoaXMuX29uKGUse21vdXNlZW50ZXI6ZnVuY3Rpb24oZSl7dGhpcy5fYWRkQ2xhc3ModChlLmN1cnJlbnRUYXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1ob3ZlclwiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0aGlzLl9yZW1vdmVDbGFzcyh0KGUuY3VycmVudFRhcmdldCksbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpfX0pfSxfZm9jdXNhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuZm9jdXNhYmxlPXRoaXMuZm9jdXNhYmxlLmFkZChlKSx0aGlzLl9vbihlLHtmb2N1c2luOmZ1bmN0aW9uKGUpe3RoaXMuX2FkZENsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtZm9jdXNcIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKGUpe3RoaXMuX3JlbW92ZUNsYXNzKHQoZS5jdXJyZW50VGFyZ2V0KSxudWxsLFwidWktc3RhdGUtZm9jdXNcIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGE9dGhpcy5vcHRpb25zW2VdO2lmKHM9c3x8e30saT10LkV2ZW50KGkpLGkudHlwZT0oZT09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/ZTp0aGlzLndpZGdldEV2ZW50UHJlZml4K2UpLnRvTG93ZXJDYXNlKCksaS50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLG89aS5vcmlnaW5hbEV2ZW50KWZvcihuIGluIG8pbiBpbiBpfHwoaVtuXT1vW25dKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIoaSxzKSwhKHQuaXNGdW5jdGlvbihhKSYmITE9PT1hLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbaV0uY29uY2F0KHMpKXx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSx0LmVhY2goe3Nob3c6XCJmYWRlSW5cIixoaWRlOlwiZmFkZU91dFwifSxmdW5jdGlvbihlLGkpe3QuV2lkZ2V0LnByb3RvdHlwZVtcIl9cIitlXT1mdW5jdGlvbihzLG4sbyl7XCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBhLHI9bj8hMD09PW58fFwibnVtYmVyXCI9PXR5cGVvZiBuP2k6bi5lZmZlY3R8fGk6ZTtuPW58fHt9LFwibnVtYmVyXCI9PXR5cGVvZiBuJiYobj17ZHVyYXRpb246bn0pLGE9IXQuaXNFbXB0eU9iamVjdChuKSxuLmNvbXBsZXRlPW8sbi5kZWxheSYmcy5kZWxheShuLmRlbGF5KSxhJiZ0LmVmZmVjdHMmJnQuZWZmZWN0cy5lZmZlY3Rbcl0/c1tlXShuKTpyIT09ZSYmc1tyXT9zW3JdKG4uZHVyYXRpb24sbi5lYXNpbmcsbyk6cy5xdWV1ZShmdW5jdGlvbihpKXt0KHRoaXMpW2VdKCksbyYmby5jYWxsKHNbMF0pLGkoKX0pfX0pO3Qud2lkZ2V0OyFmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxlLGkpe3JldHVybltwYXJzZUZsb2F0KHRbMF0pKih1LnRlc3QodFswXSk/ZS8xMDA6MSkscGFyc2VGbG9hdCh0WzFdKSoodS50ZXN0KHRbMV0pP2kvMTAwOjEpXX1mdW5jdGlvbiBpKGUsaSl7cmV0dXJuIHBhcnNlSW50KHQuY3NzKGUsaSksMTApfHwwfWZ1bmN0aW9uIHMoZSl7dmFyIGk9ZVswXTtyZXR1cm4gOT09PWkubm9kZVR5cGU/e3dpZHRoOmUud2lkdGgoKSxoZWlnaHQ6ZS5oZWlnaHQoKSxvZmZzZXQ6e3RvcDowLGxlZnQ6MH19OnQuaXNXaW5kb3coaSk/e3dpZHRoOmUud2lkdGgoKSxoZWlnaHQ6ZS5oZWlnaHQoKSxvZmZzZXQ6e3RvcDplLnNjcm9sbFRvcCgpLGxlZnQ6ZS5zY3JvbGxMZWZ0KCl9fTppLnByZXZlbnREZWZhdWx0P3t3aWR0aDowLGhlaWdodDowLG9mZnNldDp7dG9wOmkucGFnZVksbGVmdDppLnBhZ2VYfX06e3dpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksb2Zmc2V0OmUub2Zmc2V0KCl9fXZhciBuLG89TWF0aC5tYXgsYT1NYXRoLmFicyxyPS9sZWZ0fGNlbnRlcnxyaWdodC8saD0vdG9wfGNlbnRlcnxib3R0b20vLGw9L1tcXCtcXC1dXFxkKyhcXC5bXFxkXSspPyU/LyxjPS9eXFx3Ky8sdT0vJSQvLGQ9dC5mbi5wb3NpdGlvbjt0LnBvc2l0aW9uPXtzY3JvbGxiYXJXaWR0aDpmdW5jdGlvbigpe2lmKHZvaWQgMCE9PW4pcmV0dXJuIG47dmFyIGUsaSxzPXQoXCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj5cIiksbz1zLmNoaWxkcmVuKClbMF07cmV0dXJuIHQoXCJib2R5XCIpLmFwcGVuZChzKSxlPW8ub2Zmc2V0V2lkdGgscy5jc3MoXCJvdmVyZmxvd1wiLFwic2Nyb2xsXCIpLGk9by5vZmZzZXRXaWR0aCxlPT09aSYmKGk9c1swXS5jbGllbnRXaWR0aCkscy5yZW1vdmUoKSxuPWUtaX0sZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbihlKXt2YXIgaT1lLmlzV2luZG93fHxlLmlzRG9jdW1lbnQ/XCJcIjplLmVsZW1lbnQuY3NzKFwib3ZlcmZsb3cteFwiKSxzPWUuaXNXaW5kb3d8fGUuaXNEb2N1bWVudD9cIlwiOmUuZWxlbWVudC5jc3MoXCJvdmVyZmxvdy15XCIpLG49XCJzY3JvbGxcIj09PWl8fFwiYXV0b1wiPT09aSYmZS53aWR0aDxlLmVsZW1lbnRbMF0uc2Nyb2xsV2lkdGg7cmV0dXJue3dpZHRoOlwic2Nyb2xsXCI9PT1zfHxcImF1dG9cIj09PXMmJmUuaGVpZ2h0PGUuZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ/dC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjAsaGVpZ2h0Om4/dC5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjB9fSxnZXRXaXRoaW5JbmZvOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZXx8d2luZG93KSxzPXQuaXNXaW5kb3coaVswXSksbj0hIWlbMF0mJjk9PT1pWzBdLm5vZGVUeXBlO3JldHVybntlbGVtZW50OmksaXNXaW5kb3c6cyxpc0RvY3VtZW50Om4sb2Zmc2V0OnN8fG4/e2xlZnQ6MCx0b3A6MH06dChlKS5vZmZzZXQoKSxzY3JvbGxMZWZ0Omkuc2Nyb2xsTGVmdCgpLHNjcm9sbFRvcDppLnNjcm9sbFRvcCgpLHdpZHRoOmkub3V0ZXJXaWR0aCgpLGhlaWdodDppLm91dGVySGVpZ2h0KCl9fX0sdC5mbi5wb3NpdGlvbj1mdW5jdGlvbihuKXtpZighbnx8IW4ub2YpcmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpO249dC5leHRlbmQoe30sbik7dmFyIHUscCxmLGcsbSxfLHY9dChuLm9mKSxiPXQucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhuLndpdGhpbikseT10LnBvc2l0aW9uLmdldFNjcm9sbEluZm8oYiksdz0obi5jb2xsaXNpb258fFwiZmxpcFwiKS5zcGxpdChcIiBcIiksaz17fTtyZXR1cm4gXz1zKHYpLHZbMF0ucHJldmVudERlZmF1bHQmJihuLmF0PVwibGVmdCB0b3BcIikscD1fLndpZHRoLGY9Xy5oZWlnaHQsZz1fLm9mZnNldCxtPXQuZXh0ZW5kKHt9LGcpLHQuZWFjaChbXCJteVwiLFwiYXRcIl0sZnVuY3Rpb24oKXt2YXIgdCxlLGk9KG5bdGhpc118fFwiXCIpLnNwbGl0KFwiIFwiKTsxPT09aS5sZW5ndGgmJihpPXIudGVzdChpWzBdKT9pLmNvbmNhdChbXCJjZW50ZXJcIl0pOmgudGVzdChpWzBdKT9bXCJjZW50ZXJcIl0uY29uY2F0KGkpOltcImNlbnRlclwiLFwiY2VudGVyXCJdKSxpWzBdPXIudGVzdChpWzBdKT9pWzBdOlwiY2VudGVyXCIsaVsxXT1oLnRlc3QoaVsxXSk/aVsxXTpcImNlbnRlclwiLHQ9bC5leGVjKGlbMF0pLGU9bC5leGVjKGlbMV0pLGtbdGhpc109W3Q/dFswXTowLGU/ZVswXTowXSxuW3RoaXNdPVtjLmV4ZWMoaVswXSlbMF0sYy5leGVjKGlbMV0pWzBdXX0pLDE9PT13Lmxlbmd0aCYmKHdbMV09d1swXSksXCJyaWdodFwiPT09bi5hdFswXT9tLmxlZnQrPXA6XCJjZW50ZXJcIj09PW4uYXRbMF0mJihtLmxlZnQrPXAvMiksXCJib3R0b21cIj09PW4uYXRbMV0/bS50b3ArPWY6XCJjZW50ZXJcIj09PW4uYXRbMV0mJihtLnRvcCs9Zi8yKSx1PWUoay5hdCxwLGYpLG0ubGVmdCs9dVswXSxtLnRvcCs9dVsxXSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxyLGg9dCh0aGlzKSxsPWgub3V0ZXJXaWR0aCgpLGM9aC5vdXRlckhlaWdodCgpLGQ9aSh0aGlzLFwibWFyZ2luTGVmdFwiKSxfPWkodGhpcyxcIm1hcmdpblRvcFwiKSx4PWwrZCtpKHRoaXMsXCJtYXJnaW5SaWdodFwiKSt5LndpZHRoLEM9YytfK2kodGhpcyxcIm1hcmdpbkJvdHRvbVwiKSt5LmhlaWdodCxEPXQuZXh0ZW5kKHt9LG0pLEk9ZShrLm15LGgub3V0ZXJXaWR0aCgpLGgub3V0ZXJIZWlnaHQoKSk7XCJyaWdodFwiPT09bi5teVswXT9ELmxlZnQtPWw6XCJjZW50ZXJcIj09PW4ubXlbMF0mJihELmxlZnQtPWwvMiksXCJib3R0b21cIj09PW4ubXlbMV0/RC50b3AtPWM6XCJjZW50ZXJcIj09PW4ubXlbMV0mJihELnRvcC09Yy8yKSxELmxlZnQrPUlbMF0sRC50b3ArPUlbMV0scz17bWFyZ2luTGVmdDpkLG1hcmdpblRvcDpffSx0LmVhY2goW1wibGVmdFwiLFwidG9wXCJdLGZ1bmN0aW9uKGUsaSl7dC51aS5wb3NpdGlvblt3W2VdXSYmdC51aS5wb3NpdGlvblt3W2VdXVtpXShELHt0YXJnZXRXaWR0aDpwLHRhcmdldEhlaWdodDpmLGVsZW1XaWR0aDpsLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpzLGNvbGxpc2lvbldpZHRoOngsY29sbGlzaW9uSGVpZ2h0OkMsb2Zmc2V0Olt1WzBdK0lbMF0sdVsxXStJWzFdXSxteTpuLm15LGF0Om4uYXQsd2l0aGluOmIsZWxlbTpofSl9KSxuLnVzaW5nJiYocj1mdW5jdGlvbih0KXt2YXIgZT1nLmxlZnQtRC5sZWZ0LGk9ZStwLWwscz1nLnRvcC1ELnRvcCxyPXMrZi1jLHU9e3RhcmdldDp7ZWxlbWVudDp2LGxlZnQ6Zy5sZWZ0LHRvcDpnLnRvcCx3aWR0aDpwLGhlaWdodDpmfSxlbGVtZW50OntlbGVtZW50OmgsbGVmdDpELmxlZnQsdG9wOkQudG9wLHdpZHRoOmwsaGVpZ2h0OmN9LGhvcml6b250YWw6aTwwP1wibGVmdFwiOmU+MD9cInJpZ2h0XCI6XCJjZW50ZXJcIix2ZXJ0aWNhbDpyPDA/XCJ0b3BcIjpzPjA/XCJib3R0b21cIjpcIm1pZGRsZVwifTtwPGwmJmEoZStpKTxwJiYodS5ob3Jpem9udGFsPVwiY2VudGVyXCIpLGY8YyYmYShzK3IpPGYmJih1LnZlcnRpY2FsPVwibWlkZGxlXCIpLG8oYShlKSxhKGkpKT5vKGEocyksYShyKSk/dS5pbXBvcnRhbnQ9XCJob3Jpem9udGFsXCI6dS5pbXBvcnRhbnQ9XCJ2ZXJ0aWNhbFwiLG4udXNpbmcuY2FsbCh0aGlzLHQsdSl9KSxoLm9mZnNldCh0LmV4dGVuZChELHt1c2luZzpyfSkpfSl9LHQudWkucG9zaXRpb249e2ZpdDp7bGVmdDpmdW5jdGlvbih0LGUpe3ZhciBpLHM9ZS53aXRoaW4sbj1zLmlzV2luZG93P3Muc2Nyb2xsTGVmdDpzLm9mZnNldC5sZWZ0LGE9cy53aWR0aCxyPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsaD1uLXIsbD1yK2UuY29sbGlzaW9uV2lkdGgtYS1uO2UuY29sbGlzaW9uV2lkdGg+YT9oPjAmJmw8PTA/KGk9dC5sZWZ0K2grZS5jb2xsaXNpb25XaWR0aC1hLW4sdC5sZWZ0Kz1oLWkpOnQubGVmdD1sPjAmJmg8PTA/bjpoPmw/bithLWUuY29sbGlzaW9uV2lkdGg6bjpoPjA/dC5sZWZ0Kz1oOmw+MD90LmxlZnQtPWw6dC5sZWZ0PW8odC5sZWZ0LXIsdC5sZWZ0KX0sdG9wOmZ1bmN0aW9uKHQsZSl7dmFyIGkscz1lLndpdGhpbixuPXMuaXNXaW5kb3c/cy5zY3JvbGxUb3A6cy5vZmZzZXQudG9wLGE9ZS53aXRoaW4uaGVpZ2h0LHI9dC50b3AtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsaD1uLXIsbD1yK2UuY29sbGlzaW9uSGVpZ2h0LWEtbjtlLmNvbGxpc2lvbkhlaWdodD5hP2g+MCYmbDw9MD8oaT10LnRvcCtoK2UuY29sbGlzaW9uSGVpZ2h0LWEtbix0LnRvcCs9aC1pKTp0LnRvcD1sPjAmJmg8PTA/bjpoPmw/bithLWUuY29sbGlzaW9uSGVpZ2h0Om46aD4wP3QudG9wKz1oOmw+MD90LnRvcC09bDp0LnRvcD1vKHQudG9wLXIsdC50b3ApfX0sZmxpcDp7bGVmdDpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj1lLndpdGhpbixvPW4ub2Zmc2V0LmxlZnQrbi5zY3JvbGxMZWZ0LHI9bi53aWR0aCxoPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsbD10LmxlZnQtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGM9bC1oLHU9bCtlLmNvbGxpc2lvbldpZHRoLXItaCxkPVwibGVmdFwiPT09ZS5teVswXT8tZS5lbGVtV2lkdGg6XCJyaWdodFwiPT09ZS5teVswXT9lLmVsZW1XaWR0aDowLHA9XCJsZWZ0XCI9PT1lLmF0WzBdP2UudGFyZ2V0V2lkdGg6XCJyaWdodFwiPT09ZS5hdFswXT8tZS50YXJnZXRXaWR0aDowLGY9LTIqZS5vZmZzZXRbMF07YzwwPygoaT10LmxlZnQrZCtwK2YrZS5jb2xsaXNpb25XaWR0aC1yLW8pPDB8fGk8YShjKSkmJih0LmxlZnQrPWQrcCtmKTp1PjAmJigocz10LmxlZnQtZS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0K2QrcCtmLWgpPjB8fGEocyk8dSkmJih0LmxlZnQrPWQrcCtmKX0sdG9wOmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuPWUud2l0aGluLG89bi5vZmZzZXQudG9wK24uc2Nyb2xsVG9wLHI9bi5oZWlnaHQsaD1uLmlzV2luZG93P24uc2Nyb2xsVG9wOm4ub2Zmc2V0LnRvcCxsPXQudG9wLWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wLGM9bC1oLHU9bCtlLmNvbGxpc2lvbkhlaWdodC1yLWgsZD1cInRvcFwiPT09ZS5teVsxXSxwPWQ/LWUuZWxlbUhlaWdodDpcImJvdHRvbVwiPT09ZS5teVsxXT9lLmVsZW1IZWlnaHQ6MCxmPVwidG9wXCI9PT1lLmF0WzFdP2UudGFyZ2V0SGVpZ2h0OlwiYm90dG9tXCI9PT1lLmF0WzFdPy1lLnRhcmdldEhlaWdodDowLGc9LTIqZS5vZmZzZXRbMV07YzwwPygocz10LnRvcCtwK2YrZytlLmNvbGxpc2lvbkhlaWdodC1yLW8pPDB8fHM8YShjKSkmJih0LnRvcCs9cCtmK2cpOnU+MCYmKChpPXQudG9wLWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wK3ArZitnLWgpPjB8fGEoaSk8dSkmJih0LnRvcCs9cCtmK2cpfX0sZmxpcGZpdDp7bGVmdDpmdW5jdGlvbigpe3QudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9wOmZ1bmN0aW9uKCl7dC51aS5wb3NpdGlvbi5mbGlwLnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fX0oKTt2YXIgYz0odC51aS5wb3NpdGlvbix0LmV4dGVuZCh0LmV4cHJbXCI6XCJdLHtkYXRhOnQuZXhwci5jcmVhdGVQc2V1ZG8/dC5leHByLmNyZWF0ZVBzZXVkbyhmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISF0LmRhdGEoaSxlKX19KTpmdW5jdGlvbihlLGkscyl7cmV0dXJuISF0LmRhdGEoZSxzWzNdKX19KSx0LmZuLmV4dGVuZCh7ZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciB0PVwib25zZWxlY3RzdGFydFwiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKT9cInNlbGVjdHN0YXJ0XCI6XCJtb3VzZWRvd25cIjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vbih0K1wiLnVpLWRpc2FibGVTZWxlY3Rpb25cIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9KX19KCksZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2ZmKFwiLnVpLWRpc2FibGVTZWxlY3Rpb25cIil9fSksXCJ1aS1lZmZlY3RzLWFuaW1hdGVkXCIpLHU9dDt0LmVmZmVjdHM9e2VmZmVjdDp7fX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpKXt2YXIgcz1jW2UudHlwZV18fHt9O3JldHVybiBudWxsPT10P2l8fCFlLmRlZj9udWxsOmUuZGVmOih0PXMuZmxvb3I/fn50OnBhcnNlRmxvYXQodCksaXNOYU4odCk/ZS5kZWY6cy5tb2Q/KHQrcy5tb2QpJXMubW9kOjA+dD8wOnMubWF4PHQ/cy5tYXg6dCl9ZnVuY3Rpb24gcyhlKXt2YXIgaT1oKCkscz1pLl9yZ2JhPVtdO3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSxwKHIsZnVuY3Rpb24odCxuKXt2YXIgbyxhPW4ucmUuZXhlYyhlKSxyPWEmJm4ucGFyc2UoYSksaD1uLnNwYWNlfHxcInJnYmFcIjtpZihyKXJldHVybiBvPWlbaF0ociksaVtsW2hdLmNhY2hlXT1vW2xbaF0uY2FjaGVdLHM9aS5fcmdiYT1vLl9yZ2JhLCExfSkscy5sZW5ndGg/KFwiMCwwLDAsMFwiPT09cy5qb2luKCkmJnQuZXh0ZW5kKHMsby50cmFuc3BhcmVudCksaSk6b1tlXX1mdW5jdGlvbiBuKHQsZSxpKXtyZXR1cm4gaT0oaSsxKSUxLDYqaTwxP3QrKGUtdCkqaSo2OjIqaTwxP2U6MyppPDI/dCsoZS10KSooMi8zLWkpKjY6dH12YXIgbyxhPS9eKFtcXC0rXSk9XFxzKihcXGQrXFwuP1xcZCopLyxyPVt7cmU6L3JnYmE/XFwoXFxzKihcXGR7MSwzfSlcXHMqLFxccyooXFxkezEsM30pXFxzKixcXHMqKFxcZHsxLDN9KVxccyooPzosXFxzKihcXGQ/KD86XFwuXFxkKyk/KVxccyopP1xcKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMV0sdFsyXSx0WzNdLHRbNF1dfX0se3JlOi9yZ2JhP1xcKFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqLFxccyooXFxkKyg/OlxcLlxcZCspPylcXCVcXHMqKD86LFxccyooXFxkPyg/OlxcLlxcZCspPylcXHMqKT9cXCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblsyLjU1KnRbMV0sMi41NSp0WzJdLDIuNTUqdFszXSx0WzRdXX19LHtyZTovIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX19LHtyZTovIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3BhcnNlSW50KHRbMV0rdFsxXSwxNikscGFyc2VJbnQodFsyXSt0WzJdLDE2KSxwYXJzZUludCh0WzNdK3RbM10sMTYpXX19LHtyZTovaHNsYT9cXChcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKixcXHMqKFxcZCsoPzpcXC5cXGQrKT8pXFwlXFxzKig/OixcXHMqKFxcZD8oPzpcXC5cXGQrKT8pXFxzKik/XFwpLyxzcGFjZTpcImhzbGFcIixwYXJzZTpmdW5jdGlvbih0KXtyZXR1cm5bdFsxXSx0WzJdLzEwMCx0WzNdLzEwMCx0WzRdXX19XSxoPXQuQ29sb3I9ZnVuY3Rpb24oZSxpLHMsbil7cmV0dXJuIG5ldyB0LkNvbG9yLmZuLnBhcnNlKGUsaSxzLG4pfSxsPXtyZ2JhOntwcm9wczp7cmVkOntpZHg6MCx0eXBlOlwiYnl0ZVwifSxncmVlbjp7aWR4OjEsdHlwZTpcImJ5dGVcIn0sYmx1ZTp7aWR4OjIsdHlwZTpcImJ5dGVcIn19fSxoc2xhOntwcm9wczp7aHVlOntpZHg6MCx0eXBlOlwiZGVncmVlc1wifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOlwicGVyY2VudFwifSxsaWdodG5lc3M6e2lkeDoyLHR5cGU6XCJwZXJjZW50XCJ9fX19LGM9e2J5dGU6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sdT1oLnN1cHBvcnQ9e30sZD10KFwiPHA+XCIpWzBdLHA9dC5lYWNoO2Quc3R5bGUuY3NzVGV4dD1cImJhY2tncm91bmQtY29sb3I6cmdiYSgxLDEsMSwuNSlcIix1LnJnYmE9ZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZihcInJnYmFcIik+LTEscChsLGZ1bmN0aW9uKHQsZSl7ZS5jYWNoZT1cIl9cIit0LGUucHJvcHMuYWxwaGE9e2lkeDozLHR5cGU6XCJwZXJjZW50XCIsZGVmOjF9fSksaC5mbj10LmV4dGVuZChoLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24oZSxuLGEscil7aWYodm9pZCAwPT09ZSlyZXR1cm4gdGhpcy5fcmdiYT1bbnVsbCxudWxsLG51bGwsbnVsbF0sdGhpczsoZS5qcXVlcnl8fGUubm9kZVR5cGUpJiYoZT10KGUpLmNzcyhuKSxuPXZvaWQgMCk7dmFyIGM9dGhpcyx1PXQudHlwZShlKSxkPXRoaXMuX3JnYmE9W107cmV0dXJuIHZvaWQgMCE9PW4mJihlPVtlLG4sYSxyXSx1PVwiYXJyYXlcIiksXCJzdHJpbmdcIj09PXU/dGhpcy5wYXJzZShzKGUpfHxvLl9kZWZhdWx0KTpcImFycmF5XCI9PT11PyhwKGwucmdiYS5wcm9wcyxmdW5jdGlvbih0LHMpe2Rbcy5pZHhdPWkoZVtzLmlkeF0scyl9KSx0aGlzKTpcIm9iamVjdFwiPT09dT8oZSBpbnN0YW5jZW9mIGg/cChsLGZ1bmN0aW9uKHQsaSl7ZVtpLmNhY2hlXSYmKGNbaS5jYWNoZV09ZVtpLmNhY2hlXS5zbGljZSgpKX0pOnAobCxmdW5jdGlvbihzLG4pe3ZhciBvPW4uY2FjaGU7cChuLnByb3BzLGZ1bmN0aW9uKHQscyl7aWYoIWNbb10mJm4udG8pe2lmKFwiYWxwaGFcIj09PXR8fG51bGw9PWVbdF0pcmV0dXJuO2Nbb109bi50byhjLl9yZ2JhKX1jW29dW3MuaWR4XT1pKGVbdF0scywhMCl9KSxjW29dJiZ0LmluQXJyYXkobnVsbCxjW29dLnNsaWNlKDAsMykpPDAmJihjW29dWzNdPTEsbi5mcm9tJiYoYy5fcmdiYT1uLmZyb20oY1tvXSkpKX0pLHRoaXMpOnZvaWQgMH0saXM6ZnVuY3Rpb24odCl7dmFyIGU9aCh0KSxpPSEwLHM9dGhpcztyZXR1cm4gcChsLGZ1bmN0aW9uKHQsbil7dmFyIG8sYT1lW24uY2FjaGVdO3JldHVybiBhJiYobz1zW24uY2FjaGVdfHxuLnRvJiZuLnRvKHMuX3JnYmEpfHxbXSxwKG4ucHJvcHMsZnVuY3Rpb24odCxlKXtpZihudWxsIT1hW2UuaWR4XSlyZXR1cm4gaT1hW2UuaWR4XT09PW9bZS5pZHhdfSkpLGl9KSxpfSxfc3BhY2U6ZnVuY3Rpb24oKXt2YXIgdD1bXSxlPXRoaXM7cmV0dXJuIHAobCxmdW5jdGlvbihpLHMpe2Vbcy5jYWNoZV0mJnQucHVzaChpKX0pLHQucG9wKCl9LHRyYW5zaXRpb246ZnVuY3Rpb24odCxlKXt2YXIgcz1oKHQpLG49cy5fc3BhY2UoKSxvPWxbbl0sYT0wPT09dGhpcy5hbHBoYSgpP2goXCJ0cmFuc3BhcmVudFwiKTp0aGlzLHI9YVtvLmNhY2hlXXx8by50byhhLl9yZ2JhKSx1PXIuc2xpY2UoKTtyZXR1cm4gcz1zW28uY2FjaGVdLHAoby5wcm9wcyxmdW5jdGlvbih0LG4pe3ZhciBvPW4uaWR4LGE9cltvXSxoPXNbb10sbD1jW24udHlwZV18fHt9O251bGwhPT1oJiYobnVsbD09PWE/dVtvXT1oOihsLm1vZCYmKGgtYT5sLm1vZC8yP2ErPWwubW9kOmEtaD5sLm1vZC8yJiYoYS09bC5tb2QpKSx1W29dPWkoKGgtYSkqZSthLG4pKSl9KSx0aGlzW25dKHUpfSxibGVuZDpmdW5jdGlvbihlKXtpZigxPT09dGhpcy5fcmdiYVszXSlyZXR1cm4gdGhpczt2YXIgaT10aGlzLl9yZ2JhLnNsaWNlKCkscz1pLnBvcCgpLG49aChlKS5fcmdiYTtyZXR1cm4gaCh0Lm1hcChpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuKDEtcykqbltlXStzKnR9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciBlPVwicmdiYShcIixpPXQubWFwKHRoaXMuX3JnYmEsZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9lPjI/MTowOnR9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLGU9XCJyZ2IoXCIpLGUraS5qb2luKCkrXCIpXCJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciBlPVwiaHNsYShcIixpPXQubWFwKHRoaXMuaHNsYSgpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PWU+Mj8xOjApLGUmJmU8MyYmKHQ9TWF0aC5yb3VuZCgxMDAqdCkrXCIlXCIpLHR9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLGU9XCJoc2woXCIpLGUraS5qb2luKCkrXCIpXCJ9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxzPWkucG9wKCk7cmV0dXJuIGUmJmkucHVzaCh+figyNTUqcykpLFwiI1wiK3QubWFwKGksZnVuY3Rpb24odCl7cmV0dXJuIHQ9KHR8fDApLnRvU3RyaW5nKDE2KSwxPT09dC5sZW5ndGg/XCIwXCIrdDp0fSkuam9pbihcIlwiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX3JnYmFbM10/XCJ0cmFuc3BhcmVudFwiOnRoaXMudG9SZ2JhU3RyaW5nKCl9fSksaC5mbi5wYXJzZS5wcm90b3R5cGU9aC5mbixsLmhzbGEudG89ZnVuY3Rpb24odCl7aWYobnVsbD09dFswXXx8bnVsbD09dFsxXXx8bnVsbD09dFsyXSlyZXR1cm5bbnVsbCxudWxsLG51bGwsdFszXV07dmFyIGUsaSxzPXRbMF0vMjU1LG49dFsxXS8yNTUsbz10WzJdLzI1NSxhPXRbM10scj1NYXRoLm1heChzLG4sbyksaD1NYXRoLm1pbihzLG4sbyksbD1yLWgsYz1yK2gsdT0uNSpjO3JldHVybiBlPWg9PT1yPzA6cz09PXI/NjAqKG4tbykvbCszNjA6bj09PXI/NjAqKG8tcykvbCsxMjA6NjAqKHMtbikvbCsyNDAsaT0wPT09bD8wOnU8PS41P2wvYzpsLygyLWMpLFtNYXRoLnJvdW5kKGUpJTM2MCxpLHUsbnVsbD09YT8xOmFdfSxsLmhzbGEuZnJvbT1mdW5jdGlvbih0KXtpZihudWxsPT10WzBdfHxudWxsPT10WzFdfHxudWxsPT10WzJdKXJldHVybltudWxsLG51bGwsbnVsbCx0WzNdXTt2YXIgZT10WzBdLzM2MCxpPXRbMV0scz10WzJdLG89dFszXSxhPXM8PS41P3MqKDEraSk6cytpLXMqaSxyPTIqcy1hO3JldHVybltNYXRoLnJvdW5kKDI1NSpuKHIsYSxlKzEvMykpLE1hdGgucm91bmQoMjU1Km4ocixhLGUpKSxNYXRoLnJvdW5kKDI1NSpuKHIsYSxlLTEvMykpLG9dfSxwKGwsZnVuY3Rpb24oZSxzKXt2YXIgbj1zLnByb3BzLG89cy5jYWNoZSxyPXMudG8sbD1zLmZyb207aC5mbltlXT1mdW5jdGlvbihlKXtpZihyJiYhdGhpc1tvXSYmKHRoaXNbb109cih0aGlzLl9yZ2JhKSksdm9pZCAwPT09ZSlyZXR1cm4gdGhpc1tvXS5zbGljZSgpO3ZhciBzLGE9dC50eXBlKGUpLGM9XCJhcnJheVwiPT09YXx8XCJvYmplY3RcIj09PWE/ZTphcmd1bWVudHMsdT10aGlzW29dLnNsaWNlKCk7cmV0dXJuIHAobixmdW5jdGlvbih0LGUpe3ZhciBzPWNbXCJvYmplY3RcIj09PWE/dDplLmlkeF07bnVsbD09cyYmKHM9dVtlLmlkeF0pLHVbZS5pZHhdPWkocyxlKX0pLGw/KHM9aChsKHUpKSxzW29dPXUscyk6aCh1KX0scChuLGZ1bmN0aW9uKGkscyl7aC5mbltpXXx8KGguZm5baV09ZnVuY3Rpb24obil7dmFyIG8scj10LnR5cGUobiksaD1cImFscGhhXCI9PT1pP3RoaXMuX2hzbGE/XCJoc2xhXCI6XCJyZ2JhXCI6ZSxsPXRoaXNbaF0oKSxjPWxbcy5pZHhdO3JldHVyblwidW5kZWZpbmVkXCI9PT1yP2M6KFwiZnVuY3Rpb25cIj09PXImJihuPW4uY2FsbCh0aGlzLGMpLHI9dC50eXBlKG4pKSxudWxsPT1uJiZzLmVtcHR5P3RoaXM6KFwic3RyaW5nXCI9PT1yJiYobz1hLmV4ZWMobikpJiYobj1jK3BhcnNlRmxvYXQob1syXSkqKFwiK1wiPT09b1sxXT8xOi0xKSksbFtzLmlkeF09bix0aGlzW2hdKGwpKSl9KX0pfSksaC5ob29rPWZ1bmN0aW9uKGUpe3ZhciBpPWUuc3BsaXQoXCIgXCIpO3AoaSxmdW5jdGlvbihlLGkpe3QuY3NzSG9va3NbaV09e3NldDpmdW5jdGlvbihlLG4pe3ZhciBvLGEscj1cIlwiO2lmKFwidHJhbnNwYXJlbnRcIiE9PW4mJihcInN0cmluZ1wiIT09dC50eXBlKG4pfHwobz1zKG4pKSkpe2lmKG49aChvfHxuKSwhdS5yZ2JhJiYxIT09bi5fcmdiYVszXSl7Zm9yKGE9XCJiYWNrZ3JvdW5kQ29sb3JcIj09PWk/ZS5wYXJlbnROb2RlOmU7KFwiXCI9PT1yfHxcInRyYW5zcGFyZW50XCI9PT1yKSYmYSYmYS5zdHlsZTspdHJ5e3I9dC5jc3MoYSxcImJhY2tncm91bmRDb2xvclwiKSxhPWEucGFyZW50Tm9kZX1jYXRjaCh0KXt9bj1uLmJsZW5kKHImJlwidHJhbnNwYXJlbnRcIiE9PXI/cjpcIl9kZWZhdWx0XCIpfW49bi50b1JnYmFTdHJpbmcoKX10cnl7ZS5zdHlsZVtpXT1ufWNhdGNoKHQpe319fSx0LmZ4LnN0ZXBbaV09ZnVuY3Rpb24oZSl7ZS5jb2xvckluaXR8fChlLnN0YXJ0PWgoZS5lbGVtLGkpLGUuZW5kPWgoZS5lbmQpLGUuY29sb3JJbml0PSEwKSx0LmNzc0hvb2tzW2ldLnNldChlLmVsZW0sZS5zdGFydC50cmFuc2l0aW9uKGUuZW5kLGUucG9zKSl9fSl9LGguaG9vayhcImJhY2tncm91bmRDb2xvciBib3JkZXJCb3R0b21Db2xvciBib3JkZXJMZWZ0Q29sb3IgYm9yZGVyUmlnaHRDb2xvciBib3JkZXJUb3BDb2xvciBjb2xvciBjb2x1bW5SdWxlQ29sb3Igb3V0bGluZUNvbG9yIHRleHREZWNvcmF0aW9uQ29sb3IgdGV4dEVtcGhhc2lzQ29sb3JcIiksdC5jc3NIb29rcy5ib3JkZXJDb2xvcj17ZXhwYW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBwKFtcIlRvcFwiLFwiUmlnaHRcIixcIkJvdHRvbVwiLFwiTGVmdFwiXSxmdW5jdGlvbihpLHMpe2VbXCJib3JkZXJcIitzK1wiQ29sb3JcIl09dH0pLGV9fSxvPXQuQ29sb3IubmFtZXM9e2FxdWE6XCIjMDBmZmZmXCIsYmxhY2s6XCIjMDAwMDAwXCIsYmx1ZTpcIiMwMDAwZmZcIixmdWNoc2lhOlwiI2ZmMDBmZlwiLGdyYXk6XCIjODA4MDgwXCIsZ3JlZW46XCIjMDA4MDAwXCIsbGltZTpcIiMwMGZmMDBcIixtYXJvb246XCIjODAwMDAwXCIsbmF2eTpcIiMwMDAwODBcIixvbGl2ZTpcIiM4MDgwMDBcIixwdXJwbGU6XCIjODAwMDgwXCIscmVkOlwiI2ZmMDAwMFwiLHNpbHZlcjpcIiNjMGMwYzBcIix0ZWFsOlwiIzAwODA4MFwiLHdoaXRlOlwiI2ZmZmZmZlwiLHllbGxvdzpcIiNmZmZmMDBcIix0cmFuc3BhcmVudDpbbnVsbCxudWxsLG51bGwsMF0sX2RlZmF1bHQ6XCIjZmZmZmZmXCJ9fSh1KSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dmFyIGkscyxuPWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpOmUuY3VycmVudFN0eWxlLG89e307aWYobiYmbi5sZW5ndGgmJm5bMF0mJm5bblswXV0pZm9yKHM9bi5sZW5ndGg7cy0tOylpPW5bc10sXCJzdHJpbmdcIj09dHlwZW9mIG5baV0mJihvW3QuY2FtZWxDYXNlKGkpXT1uW2ldKTtlbHNlIGZvcihpIGluIG4pXCJzdHJpbmdcIj09dHlwZW9mIG5baV0mJihvW2ldPW5baV0pO3JldHVybiBvfWZ1bmN0aW9uIGkoZSxpKXt2YXIgcyxvLGE9e307Zm9yKHMgaW4gaSlvPWlbc10sZVtzXSE9PW8mJihuW3NdfHwhdC5meC5zdGVwW3NdJiZpc05hTihwYXJzZUZsb2F0KG8pKXx8KGFbc109bykpO3JldHVybiBhfXZhciBzPVtcImFkZFwiLFwicmVtb3ZlXCIsXCJ0b2dnbGVcIl0sbj17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07dC5lYWNoKFtcImJvcmRlckxlZnRTdHlsZVwiLFwiYm9yZGVyUmlnaHRTdHlsZVwiLFwiYm9yZGVyQm90dG9tU3R5bGVcIixcImJvcmRlclRvcFN0eWxlXCJdLGZ1bmN0aW9uKGUsaSl7dC5meC5zdGVwW2ldPWZ1bmN0aW9uKHQpeyhcIm5vbmVcIiE9PXQuZW5kJiYhdC5zZXRBdHRyfHwxPT09dC5wb3MmJiF0LnNldEF0dHIpJiYodS5zdHlsZSh0LmVsZW0saSx0LmVuZCksdC5zZXRBdHRyPSEwKX19KSx0LmZuLmFkZEJhY2t8fCh0LmZuLmFkZEJhY2s9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PXQ/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIodCkpfSksdC5lZmZlY3RzLmFuaW1hdGVDbGFzcz1mdW5jdGlvbihuLG8sYSxyKXt2YXIgaD10LnNwZWVkKG8sYSxyKTtyZXR1cm4gdGhpcy5xdWV1ZShmdW5jdGlvbigpe3ZhciBvLGE9dCh0aGlzKSxyPWEuYXR0cihcImNsYXNzXCIpfHxcIlwiLGw9aC5jaGlsZHJlbj9hLmZpbmQoXCIqXCIpLmFkZEJhY2soKTphO2w9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm57ZWw6dCh0aGlzKSxzdGFydDplKHRoaXMpfX0pLG89ZnVuY3Rpb24oKXt0LmVhY2gocyxmdW5jdGlvbih0LGUpe25bZV0mJmFbZStcIkNsYXNzXCJdKG5bZV0pfSl9LG8oKSxsPWwubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kPWUodGhpcy5lbFswXSksdGhpcy5kaWZmPWkodGhpcy5zdGFydCx0aGlzLmVuZCksdGhpc30pLGEuYXR0cihcImNsYXNzXCIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10LkRlZmVycmVkKCkscz10LmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZShlKX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLHQud2hlbi5hcHBseSh0LGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXtvKCksdC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWw7dC5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbih0KXtlLmNzcyh0LFwiXCIpfSl9KSxoLmNvbXBsZXRlLmNhbGwoYVswXSl9KX0pfSx0LmZuLmV4dGVuZCh7YWRkQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLG8pe3JldHVybiBzP3QuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6aX0scyxuLG8pOmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0odC5mbi5hZGRDbGFzcykscmVtb3ZlQ2xhc3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGkscyxuLG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3JlbW92ZTppfSxzLG4sbyk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSh0LmZuLnJlbW92ZUNsYXNzKSx0b2dnbGVDbGFzczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxzLG4sbyxhKXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHN8fHZvaWQgMD09PXM/bj90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyxzP3thZGQ6aX06e3JlbW92ZTppfSxuLG8sYSk6ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTppfSxzLG4sbyl9fSh0LmZuLnRvZ2dsZUNsYXNzKSxzd2l0Y2hDbGFzczpmdW5jdGlvbihlLGkscyxuLG8pe3JldHVybiB0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOmkscmVtb3ZlOmV9LHMsbixvKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSxpLHMsbil7cmV0dXJuIHQuaXNQbGFpbk9iamVjdChlKSYmKGk9ZSxlPWUuZWZmZWN0KSxlPXtlZmZlY3Q6ZX0sbnVsbD09aSYmKGk9e30pLHQuaXNGdW5jdGlvbihpKSYmKG49aSxzPW51bGwsaT17fSksKFwibnVtYmVyXCI9PXR5cGVvZiBpfHx0LmZ4LnNwZWVkc1tpXSkmJihuPXMscz1pLGk9e30pLHQuaXNGdW5jdGlvbihzKSYmKG49cyxzPW51bGwpLGkmJnQuZXh0ZW5kKGUsaSkscz1zfHxpLmR1cmF0aW9uLGUuZHVyYXRpb249dC5meC5vZmY/MDpcIm51bWJlclwiPT10eXBlb2Ygcz9zOnMgaW4gdC5meC5zcGVlZHM/dC5meC5zcGVlZHNbc106dC5meC5zcGVlZHMuX2RlZmF1bHQsZS5jb21wbGV0ZT1ufHxpLmNvbXBsZXRlLGV9ZnVuY3Rpb24gaShlKXtyZXR1cm4hKGUmJlwibnVtYmVyXCIhPXR5cGVvZiBlJiYhdC5meC5zcGVlZHNbZV0pfHwoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiF0LmVmZmVjdHMuZWZmZWN0W2VdfHwoISF0LmlzRnVuY3Rpb24oZSl8fFwib2JqZWN0XCI9PXR5cGVvZiBlJiYhZS5lZmZlY3QpKX1mdW5jdGlvbiBzKHQsZSl7dmFyIGk9ZS5vdXRlcldpZHRoKCkscz1lLm91dGVySGVpZ2h0KCksbj0vXnJlY3RcXCgoLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pLD9cXHMqKC0/XFxkKlxcLj9cXGQqcHh8LT9cXGQrJXxhdXRvKSw/XFxzKigtP1xcZCpcXC4/XFxkKnB4fC0/XFxkKyV8YXV0byksP1xccyooLT9cXGQqXFwuP1xcZCpweHwtP1xcZCslfGF1dG8pXFwpJC8sbz1uLmV4ZWModCl8fFtcIlwiLDAsaSxzLDBdO3JldHVybnt0b3A6cGFyc2VGbG9hdChvWzFdKXx8MCxyaWdodDpcImF1dG9cIj09PW9bMl0/aTpwYXJzZUZsb2F0KG9bMl0pLGJvdHRvbTpcImF1dG9cIj09PW9bM10/czpwYXJzZUZsb2F0KG9bM10pLGxlZnQ6cGFyc2VGbG9hdChvWzRdKXx8MH19dC5leHByJiZ0LmV4cHIuZmlsdGVycyYmdC5leHByLmZpbHRlcnMuYW5pbWF0ZWQmJih0LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuISF0KGkpLmRhdGEoYyl8fGUoaSl9fSh0LmV4cHIuZmlsdGVycy5hbmltYXRlZCkpLCExIT09dC51aUJhY2tDb21wYXQmJnQuZXh0ZW5kKHQuZWZmZWN0cyx7c2F2ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgaT0wLHM9ZS5sZW5ndGg7aTxzO2krKyludWxsIT09ZVtpXSYmdC5kYXRhKFwidWktZWZmZWN0cy1cIitlW2ldLHRbMF0uc3R5bGVbZVtpXV0pfSxyZXN0b3JlOmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBpLHM9MCxuPWUubGVuZ3RoO3M8bjtzKyspbnVsbCE9PWVbc10mJihpPXQuZGF0YShcInVpLWVmZmVjdHMtXCIrZVtzXSksdC5jc3MoZVtzXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24odCxlKXtyZXR1cm5cInRvZ2dsZVwiPT09ZSYmKGU9dC5pcyhcIjpoaWRkZW5cIik/XCJzaG93XCI6XCJoaWRlXCIpLGV9LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7aWYoZS5wYXJlbnQoKS5pcyhcIi51aS1lZmZlY3RzLXdyYXBwZXJcIikpcmV0dXJuIGUucGFyZW50KCk7dmFyIGk9e3dpZHRoOmUub3V0ZXJXaWR0aCghMCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoITApLGZsb2F0OmUuY3NzKFwiZmxvYXRcIil9LHM9dChcIjxkaXY+PC9kaXY+XCIpLmFkZENsYXNzKFwidWktZWZmZWN0cy13cmFwcGVyXCIpLmNzcyh7Zm9udFNpemU6XCIxMDAlXCIsYmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsYm9yZGVyOlwibm9uZVwiLG1hcmdpbjowLHBhZGRpbmc6MH0pLG49e3dpZHRoOmUud2lkdGgoKSxoZWlnaHQ6ZS5oZWlnaHQoKX0sbz1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXtvLmlkfWNhdGNoKHQpe289ZG9jdW1lbnQuYm9keX1yZXR1cm4gZS53cmFwKHMpLChlWzBdPT09b3x8dC5jb250YWlucyhlWzBdLG8pKSYmdChvKS50cmlnZ2VyKFwiZm9jdXNcIikscz1lLnBhcmVudCgpLFwic3RhdGljXCI9PT1lLmNzcyhcInBvc2l0aW9uXCIpPyhzLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwifSksZS5jc3Moe3Bvc2l0aW9uOlwicmVsYXRpdmVcIn0pKToodC5leHRlbmQoaSx7cG9zaXRpb246ZS5jc3MoXCJwb3NpdGlvblwiKSx6SW5kZXg6ZS5jc3MoXCJ6LWluZGV4XCIpfSksdC5lYWNoKFtcInRvcFwiLFwibGVmdFwiLFwiYm90dG9tXCIsXCJyaWdodFwiXSxmdW5jdGlvbih0LHMpe2lbc109ZS5jc3MocyksaXNOYU4ocGFyc2VJbnQoaVtzXSwxMCkpJiYoaVtzXT1cImF1dG9cIil9KSxlLmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLHRvcDowLGxlZnQ6MCxyaWdodDpcImF1dG9cIixib3R0b206XCJhdXRvXCJ9KSksZS5jc3Mobikscy5jc3MoaSkuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKGUpe3ZhciBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIGUucGFyZW50KCkuaXMoXCIudWktZWZmZWN0cy13cmFwcGVyXCIpJiYoZS5wYXJlbnQoKS5yZXBsYWNlV2l0aChlKSwoZVswXT09PWl8fHQuY29udGFpbnMoZVswXSxpKSkmJnQoaSkudHJpZ2dlcihcImZvY3VzXCIpKSxlfX0pLHQuZXh0ZW5kKHQuZWZmZWN0cyx7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmluZTpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHN8fChzPWksaT1cImVmZmVjdFwiKSx0LmVmZmVjdHMuZWZmZWN0W2VdPXMsdC5lZmZlY3RzLmVmZmVjdFtlXS5tb2RlPWksc30sc2NhbGVkRGltZW5zaW9uczpmdW5jdGlvbih0LGUsaSl7aWYoMD09PWUpcmV0dXJue2hlaWdodDowLHdpZHRoOjAsb3V0ZXJIZWlnaHQ6MCxvdXRlcldpZHRoOjB9O3ZhciBzPVwiaG9yaXpvbnRhbFwiIT09aT8oZXx8MTAwKS8xMDA6MSxuPVwidmVydGljYWxcIiE9PWk/KGV8fDEwMCkvMTAwOjE7cmV0dXJue2hlaWdodDp0LmhlaWdodCgpKm4sd2lkdGg6dC53aWR0aCgpKnMsb3V0ZXJIZWlnaHQ6dC5vdXRlckhlaWdodCgpKm4sb3V0ZXJXaWR0aDp0Lm91dGVyV2lkdGgoKSpzfX0sY2xpcFRvQm94OmZ1bmN0aW9uKHQpe3JldHVybnt3aWR0aDp0LmNsaXAucmlnaHQtdC5jbGlwLmxlZnQsaGVpZ2h0OnQuY2xpcC5ib3R0b20tdC5jbGlwLnRvcCxsZWZ0OnQuY2xpcC5sZWZ0LHRvcDp0LmNsaXAudG9wfX0sdW5zaGlmdDpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dC5xdWV1ZSgpO2U+MSYmcy5zcGxpY2UuYXBwbHkocyxbMSwwXS5jb25jYXQocy5zcGxpY2UoZSxpKSkpLHQuZGVxdWV1ZSgpfSxzYXZlU3R5bGU6ZnVuY3Rpb24odCl7dC5kYXRhKFwidWktZWZmZWN0cy1zdHlsZVwiLHRbMF0uc3R5bGUuY3NzVGV4dCl9LHJlc3RvcmVTdHlsZTpmdW5jdGlvbih0KXt0WzBdLnN0eWxlLmNzc1RleHQ9dC5kYXRhKFwidWktZWZmZWN0cy1zdHlsZVwiKXx8XCJcIix0LnJlbW92ZURhdGEoXCJ1aS1lZmZlY3RzLXN0eWxlXCIpfSxtb2RlOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5pcyhcIjpoaWRkZW5cIik7cmV0dXJuXCJ0b2dnbGVcIj09PWUmJihlPWk/XCJzaG93XCI6XCJoaWRlXCIpLChpP1wiaGlkZVwiPT09ZTpcInNob3dcIj09PWUpJiYoZT1cIm5vbmVcIiksZX0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxzO3N3aXRjaCh0WzBdKXtjYXNlXCJ0b3BcIjppPTA7YnJlYWs7Y2FzZVwibWlkZGxlXCI6aT0uNTticmVhaztjYXNlXCJib3R0b21cIjppPTE7YnJlYWs7ZGVmYXVsdDppPXRbMF0vZS5oZWlnaHR9c3dpdGNoKHRbMV0pe2Nhc2VcImxlZnRcIjpzPTA7YnJlYWs7Y2FzZVwiY2VudGVyXCI6cz0uNTticmVhaztjYXNlXCJyaWdodFwiOnM9MTticmVhaztkZWZhdWx0OnM9dFsxXS9lLndpZHRofXJldHVybnt4OnMseTppfX0sY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSl7dmFyIGkscz1lLmNzcyhcInBvc2l0aW9uXCIpLG49ZS5wb3NpdGlvbigpO3JldHVybiBlLmNzcyh7bWFyZ2luVG9wOmUuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpbkJvdHRvbTplLmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OmUuY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDplLmNzcyhcIm1hcmdpblJpZ2h0XCIpfSkub3V0ZXJXaWR0aChlLm91dGVyV2lkdGgoKSkub3V0ZXJIZWlnaHQoZS5vdXRlckhlaWdodCgpKSwvXihzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KHMpJiYocz1cImFic29sdXRlXCIsaT10KFwiPFwiK2VbMF0ubm9kZU5hbWUrXCI+XCIpLmluc2VydEFmdGVyKGUpLmNzcyh7ZGlzcGxheTovXihpbmxpbmV8cnVieSkvLnRlc3QoZS5jc3MoXCJkaXNwbGF5XCIpKT9cImlubGluZS1ibG9ja1wiOlwiYmxvY2tcIix2aXNpYmlsaXR5OlwiaGlkZGVuXCIsbWFyZ2luVG9wOmUuY3NzKFwibWFyZ2luVG9wXCIpLG1hcmdpbkJvdHRvbTplLmNzcyhcIm1hcmdpbkJvdHRvbVwiKSxtYXJnaW5MZWZ0OmUuY3NzKFwibWFyZ2luTGVmdFwiKSxtYXJnaW5SaWdodDplLmNzcyhcIm1hcmdpblJpZ2h0XCIpLGZsb2F0OmUuY3NzKFwiZmxvYXRcIil9KS5vdXRlcldpZHRoKGUub3V0ZXJXaWR0aCgpKS5vdXRlckhlaWdodChlLm91dGVySGVpZ2h0KCkpLmFkZENsYXNzKFwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiKSxlLmRhdGEoXCJ1aS1lZmZlY3RzLXBsYWNlaG9sZGVyXCIsaSkpLGUuY3NzKHtwb3NpdGlvbjpzLGxlZnQ6bi5sZWZ0LHRvcDpuLnRvcH0pLGl9LHJlbW92ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKHQpe3ZhciBlPVwidWktZWZmZWN0cy1wbGFjZWhvbGRlclwiLGk9dC5kYXRhKGUpO2kmJihpLnJlbW92ZSgpLHQucmVtb3ZlRGF0YShlKSl9LGNsZWFuVXA6ZnVuY3Rpb24oZSl7dC5lZmZlY3RzLnJlc3RvcmVTdHlsZShlKSx0LmVmZmVjdHMucmVtb3ZlUGxhY2Vob2xkZXIoZSl9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24oZSxpLHMsbil7cmV0dXJuIG49bnx8e30sdC5lYWNoKGksZnVuY3Rpb24odCxpKXt2YXIgbz1lLmNzc1VuaXQoaSk7b1swXT4wJiYobltpXT1vWzBdKnMrb1sxXSl9KSxufX0pLHQuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBpKGUpe2Z1bmN0aW9uIGkoKXtyLnJlbW92ZURhdGEoYyksdC5lZmZlY3RzLmNsZWFuVXAociksXCJoaWRlXCI9PT1zLm1vZGUmJnIuaGlkZSgpLGEoKX1mdW5jdGlvbiBhKCl7dC5pc0Z1bmN0aW9uKGgpJiZoLmNhbGwoclswXSksdC5pc0Z1bmN0aW9uKGUpJiZlKCl9dmFyIHI9dCh0aGlzKTtzLm1vZGU9dS5zaGlmdCgpLCExPT09dC51aUJhY2tDb21wYXR8fG8/XCJub25lXCI9PT1zLm1vZGU/KHJbbF0oKSxhKCkpOm4uY2FsbChyWzBdLHMsaSk6KHIuaXMoXCI6aGlkZGVuXCIpP1wiaGlkZVwiPT09bDpcInNob3dcIj09PWwpPyhyW2xdKCksYSgpKTpuLmNhbGwoclswXSxzLGEpfXZhciBzPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpLG49dC5lZmZlY3RzLmVmZmVjdFtzLmVmZmVjdF0sbz1uLm1vZGUsYT1zLnF1ZXVlLHI9YXx8XCJmeFwiLGg9cy5jb21wbGV0ZSxsPXMubW9kZSx1PVtdLGQ9ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKSxzPXQuZWZmZWN0cy5tb2RlKGksbCl8fG87aS5kYXRhKGMsITApLHUucHVzaChzKSxvJiYoXCJzaG93XCI9PT1zfHxzPT09byYmXCJoaWRlXCI9PT1zKSYmaS5zaG93KCksbyYmXCJub25lXCI9PT1zfHx0LmVmZmVjdHMuc2F2ZVN0eWxlKGkpLHQuaXNGdW5jdGlvbihlKSYmZSgpfTtyZXR1cm4gdC5meC5vZmZ8fCFuP2w/dGhpc1tsXShzLmR1cmF0aW9uLGgpOnRoaXMuZWFjaChmdW5jdGlvbigpe2gmJmguY2FsbCh0aGlzKX0pOiExPT09YT90aGlzLmVhY2goZCkuZWFjaChpKTp0aGlzLnF1ZXVlKHIsZCkucXVldWUocixpKX0sc2hvdzpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cylcbjtyZXR1cm4gbi5tb2RlPVwic2hvd1wiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX19KHQuZm4uc2hvdyksaGlkZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKSlyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIG49ZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIG4ubW9kZT1cImhpZGVcIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsbil9fSh0LmZuLmhpZGUpLHRvZ2dsZTpmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocyl7aWYoaShzKXx8XCJib29sZWFuXCI9PXR5cGVvZiBzKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPVwidG9nZ2xlXCIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfX0odC5mbi50b2dnbGUpLGNzc1VuaXQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5jc3MoZSkscz1bXTtyZXR1cm4gdC5lYWNoKFtcImVtXCIsXCJweFwiLFwiJVwiLFwicHRcIl0sZnVuY3Rpb24odCxlKXtpLmluZGV4T2YoZSk+MCYmKHM9W3BhcnNlRmxvYXQoaSksZV0pfSksc30sY3NzQ2xpcDpmdW5jdGlvbih0KXtyZXR1cm4gdD90aGlzLmNzcyhcImNsaXBcIixcInJlY3QoXCIrdC50b3ArXCJweCBcIit0LnJpZ2h0K1wicHggXCIrdC5ib3R0b20rXCJweCBcIit0LmxlZnQrXCJweClcIik6cyh0aGlzLmNzcyhcImNsaXBcIiksdGhpcyl9LHRyYW5zZmVyOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKSxuPXQoZS50byksbz1cImZpeGVkXCI9PT1uLmNzcyhcInBvc2l0aW9uXCIpLGE9dChcImJvZHlcIikscj1vP2Euc2Nyb2xsVG9wKCk6MCxoPW8/YS5zY3JvbGxMZWZ0KCk6MCxsPW4ub2Zmc2V0KCksYz17dG9wOmwudG9wLXIsbGVmdDpsLmxlZnQtaCxoZWlnaHQ6bi5pbm5lckhlaWdodCgpLHdpZHRoOm4uaW5uZXJXaWR0aCgpfSx1PXMub2Zmc2V0KCksZD10KFwiPGRpdiBjbGFzcz0ndWktZWZmZWN0cy10cmFuc2Zlcic+PC9kaXY+XCIpLmFwcGVuZFRvKFwiYm9keVwiKS5hZGRDbGFzcyhlLmNsYXNzTmFtZSkuY3NzKHt0b3A6dS50b3AtcixsZWZ0OnUubGVmdC1oLGhlaWdodDpzLmlubmVySGVpZ2h0KCksd2lkdGg6cy5pbm5lcldpZHRoKCkscG9zaXRpb246bz9cImZpeGVkXCI6XCJhYnNvbHV0ZVwifSkuYW5pbWF0ZShjLGUuZHVyYXRpb24sZS5lYXNpbmcsZnVuY3Rpb24oKXtkLnJlbW92ZSgpLHQuaXNGdW5jdGlvbihpKSYmaSgpfSl9fSksdC5meC5zdGVwLmNsaXA9ZnVuY3Rpb24oZSl7ZS5jbGlwSW5pdHx8KGUuc3RhcnQ9dChlLmVsZW0pLmNzc0NsaXAoKSxcInN0cmluZ1wiPT10eXBlb2YgZS5lbmQmJihlLmVuZD1zKGUuZW5kLGUuZWxlbSkpLGUuY2xpcEluaXQ9ITApLHQoZS5lbGVtKS5jc3NDbGlwKHt0b3A6ZS5wb3MqKGUuZW5kLnRvcC1lLnN0YXJ0LnRvcCkrZS5zdGFydC50b3AscmlnaHQ6ZS5wb3MqKGUuZW5kLnJpZ2h0LWUuc3RhcnQucmlnaHQpK2Uuc3RhcnQucmlnaHQsYm90dG9tOmUucG9zKihlLmVuZC5ib3R0b20tZS5zdGFydC5ib3R0b20pK2Uuc3RhcnQuYm90dG9tLGxlZnQ6ZS5wb3MqKGUuZW5kLmxlZnQtZS5zdGFydC5sZWZ0KStlLnN0YXJ0LmxlZnR9KX19KCksZnVuY3Rpb24oKXt2YXIgZT17fTt0LmVhY2goW1wiUXVhZFwiLFwiQ3ViaWNcIixcIlF1YXJ0XCIsXCJRdWludFwiLFwiRXhwb1wiXSxmdW5jdGlvbih0LGkpe2VbaV09ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KGUsdCsyKX19KSx0LmV4dGVuZChlLHtTaW5lOmZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguY29zKHQqTWF0aC5QSS8yKX0sQ2lyYzpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfSxFbGFzdGljOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09dHx8MT09PXQ/dDotTWF0aC5wb3coMiw4Kih0LTEpKSpNYXRoLnNpbigoODAqKHQtMSktNy41KSpNYXRoLlBJLzE1KX0sQmFjazpmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigzKnQtMil9LEJvdW5jZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT00O3Q8KChlPU1hdGgucG93KDIsLS1pKSktMSkvMTE7KTtyZXR1cm4gMS9NYXRoLnBvdyg0LDMtaSktNy41NjI1Kk1hdGgucG93KCgzKmUtMikvMjItdCwyKX19KSx0LmVhY2goZSxmdW5jdGlvbihlLGkpe3QuZWFzaW5nW1wiZWFzZUluXCIrZV09aSx0LmVhc2luZ1tcImVhc2VPdXRcIitlXT1mdW5jdGlvbih0KXtyZXR1cm4gMS1pKDEtdCl9LHQuZWFzaW5nW1wiZWFzZUluT3V0XCIrZV09ZnVuY3Rpb24odCl7cmV0dXJuIHQ8LjU/aSgyKnQpLzI6MS1pKC0yKnQrMikvMn19KX0oKTt0LmVmZmVjdHMsdC5lZmZlY3RzLmRlZmluZShcImJsaW5kXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz17dXA6W1wiYm90dG9tXCIsXCJ0b3BcIl0sdmVydGljYWw6W1wiYm90dG9tXCIsXCJ0b3BcIl0sZG93bjpbXCJ0b3BcIixcImJvdHRvbVwiXSxsZWZ0OltcInJpZ2h0XCIsXCJsZWZ0XCJdLGhvcml6b250YWw6W1wicmlnaHRcIixcImxlZnRcIl0scmlnaHQ6W1wibGVmdFwiLFwicmlnaHRcIl19LG49dCh0aGlzKSxvPWUuZGlyZWN0aW9ufHxcInVwXCIsYT1uLmNzc0NsaXAoKSxyPXtjbGlwOnQuZXh0ZW5kKHt9LGEpfSxoPXQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKTtyLmNsaXBbc1tvXVswXV09ci5jbGlwW3Nbb11bMV1dLFwic2hvd1wiPT09ZS5tb2RlJiYobi5jc3NDbGlwKHIuY2xpcCksaCYmaC5jc3ModC5lZmZlY3RzLmNsaXBUb0JveChyKSksci5jbGlwPWEpLGgmJmguYW5pbWF0ZSh0LmVmZmVjdHMuY2xpcFRvQm94KHIpLGUuZHVyYXRpb24sZS5lYXNpbmcpLG4uYW5pbWF0ZShyLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiYm91bmNlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG8sYT10KHRoaXMpLHI9ZS5tb2RlLGg9XCJoaWRlXCI9PT1yLGw9XCJzaG93XCI9PT1yLGM9ZS5kaXJlY3Rpb258fFwidXBcIix1PWUuZGlzdGFuY2UsZD1lLnRpbWVzfHw1LHA9MipkKyhsfHxoPzE6MCksZj1lLmR1cmF0aW9uL3AsZz1lLmVhc2luZyxtPVwidXBcIj09PWN8fFwiZG93blwiPT09Yz9cInRvcFwiOlwibGVmdFwiLF89XCJ1cFwiPT09Y3x8XCJsZWZ0XCI9PT1jLHY9MCxiPWEucXVldWUoKS5sZW5ndGg7Zm9yKHQuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihhKSxvPWEuY3NzKG0pLHV8fCh1PWFbXCJ0b3BcIj09PW0/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSgpLzMpLGwmJihuPXtvcGFjaXR5OjF9LG5bbV09byxhLmNzcyhcIm9wYWNpdHlcIiwwKS5jc3MobSxfPzIqLXU6Mip1KS5hbmltYXRlKG4sZixnKSksaCYmKHUvPU1hdGgucG93KDIsZC0xKSksbj17fSxuW21dPW87djxkO3YrKylzPXt9LHNbbV09KF8/XCItPVwiOlwiKz1cIikrdSxhLmFuaW1hdGUocyxmLGcpLmFuaW1hdGUobixmLGcpLHU9aD8yKnU6dS8yO2gmJihzPXtvcGFjaXR5OjB9LHNbbV09KF8/XCItPVwiOlwiKz1cIikrdSxhLmFuaW1hdGUocyxmLGcpKSxhLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KGEsYixwKzEpfSksdC5lZmZlY3RzLmRlZmluZShcImNsaXBcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBzLG49e30sbz10KHRoaXMpLGE9ZS5kaXJlY3Rpb258fFwidmVydGljYWxcIixyPVwiYm90aFwiPT09YSxoPXJ8fFwiaG9yaXpvbnRhbFwiPT09YSxsPXJ8fFwidmVydGljYWxcIj09PWE7cz1vLmNzc0NsaXAoKSxuLmNsaXA9e3RvcDpsPyhzLmJvdHRvbS1zLnRvcCkvMjpzLnRvcCxyaWdodDpoPyhzLnJpZ2h0LXMubGVmdCkvMjpzLnJpZ2h0LGJvdHRvbTpsPyhzLmJvdHRvbS1zLnRvcCkvMjpzLmJvdHRvbSxsZWZ0Omg/KHMucmlnaHQtcy5sZWZ0KS8yOnMubGVmdH0sdC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKG8pLFwic2hvd1wiPT09ZS5tb2RlJiYoby5jc3NDbGlwKG4uY2xpcCksbi5jbGlwPXMpLG8uYW5pbWF0ZShuLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZHJvcFwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7dmFyIHMsbj10KHRoaXMpLG89ZS5tb2RlLGE9XCJzaG93XCI9PT1vLHI9ZS5kaXJlY3Rpb258fFwibGVmdFwiLGg9XCJ1cFwiPT09cnx8XCJkb3duXCI9PT1yP1widG9wXCI6XCJsZWZ0XCIsbD1cInVwXCI9PT1yfHxcImxlZnRcIj09PXI/XCItPVwiOlwiKz1cIixjPVwiKz1cIj09PWw/XCItPVwiOlwiKz1cIix1PXtvcGFjaXR5OjB9O3QuZWZmZWN0cy5jcmVhdGVQbGFjZWhvbGRlcihuKSxzPWUuZGlzdGFuY2V8fG5bXCJ0b3BcIj09PWg/XCJvdXRlckhlaWdodFwiOlwib3V0ZXJXaWR0aFwiXSghMCkvMix1W2hdPWwrcyxhJiYobi5jc3ModSksdVtoXT1jK3MsdS5vcGFjaXR5PTEpLG4uYW5pbWF0ZSh1LHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZXhwbG9kZVwiLFwiaGlkZVwiLGZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcygpe2IucHVzaCh0aGlzKSxiLmxlbmd0aD09PXUqZCYmbigpfWZ1bmN0aW9uIG4oKXtwLmNzcyh7dmlzaWJpbGl0eTpcInZpc2libGVcIn0pLHQoYikucmVtb3ZlKCksaSgpfXZhciBvLGEscixoLGwsYyx1PWUucGllY2VzP01hdGgucm91bmQoTWF0aC5zcXJ0KGUucGllY2VzKSk6MyxkPXUscD10KHRoaXMpLGY9ZS5tb2RlLGc9XCJzaG93XCI9PT1mLG09cC5zaG93KCkuY3NzKFwidmlzaWJpbGl0eVwiLFwiaGlkZGVuXCIpLm9mZnNldCgpLF89TWF0aC5jZWlsKHAub3V0ZXJXaWR0aCgpL2QpLHY9TWF0aC5jZWlsKHAub3V0ZXJIZWlnaHQoKS91KSxiPVtdO2ZvcihvPTA7bzx1O28rKylmb3IoaD1tLnRvcCtvKnYsYz1vLSh1LTEpLzIsYT0wO2E8ZDthKyspcj1tLmxlZnQrYSpfLGw9YS0oZC0xKS8yLHAuY2xvbmUoKS5hcHBlbmRUbyhcImJvZHlcIikud3JhcChcIjxkaXY+PC9kaXY+XCIpLmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLHZpc2liaWxpdHk6XCJ2aXNpYmxlXCIsbGVmdDotYSpfLHRvcDotbyp2fSkucGFyZW50KCkuYWRkQ2xhc3MoXCJ1aS1lZmZlY3RzLWV4cGxvZGVcIikuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsb3ZlcmZsb3c6XCJoaWRkZW5cIix3aWR0aDpfLGhlaWdodDp2LGxlZnQ6cisoZz9sKl86MCksdG9wOmgrKGc/Yyp2OjApLG9wYWNpdHk6Zz8wOjF9KS5hbmltYXRlKHtsZWZ0OnIrKGc/MDpsKl8pLHRvcDpoKyhnPzA6Yyp2KSxvcGFjaXR5Omc/MTowfSxlLmR1cmF0aW9ufHw1MDAsZS5lYXNpbmcscyl9KSx0LmVmZmVjdHMuZGVmaW5lKFwiZmFkZVwiLFwidG9nZ2xlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz1cInNob3dcIj09PWUubW9kZTt0KHRoaXMpLmNzcyhcIm9wYWNpdHlcIixzPzA6MSkuYW5pbWF0ZSh7b3BhY2l0eTpzPzE6MH0se3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJmb2xkXCIsXCJoaWRlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49ZS5tb2RlLG89XCJzaG93XCI9PT1uLGE9XCJoaWRlXCI9PT1uLHI9ZS5zaXplfHwxNSxoPS8oWzAtOV0rKSUvLmV4ZWMociksbD0hIWUuaG9yaXpGaXJzdCxjPWw/W1wicmlnaHRcIixcImJvdHRvbVwiXTpbXCJib3R0b21cIixcInJpZ2h0XCJdLHU9ZS5kdXJhdGlvbi8yLGQ9dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKHMpLHA9cy5jc3NDbGlwKCksZj17Y2xpcDp0LmV4dGVuZCh7fSxwKX0sZz17Y2xpcDp0LmV4dGVuZCh7fSxwKX0sbT1bcFtjWzBdXSxwW2NbMV1dXSxfPXMucXVldWUoKS5sZW5ndGg7aCYmKHI9cGFyc2VJbnQoaFsxXSwxMCkvMTAwKm1bYT8wOjFdKSxmLmNsaXBbY1swXV09cixnLmNsaXBbY1swXV09cixnLmNsaXBbY1sxXV09MCxvJiYocy5jc3NDbGlwKGcuY2xpcCksZCYmZC5jc3ModC5lZmZlY3RzLmNsaXBUb0JveChnKSksZy5jbGlwPXApLHMucXVldWUoZnVuY3Rpb24oaSl7ZCYmZC5hbmltYXRlKHQuZWZmZWN0cy5jbGlwVG9Cb3goZiksdSxlLmVhc2luZykuYW5pbWF0ZSh0LmVmZmVjdHMuY2xpcFRvQm94KGcpLHUsZS5lYXNpbmcpLGkoKX0pLmFuaW1hdGUoZix1LGUuZWFzaW5nKS5hbmltYXRlKGcsdSxlLmVhc2luZykucXVldWUoaSksdC5lZmZlY3RzLnVuc2hpZnQocyxfLDQpfSksdC5lZmZlY3RzLmRlZmluZShcImhpZ2hsaWdodFwiLFwic2hvd1wiLGZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKSxuPXtiYWNrZ3JvdW5kQ29sb3I6cy5jc3MoXCJiYWNrZ3JvdW5kQ29sb3JcIil9O1wiaGlkZVwiPT09ZS5tb2RlJiYobi5vcGFjaXR5PTApLHQuZWZmZWN0cy5zYXZlU3R5bGUocykscy5jc3Moe2JhY2tncm91bmRJbWFnZTpcIm5vbmVcIixiYWNrZ3JvdW5kQ29sb3I6ZS5jb2xvcnx8XCIjZmZmZjk5XCJ9KS5hbmltYXRlKG4se3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX0pLHQuZWZmZWN0cy5kZWZpbmUoXCJzaXplXCIsZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG8sYT10KHRoaXMpLHI9W1wiZm9udFNpemVcIl0saD1bXCJib3JkZXJUb3BXaWR0aFwiLFwiYm9yZGVyQm90dG9tV2lkdGhcIixcInBhZGRpbmdUb3BcIixcInBhZGRpbmdCb3R0b21cIl0sbD1bXCJib3JkZXJMZWZ0V2lkdGhcIixcImJvcmRlclJpZ2h0V2lkdGhcIixcInBhZGRpbmdMZWZ0XCIsXCJwYWRkaW5nUmlnaHRcIl0sYz1lLm1vZGUsdT1cImVmZmVjdFwiIT09YyxkPWUuc2NhbGV8fFwiYm90aFwiLHA9ZS5vcmlnaW58fFtcIm1pZGRsZVwiLFwiY2VudGVyXCJdLGY9YS5jc3MoXCJwb3NpdGlvblwiKSxnPWEucG9zaXRpb24oKSxtPXQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKGEpLF89ZS5mcm9tfHxtLHY9ZS50b3x8dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMoYSwwKTt0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIoYSksXCJzaG93XCI9PT1jJiYobz1fLF89dix2PW8pLG49e2Zyb206e3k6Xy5oZWlnaHQvbS5oZWlnaHQseDpfLndpZHRoL20ud2lkdGh9LHRvOnt5OnYuaGVpZ2h0L20uaGVpZ2h0LHg6di53aWR0aC9tLndpZHRofX0sXCJib3hcIiE9PWQmJlwiYm90aFwiIT09ZHx8KG4uZnJvbS55IT09bi50by55JiYoXz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGgsbi5mcm9tLnksXyksdj10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGgsbi50by55LHYpKSxuLmZyb20ueCE9PW4udG8ueCYmKF89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxsLG4uZnJvbS54LF8pLHY9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxsLG4udG8ueCx2KSkpLFwiY29udGVudFwiIT09ZCYmXCJib3RoXCIhPT1kfHxuLmZyb20ueSE9PW4udG8ueSYmKF89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxyLG4uZnJvbS55LF8pLHY9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxyLG4udG8ueSx2KSkscCYmKHM9dC5lZmZlY3RzLmdldEJhc2VsaW5lKHAsbSksXy50b3A9KG0ub3V0ZXJIZWlnaHQtXy5vdXRlckhlaWdodCkqcy55K2cudG9wLF8ubGVmdD0obS5vdXRlcldpZHRoLV8ub3V0ZXJXaWR0aCkqcy54K2cubGVmdCx2LnRvcD0obS5vdXRlckhlaWdodC12Lm91dGVySGVpZ2h0KSpzLnkrZy50b3Asdi5sZWZ0PShtLm91dGVyV2lkdGgtdi5vdXRlcldpZHRoKSpzLngrZy5sZWZ0KSxhLmNzcyhfKSxcImNvbnRlbnRcIiE9PWQmJlwiYm90aFwiIT09ZHx8KGg9aC5jb25jYXQoW1wibWFyZ2luVG9wXCIsXCJtYXJnaW5Cb3R0b21cIl0pLmNvbmNhdChyKSxsPWwuY29uY2F0KFtcIm1hcmdpbkxlZnRcIixcIm1hcmdpblJpZ2h0XCJdKSxhLmZpbmQoXCIqW3dpZHRoXVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxzPXQuZWZmZWN0cy5zY2FsZWREaW1lbnNpb25zKGkpLG89e2hlaWdodDpzLmhlaWdodCpuLmZyb20ueSx3aWR0aDpzLndpZHRoKm4uZnJvbS54LG91dGVySGVpZ2h0OnMub3V0ZXJIZWlnaHQqbi5mcm9tLnksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgqbi5mcm9tLnh9LGE9e2hlaWdodDpzLmhlaWdodCpuLnRvLnksd2lkdGg6cy53aWR0aCpuLnRvLngsb3V0ZXJIZWlnaHQ6cy5oZWlnaHQqbi50by55LG91dGVyV2lkdGg6cy53aWR0aCpuLnRvLnh9O24uZnJvbS55IT09bi50by55JiYobz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGgsbi5mcm9tLnksbyksYT10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGgsbi50by55LGEpKSxuLmZyb20ueCE9PW4udG8ueCYmKG89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxsLG4uZnJvbS54LG8pLGE9dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSxsLG4udG8ueCxhKSksdSYmdC5lZmZlY3RzLnNhdmVTdHlsZShpKSxpLmNzcyhvKSxpLmFuaW1hdGUoYSxlLmR1cmF0aW9uLGUuZWFzaW5nLGZ1bmN0aW9uKCl7dSYmdC5lZmZlY3RzLnJlc3RvcmVTdHlsZShpKX0pfSkpLGEuYW5pbWF0ZSh2LHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe3ZhciBlPWEub2Zmc2V0KCk7MD09PXYub3BhY2l0eSYmYS5jc3MoXCJvcGFjaXR5XCIsXy5vcGFjaXR5KSx1fHwoYS5jc3MoXCJwb3NpdGlvblwiLFwic3RhdGljXCI9PT1mP1wicmVsYXRpdmVcIjpmKS5vZmZzZXQoZSksdC5lZmZlY3RzLnNhdmVTdHlsZShhKSksaSgpfX0pfSksdC5lZmZlY3RzLmRlZmluZShcInNjYWxlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49ZS5tb2RlLG89cGFyc2VJbnQoZS5wZXJjZW50LDEwKXx8KDA9PT1wYXJzZUludChlLnBlcmNlbnQsMTApPzA6XCJlZmZlY3RcIiE9PW4/MDoxMDApLGE9dC5leHRlbmQoITAse2Zyb206dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMocyksdG86dC5lZmZlY3RzLnNjYWxlZERpbWVuc2lvbnMocyxvLGUuZGlyZWN0aW9ufHxcImJvdGhcIiksb3JpZ2luOmUub3JpZ2lufHxbXCJtaWRkbGVcIixcImNlbnRlclwiXX0sZSk7ZS5mYWRlJiYoYS5mcm9tLm9wYWNpdHk9MSxhLnRvLm9wYWNpdHk9MCksdC5lZmZlY3RzLmVmZmVjdC5zaXplLmNhbGwodGhpcyxhLGkpfSksdC5lZmZlY3RzLmRlZmluZShcInB1ZmZcIixcImhpZGVcIixmdW5jdGlvbihlLGkpe3ZhciBzPXQuZXh0ZW5kKCEwLHt9LGUse2ZhZGU6ITAscGVyY2VudDpwYXJzZUludChlLnBlcmNlbnQsMTApfHwxNTB9KTt0LmVmZmVjdHMuZWZmZWN0LnNjYWxlLmNhbGwodGhpcyxzLGkpfSksdC5lZmZlY3RzLmRlZmluZShcInB1bHNhdGVcIixcInNob3dcIixmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcyksbj1lLm1vZGUsbz1cInNob3dcIj09PW4sYT1cImhpZGVcIj09PW4scj1vfHxhLGg9MiooZS50aW1lc3x8NSkrKHI/MTowKSxsPWUuZHVyYXRpb24vaCxjPTAsdT0xLGQ9cy5xdWV1ZSgpLmxlbmd0aDtmb3IoIW8mJnMuaXMoXCI6dmlzaWJsZVwiKXx8KHMuY3NzKFwib3BhY2l0eVwiLDApLnNob3coKSxjPTEpO3U8aDt1Kyspcy5hbmltYXRlKHtvcGFjaXR5OmN9LGwsZS5lYXNpbmcpLGM9MS1jO3MuYW5pbWF0ZSh7b3BhY2l0eTpjfSxsLGUuZWFzaW5nKSxzLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KHMsZCxoKzEpfSksdC5lZmZlY3RzLmRlZmluZShcInNoYWtlXCIsZnVuY3Rpb24oZSxpKXt2YXIgcz0xLG49dCh0aGlzKSxvPWUuZGlyZWN0aW9ufHxcImxlZnRcIixhPWUuZGlzdGFuY2V8fDIwLHI9ZS50aW1lc3x8MyxoPTIqcisxLGw9TWF0aC5yb3VuZChlLmR1cmF0aW9uL2gpLGM9XCJ1cFwiPT09b3x8XCJkb3duXCI9PT1vP1widG9wXCI6XCJsZWZ0XCIsdT1cInVwXCI9PT1vfHxcImxlZnRcIj09PW8sZD17fSxwPXt9LGY9e30sZz1uLnF1ZXVlKCkubGVuZ3RoO2Zvcih0LmVmZmVjdHMuY3JlYXRlUGxhY2Vob2xkZXIobiksZFtjXT0odT9cIi09XCI6XCIrPVwiKSthLHBbY109KHU/XCIrPVwiOlwiLT1cIikrMiphLGZbY109KHU/XCItPVwiOlwiKz1cIikrMiphLG4uYW5pbWF0ZShkLGwsZS5lYXNpbmcpO3M8cjtzKyspbi5hbmltYXRlKHAsbCxlLmVhc2luZykuYW5pbWF0ZShmLGwsZS5lYXNpbmcpO24uYW5pbWF0ZShwLGwsZS5lYXNpbmcpLmFuaW1hdGUoZCxsLzIsZS5lYXNpbmcpLnF1ZXVlKGkpLHQuZWZmZWN0cy51bnNoaWZ0KG4sZyxoKzEpfSksdC5lZmZlY3RzLmRlZmluZShcInNsaWRlXCIsXCJzaG93XCIsZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG89dCh0aGlzKSxhPXt1cDpbXCJib3R0b21cIixcInRvcFwiXSxkb3duOltcInRvcFwiLFwiYm90dG9tXCJdLGxlZnQ6W1wicmlnaHRcIixcImxlZnRcIl0scmlnaHQ6W1wibGVmdFwiLFwicmlnaHRcIl19LHI9ZS5tb2RlLGg9ZS5kaXJlY3Rpb258fFwibGVmdFwiLGw9XCJ1cFwiPT09aHx8XCJkb3duXCI9PT1oP1widG9wXCI6XCJsZWZ0XCIsYz1cInVwXCI9PT1ofHxcImxlZnRcIj09PWgsdT1lLmRpc3RhbmNlfHxvW1widG9wXCI9PT1sP1wib3V0ZXJIZWlnaHRcIjpcIm91dGVyV2lkdGhcIl0oITApLGQ9e307dC5lZmZlY3RzLmNyZWF0ZVBsYWNlaG9sZGVyKG8pLHM9by5jc3NDbGlwKCksbj1vLnBvc2l0aW9uKClbbF0sZFtsXT0oYz8tMToxKSp1K24sZC5jbGlwPW8uY3NzQ2xpcCgpLGQuY2xpcFthW2hdWzFdXT1kLmNsaXBbYVtoXVswXV0sXCJzaG93XCI9PT1yJiYoby5jc3NDbGlwKGQuY2xpcCksby5jc3MobCxkW2xdKSxkLmNsaXA9cyxkW2xdPW4pLG8uYW5pbWF0ZShkLHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTppfSl9KTshMSE9PXQudWlCYWNrQ29tcGF0JiZ0LmVmZmVjdHMuZGVmaW5lKFwidHJhbnNmZXJcIixmdW5jdGlvbihlLGkpe3QodGhpcykudHJhbnNmZXIoZSxpKX0pO3QudWkuZm9jdXNhYmxlPWZ1bmN0aW9uKGkscyl7dmFyIG4sbyxhLHIsaCxsPWkubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm5cImFyZWFcIj09PWw/KG49aS5wYXJlbnROb2RlLG89bi5uYW1lLCEoIWkuaHJlZnx8IW98fFwibWFwXCIhPT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpJiYoYT10KFwiaW1nW3VzZW1hcD0nI1wiK28rXCInXVwiKSxhLmxlbmd0aD4wJiZhLmlzKFwiOnZpc2libGVcIikpKTooL14oaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC8udGVzdChsKT8ocj0haS5kaXNhYmxlZCkmJihoPXQoaSkuY2xvc2VzdChcImZpZWxkc2V0XCIpWzBdKSYmKHI9IWguZGlzYWJsZWQpOnI9XCJhXCI9PT1sP2kuaHJlZnx8czpzLHImJnQoaSkuaXMoXCI6dmlzaWJsZVwiKSYmZSh0KGkpKSl9LHQuZXh0ZW5kKHQuZXhwcltcIjpcIl0se2ZvY3VzYWJsZTpmdW5jdGlvbihlKXtyZXR1cm4gdC51aS5mb2N1c2FibGUoZSxudWxsIT10LmF0dHIoZSxcInRhYmluZGV4XCIpKX19KTt0LnVpLmZvY3VzYWJsZSx0LmZuLmZvcm09ZnVuY3Rpb24oKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpc1swXS5mb3JtP3RoaXMuY2xvc2VzdChcImZvcm1cIik6dCh0aGlzWzBdLmZvcm0pfSx0LnVpLmZvcm1SZXNldE1peGluPXtfZm9ybVJlc2V0SGFuZGxlcjpmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7c2V0VGltZW91dChmdW5jdGlvbigpe3ZhciBpPWUuZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIpO3QuZWFjaChpLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9KX0pfSxfYmluZEZvcm1SZXNldEhhbmRsZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmZvcm09dGhpcy5lbGVtZW50LmZvcm0oKSx0aGlzLmZvcm0ubGVuZ3RoKXt2YXIgdD10aGlzLmZvcm0uZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIpfHxbXTt0Lmxlbmd0aHx8dGhpcy5mb3JtLm9uKFwicmVzZXQudWktZm9ybS1yZXNldFwiLHRoaXMuX2Zvcm1SZXNldEhhbmRsZXIpLHQucHVzaCh0aGlzKSx0aGlzLmZvcm0uZGF0YShcInVpLWZvcm0tcmVzZXQtaW5zdGFuY2VzXCIsdCl9fSxfdW5iaW5kRm9ybVJlc2V0SGFuZGxlcjpmdW5jdGlvbigpe2lmKHRoaXMuZm9ybS5sZW5ndGgpe3ZhciBlPXRoaXMuZm9ybS5kYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIik7ZS5zcGxpY2UodC5pbkFycmF5KHRoaXMsZSksMSksZS5sZW5ndGg/dGhpcy5mb3JtLmRhdGEoXCJ1aS1mb3JtLXJlc2V0LWluc3RhbmNlc1wiLGUpOnRoaXMuZm9ybS5yZW1vdmVEYXRhKFwidWktZm9ybS1yZXNldC1pbnN0YW5jZXNcIikub2ZmKFwicmVzZXQudWktZm9ybS1yZXNldFwiKX19fTtcIjEuN1wiPT09dC5mbi5qcXVlcnkuc3Vic3RyaW5nKDAsMykmJih0LmVhY2goW1wiV2lkdGhcIixcIkhlaWdodFwiXSxmdW5jdGlvbihlLGkpe2Z1bmN0aW9uIHMoZSxpLHMsbyl7cmV0dXJuIHQuZWFjaChuLGZ1bmN0aW9uKCl7aS09cGFyc2VGbG9hdCh0LmNzcyhlLFwicGFkZGluZ1wiK3RoaXMpKXx8MCxzJiYoaS09cGFyc2VGbG9hdCh0LmNzcyhlLFwiYm9yZGVyXCIrdGhpcytcIldpZHRoXCIpKXx8MCksbyYmKGktPXBhcnNlRmxvYXQodC5jc3MoZSxcIm1hcmdpblwiK3RoaXMpKXx8MCl9KSxpfXZhciBuPVwiV2lkdGhcIj09PWk/W1wiTGVmdFwiLFwiUmlnaHRcIl06W1wiVG9wXCIsXCJCb3R0b21cIl0sbz1pLnRvTG93ZXJDYXNlKCksYT17aW5uZXJXaWR0aDp0LmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6dC5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOnQuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDp0LmZuLm91dGVySGVpZ2h0fTt0LmZuW1wiaW5uZXJcIitpXT1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT9hW1wiaW5uZXJcIitpXS5jYWxsKHRoaXMpOnRoaXMuZWFjaChmdW5jdGlvbigpe3QodGhpcykuY3NzKG8scyh0aGlzLGUpK1wicHhcIil9KX0sdC5mbltcIm91dGVyXCIraV09ZnVuY3Rpb24oZSxuKXtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZT9hW1wib3V0ZXJcIitpXS5jYWxsKHRoaXMsZSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzKS5jc3MobyxzKHRoaXMsZSwhMCxuKStcInB4XCIpfSl9fSksdC5mbi5hZGRCYWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZChudWxsPT10P3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKHQpKX0pO3QudWkua2V5Q29kZT17QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBFUklPRDoxOTAsUklHSFQ6MzksU1BBQ0U6MzIsVEFCOjksVVA6Mzh9LHQudWkuZXNjYXBlU2VsZWN0b3I9ZnVuY3Rpb24oKXt2YXIgdD0vKFshXCIjJCUmJygpKissLlxcLzo7PD0+P0BbXFxdXmB7fH1+XSkvZztyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSh0LFwiXFxcXCQxXCIpfX0oKSx0LmZuLmxhYmVscz1mdW5jdGlvbigpe3ZhciBlLGkscyxuLG87cmV0dXJuIHRoaXNbMF0ubGFiZWxzJiZ0aGlzWzBdLmxhYmVscy5sZW5ndGg/dGhpcy5wdXNoU3RhY2sodGhpc1swXS5sYWJlbHMpOihuPXRoaXMuZXEoMCkucGFyZW50cyhcImxhYmVsXCIpLHM9dGhpcy5hdHRyKFwiaWRcIikscyYmKGU9dGhpcy5lcSgwKS5wYXJlbnRzKCkubGFzdCgpLG89ZS5hZGQoZS5sZW5ndGg/ZS5zaWJsaW5ncygpOnRoaXMuc2libGluZ3MoKSksaT1cImxhYmVsW2Zvcj0nXCIrdC51aS5lc2NhcGVTZWxlY3RvcihzKStcIiddXCIsbj1uLmFkZChvLmZpbmQoaSkuYWRkQmFjayhpKSkpLHRoaXMucHVzaFN0YWNrKG4pKX0sdC5mbi5zY3JvbGxQYXJlbnQ9ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5jc3MoXCJwb3NpdGlvblwiKSxzPVwiYWJzb2x1dGVcIj09PWksbj1lPy8oYXV0b3xzY3JvbGx8aGlkZGVuKS86LyhhdXRvfHNjcm9sbCkvLG89dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtyZXR1cm4oIXN8fFwic3RhdGljXCIhPT1lLmNzcyhcInBvc2l0aW9uXCIpKSYmbi50ZXN0KGUuY3NzKFwib3ZlcmZsb3dcIikrZS5jc3MoXCJvdmVyZmxvdy15XCIpK2UuY3NzKFwib3ZlcmZsb3cteFwiKSl9KS5lcSgwKTtyZXR1cm5cImZpeGVkXCIhPT1pJiZvLmxlbmd0aD9vOnQodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHQuZXh0ZW5kKHQuZXhwcltcIjpcIl0se3RhYmJhYmxlOmZ1bmN0aW9uKGUpe3ZhciBpPXQuYXR0cihlLFwidGFiaW5kZXhcIikscz1udWxsIT1pO3JldHVybighc3x8aT49MCkmJnQudWkuZm9jdXNhYmxlKGUscyl9fSksdC5mbi5leHRlbmQoe3VuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIHQ9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9XCJ1aS1pZC1cIisgKyt0KX0pfX0oKSxyZW1vdmVVbmlxdWVJZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXsvXnVpLWlkLVxcZCskLy50ZXN0KHRoaXMuaWQpJiZ0KHRoaXMpLnJlbW92ZUF0dHIoXCJpZFwiKX0pfX0pLHQud2lkZ2V0KFwidWkuYWNjb3JkaW9uXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNsYXNzZXM6e1widWktYWNjb3JkaW9uLWhlYWRlclwiOlwidWktY29ybmVyLXRvcFwiLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLWFjY29yZGlvbi1jb250ZW50XCI6XCJ1aS1jb3JuZXItYm90dG9tXCJ9LGNvbGxhcHNpYmxlOiExLGV2ZW50OlwiY2xpY2tcIixoZWFkZXI6XCI+IGxpID4gOmZpcnN0LWNoaWxkLCA+IDpub3QobGkpOmV2ZW5cIixoZWlnaHRTdHlsZTpcImF1dG9cIixpY29uczp7YWN0aXZlSGVhZGVyOlwidWktaWNvbi10cmlhbmdsZS0xLXNcIixoZWFkZXI6XCJ1aS1pY29uLXRyaWFuZ2xlLTEtZVwifSxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGx9LGhpZGVQcm9wczp7Ym9yZGVyVG9wV2lkdGg6XCJoaWRlXCIsYm9yZGVyQm90dG9tV2lkdGg6XCJoaWRlXCIscGFkZGluZ1RvcDpcImhpZGVcIixwYWRkaW5nQm90dG9tOlwiaGlkZVwiLGhlaWdodDpcImhpZGVcIn0sc2hvd1Byb3BzOntib3JkZXJUb3BXaWR0aDpcInNob3dcIixib3JkZXJCb3R0b21XaWR0aDpcInNob3dcIixwYWRkaW5nVG9wOlwic2hvd1wiLHBhZGRpbmdCb3R0b206XCJzaG93XCIsaGVpZ2h0Olwic2hvd1wifSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3RoaXMucHJldlNob3c9dGhpcy5wcmV2SGlkZT10KCksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1hY2NvcmRpb25cIixcInVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXRcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJyb2xlXCIsXCJ0YWJsaXN0XCIpLGUuY29sbGFwc2libGV8fCExIT09ZS5hY3RpdmUmJm51bGwhPWUuYWN0aXZlfHwoZS5hY3RpdmU9MCksdGhpcy5fcHJvY2Vzc1BhbmVscygpLGUuYWN0aXZlPDAmJihlLmFjdGl2ZSs9dGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5fcmVmcmVzaCgpfSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2hlYWRlcjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOnQoKX19LF9jcmVhdGVJY29uczpmdW5jdGlvbigpe3ZhciBlLGkscz10aGlzLm9wdGlvbnMuaWNvbnM7cyYmKGU9dChcIjxzcGFuPlwiKSx0aGlzLl9hZGRDbGFzcyhlLFwidWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIsXCJ1aS1pY29uIFwiK3MuaGVhZGVyKSxlLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLGk9dGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGkscy5oZWFkZXIpLl9hZGRDbGFzcyhpLG51bGwscy5hY3RpdmVIZWFkZXIpLl9hZGRDbGFzcyh0aGlzLmhlYWRlcnMsXCJ1aS1hY2NvcmRpb24taWNvbnNcIikpfSxfZGVzdHJveUljb25zOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5oZWFkZXJzLFwidWktYWNjb3JkaW9uLWljb25zXCIpLHRoaXMuaGVhZGVycy5jaGlsZHJlbihcIi51aS1hY2NvcmRpb24taGVhZGVyLWljb25cIikucmVtb3ZlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlXCIpLHRoaXMuaGVhZGVycy5yZW1vdmVBdHRyKFwicm9sZSBhcmlhLWV4cGFuZGVkIGFyaWEtc2VsZWN0ZWQgYXJpYS1jb250cm9scyB0YWJJbmRleFwiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMuX2Rlc3Ryb3lJY29ucygpLHQ9dGhpcy5oZWFkZXJzLm5leHQoKS5jc3MoXCJkaXNwbGF5XCIsXCJcIikucmVtb3ZlQXR0cihcInJvbGUgYXJpYS1oaWRkZW4gYXJpYS1sYWJlbGxlZGJ5XCIpLnJlbW92ZVVuaXF1ZUlkKCksXCJjb250ZW50XCIhPT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJnQuY3NzKFwiaGVpZ2h0XCIsXCJcIil9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImFjdGl2ZVwiPT09dClyZXR1cm4gdm9pZCB0aGlzLl9hY3RpdmF0ZShlKTtcImV2ZW50XCI9PT10JiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHMoZSkpLHRoaXMuX3N1cGVyKHQsZSksXCJjb2xsYXBzaWJsZVwiIT09dHx8ZXx8ITEhPT10aGlzLm9wdGlvbnMuYWN0aXZlfHx0aGlzLl9hY3RpdmF0ZSgwKSxcImljb25zXCI9PT10JiYodGhpcy5fZGVzdHJveUljb25zKCksZSYmdGhpcy5fY3JlYXRlSWNvbnMoKSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSksbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KX0sX2tleWRvd246ZnVuY3Rpb24oZSl7aWYoIWUuYWx0S2V5JiYhZS5jdHJsS2V5KXt2YXIgaT10LnVpLmtleUNvZGUscz10aGlzLmhlYWRlcnMubGVuZ3RoLG49dGhpcy5oZWFkZXJzLmluZGV4KGUudGFyZ2V0KSxvPSExO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgaS5SSUdIVDpjYXNlIGkuRE9XTjpvPXRoaXMuaGVhZGVyc1sobisxKSVzXTticmVhaztjYXNlIGkuTEVGVDpjYXNlIGkuVVA6bz10aGlzLmhlYWRlcnNbKG4tMStzKSVzXTticmVhaztjYXNlIGkuU1BBQ0U6Y2FzZSBpLkVOVEVSOnRoaXMuX2V2ZW50SGFuZGxlcihlKTticmVhaztjYXNlIGkuSE9NRTpvPXRoaXMuaGVhZGVyc1swXTticmVhaztjYXNlIGkuRU5EOm89dGhpcy5oZWFkZXJzW3MtMV19byYmKHQoZS50YXJnZXQpLmF0dHIoXCJ0YWJJbmRleFwiLC0xKSx0KG8pLmF0dHIoXCJ0YWJJbmRleFwiLDApLHQobykudHJpZ2dlcihcImZvY3VzXCIpLGUucHJldmVudERlZmF1bHQoKSl9fSxfcGFuZWxLZXlEb3duOmZ1bmN0aW9uKGUpe2Uua2V5Q29kZT09PXQudWkua2V5Q29kZS5VUCYmZS5jdHJsS2V5JiZ0KGUuY3VycmVudFRhcmdldCkucHJldigpLnRyaWdnZXIoXCJmb2N1c1wiKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLl9wcm9jZXNzUGFuZWxzKCksITE9PT1lLmFjdGl2ZSYmITA9PT1lLmNvbGxhcHNpYmxlfHwhdGhpcy5oZWFkZXJzLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTohMT09PWUuYWN0aXZlP3RoaXMuX2FjdGl2YXRlKDApOnRoaXMuYWN0aXZlLmxlbmd0aCYmIXQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLmhlYWRlcnMubGVuZ3RoPT09dGhpcy5oZWFkZXJzLmZpbmQoXCIudWktc3RhdGUtZGlzYWJsZWRcIikubGVuZ3RoPyhlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsZS5hY3RpdmUtMSkpOmUuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGVhZGVycyxlPXRoaXMucGFuZWxzO3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlYWRlcnMsXCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLWFjY29yZGlvbi1oZWFkZXItY29sbGFwc2VkXCIsXCJ1aS1zdGF0ZS1kZWZhdWx0XCIpLHRoaXMucGFuZWxzPXRoaXMuaGVhZGVycy5uZXh0KCkuZmlsdGVyKFwiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKVwiKS5oaWRlKCksdGhpcy5fYWRkQ2xhc3ModGhpcy5wYW5lbHMsXCJ1aS1hY2NvcmRpb24tY29udGVudFwiLFwidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50XCIpLGUmJih0aGlzLl9vZmYodC5ub3QodGhpcy5oZWFkZXJzKSksdGhpcy5fb2ZmKGUubm90KHRoaXMucGFuZWxzKSkpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5vcHRpb25zLHM9aS5oZWlnaHRTdHlsZSxuPXRoaXMuZWxlbWVudC5wYXJlbnQoKTt0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKGkuYWN0aXZlKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFjdGl2ZSxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIikuX3JlbW92ZUNsYXNzKHRoaXMuYWN0aXZlLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5hY3RpdmUubmV4dCgpLFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpLHRoaXMuYWN0aXZlLm5leHQoKS5zaG93KCksdGhpcy5oZWFkZXJzLmF0dHIoXCJyb2xlXCIsXCJ0YWJcIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksaT1lLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpLHM9ZS5uZXh0KCksbj1zLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpO2UuYXR0cihcImFyaWEtY29udHJvbHNcIixuKSxzLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixpKX0pLm5leHQoKS5hdHRyKFwicm9sZVwiLFwidGFicGFuZWxcIiksdGhpcy5oZWFkZXJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIix0YWJJbmRleDotMX0pLm5leHQoKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KS5oaWRlKCksdGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KS5uZXh0KCkuYXR0cih7XCJhcmlhLWhpZGRlblwiOlwiZmFsc2VcIn0pOnRoaXMuaGVhZGVycy5lcSgwKS5hdHRyKFwidGFiSW5kZXhcIiwwKSx0aGlzLl9jcmVhdGVJY29ucygpLHRoaXMuX3NldHVwRXZlbnRzKGkuZXZlbnQpLFwiZmlsbFwiPT09cz8oZT1uLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncyhcIjp2aXNpYmxlXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5jc3MoXCJwb3NpdGlvblwiKTtcImFic29sdXRlXCIhPT1zJiZcImZpeGVkXCIhPT1zJiYoZS09aS5vdXRlckhlaWdodCghMCkpfSksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXtlLT10KHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe3QodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsZS10KHRoaXMpLmlubmVySGVpZ2h0KCkrdCh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKFwib3ZlcmZsb3dcIixcImF1dG9cIikpOlwiYXV0b1wiPT09cyYmKGU9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLmlzKFwiOnZpc2libGVcIik7aXx8dCh0aGlzKS5zaG93KCksZT1NYXRoLm1heChlLHQodGhpcykuY3NzKFwiaGVpZ2h0XCIsXCJcIikuaGVpZ2h0KCkpLGl8fHQodGhpcykuaGlkZSgpfSkuaGVpZ2h0KGUpKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX2ZpbmRBY3RpdmUoZSlbMF07aSE9PXRoaXMuYWN0aXZlWzBdJiYoaT1pfHx0aGlzLmFjdGl2ZVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDppLGN1cnJlbnRUYXJnZXQ6aSxwcmV2ZW50RGVmYXVsdDp0Lm5vb3B9KSl9LF9maW5kQWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiBlP3RoaXMuaGVhZGVycy5lcShlKTp0KCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbihlKXt2YXIgaT17a2V5ZG93bjpcIl9rZXlkb3duXCJ9O2UmJnQuZWFjaChlLnNwbGl0KFwiIFwiKSxmdW5jdGlvbih0LGUpe2lbZV09XCJfZXZlbnRIYW5kbGVyXCJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLGkpLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246XCJfcGFuZWxLZXlEb3duXCJ9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oZWFkZXJzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oZWFkZXJzKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dGhpcy5vcHRpb25zLG89dGhpcy5hY3RpdmUsYT10KGUuY3VycmVudFRhcmdldCkscj1hWzBdPT09b1swXSxoPXImJm4uY29sbGFwc2libGUsbD1oP3QoKTphLm5leHQoKSxjPW8ubmV4dCgpLHU9e29sZEhlYWRlcjpvLG9sZFBhbmVsOmMsbmV3SGVhZGVyOmg/dCgpOmEsbmV3UGFuZWw6bH07ZS5wcmV2ZW50RGVmYXVsdCgpLHImJiFuLmNvbGxhcHNpYmxlfHwhMT09PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVBY3RpdmF0ZVwiLGUsdSl8fChuLmFjdGl2ZT0haCYmdGhpcy5oZWFkZXJzLmluZGV4KGEpLHRoaXMuYWN0aXZlPXI/dCgpOmEsdGhpcy5fdG9nZ2xlKHUpLHRoaXMuX3JlbW92ZUNsYXNzKG8sXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLG4uaWNvbnMmJihpPW8uY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCxuLmljb25zLmFjdGl2ZUhlYWRlcikuX2FkZENsYXNzKGksbnVsbCxuLmljb25zLmhlYWRlcikpLHJ8fCh0aGlzLl9yZW1vdmVDbGFzcyhhLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIikuX2FkZENsYXNzKGEsXCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZVwiLFwidWktc3RhdGUtYWN0aXZlXCIpLG4uaWNvbnMmJihzPWEuY2hpbGRyZW4oXCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uXCIpLHRoaXMuX3JlbW92ZUNsYXNzKHMsbnVsbCxuLmljb25zLmhlYWRlcikuX2FkZENsYXNzKHMsbnVsbCxuLmljb25zLmFjdGl2ZUhlYWRlcikpLHRoaXMuX2FkZENsYXNzKGEubmV4dCgpLFwidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlXCIpKSl9LF90b2dnbGU6ZnVuY3Rpb24oZSl7dmFyIGk9ZS5uZXdQYW5lbCxzPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6ZS5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PWksdGhpcy5wcmV2SGlkZT1zLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUoaSxzLGUpOihzLmhpZGUoKSxpLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZShlKSkscy5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KSxzLnByZXYoKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSksaS5sZW5ndGgmJnMubGVuZ3RoP3MucHJldigpLmF0dHIoe3RhYkluZGV4Oi0xLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pOmkubGVuZ3RoJiZ0aGlzLmhlYWRlcnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1wYXJzZUludCh0KHRoaXMpLmF0dHIoXCJ0YWJJbmRleFwiKSwxMCl9KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksaS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLnByZXYoKS5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcInRydWVcIixcImFyaWEtZXhwYW5kZWRcIjpcInRydWVcIix0YWJJbmRleDowfSl9LF9hbmltYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuLG8sYT10aGlzLHI9MCxoPXQuY3NzKFwiYm94LXNpemluZ1wiKSxsPXQubGVuZ3RoJiYoIWUubGVuZ3RofHx0LmluZGV4KCk8ZS5pbmRleCgpKSxjPXRoaXMub3B0aW9ucy5hbmltYXRlfHx7fSx1PWwmJmMuZG93bnx8YyxkPWZ1bmN0aW9uKCl7YS5fdG9nZ2xlQ29tcGxldGUoaSl9O3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB1JiYobz11KSxcInN0cmluZ1wiPT10eXBlb2YgdSYmKG49dSksbj1ufHx1LmVhc2luZ3x8Yy5lYXNpbmcsbz1vfHx1LmR1cmF0aW9ufHxjLmR1cmF0aW9uLGUubGVuZ3RoP3QubGVuZ3RoPyhzPXQuc2hvdygpLm91dGVySGVpZ2h0KCksZS5hbmltYXRlKHRoaXMuaGlkZVByb3BzLHtkdXJhdGlvbjpvLGVhc2luZzpuLHN0ZXA6ZnVuY3Rpb24odCxlKXtlLm5vdz1NYXRoLnJvdW5kKHQpfX0pLHZvaWQgdC5oaWRlKCkuYW5pbWF0ZSh0aGlzLnNob3dQcm9wcyx7ZHVyYXRpb246byxlYXNpbmc6bixjb21wbGV0ZTpkLHN0ZXA6ZnVuY3Rpb24odCxpKXtpLm5vdz1NYXRoLnJvdW5kKHQpLFwiaGVpZ2h0XCIhPT1pLnByb3A/XCJjb250ZW50LWJveFwiPT09aCYmKHIrPWkubm93KTpcImNvbnRlbnRcIiE9PWEub3B0aW9ucy5oZWlnaHRTdHlsZSYmKGkubm93PU1hdGgucm91bmQocy1lLm91dGVySGVpZ2h0KCktcikscj0wKX19KSk6ZS5hbmltYXRlKHRoaXMuaGlkZVByb3BzLG8sbixkKTp0LmFuaW1hdGUodGhpcy5zaG93UHJvcHMsbyxuLGQpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dC5vbGRQYW5lbCxpPWUucHJldigpO3RoaXMuX3JlbW92ZUNsYXNzKGUsXCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmVcIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxcInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlXCIpLl9hZGRDbGFzcyhpLFwidWktYWNjb3JkaW9uLWhlYWRlci1jb2xsYXBzZWRcIiksZS5sZW5ndGgmJihlLnBhcmVudCgpWzBdLmNsYXNzTmFtZT1lLnBhcmVudCgpWzBdLmNsYXNzTmFtZSksdGhpcy5fdHJpZ2dlcihcImFjdGl2YXRlXCIsbnVsbCx0KX19KSx0LnVpLnNhZmVBY3RpdmVFbGVtZW50PWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXQuYWN0aXZlRWxlbWVudH1jYXRjaChpKXtlPXQuYm9keX1yZXR1cm4gZXx8KGU9dC5ib2R5KSxlLm5vZGVOYW1lfHwoZT10LmJvZHkpLGV9LHQud2lkZ2V0KFwidWkubWVudVwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8dWw+XCIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OlwidWktaWNvbi1jYXJldC0xLWVcIn0saXRlbXM6XCI+ICpcIixtZW51czpcInVsXCIscG9zaXRpb246e215OlwibGVmdCB0b3BcIixhdDpcInJpZ2h0IHRvcFwifSxyb2xlOlwibWVudVwiLGJsdXI6bnVsbCxmb2N1czpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVNZW51PXRoaXMuZWxlbWVudCx0aGlzLm1vdXNlSGFuZGxlZD0hMSx0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLHRhYkluZGV4OjB9KSx0aGlzLl9hZGRDbGFzcyhcInVpLW1lbnVcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl9vbih7XCJtb3VzZWRvd24gLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sXCJjbGljayAudWktbWVudS1pdGVtXCI6ZnVuY3Rpb24oZSl7dmFyIGk9dChlLnRhcmdldCkscz10KHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpOyF0aGlzLm1vdXNlSGFuZGxlZCYmaS5ub3QoXCIudWktc3RhdGUtZGlzYWJsZWRcIikubGVuZ3RoJiYodGhpcy5zZWxlY3QoZSksZS5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpfHwodGhpcy5tb3VzZUhhbmRsZWQ9ITApLGkuaGFzKFwiLnVpLW1lbnVcIikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOiF0aGlzLmVsZW1lbnQuaXMoXCI6Zm9jdXNcIikmJnMuY2xvc2VzdChcIi51aS1tZW51XCIpLmxlbmd0aCYmKHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIixbITBdKSx0aGlzLmFjdGl2ZSYmMT09PXRoaXMuYWN0aXZlLnBhcmVudHMoXCIudWktbWVudVwiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSxcIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbVwiOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnByZXZpb3VzRmlsdGVyKXt2YXIgaT10KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnUtaXRlbVwiKSxzPXQoZS5jdXJyZW50VGFyZ2V0KTtpWzBdPT09c1swXSYmKHRoaXMuX3JlbW92ZUNsYXNzKHMuc2libGluZ3MoKS5jaGlsZHJlbihcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLmZvY3VzKGUscykpfX0sbW91c2VsZWF2ZTpcImNvbGxhcHNlQWxsXCIsXCJtb3VzZWxlYXZlIC51aS1tZW51XCI6XCJjb2xsYXBzZUFsbFwiLGZvY3VzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZXEoMCk7ZXx8dGhpcy5mb2N1cyh0LGkpfSxibHVyOmZ1bmN0aW9uKGUpe3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7IXQuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHQudWkuc2FmZUFjdGl2ZUVsZW1lbnQodGhpcy5kb2N1bWVudFswXSkpJiZ0aGlzLmNvbGxhcHNlQWxsKGUpfSl9LGtleWRvd246XCJfa2V5ZG93blwifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fY2xvc2VPbkRvY3VtZW50Q2xpY2sodCkmJnRoaXMuY29sbGFwc2VBbGwodCksdGhpcy5tb3VzZUhhbmRsZWQ9ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1pdGVtXCIpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtZGlzYWJsZWRcIiksaT1lLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQXR0cihcInRhYkluZGV4IHJvbGUgYXJpYS1oYXNwb3B1cFwiKTt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKS5maW5kKFwiLnVpLW1lbnVcIikuYWRkQmFjaygpLnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtbGFiZWxsZWRieSBhcmlhLWV4cGFuZGVkIGFyaWEtaGlkZGVuIGFyaWEtZGlzYWJsZWQgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksaS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLW1lbnUtc3VibWVudS1jYXJldFwiKSYmZS5yZW1vdmUoKX0pfSxfa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhPSEwO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKFwiZmlyc3RcIixcImZpcnN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoXCJsYXN0XCIsXCJsYXN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6dGhpcy5wcmV2aW91cyhlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5ET1dOOnRoaXMubmV4dChlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5MRUZUOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmdGhpcy5leHBhbmQoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7ZGVmYXVsdDphPSExLHM9dGhpcy5wcmV2aW91c0ZpbHRlcnx8XCJcIixvPSExLG49ZS5rZXlDb2RlPj05NiYmZS5rZXlDb2RlPD0xMDU/KGUua2V5Q29kZS05NikudG9TdHJpbmcoKTpTdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksY2xlYXJUaW1lb3V0KHRoaXMuZmlsdGVyVGltZXIpLG49PT1zP289ITA6bj1zK24saT10aGlzLl9maWx0ZXJNZW51SXRlbXMobiksaT1vJiYtMSE9PWkuaW5kZXgodGhpcy5hY3RpdmUubmV4dCgpKT90aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKTppLGkubGVuZ3RofHwobj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksaT10aGlzLl9maWx0ZXJNZW51SXRlbXMobikpLGkubGVuZ3RoPyh0aGlzLmZvY3VzKGUsaSksdGhpcy5wcmV2aW91c0ZpbHRlcj1uLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9YSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmKHRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiW2FyaWEtaGFzcG9wdXA9J3RydWUnXVwiKS5sZW5ndGg/dGhpcy5leHBhbmQodCk6dGhpcy5zZWxlY3QodCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMscj10aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSxoPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5tZW51cyk7dGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS1tZW51LWljb25zXCIsbnVsbCwhIXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLWljb25cIikubGVuZ3RoKSxzPWguZmlsdGVyKFwiOm5vdCgudWktbWVudSlcIikuaGlkZSgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsXCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5wcmV2KCkscz10KFwiPHNwYW4+XCIpLmRhdGEoXCJ1aS1tZW51LXN1Ym1lbnUtY2FyZXRcIiwhMCk7YS5fYWRkQ2xhc3MocyxcInVpLW1lbnUtaWNvblwiLFwidWktaWNvbiBcIityKSxpLmF0dHIoXCJhcmlhLWhhc3BvcHVwXCIsXCJ0cnVlXCIpLnByZXBlbmQocyksZS5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIsaS5hdHRyKFwiaWRcIikpfSksdGhpcy5fYWRkQ2xhc3MocyxcInVpLW1lbnVcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1mcm9udFwiKSxlPWguYWRkKHRoaXMuZWxlbWVudCksaT1lLmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxpLm5vdChcIi51aS1tZW51LWl0ZW1cIikuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7YS5faXNEaXZpZGVyKGUpJiZhLl9hZGRDbGFzcyhlLFwidWktbWVudS1kaXZpZGVyXCIsXCJ1aS13aWRnZXQtY29udGVudFwiKX0pLG49aS5ub3QoXCIudWktbWVudS1pdGVtLCAudWktbWVudS1kaXZpZGVyXCIpLG89bi5jaGlsZHJlbigpLm5vdChcIi51aS1tZW51XCIpLnVuaXF1ZUlkKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksdGhpcy5fYWRkQ2xhc3MobixcInVpLW1lbnUtaXRlbVwiKS5fYWRkQ2xhc3MobyxcInVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLGkuZmlsdGVyKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJ0cnVlXCIpLHRoaXMuYWN0aXZlJiYhdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pJiZ0aGlzLmJsdXIoKX0sX2l0ZW1Sb2xlOmZ1bmN0aW9uKCl7cmV0dXJue21lbnU6XCJtZW51aXRlbVwiLGxpc3Rib3g6XCJvcHRpb25cIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJpY29uc1wiPT09dCl7dmFyIGk9dGhpcy5lbGVtZW50LmZpbmQoXCIudWktbWVudS1pY29uXCIpO3RoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSkuX2FkZENsYXNzKGksbnVsbCxlLnN1Ym1lbnUpfXRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIixTdHJpbmcodCkpLHRoaXMuX3RvZ2dsZUNsYXNzKG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLCEhdCl9LGZvY3VzOmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuO3RoaXMuYmx1cih0LHQmJlwiZm9jdXNcIj09PXQudHlwZSksdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZSksdGhpcy5hY3RpdmU9ZS5maXJzdCgpLHM9dGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fYWRkQ2xhc3MocyxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLHRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLHMuYXR0cihcImlkXCIpKSxuPXRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLHRoaXMuX2FkZENsYXNzKG4sbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0JiZcImtleWRvd25cIj09PXQudHlwZT90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxpPWUuY2hpbGRyZW4oXCIudWktbWVudVwiKSxpLmxlbmd0aCYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcoaSksdGhpcy5hY3RpdmVNZW51PWUucGFyZW50KCksdGhpcy5fdHJpZ2dlcihcImZvY3VzXCIsdCx7aXRlbTplfSl9LF9zY3JvbGxJbnRvVmlldzpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhLHI7dGhpcy5faGFzU2Nyb2xsKCkmJihpPXBhcnNlRmxvYXQodC5jc3ModGhpcy5hY3RpdmVNZW51WzBdLFwiYm9yZGVyVG9wV2lkdGhcIikpfHwwLHM9cGFyc2VGbG9hdCh0LmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sXCJwYWRkaW5nVG9wXCIpKXx8MCxuPWUub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3AtaS1zLG89dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLGE9dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHI9ZS5vdXRlckhlaWdodCgpLG48MD90aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKG8rbik6bityPmEmJnRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AobytuLWErcikpfSxibHVyOmZ1bmN0aW9uKHQsZSl7ZXx8Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuYWN0aXZlJiYodGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5hY3RpdmUuY2hpbGRyZW4oXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLl90cmlnZ2VyKFwiYmx1clwiLHQse2l0ZW06dGhpcy5hY3RpdmV9KSx0aGlzLmFjdGl2ZT1udWxsKX0sX3N0YXJ0T3BlbmluZzpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksXCJ0cnVlXCI9PT10LmF0dHIoXCJhcmlhLWhpZGRlblwiKSYmKHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpLHRoaXMuX29wZW4odCl9LHRoaXMuZGVsYXkpKX0sX29wZW46ZnVuY3Rpb24oZSl7dmFyIGk9dC5leHRlbmQoe29mOnRoaXMuYWN0aXZlfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmVsZW1lbnQuZmluZChcIi51aS1tZW51XCIpLm5vdChlLnBhcmVudHMoXCIudWktbWVudVwiKSkuaGlkZSgpLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxlLnNob3coKS5yZW1vdmVBdHRyKFwiYXJpYS1oaWRkZW5cIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIikucG9zaXRpb24oaSl9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKGUsaSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcz1pP3RoaXMuZWxlbWVudDp0KGUmJmUudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKFwiLnVpLW1lbnVcIikpO3MubGVuZ3RofHwocz10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKHMpLHRoaXMuYmx1cihlKSx0aGlzLl9yZW1vdmVDbGFzcyhzLmZpbmQoXCIudWktc3RhdGUtYWN0aXZlXCIpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5hY3RpdmVNZW51PXN9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24odCl7dHx8KHQ9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSx0LmZpbmQoXCIudWktbWVudVwiKS5oaWRlKCkuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKX0sX2Nsb3NlT25Eb2N1bWVudENsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiF0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLW1lbnVcIikubGVuZ3RofSxfaXNEaXZpZGVyOmZ1bmN0aW9uKHQpe3JldHVybiEvW15cXC1cXHUyMDE0XFx1MjAxM1xcc10vLnRlc3QodC50ZXh0KCkpfSxjb2xsYXBzZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdChcIi51aS1tZW51LWl0ZW1cIix0aGlzLmVsZW1lbnQpO2UmJmUubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKHQsZSkpfSxleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLmNoaWxkcmVuKFwiLnVpLW1lbnUgXCIpLmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maXJzdCgpO2UmJmUubGVuZ3RoJiYodGhpcy5fb3BlbihlLnBhcmVudCgpKSx0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuZm9jdXModCxlKX0pKX0sbmV4dDpmdW5jdGlvbih0KXt0aGlzLl9tb3ZlKFwibmV4dFwiLFwiZmlyc3RcIix0KX0scHJldmlvdXM6ZnVuY3Rpb24odCl7dGhpcy5fbW92ZShcInByZXZcIixcImxhc3RcIix0KX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5sZW5ndGh9LGlzTGFzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5uZXh0QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5sZW5ndGh9LF9tb3ZlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgczt0aGlzLmFjdGl2ZSYmKHM9XCJmaXJzdFwiPT09dHx8XCJsYXN0XCI9PT10P3RoaXMuYWN0aXZlW1wiZmlyc3RcIj09PXQ/XCJwcmV2QWxsXCI6XCJuZXh0QWxsXCJdKFwiLnVpLW1lbnUtaXRlbVwiKS5lcSgtMSk6dGhpcy5hY3RpdmVbdCtcIkFsbFwiXShcIi51aS1tZW51LWl0ZW1cIikuZXEoMCkpLHMmJnMubGVuZ3RoJiZ0aGlzLmFjdGl2ZXx8KHM9dGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKVtlXSgpKSx0aGlzLmZvY3VzKGkscyl9LG5leHRQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtpZighdGhpcy5hY3RpdmUpcmV0dXJuIHZvaWQgdGhpcy5uZXh0KGUpO3RoaXMuaXNMYXN0SXRlbSgpfHwodGhpcy5faGFzU2Nyb2xsKCk/KHM9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLG49dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoXCIudWktbWVudS1pdGVtXCIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT10KHRoaXMpLGkub2Zmc2V0KCkudG9wLXMtbjwwfSksdGhpcy5mb2N1cyhlLGkpKTp0aGlzLmZvY3VzKGUsdGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKVt0aGlzLmFjdGl2ZT9cImxhc3RcIjpcImZpcnN0XCJdKCkpKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtpZighdGhpcy5hY3RpdmUpcmV0dXJuIHZvaWQgdGhpcy5uZXh0KGUpO3RoaXMuaXNGaXJzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5wcmV2QWxsKFwiLnVpLW1lbnUtaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGk9dCh0aGlzKSxpLm9mZnNldCgpLnRvcC1zK24+MH0pLHRoaXMuZm9jdXMoZSxpKSk6dGhpcy5mb2N1cyhlLHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlyc3QoKSkpfSxfaGFzU2Nyb2xsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpPHRoaXMuZWxlbWVudC5wcm9wKFwic2Nyb2xsSGVpZ2h0XCIpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fHQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktbWVudS1pdGVtXCIpO3ZhciBpPXtpdGVtOnRoaXMuYWN0aXZlfTt0aGlzLmFjdGl2ZS5oYXMoXCIudWktbWVudVwiKS5sZW5ndGh8fHRoaXMuY29sbGFwc2VBbGwoZSwhMCksdGhpcy5fdHJpZ2dlcihcInNlbGVjdFwiLGUsaSl9LF9maWx0ZXJNZW51SXRlbXM6ZnVuY3Rpb24oZSl7dmFyIGk9ZS5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZyxcIlxcXFwkJlwiKSxzPW5ldyBSZWdFeHAoXCJeXCIraSxcImlcIik7cmV0dXJuIHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlsdGVyKFwiLnVpLW1lbnUtaXRlbVwiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gcy50ZXN0KHQudHJpbSh0KHRoaXMpLmNoaWxkcmVuKFwiLnVpLW1lbnUtaXRlbS13cmFwcGVyXCIpLnRleHQoKSkpfSl9fSk7dC53aWRnZXQoXCJ1aS5hdXRvY29tcGxldGVcIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPGlucHV0PlwiLG9wdGlvbnM6e2FwcGVuZFRvOm51bGwsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJub25lXCJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scmVxdWVzdEluZGV4OjAscGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXtcbnZhciBlLGkscyxuPXRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG89XCJ0ZXh0YXJlYVwiPT09bixhPVwiaW5wdXRcIj09PW47dGhpcy5pc011bHRpTGluZT1vfHwhYSYmdGhpcy5faXNDb250ZW50RWRpdGFibGUodGhpcy5lbGVtZW50KSx0aGlzLnZhbHVlTWV0aG9kPXRoaXMuZWxlbWVudFtvfHxhP1widmFsXCI6XCJ0ZXh0XCJdLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuX2FkZENsYXNzKFwidWktYXV0b2NvbXBsZXRlLWlucHV0XCIpLHRoaXMuZWxlbWVudC5hdHRyKFwiYXV0b2NvbXBsZXRlXCIsXCJvZmZcIiksdGhpcy5fb24odGhpcy5lbGVtZW50LHtrZXlkb3duOmZ1bmN0aW9uKG4pe2lmKHRoaXMuZWxlbWVudC5wcm9wKFwicmVhZE9ubHlcIikpcmV0dXJuIGU9ITAscz0hMCx2b2lkKGk9ITApO2U9ITEscz0hMSxpPSExO3ZhciBvPXQudWkua2V5Q29kZTtzd2l0Y2gobi5rZXlDb2RlKXtjYXNlIG8uUEFHRV9VUDplPSEwLHRoaXMuX21vdmUoXCJwcmV2aW91c1BhZ2VcIixuKTticmVhaztjYXNlIG8uUEFHRV9ET1dOOmU9ITAsdGhpcy5fbW92ZShcIm5leHRQYWdlXCIsbik7YnJlYWs7Y2FzZSBvLlVQOmU9ITAsdGhpcy5fa2V5RXZlbnQoXCJwcmV2aW91c1wiLG4pO2JyZWFrO2Nhc2Ugby5ET1dOOmU9ITAsdGhpcy5fa2V5RXZlbnQoXCJuZXh0XCIsbik7YnJlYWs7Y2FzZSBvLkVOVEVSOnRoaXMubWVudS5hY3RpdmUmJihlPSEwLG4ucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KG4pKTticmVhaztjYXNlIG8uVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3Qobik7YnJlYWs7Y2FzZSBvLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpJiYodGhpcy5pc011bHRpTGluZXx8dGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLmNsb3NlKG4pLG4ucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDppPSEwLHRoaXMuX3NlYXJjaFRpbWVvdXQobil9fSxrZXlwcmVzczpmdW5jdGlvbihzKXtpZihlKXJldHVybiBlPSExLHZvaWQodGhpcy5pc011bHRpTGluZSYmIXRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIil8fHMucHJldmVudERlZmF1bHQoKSk7aWYoIWkpe3ZhciBuPXQudWkua2V5Q29kZTtzd2l0Y2gocy5rZXlDb2RlKXtjYXNlIG4uUEFHRV9VUDp0aGlzLl9tb3ZlKFwicHJldmlvdXNQYWdlXCIscyk7YnJlYWs7Y2FzZSBuLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKFwibmV4dFBhZ2VcIixzKTticmVhaztjYXNlIG4uVVA6dGhpcy5fa2V5RXZlbnQoXCJwcmV2aW91c1wiLHMpO2JyZWFrO2Nhc2Ugbi5ET1dOOnRoaXMuX2tleUV2ZW50KFwibmV4dFwiLHMpfX19LGlucHV0OmZ1bmN0aW9uKHQpe2lmKHMpcmV0dXJuIHM9ITEsdm9pZCB0LnByZXZlbnREZWZhdWx0KCk7dGhpcy5fc2VhcmNoVGltZW91dCh0KX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMucHJldmlvdXM9dGhpcy5fdmFsdWUoKX0sYmx1cjpmdW5jdGlvbih0KXtpZih0aGlzLmNhbmNlbEJsdXIpcmV0dXJuIHZvaWQgZGVsZXRlIHRoaXMuY2FuY2VsQmx1cjtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UodCksdGhpcy5fY2hhbmdlKHQpfX0pLHRoaXMuX2luaXRTb3VyY2UoKSx0aGlzLm1lbnU9dChcIjx1bD5cIikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSkubWVudSh7cm9sZTpudWxsfSkuaGlkZSgpLm1lbnUoXCJpbnN0YW5jZVwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLm1lbnUuZWxlbWVudCxcInVpLWF1dG9jb21wbGV0ZVwiLFwidWktZnJvbnRcIiksdGhpcy5fb24odGhpcy5tZW51LmVsZW1lbnQse21vdXNlZG93bjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix0aGlzLmVsZW1lbnRbMF0hPT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pJiZ0aGlzLmVsZW1lbnQudHJpZ2dlcihcImZvY3VzXCIpfSl9LG1lbnVmb2N1czpmdW5jdGlvbihlLGkpe3ZhciBzLG47aWYodGhpcy5pc05ld01lbnUmJih0aGlzLmlzTmV3TWVudT0hMSxlLm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QoZS5vcmlnaW5hbEV2ZW50LnR5cGUpKSlyZXR1cm4gdGhpcy5tZW51LmJsdXIoKSx2b2lkIHRoaXMuZG9jdW1lbnQub25lKFwibW91c2Vtb3ZlXCIsZnVuY3Rpb24oKXt0KGUudGFyZ2V0KS50cmlnZ2VyKGUub3JpZ2luYWxFdmVudCl9KTtuPWkuaXRlbS5kYXRhKFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIiksITEhPT10aGlzLl90cmlnZ2VyKFwiZm9jdXNcIixlLHtpdGVtOm59KSYmZS5vcmlnaW5hbEV2ZW50JiYvXmtleS8udGVzdChlLm9yaWdpbmFsRXZlbnQudHlwZSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLChzPWkuaXRlbS5hdHRyKFwiYXJpYS1sYWJlbFwiKXx8bi52YWx1ZSkmJnQudHJpbShzKS5sZW5ndGgmJih0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksdChcIjxkaXY+XCIpLnRleHQocykuYXBwZW5kVG8odGhpcy5saXZlUmVnaW9uKSl9LG1lbnVzZWxlY3Q6ZnVuY3Rpb24oZSxpKXt2YXIgcz1pLml0ZW0uZGF0YShcInVpLWF1dG9jb21wbGV0ZS1pdGVtXCIpLG49dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pJiYodGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0aGlzLnByZXZpb3VzPW4sdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPW4sdGhpcy5zZWxlY3RlZEl0ZW09c30pKSwhMSE9PXRoaXMuX3RyaWdnZXIoXCJzZWxlY3RcIixlLHtpdGVtOnN9KSYmdGhpcy5fdmFsdWUocy52YWx1ZSksdGhpcy50ZXJtPXRoaXMuX3ZhbHVlKCksdGhpcy5jbG9zZShlKSx0aGlzLnNlbGVjdGVkSXRlbT1zfX0pLHRoaXMubGl2ZVJlZ2lvbj10KFwiPGRpdj5cIix7cm9sZTpcInN0YXR1c1wiLFwiYXJpYS1saXZlXCI6XCJhc3NlcnRpdmVcIixcImFyaWEtcmVsZXZhbnRcIjpcImFkZGl0aW9uc1wifSkuYXBwZW5kVG8odGhpcy5kb2N1bWVudFswXS5ib2R5KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmxpdmVSZWdpb24sbnVsbCxcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIil9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZVwiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9zdXBlcih0LGUpLFwic291cmNlXCI9PT10JiZ0aGlzLl9pbml0U291cmNlKCksXCJhcHBlbmRUb1wiPT09dCYmdGhpcy5tZW51LmVsZW1lbnQuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksXCJkaXNhYmxlZFwiPT09dCYmZSYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9pc0V2ZW50VGFyZ2V0SW5XaWRnZXQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnRbMF07cmV0dXJuIGUudGFyZ2V0PT09dGhpcy5lbGVtZW50WzBdfHxlLnRhcmdldD09PWl8fHQuY29udGFpbnMoaSxlLnRhcmdldCl9LF9jbG9zZU9uQ2xpY2tPdXRzaWRlOmZ1bmN0aW9uKHQpe3RoaXMuX2lzRXZlbnRUYXJnZXRJbldpZGdldCh0KXx8dGhpcy5jbG9zZSgpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIGUmJihlPWUuanF1ZXJ5fHxlLm5vZGVUeXBlP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGUpLmVxKDApKSxlJiZlWzBdfHwoZT10aGlzLmVsZW1lbnQuY2xvc2VzdChcIi51aS1mcm9udCwgZGlhbG9nXCIpKSxlLmxlbmd0aHx8KGU9dGhpcy5kb2N1bWVudFswXS5ib2R5KSxlfSxfaW5pdFNvdXJjZTpmdW5jdGlvbigpe3ZhciBlLGkscz10aGlzO3QuaXNBcnJheSh0aGlzLm9wdGlvbnMuc291cmNlKT8oZT10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKGkscyl7cyh0LnVpLmF1dG9jb21wbGV0ZS5maWx0ZXIoZSxpLnRlcm0pKX0pOlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc291cmNlPyhpPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24oZSxuKXtzLnhociYmcy54aHIuYWJvcnQoKSxzLnhocj10LmFqYXgoe3VybDppLGRhdGE6ZSxkYXRhVHlwZTpcImpzb25cIixzdWNjZXNzOmZ1bmN0aW9uKHQpe24odCl9LGVycm9yOmZ1bmN0aW9uKCl7bihbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50ZXJtPT09dGhpcy5fdmFsdWUoKSxpPXRoaXMubWVudS5lbGVtZW50LmlzKFwiOnZpc2libGVcIikscz10LmFsdEtleXx8dC5jdHJsS2V5fHx0Lm1ldGFLZXl8fHQuc2hpZnRLZXk7ZSYmKCFlfHxpfHxzKXx8KHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCx0KSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0PW51bGwhPXQ/dDp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHQubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZShlKTohMSE9PXRoaXMuX3RyaWdnZXIoXCJzZWFyY2hcIixlKT90aGlzLl9zZWFyY2godCk6dm9pZCAwfSxfc2VhcmNoOmZ1bmN0aW9uKHQpe3RoaXMucGVuZGluZysrLHRoaXMuX2FkZENsYXNzKFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06dH0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciBlPSsrdGhpcy5yZXF1ZXN0SW5kZXg7cmV0dXJuIHQucHJveHkoZnVuY3Rpb24odCl7ZT09PXRoaXMucmVxdWVzdEluZGV4JiZ0aGlzLl9fcmVzcG9uc2UodCksLS10aGlzLnBlbmRpbmd8fHRoaXMuX3JlbW92ZUNsYXNzKFwidWktYXV0b2NvbXBsZXRlLWxvYWRpbmdcIil9LHRoaXMpfSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKHQpe3QmJih0PXRoaXMuX25vcm1hbGl6ZSh0KSksdGhpcy5fdHJpZ2dlcihcInJlc3BvbnNlXCIsbnVsbCx7Y29udGVudDp0fSksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdCYmdC5sZW5ndGgmJiF0aGlzLmNhbmNlbFNlYXJjaD8odGhpcy5fc3VnZ2VzdCh0KSx0aGlzLl90cmlnZ2VyKFwib3BlblwiKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24odCl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UodCl9LF9jbG9zZTpmdW5jdGlvbih0KXt0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcIm1vdXNlZG93blwiKSx0aGlzLm1lbnUuZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcihcImNsb3NlXCIsdCkpfSxfY2hhbmdlOmZ1bmN0aW9uKHQpe3RoaXMucHJldmlvdXMhPT10aGlzLl92YWx1ZSgpJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsdCx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlLmxlbmd0aCYmZVswXS5sYWJlbCYmZVswXS52YWx1ZT9lOnQubWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGU/e2xhYmVsOmUsdmFsdWU6ZX06dC5leHRlbmQoe30sZSx7bGFiZWw6ZS5sYWJlbHx8ZS52YWx1ZSx2YWx1ZTplLnZhbHVlfHxlLmxhYmVsfSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksZSksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbih0LmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlZG93bjpcIl9jbG9zZU9uQ2xpY2tPdXRzaWRlXCJ9KX0sX3Jlc2l6ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm1lbnUuZWxlbWVudDt0Lm91dGVyV2lkdGgoTWF0aC5tYXgodC53aWR0aChcIlwiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGUsaSl7dmFyIHM9dGhpczt0LmVhY2goaSxmdW5jdGlvbih0LGkpe3MuX3JlbmRlckl0ZW1EYXRhKGUsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0odCxlKS5kYXRhKFwidWktYXV0b2NvbXBsZXRlLWl0ZW1cIixlKX0sX3JlbmRlckl0ZW06ZnVuY3Rpb24oZSxpKXtyZXR1cm4gdChcIjxsaT5cIikuYXBwZW5kKHQoXCI8ZGl2PlwiKS50ZXh0KGkubGFiZWwpKS5hcHBlbmRUbyhlKX0sX21vdmU6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKT90aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdCh0KXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KHQpPyh0aGlzLmlzTXVsdGlMaW5lfHx0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHZvaWQgdGhpcy5tZW51LmJsdXIoKSk6dm9pZCB0aGlzLm1lbnVbdF0oZSk6dm9pZCB0aGlzLnNlYXJjaChudWxsLGUpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24odCxlKXt0aGlzLmlzTXVsdGlMaW5lJiYhdGhpcy5tZW51LmVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKXx8KHRoaXMuX21vdmUodCxlKSxlLnByZXZlbnREZWZhdWx0KCkpfSxfaXNDb250ZW50RWRpdGFibGU6ZnVuY3Rpb24odCl7aWYoIXQubGVuZ3RoKXJldHVybiExO3ZhciBlPXQucHJvcChcImNvbnRlbnRFZGl0YWJsZVwiKTtyZXR1cm5cImluaGVyaXRcIj09PWU/dGhpcy5faXNDb250ZW50RWRpdGFibGUodC5wYXJlbnQoKSk6XCJ0cnVlXCI9PT1lfX0pLHQuZXh0ZW5kKHQudWkuYXV0b2NvbXBsZXRlLHtlc2NhcGVSZWdleDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXFwtXFxbXFxde30oKSorPy4sXFxcXFxcXiR8I1xcc10vZyxcIlxcXFwkJlwiKX0sZmlsdGVyOmZ1bmN0aW9uKGUsaSl7dmFyIHM9bmV3IFJlZ0V4cCh0LnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChpKSxcImlcIik7cmV0dXJuIHQuZ3JlcChlLGZ1bmN0aW9uKHQpe3JldHVybiBzLnRlc3QodC5sYWJlbHx8dC52YWx1ZXx8dCl9KX19KSx0LndpZGdldChcInVpLmF1dG9jb21wbGV0ZVwiLHQudWkuYXV0b2NvbXBsZXRlLHtvcHRpb25zOnttZXNzYWdlczp7bm9SZXN1bHRzOlwiTm8gc2VhcmNoIHJlc3VsdHMuXCIscmVzdWx0czpmdW5jdGlvbih0KXtyZXR1cm4gdCsodD4xP1wiIHJlc3VsdHMgYXJlXCI6XCIgcmVzdWx0IGlzXCIpK1wiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuXCJ9fX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXt2YXIgaTt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmNhbmNlbFNlYXJjaHx8KGk9ZSYmZS5sZW5ndGg/dGhpcy5vcHRpb25zLm1lc3NhZ2VzLnJlc3VsdHMoZS5sZW5ndGgpOnRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLmNoaWxkcmVuKCkuaGlkZSgpLHQoXCI8ZGl2PlwiKS50ZXh0KGkpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfX0pO3ZhciBkPSh0LnVpLmF1dG9jb21wbGV0ZSwvdWktY29ybmVyLShbYS16XSl7Miw2fS9nKTt0LndpZGdldChcInVpLmNvbnRyb2xncm91cFwiLHt2ZXJzaW9uOlwiMS4xMi4xXCIsZGVmYXVsdEVsZW1lbnQ6XCI8ZGl2PlwiLG9wdGlvbnM6e2RpcmVjdGlvbjpcImhvcml6b250YWxcIixkaXNhYmxlZDpudWxsLG9ubHlWaXNpYmxlOiEwLGl0ZW1zOntidXR0b246XCJpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGJ1dHRvbiwgYVwiLGNvbnRyb2xncm91cExhYmVsOlwiLnVpLWNvbnRyb2xncm91cC1sYWJlbFwiLGNoZWNrYm94cmFkaW86XCJpbnB1dFt0eXBlPSdjaGVja2JveCddLCBpbnB1dFt0eXBlPSdyYWRpbyddXCIsc2VsZWN0bWVudTpcInNlbGVjdFwiLHNwaW5uZXI6XCIudWktc3Bpbm5lci1pbnB1dFwifX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX2VuaGFuY2UoKX0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cihcInJvbGVcIixcInRvb2xiYXJcIiksdGhpcy5yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fY2FsbENoaWxkTWV0aG9kKFwiZGVzdHJveVwiKSx0aGlzLmNoaWxkV2lkZ2V0cy5yZW1vdmVEYXRhKFwidWktY29udHJvbGdyb3VwLWRhdGFcIiksdGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlXCIpLHRoaXMub3B0aW9ucy5pdGVtcy5jb250cm9sZ3JvdXBMYWJlbCYmdGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zLmNvbnRyb2xncm91cExhYmVsKS5maW5kKFwiLnVpLWNvbnRyb2xncm91cC1sYWJlbC1jb250ZW50c1wiKS5jb250ZW50cygpLnVud3JhcCgpfSxfaW5pdFdpZGdldHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9W107dC5lYWNoKHRoaXMub3B0aW9ucy5pdGVtcyxmdW5jdGlvbihzLG4pe3ZhciBvLGE9e307aWYobilyZXR1cm5cImNvbnRyb2xncm91cExhYmVsXCI9PT1zPyhvPWUuZWxlbWVudC5maW5kKG4pLG8uZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7ZS5jaGlsZHJlbihcIi51aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHNcIikubGVuZ3RofHxlLmNvbnRlbnRzKCkud3JhcEFsbChcIjxzcGFuIGNsYXNzPSd1aS1jb250cm9sZ3JvdXAtbGFiZWwtY29udGVudHMnPjwvc3Bhbj5cIil9KSxlLl9hZGRDbGFzcyhvLG51bGwsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktc3RhdGUtZGVmYXVsdFwiKSx2b2lkKGk9aS5jb25jYXQoby5nZXQoKSkpKTp2b2lkKHQuZm5bc10mJihhPWVbXCJfXCIrcytcIk9wdGlvbnNcIl0/ZVtcIl9cIitzK1wiT3B0aW9uc1wiXShcIm1pZGRsZVwiKTp7Y2xhc3Nlczp7fX0sZS5lbGVtZW50LmZpbmQobikuZWFjaChmdW5jdGlvbigpe3ZhciBuPXQodGhpcyksbz1uW3NdKFwiaW5zdGFuY2VcIikscj10LndpZGdldC5leHRlbmQoe30sYSk7aWYoXCJidXR0b25cIiE9PXN8fCFuLnBhcmVudChcIi51aS1zcGlubmVyXCIpLmxlbmd0aCl7b3x8KG89bltzXSgpW3NdKFwiaW5zdGFuY2VcIikpLG8mJihyLmNsYXNzZXM9ZS5fcmVzb2x2ZUNsYXNzZXNWYWx1ZXMoci5jbGFzc2VzLG8pKSxuW3NdKHIpO3ZhciBoPW5bc10oXCJ3aWRnZXRcIik7dC5kYXRhKGhbMF0sXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiLG98fG5bc10oXCJpbnN0YW5jZVwiKSksaS5wdXNoKGhbMF0pfX0pKSl9KSx0aGlzLmNoaWxkV2lkZ2V0cz10KHQudW5pcXVlKGkpKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmNoaWxkV2lkZ2V0cyxcInVpLWNvbnRyb2xncm91cC1pdGVtXCIpfSxfY2FsbENoaWxkTWV0aG9kOmZ1bmN0aW9uKGUpe3RoaXMuY2hpbGRXaWRnZXRzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5kYXRhKFwidWktY29udHJvbGdyb3VwLWRhdGFcIik7cyYmc1tlXSYmc1tlXSgpfSl9LF91cGRhdGVDb3JuZXJDbGFzczpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyhlLFwibGFiZWxcIikuY2xhc3Nlcy5sYWJlbDt0aGlzLl9yZW1vdmVDbGFzcyh0LG51bGwsXCJ1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IHVpLWNvcm5lci1hbGxcIiksdGhpcy5fYWRkQ2xhc3ModCxudWxsLGkpfSxfYnVpbGRTaW1wbGVPcHRpb25zOmZ1bmN0aW9uKHQsZSl7dmFyIGk9XCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcHRpb25zLmRpcmVjdGlvbixzPXtjbGFzc2VzOnt9fTtyZXR1cm4gcy5jbGFzc2VzW2VdPXttaWRkbGU6XCJcIixmaXJzdDpcInVpLWNvcm5lci1cIisoaT9cInRvcFwiOlwibGVmdFwiKSxsYXN0OlwidWktY29ybmVyLVwiKyhpP1wiYm90dG9tXCI6XCJyaWdodFwiKSxvbmx5OlwidWktY29ybmVyLWFsbFwifVt0XSxzfSxfc3Bpbm5lck9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYnVpbGRTaW1wbGVPcHRpb25zKHQsXCJ1aS1zcGlubmVyXCIpO3JldHVybiBlLmNsYXNzZXNbXCJ1aS1zcGlubmVyLXVwXCJdPVwiXCIsZS5jbGFzc2VzW1widWktc3Bpbm5lci1kb3duXCJdPVwiXCIsZX0sX2J1dHRvbk9wdGlvbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyh0LFwidWktYnV0dG9uXCIpfSxfY2hlY2tib3hyYWRpb09wdGlvbnM6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2J1aWxkU2ltcGxlT3B0aW9ucyh0LFwidWktY2hlY2tib3hyYWRpby1sYWJlbFwiKX0sX3NlbGVjdG1lbnVPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPVwidmVydGljYWxcIj09PXRoaXMub3B0aW9ucy5kaXJlY3Rpb247cmV0dXJue3dpZHRoOiEhZSYmXCJhdXRvXCIsY2xhc3Nlczp7bWlkZGxlOntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcIlwiLFwidWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCI6XCJcIn0sZmlyc3Q6e1widWktc2VsZWN0bWVudS1idXR0b24tb3BlblwiOlwidWktY29ybmVyLVwiKyhlP1widG9wXCI6XCJ0bFwiKSxcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLVwiKyhlP1widG9wXCI6XCJsZWZ0XCIpfSxsYXN0OntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjplP1wiXCI6XCJ1aS1jb3JuZXItdHJcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLVwiKyhlP1wiYm90dG9tXCI6XCJyaWdodFwiKX0sb25seTp7XCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1vcGVuXCI6XCJ1aS1jb3JuZXItdG9wXCIsXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1jbG9zZWRcIjpcInVpLWNvcm5lci1hbGxcIn19W3RdfX0sX3Jlc29sdmVDbGFzc2VzVmFsdWVzOmZ1bmN0aW9uKGUsaSl7dmFyIHM9e307cmV0dXJuIHQuZWFjaChlLGZ1bmN0aW9uKG4pe3ZhciBvPWkub3B0aW9ucy5jbGFzc2VzW25dfHxcIlwiO289dC50cmltKG8ucmVwbGFjZShkLFwiXCIpKSxzW25dPShvK1wiIFwiK2Vbbl0pLnJlcGxhY2UoL1xccysvZyxcIiBcIil9KSxzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJkaXJlY3Rpb25cIj09PXQmJnRoaXMuX3JlbW92ZUNsYXNzKFwidWktY29udHJvbGdyb3VwLVwiK3RoaXMub3B0aW9ucy5kaXJlY3Rpb24pLHRoaXMuX3N1cGVyKHQsZSksXCJkaXNhYmxlZFwiPT09dClyZXR1cm4gdm9pZCB0aGlzLl9jYWxsQ2hpbGRNZXRob2QoZT9cImRpc2FibGVcIjpcImVuYWJsZVwiKTt0aGlzLnJlZnJlc2goKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBlLGk9dGhpczt0aGlzLl9hZGRDbGFzcyhcInVpLWNvbnRyb2xncm91cCB1aS1jb250cm9sZ3JvdXAtXCIrdGhpcy5vcHRpb25zLmRpcmVjdGlvbiksXCJob3Jpem9udGFsXCI9PT10aGlzLm9wdGlvbnMuZGlyZWN0aW9uJiZ0aGlzLl9hZGRDbGFzcyhudWxsLFwidWktaGVscGVyLWNsZWFyZml4XCIpLHRoaXMuX2luaXRXaWRnZXRzKCksZT10aGlzLmNoaWxkV2lkZ2V0cyx0aGlzLm9wdGlvbnMub25seVZpc2libGUmJihlPWUuZmlsdGVyKFwiOnZpc2libGVcIikpLGUubGVuZ3RoJiYodC5lYWNoKFtcImZpcnN0XCIsXCJsYXN0XCJdLGZ1bmN0aW9uKHQscyl7dmFyIG49ZVtzXSgpLmRhdGEoXCJ1aS1jb250cm9sZ3JvdXAtZGF0YVwiKTtpZihuJiZpW1wiX1wiK24ud2lkZ2V0TmFtZStcIk9wdGlvbnNcIl0pe3ZhciBvPWlbXCJfXCIrbi53aWRnZXROYW1lK1wiT3B0aW9uc1wiXSgxPT09ZS5sZW5ndGg/XCJvbmx5XCI6cyk7by5jbGFzc2VzPWkuX3Jlc29sdmVDbGFzc2VzVmFsdWVzKG8uY2xhc3NlcyxuKSxuLmVsZW1lbnRbbi53aWRnZXROYW1lXShvKX1lbHNlIGkuX3VwZGF0ZUNvcm5lckNsYXNzKGVbc10oKSxzKX0pLHRoaXMuX2NhbGxDaGlsZE1ldGhvZChcInJlZnJlc2hcIikpfX0pO3Qud2lkZ2V0KFwidWkuY2hlY2tib3hyYWRpb1wiLFt0LnVpLmZvcm1SZXNldE1peGluLHt2ZXJzaW9uOlwiMS4xMi4xXCIsb3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCxsYWJlbDpudWxsLGljb246ITAsY2xhc3Nlczp7XCJ1aS1jaGVja2JveHJhZGlvLWxhYmVsXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1jaGVja2JveHJhZGlvLWljb25cIjpcInVpLWNvcm5lci1hbGxcIn19LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGUsaSxzPXRoaXMsbj10aGlzLl9zdXBlcigpfHx7fTtyZXR1cm4gdGhpcy5fcmVhZFR5cGUoKSxpPXRoaXMuZWxlbWVudC5sYWJlbHMoKSx0aGlzLmxhYmVsPXQoaVtpLmxlbmd0aC0xXSksdGhpcy5sYWJlbC5sZW5ndGh8fHQuZXJyb3IoXCJObyBsYWJlbCBmb3VuZCBmb3IgY2hlY2tib3hyYWRpbyB3aWRnZXRcIiksdGhpcy5vcmlnaW5hbExhYmVsPVwiXCIsdGhpcy5sYWJlbC5jb250ZW50cygpLm5vdCh0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXtzLm9yaWdpbmFsTGFiZWwrPTM9PT10aGlzLm5vZGVUeXBlP3QodGhpcykudGV4dCgpOnRoaXMub3V0ZXJIVE1MfSksdGhpcy5vcmlnaW5hbExhYmVsJiYobi5sYWJlbD10aGlzLm9yaWdpbmFsTGFiZWwpLGU9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkLG51bGwhPWUmJihuLmRpc2FibGVkPWUpLG59LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnRbMF0uY2hlY2tlZDt0aGlzLl9iaW5kRm9ybVJlc2V0SGFuZGxlcigpLG51bGw9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9hZGRDbGFzcyhcInVpLWNoZWNrYm94cmFkaW9cIixcInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZVwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1sYWJlbFwiLFwidWktYnV0dG9uIHVpLXdpZGdldFwiKSxcInJhZGlvXCI9PT10aGlzLnR5cGUmJnRoaXMuX2FkZENsYXNzKHRoaXMubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLXJhZGlvLWxhYmVsXCIpLHRoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5vcHRpb25zLmxhYmVsIT09dGhpcy5vcmlnaW5hbExhYmVsP3RoaXMuX3VwZGF0ZUxhYmVsKCk6dGhpcy5vcmlnaW5hbExhYmVsJiYodGhpcy5vcHRpb25zLmxhYmVsPXRoaXMub3JpZ2luYWxMYWJlbCksdGhpcy5fZW5oYW5jZSgpLHQmJih0aGlzLl9hZGRDbGFzcyh0aGlzLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5pY29uJiZ0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLXN0YXRlLWhvdmVyXCIpKSx0aGlzLl9vbih7Y2hhbmdlOlwiX3RvZ2dsZUNsYXNzZXNcIixmb2N1czpmdW5jdGlvbigpe3RoaXMuX2FkZENsYXNzKHRoaXMubGFiZWwsbnVsbCxcInVpLXN0YXRlLWZvY3VzIHVpLXZpc3VhbC1mb2N1c1wiKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNsYXNzKHRoaXMubGFiZWwsbnVsbCxcInVpLXN0YXRlLWZvY3VzIHVpLXZpc3VhbC1mb2N1c1wiKX19KX0sX3JlYWRUeXBlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy50eXBlPXRoaXMuZWxlbWVudFswXS50eXBlLFwiaW5wdXRcIj09PWUmJi9yYWRpb3xjaGVja2JveC8udGVzdCh0aGlzLnR5cGUpfHx0LmVycm9yKFwiQ2FuJ3QgY3JlYXRlIGNoZWNrYm94cmFkaW8gb24gZWxlbWVudC5ub2RlTmFtZT1cIitlK1wiIGFuZCBlbGVtZW50LnR5cGU9XCIrdGhpcy50eXBlKX0sX2VuaGFuY2U6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVJY29uKHRoaXMuZWxlbWVudFswXS5jaGVja2VkKX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGFiZWx9LF9nZXRSYWRpb0dyb3VwOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLmVsZW1lbnRbMF0ubmFtZSxzPVwiaW5wdXRbbmFtZT0nXCIrdC51aS5lc2NhcGVTZWxlY3RvcihpKStcIiddXCI7cmV0dXJuIGk/KGU9dGhpcy5mb3JtLmxlbmd0aD90KHRoaXMuZm9ybVswXS5lbGVtZW50cykuZmlsdGVyKHMpOnQocykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10KHRoaXMpLmZvcm0oKS5sZW5ndGh9KSxlLm5vdCh0aGlzLmVsZW1lbnQpKTp0KFtdKX0sX3RvZ2dsZUNsYXNzZXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnRbMF0uY2hlY2tlZDt0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIixlKSx0aGlzLm9wdGlvbnMuaWNvbiYmXCJjaGVja2JveFwiPT09dGhpcy50eXBlJiZ0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLWljb24tY2hlY2sgdWktc3RhdGUtY2hlY2tlZFwiLGUpLl90b2dnbGVDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLWljb24tYmxhbmtcIiwhZSksXCJyYWRpb1wiPT09dGhpcy50eXBlJiZ0aGlzLl9nZXRSYWRpb0dyb3VwKCkuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuY2hlY2tib3hyYWRpbyhcImluc3RhbmNlXCIpO2UmJmUuX3JlbW92ZUNsYXNzKGUubGFiZWwsXCJ1aS1jaGVja2JveHJhZGlvLWNoZWNrZWRcIixcInVpLXN0YXRlLWFjdGl2ZVwiKX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3VuYmluZEZvcm1SZXNldEhhbmRsZXIoKSx0aGlzLmljb24mJih0aGlzLmljb24ucmVtb3ZlKCksdGhpcy5pY29uU3BhY2UucmVtb3ZlKCkpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7aWYoXCJsYWJlbFwiIT09dHx8ZSl7aWYodGhpcy5fc3VwZXIodCxlKSxcImRpc2FibGVkXCI9PT10KXJldHVybiB0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmxhYmVsLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiLGUpLHZvaWQodGhpcy5lbGVtZW50WzBdLmRpc2FibGVkPWUpO3RoaXMucmVmcmVzaCgpfX0sX3VwZGF0ZUljb246ZnVuY3Rpb24oZSl7dmFyIGk9XCJ1aS1pY29uIHVpLWljb24tYmFja2dyb3VuZCBcIjt0aGlzLm9wdGlvbnMuaWNvbj8odGhpcy5pY29ufHwodGhpcy5pY29uPXQoXCI8c3Bhbj5cIiksdGhpcy5pY29uU3BhY2U9dChcIjxzcGFuPiA8L3NwYW4+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvblNwYWNlLFwidWktY2hlY2tib3hyYWRpby1pY29uLXNwYWNlXCIpKSxcImNoZWNrYm94XCI9PT10aGlzLnR5cGU/KGkrPWU/XCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIjpcInVpLWljb24tYmxhbmtcIix0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmljb24sbnVsbCxlP1widWktaWNvbi1ibGFua1wiOlwidWktaWNvbi1jaGVja1wiKSk6aSs9XCJ1aS1pY29uLWJsYW5rXCIsdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLFwidWktY2hlY2tib3hyYWRpby1pY29uXCIsaSksZXx8dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5pY29uLG51bGwsXCJ1aS1pY29uLWNoZWNrIHVpLXN0YXRlLWNoZWNrZWRcIiksdGhpcy5pY29uLnByZXBlbmRUbyh0aGlzLmxhYmVsKS5hZnRlcih0aGlzLmljb25TcGFjZSkpOnZvaWQgMCE9PXRoaXMuaWNvbiYmKHRoaXMuaWNvbi5yZW1vdmUoKSx0aGlzLmljb25TcGFjZS5yZW1vdmUoKSxkZWxldGUgdGhpcy5pY29uKX0sX3VwZGF0ZUxhYmVsOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sYWJlbC5jb250ZW50cygpLm5vdCh0aGlzLmVsZW1lbnRbMF0pO3RoaXMuaWNvbiYmKHQ9dC5ub3QodGhpcy5pY29uWzBdKSksdGhpcy5pY29uU3BhY2UmJih0PXQubm90KHRoaXMuaWNvblNwYWNlWzBdKSksdC5yZW1vdmUoKSx0aGlzLmxhYmVsLmFwcGVuZCh0aGlzLm9wdGlvbnMubGFiZWwpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50WzBdLmNoZWNrZWQsZT10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWQ7dGhpcy5fdXBkYXRlSWNvbih0KSx0aGlzLl90b2dnbGVDbGFzcyh0aGlzLmxhYmVsLFwidWktY2hlY2tib3hyYWRpby1jaGVja2VkXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIix0KSxudWxsIT09dGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLl91cGRhdGVMYWJlbCgpLGUhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOmV9KX19XSk7dC51aS5jaGVja2JveHJhZGlvO3Qud2lkZ2V0KFwidWkuYnV0dG9uXCIse3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxidXR0b24+XCIsb3B0aW9uczp7Y2xhc3Nlczp7XCJ1aS1idXR0b25cIjpcInVpLWNvcm5lci1hbGxcIn0sZGlzYWJsZWQ6bnVsbCxpY29uOm51bGwsaWNvblBvc2l0aW9uOlwiYmVnaW5uaW5nXCIsbGFiZWw6bnVsbCxzaG93TGFiZWw6ITB9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLl9zdXBlcigpfHx7fTtyZXR1cm4gdGhpcy5pc0lucHV0PXRoaXMuZWxlbWVudC5pcyhcImlucHV0XCIpLHQ9dGhpcy5lbGVtZW50WzBdLmRpc2FibGVkLG51bGwhPXQmJihlLmRpc2FibGVkPXQpLHRoaXMub3JpZ2luYWxMYWJlbD10aGlzLmlzSW5wdXQ/dGhpcy5lbGVtZW50LnZhbCgpOnRoaXMuZWxlbWVudC5odG1sKCksdGhpcy5vcmlnaW5hbExhYmVsJiYoZS5sYWJlbD10aGlzLm9yaWdpbmFsTGFiZWwpLGV9LF9jcmVhdGU6ZnVuY3Rpb24oKXshdGhpcy5vcHRpb24uc2hvd0xhYmVsJiF0aGlzLm9wdGlvbnMuaWNvbiYmKHRoaXMub3B0aW9ucy5zaG93TGFiZWw9ITApLG51bGw9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD10aGlzLmVsZW1lbnRbMF0uZGlzYWJsZWR8fCExKSx0aGlzLmhhc1RpdGxlPSEhdGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiKSx0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMub3B0aW9ucy5sYWJlbCE9PXRoaXMub3JpZ2luYWxMYWJlbCYmKHRoaXMuaXNJbnB1dD90aGlzLmVsZW1lbnQudmFsKHRoaXMub3B0aW9ucy5sYWJlbCk6dGhpcy5lbGVtZW50Lmh0bWwodGhpcy5vcHRpb25zLmxhYmVsKSksdGhpcy5fYWRkQ2xhc3MoXCJ1aS1idXR0b25cIixcInVpLXdpZGdldFwiKSx0aGlzLl9zZXRPcHRpb24oXCJkaXNhYmxlZFwiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fZW5oYW5jZSgpLHRoaXMuZWxlbWVudC5pcyhcImFcIikmJnRoaXMuX29uKHtrZXl1cDpmdW5jdGlvbihlKXtlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuU1BBQ0UmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5lbGVtZW50WzBdLmNsaWNrP3RoaXMuZWxlbWVudFswXS5jbGljaygpOnRoaXMuZWxlbWVudC50cmlnZ2VyKFwiY2xpY2tcIikpfX0pfSxfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5pcyhcImJ1dHRvblwiKXx8dGhpcy5lbGVtZW50LmF0dHIoXCJyb2xlXCIsXCJidXR0b25cIiksdGhpcy5vcHRpb25zLmljb24mJih0aGlzLl91cGRhdGVJY29uKFwiaWNvblwiLHRoaXMub3B0aW9ucy5pY29uKSx0aGlzLl91cGRhdGVUb29sdGlwKCkpfSxfdXBkYXRlVG9vbHRpcDpmdW5jdGlvbigpe3RoaXMudGl0bGU9dGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiKSx0aGlzLm9wdGlvbnMuc2hvd0xhYmVsfHx0aGlzLnRpdGxlfHx0aGlzLmVsZW1lbnQuYXR0cihcInRpdGxlXCIsdGhpcy5vcHRpb25zLmxhYmVsKX0sX3VwZGF0ZUljb246ZnVuY3Rpb24oZSxpKXt2YXIgcz1cImljb25Qb3NpdGlvblwiIT09ZSxuPXM/dGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbjppLG89XCJ0b3BcIj09PW58fFwiYm90dG9tXCI9PT1uO3RoaXMuaWNvbj9zJiZ0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmljb24sbnVsbCx0aGlzLm9wdGlvbnMuaWNvbik6KHRoaXMuaWNvbj10KFwiPHNwYW4+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvbixcInVpLWJ1dHRvbi1pY29uXCIsXCJ1aS1pY29uXCIpLHRoaXMub3B0aW9ucy5zaG93TGFiZWx8fHRoaXMuX2FkZENsYXNzKFwidWktYnV0dG9uLWljb24tb25seVwiKSkscyYmdGhpcy5fYWRkQ2xhc3ModGhpcy5pY29uLG51bGwsaSksdGhpcy5fYXR0YWNoSWNvbihuKSxvPyh0aGlzLl9hZGRDbGFzcyh0aGlzLmljb24sbnVsbCxcInVpLXdpZGdldC1pY29uLWJsb2NrXCIpLHRoaXMuaWNvblNwYWNlJiZ0aGlzLmljb25TcGFjZS5yZW1vdmUoKSk6KHRoaXMuaWNvblNwYWNlfHwodGhpcy5pY29uU3BhY2U9dChcIjxzcGFuPiA8L3NwYW4+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaWNvblNwYWNlLFwidWktYnV0dG9uLWljb24tc3BhY2VcIikpLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuaWNvbixudWxsLFwidWktd2lnZXQtaWNvbi1ibG9ja1wiKSx0aGlzLl9hdHRhY2hJY29uU3BhY2UobikpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKFwicm9sZVwiKSx0aGlzLmljb24mJnRoaXMuaWNvbi5yZW1vdmUoKSx0aGlzLmljb25TcGFjZSYmdGhpcy5pY29uU3BhY2UucmVtb3ZlKCksdGhpcy5oYXNUaXRsZXx8dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJ0aXRsZVwiKX0sX2F0dGFjaEljb25TcGFjZTpmdW5jdGlvbih0KXt0aGlzLmljb25bL14oPzplbmR8Ym90dG9tKS8udGVzdCh0KT9cImJlZm9yZVwiOlwiYWZ0ZXJcIl0odGhpcy5pY29uU3BhY2UpfSxfYXR0YWNoSWNvbjpmdW5jdGlvbih0KXt0aGlzLmVsZW1lbnRbL14oPzplbmR8Ym90dG9tKS8udGVzdCh0KT9cImFwcGVuZFwiOlwicHJlcGVuZFwiXSh0aGlzLmljb24pfSxfc2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT12b2lkIDA9PT10LnNob3dMYWJlbD90aGlzLm9wdGlvbnMuc2hvd0xhYmVsOnQuc2hvd0xhYmVsLGk9dm9pZCAwPT09dC5pY29uP3RoaXMub3B0aW9ucy5pY29uOnQuaWNvbjtlfHxpfHwodC5zaG93TGFiZWw9ITApLHRoaXMuX3N1cGVyKHQpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7XCJpY29uXCI9PT10JiYoZT90aGlzLl91cGRhdGVJY29uKHQsZSk6dGhpcy5pY29uJiYodGhpcy5pY29uLnJlbW92ZSgpLHRoaXMuaWNvblNwYWNlJiZ0aGlzLmljb25TcGFjZS5yZW1vdmUoKSkpLFwiaWNvblBvc2l0aW9uXCI9PT10JiZ0aGlzLl91cGRhdGVJY29uKHQsZSksXCJzaG93TGFiZWxcIj09PXQmJih0aGlzLl90b2dnbGVDbGFzcyhcInVpLWJ1dHRvbi1pY29uLW9ubHlcIixudWxsLCFlKSx0aGlzLl91cGRhdGVUb29sdGlwKCkpLFwibGFiZWxcIj09PXQmJih0aGlzLmlzSW5wdXQ/dGhpcy5lbGVtZW50LnZhbChlKToodGhpcy5lbGVtZW50Lmh0bWwoZSksdGhpcy5pY29uJiYodGhpcy5fYXR0YWNoSWNvbih0aGlzLm9wdGlvbnMuaWNvblBvc2l0aW9uKSx0aGlzLl9hdHRhY2hJY29uU3BhY2UodGhpcy5vcHRpb25zLmljb25Qb3NpdGlvbikpKSksdGhpcy5fc3VwZXIodCxlKSxcImRpc2FibGVkXCI9PT10JiYodGhpcy5fdG9nZ2xlQ2xhc3MobnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsZSksdGhpcy5lbGVtZW50WzBdLmRpc2FibGVkPWUsZSYmdGhpcy5lbGVtZW50LmJsdXIoKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoXCJpbnB1dCwgYnV0dG9uXCIpP3RoaXMuZWxlbWVudFswXS5kaXNhYmxlZDp0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoXCJ1aS1idXR0b24tZGlzYWJsZWRcIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9ucyh7ZGlzYWJsZWQ6dH0pLHRoaXMuX3VwZGF0ZVRvb2x0aXAoKX19KSwhMSE9PXQudWlCYWNrQ29tcGF0JiYodC53aWRnZXQoXCJ1aS5idXR0b25cIix0LnVpLmJ1dHRvbix7b3B0aW9uczp7dGV4dDohMCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zaG93TGFiZWwmJiF0aGlzLm9wdGlvbnMudGV4dCYmKHRoaXMub3B0aW9ucy5zaG93TGFiZWw9dGhpcy5vcHRpb25zLnRleHQpLCF0aGlzLm9wdGlvbnMuc2hvd0xhYmVsJiZ0aGlzLm9wdGlvbnMudGV4dCYmKHRoaXMub3B0aW9ucy50ZXh0PXRoaXMub3B0aW9ucy5zaG93TGFiZWwpLHRoaXMub3B0aW9ucy5pY29ufHwhdGhpcy5vcHRpb25zLmljb25zLnByaW1hcnkmJiF0aGlzLm9wdGlvbnMuaWNvbnMuc2Vjb25kYXJ5P3RoaXMub3B0aW9ucy5pY29uJiYodGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk9dGhpcy5vcHRpb25zLmljb24pOnRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5P3RoaXMub3B0aW9ucy5pY29uPXRoaXMub3B0aW9ucy5pY29ucy5wcmltYXJ5Oih0aGlzLm9wdGlvbnMuaWNvbj10aGlzLm9wdGlvbnMuaWNvbnMuc2Vjb25kYXJ5LHRoaXMub3B0aW9ucy5pY29uUG9zaXRpb249XCJlbmRcIiksdGhpcy5fc3VwZXIoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe2lmKFwidGV4dFwiPT09dClyZXR1cm4gdm9pZCB0aGlzLl9zdXBlcihcInNob3dMYWJlbFwiLGUpO1wic2hvd0xhYmVsXCI9PT10JiYodGhpcy5vcHRpb25zLnRleHQ9ZSksXCJpY29uXCI9PT10JiYodGhpcy5vcHRpb25zLmljb25zLnByaW1hcnk9ZSksXCJpY29uc1wiPT09dCYmKGUucHJpbWFyeT8odGhpcy5fc3VwZXIoXCJpY29uXCIsZS5wcmltYXJ5KSx0aGlzLl9zdXBlcihcImljb25Qb3NpdGlvblwiLFwiYmVnaW5uaW5nXCIpKTplLnNlY29uZGFyeSYmKHRoaXMuX3N1cGVyKFwiaWNvblwiLGUuc2Vjb25kYXJ5KSx0aGlzLl9zdXBlcihcImljb25Qb3NpdGlvblwiLFwiZW5kXCIpKSksdGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpfX0pLHQuZm4uYnV0dG9uPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiF0aGlzLmxlbmd0aHx8dGhpcy5sZW5ndGgmJlwiSU5QVVRcIiE9PXRoaXNbMF0udGFnTmFtZXx8dGhpcy5sZW5ndGgmJlwiSU5QVVRcIj09PXRoaXNbMF0udGFnTmFtZSYmXCJjaGVja2JveFwiIT09dGhpcy5hdHRyKFwidHlwZVwiKSYmXCJyYWRpb1wiIT09dGhpcy5hdHRyKFwidHlwZVwiKT9lLmFwcGx5KHRoaXMsYXJndW1lbnRzKToodC51aS5jaGVja2JveHJhZGlvfHx0LmVycm9yKFwiQ2hlY2tib3hyYWRpbyB3aWRnZXQgbWlzc2luZ1wiKSwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmNoZWNrYm94cmFkaW8oe2ljb246ITF9KTp0aGlzLmNoZWNrYm94cmFkaW8uYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KHQuZm4uYnV0dG9uKSx0LmZuLmJ1dHRvbnNldD1mdW5jdGlvbigpe3JldHVybiB0LnVpLmNvbnRyb2xncm91cHx8dC5lcnJvcihcIkNvbnRyb2xncm91cCB3aWRnZXQgbWlzc2luZ1wiKSxcIm9wdGlvblwiPT09YXJndW1lbnRzWzBdJiZcIml0ZW1zXCI9PT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1syXT90aGlzLmNvbnRyb2xncm91cC5hcHBseSh0aGlzLFthcmd1bWVudHNbMF0sXCJpdGVtcy5idXR0b25cIixhcmd1bWVudHNbMl1dKTpcIm9wdGlvblwiPT09YXJndW1lbnRzWzBdJiZcIml0ZW1zXCI9PT1hcmd1bWVudHNbMV0/dGhpcy5jb250cm9sZ3JvdXAuYXBwbHkodGhpcyxbYXJndW1lbnRzWzBdLFwiaXRlbXMuYnV0dG9uXCJdKTooXCJvYmplY3RcIj09dHlwZW9mIGFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLml0ZW1zJiYoYXJndW1lbnRzWzBdLml0ZW1zPXtidXR0b246YXJndW1lbnRzWzBdLml0ZW1zfSksdGhpcy5jb250cm9sZ3JvdXAuYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pO3QudWkuYnV0dG9uO3QuZXh0ZW5kKHQudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246XCIxLjEyLjFcIn19KTt2YXIgcDt0LmV4dGVuZChzLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOlwiaGFzRGF0ZXBpY2tlclwiLG1heFJvd3M6NCxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9kZWZhdWx0cyx0fHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG87cz1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj1cImRpdlwiPT09c3x8XCJzcGFuXCI9PT1zLGUuaWR8fCh0aGlzLnV1aWQrPTEsZS5pZD1cImRwXCIrdGhpcy51dWlkKSxvPXRoaXMuX25ld0luc3QodChlKSxuKSxvLnNldHRpbmdzPXQuZXh0ZW5kKHt9LGl8fHt9KSxcImlucHV0XCI9PT1zP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKGUsbyk6biYmdGhpcy5faW5saW5lRGF0ZXBpY2tlcihlLG8pfSxfbmV3SW5zdDpmdW5jdGlvbihlLGkpe3JldHVybntpZDplWzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cXC1dKS9nLFwiXFxcXFxcXFwkMVwiKSxpbnB1dDplLHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOmksZHBEaXY6aT9uKHQoXCI8ZGl2IGNsYXNzPSdcIit0aGlzLl9pbmxpbmVDbGFzcytcIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+XCIpKTp0aGlzLmRwRGl2fX0sX2Nvbm5lY3REYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChlKTtpLmFwcGVuZD10KFtdKSxpLnRyaWdnZXI9dChbXSkscy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSl8fCh0aGlzLl9hdHRhY2htZW50cyhzLGkpLHMuYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLm9uKFwia2V5ZG93blwiLHRoaXMuX2RvS2V5RG93bikub24oXCJrZXlwcmVzc1wiLHRoaXMuX2RvS2V5UHJlc3MpLm9uKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSx0aGlzLl9hdXRvU2l6ZShpKSx0LmRhdGEoZSxcImRhdGVwaWNrZXJcIixpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXRoaXMuX2dldChpLFwiYXBwZW5kVGV4dFwiKSxyPXRoaXMuX2dldChpLFwiaXNSVExcIik7aS5hcHBlbmQmJmkuYXBwZW5kLnJlbW92ZSgpLGEmJihpLmFwcGVuZD10KFwiPHNwYW4gY2xhc3M9J1wiK3RoaXMuX2FwcGVuZENsYXNzK1wiJz5cIithK1wiPC9zcGFuPlwiKSxlW3I/XCJiZWZvcmVcIjpcImFmdGVyXCJdKGkuYXBwZW5kKSksZS5vZmYoXCJmb2N1c1wiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSxpLnRyaWdnZXImJmkudHJpZ2dlci5yZW1vdmUoKSxzPXRoaXMuX2dldChpLFwic2hvd09uXCIpLFwiZm9jdXNcIiE9PXMmJlwiYm90aFwiIT09c3x8ZS5vbihcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLFwiYnV0dG9uXCIhPT1zJiZcImJvdGhcIiE9PXN8fChuPXRoaXMuX2dldChpLFwiYnV0dG9uVGV4dFwiKSxvPXRoaXMuX2dldChpLFwiYnV0dG9uSW1hZ2VcIiksaS50cmlnZ2VyPXQodGhpcy5fZ2V0KGksXCJidXR0b25JbWFnZU9ubHlcIik/dChcIjxpbWcvPlwiKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmF0dHIoe3NyYzpvLGFsdDpuLHRpdGxlOm59KTp0KFwiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPlwiKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmh0bWwobz90KFwiPGltZy8+XCIpLmF0dHIoe3NyYzpvLGFsdDpuLHRpdGxlOm59KTpuKSksZVtyP1wiYmVmb3JlXCI6XCJhZnRlclwiXShpLnRyaWdnZXIpLGkudHJpZ2dlci5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PT1lWzBdP3QuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTp0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PWVbMF0/KHQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSx0LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pKTp0LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pLCExfSkpfSxfYXV0b1NpemU6ZnVuY3Rpb24odCl7aWYodGhpcy5fZ2V0KHQsXCJhdXRvU2l6ZVwiKSYmIXQuaW5saW5lKXt2YXIgZSxpLHMsbixvPW5ldyBEYXRlKDIwMDksMTEsMjApLGE9dGhpcy5fZ2V0KHQsXCJkYXRlRm9ybWF0XCIpO2EubWF0Y2goL1tETV0vKSYmKGU9ZnVuY3Rpb24odCl7Zm9yKGk9MCxzPTAsbj0wO248dC5sZW5ndGg7bisrKXRbbl0ubGVuZ3RoPmkmJihpPXRbbl0ubGVuZ3RoLHM9bik7cmV0dXJuIHN9LG8uc2V0TW9udGgoZSh0aGlzLl9nZXQodCxhLm1hdGNoKC9NTS8pP1wibW9udGhOYW1lc1wiOlwibW9udGhOYW1lc1Nob3J0XCIpKSksby5zZXREYXRlKGUodGhpcy5fZ2V0KHQsYS5tYXRjaCgvREQvKT9cImRheU5hbWVzXCI6XCJkYXlOYW1lc1Nob3J0XCIpKSsyMC1vLmdldERheSgpKSksdC5pbnB1dC5hdHRyKFwic2l6ZVwiLHRoaXMuX2Zvcm1hdERhdGUodCxvKS5sZW5ndGgpfX0sX2lubGluZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KGUpO3MuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwocy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuYXBwZW5kKGkuZHBEaXYpLHQuZGF0YShlLFwiZGF0ZXBpY2tlclwiLGkpLHRoaXMuX3NldERhdGUoaSx0aGlzLl9nZXREZWZhdWx0RGF0ZShpKSwhMCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSksaS5zZXR0aW5ncy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSksaS5kcERpdi5jc3MoXCJkaXNwbGF5XCIsXCJibG9ja1wiKSl9LF9kaWFsb2dEYXRlcGlja2VyOmZ1bmN0aW9uKGUsaSxzLG4sbyl7dmFyIHIsaCxsLGMsdSxkPXRoaXMuX2RpYWxvZ0luc3Q7cmV0dXJuIGR8fCh0aGlzLnV1aWQrPTEscj1cImRwXCIrdGhpcy51dWlkLHRoaXMuX2RpYWxvZ0lucHV0PXQoXCI8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9J1wiK3IrXCInIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OycvPlwiKSx0aGlzLl9kaWFsb2dJbnB1dC5vbihcImtleWRvd25cIix0aGlzLl9kb0tleURvd24pLHQoXCJib2R5XCIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksZD10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLGQuc2V0dGluZ3M9e30sdC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFwiZGF0ZXBpY2tlclwiLGQpKSxhKGQuc2V0dGluZ3Msbnx8e30pLGk9aSYmaS5jb25zdHJ1Y3Rvcj09PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShkLGkpOmksdGhpcy5fZGlhbG9nSW5wdXQudmFsKGkpLHRoaXMuX3Bvcz1vP28ubGVuZ3RoP286W28ucGFnZVgsby5wYWdlWV06bnVsbCx0aGlzLl9wb3N8fChoPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsYz1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsdGhpcy5fcG9zPVtoLzItMTAwK2MsbC8yLTE1MCt1XSksdGhpcy5fZGlhbG9nSW5wdXQuY3NzKFwibGVmdFwiLHRoaXMuX3Bvc1swXSsyMCtcInB4XCIpLmNzcyhcInRvcFwiLHRoaXMuX3Bvc1sxXStcInB4XCIpLGQuc2V0dGluZ3Mub25TZWxlY3Q9cyx0aGlzLl9pbkRpYWxvZz0hMCx0aGlzLmRwRGl2LmFkZENsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKSx0aGlzLl9zaG93RGF0ZXBpY2tlcih0aGlzLl9kaWFsb2dJbnB1dFswXSksdC5ibG9ja1VJJiZ0LmJsb2NrVUkodGhpcy5kcERpdiksdC5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLFwiZGF0ZXBpY2tlclwiLGQpLHRoaXN9LF9kZXN0cm95RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzPXQoZSksbj10LmRhdGEoZSxcImRhdGVwaWNrZXJcIik7cy5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSx0LnJlbW92ZURhdGEoZSxcImRhdGVwaWNrZXJcIiksXCJpbnB1dFwiPT09aT8obi5hcHBlbmQucmVtb3ZlKCksbi50cmlnZ2VyLnJlbW92ZSgpLHMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLm9mZihcImZvY3VzXCIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLm9mZihcImtleWRvd25cIix0aGlzLl9kb0tleURvd24pLm9mZihcImtleXByZXNzXCIsdGhpcy5fZG9LZXlQcmVzcykub2ZmKFwia2V5dXBcIix0aGlzLl9kb0tleVVwKSk6XCJkaXZcIiE9PWkmJlwic3BhblwiIT09aXx8cy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKSxwPT09biYmKHA9bnVsbCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dChlKSxvPXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFwiaW5wdXRcIj09PWk/KGUuZGlzYWJsZWQ9ITEsby50cmlnZ2VyLmZpbHRlcihcImJ1dHRvblwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcihcImltZ1wiKS5jc3Moe29wYWNpdHk6XCIxLjBcIixjdXJzb3I6XCJcIn0pKTpcImRpdlwiIT09aSYmXCJzcGFuXCIhPT1pfHwocz1uLmNoaWxkcmVuKFwiLlwiK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSxzLmZpbmQoXCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhclwiKS5wcm9wKFwiZGlzYWJsZWRcIiwhMSkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPXQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZT9udWxsOnR9KSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dChlKSxvPXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKTtuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFwiaW5wdXRcIj09PWk/KGUuZGlzYWJsZWQ9ITAsby50cmlnZ2VyLmZpbHRlcihcImJ1dHRvblwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcihcImltZ1wiKS5jc3Moe29wYWNpdHk6XCIwLjVcIixjdXJzb3I6XCJkZWZhdWx0XCJ9KSk6XCJkaXZcIiE9PWkmJlwic3BhblwiIT09aXx8KHM9bi5jaGlsZHJlbihcIi5cIit0aGlzLl9pbmxpbmVDbGFzcykscy5jaGlsZHJlbigpLmFkZENsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIikscy5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXJcIikucHJvcChcImRpc2FibGVkXCIsITApKSx0aGlzLl9kaXNhYmxlZElucHV0cz10Lm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09PWU/bnVsbDp0fSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT1lKX0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO2U8dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoO2UrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1tlXT09PXQpcmV0dXJuITA7cmV0dXJuITF9LF9nZXRJbnN0OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdC5kYXRhKGUsXCJkYXRlcGlja2VyXCIpfWNhdGNoKHQpe3Rocm93XCJNaXNzaW5nIGluc3RhbmNlIGRhdGEgZm9yIHRoaXMgZGF0ZXBpY2tlclwifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG8scixoLGw9dGhpcy5fZ2V0SW5zdChlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCYmXCJzdHJpbmdcIj09dHlwZW9mIGkpcmV0dXJuXCJkZWZhdWx0c1wiPT09aT90LmV4dGVuZCh7fSx0LmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpsP1wiYWxsXCI9PT1pP3QuZXh0ZW5kKHt9LGwuc2V0dGluZ3MpOnRoaXMuX2dldChsLGkpOm51bGw7bj1pfHx7fSxcInN0cmluZ1wiPT10eXBlb2YgaSYmKG49e30sbltpXT1zKSxsJiYodGhpcy5fY3VySW5zdD09PWwmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCksbz10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihlLCEwKSxyPXRoaXMuX2dldE1pbk1heERhdGUobCxcIm1pblwiKSxoPXRoaXMuX2dldE1pbk1heERhdGUobCxcIm1heFwiKSxhKGwuc2V0dGluZ3MsbiksbnVsbCE9PXImJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5taW5EYXRlJiYobC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxyKSksbnVsbCE9PWgmJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5tYXhEYXRlJiYobC5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxoKSksXCJkaXNhYmxlZFwiaW4gbiYmKG4uZGlzYWJsZWQ/dGhpcy5fZGlzYWJsZURhdGVwaWNrZXIoZSk6dGhpcy5fZW5hYmxlRGF0ZXBpY2tlcihlKSksdGhpcy5fYXR0YWNobWVudHModChlKSxsKSx0aGlzLl9hdXRvU2l6ZShsKSx0aGlzLl9zZXREYXRlKGwsbyksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGwpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobCkpfSxfY2hhbmdlRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGUsaSl7dGhpcy5fb3B0aW9uRGF0ZXBpY2tlcih0LGUsaSl9LF9yZWZyZXNoRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXRJbnN0KHQpO2UmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoZSl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldEluc3QodCk7aSYmKHRoaXMuX3NldERhdGUoaSxlKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSl9LF9nZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbih0LGUpe3ZhciBpPXRoaXMuX2dldEluc3QodCk7cmV0dXJuIGkmJiFpLmlubGluZSYmdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChpLGUpLGk/dGhpcy5fZ2V0RGF0ZShpKTpudWxsfSxfZG9LZXlEb3duOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCksYT0hMCxyPW8uZHBEaXYuaXMoXCIudWktZGF0ZXBpY2tlci1ydGxcIik7aWYoby5fa2V5RXZlbnQ9ITAsdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIDk6dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLGE9ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gbj10KFwidGQuXCIrdC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MrXCI6bm90KC5cIit0LmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcytcIilcIixvLmRwRGl2KSxuWzBdJiZ0LmRhdGVwaWNrZXIuX3NlbGVjdERheShlLnRhcmdldCxvLnNlbGVjdGVkTW9udGgsby5zZWxlY3RlZFllYXIsblswXSksaT10LmRhdGVwaWNrZXIuX2dldChvLFwib25TZWxlY3RcIiksaT8ocz10LmRhdGVwaWNrZXIuX2Zvcm1hdERhdGUobyksaS5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbcyxvXSkpOnQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSwhMTtjYXNlIDI3OnQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTticmVhaztjYXNlIDMzOnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/LXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwQmlnTW9udGhzXCIpOi10LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcE1vbnRoc1wiKSxcIk1cIik7YnJlYWs7Y2FzZSAzNDp0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Pyt0LmRhdGVwaWNrZXIuX2dldChvLFwic3RlcEJpZ01vbnRoc1wiKTordC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBNb250aHNcIiksXCJNXCIpO2JyZWFrO2Nhc2UgMzU6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9jbGVhckRhdGUoZS50YXJnZXQpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNjooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2dvdG9Ub2RheShlLnRhcmdldCksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM3OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPzE6LTEsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXksZS5vcmlnaW5hbEV2ZW50LmFsdEtleSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8tdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBCaWdNb250aHNcIik6LXQuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDM4OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCwtNyxcIkRcIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM5OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPy0xOjEsXCJEXCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXksZS5vcmlnaW5hbEV2ZW50LmFsdEtleSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rdC5kYXRlcGlja2VyLl9nZXQobyxcInN0ZXBCaWdNb250aHNcIik6K3QuZGF0ZXBpY2tlci5fZ2V0KG8sXCJzdGVwTW9udGhzXCIpLFwiTVwiKTticmVhaztjYXNlIDQwOihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCw3LFwiRFwiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2RlZmF1bHQ6YT0hMX1lbHNlIDM2PT09ZS5rZXlDb2RlJiZlLmN0cmxLZXk/dC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTphPSExO2EmJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKHQuZGF0ZXBpY2tlci5fZ2V0KG4sXCJjb25zdHJhaW5JbnB1dFwiKSlyZXR1cm4gaT10LmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnModC5kYXRlcGlja2VyLl9nZXQobixcImRhdGVGb3JtYXRcIikpLHM9U3RyaW5nLmZyb21DaGFyQ29kZShudWxsPT1lLmNoYXJDb2RlP2Uua2V5Q29kZTplLmNoYXJDb2RlKSxlLmN0cmxLZXl8fGUubWV0YUtleXx8czxcIiBcInx8IWl8fGkuaW5kZXhPZihzKT4tMX0sX2RvS2V5VXA6ZnVuY3Rpb24oZSl7dmFyIGkscz10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKHMuaW5wdXQudmFsKCkhPT1zLmxhc3RWYWwpdHJ5e2k9dC5kYXRlcGlja2VyLnBhcnNlRGF0ZSh0LmRhdGVwaWNrZXIuX2dldChzLFwiZGF0ZUZvcm1hdFwiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCx0LmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKHQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSx0LmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSx0LmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKHQpe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe2lmKGU9ZS50YXJnZXR8fGUsXCJpbnB1dFwiIT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYoZT10KFwiaW5wdXRcIixlLnBhcmVudE5vZGUpWzBdKSwhdC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihlKSYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT1lKXt2YXIgcyxuLG8scixoLGwsYztzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlKSx0LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fY3VySW5zdCE9PXMmJih0LmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCkscyYmdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcih0LmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKSxuPXQuZGF0ZXBpY2tlci5fZ2V0KHMsXCJiZWZvcmVTaG93XCIpLG89bj9uLmFwcGx5KGUsW2Usc10pOnt9LCExIT09byYmKGEocy5zZXR0aW5ncyxvKSxzLmxhc3RWYWw9bnVsbCx0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dD1lLHQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSx0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiYoZS52YWx1ZT1cIlwiKSx0LmRhdGVwaWNrZXIuX3Bvc3x8KHQuZGF0ZXBpY2tlci5fcG9zPXQuZGF0ZXBpY2tlci5fZmluZFBvcyhlKSx0LmRhdGVwaWNrZXIuX3Bvc1sxXSs9ZS5vZmZzZXRIZWlnaHQpLHI9ITEsdChlKS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3JldHVybiEocnw9XCJmaXhlZFwiPT09dCh0aGlzKS5jc3MoXCJwb3NpdGlvblwiKSl9KSxoPXtsZWZ0OnQuZGF0ZXBpY2tlci5fcG9zWzBdLHRvcDp0LmRhdGVwaWNrZXIuX3Bvc1sxXX0sdC5kYXRlcGlja2VyLl9wb3M9bnVsbCxzLmRwRGl2LmVtcHR5KCkscy5kcERpdi5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIixkaXNwbGF5OlwiYmxvY2tcIix0b3A6XCItMTAwMHB4XCJ9KSxcbnQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihzKSxoPXQuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQocyxoLHIpLHMuZHBEaXYuY3NzKHtwb3NpdGlvbjp0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiZ0LmJsb2NrVUk/XCJzdGF0aWNcIjpyP1wiZml4ZWRcIjpcImFic29sdXRlXCIsZGlzcGxheTpcIm5vbmVcIixsZWZ0OmgubGVmdCtcInB4XCIsdG9wOmgudG9wK1wicHhcIn0pLHMuaW5saW5lfHwobD10LmRhdGVwaWNrZXIuX2dldChzLFwic2hvd0FuaW1cIiksYz10LmRhdGVwaWNrZXIuX2dldChzLFwiZHVyYXRpb25cIikscy5kcERpdi5jc3MoXCJ6LWluZGV4XCIsaSh0KGUpKSsxKSx0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nPSEwLHQuZWZmZWN0cyYmdC5lZmZlY3RzLmVmZmVjdFtsXT9zLmRwRGl2LnNob3cobCx0LmRhdGVwaWNrZXIuX2dldChzLFwic2hvd09wdGlvbnNcIiksYyk6cy5kcERpdltsfHxcInNob3dcIl0obD9jOm51bGwpLHQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChzKSYmcy5pbnB1dC50cmlnZ2VyKFwiZm9jdXNcIiksdC5kYXRlcGlja2VyLl9jdXJJbnN0PXMpKX19LF91cGRhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3RoaXMubWF4Um93cz00LHA9ZSxlLmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTChlKSksdGhpcy5fYXR0YWNoSGFuZGxlcnMoZSk7dmFyIGkscz10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxuPXNbMV0sYT1lLmRwRGl2LmZpbmQoXCIuXCIrdGhpcy5fZGF5T3ZlckNsYXNzK1wiIGFcIik7YS5sZW5ndGg+MCYmby5hcHBseShhLmdldCgwKSksZS5kcERpdi5yZW1vdmVDbGFzcyhcInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00XCIpLndpZHRoKFwiXCIpLG4+MSYmZS5kcERpdi5hZGRDbGFzcyhcInVpLWRhdGVwaWNrZXItbXVsdGktXCIrbikuY3NzKFwid2lkdGhcIiwxNypuK1wiZW1cIiksZS5kcERpdlsoMSE9PXNbMF18fDEhPT1zWzFdP1wiYWRkXCI6XCJyZW1vdmVcIikrXCJDbGFzc1wiXShcInVpLWRhdGVwaWNrZXItbXVsdGlcIiksZS5kcERpdlsodGhpcy5fZ2V0KGUsXCJpc1JUTFwiKT9cImFkZFwiOlwicmVtb3ZlXCIpK1wiQ2xhc3NcIl0oXCJ1aS1kYXRlcGlja2VyLXJ0bFwiKSxlPT09dC5kYXRlcGlja2VyLl9jdXJJbnN0JiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoZSkmJmUuaW5wdXQudHJpZ2dlcihcImZvY3VzXCIpLGUueWVhcnNodG1sJiYoaT1lLnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT09PWUueWVhcnNodG1sJiZlLnllYXJzaHRtbCYmZS5kcERpdi5maW5kKFwic2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcjpmaXJzdFwiKS5yZXBsYWNlV2l0aChlLnllYXJzaHRtbCksaT1lLnllYXJzaHRtbD1udWxsfSwwKSl9LF9zaG91bGRGb2N1c0lucHV0OmZ1bmN0aW9uKHQpe3JldHVybiB0LmlucHV0JiZ0LmlucHV0LmlzKFwiOnZpc2libGVcIikmJiF0LmlucHV0LmlzKFwiOmRpc2FibGVkXCIpJiYhdC5pbnB1dC5pcyhcIjpmb2N1c1wiKX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1lLmRwRGl2Lm91dGVyV2lkdGgoKSxvPWUuZHBEaXYub3V0ZXJIZWlnaHQoKSxhPWUuaW5wdXQ/ZS5pbnB1dC5vdXRlcldpZHRoKCk6MCxyPWUuaW5wdXQ/ZS5pbnB1dC5vdXRlckhlaWdodCgpOjAsaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKHM/MDp0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsocz8wOnQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gaS5sZWZ0LT10aGlzLl9nZXQoZSxcImlzUlRMXCIpP24tYTowLGkubGVmdC09cyYmaS5sZWZ0PT09ZS5pbnB1dC5vZmZzZXQoKS5sZWZ0P3QoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTowLGkudG9wLT1zJiZpLnRvcD09PWUuaW5wdXQub2Zmc2V0KCkudG9wK3I/dChkb2N1bWVudCkuc2Nyb2xsVG9wKCk6MCxpLmxlZnQtPU1hdGgubWluKGkubGVmdCxpLmxlZnQrbj5oJiZoPm4/TWF0aC5hYnMoaS5sZWZ0K24taCk6MCksaS50b3AtPU1hdGgubWluKGkudG9wLGkudG9wK28+bCYmbD5vP01hdGguYWJzKG8rcik6MCksaX0sX2ZpbmRQb3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciBpLHM9dGhpcy5fZ2V0SW5zdChlKSxuPXRoaXMuX2dldChzLFwiaXNSVExcIik7ZSYmKFwiaGlkZGVuXCI9PT1lLnR5cGV8fDEhPT1lLm5vZGVUeXBlfHx0LmV4cHIuZmlsdGVycy5oaWRkZW4oZSkpOyllPWVbbj9cInByZXZpb3VzU2libGluZ1wiOlwibmV4dFNpYmxpbmdcIl07cmV0dXJuIGk9dChlKS5vZmZzZXQoKSxbaS5sZWZ0LGkudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGE9dGhpcy5fY3VySW5zdDshYXx8ZSYmYSE9PXQuZGF0YShlLFwiZGF0ZXBpY2tlclwiKXx8dGhpcy5fZGF0ZXBpY2tlclNob3dpbmcmJihpPXRoaXMuX2dldChhLFwic2hvd0FuaW1cIikscz10aGlzLl9nZXQoYSxcImR1cmF0aW9uXCIpLG49ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX3RpZHlEaWFsb2coYSl9LHQuZWZmZWN0cyYmKHQuZWZmZWN0cy5lZmZlY3RbaV18fHQuZWZmZWN0c1tpXSk/YS5kcERpdi5oaWRlKGksdC5kYXRlcGlja2VyLl9nZXQoYSxcInNob3dPcHRpb25zXCIpLHMsbik6YS5kcERpdltcInNsaWRlRG93blwiPT09aT9cInNsaWRlVXBcIjpcImZhZGVJblwiPT09aT9cImZhZGVPdXRcIjpcImhpZGVcIl0oaT9zOm51bGwsbiksaXx8bigpLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLG89dGhpcy5fZ2V0KGEsXCJvbkNsb3NlXCIpLG8mJm8uYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW2EuaW5wdXQ/YS5pbnB1dC52YWwoKTpcIlwiLGFdKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCx0aGlzLl9pbkRpYWxvZyYmKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7cG9zaXRpb246XCJhYnNvbHV0ZVwiLGxlZnQ6XCIwXCIsdG9wOlwiLTEwMHB4XCJ9KSx0LmJsb2NrVUkmJih0LnVuYmxvY2tVSSgpLHQoXCJib2R5XCIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLHRoaXMuX2luRGlhbG9nPSExKX0sX3RpZHlEaWFsb2c6ZnVuY3Rpb24odCl7dC5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykub2ZmKFwiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXJcIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24oZSl7aWYodC5kYXRlcGlja2VyLl9jdXJJbnN0KXt2YXIgaT10KGUudGFyZ2V0KSxzPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChpWzBdKTsoaVswXS5pZD09PXQuZGF0ZXBpY2tlci5fbWFpbkRpdklkfHwwIT09aS5wYXJlbnRzKFwiI1wiK3QuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGh8fGkuaGFzQ2xhc3ModC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSl8fGkuY2xvc2VzdChcIi5cIit0LmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykubGVuZ3RofHwhdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZ3x8dC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmdC5ibG9ja1VJKSYmKCFpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpfHx0LmRhdGVwaWNrZXIuX2N1ckluc3Q9PT1zKXx8dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfX0sX2FkanVzdERhdGU6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQoZSksbz10aGlzLl9nZXRJbnN0KG5bMF0pO3RoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKG5bMF0pfHwodGhpcy5fYWRqdXN0SW5zdERhdGUobyxpKyhcIk1cIj09PXM/dGhpcy5fZ2V0KG8sXCJzaG93Q3VycmVudEF0UG9zXCIpOjApLHMpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIobykpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKGUpe3ZhciBpLHM9dChlKSxuPXRoaXMuX2dldEluc3Qoc1swXSk7dGhpcy5fZ2V0KG4sXCJnb3RvQ3VycmVudFwiKSYmbi5jdXJyZW50RGF5PyhuLnNlbGVjdGVkRGF5PW4uY3VycmVudERheSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9bi5jdXJyZW50TW9udGgsbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1uLmN1cnJlbnRZZWFyKTooaT1uZXcgRGF0ZSxuLnNlbGVjdGVkRGF5PWkuZ2V0RGF0ZSgpLG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1pLmdldE1vbnRoKCksbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1pLmdldEZ1bGxZZWFyKCkpLHRoaXMuX25vdGlmeUNoYW5nZShuKSx0aGlzLl9hZGp1c3REYXRlKHMpfSxfc2VsZWN0TW9udGhZZWFyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KGUpLG89dGhpcy5fZ2V0SW5zdChuWzBdKTtvW1wic2VsZWN0ZWRcIisoXCJNXCI9PT1zP1wiTW9udGhcIjpcIlllYXJcIildPW9bXCJkcmF3XCIrKFwiTVwiPT09cz9cIk1vbnRoXCI6XCJZZWFyXCIpXT1wYXJzZUludChpLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKG8pLHRoaXMuX2FkanVzdERhdGUobil9LF9zZWxlY3REYXk6ZnVuY3Rpb24oZSxpLHMsbil7dmFyIG8sYT10KGUpO3QobikuaGFzQ2xhc3ModGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MpfHx0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihhWzBdKXx8KG89dGhpcy5fZ2V0SW5zdChhWzBdKSxvLnNlbGVjdGVkRGF5PW8uY3VycmVudERheT10KFwiYVwiLG4pLmh0bWwoKSxvLnNlbGVjdGVkTW9udGg9by5jdXJyZW50TW9udGg9aSxvLnNlbGVjdGVkWWVhcj1vLmN1cnJlbnRZZWFyPXMsdGhpcy5fc2VsZWN0RGF0ZShlLHRoaXMuX2Zvcm1hdERhdGUobyxvLmN1cnJlbnREYXksby5jdXJyZW50TW9udGgsby5jdXJyZW50WWVhcikpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbihlKXt2YXIgaT10KGUpO3RoaXMuX3NlbGVjdERhdGUoaSxcIlwiKX0sX3NlbGVjdERhdGU6ZnVuY3Rpb24oZSxpKXt2YXIgcyxuPXQoZSksbz10aGlzLl9nZXRJbnN0KG5bMF0pO2k9bnVsbCE9aT9pOnRoaXMuX2Zvcm1hdERhdGUobyksby5pbnB1dCYmby5pbnB1dC52YWwoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKG8pLHM9dGhpcy5fZ2V0KG8sXCJvblNlbGVjdFwiKSxzP3MuYXBwbHkoby5pbnB1dD9vLmlucHV0WzBdOm51bGwsW2ksb10pOm8uaW5wdXQmJm8uaW5wdXQudHJpZ2dlcihcImNoYW5nZVwiKSxvLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKG8pOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1vLmlucHV0WzBdLFwib2JqZWN0XCIhPXR5cGVvZiBvLmlucHV0WzBdJiZvLmlucHV0LnRyaWdnZXIoXCJmb2N1c1wiKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG89dGhpcy5fZ2V0KGUsXCJhbHRGaWVsZFwiKTtvJiYoaT10aGlzLl9nZXQoZSxcImFsdEZvcm1hdFwiKXx8dGhpcy5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLHM9dGhpcy5fZ2V0RGF0ZShlKSxuPXRoaXMuZm9ybWF0RGF0ZShpLHMsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKSx0KG8pLnZhbChuKSl9LG5vV2Vla2VuZHM6ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXREYXkoKTtyZXR1cm5bZT4wJiZlPDYsXCJcIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKHQpe3ZhciBlLGk9bmV3IERhdGUodC5nZXRUaW1lKCkpO3JldHVybiBpLnNldERhdGUoaS5nZXREYXRlKCkrNC0oaS5nZXREYXkoKXx8NykpLGU9aS5nZXRUaW1lKCksaS5zZXRNb250aCgwKSxpLnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChlLWkpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24oZSxpLHMpe2lmKG51bGw9PWV8fG51bGw9PWkpdGhyb3dcIkludmFsaWQgYXJndW1lbnRzXCI7aWYoXCJcIj09PShpPVwib2JqZWN0XCI9PXR5cGVvZiBpP2kudG9TdHJpbmcoKTppK1wiXCIpKXJldHVybiBudWxsO3ZhciBuLG8sYSxyLGg9MCxsPShzP3Muc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmYsYz1cInN0cmluZ1wiIT10eXBlb2YgbD9sOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQobCwxMCksdT0ocz9zLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsZD0ocz9zLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxwPShzP3MubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsZj0ocz9zLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsZz0tMSxtPS0xLF89LTEsdj0tMSxiPSExLHk9ZnVuY3Rpb24odCl7dmFyIGk9bisxPGUubGVuZ3RoJiZlLmNoYXJBdChuKzEpPT09dDtyZXR1cm4gaSYmbisrLGl9LHc9ZnVuY3Rpb24odCl7dmFyIGU9eSh0KSxzPVwiQFwiPT09dD8xNDpcIiFcIj09PXQ/MjA6XCJ5XCI9PT10JiZlPzQ6XCJvXCI9PT10PzM6MixuPVwieVwiPT09dD9zOjEsbz1uZXcgUmVnRXhwKFwiXlxcXFxke1wiK24rXCIsXCIrcytcIn1cIiksYT1pLnN1YnN0cmluZyhoKS5tYXRjaChvKTtpZighYSl0aHJvd1wiTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gXCIraDtyZXR1cm4gaCs9YVswXS5sZW5ndGgscGFyc2VJbnQoYVswXSwxMCl9LGs9ZnVuY3Rpb24oZSxzLG4pe3ZhciBvPS0xLGE9dC5tYXAoeShlKT9uOnMsZnVuY3Rpb24odCxlKXtyZXR1cm5bW2UsdF1dfSkuc29ydChmdW5jdGlvbih0LGUpe3JldHVybi0odFsxXS5sZW5ndGgtZVsxXS5sZW5ndGgpfSk7aWYodC5lYWNoKGEsZnVuY3Rpb24odCxlKXt2YXIgcz1lWzFdO2lmKGkuc3Vic3RyKGgscy5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1zLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG89ZVswXSxoKz1zLmxlbmd0aCwhMX0pLC0xIT09bylyZXR1cm4gbysxO3Rocm93XCJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gXCIraH0seD1mdW5jdGlvbigpe2lmKGkuY2hhckF0KGgpIT09ZS5jaGFyQXQobikpdGhyb3dcIlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiBcIitoO2grK307Zm9yKG49MDtuPGUubGVuZ3RoO24rKylpZihiKVwiJ1wiIT09ZS5jaGFyQXQobil8fHkoXCInXCIpP3goKTpiPSExO2Vsc2Ugc3dpdGNoKGUuY2hhckF0KG4pKXtjYXNlXCJkXCI6Xz13KFwiZFwiKTticmVhaztjYXNlXCJEXCI6ayhcIkRcIix1LGQpO2JyZWFrO2Nhc2VcIm9cIjp2PXcoXCJvXCIpO2JyZWFrO2Nhc2VcIm1cIjptPXcoXCJtXCIpO2JyZWFrO2Nhc2VcIk1cIjptPWsoXCJNXCIscCxmKTticmVhaztjYXNlXCJ5XCI6Zz13KFwieVwiKTticmVhaztjYXNlXCJAXCI6cj1uZXcgRGF0ZSh3KFwiQFwiKSksZz1yLmdldEZ1bGxZZWFyKCksbT1yLmdldE1vbnRoKCkrMSxfPXIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2VcIiFcIjpyPW5ldyBEYXRlKCh3KFwiIVwiKS10aGlzLl90aWNrc1RvMTk3MCkvMWU0KSxnPXIuZ2V0RnVsbFllYXIoKSxtPXIuZ2V0TW9udGgoKSsxLF89ci5nZXREYXRlKCk7YnJlYWs7Y2FzZVwiJ1wiOnkoXCInXCIpP3goKTpiPSEwO2JyZWFrO2RlZmF1bHQ6eCgpfWlmKGg8aS5sZW5ndGgmJihhPWkuc3Vic3RyKGgpLCEvXlxccysvLnRlc3QoYSkpKXRocm93XCJFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6IFwiK2E7aWYoLTE9PT1nP2c9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpOmc8MTAwJiYoZys9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArKGc8PWM/MDotMTAwKSksdj4tMSlmb3IobT0xLF89djs7KXtpZihvPXRoaXMuX2dldERheXNJbk1vbnRoKGcsbS0xKSxfPD1vKWJyZWFrO20rKyxfLT1vfWlmKHI9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZyxtLTEsXykpLHIuZ2V0RnVsbFllYXIoKSE9PWd8fHIuZ2V0TW9udGgoKSsxIT09bXx8ci5nZXREYXRlKCkhPT1fKXRocm93XCJJbnZhbGlkIGRhdGVcIjtyZXR1cm4gcn0sQVRPTTpcInl5LW1tLWRkXCIsQ09PS0lFOlwiRCwgZGQgTSB5eVwiLElTT184NjAxOlwieXktbW0tZGRcIixSRkNfODIyOlwiRCwgZCBNIHlcIixSRkNfODUwOlwiREQsIGRkLU0teVwiLFJGQ18xMDM2OlwiRCwgZCBNIHlcIixSRkNfMTEyMzpcIkQsIGQgTSB5eVwiLFJGQ18yODIyOlwiRCwgZCBNIHl5XCIsUlNTOlwiRCwgZCBNIHlcIixUSUNLUzpcIiFcIixUSU1FU1RBTVA6XCJAXCIsVzNDOlwieXktbW0tZGRcIixfdGlja3NUbzE5NzA6MjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSo2MCo2MCoxZTcsZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUsaSl7aWYoIWUpcmV0dXJuXCJcIjt2YXIgcyxuPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxvPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGE9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxyPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKGUpe3ZhciBpPXMrMTx0Lmxlbmd0aCYmdC5jaGFyQXQocysxKT09PWU7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcz1cIlwiK2U7aWYoaCh0KSlmb3IoO3MubGVuZ3RoPGk7KXM9XCIwXCIrcztyZXR1cm4gc30sYz1mdW5jdGlvbih0LGUsaSxzKXtyZXR1cm4gaCh0KT9zW2VdOmlbZV19LHU9XCJcIixkPSExO2lmKGUpZm9yKHM9MDtzPHQubGVuZ3RoO3MrKylpZihkKVwiJ1wiIT09dC5jaGFyQXQocyl8fGgoXCInXCIpP3UrPXQuY2hhckF0KHMpOmQ9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQocykpe2Nhc2VcImRcIjp1Kz1sKFwiZFwiLGUuZ2V0RGF0ZSgpLDIpO2JyZWFrO2Nhc2VcIkRcIjp1Kz1jKFwiRFwiLGUuZ2V0RGF5KCksbixvKTticmVhaztjYXNlXCJvXCI6dSs9bChcIm9cIixNYXRoLnJvdW5kKChuZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksZS5nZXRNb250aCgpLGUuZ2V0RGF0ZSgpKS5nZXRUaW1lKCktbmV3IERhdGUoZS5nZXRGdWxsWWVhcigpLDAsMCkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZVwibVwiOnUrPWwoXCJtXCIsZS5nZXRNb250aCgpKzEsMik7YnJlYWs7Y2FzZVwiTVwiOnUrPWMoXCJNXCIsZS5nZXRNb250aCgpLGEscik7YnJlYWs7Y2FzZVwieVwiOnUrPWgoXCJ5XCIpP2UuZ2V0RnVsbFllYXIoKTooZS5nZXRGdWxsWWVhcigpJTEwMDwxMD9cIjBcIjpcIlwiKStlLmdldEZ1bGxZZWFyKCklMTAwO2JyZWFrO2Nhc2VcIkBcIjp1Kz1lLmdldFRpbWUoKTticmVhaztjYXNlXCIhXCI6dSs9MWU0KmUuZ2V0VGltZSgpK3RoaXMuX3RpY2tzVG8xOTcwO2JyZWFrO2Nhc2VcIidcIjpoKFwiJ1wiKT91Kz1cIidcIjpkPSEwO2JyZWFrO2RlZmF1bHQ6dSs9dC5jaGFyQXQocyl9cmV0dXJuIHV9LF9wb3NzaWJsZUNoYXJzOmZ1bmN0aW9uKHQpe3ZhciBlLGk9XCJcIixzPSExLG49ZnVuY3Rpb24oaSl7dmFyIHM9ZSsxPHQubGVuZ3RoJiZ0LmNoYXJBdChlKzEpPT09aTtyZXR1cm4gcyYmZSsrLHN9O2ZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspaWYocylcIidcIiE9PXQuY2hhckF0KGUpfHxuKFwiJ1wiKT9pKz10LmNoYXJBdChlKTpzPSExO2Vsc2Ugc3dpdGNoKHQuY2hhckF0KGUpKXtjYXNlXCJkXCI6Y2FzZVwibVwiOmNhc2VcInlcIjpjYXNlXCJAXCI6aSs9XCIwMTIzNDU2Nzg5XCI7YnJlYWs7Y2FzZVwiRFwiOmNhc2VcIk1cIjpyZXR1cm4gbnVsbDtjYXNlXCInXCI6bihcIidcIik/aSs9XCInXCI6cz0hMDticmVhaztkZWZhdWx0OmkrPXQuY2hhckF0KGUpfXJldHVybiBpfSxfZ2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMCE9PXQuc2V0dGluZ3NbZV0/dC5zZXR0aW5nc1tlXTp0aGlzLl9kZWZhdWx0c1tlXX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24odCxlKXtpZih0LmlucHV0LnZhbCgpIT09dC5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQodCxcImRhdGVGb3JtYXRcIikscz10Lmxhc3RWYWw9dC5pbnB1dD90LmlucHV0LnZhbCgpOm51bGwsbj10aGlzLl9nZXREZWZhdWx0RGF0ZSh0KSxvPW4sYT10aGlzLl9nZXRGb3JtYXRDb25maWcodCk7dHJ5e289dGhpcy5wYXJzZURhdGUoaSxzLGEpfHxufWNhdGNoKHQpe3M9ZT9cIlwiOnN9dC5zZWxlY3RlZERheT1vLmdldERhdGUoKSx0LmRyYXdNb250aD10LnNlbGVjdGVkTW9udGg9by5nZXRNb250aCgpLHQuZHJhd1llYXI9dC5zZWxlY3RlZFllYXI9by5nZXRGdWxsWWVhcigpLHQuY3VycmVudERheT1zP28uZ2V0RGF0ZSgpOjAsdC5jdXJyZW50TW9udGg9cz9vLmdldE1vbnRoKCk6MCx0LmN1cnJlbnRZZWFyPXM/by5nZXRGdWxsWWVhcigpOjAsdGhpcy5fYWRqdXN0SW5zdERhdGUodCl9fSxfZ2V0RGVmYXVsdERhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3Jlc3RyaWN0TWluTWF4KHQsdGhpcy5fZGV0ZXJtaW5lRGF0ZSh0LHRoaXMuX2dldCh0LFwiZGVmYXVsdERhdGVcIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPW51bGw9PWl8fFwiXCI9PT1pP3M6XCJzdHJpbmdcIj09dHlwZW9mIGk/ZnVuY3Rpb24oaSl7dHJ5e3JldHVybiB0LmRhdGVwaWNrZXIucGFyc2VEYXRlKHQuZGF0ZXBpY2tlci5fZ2V0KGUsXCJkYXRlRm9ybWF0XCIpLGksdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSkpfWNhdGNoKHQpe31mb3IodmFyIHM9KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT90LmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLG49cy5nZXRGdWxsWWVhcigpLG89cy5nZXRNb250aCgpLGE9cy5nZXREYXRlKCkscj0vKFsrXFwtXT9bMC05XSspXFxzKihkfER8d3xXfG18TXx5fFkpPy9nLGg9ci5leGVjKGkpO2g7KXtzd2l0Y2goaFsyXXx8XCJkXCIpe2Nhc2VcImRcIjpjYXNlXCJEXCI6YSs9cGFyc2VJbnQoaFsxXSwxMCk7YnJlYWs7Y2FzZVwid1wiOmNhc2VcIldcIjphKz03KnBhcnNlSW50KGhbMV0sMTApO2JyZWFrO2Nhc2VcIm1cIjpjYXNlXCJNXCI6bys9cGFyc2VJbnQoaFsxXSwxMCksYT1NYXRoLm1pbihhLHQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgobixvKSk7YnJlYWs7Y2FzZVwieVwiOmNhc2VcIllcIjpuKz1wYXJzZUludChoWzFdLDEwKSxhPU1hdGgubWluKGEsdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChuLG8pKX1oPXIuZXhlYyhpKX1yZXR1cm4gbmV3IERhdGUobixvLGEpfShpKTpcIm51bWJlclwiPT10eXBlb2YgaT9pc05hTihpKT9zOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBlLnNldERhdGUoZS5nZXREYXRlKCkrdCksZX0oaSk6bmV3IERhdGUoaS5nZXRUaW1lKCkpO3JldHVybiBuPW4mJlwiSW52YWxpZCBEYXRlXCI9PT1uLnRvU3RyaW5nKCk/czpuLG4mJihuLnNldEhvdXJzKDApLG4uc2V0TWludXRlcygwKSxuLnNldFNlY29uZHMoMCksbi5zZXRNaWxsaXNlY29uZHMoMCkpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG4pfSxfZGF5bGlnaHRTYXZpbmdBZGp1c3Q6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KHQuc2V0SG91cnModC5nZXRIb3VycygpPjEyP3QuZ2V0SG91cnMoKSsyOjApLHQpOm51bGx9LF9zZXREYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz0hZSxuPXQuc2VsZWN0ZWRNb250aCxvPXQuc2VsZWN0ZWRZZWFyLGE9dGhpcy5fcmVzdHJpY3RNaW5NYXgodCx0aGlzLl9kZXRlcm1pbmVEYXRlKHQsZSxuZXcgRGF0ZSkpO3Quc2VsZWN0ZWREYXk9dC5jdXJyZW50RGF5PWEuZ2V0RGF0ZSgpLHQuZHJhd01vbnRoPXQuc2VsZWN0ZWRNb250aD10LmN1cnJlbnRNb250aD1hLmdldE1vbnRoKCksdC5kcmF3WWVhcj10LnNlbGVjdGVkWWVhcj10LmN1cnJlbnRZZWFyPWEuZ2V0RnVsbFllYXIoKSxuPT09dC5zZWxlY3RlZE1vbnRoJiZvPT09dC5zZWxlY3RlZFllYXJ8fGl8fHRoaXMuX25vdGlmeUNoYW5nZSh0KSx0aGlzLl9hZGp1c3RJbnN0RGF0ZSh0KSx0LmlucHV0JiZ0LmlucHV0LnZhbChzP1wiXCI6dGhpcy5fZm9ybWF0RGF0ZSh0KSl9LF9nZXREYXRlOmZ1bmN0aW9uKHQpe3JldHVybiF0LmN1cnJlbnRZZWFyfHx0LmlucHV0JiZcIlwiPT09dC5pbnB1dC52YWwoKT9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHQuY3VycmVudFllYXIsdC5jdXJyZW50TW9udGgsdC5jdXJyZW50RGF5KSl9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9nZXQoZSxcInN0ZXBNb250aHNcIikscz1cIiNcIitlLmlkLnJlcGxhY2UoL1xcXFxcXFxcL2csXCJcXFxcXCIpO2UuZHBEaXYuZmluZChcIltkYXRhLWhhbmRsZXJdXCIpLm1hcChmdW5jdGlvbigpe3ZhciBlPXtwcmV2OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHMsLWksXCJNXCIpfSxuZXh0OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHMsK2ksXCJNXCIpfSxoaWRlOmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5fZ290b1RvZGF5KHMpfSxzZWxlY3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3REYXkocywrdGhpcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1vbnRoXCIpLCt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEteWVhclwiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLFwiTVwiKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihzLHRoaXMsXCJZXCIpLCExfX07dCh0aGlzKS5vbih0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtZXZlbnRcIiksZVt0aGlzLmdldEF0dHJpYnV0ZShcImRhdGEtaGFuZGxlclwiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG4sbyxhLHIsaCxsLGMsdSxkLHAsZixnLG0sXyx2LGIseSx3LGsseCxDLEQsSSxULFAsTSxTLEgseixPLEEsTixXLEUsRixMLFI9bmV3IERhdGUsQj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShSLmdldEZ1bGxZZWFyKCksUi5nZXRNb250aCgpLFIuZ2V0RGF0ZSgpKSksWT10aGlzLl9nZXQodCxcImlzUlRMXCIpLGo9dGhpcy5fZ2V0KHQsXCJzaG93QnV0dG9uUGFuZWxcIikscT10aGlzLl9nZXQodCxcImhpZGVJZk5vUHJldk5leHRcIiksSz10aGlzLl9nZXQodCxcIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXRcIiksVT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyh0KSxWPXRoaXMuX2dldCh0LFwic2hvd0N1cnJlbnRBdFBvc1wiKSwkPXRoaXMuX2dldCh0LFwic3RlcE1vbnRoc1wiKSxYPTEhPT1VWzBdfHwxIT09VVsxXSxHPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHQuY3VycmVudERheT9uZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSk6bmV3IERhdGUoOTk5OSw5LDkpKSxRPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1pblwiKSxKPXRoaXMuX2dldE1pbk1heERhdGUodCxcIm1heFwiKSxaPXQuZHJhd01vbnRoLVYsdHQ9dC5kcmF3WWVhcjtpZihaPDAmJihaKz0xMix0dC0tKSxKKWZvcihlPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKEouZ2V0RnVsbFllYXIoKSxKLmdldE1vbnRoKCktVVswXSpVWzFdKzEsSi5nZXREYXRlKCkpKSxlPVEmJmU8UT9ROmU7dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWiwxKSk+ZTspLS1aPDAmJihaPTExLHR0LS0pO2Zvcih0LmRyYXdNb250aD1aLHQuZHJhd1llYXI9dHQsaT10aGlzLl9nZXQodCxcInByZXZUZXh0XCIpLGk9Sz90aGlzLmZvcm1hdERhdGUoaSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaLSQsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSk6aSxzPXRoaXMuX2NhbkFkanVzdE1vbnRoKHQsLTEsdHQsWik/XCI8YSBjbGFzcz0ndWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ncHJldicgZGF0YS1ldmVudD0nY2xpY2snIHRpdGxlPSdcIitpK1wiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS1cIisoWT9cImVcIjpcIndcIikrXCInPlwiK2krXCI8L3NwYW4+PC9hPlwiOnE/XCJcIjpcIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLXByZXYgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9J1wiK2krXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhZP1wiZVwiOlwid1wiKStcIic+XCIraStcIjwvc3Bhbj48L2E+XCIsbj10aGlzLl9nZXQodCxcIm5leHRUZXh0XCIpLG49Sz90aGlzLmZvcm1hdERhdGUobix0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0dCxaKyQsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSk6bixvPXRoaXMuX2NhbkFkanVzdE1vbnRoKHQsMSx0dCxaKT9cIjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9J1wiK24rXCInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLVwiKyhZP1wid1wiOlwiZVwiKStcIic+XCIrbitcIjwvc3Bhbj48L2E+XCI6cT9cIlwiOlwiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nXCIrbitcIic+PHNwYW4gY2xhc3M9J3VpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtXCIrKFk/XCJ3XCI6XCJlXCIpK1wiJz5cIituK1wiPC9zcGFuPjwvYT5cIixhPXRoaXMuX2dldCh0LFwiY3VycmVudFRleHRcIikscj10aGlzLl9nZXQodCxcImdvdG9DdXJyZW50XCIpJiZ0LmN1cnJlbnREYXk/RzpCLGE9Sz90aGlzLmZvcm1hdERhdGUoYSxyLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSk6YSxoPXQuaW5saW5lP1wiXCI6XCI8YnV0dG9uIHR5cGU9J2J1dHRvbicgY2xhc3M9J3VpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0naGlkZScgZGF0YS1ldmVudD0nY2xpY2snPlwiK3RoaXMuX2dldCh0LFwiY2xvc2VUZXh0XCIpK1wiPC9idXR0b24+XCIsbD1qP1wiPGRpdiBjbGFzcz0ndWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Jz5cIisoWT9oOlwiXCIpKyh0aGlzLl9pc0luUmFuZ2UodCxyKT9cIjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz5cIithK1wiPC9idXR0b24+XCI6XCJcIikrKFk/XCJcIjpoKStcIjwvZGl2PlwiOlwiXCIsYz1wYXJzZUludCh0aGlzLl9nZXQodCxcImZpcnN0RGF5XCIpLDEwKSxjPWlzTmFOKGMpPzA6Yyx1PXRoaXMuX2dldCh0LFwic2hvd1dlZWtcIiksZD10aGlzLl9nZXQodCxcImRheU5hbWVzXCIpLHA9dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc01pblwiKSxmPXRoaXMuX2dldCh0LFwibW9udGhOYW1lc1wiKSxnPXRoaXMuX2dldCh0LFwibW9udGhOYW1lc1Nob3J0XCIpLG09dGhpcy5fZ2V0KHQsXCJiZWZvcmVTaG93RGF5XCIpLF89dGhpcy5fZ2V0KHQsXCJzaG93T3RoZXJNb250aHNcIiksdj10aGlzLl9nZXQodCxcInNlbGVjdE90aGVyTW9udGhzXCIpLGI9dGhpcy5fZ2V0RGVmYXVsdERhdGUodCkseT1cIlwiLGs9MDtrPFVbMF07aysrKXtmb3IoeD1cIlwiLHRoaXMubWF4Um93cz00LEM9MDtDPFVbMV07QysrKXtpZihEPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHR0LFosdC5zZWxlY3RlZERheSkpLEk9XCIgdWktY29ybmVyLWFsbFwiLFQ9XCJcIixYKXtpZihUKz1cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItZ3JvdXBcIixVWzFdPjEpc3dpdGNoKEMpe2Nhc2UgMDpUKz1cIiB1aS1kYXRlcGlja2VyLWdyb3VwLWZpcnN0XCIsST1cIiB1aS1jb3JuZXItXCIrKFk/XCJyaWdodFwiOlwibGVmdFwiKTticmVhaztjYXNlIFVbMV0tMTpUKz1cIiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3RcIixJPVwiIHVpLWNvcm5lci1cIisoWT9cImxlZnRcIjpcInJpZ2h0XCIpO2JyZWFrO2RlZmF1bHQ6VCs9XCIgdWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGVcIixJPVwiXCJ9VCs9XCInPlwifWZvcihUKz1cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4XCIrSStcIic+XCIrKC9hbGx8bGVmdC8udGVzdChJKSYmMD09PWs/WT9vOnM6XCJcIikrKC9hbGx8cmlnaHQvLnRlc3QoSSkmJjA9PT1rP1k/czpvOlwiXCIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKHQsWix0dCxRLEosaz4wfHxDPjAsZixnKStcIjwvZGl2Pjx0YWJsZSBjbGFzcz0ndWktZGF0ZXBpY2tlci1jYWxlbmRhcic+PHRoZWFkPjx0cj5cIixQPXU/XCI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPlwiK3RoaXMuX2dldCh0LFwid2Vla0hlYWRlclwiKStcIjwvdGg+XCI6XCJcIix3PTA7dzw3O3crKylNPSh3K2MpJTcsUCs9XCI8dGggc2NvcGU9J2NvbCdcIisoKHcrYys2KSU3Pj01P1wiIGNsYXNzPSd1aS1kYXRlcGlja2VyLXdlZWstZW5kJ1wiOlwiXCIpK1wiPjxzcGFuIHRpdGxlPSdcIitkW01dK1wiJz5cIitwW01dK1wiPC9zcGFuPjwvdGg+XCI7Zm9yKFQrPVArXCI8L3RyPjwvdGhlYWQ+PHRib2R5PlwiLFM9dGhpcy5fZ2V0RGF5c0luTW9udGgodHQsWiksdHQ9PT10LnNlbGVjdGVkWWVhciYmWj09PXQuc2VsZWN0ZWRNb250aCYmKHQuc2VsZWN0ZWREYXk9TWF0aC5taW4odC5zZWxlY3RlZERheSxTKSksSD0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKHR0LFopLWMrNyklNyx6PU1hdGguY2VpbCgoSCtTKS83KSxPPVgmJnRoaXMubWF4Um93cz56P3RoaXMubWF4Um93czp6LHRoaXMubWF4Um93cz1PLEE9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodHQsWiwxLUgpKSxOPTA7TjxPO04rKyl7Zm9yKFQrPVwiPHRyPlwiLFc9dT9cIjx0ZCBjbGFzcz0ndWktZGF0ZXBpY2tlci13ZWVrLWNvbCc+XCIrdGhpcy5fZ2V0KHQsXCJjYWxjdWxhdGVXZWVrXCIpKEEpK1wiPC90ZD5cIjpcIlwiLHc9MDt3PDc7dysrKUU9bT9tLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFtBXSk6WyEwLFwiXCJdLEY9QS5nZXRNb250aCgpIT09WixMPUYmJiF2fHwhRVswXXx8USYmQTxRfHxKJiZBPkosVys9XCI8dGQgY2xhc3M9J1wiKygodytjKzYpJTc+PTU/XCIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZFwiOlwiXCIpKyhGP1wiIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGhcIjpcIlwiKSsoQS5nZXRUaW1lKCk9PT1ELmdldFRpbWUoKSYmWj09PXQuc2VsZWN0ZWRNb250aCYmdC5fa2V5RXZlbnR8fGIuZ2V0VGltZSgpPT09QS5nZXRUaW1lKCkmJmIuZ2V0VGltZSgpPT09RC5nZXRUaW1lKCk/XCIgXCIrdGhpcy5fZGF5T3ZlckNsYXNzOlwiXCIpKyhMP1wiIFwiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzK1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikrKEYmJiFfP1wiXCI6XCIgXCIrRVsxXSsoQS5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT9cIiBcIit0aGlzLl9jdXJyZW50Q2xhc3M6XCJcIikrKEEuZ2V0VGltZSgpPT09Qi5nZXRUaW1lKCk/XCIgdWktZGF0ZXBpY2tlci10b2RheVwiOlwiXCIpKStcIidcIisoRiYmIV98fCFFWzJdP1wiXCI6XCIgdGl0bGU9J1wiK0VbMl0ucmVwbGFjZSgvJy9nLFwiJiMzOTtcIikrXCInXCIpKyhMP1wiXCI6XCIgZGF0YS1oYW5kbGVyPSdzZWxlY3REYXknIGRhdGEtZXZlbnQ9J2NsaWNrJyBkYXRhLW1vbnRoPSdcIitBLmdldE1vbnRoKCkrXCInIGRhdGEteWVhcj0nXCIrQS5nZXRGdWxsWWVhcigpK1wiJ1wiKStcIj5cIisoRiYmIV8/XCImI3hhMDtcIjpMP1wiPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPlwiK0EuZ2V0RGF0ZSgpK1wiPC9zcGFuPlwiOlwiPGEgY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHRcIisoQS5nZXRUaW1lKCk9PT1CLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1oaWdobGlnaHRcIjpcIlwiKSsoQS5nZXRUaW1lKCk9PT1HLmdldFRpbWUoKT9cIiB1aS1zdGF0ZS1hY3RpdmVcIjpcIlwiKSsoRj9cIiB1aS1wcmlvcml0eS1zZWNvbmRhcnlcIjpcIlwiKStcIicgaHJlZj0nIyc+XCIrQS5nZXREYXRlKCkrXCI8L2E+XCIpK1wiPC90ZD5cIixBLnNldERhdGUoQS5nZXREYXRlKCkrMSksQT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChBKTtUKz1XK1wiPC90cj5cIn1aKyssWj4xMSYmKFo9MCx0dCsrKSxUKz1cIjwvdGJvZHk+PC90YWJsZT5cIisoWD9cIjwvZGl2PlwiKyhVWzBdPjAmJkM9PT1VWzFdLTE/XCI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PC9kaXY+XCI6XCJcIik6XCJcIikseCs9VH15Kz14fXJldHVybiB5Kz1sLHQuX2tleUV2ZW50PSExLHl9LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbih0LGUsaSxzLG4sbyxhLHIpe3ZhciBoLGwsYyx1LGQscCxmLGcsbT10aGlzLl9nZXQodCxcImNoYW5nZU1vbnRoXCIpLF89dGhpcy5fZ2V0KHQsXCJjaGFuZ2VZZWFyXCIpLHY9dGhpcy5fZ2V0KHQsXCJzaG93TW9udGhBZnRlclllYXJcIiksYj1cIjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItdGl0bGUnPlwiLHk9XCJcIjtpZihvfHwhbSl5Kz1cIjxzcGFuIGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJz5cIithW2VdK1wiPC9zcGFuPlwiO2Vsc2V7Zm9yKGg9cyYmcy5nZXRGdWxsWWVhcigpPT09aSxsPW4mJm4uZ2V0RnVsbFllYXIoKT09PWkseSs9XCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLW1vbnRoJyBkYXRhLWhhbmRsZXI9J3NlbGVjdE1vbnRoJyBkYXRhLWV2ZW50PSdjaGFuZ2UnPlwiLGM9MDtjPDEyO2MrKykoIWh8fGM+PXMuZ2V0TW9udGgoKSkmJighbHx8Yzw9bi5nZXRNb250aCgpKSYmKHkrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrYytcIidcIisoYz09PWU/XCIgc2VsZWN0ZWQ9J3NlbGVjdGVkJ1wiOlwiXCIpK1wiPlwiK3JbY10rXCI8L29wdGlvbj5cIik7eSs9XCI8L3NlbGVjdD5cIn1pZih2fHwoYis9eSsoIW8mJm0mJl8/XCJcIjpcIiYjeGEwO1wiKSksIXQueWVhcnNodG1sKWlmKHQueWVhcnNodG1sPVwiXCIsb3x8IV8pYis9XCI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz5cIitpK1wiPC9zcGFuPlwiO2Vsc2V7Zm9yKHU9dGhpcy5fZ2V0KHQsXCJ5ZWFyUmFuZ2VcIikuc3BsaXQoXCI6XCIpLGQ9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHA9ZnVuY3Rpb24odCl7dmFyIGU9dC5tYXRjaCgvY1srXFwtXS4qLyk/aStwYXJzZUludCh0LnN1YnN0cmluZygxKSwxMCk6dC5tYXRjaCgvWytcXC1dLiovKT9kK3BhcnNlSW50KHQsMTApOnBhcnNlSW50KHQsMTApO3JldHVybiBpc05hTihlKT9kOmV9LGY9cCh1WzBdKSxnPU1hdGgubWF4KGYscCh1WzFdfHxcIlwiKSksZj1zP01hdGgubWF4KGYscy5nZXRGdWxsWWVhcigpKTpmLGc9bj9NYXRoLm1pbihnLG4uZ2V0RnVsbFllYXIoKSk6Zyx0LnllYXJzaHRtbCs9XCI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInIGRhdGEtaGFuZGxlcj0nc2VsZWN0WWVhcicgZGF0YS1ldmVudD0nY2hhbmdlJz5cIjtmPD1nO2YrKyl0LnllYXJzaHRtbCs9XCI8b3B0aW9uIHZhbHVlPSdcIitmK1wiJ1wiKyhmPT09aT9cIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCI6XCJcIikrXCI+XCIrZitcIjwvb3B0aW9uPlwiO3QueWVhcnNodG1sKz1cIjwvc2VsZWN0PlwiLGIrPXQueWVhcnNodG1sLHQueWVhcnNodG1sPW51bGx9cmV0dXJuIGIrPXRoaXMuX2dldCh0LFwieWVhclN1ZmZpeFwiKSx2JiYoYis9KCFvJiZtJiZfP1wiXCI6XCImI3hhMDtcIikreSksYis9XCI8L2Rpdj5cIn0sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10LnNlbGVjdGVkWWVhcisoXCJZXCI9PT1pP2U6MCksbj10LnNlbGVjdGVkTW9udGgrKFwiTVwiPT09aT9lOjApLG89TWF0aC5taW4odC5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChzLG4pKSsoXCJEXCI9PT1pP2U6MCksYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHMsbixvKSkpO3Quc2VsZWN0ZWREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPWEuZ2V0RnVsbFllYXIoKSxcIk1cIiE9PWkmJlwiWVwiIT09aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtaW5cIikscz10aGlzLl9nZXRNaW5NYXhEYXRlKHQsXCJtYXhcIiksbj1pJiZlPGk/aTplO3JldHVybiBzJiZuPnM/czpufSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LFwib25DaGFuZ2VNb250aFllYXJcIik7ZSYmZS5hcHBseSh0LmlucHV0P3QuaW5wdXRbMF06bnVsbCxbdC5zZWxlY3RlZFllYXIsdC5zZWxlY3RlZE1vbnRoKzEsdF0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsXCJudW1iZXJPZk1vbnRoc1wiKTtyZXR1cm4gbnVsbD09ZT9bMSwxXTpcIm51bWJlclwiPT10eXBlb2YgZT9bMSxlXTplfSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsZStcIkRhdGVcIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LGUsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IERhdGUodCxlLDEpLmdldERheSgpfSxfY2FuQWRqdXN0TW9udGg6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksbz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShpLHMrKGU8MD9lOm5bMF0qblsxXSksMSkpO3JldHVybiBlPDAmJm8uc2V0RGF0ZSh0aGlzLl9nZXREYXlzSW5Nb250aChvLmdldEZ1bGxZZWFyKCksby5nZXRNb250aCgpKSksdGhpcy5faXNJblJhbmdlKHQsbyl9LF9pc0luUmFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG49dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWluXCIpLG89dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LFwibWF4XCIpLGE9bnVsbCxyPW51bGwsaD10aGlzLl9nZXQodCxcInllYXJSYW5nZVwiKTtyZXR1cm4gaCYmKGk9aC5zcGxpdChcIjpcIikscz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCksYT1wYXJzZUludChpWzBdLDEwKSxyPXBhcnNlSW50KGlbMV0sMTApLGlbMF0ubWF0Y2goL1srXFwtXS4qLykmJihhKz1zKSxpWzFdLm1hdGNoKC9bK1xcLV0uKi8pJiYocis9cykpLCghbnx8ZS5nZXRUaW1lKCk+PW4uZ2V0VGltZSgpKSYmKCFvfHxlLmdldFRpbWUoKTw9by5nZXRUaW1lKCkpJiYoIWF8fGUuZ2V0RnVsbFllYXIoKT49YSkmJighcnx8ZS5nZXRGdWxsWWVhcigpPD1yKX0sX2dldEZvcm1hdENvbmZpZzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9nZXQodCxcInNob3J0WWVhckN1dG9mZlwiKTtyZXR1cm4gZT1cInN0cmluZ1wiIT10eXBlb2YgZT9lOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQoZSwxMCkse3Nob3J0WWVhckN1dG9mZjplLGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KHQsXCJkYXlOYW1lc1Nob3J0XCIpLGRheU5hbWVzOnRoaXMuX2dldCh0LFwiZGF5TmFtZXNcIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldCh0LFwibW9udGhOYW1lc1Nob3J0XCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KHQsXCJtb250aE5hbWVzXCIpfX0sX2Zvcm1hdERhdGU6ZnVuY3Rpb24odCxlLGkscyl7ZXx8KHQuY3VycmVudERheT10LnNlbGVjdGVkRGF5LHQuY3VycmVudE1vbnRoPXQuc2VsZWN0ZWRNb250aCx0LmN1cnJlbnRZZWFyPXQuc2VsZWN0ZWRZZWFyKTt2YXIgbj1lP1wib2JqZWN0XCI9PXR5cGVvZiBlP2U6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxpLGUpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KHQsXCJkYXRlRm9ybWF0XCIpLG4sdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKX19KSx0LmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3QuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KHQoZG9jdW1lbnQpLm9uKFwibW91c2Vkb3duXCIsdC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLHQuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMCksMD09PXQoXCIjXCIrdC5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmdChcImJvZHlcIikuYXBwZW5kKHQuZGF0ZXBpY2tlci5kcERpdik7dmFyIGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVyblwic3RyaW5nXCIhPXR5cGVvZiBlfHxcImlzRGlzYWJsZWRcIiE9PWUmJlwiZ2V0RGF0ZVwiIT09ZSYmXCJ3aWRnZXRcIiE9PWU/XCJvcHRpb25cIj09PWUmJjI9PT1hcmd1bWVudHMubGVuZ3RoJiZcInN0cmluZ1wiPT10eXBlb2YgYXJndW1lbnRzWzFdP3QuZGF0ZXBpY2tlcltcIl9cIitlK1wiRGF0ZXBpY2tlclwiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7XCJzdHJpbmdcIj09dHlwZW9mIGU/dC5kYXRlcGlja2VyW1wiX1wiK2UrXCJEYXRlcGlja2VyXCJdLmFwcGx5KHQuZGF0ZXBpY2tlcixbdGhpc10uY29uY2F0KGkpKTp0LmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyxlKX0pOnQuZGF0ZXBpY2tlcltcIl9cIitlK1wiRGF0ZXBpY2tlclwiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSl9LHQuZGF0ZXBpY2tlcj1uZXcgcyx0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITEsdC5kYXRlcGlja2VyLnV1aWQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksdC5kYXRlcGlja2VyLnZlcnNpb249XCIxLjEyLjFcIjt2YXIgZj0odC5kYXRlcGlja2VyLHQudWkuaWU9ISEvbXNpZSBbXFx3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksITEpO3QoZG9jdW1lbnQpLm9uKFwibW91c2V1cFwiLGZ1bmN0aW9uKCl7Zj0hMX0pO3Qud2lkZ2V0KFwidWkubW91c2VcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NhbmNlbDpcImlucHV0LCB0ZXh0YXJlYSwgYnV0dG9uLCBzZWxlY3QsIG9wdGlvblwiLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5lbGVtZW50Lm9uKFwibW91c2Vkb3duLlwiK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbih0KXtyZXR1cm4gZS5fbW91c2VEb3duKHQpfSkub24oXCJjbGljay5cIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7aWYoITA9PT10LmRhdGEoaS50YXJnZXQsZS53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpKXJldHVybiB0LnJlbW92ZURhdGEoaS50YXJnZXQsZS53aWRnZXROYW1lK1wiLnByZXZlbnRDbGlja0V2ZW50XCIpLGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITF9KSx0aGlzLnN0YXJ0ZWQ9ITF9LF9tb3VzZURlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQub2ZmKFwiLlwiK3RoaXMud2lkZ2V0TmFtZSksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUmJnRoaXMuZG9jdW1lbnQub2ZmKFwibW91c2Vtb3ZlLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkub2ZmKFwibW91c2V1cC5cIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKX0sX21vdXNlRG93bjpmdW5jdGlvbihlKXtpZighZil7dGhpcy5fbW91c2VNb3ZlZD0hMSx0aGlzLl9tb3VzZVN0YXJ0ZWQmJnRoaXMuX21vdXNlVXAoZSksdGhpcy5fbW91c2VEb3duRXZlbnQ9ZTt2YXIgaT10aGlzLHM9MT09PWUud2hpY2gsbj0hKFwic3RyaW5nXCIhPXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsfHwhZS50YXJnZXQubm9kZU5hbWUpJiZ0KGUudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDtyZXR1cm4hKHMmJiFuJiZ0aGlzLl9tb3VzZUNhcHR1cmUoZSkpfHwodGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoZSkmJnRoaXMuX21vdXNlRGVsYXlNZXQoZSkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9ITEhPT10aGlzLl9tb3VzZVN0YXJ0KGUpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyhlLnByZXZlbnREZWZhdWx0KCksITApOighMD09PXQuZGF0YShlLnRhcmdldCx0aGlzLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIikmJnQucmVtb3ZlRGF0YShlLnRhcmdldCx0aGlzLndpZGdldE5hbWUrXCIucHJldmVudENsaWNrRXZlbnRcIiksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIGkuX21vdXNlTW92ZSh0KX0sdGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBpLl9tb3VzZVVwKHQpfSx0aGlzLmRvY3VtZW50Lm9uKFwibW91c2Vtb3ZlLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkub24oXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLGUucHJldmVudERlZmF1bHQoKSxmPSEwLCEwKSl9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX21vdXNlTW92ZWQpe2lmKHQudWkuaWUmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHxkb2N1bWVudC5kb2N1bWVudE1vZGU8OSkmJiFlLmJ1dHRvbilyZXR1cm4gdGhpcy5fbW91c2VVcChlKTtpZighZS53aGljaClpZihlLm9yaWdpbmFsRXZlbnQuYWx0S2V5fHxlLm9yaWdpbmFsRXZlbnQuY3RybEtleXx8ZS5vcmlnaW5hbEV2ZW50Lm1ldGFLZXl8fGUub3JpZ2luYWxFdmVudC5zaGlmdEtleSl0aGlzLmlnbm9yZU1pc3NpbmdXaGljaD0hMDtlbHNlIGlmKCF0aGlzLmlnbm9yZU1pc3NpbmdXaGljaClyZXR1cm4gdGhpcy5fbW91c2VVcChlKX1yZXR1cm4oZS53aGljaHx8ZS5idXR0b24pJiYodGhpcy5fbW91c2VNb3ZlZD0hMCksdGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcoZSksZS5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldChlKSYmdGhpcy5fbW91c2VEZWxheU1ldChlKSYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSE9PXRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsZSksdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyhlKTp0aGlzLl9tb3VzZVVwKGUpKSwhdGhpcy5fbW91c2VTdGFydGVkKX0sX21vdXNlVXA6ZnVuY3Rpb24oZSl7dGhpcy5kb2N1bWVudC5vZmYoXCJtb3VzZW1vdmUuXCIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS5vZmYoXCJtb3VzZXVwLlwiK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSxlLnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmdC5kYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZStcIi5wcmV2ZW50Q2xpY2tFdmVudFwiLCEwKSx0aGlzLl9tb3VzZVN0b3AoZSkpLHRoaXMuX21vdXNlRGVsYXlUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLl9tb3VzZURlbGF5VGltZXIpLGRlbGV0ZSB0aGlzLl9tb3VzZURlbGF5VGltZXIpLHRoaXMuaWdub3JlTWlzc2luZ1doaWNoPSExLGY9ITEsZS5wcmV2ZW50RGVmYXVsdCgpfSxfbW91c2VEaXN0YW5jZU1ldDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVgtdC5wYWdlWCksTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVktdC5wYWdlWSkpPj10aGlzLm9wdGlvbnMuZGlzdGFuY2V9LF9tb3VzZURlbGF5TWV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oKXt9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSx0LnVpLnBsdWdpbj17YWRkOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvPXQudWlbZV0ucHJvdG90eXBlO2ZvcihuIGluIHMpby5wbHVnaW5zW25dPW8ucGx1Z2luc1tuXXx8W10sby5wbHVnaW5zW25dLnB1c2goW2ksc1tuXV0pfSxjYWxsOmZ1bmN0aW9uKHQsZSxpLHMpe3ZhciBuLG89dC5wbHVnaW5zW2VdO2lmKG8mJihzfHx0LmVsZW1lbnRbMF0ucGFyZW50Tm9kZSYmMTEhPT10LmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSkpZm9yKG49MDtuPG8ubGVuZ3RoO24rKyl0Lm9wdGlvbnNbb1tuXVswXV0mJm9bbl1bMV0uYXBwbHkodC5lbGVtZW50LGkpfX0sdC51aS5zYWZlQmx1cj1mdW5jdGlvbihlKXtlJiZcImJvZHlcIiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmdChlKS50cmlnZ2VyKFwiYmx1clwiKX07dC53aWRnZXQoXCJ1aS5kcmFnZ2FibGVcIix0LnVpLm1vdXNlLHt2ZXJzaW9uOlwiMS4xMi4xXCIsd2lkZ2V0RXZlbnRQcmVmaXg6XCJkcmFnXCIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzpcInBhcmVudFwiLGF4aXM6ITEsY29ubmVjdFRvU29ydGFibGU6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOlwiYXV0b1wiLGN1cnNvckF0OiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjpcIm9yaWdpbmFsXCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOlwiZGVmYXVsdFwiLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzbmFwOiExLHNuYXBNb2RlOlwiYm90aFwiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ITEsekluZGV4OiExLGRyYWc6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe1wib3JpZ2luYWxcIj09PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcmFnZ2FibGVcIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9zdXBlcih0LGUpLFwiaGFuZGxlXCI9PT10JiYodGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCkpfSxfZGVzdHJveTpmdW5jdGlvbigpe2lmKCh0aGlzLmhlbHBlcnx8dGhpcy5lbGVtZW50KS5pcyhcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIikpcmV0dXJuIHZvaWQodGhpcy5kZXN0cm95T25DbGVhcj0hMCk7dGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiEodGhpcy5oZWxwZXJ8fGkuZGlzYWJsZWR8fHQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKS5sZW5ndGg+MCkmJih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUoZSksISF0aGlzLmhhbmRsZSYmKHRoaXMuX2JsdXJBY3RpdmVFbGVtZW50KGUpLHRoaXMuX2Jsb2NrRnJhbWVzKCEwPT09aS5pZnJhbWVGaXg/XCJpZnJhbWVcIjppLmlmcmFtZUZpeCksITApKX0sX2Jsb2NrRnJhbWVzOmZ1bmN0aW9uKGUpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZChlKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO3JldHVybiB0KFwiPGRpdj5cIikuY3NzKFwicG9zaXRpb25cIixcImFic29sdXRlXCIpLmFwcGVuZFRvKGUucGFyZW50KCkpLm91dGVyV2lkdGgoZS5vdXRlcldpZHRoKCkpLm91dGVySGVpZ2h0KGUub3V0ZXJIZWlnaHQoKSkub2Zmc2V0KGUub2Zmc2V0KCkpWzBdfSl9LF91bmJsb2NrRnJhbWVzOmZ1bmN0aW9uKCl7dGhpcy5pZnJhbWVCbG9ja3MmJih0aGlzLmlmcmFtZUJsb2Nrcy5yZW1vdmUoKSxkZWxldGUgdGhpcy5pZnJhbWVCbG9ja3MpfSxfYmx1ckFjdGl2ZUVsZW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKTt0KGUudGFyZ2V0KS5jbG9zZXN0KGkpLmxlbmd0aHx8dC51aS5zYWZlQmx1cihpKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoZSksdGhpcy5fYWRkQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHQudWkuZGRtYW5hZ2VyJiYodC51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCghMCksdGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCksdGhpcy5oYXNGaXhlZEFuY2VzdG9yPXRoaXMuaGVscGVyLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm5cImZpeGVkXCI9PT10KHRoaXMpLmNzcyhcInBvc2l0aW9uXCIpfSkubGVuZ3RoPjAsdGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fcmVmcmVzaE9mZnNldHMoZSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlLCExKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksITE9PT10aGlzLl90cmlnZ2VyKFwic3RhcnRcIixlKT8odGhpcy5fY2xlYXIoKSwhMSk6KHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0LnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSx0aGlzLl9tb3VzZURyYWcoZSwhMCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLGUpLCEwKX0sX3JlZnJlc2hPZmZzZXRzOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0PXt0b3A6dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLm1hcmdpbnMubGVmdCxzY3JvbGw6ITEscGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9LHRoaXMub2Zmc2V0LmNsaWNrPXtsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9fSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUsaSl7aWYodGhpcy5oYXNGaXhlZEFuY2VzdG9yJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24oZSwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLCFpKXt2YXIgcz10aGlzLl91aUhhc2goKTtpZighMT09PXRoaXMuX3RyaWdnZXIoXCJkcmFnXCIsZSxzKSlyZXR1cm4gdGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIixlKSksITE7dGhpcy5wb3NpdGlvbj1zLnBvc2l0aW9ufXJldHVybiB0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCtcInB4XCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wK1wicHhcIix0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLGUpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz0hMTtyZXR1cm4gdC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmKHM9dC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLGUpKSx0aGlzLmRyb3BwZWQmJihzPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpLFwiaW52YWxpZFwiPT09dGhpcy5vcHRpb25zLnJldmVydCYmIXN8fFwidmFsaWRcIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fCEwPT09dGhpcy5vcHRpb25zLnJldmVydHx8dC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP3QodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXshMSE9PWkuX3RyaWdnZXIoXCJzdG9wXCIsZSkmJmkuX2NsZWFyKCl9KTohMSE9PXRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsZSkmJnRoaXMuX2NsZWFyKCksITF9LF9tb3VzZVVwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl91bmJsb2NrRnJhbWVzKCksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWdTdG9wKHRoaXMsZSksdGhpcy5oYW5kbGVFbGVtZW50LmlzKGUudGFyZ2V0KSYmdGhpcy5lbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKSx0LnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsZSl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcyhcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIik/dGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIix7dGFyZ2V0OnRoaXMuZWxlbWVudFswXX0pKTp0aGlzLl9jbGVhcigpLHRoaXN9LF9nZXRIYW5kbGU6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMub3B0aW9ucy5oYW5kbGV8fCEhdChlLnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGFuZGxlKSkubGVuZ3RofSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5oYW5kbGVFbGVtZW50PXRoaXMub3B0aW9ucy5oYW5kbGU/dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSk6dGhpcy5lbGVtZW50LHRoaXMuX2FkZENsYXNzKHRoaXMuaGFuZGxlRWxlbWVudCxcInVpLWRyYWdnYWJsZS1oYW5kbGVcIil9LF9yZW1vdmVIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhhbmRsZUVsZW1lbnQsXCJ1aS1kcmFnZ2FibGUtaGFuZGxlXCIpfSxfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxzPXQuaXNGdW5jdGlvbihpLmhlbHBlciksbj1zP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlXSkpOlwiY2xvbmVcIj09PWkuaGVscGVyP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoXCJpZFwiKTp0aGlzLmVsZW1lbnQ7cmV0dXJuIG4ucGFyZW50cyhcImJvZHlcIikubGVuZ3RofHxuLmFwcGVuZFRvKFwicGFyZW50XCI9PT1pLmFwcGVuZFRvP3RoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlOmkuYXBwZW5kVG8pLHMmJm5bMF09PT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuX3NldFBvc2l0aW9uUmVsYXRpdmUoKSxuWzBdPT09dGhpcy5lbGVtZW50WzBdfHwvKGZpeGVkfGFic29sdXRlKS8udGVzdChuLmNzcyhcInBvc2l0aW9uXCIpKXx8bi5jc3MoXCJwb3NpdGlvblwiLFwiYWJzb2x1dGVcIiksbn0sX3NldFBvc2l0aW9uUmVsYXRpdmU6ZnVuY3Rpb24oKXsvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKFwicG9zaXRpb25cIikpfHwodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uPVwicmVsYXRpdmVcIil9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKGUpe1wic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KFwiIFwiKSksdC5pc0FycmF5KGUpJiYoZT17bGVmdDorZVswXSx0b3A6K2VbMV18fDB9KSxcImxlZnRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PWUubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksXCJyaWdodFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSxcInRvcFwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD1lLnRvcCt0aGlzLm1hcmdpbnMudG9wKSxcImJvdHRvbVwiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC1lLmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2lzUm9vdE5vZGU6ZnVuY3Rpb24odCl7cmV0dXJuLyhodG1sfGJvZHkpL2kudGVzdCh0LnRhZ05hbWUpfHx0PT09dGhpcy5kb2N1bWVudFswXX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpLGk9dGhpcy5kb2N1bWVudFswXTtyZXR1cm5cImFic29sdXRlXCI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PWkmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksXG5lLnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpLHRoaXMuX2lzUm9vdE5vZGUodGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZT17dG9wOjAsbGVmdDowfSkse3RvcDplLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksMTApfHwwKSxsZWZ0OmUubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZihcInJlbGF0aXZlXCIhPT10aGlzLmNzc1Bvc2l0aW9uKXJldHVybnt0b3A6MCxsZWZ0OjB9O3ZhciB0PXRoaXMuZWxlbWVudC5wb3NpdGlvbigpLGU9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSk7cmV0dXJue3RvcDp0LnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKFwidG9wXCIpLDEwKXx8MCkrKGU/MDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSksbGVmdDp0LmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcImxlZnRcIiksMTApfHwwKSsoZT8wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSl9fSxfY2FjaGVNYXJnaW5zOmZ1bmN0aW9uKCl7dGhpcy5tYXJnaW5zPXtsZWZ0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoXCJtYXJnaW5MZWZ0XCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcyhcIm1hcmdpblRvcFwiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcyhcIm1hcmdpblJpZ2h0XCIpLDEwKXx8MCxib3R0b206cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcyhcIm1hcmdpbkJvdHRvbVwiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBlLGkscyxuPXRoaXMub3B0aW9ucyxvPXRoaXMuZG9jdW1lbnRbMF07cmV0dXJuIHRoaXMucmVsYXRpdmVDb250YWluZXI9bnVsbCxuLmNvbnRhaW5tZW50P1wid2luZG93XCI9PT1uLmNvbnRhaW5tZW50P3ZvaWQodGhpcy5jb250YWlubWVudD1bdCh3aW5kb3cpLnNjcm9sbExlZnQoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LHQod2luZG93KS5zY3JvbGxUb3AoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCx0KHdpbmRvdykuc2Nyb2xsTGVmdCgpK3Qod2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsdCh3aW5kb3cpLnNjcm9sbFRvcCgpKyh0KHdpbmRvdykuaGVpZ2h0KCl8fG8uYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pOlwiZG9jdW1lbnRcIj09PW4uY29udGFpbm1lbnQ/dm9pZCh0aGlzLmNvbnRhaW5tZW50PVswLDAsdChvKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQobykuaGVpZ2h0KCl8fG8uYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pOm4uY29udGFpbm1lbnQuY29uc3RydWN0b3I9PT1BcnJheT92b2lkKHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCk6KFwicGFyZW50XCI9PT1uLmNvbnRhaW5tZW50JiYobi5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKSxpPXQobi5jb250YWlubWVudCksdm9pZCgocz1pWzBdKSYmKGU9LyhzY3JvbGx8YXV0bykvLnRlc3QoaS5jc3MoXCJvdmVyZmxvd1wiKSksdGhpcy5jb250YWlubWVudD1bKHBhcnNlSW50KGkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ0xlZnRcIiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoXCJib3JkZXJUb3BXaWR0aFwiKSwxMCl8fDApKyhwYXJzZUludChpLmNzcyhcInBhZGRpbmdUb3BcIiksMTApfHwwKSwoZT9NYXRoLm1heChzLnNjcm9sbFdpZHRoLHMub2Zmc2V0V2lkdGgpOnMub2Zmc2V0V2lkdGgpLShwYXJzZUludChpLmNzcyhcImJvcmRlclJpZ2h0V2lkdGhcIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoXCJwYWRkaW5nUmlnaHRcIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LXRoaXMubWFyZ2lucy5yaWdodCwoZT9NYXRoLm1heChzLnNjcm9sbEhlaWdodCxzLm9mZnNldEhlaWdodCk6cy5vZmZzZXRIZWlnaHQpLShwYXJzZUludChpLmNzcyhcImJvcmRlckJvdHRvbVdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KGkuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj1pKSkpOnZvaWQodGhpcy5jb250YWlubWVudD1udWxsKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsZSl7ZXx8KGU9dGhpcy5wb3NpdGlvbik7dmFyIGk9XCJhYnNvbHV0ZVwiPT09dD8xOi0xLHM9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSk7cmV0dXJue3RvcDplLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AqaSt0aGlzLm9mZnNldC5wYXJlbnQudG9wKmktKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC50b3A6cz8wOnRoaXMub2Zmc2V0LnNjcm9sbC50b3ApKmksbGVmdDplLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCppK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KmktKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnM/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCkqaX19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuLG8sYT10aGlzLm9wdGlvbnMscj10aGlzLl9pc1Jvb3ROb2RlKHRoaXMuc2Nyb2xsUGFyZW50WzBdKSxoPXQucGFnZVgsbD10LnBhZ2VZO3JldHVybiByJiZ0aGlzLm9mZnNldC5zY3JvbGx8fCh0aGlzLm9mZnNldC5zY3JvbGw9e3RvcDp0aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSxsZWZ0OnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX0pLGUmJih0aGlzLmNvbnRhaW5tZW50JiYodGhpcy5yZWxhdGl2ZUNvbnRhaW5lcj8ocz10aGlzLnJlbGF0aXZlQ29udGFpbmVyLm9mZnNldCgpLGk9W3RoaXMuY29udGFpbm1lbnRbMF0rcy5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0rcy50b3AsdGhpcy5jb250YWlubWVudFsyXStzLmxlZnQsdGhpcy5jb250YWlubWVudFszXStzLnRvcF0pOmk9dGhpcy5jb250YWlubWVudCx0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8aVswXSYmKGg9aVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDxpWzFdJiYobD1pWzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PmlbMl0mJihoPWlbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+aVszXSYmKGw9aVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApKSxhLmdyaWQmJihuPWEuZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgobC10aGlzLm9yaWdpbmFsUGFnZVkpL2EuZ3JpZFsxXSkqYS5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWSxsPWk/bi10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV18fG4tdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10/bjpuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD49aVsxXT9uLWEuZ3JpZFsxXTpuK2EuZ3JpZFsxXTpuLG89YS5ncmlkWzBdP3RoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChoLXRoaXMub3JpZ2luYWxQYWdlWCkvYS5ncmlkWzBdKSphLmdyaWRbMF06dGhpcy5vcmlnaW5hbFBhZ2VYLGg9aT9vLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+PWlbMF18fG8tdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdP286by10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdP28tYS5ncmlkWzBdOm8rYS5ncmlkWzBdOm8pLFwieVwiPT09YS5heGlzJiYoaD10aGlzLm9yaWdpbmFsUGFnZVgpLFwieFwiPT09YS5heGlzJiYobD10aGlzLm9yaWdpbmFsUGFnZVkpKSx7dG9wOmwtdGhpcy5vZmZzZXQuY2xpY2sudG9wLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wKyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnI/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSxsZWZ0OmgtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwubGVmdDpyPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlQ2xhc3ModGhpcy5oZWxwZXIsXCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIiksdGhpcy5oZWxwZXJbMF09PT10aGlzLmVsZW1lbnRbMF18fHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbHx8dGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCx0aGlzLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5kZXN0cm95T25DbGVhciYmdGhpcy5kZXN0cm95KCl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gcz1zfHx0aGlzLl91aUhhc2goKSx0LnVpLnBsdWdpbi5jYWxsKHRoaXMsZSxbaSxzLHRoaXNdLCEwKSwvXihkcmFnfHN0YXJ0fHN0b3ApLy50ZXN0KGUpJiYodGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLHMub2Zmc2V0PXRoaXMucG9zaXRpb25BYnMpLHQuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsZSxpLHMpfSxwbHVnaW5zOnt9LF91aUhhc2g6ZnVuY3Rpb24oKXtyZXR1cm57aGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OnRoaXMucG9zaXRpb25BYnN9fX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwiY29ubmVjdFRvU29ydGFibGVcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7cy5zb3J0YWJsZXM9W10sdChzLm9wdGlvbnMuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLnNvcnRhYmxlKFwiaW5zdGFuY2VcIik7aSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmKHMuc29ydGFibGVzLnB1c2goaSksaS5yZWZyZXNoUG9zaXRpb25zKCksaS5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSxuKSl9KX0sc3RvcDpmdW5jdGlvbihlLGkscyl7dmFyIG49dC5leHRlbmQoe30saSx7aXRlbTpzLmVsZW1lbnR9KTtzLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0LmlzT3Zlcj8odC5pc092ZXI9MCxzLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsdC5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHQuX3N0b3JlZENTUz17cG9zaXRpb246dC5wbGFjZWhvbGRlci5jc3MoXCJwb3NpdGlvblwiKSx0b3A6dC5wbGFjZWhvbGRlci5jc3MoXCJ0b3BcIiksbGVmdDp0LnBsYWNlaG9sZGVyLmNzcyhcImxlZnRcIil9LHQuX21vdXNlU3RvcChlKSx0Lm9wdGlvbnMuaGVscGVyPXQub3B0aW9ucy5faGVscGVyKToodC5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHQuX3RyaWdnZXIoXCJkZWFjdGl2YXRlXCIsZSxuKSl9KX0sZHJhZzpmdW5jdGlvbihlLGkscyl7dC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dmFyIG49ITEsbz10aGlzO28ucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyxvLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsby5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssby5faW50ZXJzZWN0c1dpdGgoby5jb250YWluZXJDYWNoZSkmJihuPSEwLHQuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uQWJzPXMucG9zaXRpb25BYnMsdGhpcy5oZWxwZXJQcm9wb3J0aW9ucz1zLmhlbHBlclByb3BvcnRpb25zLHRoaXMub2Zmc2V0LmNsaWNrPXMub2Zmc2V0LmNsaWNrLHRoaXMhPT1vJiZ0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lckNhY2hlKSYmdC5jb250YWlucyhvLmVsZW1lbnRbMF0sdGhpcy5lbGVtZW50WzBdKSYmKG49ITEpLG59KSksbj8oby5pc092ZXJ8fChvLmlzT3Zlcj0xLHMuX3BhcmVudD1pLmhlbHBlci5wYXJlbnQoKSxvLmN1cnJlbnRJdGVtPWkuaGVscGVyLmFwcGVuZFRvKG8uZWxlbWVudCkuZGF0YShcInVpLXNvcnRhYmxlLWl0ZW1cIiwhMCksby5vcHRpb25zLl9oZWxwZXI9by5vcHRpb25zLmhlbHBlcixvLm9wdGlvbnMuaGVscGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGkuaGVscGVyWzBdfSxlLnRhcmdldD1vLmN1cnJlbnRJdGVtWzBdLG8uX21vdXNlQ2FwdHVyZShlLCEwKSxvLl9tb3VzZVN0YXJ0KGUsITAsITApLG8ub2Zmc2V0LmNsaWNrLnRvcD1zLm9mZnNldC5jbGljay50b3Asby5vZmZzZXQuY2xpY2subGVmdD1zLm9mZnNldC5jbGljay5sZWZ0LG8ub2Zmc2V0LnBhcmVudC5sZWZ0LT1zLm9mZnNldC5wYXJlbnQubGVmdC1vLm9mZnNldC5wYXJlbnQubGVmdCxvLm9mZnNldC5wYXJlbnQudG9wLT1zLm9mZnNldC5wYXJlbnQudG9wLW8ub2Zmc2V0LnBhcmVudC50b3Ascy5fdHJpZ2dlcihcInRvU29ydGFibGVcIixlKSxzLmRyb3BwZWQ9by5lbGVtZW50LHQuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMucmVmcmVzaFBvc2l0aW9ucygpfSkscy5jdXJyZW50SXRlbT1zLmVsZW1lbnQsby5mcm9tT3V0c2lkZT1zKSxvLmN1cnJlbnRJdGVtJiYoby5fbW91c2VEcmFnKGUpLGkucG9zaXRpb249by5wb3NpdGlvbikpOm8uaXNPdmVyJiYoby5pc092ZXI9MCxvLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsby5vcHRpb25zLl9yZXZlcnQ9by5vcHRpb25zLnJldmVydCxvLm9wdGlvbnMucmV2ZXJ0PSExLG8uX3RyaWdnZXIoXCJvdXRcIixlLG8uX3VpSGFzaChvKSksby5fbW91c2VTdG9wKGUsITApLG8ub3B0aW9ucy5yZXZlcnQ9by5vcHRpb25zLl9yZXZlcnQsby5vcHRpb25zLmhlbHBlcj1vLm9wdGlvbnMuX2hlbHBlcixvLnBsYWNlaG9sZGVyJiZvLnBsYWNlaG9sZGVyLnJlbW92ZSgpLGkuaGVscGVyLmFwcGVuZFRvKHMuX3BhcmVudCkscy5fcmVmcmVzaE9mZnNldHMoZSksaS5wb3NpdGlvbj1zLl9nZW5lcmF0ZVBvc2l0aW9uKGUsITApLHMuX3RyaWdnZXIoXCJmcm9tU29ydGFibGVcIixlKSxzLmRyb3BwZWQ9ITEsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9KSl9KX19KSx0LnVpLnBsdWdpbi5hZGQoXCJkcmFnZ2FibGVcIixcImN1cnNvclwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49dChcImJvZHlcIiksbz1zLm9wdGlvbnM7bi5jc3MoXCJjdXJzb3JcIikmJihvLl9jdXJzb3I9bi5jc3MoXCJjdXJzb3JcIikpLG4uY3NzKFwiY3Vyc29yXCIsby5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fY3Vyc29yJiZ0KFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixuLl9jdXJzb3IpfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwib3BhY2l0eVwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49dChpLmhlbHBlciksbz1zLm9wdGlvbnM7bi5jc3MoXCJvcGFjaXR5XCIpJiYoby5fb3BhY2l0eT1uLmNzcyhcIm9wYWNpdHlcIikpLG4uY3NzKFwib3BhY2l0eVwiLG8ub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXMub3B0aW9ucztuLl9vcGFjaXR5JiZ0KGkuaGVscGVyKS5jc3MoXCJvcGFjaXR5XCIsbi5fb3BhY2l0eSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJzY3JvbGxcIix7c3RhcnQ6ZnVuY3Rpb24odCxlLGkpe2kuc2Nyb2xsUGFyZW50Tm90SGlkZGVufHwoaS5zY3JvbGxQYXJlbnROb3RIaWRkZW49aS5oZWxwZXIuc2Nyb2xsUGFyZW50KCExKSksaS5zY3JvbGxQYXJlbnROb3RIaWRkZW5bMF0hPT1pLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PWkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuWzBdLnRhZ05hbWUmJihpLm92ZXJmbG93T2Zmc2V0PWkuc2Nyb2xsUGFyZW50Tm90SGlkZGVuLm9mZnNldCgpKX0sZHJhZzpmdW5jdGlvbihlLGkscyl7dmFyIG49cy5vcHRpb25zLG89ITEsYT1zLnNjcm9sbFBhcmVudE5vdEhpZGRlblswXSxyPXMuZG9jdW1lbnRbMF07YSE9PXImJlwiSFRNTFwiIT09YS50YWdOYW1lPyhuLmF4aXMmJlwieFwiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC50b3ArYS5vZmZzZXRIZWlnaHQtZS5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P2Euc2Nyb2xsVG9wPW89YS5zY3JvbGxUb3Arbi5zY3JvbGxTcGVlZDplLnBhZ2VZLXMub3ZlcmZsb3dPZmZzZXQudG9wPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihhLnNjcm9sbFRvcD1vPWEuc2Nyb2xsVG9wLW4uc2Nyb2xsU3BlZWQpKSxuLmF4aXMmJlwieVwiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC5sZWZ0K2Eub2Zmc2V0V2lkdGgtZS5wYWdlWDxuLnNjcm9sbFNlbnNpdGl2aXR5P2Euc2Nyb2xsTGVmdD1vPWEuc2Nyb2xsTGVmdCtuLnNjcm9sbFNwZWVkOmUucGFnZVgtcy5vdmVyZmxvd09mZnNldC5sZWZ0PG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihhLnNjcm9sbExlZnQ9bz1hLnNjcm9sbExlZnQtbi5zY3JvbGxTcGVlZCkpKToobi5heGlzJiZcInhcIj09PW4uYXhpc3x8KGUucGFnZVktdChyKS5zY3JvbGxUb3AoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P289dChyKS5zY3JvbGxUb3AodChyKS5zY3JvbGxUb3AoKS1uLnNjcm9sbFNwZWVkKTp0KHdpbmRvdykuaGVpZ2h0KCktKGUucGFnZVktdChyKS5zY3JvbGxUb3AoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKG89dChyKS5zY3JvbGxUb3AodChyKS5zY3JvbGxUb3AoKStuLnNjcm9sbFNwZWVkKSkpLG4uYXhpcyYmXCJ5XCI9PT1uLmF4aXN8fChlLnBhZ2VYLXQocikuc2Nyb2xsTGVmdCgpPG4uc2Nyb2xsU2Vuc2l0aXZpdHk/bz10KHIpLnNjcm9sbExlZnQodChyKS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6dCh3aW5kb3cpLndpZHRoKCktKGUucGFnZVgtdChyKS5zY3JvbGxMZWZ0KCkpPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihvPXQocikuc2Nyb2xsTGVmdCh0KHIpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpKSwhMSE9PW8mJnQudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhzLGUpfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwic25hcFwiLHtzdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG49cy5vcHRpb25zO3Muc25hcEVsZW1lbnRzPVtdLHQobi5zbmFwLmNvbnN0cnVjdG9yIT09U3RyaW5nP24uc25hcC5pdGVtc3x8XCI6ZGF0YSh1aS1kcmFnZ2FibGUpXCI6bi5zbmFwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUub2Zmc2V0KCk7dGhpcyE9PXMuZWxlbWVudFswXSYmcy5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksdG9wOmkudG9wLGxlZnQ6aS5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbihlLGkscyl7dmFyIG4sbyxhLHIsaCxsLGMsdSxkLHAsZj1zLm9wdGlvbnMsZz1mLnNuYXBUb2xlcmFuY2UsbT1pLm9mZnNldC5sZWZ0LF89bStzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHY9aS5vZmZzZXQudG9wLGI9ditzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IoZD1zLnNuYXBFbGVtZW50cy5sZW5ndGgtMTtkPj0wO2QtLSloPXMuc25hcEVsZW1lbnRzW2RdLmxlZnQtcy5tYXJnaW5zLmxlZnQsbD1oK3Muc25hcEVsZW1lbnRzW2RdLndpZHRoLGM9cy5zbmFwRWxlbWVudHNbZF0udG9wLXMubWFyZ2lucy50b3AsdT1jK3Muc25hcEVsZW1lbnRzW2RdLmhlaWdodCxfPGgtZ3x8bT5sK2d8fGI8Yy1nfHx2PnUrZ3x8IXQuY29udGFpbnMocy5zbmFwRWxlbWVudHNbZF0uaXRlbS5vd25lckRvY3VtZW50LHMuc25hcEVsZW1lbnRzW2RdLml0ZW0pPyhzLnNuYXBFbGVtZW50c1tkXS5zbmFwcGluZyYmcy5vcHRpb25zLnNuYXAucmVsZWFzZSYmcy5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHMuZWxlbWVudCxlLHQuZXh0ZW5kKHMuX3VpSGFzaCgpLHtzbmFwSXRlbTpzLnNuYXBFbGVtZW50c1tkXS5pdGVtfSkpLHMuc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nPSExKTooXCJpbm5lclwiIT09Zi5zbmFwTW9kZSYmKG49TWF0aC5hYnMoYy1iKTw9ZyxvPU1hdGguYWJzKHUtdik8PWcsYT1NYXRoLmFicyhoLV8pPD1nLHI9TWF0aC5hYnMobC1tKTw9ZyxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6Yy1zLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3ApLG8mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDp1LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6aC1zLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdCksciYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6bH0pLmxlZnQpKSxwPW58fG98fGF8fHIsXCJvdXRlclwiIT09Zi5zbmFwTW9kZSYmKG49TWF0aC5hYnMoYy12KTw9ZyxvPU1hdGguYWJzKHUtYik8PWcsYT1NYXRoLmFicyhoLW0pPD1nLHI9TWF0aC5hYnMobC1fKTw9ZyxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6YyxsZWZ0OjB9KS50b3ApLG8mJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDp1LXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcCksYSYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbyhcInJlbGF0aXZlXCIse3RvcDowLGxlZnQ6aH0pLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oXCJyZWxhdGl2ZVwiLHt0b3A6MCxsZWZ0Omwtcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQpKSwhcy5zbmFwRWxlbWVudHNbZF0uc25hcHBpbmcmJihufHxvfHxhfHxyfHxwKSYmcy5vcHRpb25zLnNuYXAuc25hcCYmcy5vcHRpb25zLnNuYXAuc25hcC5jYWxsKHMuZWxlbWVudCxlLHQuZXh0ZW5kKHMuX3VpSGFzaCgpLHtzbmFwSXRlbTpzLnNuYXBFbGVtZW50c1tkXS5pdGVtfSkpLHMuc25hcEVsZW1lbnRzW2RdLnNuYXBwaW5nPW58fG98fGF8fHJ8fHApfX0pLHQudWkucGx1Z2luLmFkZChcImRyYWdnYWJsZVwiLFwic3RhY2tcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG89cy5vcHRpb25zLGE9dC5tYWtlQXJyYXkodChvLnN0YWNrKSkuc29ydChmdW5jdGlvbihlLGkpe3JldHVybihwYXJzZUludCh0KGUpLmNzcyhcInpJbmRleFwiKSwxMCl8fDApLShwYXJzZUludCh0KGkpLmNzcyhcInpJbmRleFwiKSwxMCl8fDApfSk7YS5sZW5ndGgmJihuPXBhcnNlSW50KHQoYVswXSkuY3NzKFwiekluZGV4XCIpLDEwKXx8MCx0KGEpLmVhY2goZnVuY3Rpb24oZSl7dCh0aGlzKS5jc3MoXCJ6SW5kZXhcIixuK2UpfSksdGhpcy5jc3MoXCJ6SW5kZXhcIixuK2EubGVuZ3RoKSl9fSksdC51aS5wbHVnaW4uYWRkKFwiZHJhZ2dhYmxlXCIsXCJ6SW5kZXhcIix7c3RhcnQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQoaS5oZWxwZXIpLG89cy5vcHRpb25zO24uY3NzKFwiekluZGV4XCIpJiYoby5fekluZGV4PW4uY3NzKFwiekluZGV4XCIpKSxuLmNzcyhcInpJbmRleFwiLG8uekluZGV4KX0sc3RvcDpmdW5jdGlvbihlLGkscyl7dmFyIG49cy5vcHRpb25zO24uX3pJbmRleCYmdChpLmhlbHBlcikuY3NzKFwiekluZGV4XCIsbi5fekluZGV4KX19KTt0LnVpLmRyYWdnYWJsZTt0LndpZGdldChcInVpLnJlc2l6YWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcInJlc2l6ZVwiLG9wdGlvbnM6e2Fsc29SZXNpemU6ITEsYW5pbWF0ZTohMSxhbmltYXRlRHVyYXRpb246XCJzbG93XCIsYW5pbWF0ZUVhc2luZzpcInN3aW5nXCIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY2xhc3Nlczp7XCJ1aS1yZXNpemFibGUtc2VcIjpcInVpLWljb24gdWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2VcIn0sY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOlwiZSxzLHNlXCIsaGVscGVyOiExLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjEwLG1pbldpZHRoOjEwLHpJbmRleDo5MCxyZXNpemU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX251bTpmdW5jdGlvbih0KXtyZXR1cm4gcGFyc2VGbG9hdCh0KXx8MH0sX2lzTnVtYmVyOmZ1bmN0aW9uKHQpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KHQpKX0sX2hhc1Njcm9sbDpmdW5jdGlvbihlLGkpe2lmKFwiaGlkZGVuXCI9PT10KGUpLmNzcyhcIm92ZXJmbG93XCIpKXJldHVybiExO3ZhciBzPWkmJlwibGVmdFwiPT09aT9cInNjcm9sbExlZnRcIjpcInNjcm9sbFRvcFwiLG49ITE7cmV0dXJuIGVbc10+MHx8KGVbc109MSxuPWVbc10+MCxlW3NdPTAsbil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMub3B0aW9ucyxzPXRoaXM7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1yZXNpemFibGVcIiksdC5leHRlbmQodGhpcyx7X2FzcGVjdFJhdGlvOiEhaS5hc3BlY3RSYXRpbyxhc3BlY3RSYXRpbzppLmFzcGVjdFJhdGlvLG9yaWdpbmFsRWxlbWVudDp0aGlzLmVsZW1lbnQsX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6W10sX2hlbHBlcjppLmhlbHBlcnx8aS5naG9zdHx8aS5hbmltYXRlP2kuaGVscGVyfHxcInVpLXJlc2l6YWJsZS1oZWxwZXJcIjpudWxsfSksdGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKGNhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZykkL2kpJiYodGhpcy5lbGVtZW50LndyYXAodChcIjxkaXYgY2xhc3M9J3VpLXdyYXBwZXInIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyc+PC9kaXY+XCIpLmNzcyh7cG9zaXRpb246dGhpcy5lbGVtZW50LmNzcyhcInBvc2l0aW9uXCIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKFwidG9wXCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcyhcImxlZnRcIil9KSksdGhpcy5lbGVtZW50PXRoaXMuZWxlbWVudC5wYXJlbnQoKS5kYXRhKFwidWktcmVzaXphYmxlXCIsdGhpcy5lbGVtZW50LnJlc2l6YWJsZShcImluc3RhbmNlXCIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsZT17bWFyZ2luVG9wOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcIm1hcmdpblRvcFwiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5SaWdodFwiKSxtYXJnaW5Cb3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luQm90dG9tXCIpLG1hcmdpbkxlZnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwibWFyZ2luTGVmdFwiKX0sdGhpcy5lbGVtZW50LmNzcyhlKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoXCJtYXJnaW5cIiwwKSx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwicmVzaXplXCIpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyhcInJlc2l6ZVwiLFwibm9uZVwiKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpcInN0YXRpY1wiLHpvb206MSxkaXNwbGF5OlwiYmxvY2tcIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoZSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5fc2V0dXBIYW5kbGVzKCksaS5hdXRvSGlkZSYmdCh0aGlzLmVsZW1lbnQpLm9uKFwibW91c2VlbnRlclwiLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8KHMuX3JlbW92ZUNsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpLHMuX2hhbmRsZXMuc2hvdygpKX0pLm9uKFwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKCl7aS5kaXNhYmxlZHx8cy5yZXNpemluZ3x8KHMuX2FkZENsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpLHMuX2hhbmRsZXMuaGlkZSgpKX0pLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciBlLGk9ZnVuY3Rpb24oZSl7dChlKS5yZW1vdmVEYXRhKFwicmVzaXphYmxlXCIpLnJlbW92ZURhdGEoXCJ1aS1yZXNpemFibGVcIikub2ZmKFwiLnJlc2l6YWJsZVwiKS5maW5kKFwiLnVpLXJlc2l6YWJsZS1oYW5kbGVcIikucmVtb3ZlKCl9O3JldHVybiB0aGlzLmVsZW1lbnRJc1dyYXBwZXImJihpKHRoaXMuZWxlbWVudCksZT10aGlzLmVsZW1lbnQsdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjplLmNzcyhcInBvc2l0aW9uXCIpLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksdG9wOmUuY3NzKFwidG9wXCIpLGxlZnQ6ZS5jc3MoXCJsZWZ0XCIpfSkuaW5zZXJ0QWZ0ZXIoZSksZS5yZW1vdmUoKSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKFwicmVzaXplXCIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxpKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7c3dpdGNoKHRoaXMuX3N1cGVyKHQsZSksdCl7Y2FzZVwiaGFuZGxlc1wiOnRoaXMuX3JlbW92ZUhhbmRsZXMoKSx0aGlzLl9zZXR1cEhhbmRsZXMoKX19LF9zZXR1cEhhbmRsZXM6ZnVuY3Rpb24oKXt2YXIgZSxpLHMsbixvLGE9dGhpcy5vcHRpb25zLHI9dGhpcztpZih0aGlzLmhhbmRsZXM9YS5oYW5kbGVzfHwodChcIi51aS1yZXNpemFibGUtaGFuZGxlXCIsdGhpcy5lbGVtZW50KS5sZW5ndGg/e246XCIudWktcmVzaXphYmxlLW5cIixlOlwiLnVpLXJlc2l6YWJsZS1lXCIsczpcIi51aS1yZXNpemFibGUtc1wiLHc6XCIudWktcmVzaXphYmxlLXdcIixzZTpcIi51aS1yZXNpemFibGUtc2VcIixzdzpcIi51aS1yZXNpemFibGUtc3dcIixuZTpcIi51aS1yZXNpemFibGUtbmVcIixudzpcIi51aS1yZXNpemFibGUtbndcIn06XCJlLHMsc2VcIiksdGhpcy5faGFuZGxlcz10KCksdGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yPT09U3RyaW5nKWZvcihcImFsbFwiPT09dGhpcy5oYW5kbGVzJiYodGhpcy5oYW5kbGVzPVwibixlLHMsdyxzZSxzdyxuZSxud1wiKSxzPXRoaXMuaGFuZGxlcy5zcGxpdChcIixcIiksdGhpcy5oYW5kbGVzPXt9LGk9MDtpPHMubGVuZ3RoO2krKyllPXQudHJpbShzW2ldKSxuPVwidWktcmVzaXphYmxlLVwiK2Usbz10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3MobyxcInVpLXJlc2l6YWJsZS1oYW5kbGUgXCIrbiksby5jc3Moe3pJbmRleDphLnpJbmRleH0pLHRoaXMuaGFuZGxlc1tlXT1cIi51aS1yZXNpemFibGUtXCIrZSx0aGlzLmVsZW1lbnQuYXBwZW5kKG8pO3RoaXMuX3JlbmRlckF4aXM9ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG87ZT1lfHx0aGlzLmVsZW1lbnQ7Zm9yKGkgaW4gdGhpcy5oYW5kbGVzKXRoaXMuaGFuZGxlc1tpXS5jb25zdHJ1Y3Rvcj09PVN0cmluZz90aGlzLmhhbmRsZXNbaV09dGhpcy5lbGVtZW50LmNoaWxkcmVuKHRoaXMuaGFuZGxlc1tpXSkuZmlyc3QoKS5zaG93KCk6KHRoaXMuaGFuZGxlc1tpXS5qcXVlcnl8fHRoaXMuaGFuZGxlc1tpXS5ub2RlVHlwZSkmJih0aGlzLmhhbmRsZXNbaV09dCh0aGlzLmhhbmRsZXNbaV0pLHRoaXMuX29uKHRoaXMuaGFuZGxlc1tpXSx7bW91c2Vkb3duOnIuX21vdXNlRG93bn0pKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXImJnRoaXMub3JpZ2luYWxFbGVtZW50WzBdLm5vZGVOYW1lLm1hdGNoKC9eKHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24pJC9pKSYmKHM9dCh0aGlzLmhhbmRsZXNbaV0sdGhpcy5lbGVtZW50KSxvPS9zd3xuZXxud3xzZXxufHMvLnRlc3QoaSk/cy5vdXRlckhlaWdodCgpOnMub3V0ZXJXaWR0aCgpLG49W1wicGFkZGluZ1wiLC9uZXxud3xuLy50ZXN0KGkpP1wiVG9wXCI6L3NlfHN3fHMvLnRlc3QoaSk/XCJCb3R0b21cIjovXmUkLy50ZXN0KGkpP1wiUmlnaHRcIjpcIkxlZnRcIl0uam9pbihcIlwiKSxlLmNzcyhuLG8pLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuX2hhbmRsZXM9dGhpcy5faGFuZGxlcy5hZGQodGhpcy5oYW5kbGVzW2ldKX0sdGhpcy5fcmVuZGVyQXhpcyh0aGlzLmVsZW1lbnQpLHRoaXMuX2hhbmRsZXM9dGhpcy5faGFuZGxlcy5hZGQodGhpcy5lbGVtZW50LmZpbmQoXCIudWktcmVzaXphYmxlLWhhbmRsZVwiKSksdGhpcy5faGFuZGxlcy5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5vbihcIm1vdXNlb3ZlclwiLGZ1bmN0aW9uKCl7ci5yZXNpemluZ3x8KHRoaXMuY2xhc3NOYW1lJiYobz10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKSksci5heGlzPW8mJm9bMV0/b1sxXTpcInNlXCIpfSksYS5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLHRoaXMuX2FkZENsYXNzKFwidWktcmVzaXphYmxlLWF1dG9oaWRlXCIpKX0sX3JlbW92ZUhhbmRsZXM6ZnVuY3Rpb24oKXt0aGlzLl9oYW5kbGVzLnJlbW92ZSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj0hMTtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpKChzPXQodGhpcy5oYW5kbGVzW2ldKVswXSk9PT1lLnRhcmdldHx8dC5jb250YWlucyhzLGUudGFyZ2V0KSkmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbz10aGlzLm9wdGlvbnMsYT10aGlzLmVsZW1lbnQ7cmV0dXJuIHRoaXMucmVzaXppbmc9ITAsdGhpcy5fcmVuZGVyUHJveHkoKSxpPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpKSxzPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoXCJ0b3BcIikpLG8uY29udGFpbm1lbnQmJihpKz10KG8uY29udGFpbm1lbnQpLnNjcm9sbExlZnQoKXx8MCxzKz10KG8uY29udGFpbm1lbnQpLnNjcm9sbFRvcCgpfHwwKSx0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLnBvc2l0aW9uPXtsZWZ0OmksdG9wOnN9LHRoaXMuc2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOnRoaXMuaGVscGVyLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLmhlaWdodCgpfTp7d2lkdGg6YS53aWR0aCgpLGhlaWdodDphLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsU2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOmEub3V0ZXJXaWR0aCgpLGhlaWdodDphLm91dGVySGVpZ2h0KCl9Ont3aWR0aDphLndpZHRoKCksaGVpZ2h0OmEuaGVpZ2h0KCl9LHRoaXMuc2l6ZURpZmY9e3dpZHRoOmEub3V0ZXJXaWR0aCgpLWEud2lkdGgoKSxoZWlnaHQ6YS5vdXRlckhlaWdodCgpLWEuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17bGVmdDppLHRvcDpzfSx0aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbj17bGVmdDplLnBhZ2VYLHRvcDplLnBhZ2VZfSx0aGlzLmFzcGVjdFJhdGlvPVwibnVtYmVyXCI9PXR5cGVvZiBvLmFzcGVjdFJhdGlvP28uYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxLG49dChcIi51aS1yZXNpemFibGUtXCIrdGhpcy5heGlzKS5jc3MoXCJjdXJzb3JcIiksdChcImJvZHlcIikuY3NzKFwiY3Vyc29yXCIsXCJhdXRvXCI9PT1uP3RoaXMuYXhpcytcIi1yZXNpemVcIjpuKSx0aGlzLl9hZGRDbGFzcyhcInVpLXJlc2l6YWJsZS1yZXNpemluZ1wiKSx0aGlzLl9wcm9wYWdhdGUoXCJzdGFydFwiLGUpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj10aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixvPXRoaXMuYXhpcyxhPWUucGFnZVgtbi5sZWZ0fHwwLHI9ZS5wYWdlWS1uLnRvcHx8MCxoPXRoaXMuX2NoYW5nZVtvXTtyZXR1cm4gdGhpcy5fdXBkYXRlUHJldlByb3BlcnRpZXMoKSwhIWgmJihpPWguYXBwbHkodGhpcyxbZSxhLHJdKSx0aGlzLl91cGRhdGVWaXJ0dWFsQm91bmRhcmllcyhlLnNoaWZ0S2V5KSwodGhpcy5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXkpJiYoaT10aGlzLl91cGRhdGVSYXRpbyhpLGUpKSxpPXRoaXMuX3Jlc3BlY3RTaXplKGksZSksdGhpcy5fdXBkYXRlQ2FjaGUoaSksdGhpcy5fcHJvcGFnYXRlKFwicmVzaXplXCIsZSkscz10aGlzLl9hcHBseUNoYW5nZXMoKSwhdGhpcy5faGVscGVyJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSx0LmlzRW1wdHlPYmplY3Qocyl8fCh0aGlzLl91cGRhdGVQcmV2UHJvcGVydGllcygpLHRoaXMuX3RyaWdnZXIoXCJyZXNpemVcIixlLHRoaXMudWkoKSksdGhpcy5fYXBwbHlDaGFuZ2VzKCkpLCExKX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt0aGlzLnJlc2l6aW5nPSExO3ZhciBpLHMsbixvLGEscixoLGw9dGhpcy5vcHRpb25zLGM9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYoaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbj1zJiZ0aGlzLl9oYXNTY3JvbGwoaVswXSxcImxlZnRcIik/MDpjLnNpemVEaWZmLmhlaWdodCxvPXM/MDpjLnNpemVEaWZmLndpZHRoLGE9e3dpZHRoOmMuaGVscGVyLndpZHRoKCktbyxoZWlnaHQ6Yy5oZWxwZXIuaGVpZ2h0KCktbn0scj1wYXJzZUZsb2F0KGMuZWxlbWVudC5jc3MoXCJsZWZ0XCIpKSsoYy5wb3NpdGlvbi5sZWZ0LWMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxoPXBhcnNlRmxvYXQoYy5lbGVtZW50LmNzcyhcInRvcFwiKSkrKGMucG9zaXRpb24udG9wLWMub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsLGwuYW5pbWF0ZXx8dGhpcy5lbGVtZW50LmNzcyh0LmV4dGVuZChhLHt0b3A6aCxsZWZ0OnJ9KSksYy5oZWxwZXIuaGVpZ2h0KGMuc2l6ZS5oZWlnaHQpLGMuaGVscGVyLndpZHRoKGMuc2l6ZS53aWR0aCksdGhpcy5faGVscGVyJiYhbC5hbmltYXRlJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0KFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIixcImF1dG9cIiksdGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1yZXNpemFibGUtcmVzaXppbmdcIiksdGhpcy5fcHJvcGFnYXRlKFwic3RvcFwiLGUpLHRoaXMuX2hlbHBlciYmdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9LF91cGRhdGVQcmV2UHJvcGVydGllczpmdW5jdGlvbigpe3RoaXMucHJldlBvc2l0aW9uPXt0b3A6dGhpcy5wb3NpdGlvbi50b3AsbGVmdDp0aGlzLnBvc2l0aW9uLmxlZnR9LHRoaXMucHJldlNpemU9e3dpZHRoOnRoaXMuc2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5zaXplLmhlaWdodH19LF9hcHBseUNoYW5nZXM6ZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdGhpcy5wb3NpdGlvbi50b3AhPT10aGlzLnByZXZQb3NpdGlvbi50b3AmJih0LnRvcD10aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIpLHRoaXMucG9zaXRpb24ubGVmdCE9PXRoaXMucHJldlBvc2l0aW9uLmxlZnQmJih0LmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0K1wicHhcIiksdGhpcy5zaXplLndpZHRoIT09dGhpcy5wcmV2U2l6ZS53aWR0aCYmKHQud2lkdGg9dGhpcy5zaXplLndpZHRoK1wicHhcIiksdGhpcy5zaXplLmhlaWdodCE9PXRoaXMucHJldlNpemUuaGVpZ2h0JiYodC5oZWlnaHQ9dGhpcy5zaXplLmhlaWdodCtcInB4XCIpLHRoaXMuaGVscGVyLmNzcyh0KSx0fSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMub3B0aW9ucztvPXttaW5XaWR0aDp0aGlzLl9pc051bWJlcihhLm1pbldpZHRoKT9hLm1pbldpZHRoOjAsbWF4V2lkdGg6dGhpcy5faXNOdW1iZXIoYS5tYXhXaWR0aCk/YS5tYXhXaWR0aDoxLzAsbWluSGVpZ2h0OnRoaXMuX2lzTnVtYmVyKGEubWluSGVpZ2h0KT9hLm1pbkhlaWdodDowLG1heEhlaWdodDp0aGlzLl9pc051bWJlcihhLm1heEhlaWdodCk/YS5tYXhIZWlnaHQ6MS8wfSwodGhpcy5fYXNwZWN0UmF0aW98fHQpJiYoZT1vLm1pbkhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLHM9by5taW5XaWR0aC90aGlzLmFzcGVjdFJhdGlvLGk9by5tYXhIZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxuPW8ubWF4V2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxlPm8ubWluV2lkdGgmJihvLm1pbldpZHRoPWUpLHM+by5taW5IZWlnaHQmJihvLm1pbkhlaWdodD1zKSxpPG8ubWF4V2lkdGgmJihvLm1heFdpZHRoPWkpLG48by5tYXhIZWlnaHQmJihvLm1heEhlaWdodD1uKSksdGhpcy5fdkJvdW5kYXJpZXM9b30sX3VwZGF0ZUNhY2hlOmZ1bmN0aW9uKHQpe3RoaXMub2Zmc2V0PXRoaXMuaGVscGVyLm9mZnNldCgpLHRoaXMuX2lzTnVtYmVyKHQubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9dC5sZWZ0KSx0aGlzLl9pc051bWJlcih0LnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD10LnRvcCksdGhpcy5faXNOdW1iZXIodC5oZWlnaHQpJiYodGhpcy5zaXplLmhlaWdodD10LmhlaWdodCksdGhpcy5faXNOdW1iZXIodC53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9dC53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBvc2l0aW9uLGk9dGhpcy5zaXplLHM9dGhpcy5heGlzO3JldHVybiB0aGlzLl9pc051bWJlcih0LmhlaWdodCk/dC53aWR0aD10LmhlaWdodCp0aGlzLmFzcGVjdFJhdGlvOnRoaXMuX2lzTnVtYmVyKHQud2lkdGgpJiYodC5oZWlnaHQ9dC53aWR0aC90aGlzLmFzcGVjdFJhdGlvKSxcInN3XCI9PT1zJiYodC5sZWZ0PWUubGVmdCsoaS53aWR0aC10LndpZHRoKSx0LnRvcD1udWxsKSxcIm53XCI9PT1zJiYodC50b3A9ZS50b3ArKGkuaGVpZ2h0LXQuaGVpZ2h0KSx0LmxlZnQ9ZS5sZWZ0KyhpLndpZHRoLXQud2lkdGgpKSx0fSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdkJvdW5kYXJpZXMsaT10aGlzLmF4aXMscz10aGlzLl9pc051bWJlcih0LndpZHRoKSYmZS5tYXhXaWR0aCYmZS5tYXhXaWR0aDx0LndpZHRoLG49dGhpcy5faXNOdW1iZXIodC5oZWlnaHQpJiZlLm1heEhlaWdodCYmZS5tYXhIZWlnaHQ8dC5oZWlnaHQsbz10aGlzLl9pc051bWJlcih0LndpZHRoKSYmZS5taW5XaWR0aCYmZS5taW5XaWR0aD50LndpZHRoLGE9dGhpcy5faXNOdW1iZXIodC5oZWlnaHQpJiZlLm1pbkhlaWdodCYmZS5taW5IZWlnaHQ+dC5oZWlnaHQscj10aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxoPXRoaXMub3JpZ2luYWxQb3NpdGlvbi50b3ArdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0LGw9L3N3fG53fHcvLnRlc3QoaSksYz0vbnd8bmV8bi8udGVzdChpKTtyZXR1cm4gbyYmKHQud2lkdGg9ZS5taW5XaWR0aCksYSYmKHQuaGVpZ2h0PWUubWluSGVpZ2h0KSxzJiYodC53aWR0aD1lLm1heFdpZHRoKSxuJiYodC5oZWlnaHQ9ZS5tYXhIZWlnaHQpLG8mJmwmJih0LmxlZnQ9ci1lLm1pbldpZHRoKSxzJiZsJiYodC5sZWZ0PXItZS5tYXhXaWR0aCksYSYmYyYmKHQudG9wPWgtZS5taW5IZWlnaHQpLG4mJmMmJih0LnRvcD1oLWUubWF4SGVpZ2h0KSx0LndpZHRofHx0LmhlaWdodHx8dC5sZWZ0fHwhdC50b3A/dC53aWR0aHx8dC5oZWlnaHR8fHQudG9wfHwhdC5sZWZ0fHwodC5sZWZ0PW51bGwpOnQudG9wPW51bGwsdH0sX2dldFBhZGRpbmdQbHVzQm9yZGVyRGltZW5zaW9uczpmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxpPVtdLHM9W3QuY3NzKFwiYm9yZGVyVG9wV2lkdGhcIiksdC5jc3MoXCJib3JkZXJSaWdodFdpZHRoXCIpLHQuY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksdC5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIildLG49W3QuY3NzKFwicGFkZGluZ1RvcFwiKSx0LmNzcyhcInBhZGRpbmdSaWdodFwiKSx0LmNzcyhcInBhZGRpbmdCb3R0b21cIiksdC5jc3MoXCJwYWRkaW5nTGVmdFwiKV07ZTw0O2UrKylpW2VdPXBhcnNlRmxvYXQoc1tlXSl8fDAsaVtlXSs9cGFyc2VGbG9hdChuW2VdKXx8MDtyZXR1cm57aGVpZ2h0OmlbMF0raVsyXSx3aWR0aDppWzFdK2lbM119fSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aClmb3IodmFyIHQsZT0wLGk9dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudDtlPHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoO2UrKyl0PXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHNbZV0sdGhpcy5vdXRlckRpbWVuc2lvbnN8fCh0aGlzLm91dGVyRGltZW5zaW9ucz10aGlzLl9nZXRQYWRkaW5nUGx1c0JvcmRlckRpbWVuc2lvbnModCkpLHQuY3NzKHtoZWlnaHQ6aS5oZWlnaHQoKS10aGlzLm91dGVyRGltZW5zaW9ucy5oZWlnaHR8fDAsd2lkdGg6aS53aWR0aCgpLXRoaXMub3V0ZXJEaW1lbnNpb25zLndpZHRofHwwfSl9LF9yZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWxlbWVudCxpPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnRPZmZzZXQ9ZS5vZmZzZXQoKSx0aGlzLl9oZWxwZXI/KHRoaXMuaGVscGVyPXRoaXMuaGVscGVyfHx0KFwiPGRpdiBzdHlsZT0nb3ZlcmZsb3c6aGlkZGVuOyc+PC9kaXY+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuaGVscGVyLHRoaXMuX2hlbHBlciksdGhpcy5oZWxwZXIuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSxwb3NpdGlvbjpcImFic29sdXRlXCIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdCtcInB4XCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArXCJweFwiLHpJbmRleDorK2kuekluZGV4fSksdGhpcy5oZWxwZXIuYXBwZW5kVG8oXCJib2R5XCIpLmRpc2FibGVTZWxlY3Rpb24oKSk6dGhpcy5oZWxwZXI9dGhpcy5lbGVtZW50fSxfY2hhbmdlOntlOmZ1bmN0aW9uKHQsZSl7cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK2V9fSx3OmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5vcmlnaW5hbFNpemU7cmV0dXJue2xlZnQ6dGhpcy5vcmlnaW5hbFBvc2l0aW9uLmxlZnQrZSx3aWR0aDppLndpZHRoLWV9fSxuOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLm9yaWdpbmFsU2l6ZTtyZXR1cm57dG9wOnRoaXMub3JpZ2luYWxQb3NpdGlvbi50b3AraSxoZWlnaHQ6cy5oZWlnaHQtaX19LHM6ZnVuY3Rpb24odCxlLGkpe3JldHVybntoZWlnaHQ6dGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0K2l9fSxzZTpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtlLGksc10pKX0sc3c6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZSxpLHNdKSl9LG5lOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW2UsaSxzXSkpfSxudzpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFtlLGksc10pKX19LF9wcm9wYWdhdGU6ZnVuY3Rpb24oZSxpKXt0LnVpLnBsdWdpbi5jYWxsKHRoaXMsZSxbaSx0aGlzLnVpKCldKSxcInJlc2l6ZVwiIT09ZSYmdGhpcy5fdHJpZ2dlcihlLGksdGhpcy51aSgpKX0scGx1Z2luczp7fSx1aTpmdW5jdGlvbigpe3JldHVybntvcmlnaW5hbEVsZW1lbnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQsZWxlbWVudDp0aGlzLmVsZW1lbnQsaGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sc2l6ZTp0aGlzLnNpemUsb3JpZ2luYWxTaXplOnRoaXMub3JpZ2luYWxTaXplLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9ufX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImFuaW1hdGVcIix7c3RvcDpmdW5jdGlvbihlKXt2YXIgaT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHM9aS5vcHRpb25zLG49aS5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxvPW4ubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KG5bMF0ubm9kZU5hbWUpLGE9byYmaS5faGFzU2Nyb2xsKG5bMF0sXCJsZWZ0XCIpPzA6aS5zaXplRGlmZi5oZWlnaHQscj1vPzA6aS5zaXplRGlmZi53aWR0aCxoPXt3aWR0aDppLnNpemUud2lkdGgtcixoZWlnaHQ6aS5zaXplLmhlaWdodC1hfSxsPXBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImxlZnRcIikpKyhpLnBvc2l0aW9uLmxlZnQtaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGM9cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwidG9wXCIpKSsoaS5wb3NpdGlvbi50b3AtaS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7aS5lbGVtZW50LmFuaW1hdGUodC5leHRlbmQoaCxjJiZsP3t0b3A6YyxsZWZ0Omx9Ont9KSx7ZHVyYXRpb246cy5hbmltYXRlRHVyYXRpb24sZWFzaW5nOnMuYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIHM9e3dpZHRoOnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcIndpZHRoXCIpKSxoZWlnaHQ6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwiaGVpZ2h0XCIpKSx0b3A6cGFyc2VGbG9hdChpLmVsZW1lbnQuY3NzKFwidG9wXCIpKSxsZWZ0OnBhcnNlRmxvYXQoaS5lbGVtZW50LmNzcyhcImxlZnRcIikpfTtuJiZuLmxlbmd0aCYmdChuWzBdKS5jc3Moe3dpZHRoOnMud2lkdGgsaGVpZ2h0OnMuaGVpZ2h0fSksaS5fdXBkYXRlQ2FjaGUocyksaS5fcHJvcGFnYXRlKFwicmVzaXplXCIsZSl9fSl9fSksdC51aS5wbHVnaW4uYWRkKFwicmVzaXphYmxlXCIsXCJjb250YWlubWVudFwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlLGkscyxuLG8sYSxyLGg9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxsPWgub3B0aW9ucyxjPWguZWxlbWVudCx1PWwuY29udGFpbm1lbnQsZD11IGluc3RhbmNlb2YgdD91LmdldCgwKTovcGFyZW50Ly50ZXN0KHUpP2MucGFyZW50KCkuZ2V0KDApOnU7ZCYmKGguY29udGFpbmVyRWxlbWVudD10KGQpLC9kb2N1bWVudC8udGVzdCh1KXx8dT09PWRvY3VtZW50PyhoLmNvbnRhaW5lck9mZnNldD17bGVmdDowLHRvcDowfSxoLmNvbnRhaW5lclBvc2l0aW9uPXtsZWZ0OjAsdG9wOjB9LGgucGFyZW50RGF0YT17ZWxlbWVudDp0KGRvY3VtZW50KSxsZWZ0OjAsdG9wOjAsd2lkdGg6dChkb2N1bWVudCkud2lkdGgoKSxoZWlnaHQ6dChkb2N1bWVudCkuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHR9KTooZT10KGQpLGk9W10sdChbXCJUb3BcIixcIlJpZ2h0XCIsXCJMZWZ0XCIsXCJCb3R0b21cIl0pLmVhY2goZnVuY3Rpb24odCxzKXtpW3RdPWguX251bShlLmNzcyhcInBhZGRpbmdcIitzKSl9KSxoLmNvbnRhaW5lck9mZnNldD1lLm9mZnNldCgpLGguY29udGFpbmVyUG9zaXRpb249ZS5wb3NpdGlvbigpLGguY29udGFpbmVyU2l6ZT17aGVpZ2h0OmUuaW5uZXJIZWlnaHQoKS1pWzNdLHdpZHRoOmUuaW5uZXJXaWR0aCgpLWlbMV19LHM9aC5jb250YWluZXJPZmZzZXQsbj1oLmNvbnRhaW5lclNpemUuaGVpZ2h0LG89aC5jb250YWluZXJTaXplLndpZHRoLGE9aC5faGFzU2Nyb2xsKGQsXCJsZWZ0XCIpP2Quc2Nyb2xsV2lkdGg6byxyPWguX2hhc1Njcm9sbChkKT9kLnNjcm9sbEhlaWdodDpuLGgucGFyZW50RGF0YT17ZWxlbWVudDpkLGxlZnQ6cy5sZWZ0LHRvcDpzLnRvcCx3aWR0aDphLGhlaWdodDpyfSkpfSxyZXNpemU6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHI9YS5vcHRpb25zLGg9YS5jb250YWluZXJPZmZzZXQsbD1hLnBvc2l0aW9uLGM9YS5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXksdT17dG9wOjAsbGVmdDowfSxkPWEuY29udGFpbmVyRWxlbWVudCxwPSEwO2RbMF0hPT1kb2N1bWVudCYmL3N0YXRpYy8udGVzdChkLmNzcyhcInBvc2l0aW9uXCIpKSYmKHU9aCksbC5sZWZ0PChhLl9oZWxwZXI/aC5sZWZ0OjApJiYoYS5zaXplLndpZHRoPWEuc2l6ZS53aWR0aCsoYS5faGVscGVyP2EucG9zaXRpb24ubGVmdC1oLmxlZnQ6YS5wb3NpdGlvbi5sZWZ0LXUubGVmdCksYyYmKGEuc2l6ZS5oZWlnaHQ9YS5zaXplLndpZHRoL2EuYXNwZWN0UmF0aW8scD0hMSksYS5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2gubGVmdDowKSxsLnRvcDwoYS5faGVscGVyP2gudG9wOjApJiYoYS5zaXplLmhlaWdodD1hLnNpemUuaGVpZ2h0KyhhLl9oZWxwZXI/YS5wb3NpdGlvbi50b3AtaC50b3A6YS5wb3NpdGlvbi50b3ApLGMmJihhLnNpemUud2lkdGg9YS5zaXplLmhlaWdodCphLmFzcGVjdFJhdGlvLHA9ITEpLGEucG9zaXRpb24udG9wPWEuX2hlbHBlcj9oLnRvcDowKSxuPWEuY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PT1hLmVsZW1lbnQucGFyZW50KCkuZ2V0KDApLG89L3JlbGF0aXZlfGFic29sdXRlLy50ZXN0KGEuY29udGFpbmVyRWxlbWVudC5jc3MoXCJwb3NpdGlvblwiKSksbiYmbz8oYS5vZmZzZXQubGVmdD1hLnBhcmVudERhdGEubGVmdCthLnBvc2l0aW9uLmxlZnQsYS5vZmZzZXQudG9wPWEucGFyZW50RGF0YS50b3ArYS5wb3NpdGlvbi50b3ApOihhLm9mZnNldC5sZWZ0PWEuZWxlbWVudC5vZmZzZXQoKS5sZWZ0LGEub2Zmc2V0LnRvcD1hLmVsZW1lbnQub2Zmc2V0KCkudG9wKSxpPU1hdGguYWJzKGEuc2l6ZURpZmYud2lkdGgrKGEuX2hlbHBlcj9hLm9mZnNldC5sZWZ0LXUubGVmdDphLm9mZnNldC5sZWZ0LWgubGVmdCkpLHM9TWF0aC5hYnMoYS5zaXplRGlmZi5oZWlnaHQrKGEuX2hlbHBlcj9hLm9mZnNldC50b3AtdS50b3A6YS5vZmZzZXQudG9wLWgudG9wKSksaSthLnNpemUud2lkdGg+PWEucGFyZW50RGF0YS53aWR0aCYmKGEuc2l6ZS53aWR0aD1hLnBhcmVudERhdGEud2lkdGgtaSxjJiYoYS5zaXplLmhlaWdodD1hLnNpemUud2lkdGgvYS5hc3BlY3RSYXRpbyxwPSExKSkscythLnNpemUuaGVpZ2h0Pj1hLnBhcmVudERhdGEuaGVpZ2h0JiYoYS5zaXplLmhlaWdodD1hLnBhcmVudERhdGEuaGVpZ2h0LXMsYyYmKGEuc2l6ZS53aWR0aD1hLnNpemUuaGVpZ2h0KmEuYXNwZWN0UmF0aW8scD0hMSkpLHB8fChhLnBvc2l0aW9uLmxlZnQ9YS5wcmV2UG9zaXRpb24ubGVmdCxhLnBvc2l0aW9uLnRvcD1hLnByZXZQb3NpdGlvbi50b3AsYS5zaXplLndpZHRoPWEucHJldlNpemUud2lkdGgsYS5zaXplLmhlaWdodD1hLnByZXZTaXplLmhlaWdodCl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLGk9ZS5vcHRpb25zLHM9ZS5jb250YWluZXJPZmZzZXQsbj1lLmNvbnRhaW5lclBvc2l0aW9uLG89ZS5jb250YWluZXJFbGVtZW50LGE9dChlLmhlbHBlcikscj1hLm9mZnNldCgpLGg9YS5vdXRlcldpZHRoKCktZS5zaXplRGlmZi53aWR0aCxsPWEub3V0ZXJIZWlnaHQoKS1lLnNpemVEaWZmLmhlaWdodDtlLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChvLmNzcyhcInBvc2l0aW9uXCIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pLGUuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChvLmNzcyhcInBvc2l0aW9uXCIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pfX0pLHQudWkucGx1Z2luLmFkZChcInJlc2l6YWJsZVwiLFwiYWxzb1Jlc2l6ZVwiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykucmVzaXphYmxlKFwiaW5zdGFuY2VcIiksaT1lLm9wdGlvbnM7dChpLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YShcInVpLXJlc2l6YWJsZS1hbHNvcmVzaXplXCIse3dpZHRoOnBhcnNlRmxvYXQoZS53aWR0aCgpKSxoZWlnaHQ6cGFyc2VGbG9hdChlLmhlaWdodCgpKSxsZWZ0OnBhcnNlRmxvYXQoZS5jc3MoXCJsZWZ0XCIpKSx0b3A6cGFyc2VGbG9hdChlLmNzcyhcInRvcFwiKSl9KX0pfSxyZXNpemU6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLG49cy5vcHRpb25zLG89cy5vcmlnaW5hbFNpemUsYT1zLm9yaWdpbmFsUG9zaXRpb24scj17aGVpZ2h0OnMuc2l6ZS5oZWlnaHQtby5oZWlnaHR8fDAsd2lkdGg6cy5zaXplLndpZHRoLW8ud2lkdGh8fDAsdG9wOnMucG9zaXRpb24udG9wLWEudG9wfHwwLGxlZnQ6cy5wb3NpdGlvbi5sZWZ0LWEubGVmdHx8MH07dChuLmFsc29SZXNpemUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9dCh0aGlzKS5kYXRhKFwidWktcmVzaXphYmxlLWFsc29yZXNpemVcIiksbj17fSxvPWUucGFyZW50cyhpLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1tcIndpZHRoXCIsXCJoZWlnaHRcIl06W1wid2lkdGhcIixcImhlaWdodFwiLFwidG9wXCIsXCJsZWZ0XCJdO3QuZWFjaChvLGZ1bmN0aW9uKHQsZSl7dmFyIGk9KHNbZV18fDApKyhyW2VdfHwwKTtpJiZpPj0wJiYobltlXT1pfHxudWxsKX0pLGUuY3NzKG4pfSl9LHN0b3A6ZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZURhdGEoXCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZVwiKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdob3N0XCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKSxpPWUuc2l6ZTtlLmdob3N0PWUub3JpZ2luYWxFbGVtZW50LmNsb25lKCksZS5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6XCJibG9ja1wiLHBvc2l0aW9uOlwicmVsYXRpdmVcIixoZWlnaHQ6aS5oZWlnaHQsd2lkdGg6aS53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KSxlLl9hZGRDbGFzcyhlLmdob3N0LFwidWktcmVzaXphYmxlLWdob3N0XCIpLCExIT09dC51aUJhY2tDb21wYXQmJlwic3RyaW5nXCI9PXR5cGVvZiBlLm9wdGlvbnMuZ2hvc3QmJmUuZ2hvc3QuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmdob3N0KSxlLmdob3N0LmFwcGVuZFRvKGUuaGVscGVyKX0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKTtlLmdob3N0JiZlLmdob3N0LmNzcyh7cG9zaXRpb246XCJyZWxhdGl2ZVwiLGhlaWdodDplLnNpemUuaGVpZ2h0LHdpZHRoOmUuc2l6ZS53aWR0aH0pfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5yZXNpemFibGUoXCJpbnN0YW5jZVwiKTtlLmdob3N0JiZlLmhlbHBlciYmZS5oZWxwZXIuZ2V0KDApLnJlbW92ZUNoaWxkKGUuZ2hvc3QuZ2V0KDApKX19KSx0LnVpLnBsdWdpbi5hZGQoXCJyZXNpemFibGVcIixcImdyaWRcIix7cmVzaXplOmZ1bmN0aW9uKCl7dmFyIGUsaT10KHRoaXMpLnJlc2l6YWJsZShcImluc3RhbmNlXCIpLHM9aS5vcHRpb25zLG49aS5zaXplLG89aS5vcmlnaW5hbFNpemUsYT1pLm9yaWdpbmFsUG9zaXRpb24scj1pLmF4aXMsaD1cIm51bWJlclwiPT10eXBlb2Ygcy5ncmlkP1tzLmdyaWQscy5ncmlkXTpzLmdyaWQsbD1oWzBdfHwxLGM9aFsxXXx8MSx1PU1hdGgucm91bmQoKG4ud2lkdGgtby53aWR0aCkvbCkqbCxkPU1hdGgucm91bmQoKG4uaGVpZ2h0LW8uaGVpZ2h0KS9jKSpjLHA9by53aWR0aCt1LGY9by5oZWlnaHQrZCxnPXMubWF4V2lkdGgmJnMubWF4V2lkdGg8cCxtPXMubWF4SGVpZ2h0JiZzLm1heEhlaWdodDxmLF89cy5taW5XaWR0aCYmcy5taW5XaWR0aD5wLHY9cy5taW5IZWlnaHQmJnMubWluSGVpZ2h0PmY7cy5ncmlkPWgsXyYmKHArPWwpLHYmJihmKz1jKSxnJiYocC09bCksbSYmKGYtPWMpLC9eKHNlfHN8ZSkkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYpOi9eKG5lKSQvLnRlc3Qocik/KGkuc2l6ZS53aWR0aD1wLGkuc2l6ZS5oZWlnaHQ9ZixpLnBvc2l0aW9uLnRvcD1hLnRvcC1kKTovXihzdykkLy50ZXN0KHIpPyhpLnNpemUud2lkdGg9cCxpLnNpemUuaGVpZ2h0PWYsaS5wb3NpdGlvbi5sZWZ0PWEubGVmdC11KTooKGYtYzw9MHx8cC1sPD0wKSYmKGU9aS5fZ2V0UGFkZGluZ1BsdXNCb3JkZXJEaW1lbnNpb25zKHRoaXMpKSxmLWM+MD8oaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wLWQpOihmPWMtZS5oZWlnaHQsaS5zaXplLmhlaWdodD1mLGkucG9zaXRpb24udG9wPWEudG9wK28uaGVpZ2h0LWYpLHAtbD4wPyhpLnNpemUud2lkdGg9cCxpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0LXUpOihwPWwtZS53aWR0aCxpLnNpemUud2lkdGg9cCxpLnBvc2l0aW9uLmxlZnQ9YS5sZWZ0K28ud2lkdGgtcCkpfX0pO3QudWkucmVzaXphYmxlO3Qud2lkZ2V0KFwidWkuZGlhbG9nXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOnthcHBlbmRUbzpcImJvZHlcIixhdXRvT3BlbjohMCxidXR0b25zOltdLGNsYXNzZXM6e1widWktZGlhbG9nXCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS1kaWFsb2ctdGl0bGViYXJcIjpcInVpLWNvcm5lci1hbGxcIn0sY2xvc2VPbkVzY2FwZTohMCxjbG9zZVRleHQ6XCJDbG9zZVwiLGRyYWdnYWJsZTohMCxoaWRlOm51bGwsaGVpZ2h0OlwiYXV0b1wiLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAsbW9kYWw6ITEscG9zaXRpb246e215OlwiY2VudGVyXCIsYXQ6XCJjZW50ZXJcIixvZjp3aW5kb3csY29sbGlzaW9uOlwiZml0XCIsdXNpbmc6ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKS5jc3MoZSkub2Zmc2V0KCkudG9wO2k8MCYmdCh0aGlzKS5jc3MoXCJ0b3BcIixlLnRvcC1pKX19LHJlc2l6YWJsZTohMCxzaG93Om51bGwsdGl0bGU6bnVsbCx3aWR0aDozMDAsYmVmb3JlQ2xvc2U6bnVsbCxjbG9zZTpudWxsLGRyYWc6bnVsbCxkcmFnU3RhcnQ6bnVsbCxkcmFnU3RvcDpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc2l6ZTpudWxsLHJlc2l6ZVN0YXJ0Om51bGwscmVzaXplU3RvcDpudWxsfSxzaXplUmVsYXRlZE9wdGlvbnM6e2J1dHRvbnM6ITAsaGVpZ2h0OiEwLG1heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITAsd2lkdGg6ITB9LHJlc2l6YWJsZVJlbGF0ZWRPcHRpb25zOnttYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcmlnaW5hbENzcz17ZGlzcGxheTp0aGlzLmVsZW1lbnRbMF0uc3R5bGUuZGlzcGxheSx3aWR0aDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUud2lkdGgsbWluSGVpZ2h0OnRoaXMuZWxlbWVudFswXS5zdHlsZS5taW5IZWlnaHQsbWF4SGVpZ2h0OnRoaXMuZWxlbWVudFswXS5zdHlsZS5tYXhIZWlnaHQsaGVpZ2h0OnRoaXMuZWxlbWVudFswXS5zdHlsZS5oZWlnaHR9LHRoaXMub3JpZ2luYWxQb3NpdGlvbj17cGFyZW50OnRoaXMuZWxlbWVudC5wYXJlbnQoKSxpbmRleDp0aGlzLmVsZW1lbnQucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleCh0aGlzLmVsZW1lbnQpfSx0aGlzLm9yaWdpbmFsVGl0bGU9dGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiKSxudWxsPT10aGlzLm9wdGlvbnMudGl0bGUmJm51bGwhPXRoaXMub3JpZ2luYWxUaXRsZSYmKHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9yaWdpbmFsVGl0bGUpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmKHRoaXMub3B0aW9ucy5kaXNhYmxlZD0hMSksdGhpcy5fY3JlYXRlV3JhcHBlcigpLHRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cihcInRpdGxlXCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMuX2FkZENsYXNzKFwidWktZGlhbG9nLWNvbnRlbnRcIixcInVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCksdGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJnQuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksdGhpcy5vcHRpb25zLnJlc2l6YWJsZSYmdC5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUoKSx0aGlzLl9pc09wZW49ITEsdGhpcy5fdHJhY2tGb2N1cygpfSxcbl9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZS5qcXVlcnl8fGUubm9kZVR5cGUpP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGV8fFwiYm9keVwiKS5lcSgwKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdCxlPXRoaXMub3JpZ2luYWxQb3NpdGlvbjt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuZWxlbWVudC5yZW1vdmVVbmlxdWVJZCgpLmNzcyh0aGlzLm9yaWdpbmFsQ3NzKS5kZXRhY2goKSx0aGlzLnVpRGlhbG9nLnJlbW92ZSgpLHRoaXMub3JpZ2luYWxUaXRsZSYmdGhpcy5lbGVtZW50LmF0dHIoXCJ0aXRsZVwiLHRoaXMub3JpZ2luYWxUaXRsZSksdD1lLnBhcmVudC5jaGlsZHJlbigpLmVxKGUuaW5kZXgpLHQubGVuZ3RoJiZ0WzBdIT09dGhpcy5lbGVtZW50WzBdP3QuYmVmb3JlKHRoaXMuZWxlbWVudCk6ZS5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxkaXNhYmxlOnQubm9vcCxlbmFibGU6dC5ub29wLGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXM7dGhpcy5faXNPcGVuJiYhMSE9PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVDbG9zZVwiLGUpJiYodGhpcy5faXNPcGVuPSExLHRoaXMuX2ZvY3VzZWRFbGVtZW50PW51bGwsdGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLm9wZW5lci5maWx0ZXIoXCI6Zm9jdXNhYmxlXCIpLnRyaWdnZXIoXCJmb2N1c1wiKS5sZW5ndGh8fHQudWkuc2FmZUJsdXIodC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSksdGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5fdHJpZ2dlcihcImNsb3NlXCIsZSl9KSl9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbigpe3RoaXMuX21vdmVUb1RvcCgpfSxfbW92ZVRvVG9wOmZ1bmN0aW9uKGUsaSl7dmFyIHM9ITEsbj10aGlzLnVpRGlhbG9nLnNpYmxpbmdzKFwiLnVpLWZyb250OnZpc2libGVcIikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuK3QodGhpcykuY3NzKFwiei1pbmRleFwiKX0pLmdldCgpLG89TWF0aC5tYXguYXBwbHkobnVsbCxuKTtyZXR1cm4gbz49K3RoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiKSYmKHRoaXMudWlEaWFsb2cuY3NzKFwiei1pbmRleFwiLG8rMSkscz0hMCkscyYmIWkmJnRoaXMuX3RyaWdnZXIoXCJmb2N1c1wiLGUpLHN9LG9wZW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2lmKHRoaXMuX2lzT3BlbilyZXR1cm4gdm9pZCh0aGlzLl9tb3ZlVG9Ub3AoKSYmdGhpcy5fZm9jdXNUYWJiYWJsZSgpKTt0aGlzLl9pc09wZW49ITAsdGhpcy5vcGVuZXI9dCh0LnVpLnNhZmVBY3RpdmVFbGVtZW50KHRoaXMuZG9jdW1lbnRbMF0pKSx0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fbW92ZVRvVG9wKG51bGwsITApLHRoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmNzcyhcInotaW5kZXhcIix0aGlzLnVpRGlhbG9nLmNzcyhcInotaW5kZXhcIiktMSksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7ZS5fZm9jdXNUYWJiYWJsZSgpLGUuX3RyaWdnZXIoXCJmb2N1c1wiKX0pLHRoaXMuX21ha2VGb2N1c1RhcmdldCgpLHRoaXMuX3RyaWdnZXIoXCJvcGVuXCIpfSxfZm9jdXNUYWJiYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2ZvY3VzZWRFbGVtZW50O3R8fCh0PXRoaXMuZWxlbWVudC5maW5kKFwiW2F1dG9mb2N1c11cIikpLHQubGVuZ3RofHwodD10aGlzLmVsZW1lbnQuZmluZChcIjp0YWJiYWJsZVwiKSksdC5sZW5ndGh8fCh0PXRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmZpbmQoXCI6dGFiYmFibGVcIikpLHQubGVuZ3RofHwodD10aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5maWx0ZXIoXCI6dGFiYmFibGVcIikpLHQubGVuZ3RofHwodD10aGlzLnVpRGlhbG9nKSx0LmVxKDApLnRyaWdnZXIoXCJmb2N1c1wiKX0sX2tlZXBGb2N1czpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7dmFyIGU9dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKTt0aGlzLnVpRGlhbG9nWzBdPT09ZXx8dC5jb250YWlucyh0aGlzLnVpRGlhbG9nWzBdLGUpfHx0aGlzLl9mb2N1c1RhYmJhYmxlKCl9ZS5wcmV2ZW50RGVmYXVsdCgpLGkuY2FsbCh0aGlzKSx0aGlzLl9kZWxheShpKX0sX2NyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nPXQoXCI8ZGl2PlwiKS5oaWRlKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZTpcImRpYWxvZ1wifSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZyxcInVpLWRpYWxvZ1wiLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWZyb250XCIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2cse2tleWRvd246ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZlLmtleUNvZGUmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5FU0NBUEUpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx2b2lkIHRoaXMuY2xvc2UoZSk7aWYoZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlRBQiYmIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciBpPXRoaXMudWlEaWFsb2cuZmluZChcIjp0YWJiYWJsZVwiKSxzPWkuZmlsdGVyKFwiOmZpcnN0XCIpLG49aS5maWx0ZXIoXCI6bGFzdFwiKTtlLnRhcmdldCE9PW5bMF0mJmUudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8ZS5zaGlmdEtleT9lLnRhcmdldCE9PXNbMF0mJmUudGFyZ2V0IT09dGhpcy51aURpYWxvZ1swXXx8IWUuc2hpZnRLZXl8fCh0aGlzLl9kZWxheShmdW5jdGlvbigpe24udHJpZ2dlcihcImZvY3VzXCIpfSksZS5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtzLnRyaWdnZXIoXCJmb2N1c1wiKX0pLGUucHJldmVudERlZmF1bHQoKSl9fSxtb3VzZWRvd246ZnVuY3Rpb24odCl7dGhpcy5fbW92ZVRvVG9wKHQpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCl9fSksdGhpcy5lbGVtZW50LmZpbmQoXCJbYXJpYS1kZXNjcmliZWRieV1cIikubGVuZ3RofHx0aGlzLnVpRGlhbG9nLmF0dHIoe1wiYXJpYS1kZXNjcmliZWRieVwiOnRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKX0pfSxfY3JlYXRlVGl0bGViYXI6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLnVpRGlhbG9nVGl0bGViYXI9dChcIjxkaXY+XCIpLHRoaXMuX2FkZENsYXNzKHRoaXMudWlEaWFsb2dUaXRsZWJhcixcInVpLWRpYWxvZy10aXRsZWJhclwiLFwidWktd2lkZ2V0LWhlYWRlciB1aS1oZWxwZXItY2xlYXJmaXhcIiksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLHttb3VzZWRvd246ZnVuY3Rpb24oZSl7dChlLnRhcmdldCkuY2xvc2VzdChcIi51aS1kaWFsb2ctdGl0bGViYXItY2xvc2VcIil8fHRoaXMudWlEaWFsb2cudHJpZ2dlcihcImZvY3VzXCIpfX0pLHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlPXQoXCI8YnV0dG9uIHR5cGU9J2J1dHRvbic+PC9idXR0b24+XCIpLmJ1dHRvbih7bGFiZWw6dChcIjxhPlwiKS50ZXh0KHRoaXMub3B0aW9ucy5jbG9zZVRleHQpLmh0bWwoKSxpY29uOlwidWktaWNvbi1jbG9zZXRoaWNrXCIsc2hvd0xhYmVsOiExfSkuYXBwZW5kVG8odGhpcy51aURpYWxvZ1RpdGxlYmFyKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSxcInVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSx7Y2xpY2s6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UodCl9fSksZT10KFwiPHNwYW4+XCIpLnVuaXF1ZUlkKCkucHJlcGVuZFRvKHRoaXMudWlEaWFsb2dUaXRsZWJhciksdGhpcy5fYWRkQ2xhc3MoZSxcInVpLWRpYWxvZy10aXRsZVwiKSx0aGlzLl90aXRsZShlKSx0aGlzLnVpRGlhbG9nVGl0bGViYXIucHJlcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMudWlEaWFsb2cuYXR0cih7XCJhcmlhLWxhYmVsbGVkYnlcIjplLmF0dHIoXCJpZFwiKX0pfSxfdGl0bGU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnRpdGxlP3QudGV4dCh0aGlzLm9wdGlvbnMudGl0bGUpOnQuaHRtbChcIiYjMTYwO1wiKX0sX2NyZWF0ZUJ1dHRvblBhbmU6ZnVuY3Rpb24oKXt0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZT10KFwiPGRpdj5cIiksdGhpcy5fYWRkQ2xhc3ModGhpcy51aURpYWxvZ0J1dHRvblBhbmUsXCJ1aS1kaWFsb2ctYnV0dG9ucGFuZVwiLFwidWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4XCIpLHRoaXMudWlCdXR0b25TZXQ9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dCdXR0b25QYW5lKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpQnV0dG9uU2V0LFwidWktZGlhbG9nLWJ1dHRvbnNldFwiKSx0aGlzLl9jcmVhdGVCdXR0b25zKCl9LF9jcmVhdGVCdXR0b25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXRoaXMub3B0aW9ucy5idXR0b25zO2lmKHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLnJlbW92ZSgpLHRoaXMudWlCdXR0b25TZXQuZW1wdHkoKSx0LmlzRW1wdHlPYmplY3QoaSl8fHQuaXNBcnJheShpKSYmIWkubGVuZ3RoKXJldHVybiB2b2lkIHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMudWlEaWFsb2csXCJ1aS1kaWFsb2ctYnV0dG9uc1wiKTt0LmVhY2goaSxmdW5jdGlvbihpLHMpe3ZhciBuLG87cz10LmlzRnVuY3Rpb24ocyk/e2NsaWNrOnMsdGV4dDppfTpzLHM9dC5leHRlbmQoe3R5cGU6XCJidXR0b25cIn0scyksbj1zLmNsaWNrLG89e2ljb246cy5pY29uLGljb25Qb3NpdGlvbjpzLmljb25Qb3NpdGlvbixzaG93TGFiZWw6cy5zaG93TGFiZWwsaWNvbnM6cy5pY29ucyx0ZXh0OnMudGV4dH0sZGVsZXRlIHMuY2xpY2ssZGVsZXRlIHMuaWNvbixkZWxldGUgcy5pY29uUG9zaXRpb24sZGVsZXRlIHMuc2hvd0xhYmVsLGRlbGV0ZSBzLmljb25zLFwiYm9vbGVhblwiPT10eXBlb2Ygcy50ZXh0JiZkZWxldGUgcy50ZXh0LHQoXCI8YnV0dG9uPjwvYnV0dG9uPlwiLHMpLmJ1dHRvbihvKS5hcHBlbmRUbyhlLnVpQnV0dG9uU2V0KS5vbihcImNsaWNrXCIsZnVuY3Rpb24oKXtuLmFwcGx5KGUuZWxlbWVudFswXSxhcmd1bWVudHMpfSl9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpRGlhbG9nLFwidWktZGlhbG9nLWJ1dHRvbnNcIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZyl9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm57cG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5vZmZzZXR9fXZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDpcIi51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZVwiLGhhbmRsZTpcIi51aS1kaWFsb2ctdGl0bGViYXJcIixjb250YWlubWVudDpcImRvY3VtZW50XCIsc3RhcnQ6ZnVuY3Rpb24ocyxuKXtpLl9hZGRDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLWRyYWdnaW5nXCIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcImRyYWdTdGFydFwiLHMsZShuKSl9LGRyYWc6ZnVuY3Rpb24odCxzKXtpLl90cmlnZ2VyKFwiZHJhZ1wiLHQsZShzKSl9LHN0b3A6ZnVuY3Rpb24obixvKXt2YXIgYT1vLm9mZnNldC5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLHI9by5vZmZzZXQudG9wLWkuZG9jdW1lbnQuc2Nyb2xsVG9wKCk7cy5wb3NpdGlvbj17bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdFwiKyhhPj0wP1wiK1wiOlwiXCIpK2ErXCIgdG9wXCIrKHI+PTA/XCIrXCI6XCJcIikrcixvZjppLndpbmRvd30saS5fcmVtb3ZlQ2xhc3ModCh0aGlzKSxcInVpLWRpYWxvZy1kcmFnZ2luZ1wiKSxpLl91bmJsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcImRyYWdTdG9wXCIsbixlKG8pKX19KX0sX21ha2VSZXNpemFibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3JldHVybntvcmlnaW5hbFBvc2l0aW9uOnQub3JpZ2luYWxQb3NpdGlvbixvcmlnaW5hbFNpemU6dC5vcmlnaW5hbFNpemUscG9zaXRpb246dC5wb3NpdGlvbixzaXplOnQuc2l6ZX19dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9ucyxuPXMucmVzaXphYmxlLG89dGhpcy51aURpYWxvZy5jc3MoXCJwb3NpdGlvblwiKSxhPVwic3RyaW5nXCI9PXR5cGVvZiBuP246XCJuLGUscyx3LHNlLHN3LG5lLG53XCI7dGhpcy51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDpcIi51aS1kaWFsb2ctY29udGVudFwiLGNvbnRhaW5tZW50OlwiZG9jdW1lbnRcIixhbHNvUmVzaXplOnRoaXMuZWxlbWVudCxtYXhXaWR0aDpzLm1heFdpZHRoLG1heEhlaWdodDpzLm1heEhlaWdodCxtaW5XaWR0aDpzLm1pbldpZHRoLG1pbkhlaWdodDp0aGlzLl9taW5IZWlnaHQoKSxoYW5kbGVzOmEsc3RhcnQ6ZnVuY3Rpb24ocyxuKXtpLl9hZGRDbGFzcyh0KHRoaXMpLFwidWktZGlhbG9nLXJlc2l6aW5nXCIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcihcInJlc2l6ZVN0YXJ0XCIscyxlKG4pKX0scmVzaXplOmZ1bmN0aW9uKHQscyl7aS5fdHJpZ2dlcihcInJlc2l6ZVwiLHQsZShzKSl9LHN0b3A6ZnVuY3Rpb24obixvKXt2YXIgYT1pLnVpRGlhbG9nLm9mZnNldCgpLHI9YS5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLGg9YS50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLmhlaWdodD1pLnVpRGlhbG9nLmhlaWdodCgpLHMud2lkdGg9aS51aURpYWxvZy53aWR0aCgpLHMucG9zaXRpb249e215OlwibGVmdCB0b3BcIixhdDpcImxlZnRcIisocj49MD9cIitcIjpcIlwiKStyK1wiIHRvcFwiKyhoPj0wP1wiK1wiOlwiXCIpK2gsb2Y6aS53aW5kb3d9LGkuX3JlbW92ZUNsYXNzKHQodGhpcyksXCJ1aS1kaWFsb2ctcmVzaXppbmdcIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoXCJyZXNpemVTdG9wXCIsbixlKG8pKX19KS5jc3MoXCJwb3NpdGlvblwiLG8pfSxfdHJhY2tGb2N1czpmdW5jdGlvbigpe3RoaXMuX29uKHRoaXMud2lkZ2V0KCkse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dGhpcy5fbWFrZUZvY3VzVGFyZ2V0KCksdGhpcy5fZm9jdXNlZEVsZW1lbnQ9dChlLnRhcmdldCl9fSl9LF9tYWtlRm9jdXNUYXJnZXQ6ZnVuY3Rpb24oKXt0aGlzLl91bnRyYWNrSW5zdGFuY2UoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpLnVuc2hpZnQodGhpcyl9LF91bnRyYWNrSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFja2luZ0luc3RhbmNlcygpLGk9dC5pbkFycmF5KHRoaXMsZSk7LTEhPT1pJiZlLnNwbGljZShpLDEpfSxfdHJhY2tpbmdJbnN0YW5jZXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctaW5zdGFuY2VzXCIpO3JldHVybiB0fHwodD1bXSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctaW5zdGFuY2VzXCIsdCkpLHR9LF9taW5IZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuXCJhdXRvXCI9PT10LmhlaWdodD90Lm1pbkhlaWdodDpNYXRoLm1pbih0Lm1pbkhlaWdodCx0LmhlaWdodCl9LF9wb3NpdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMudWlEaWFsb2cuaXMoXCI6dmlzaWJsZVwiKTt0fHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksdHx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz0hMSxuPXt9O3QuZWFjaChlLGZ1bmN0aW9uKHQsZSl7aS5fc2V0T3B0aW9uKHQsZSksdCBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKHM9ITApLHQgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKG5bdF09ZSl9KSxzJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoXCI6ZGF0YSh1aS1yZXNpemFibGUpXCIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZShcIm9wdGlvblwiLG4pfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvPXRoaXMudWlEaWFsb2c7XCJkaXNhYmxlZFwiIT09ZSYmKHRoaXMuX3N1cGVyKGUsaSksXCJhcHBlbmRUb1wiPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSxcImJ1dHRvbnNcIj09PWUmJnRoaXMuX2NyZWF0ZUJ1dHRvbnMoKSxcImNsb3NlVGV4dFwiPT09ZSYmdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuYnV0dG9uKHtsYWJlbDp0KFwiPGE+XCIpLnRleHQoXCJcIit0aGlzLm9wdGlvbnMuY2xvc2VUZXh0KS5odG1sKCl9KSxcImRyYWdnYWJsZVwiPT09ZSYmKHM9by5pcyhcIjpkYXRhKHVpLWRyYWdnYWJsZSlcIikscyYmIWkmJm8uZHJhZ2dhYmxlKFwiZGVzdHJveVwiKSwhcyYmaSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSxcInBvc2l0aW9uXCI9PT1lJiZ0aGlzLl9wb3NpdGlvbigpLFwicmVzaXphYmxlXCI9PT1lJiYobj1vLmlzKFwiOmRhdGEodWktcmVzaXphYmxlKVwiKSxuJiYhaSYmby5yZXNpemFibGUoXCJkZXN0cm95XCIpLG4mJlwic3RyaW5nXCI9PXR5cGVvZiBpJiZvLnJlc2l6YWJsZShcIm9wdGlvblwiLFwiaGFuZGxlc1wiLGkpLG58fCExPT09aXx8dGhpcy5fbWFrZVJlc2l6YWJsZSgpKSxcInRpdGxlXCI9PT1lJiZ0aGlzLl90aXRsZSh0aGlzLnVpRGlhbG9nVGl0bGViYXIuZmluZChcIi51aS1kaWFsb2ctdGl0bGVcIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgdCxlLGkscz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOlwiYXV0b1wiLG1pbkhlaWdodDowLG1heEhlaWdodDpcIm5vbmVcIixoZWlnaHQ6MH0pLHMubWluV2lkdGg+cy53aWR0aCYmKHMud2lkdGg9cy5taW5XaWR0aCksdD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OlwiYXV0b1wiLHdpZHRoOnMud2lkdGh9KS5vdXRlckhlaWdodCgpLGU9TWF0aC5tYXgoMCxzLm1pbkhlaWdodC10KSxpPVwibnVtYmVyXCI9PXR5cGVvZiBzLm1heEhlaWdodD9NYXRoLm1heCgwLHMubWF4SGVpZ2h0LXQpOlwibm9uZVwiLFwiYXV0b1wiPT09cy5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OmUsbWF4SGVpZ2h0OmksaGVpZ2h0OlwiYXV0b1wifSk6dGhpcy5lbGVtZW50LmhlaWdodChNYXRoLm1heCgwLHMuaGVpZ2h0LXQpKSx0aGlzLnVpRGlhbG9nLmlzKFwiOmRhdGEodWktcmVzaXphYmxlKVwiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoXCJvcHRpb25cIixcIm1pbkhlaWdodFwiLHRoaXMuX21pbkhlaWdodCgpKX0sX2Jsb2NrRnJhbWVzOmZ1bmN0aW9uKCl7dGhpcy5pZnJhbWVCbG9ja3M9dGhpcy5kb2N1bWVudC5maW5kKFwiaWZyYW1lXCIpLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIHQoXCI8ZGl2PlwiKS5jc3Moe3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpfSkuYXBwZW5kVG8oZS5wYXJlbnQoKSkub2Zmc2V0KGUub2Zmc2V0KCkpWzBdfSl9LF91bmJsb2NrRnJhbWVzOmZ1bmN0aW9uKCl7dGhpcy5pZnJhbWVCbG9ja3MmJih0aGlzLmlmcmFtZUJsb2Nrcy5yZW1vdmUoKSxkZWxldGUgdGhpcy5pZnJhbWVCbG9ja3MpfSxfYWxsb3dJbnRlcmFjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4hIXQoZS50YXJnZXQpLmNsb3Nlc3QoXCIudWktZGlhbG9nXCIpLmxlbmd0aHx8ISF0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLWRhdGVwaWNrZXJcIikubGVuZ3RofSxfY3JlYXRlT3ZlcmxheTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5tb2RhbCl7dmFyIGU9ITA7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtlPSExfSksdGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpfHx0aGlzLl9vbih0aGlzLmRvY3VtZW50LHtmb2N1c2luOmZ1bmN0aW9uKHQpe2V8fHRoaXMuX2FsbG93SW50ZXJhY3Rpb24odCl8fCh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5fdHJhY2tpbmdJbnN0YW5jZXMoKVswXS5fZm9jdXNUYWJiYWJsZSgpKX19KSx0aGlzLm92ZXJsYXk9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX2FkZENsYXNzKHRoaXMub3ZlcmxheSxudWxsLFwidWktd2lkZ2V0LW92ZXJsYXkgdWktZnJvbnRcIiksdGhpcy5fb24odGhpcy5vdmVybGF5LHttb3VzZWRvd246XCJfa2VlcEZvY3VzXCJ9KSx0aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiwodGhpcy5kb2N1bWVudC5kYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpfHwwKSsxKX19LF9kZXN0cm95T3ZlcmxheTpmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5tb2RhbCYmdGhpcy5vdmVybGF5KXt2YXIgdD10aGlzLmRvY3VtZW50LmRhdGEoXCJ1aS1kaWFsb2ctb3ZlcmxheXNcIiktMTt0P3RoaXMuZG9jdW1lbnQuZGF0YShcInVpLWRpYWxvZy1vdmVybGF5c1wiLHQpOih0aGlzLl9vZmYodGhpcy5kb2N1bWVudCxcImZvY3VzaW5cIiksdGhpcy5kb2N1bWVudC5yZW1vdmVEYXRhKFwidWktZGlhbG9nLW92ZXJsYXlzXCIpKSx0aGlzLm92ZXJsYXkucmVtb3ZlKCksdGhpcy5vdmVybGF5PW51bGx9fX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkuZGlhbG9nXCIsdC51aS5kaWFsb2cse29wdGlvbnM6e2RpYWxvZ0NsYXNzOlwiXCJ9LF9jcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLnVpRGlhbG9nLmFkZENsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcImRpYWxvZ0NsYXNzXCI9PT10JiZ0aGlzLnVpRGlhbG9nLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MoZSksdGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpfX0pO3QudWkuZGlhbG9nO3Qud2lkZ2V0KFwidWkuZHJvcHBhYmxlXCIse3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcImRyb3BcIixvcHRpb25zOnthY2NlcHQ6XCIqXCIsYWRkQ2xhc3NlczohMCxncmVlZHk6ITEsc2NvcGU6XCJkZWZhdWx0XCIsdG9sZXJhbmNlOlwiaW50ZXJzZWN0XCIsYWN0aXZhdGU6bnVsbCxkZWFjdGl2YXRlOm51bGwsZHJvcDpudWxsLG91dDpudWxsLG92ZXI6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5vcHRpb25zLHM9aS5hY2NlcHQ7dGhpcy5pc292ZXI9ITEsdGhpcy5pc291dD0hMCx0aGlzLmFjY2VwdD10LmlzRnVuY3Rpb24ocyk/czpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhzKX0sdGhpcy5wcm9wb3J0aW9ucz1mdW5jdGlvbigpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlfHwoZT17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSk7ZT1hcmd1bWVudHNbMF19LHRoaXMuX2FkZFRvTWFuYWdlcihpLnNjb3BlKSxpLmFkZENsYXNzZXMmJnRoaXMuX2FkZENsYXNzKFwidWktZHJvcHBhYmxlXCIpfSxfYWRkVG9NYW5hZ2VyOmZ1bmN0aW9uKGUpe3QudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZV09dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXXx8W10sdC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlXS5wdXNoKHRoaXMpfSxfc3BsaWNlOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09PT10aGlzJiZ0LnNwbGljZShlLDEpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdGhpcy5vcHRpb25zLnNjb3BlXTt0aGlzLl9zcGxpY2UoZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXtpZihcImFjY2VwdFwiPT09ZSl0aGlzLmFjY2VwdD10LmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhpKX07ZWxzZSBpZihcInNjb3BlXCI9PT1lKXt2YXIgcz10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07dGhpcy5fc3BsaWNlKHMpLHRoaXMuX2FkZFRvTWFuYWdlcihpKX10aGlzLl9zdXBlcihlLGkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLl9hZGRBY3RpdmVDbGFzcygpLGkmJnRoaXMuX3RyaWdnZXIoXCJhY3RpdmF0ZVwiLGUsdGhpcy51aShpKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5fcmVtb3ZlQWN0aXZlQ2xhc3MoKSxpJiZ0aGlzLl90cmlnZ2VyKFwiZGVhY3RpdmF0ZVwiLGUsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLl9hZGRIb3ZlckNsYXNzKCksdGhpcy5fdHJpZ2dlcihcIm92ZXJcIixlLHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbihlKXt2YXIgaT10LnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5fcmVtb3ZlSG92ZXJDbGFzcygpLHRoaXMuX3RyaWdnZXIoXCJvdXRcIixlLHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24oZSxpKXt2YXIgcz1pfHx0LnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuISghc3x8KHMuY3VycmVudEl0ZW18fHMuZWxlbWVudClbMF09PT10aGlzLmVsZW1lbnRbMF0pJiYodGhpcy5lbGVtZW50LmZpbmQoXCI6ZGF0YSh1aS1kcm9wcGFibGUpXCIpLm5vdChcIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmdcIikuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykuZHJvcHBhYmxlKFwiaW5zdGFuY2VcIik7aWYoaS5vcHRpb25zLmdyZWVkeSYmIWkub3B0aW9ucy5kaXNhYmxlZCYmaS5vcHRpb25zLnNjb3BlPT09cy5vcHRpb25zLnNjb3BlJiZpLmFjY2VwdC5jYWxsKGkuZWxlbWVudFswXSxzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpJiZnKHMsdC5leHRlbmQoaSx7b2Zmc2V0OmkuZWxlbWVudC5vZmZzZXQoKX0pLGkub3B0aW9ucy50b2xlcmFuY2UsZSkpcmV0dXJuIG49ITAsITF9KSwhbiYmKCEhdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0scy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KSYmKHRoaXMuX3JlbW92ZUFjdGl2ZUNsYXNzKCksdGhpcy5fcmVtb3ZlSG92ZXJDbGFzcygpLHRoaXMuX3RyaWdnZXIoXCJkcm9wXCIsZSx0aGlzLnVpKHMpKSx0aGlzLmVsZW1lbnQpKSl9LHVpOmZ1bmN0aW9uKHQpe3JldHVybntkcmFnZ2FibGU6dC5jdXJyZW50SXRlbXx8dC5lbGVtZW50LGhlbHBlcjp0LmhlbHBlcixwb3NpdGlvbjp0LnBvc2l0aW9uLG9mZnNldDp0LnBvc2l0aW9uQWJzfX0sX2FkZEhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9hZGRDbGFzcyhcInVpLWRyb3BwYWJsZS1ob3ZlclwiKX0sX3JlbW92ZUhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWRyb3BwYWJsZS1ob3ZlclwiKX0sX2FkZEFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fYWRkQ2xhc3MoXCJ1aS1kcm9wcGFibGUtYWN0aXZlXCIpfSxfcmVtb3ZlQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9yZW1vdmVDbGFzcyhcInVpLWRyb3BwYWJsZS1hY3RpdmVcIil9fSk7dmFyIGc9dC51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxpKXtyZXR1cm4gdD49ZSYmdDxlK2l9cmV0dXJuIGZ1bmN0aW9uKGUsaSxzLG4pe2lmKCFpLm9mZnNldClyZXR1cm4hMTt2YXIgbz0oZS5wb3NpdGlvbkFic3x8ZS5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCtlLm1hcmdpbnMubGVmdCxhPShlLnBvc2l0aW9uQWJzfHxlLnBvc2l0aW9uLmFic29sdXRlKS50b3ArZS5tYXJnaW5zLnRvcCxyPW8rZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxoPWErZS5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbD1pLm9mZnNldC5sZWZ0LGM9aS5vZmZzZXQudG9wLHU9bCtpLnByb3BvcnRpb25zKCkud2lkdGgsZD1jK2kucHJvcG9ydGlvbnMoKS5oZWlnaHQ7c3dpdGNoKHMpe2Nhc2VcImZpdFwiOnJldHVybiBsPD1vJiZyPD11JiZjPD1hJiZoPD1kO2Nhc2VcImludGVyc2VjdFwiOnJldHVybiBsPG8rZS5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZyLWUuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjx1JiZjPGErZS5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmaC1lLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGQ7Y2FzZVwicG9pbnRlclwiOnJldHVybiB0KG4ucGFnZVksYyxpLnByb3BvcnRpb25zKCkuaGVpZ2h0KSYmdChuLnBhZ2VYLGwsaS5wcm9wb3J0aW9ucygpLndpZHRoKTtjYXNlXCJ0b3VjaFwiOnJldHVybihhPj1jJiZhPD1kfHxoPj1jJiZoPD1kfHxhPGMmJmg+ZCkmJihvPj1sJiZvPD11fHxyPj1sJiZyPD11fHxvPGwmJnI+dSk7ZGVmYXVsdDpyZXR1cm4hMX19fSgpO3QudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7ZGVmYXVsdDpbXX0scHJlcGFyZU9mZnNldHM6ZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG89dC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSxhPWk/aS50eXBlOm51bGwscj0oZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50KS5maW5kKFwiOmRhdGEodWktZHJvcHBhYmxlKVwiKS5hZGRCYWNrKCk7dDpmb3Iocz0wO3M8by5sZW5ndGg7cysrKWlmKCEob1tzXS5vcHRpb25zLmRpc2FibGVkfHxlJiYhb1tzXS5hY2NlcHQuY2FsbChvW3NdLmVsZW1lbnRbMF0sZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50KSkpe2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspaWYocltuXT09PW9bc10uZWxlbWVudFswXSl7b1tzXS5wcm9wb3J0aW9ucygpLmhlaWdodD0wO2NvbnRpbnVlIHR9b1tzXS52aXNpYmxlPVwibm9uZVwiIT09b1tzXS5lbGVtZW50LmNzcyhcImRpc3BsYXlcIiksb1tzXS52aXNpYmxlJiYoXCJtb3VzZWRvd25cIj09PWEmJm9bc10uX2FjdGl2YXRlLmNhbGwob1tzXSxpKSxvW3NdLm9mZnNldD1vW3NdLmVsZW1lbnQub2Zmc2V0KCksb1tzXS5wcm9wb3J0aW9ucyh7d2lkdGg6b1tzXS5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDpvW3NdLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSkpfX0sZHJvcDpmdW5jdGlvbihlLGkpe3ZhciBzPSExO3JldHVybiB0LmVhY2goKHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXXx8W10pLnNsaWNlKCksZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMmJighdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJmcoZSx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkmJihzPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLGkpfHxzKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGUuY3VycmVudEl0ZW18fGUuZWxlbWVudCkmJih0aGlzLmlzb3V0PSEwLHRoaXMuaXNvdmVyPSExLHRoaXMuX2RlYWN0aXZhdGUuY2FsbCh0aGlzLGkpKSl9KSxzfSxkcmFnU3RhcnQ6ZnVuY3Rpb24oZSxpKXtlLmVsZW1lbnQucGFyZW50c1VudGlsKFwiYm9keVwiKS5vbihcInNjcm9sbC5kcm9wcGFibGVcIixmdW5jdGlvbigpe2Uub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHx0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpfSl9LGRyYWc6ZnVuY3Rpb24oZSxpKXtlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZSxpKSx0LmVhY2godC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSxmdW5jdGlvbigpe2lmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJiF0aGlzLmdyZWVkeUNoaWxkJiZ0aGlzLnZpc2libGUpe3ZhciBzLG4sbyxhPWcoZSx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UsaSkscj0hYSYmdGhpcy5pc292ZXI/XCJpc291dFwiOmEmJiF0aGlzLmlzb3Zlcj9cImlzb3ZlclwiOm51bGw7ciYmKHRoaXMub3B0aW9ucy5ncmVlZHkmJihuPXRoaXMub3B0aW9ucy5zY29wZSxvPXRoaXMuZWxlbWVudC5wYXJlbnRzKFwiOmRhdGEodWktZHJvcHBhYmxlKVwiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzKS5kcm9wcGFibGUoXCJpbnN0YW5jZVwiKS5vcHRpb25zLnNjb3BlPT09bn0pLG8ubGVuZ3RoJiYocz10KG9bMF0pLmRyb3BwYWJsZShcImluc3RhbmNlXCIpLHMuZ3JlZWR5Q2hpbGQ9XCJpc292ZXJcIj09PXIpKSxzJiZcImlzb3ZlclwiPT09ciYmKHMuaXNvdmVyPSExLHMuaXNvdXQ9ITAscy5fb3V0LmNhbGwocyxpKSksdGhpc1tyXT0hMCx0aGlzW1wiaXNvdXRcIj09PXI/XCJpc292ZXJcIjpcImlzb3V0XCJdPSExLHRoaXNbXCJpc292ZXJcIj09PXI/XCJfb3ZlclwiOlwiX291dFwiXS5jYWxsKHRoaXMsaSkscyYmXCJpc291dFwiPT09ciYmKHMuaXNvdXQ9ITEscy5pc292ZXI9ITAscy5fb3Zlci5jYWxsKHMsaSkpKX19KX0sZHJhZ1N0b3A6ZnVuY3Rpb24oZSxpKXtlLmVsZW1lbnQucGFyZW50c1VudGlsKFwiYm9keVwiKS5vZmYoXCJzY3JvbGwuZHJvcHBhYmxlXCIpLGUub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHx0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpfX0sITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS5kcm9wcGFibGVcIix0LnVpLmRyb3BwYWJsZSx7b3B0aW9uczp7aG92ZXJDbGFzczohMSxhY3RpdmVDbGFzczohMX0sX2FkZEFjdGl2ZUNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpfSxfcmVtb3ZlQWN0aXZlQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyl9LF9hZGRIb3ZlckNsYXNzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKX0sX3JlbW92ZUhvdmVyQ2xhc3M6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpfX0pO3QudWkuZHJvcHBhYmxlLHQud2lkZ2V0KFwidWkucHJvZ3Jlc3NiYXJcIix7dmVyc2lvbjpcIjEuMTIuMVwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktcHJvZ3Jlc3NiYXJcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXByb2dyZXNzYmFyLXZhbHVlXCI6XCJ1aS1jb3JuZXItbGVmdFwiLFwidWktcHJvZ3Jlc3NiYXItY29tcGxldGVcIjpcInVpLWNvcm5lci1yaWdodFwifSxtYXg6MTAwLHZhbHVlOjAsY2hhbmdlOm51bGwsY29tcGxldGU6bnVsbH0sbWluOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub2xkVmFsdWU9dGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoKSx0aGlzLmVsZW1lbnQuYXR0cih7cm9sZTpcInByb2dyZXNzYmFyXCIsXCJhcmlhLXZhbHVlbWluXCI6dGhpcy5taW59KSx0aGlzLl9hZGRDbGFzcyhcInVpLXByb2dyZXNzYmFyXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy52YWx1ZURpdj10KFwiPGRpdj5cIikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLl9hZGRDbGFzcyh0aGlzLnZhbHVlRGl2LFwidWktcHJvZ3Jlc3NiYXItdmFsdWVcIixcInVpLXdpZGdldC1oZWFkZXJcIiksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJyb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIpLHRoaXMudmFsdWVEaXYucmVtb3ZlKCl9LHZhbHVlOmZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXQpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZTt0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fY29uc3RyYWluZWRWYWx1ZSh0KSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2NvbnN0cmFpbmVkVmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PXRoaXMub3B0aW9ucy52YWx1ZSksdGhpcy5pbmRldGVybWluYXRlPSExPT09dCxcIm51bWJlclwiIT10eXBlb2YgdCYmKHQ9MCksIXRoaXMuaW5kZXRlcm1pbmF0ZSYmTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbix0KSl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBlPXQudmFsdWU7ZGVsZXRlIHQudmFsdWUsdGhpcy5fc3VwZXIodCksdGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtcIm1heFwiPT09dCYmKGU9TWF0aC5tYXgodGhpcy5taW4sZSkpLHRoaXMuX3N1cGVyKHQsZSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLmVsZW1lbnQuYXR0cihcImFyaWEtZGlzYWJsZWRcIix0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpfSxfcGVyY2VudGFnZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluZGV0ZXJtaW5hdGU/MTAwOjEwMCoodGhpcy5vcHRpb25zLnZhbHVlLXRoaXMubWluKS8odGhpcy5vcHRpb25zLm1heC10aGlzLm1pbil9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWUsaT10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy52YWx1ZURpdi50b2dnbGUodGhpcy5pbmRldGVybWluYXRlfHxlPnRoaXMubWluKS53aWR0aChpLnRvRml4ZWQoMCkrXCIlXCIpLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMudmFsdWVEaXYsXCJ1aS1wcm9ncmVzc2Jhci1jb21wbGV0ZVwiLG51bGwsZT09PXRoaXMub3B0aW9ucy5tYXgpLl90b2dnbGVDbGFzcyhcInVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGVcIixudWxsLHRoaXMuaW5kZXRlcm1pbmF0ZSksdGhpcy5pbmRldGVybWluYXRlPyh0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtdmFsdWVub3dcIiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PXQoXCI8ZGl2PlwiKS5hcHBlbmRUbyh0aGlzLnZhbHVlRGl2KSx0aGlzLl9hZGRDbGFzcyh0aGlzLm92ZXJsYXlEaXYsXCJ1aS1wcm9ncmVzc2Jhci1vdmVybGF5XCIpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHtcImFyaWEtdmFsdWVtYXhcIjp0aGlzLm9wdGlvbnMubWF4LFwiYXJpYS12YWx1ZW5vd1wiOmV9KSx0aGlzLm92ZXJsYXlEaXYmJih0aGlzLm92ZXJsYXlEaXYucmVtb3ZlKCksdGhpcy5vdmVybGF5RGl2PW51bGwpKSx0aGlzLm9sZFZhbHVlIT09ZSYmKHRoaXMub2xkVmFsdWU9ZSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIpKSxlPT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcihcImNvbXBsZXRlXCIpfX0pLHQud2lkZ2V0KFwidWkuc2VsZWN0YWJsZVwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOnthcHBlbmRUbzpcImJvZHlcIixhdXRvUmVmcmVzaDohMCxkaXN0YW5jZTowLGZpbHRlcjpcIipcIix0b2xlcmFuY2U6XCJ0b3VjaFwiLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX2FkZENsYXNzKFwidWktc2VsZWN0YWJsZVwiKSx0aGlzLmRyYWdnZWQ9ITEsdGhpcy5yZWZyZXNoPWZ1bmN0aW9uKCl7ZS5lbGVtZW50UG9zPXQoZS5lbGVtZW50WzBdKS5vZmZzZXQoKSxlLnNlbGVjdGVlcz10KGUub3B0aW9ucy5maWx0ZXIsZS5lbGVtZW50WzBdKSxlLl9hZGRDbGFzcyhlLnNlbGVjdGVlcyxcInVpLXNlbGVjdGVlXCIpLGUuc2VsZWN0ZWVzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLHM9aS5vZmZzZXQoKSxuPXtsZWZ0OnMubGVmdC1lLmVsZW1lbnRQb3MubGVmdCx0b3A6cy50b3AtZS5lbGVtZW50UG9zLnRvcH07dC5kYXRhKHRoaXMsXCJzZWxlY3RhYmxlLWl0ZW1cIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OmksbGVmdDpuLmxlZnQsdG9wOm4udG9wLHJpZ2h0Om4ubGVmdCtpLm91dGVyV2lkdGgoKSxib3R0b206bi50b3AraS5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6aS5oYXNDbGFzcyhcInVpLXNlbGVjdGVkXCIpLHNlbGVjdGluZzppLmhhc0NsYXNzKFwidWktc2VsZWN0aW5nXCIpLHVuc2VsZWN0aW5nOmkuaGFzQ2xhc3MoXCJ1aS11bnNlbGVjdGluZ1wiKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuaGVscGVyPXQoXCI8ZGl2PlwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcixcInVpLXNlbGVjdGFibGUtaGVscGVyXCIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZURhdGEoXCJzZWxlY3RhYmxlLWl0ZW1cIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVtlLnBhZ2VYLGUucGFnZVldLHRoaXMuZWxlbWVudFBvcz10KHRoaXMuZWxlbWVudFswXSkub2Zmc2V0KCksdGhpcy5vcHRpb25zLmRpc2FibGVkfHwodGhpcy5zZWxlY3RlZXM9dChzLmZpbHRlcix0aGlzLmVsZW1lbnRbMF0pLHRoaXMuX3RyaWdnZXIoXCJzdGFydFwiLGUpLHQocy5hcHBlbmRUbykuYXBwZW5kKHRoaXMuaGVscGVyKSx0aGlzLmhlbHBlci5jc3Moe2xlZnQ6ZS5wYWdlWCx0b3A6ZS5wYWdlWSx3aWR0aDowLGhlaWdodDowfSkscy5hdXRvUmVmcmVzaCYmdGhpcy5yZWZyZXNoKCksdGhpcy5zZWxlY3RlZXMuZmlsdGVyKFwiLnVpLXNlbGVjdGVkXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcz10LmRhdGEodGhpcyxcInNlbGVjdGFibGUtaXRlbVwiKTtzLnN0YXJ0c2VsZWN0ZWQ9ITAsZS5tZXRhS2V5fHxlLmN0cmxLZXl8fChpLl9yZW1vdmVDbGFzcyhzLiRlbGVtZW50LFwidWktc2VsZWN0ZWRcIikscy5zZWxlY3RlZD0hMSxpLl9hZGRDbGFzcyhzLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIikscy51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKFwidW5zZWxlY3RpbmdcIixlLHt1bnNlbGVjdGluZzpzLmVsZW1lbnR9KSl9KSx0KGUudGFyZ2V0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxuPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2lmKG4pcmV0dXJuIHM9IWUubWV0YUtleSYmIWUuY3RybEtleXx8IW4uJGVsZW1lbnQuaGFzQ2xhc3MoXCJ1aS1zZWxlY3RlZFwiKSxpLl9yZW1vdmVDbGFzcyhuLiRlbGVtZW50LHM/XCJ1aS11bnNlbGVjdGluZ1wiOlwidWktc2VsZWN0ZWRcIikuX2FkZENsYXNzKG4uJGVsZW1lbnQscz9cInVpLXNlbGVjdGluZ1wiOlwidWktdW5zZWxlY3RpbmdcIiksbi51bnNlbGVjdGluZz0hcyxuLnNlbGVjdGluZz1zLG4uc2VsZWN0ZWQ9cyxzP2kuX3RyaWdnZXIoXCJzZWxlY3RpbmdcIixlLHtzZWxlY3Rpbmc6bi5lbGVtZW50fSk6aS5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6bi5lbGVtZW50fSksITF9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLHM9dGhpcyxuPXRoaXMub3B0aW9ucyxvPXRoaXMub3Bvc1swXSxhPXRoaXMub3Bvc1sxXSxyPWUucGFnZVgsaD1lLnBhZ2VZO3JldHVybiBvPnImJihpPXIscj1vLG89aSksYT5oJiYoaT1oLGg9YSxhPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDpvLHRvcDphLHdpZHRoOnItbyxoZWlnaHQ6aC1hfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpLGw9ITEsYz17fTtpJiZpLmVsZW1lbnQhPT1zLmVsZW1lbnRbMF0mJihjLmxlZnQ9aS5sZWZ0K3MuZWxlbWVudFBvcy5sZWZ0LGMucmlnaHQ9aS5yaWdodCtzLmVsZW1lbnRQb3MubGVmdCxjLnRvcD1pLnRvcCtzLmVsZW1lbnRQb3MudG9wLGMuYm90dG9tPWkuYm90dG9tK3MuZWxlbWVudFBvcy50b3AsXCJ0b3VjaFwiPT09bi50b2xlcmFuY2U/bD0hKGMubGVmdD5yfHxjLnJpZ2h0PG98fGMudG9wPmh8fGMuYm90dG9tPGEpOlwiZml0XCI9PT1uLnRvbGVyYW5jZSYmKGw9Yy5sZWZ0Pm8mJmMucmlnaHQ8ciYmYy50b3A+YSYmYy5ib3R0b208aCksbD8oaS5zZWxlY3RlZCYmKHMuX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSExKSxpLnVuc2VsZWN0aW5nJiYocy5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXVuc2VsZWN0aW5nXCIpLGkudW5zZWxlY3Rpbmc9ITEpLGkuc2VsZWN0aW5nfHwocy5fYWRkQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMCxzLl90cmlnZ2VyKFwic2VsZWN0aW5nXCIsZSx7c2VsZWN0aW5nOmkuZWxlbWVudH0pKSk6KGkuc2VsZWN0aW5nJiYoKGUubWV0YUtleXx8ZS5jdHJsS2V5KSYmaS5zdGFydHNlbGVjdGVkPyhzLl9yZW1vdmVDbGFzcyhpLiRlbGVtZW50LFwidWktc2VsZWN0aW5nXCIpLGkuc2VsZWN0aW5nPSExLHMuX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSEwKToocy5fcmVtb3ZlQ2xhc3MoaS4kZWxlbWVudCxcInVpLXNlbGVjdGluZ1wiKSxpLnNlbGVjdGluZz0hMSxpLnN0YXJ0c2VsZWN0ZWQmJihzLl9hZGRDbGFzcyhpLiRlbGVtZW50LFwidWktdW5zZWxlY3RpbmdcIiksaS51bnNlbGVjdGluZz0hMCkscy5fdHJpZ2dlcihcInVuc2VsZWN0aW5nXCIsZSx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSxpLnNlbGVjdGVkJiYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGkuc3RhcnRzZWxlY3RlZHx8KHMuX3JlbW92ZUNsYXNzKGkuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxpLnNlbGVjdGVkPSExLHMuX2FkZENsYXNzKGkuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxpLnVuc2VsZWN0aW5nPSEwLHMuX3RyaWdnZXIoXCJ1bnNlbGVjdGluZ1wiLGUse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSkpKX0pLCExfX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO3JldHVybiB0aGlzLmRyYWdnZWQ9ITEsdChcIi51aS11bnNlbGVjdGluZ1wiLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2kuX3JlbW92ZUNsYXNzKHMuJGVsZW1lbnQsXCJ1aS11bnNlbGVjdGluZ1wiKSxzLnVuc2VsZWN0aW5nPSExLHMuc3RhcnRzZWxlY3RlZD0hMSxpLl90cmlnZ2VyKFwidW5zZWxlY3RlZFwiLGUse3Vuc2VsZWN0ZWQ6cy5lbGVtZW50fSl9KSx0KFwiLnVpLXNlbGVjdGluZ1wiLHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe3ZhciBzPXQuZGF0YSh0aGlzLFwic2VsZWN0YWJsZS1pdGVtXCIpO2kuX3JlbW92ZUNsYXNzKHMuJGVsZW1lbnQsXCJ1aS1zZWxlY3RpbmdcIikuX2FkZENsYXNzKHMuJGVsZW1lbnQsXCJ1aS1zZWxlY3RlZFwiKSxzLnNlbGVjdGluZz0hMSxzLnNlbGVjdGVkPSEwLHMuc3RhcnRzZWxlY3RlZD0hMCxpLl90cmlnZ2VyKFwic2VsZWN0ZWRcIixlLHtzZWxlY3RlZDpzLmVsZW1lbnR9KX0pLHRoaXMuX3RyaWdnZXIoXCJzdG9wXCIsZSksdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9fSksdC53aWRnZXQoXCJ1aS5zZWxlY3RtZW51XCIsW3QudWkuZm9ybVJlc2V0TWl4aW4se3ZlcnNpb246XCIxLjEyLjFcIixkZWZhdWx0RWxlbWVudDpcIjxzZWxlY3Q+XCIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxjbGFzc2VzOntcInVpLXNlbGVjdG1lbnUtYnV0dG9uLW9wZW5cIjpcInVpLWNvcm5lci10b3BcIixcInVpLXNlbGVjdG1lbnUtYnV0dG9uLWNsb3NlZFwiOlwidWktY29ybmVyLWFsbFwifSxkaXNhYmxlZDpudWxsLGljb25zOntidXR0b246XCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wifSxwb3NpdGlvbjp7bXk6XCJsZWZ0IHRvcFwiLGF0OlwibGVmdCBib3R0b21cIixjb2xsaXNpb246XCJub25lXCJ9LHdpZHRoOiExLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hdHRyKFwiaWRcIik7dGhpcy5pZHM9e2VsZW1lbnQ6ZSxidXR0b246ZStcIi1idXR0b25cIixtZW51OmUrXCItbWVudVwifSx0aGlzLl9kcmF3QnV0dG9uKCksdGhpcy5fZHJhd01lbnUoKSx0aGlzLl9iaW5kRm9ybVJlc2V0SGFuZGxlcigpLHRoaXMuX3JlbmRlcmVkPSExLHRoaXMubWVudUl0ZW1zPXQoKX0sX2RyYXdCdXR0b246ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXMscz10aGlzLl9wYXJzZU9wdGlvbih0aGlzLmVsZW1lbnQuZmluZChcIm9wdGlvbjpzZWxlY3RlZFwiKSx0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleCk7dGhpcy5sYWJlbHM9dGhpcy5lbGVtZW50LmxhYmVscygpLmF0dHIoXCJmb3JcIix0aGlzLmlkcy5idXR0b24pLHRoaXMuX29uKHRoaXMubGFiZWxzLHtjbGljazpmdW5jdGlvbih0KXt0aGlzLmJ1dHRvbi5mb2N1cygpLHQucHJldmVudERlZmF1bHQoKX19KSx0aGlzLmVsZW1lbnQuaGlkZSgpLHRoaXMuYnV0dG9uPXQoXCI8c3Bhbj5cIix7dGFiaW5kZXg6dGhpcy5vcHRpb25zLmRpc2FibGVkPy0xOjAsaWQ6dGhpcy5pZHMuYnV0dG9uLHJvbGU6XCJjb21ib2JveFwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIixcImFyaWEtYXV0b2NvbXBsZXRlXCI6XCJsaXN0XCIsXCJhcmlhLW93bnNcIjp0aGlzLmlkcy5tZW51LFwiYXJpYS1oYXNwb3B1cFwiOlwidHJ1ZVwiLHRpdGxlOnRoaXMuZWxlbWVudC5hdHRyKFwidGl0bGVcIil9KS5pbnNlcnRBZnRlcih0aGlzLmVsZW1lbnQpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24gdWktc2VsZWN0bWVudS1idXR0b24tY2xvc2VkXCIsXCJ1aS1idXR0b24gdWktd2lkZ2V0XCIpLGU9dChcIjxzcGFuPlwiKS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksdGhpcy5fYWRkQ2xhc3MoZSxcInVpLXNlbGVjdG1lbnUtaWNvblwiLFwidWktaWNvbiBcIit0aGlzLm9wdGlvbnMuaWNvbnMuYnV0dG9uKSx0aGlzLmJ1dHRvbkl0ZW09dGhpcy5fcmVuZGVyQnV0dG9uSXRlbShzKS5hcHBlbmRUbyh0aGlzLmJ1dHRvbiksITEhPT10aGlzLm9wdGlvbnMud2lkdGgmJnRoaXMuX3Jlc2l6ZUJ1dHRvbigpLHRoaXMuX29uKHRoaXMuYnV0dG9uLHRoaXMuX2J1dHRvbkV2ZW50cyksdGhpcy5idXR0b24ub25lKFwiZm9jdXNpblwiLGZ1bmN0aW9uKCl7aS5fcmVuZGVyZWR8fGkuX3JlZnJlc2hNZW51KCl9KX0sX2RyYXdNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLm1lbnU9dChcIjx1bD5cIix7XCJhcmlhLWhpZGRlblwiOlwidHJ1ZVwiLFwiYXJpYS1sYWJlbGxlZGJ5XCI6dGhpcy5pZHMuYnV0dG9uLGlkOnRoaXMuaWRzLm1lbnV9KSx0aGlzLm1lbnVXcmFwPXQoXCI8ZGl2PlwiKS5hcHBlbmQodGhpcy5tZW51KSx0aGlzLl9hZGRDbGFzcyh0aGlzLm1lbnVXcmFwLFwidWktc2VsZWN0bWVudS1tZW51XCIsXCJ1aS1mcm9udFwiKSx0aGlzLm1lbnVXcmFwLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMubWVudUluc3RhbmNlPXRoaXMubWVudS5tZW51KHtjbGFzc2VzOntcInVpLW1lbnVcIjpcInVpLWNvcm5lci1ib3R0b21cIn0scm9sZTpcImxpc3Rib3hcIixzZWxlY3Q6ZnVuY3Rpb24odCxpKXt0LnByZXZlbnREZWZhdWx0KCksZS5fc2V0U2VsZWN0aW9uKCksZS5fc2VsZWN0KGkuaXRlbS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpLHQpfSxmb2N1czpmdW5jdGlvbih0LGkpe3ZhciBzPWkuaXRlbS5kYXRhKFwidWktc2VsZWN0bWVudS1pdGVtXCIpO251bGwhPWUuZm9jdXNJbmRleCYmcy5pbmRleCE9PWUuZm9jdXNJbmRleCYmKGUuX3RyaWdnZXIoXCJmb2N1c1wiLHQse2l0ZW06c30pLGUuaXNPcGVufHxlLl9zZWxlY3Qocyx0KSksZS5mb2N1c0luZGV4PXMuaW5kZXgsZS5idXR0b24uYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUubWVudUl0ZW1zLmVxKHMuaW5kZXgpLmF0dHIoXCJpZFwiKSl9fSkubWVudShcImluc3RhbmNlXCIpLHRoaXMubWVudUluc3RhbmNlLl9vZmYodGhpcy5tZW51LFwibW91c2VsZWF2ZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5fY2xvc2VPbkRvY3VtZW50Q2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sdGhpcy5tZW51SW5zdGFuY2UuX2lzRGl2aWRlcj1mdW5jdGlvbigpe3JldHVybiExfX0scmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3JlZnJlc2hNZW51KCksdGhpcy5idXR0b25JdGVtLnJlcGxhY2VXaXRoKHRoaXMuYnV0dG9uSXRlbT10aGlzLl9yZW5kZXJCdXR0b25JdGVtKHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIil8fHt9KSksbnVsbD09PXRoaXMub3B0aW9ucy53aWR0aCYmdGhpcy5fcmVzaXplQnV0dG9uKCl9LF9yZWZyZXNoTWVudTpmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5lbGVtZW50LmZpbmQoXCJvcHRpb25cIik7dGhpcy5tZW51LmVtcHR5KCksdGhpcy5fcGFyc2VPcHRpb25zKGUpLHRoaXMuX3JlbmRlck1lbnUodGhpcy5tZW51LHRoaXMuaXRlbXMpLHRoaXMubWVudUluc3RhbmNlLnJlZnJlc2goKSx0aGlzLm1lbnVJdGVtcz10aGlzLm1lbnUuZmluZChcImxpXCIpLm5vdChcIi51aS1zZWxlY3RtZW51LW9wdGdyb3VwXCIpLmZpbmQoXCIudWktbWVudS1pdGVtLXdyYXBwZXJcIiksdGhpcy5fcmVuZGVyZWQ9ITAsZS5sZW5ndGgmJih0PXRoaXMuX2dldFNlbGVjdGVkSXRlbSgpLHRoaXMubWVudUluc3RhbmNlLmZvY3VzKG51bGwsdCksdGhpcy5fc2V0QXJpYSh0LmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIikpLHRoaXMuX3NldE9wdGlvbihcImRpc2FibGVkXCIsdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSkpfSxvcGVuOmZ1bmN0aW9uKHQpe3RoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuX3JlbmRlcmVkPyh0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLm1lbnUuZmluZChcIi51aS1zdGF0ZS1hY3RpdmVcIiksbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLm1lbnVJbnN0YW5jZS5mb2N1cyhudWxsLHRoaXMuX2dldFNlbGVjdGVkSXRlbSgpKSk6dGhpcy5fcmVmcmVzaE1lbnUoKSx0aGlzLm1lbnVJdGVtcy5sZW5ndGgmJih0aGlzLmlzT3Blbj0hMCx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5fcmVzaXplTWVudSgpLHRoaXMuX3Bvc2l0aW9uKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx0aGlzLl9kb2N1bWVudENsaWNrKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiLHQpKSl9LF9wb3NpdGlvbjpmdW5jdGlvbigpe3RoaXMubWVudVdyYXAucG9zaXRpb24odC5leHRlbmQoe29mOnRoaXMuYnV0dG9ufSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKX0sY2xvc2U6ZnVuY3Rpb24odCl7dGhpcy5pc09wZW4mJih0aGlzLmlzT3Blbj0hMSx0aGlzLl90b2dnbGVBdHRyKCksdGhpcy5yYW5nZT1udWxsLHRoaXMuX29mZih0aGlzLmRvY3VtZW50KSx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIix0KSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbn0sbWVudVdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnV9LF9yZW5kZXJCdXR0b25JdGVtOmZ1bmN0aW9uKGUpe3ZhciBpPXQoXCI8c3Bhbj5cIik7cmV0dXJuIHRoaXMuX3NldFRleHQoaSxlLmxhYmVsKSx0aGlzLl9hZGRDbGFzcyhpLFwidWktc2VsZWN0bWVudS10ZXh0XCIpLGl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGUsaSl7dmFyIHM9dGhpcyxuPVwiXCI7dC5lYWNoKGksZnVuY3Rpb24oaSxvKXt2YXIgYTtvLm9wdGdyb3VwIT09biYmKGE9dChcIjxsaT5cIix7dGV4dDpvLm9wdGdyb3VwfSkscy5fYWRkQ2xhc3MoYSxcInVpLXNlbGVjdG1lbnUtb3B0Z3JvdXBcIixcInVpLW1lbnUtZGl2aWRlclwiKyhvLmVsZW1lbnQucGFyZW50KFwib3B0Z3JvdXBcIikucHJvcChcImRpc2FibGVkXCIpP1wiIHVpLXN0YXRlLWRpc2FibGVkXCI6XCJcIikpLGEuYXBwZW5kVG8oZSksbj1vLm9wdGdyb3VwKSxzLl9yZW5kZXJJdGVtRGF0YShlLG8pfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKHQsZSkuZGF0YShcInVpLXNlbGVjdG1lbnUtaXRlbVwiLGUpfSxfcmVuZGVySXRlbTpmdW5jdGlvbihlLGkpe3ZhciBzPXQoXCI8bGk+XCIpLG49dChcIjxkaXY+XCIse3RpdGxlOmkuZWxlbWVudC5hdHRyKFwidGl0bGVcIil9KTtyZXR1cm4gaS5kaXNhYmxlZCYmdGhpcy5fYWRkQ2xhc3MocyxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiksdGhpcy5fc2V0VGV4dChuLGkubGFiZWwpLHMuYXBwZW5kKG4pLmFwcGVuZFRvKGUpfSxfc2V0VGV4dDpmdW5jdGlvbih0LGUpe2U/dC50ZXh0KGUpOnQuaHRtbChcIiYjMTYwO1wiKX0sX21vdmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG49XCIudWktbWVudS1pdGVtXCI7dGhpcy5pc09wZW4/aT10aGlzLm1lbnVJdGVtcy5lcSh0aGlzLmZvY3VzSW5kZXgpLnBhcmVudChcImxpXCIpOihpPXRoaXMubWVudUl0ZW1zLmVxKHRoaXMuZWxlbWVudFswXS5zZWxlY3RlZEluZGV4KS5wYXJlbnQoXCJsaVwiKSxuKz1cIjpub3QoLnVpLXN0YXRlLWRpc2FibGVkKVwiKSxzPVwiZmlyc3RcIj09PXR8fFwibGFzdFwiPT09dD9pW1wiZmlyc3RcIj09PXQ/XCJwcmV2QWxsXCI6XCJuZXh0QWxsXCJdKG4pLmVxKC0xKTppW3QrXCJBbGxcIl0obikuZXEoMCkscy5sZW5ndGgmJnRoaXMubWVudUluc3RhbmNlLmZvY3VzKGUscyl9LF9nZXRTZWxlY3RlZEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51SXRlbXMuZXEodGhpcy5lbGVtZW50WzBdLnNlbGVjdGVkSW5kZXgpLnBhcmVudChcImxpXCIpfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3RoaXNbdGhpcy5pc09wZW4/XCJjbG9zZVwiOlwib3BlblwiXSh0KX0sX3NldFNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciB0O3RoaXMucmFuZ2UmJih3aW5kb3cuZ2V0U2VsZWN0aW9uPyh0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKSx0LnJlbW92ZUFsbFJhbmdlcygpLHQuYWRkUmFuZ2UodGhpcy5yYW5nZSkpOnRoaXMucmFuZ2Uuc2VsZWN0KCksdGhpcy5idXR0b24uZm9jdXMoKSl9LF9kb2N1bWVudENsaWNrOnttb3VzZWRvd246ZnVuY3Rpb24oZSl7dGhpcy5pc09wZW4mJih0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLnVpLXNlbGVjdG1lbnUtbWVudSwgI1wiK3QudWkuZXNjYXBlU2VsZWN0b3IodGhpcy5pZHMuYnV0dG9uKSkubGVuZ3RofHx0aGlzLmNsb3NlKGUpKX19LF9idXR0b25FdmVudHM6e21vdXNlZG93bjpmdW5jdGlvbigpe3ZhciB0O3dpbmRvdy5nZXRTZWxlY3Rpb24/KHQ9d2luZG93LmdldFNlbGVjdGlvbigpLHQucmFuZ2VDb3VudCYmKHRoaXMucmFuZ2U9dC5nZXRSYW5nZUF0KDApKSk6dGhpcy5yYW5nZT1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKX0sY2xpY2s6ZnVuY3Rpb24odCl7dGhpcy5fc2V0U2VsZWN0aW9uKCksdGhpcy5fdG9nZ2xlKHQpfSxrZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPSEwO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLlRBQjpjYXNlIHQudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jbG9zZShlKSxpPSExO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVOVEVSOnRoaXMuaXNPcGVuJiZ0aGlzLl9zZWxlY3RGb2N1c2VkSXRlbShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDplLmFsdEtleT90aGlzLl90b2dnbGUoZSk6dGhpcy5fbW92ZShcInByZXZcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5ET1dOOmUuYWx0S2V5P3RoaXMuX3RvZ2dsZShlKTp0aGlzLl9tb3ZlKFwibmV4dFwiLGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlNQQUNFOnRoaXMuaXNPcGVuP3RoaXMuX3NlbGVjdEZvY3VzZWRJdGVtKGUpOnRoaXMuX3RvZ2dsZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5MRUZUOnRoaXMuX21vdmUoXCJwcmV2XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6dGhpcy5fbW92ZShcIm5leHRcIixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5IT01FOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5fbW92ZShcImZpcnN0XCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKFwibGFzdFwiLGUpO2JyZWFrO2RlZmF1bHQ6dGhpcy5tZW51LnRyaWdnZXIoZSksaT0hMX1pJiZlLnByZXZlbnREZWZhdWx0KCl9fSxfc2VsZWN0Rm9jdXNlZEl0ZW06ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5tZW51SXRlbXMuZXEodGhpcy5mb2N1c0luZGV4KS5wYXJlbnQoXCJsaVwiKTtlLmhhc0NsYXNzKFwidWktc3RhdGUtZGlzYWJsZWRcIil8fHRoaXMuX3NlbGVjdChlLmRhdGEoXCJ1aS1zZWxlY3RtZW51LWl0ZW1cIiksdCl9LF9zZWxlY3Q6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleDt0aGlzLmVsZW1lbnRbMF0uc2VsZWN0ZWRJbmRleD10LmluZGV4LHRoaXMuYnV0dG9uSXRlbS5yZXBsYWNlV2l0aCh0aGlzLmJ1dHRvbkl0ZW09dGhpcy5fcmVuZGVyQnV0dG9uSXRlbSh0KSksdGhpcy5fc2V0QXJpYSh0KSx0aGlzLl90cmlnZ2VyKFwic2VsZWN0XCIsZSx7aXRlbTp0fSksdC5pbmRleCE9PWkmJnRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHtpdGVtOnR9KSx0aGlzLmNsb3NlKGUpfSxfc2V0QXJpYTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLm1lbnVJdGVtcy5lcSh0LmluZGV4KS5hdHRyKFwiaWRcIik7dGhpcy5idXR0b24uYXR0cih7XCJhcmlhLWxhYmVsbGVkYnlcIjplLFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCI6ZX0pLHRoaXMubWVudS5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZihcImljb25zXCI9PT10KXt2YXIgaT10aGlzLmJ1dHRvbi5maW5kKFwic3Bhbi51aS1pY29uXCIpO3RoaXMuX3JlbW92ZUNsYXNzKGksbnVsbCx0aGlzLm9wdGlvbnMuaWNvbnMuYnV0dG9uKS5fYWRkQ2xhc3MoaSxudWxsLGUuYnV0dG9uKX10aGlzLl9zdXBlcih0LGUpLFwiYXBwZW5kVG9cIj09PXQmJnRoaXMubWVudVdyYXAuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksXCJ3aWR0aFwiPT09dCYmdGhpcy5fcmVzaXplQnV0dG9uKCl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLm1lbnVJbnN0YW5jZS5vcHRpb24oXCJkaXNhYmxlZFwiLHQpLHRoaXMuYnV0dG9uLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsdCksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy5idXR0b24sbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsdCksdGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiLHQpLHQ/KHRoaXMuYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiLC0xKSx0aGlzLmNsb3NlKCkpOnRoaXMuYnV0dG9uLmF0dHIoXCJ0YWJpbmRleFwiLDApfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIGUmJihlPWUuanF1ZXJ5fHxlLm5vZGVUeXBlP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGUpLmVxKDApKSxlJiZlWzBdfHwoZT10aGlzLmVsZW1lbnQuY2xvc2VzdChcIi51aS1mcm9udCwgZGlhbG9nXCIpKSxlLmxlbmd0aHx8KGU9dGhpcy5kb2N1bWVudFswXS5ib2R5KSxlfSxfdG9nZ2xlQXR0cjpmdW5jdGlvbigpe3RoaXMuYnV0dG9uLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsdGhpcy5pc09wZW4pLHRoaXMuX3JlbW92ZUNsYXNzKHRoaXMuYnV0dG9uLFwidWktc2VsZWN0bWVudS1idXR0b24tXCIrKHRoaXMuaXNPcGVuP1wiY2xvc2VkXCI6XCJvcGVuXCIpKS5fYWRkQ2xhc3ModGhpcy5idXR0b24sXCJ1aS1zZWxlY3RtZW51LWJ1dHRvbi1cIisodGhpcy5pc09wZW4/XCJvcGVuXCI6XCJjbG9zZWRcIikpLl90b2dnbGVDbGFzcyh0aGlzLm1lbnVXcmFwLFwidWktc2VsZWN0bWVudS1vcGVuXCIsbnVsbCx0aGlzLmlzT3BlbiksdGhpcy5tZW51LmF0dHIoXCJhcmlhLWhpZGRlblwiLCF0aGlzLmlzT3Blbil9LF9yZXNpemVCdXR0b246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMud2lkdGg7aWYoITE9PT10KXJldHVybiB2b2lkIHRoaXMuYnV0dG9uLmNzcyhcIndpZHRoXCIsXCJcIik7bnVsbD09PXQmJih0PXRoaXMuZWxlbWVudC5zaG93KCkub3V0ZXJXaWR0aCgpLHRoaXMuZWxlbWVudC5oaWRlKCkpLHRoaXMuYnV0dG9uLm91dGVyV2lkdGgodCl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dGhpcy5tZW51Lm91dGVyV2lkdGgoTWF0aC5tYXgodGhpcy5idXR0b24ub3V0ZXJXaWR0aCgpLHRoaXMubWVudS53aWR0aChcIlwiKS5vdXRlcldpZHRoKCkrMSkpfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3N1cGVyKCk7cmV0dXJuIHQuZGlzYWJsZWQ9dGhpcy5lbGVtZW50LnByb3AoXCJkaXNhYmxlZFwiKSx0fSxcbl9wYXJzZU9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxzPVtdO2UuZWFjaChmdW5jdGlvbihlLG4pe3MucHVzaChpLl9wYXJzZU9wdGlvbih0KG4pLGUpKX0pLHRoaXMuaXRlbXM9c30sX3BhcnNlT3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5wYXJlbnQoXCJvcHRncm91cFwiKTtyZXR1cm57ZWxlbWVudDp0LGluZGV4OmUsdmFsdWU6dC52YWwoKSxsYWJlbDp0LnRleHQoKSxvcHRncm91cDppLmF0dHIoXCJsYWJlbFwiKXx8XCJcIixkaXNhYmxlZDppLnByb3AoXCJkaXNhYmxlZFwiKXx8dC5wcm9wKFwiZGlzYWJsZWRcIil9fSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX3VuYmluZEZvcm1SZXNldEhhbmRsZXIoKSx0aGlzLm1lbnVXcmFwLnJlbW92ZSgpLHRoaXMuYnV0dG9uLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5zaG93KCksdGhpcy5lbGVtZW50LnJlbW92ZVVuaXF1ZUlkKCksdGhpcy5sYWJlbHMuYXR0cihcImZvclwiLHRoaXMuaWRzLmVsZW1lbnQpfX1dKSx0LndpZGdldChcInVpLnNsaWRlclwiLHQudWkubW91c2Use3ZlcnNpb246XCIxLjEyLjFcIix3aWRnZXRFdmVudFByZWZpeDpcInNsaWRlXCIsb3B0aW9uczp7YW5pbWF0ZTohMSxjbGFzc2VzOntcInVpLXNsaWRlclwiOlwidWktY29ybmVyLWFsbFwiLFwidWktc2xpZGVyLWhhbmRsZVwiOlwidWktY29ybmVyLWFsbFwiLFwidWktc2xpZGVyLXJhbmdlXCI6XCJ1aS1jb3JuZXItYWxsIHVpLXdpZGdldC1oZWFkZXJcIn0sZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOlwiaG9yaXpvbnRhbFwiLHJhbmdlOiExLHN0ZXA6MSx2YWx1ZTowLHZhbHVlczpudWxsLGNoYW5nZTpudWxsLHNsaWRlOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LG51bVBhZ2VzOjUsX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuX2NhbGN1bGF0ZU5ld01heCgpLHRoaXMuX2FkZENsYXNzKFwidWktc2xpZGVyIHVpLXNsaWRlci1cIit0aGlzLm9yaWVudGF0aW9uLFwidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50XCIpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX2NyZWF0ZVJhbmdlKCksdGhpcy5fY3JlYXRlSGFuZGxlcygpLHRoaXMuX3NldHVwRXZlbnRzKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9jcmVhdGVIYW5kbGVzOmZ1bmN0aW9uKCl7dmFyIGUsaSxzPXRoaXMub3B0aW9ucyxuPXRoaXMuZWxlbWVudC5maW5kKFwiLnVpLXNsaWRlci1oYW5kbGVcIiksbz1bXTtmb3IoaT1zLnZhbHVlcyYmcy52YWx1ZXMubGVuZ3RofHwxLG4ubGVuZ3RoPmkmJihuLnNsaWNlKGkpLnJlbW92ZSgpLG49bi5zbGljZSgwLGkpKSxlPW4ubGVuZ3RoO2U8aTtlKyspby5wdXNoKFwiPHNwYW4gdGFiaW5kZXg9JzAnPjwvc3Bhbj5cIik7dGhpcy5oYW5kbGVzPW4uYWRkKHQoby5qb2luKFwiXCIpKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmhhbmRsZXMsXCJ1aS1zbGlkZXItaGFuZGxlXCIsXCJ1aS1zdGF0ZS1kZWZhdWx0XCIpLHRoaXMuaGFuZGxlPXRoaXMuaGFuZGxlcy5lcSgwKSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihlKXt0KHRoaXMpLmRhdGEoXCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4XCIsZSkuYXR0cihcInRhYkluZGV4XCIsMCl9KX0sX2NyZWF0ZVJhbmdlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO2UucmFuZ2U/KCEwPT09ZS5yYW5nZSYmKGUudmFsdWVzP2UudmFsdWVzLmxlbmd0aCYmMiE9PWUudmFsdWVzLmxlbmd0aD9lLnZhbHVlcz1bZS52YWx1ZXNbMF0sZS52YWx1ZXNbMF1dOnQuaXNBcnJheShlLnZhbHVlcykmJihlLnZhbHVlcz1lLnZhbHVlcy5zbGljZSgwKSk6ZS52YWx1ZXM9W3RoaXMuX3ZhbHVlTWluKCksdGhpcy5fdmFsdWVNaW4oKV0pLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UubGVuZ3RoPyh0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLnJhbmdlLFwidWktc2xpZGVyLXJhbmdlLW1pbiB1aS1zbGlkZXItcmFuZ2UtbWF4XCIpLHRoaXMucmFuZ2UuY3NzKHtsZWZ0OlwiXCIsYm90dG9tOlwiXCJ9KSk6KHRoaXMucmFuZ2U9dChcIjxkaXY+XCIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksdGhpcy5fYWRkQ2xhc3ModGhpcy5yYW5nZSxcInVpLXNsaWRlci1yYW5nZVwiKSksXCJtaW5cIiE9PWUucmFuZ2UmJlwibWF4XCIhPT1lLnJhbmdlfHx0aGlzLl9hZGRDbGFzcyh0aGlzLnJhbmdlLFwidWktc2xpZGVyLXJhbmdlLVwiK2UucmFuZ2UpKToodGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLnJhbmdlPW51bGwpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24oKXt0aGlzLl9vZmYodGhpcy5oYW5kbGVzKSx0aGlzLl9vbih0aGlzLmhhbmRsZXMsdGhpcy5faGFuZGxlRXZlbnRzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oYW5kbGVzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oYW5kbGVzKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXMucmVtb3ZlKCksdGhpcy5yYW5nZSYmdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbyxhLHIsaCxsPXRoaXMsYz10aGlzLm9wdGlvbnM7cmV0dXJuIWMuZGlzYWJsZWQmJih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxpPXt4OmUucGFnZVgseTplLnBhZ2VZfSxzPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShpKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPU1hdGguYWJzKHMtbC52YWx1ZXMoZSkpOyhuPml8fG49PT1pJiYoZT09PWwuX2xhc3RDaGFuZ2VkVmFsdWV8fGwudmFsdWVzKGUpPT09Yy5taW4pKSYmKG49aSxvPXQodGhpcyksYT1lKX0pLCExIT09dGhpcy5fc3RhcnQoZSxhKSYmKHRoaXMuX21vdXNlU2xpZGluZz0hMCx0aGlzLl9oYW5kbGVJbmRleD1hLHRoaXMuX2FkZENsYXNzKG8sbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSxvLnRyaWdnZXIoXCJmb2N1c1wiKSxyPW8ub2Zmc2V0KCksaD0hdChlLnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5pcyhcIi51aS1zbGlkZXItaGFuZGxlXCIpLHRoaXMuX2NsaWNrT2Zmc2V0PWg/e2xlZnQ6MCx0b3A6MH06e2xlZnQ6ZS5wYWdlWC1yLmxlZnQtby53aWR0aCgpLzIsdG9wOmUucGFnZVktci50b3Atby5oZWlnaHQoKS8yLShwYXJzZUludChvLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KG8uY3NzKFwiYm9yZGVyQm90dG9tV2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQoby5jc3MoXCJtYXJnaW5Ub3BcIiksMTApfHwwKX0sdGhpcy5oYW5kbGVzLmhhc0NsYXNzKFwidWktc3RhdGUtaG92ZXJcIil8fHRoaXMuX3NsaWRlKGUsYSxzKSx0aGlzLl9hbmltYXRlT2ZmPSEwLCEwKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7dmFyIGU9e3g6dC5wYWdlWCx5OnQucGFnZVl9LGk9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGUpO3JldHVybiB0aGlzLl9zbGlkZSh0LHRoaXMuX2hhbmRsZUluZGV4LGkpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmhhbmRsZXMsbnVsbCxcInVpLXN0YXRlLWFjdGl2ZVwiKSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fc3RvcCh0LHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9jaGFuZ2UodCx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9jbGlja09mZnNldD1udWxsLHRoaXMuX2FuaW1hdGVPZmY9ITEsITF9LF9kZXRlY3RPcmllbnRhdGlvbjpmdW5jdGlvbigpe3RoaXMub3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uP1widmVydGljYWxcIjpcImhvcml6b250YWxcIn0sX25vcm1WYWx1ZUZyb21Nb3VzZTpmdW5jdGlvbih0KXt2YXIgZSxpLHMsbixvO3JldHVyblwiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbj8oZT10aGlzLmVsZW1lbnRTaXplLndpZHRoLGk9dC54LXRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC5sZWZ0OjApKTooZT10aGlzLmVsZW1lbnRTaXplLmhlaWdodCxpPXQueS10aGlzLmVsZW1lbnRPZmZzZXQudG9wLSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC50b3A6MCkpLHM9aS9lLHM+MSYmKHM9MSksczwwJiYocz0wKSxcInZlcnRpY2FsXCI9PT10aGlzLm9yaWVudGF0aW9uJiYocz0xLXMpLG49dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLG89dGhpcy5fdmFsdWVNaW4oKStzKm4sdGhpcy5fdHJpbUFsaWduVmFsdWUobyl9LF91aUhhc2g6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLGhhbmRsZUluZGV4OnQsdmFsdWU6dm9pZCAwIT09ZT9lOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkmJihzLnZhbHVlPXZvaWQgMCE9PWU/ZTp0aGlzLnZhbHVlcyh0KSxzLnZhbHVlcz1pfHx0aGlzLnZhbHVlcygpKSxzfSxfaGFzTXVsdGlwbGVWYWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGh9LF9zdGFydDpmdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl90cmlnZ2VyKFwic3RhcnRcIix0LHRoaXMuX3VpSGFzaChlKSl9LF9zbGlkZTpmdW5jdGlvbih0LGUsaSl7dmFyIHMsbj10aGlzLnZhbHVlKCksbz10aGlzLnZhbHVlcygpO3RoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkmJihzPXRoaXMudmFsdWVzKGU/MDoxKSxuPXRoaXMudmFsdWVzKGUpLDI9PT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmITA9PT10aGlzLm9wdGlvbnMucmFuZ2UmJihpPTA9PT1lP01hdGgubWluKHMsaSk6TWF0aC5tYXgocyxpKSksb1tlXT1pKSxpIT09biYmITEhPT10aGlzLl90cmlnZ2VyKFwic2xpZGVcIix0LHRoaXMuX3VpSGFzaChlLGksbykpJiYodGhpcy5faGFzTXVsdGlwbGVWYWx1ZXMoKT90aGlzLnZhbHVlcyhlLGkpOnRoaXMudmFsdWUoaSkpfSxfc3RvcDpmdW5jdGlvbih0LGUpe3RoaXMuX3RyaWdnZXIoXCJzdG9wXCIsdCx0aGlzLl91aUhhc2goZSkpfSxfY2hhbmdlOmZ1bmN0aW9uKHQsZSl7dGhpcy5fa2V5U2xpZGluZ3x8dGhpcy5fbW91c2VTbGlkaW5nfHwodGhpcy5fbGFzdENoYW5nZWRWYWx1ZT1lLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIix0LHRoaXMuX3VpSGFzaChlKSkpfSx2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHZvaWQgdGhpcy5fY2hhbmdlKG51bGwsMCkpOnRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbztpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXNbZV09dGhpcy5fdHJpbUFsaWduVmFsdWUoaSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdm9pZCB0aGlzLl9jaGFuZ2UobnVsbCxlKTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdmFsdWVzKCk7aWYoIXQuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpP3RoaXMuX3ZhbHVlcyhlKTp0aGlzLnZhbHVlKCk7Zm9yKHM9dGhpcy5vcHRpb25zLnZhbHVlcyxuPWFyZ3VtZW50c1swXSxvPTA7bzxzLmxlbmd0aDtvKz0xKXNbb109dGhpcy5fdHJpbUFsaWduVmFsdWUobltvXSksdGhpcy5fY2hhbmdlKG51bGwsbyk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXt2YXIgcyxuPTA7c3dpdGNoKFwicmFuZ2VcIj09PWUmJiEwPT09dGhpcy5vcHRpb25zLnJhbmdlJiYoXCJtaW5cIj09PWk/KHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXMoMCksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKTpcIm1heFwiPT09aSYmKHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXModGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgtMSksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKSksdC5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYobj10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksdGhpcy5fc3VwZXIoZSxpKSxlKXtjYXNlXCJvcmllbnRhdGlvblwiOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5fcmVtb3ZlQ2xhc3MoXCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWxcIikuX2FkZENsYXNzKFwidWktc2xpZGVyLVwiK3RoaXMub3JpZW50YXRpb24pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMub3B0aW9ucy5yYW5nZSYmdGhpcy5fcmVmcmVzaFJhbmdlKGkpLHRoaXMuaGFuZGxlcy5jc3MoXCJob3Jpem9udGFsXCI9PT1pP1wiYm90dG9tXCI6XCJsZWZ0XCIsXCJcIik7YnJlYWs7Y2FzZVwidmFsdWVcIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZVwidmFsdWVzXCI6Zm9yKHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCkscz1uLTE7cz49MDtzLS0pdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlXCJzdGVwXCI6Y2FzZVwibWluXCI6Y2FzZVwibWF4XCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9jYWxjdWxhdGVOZXdNYXgoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2VcInJhbmdlXCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX19LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLl90b2dnbGVDbGFzcyhudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIiwhIXQpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHQ9dGhpcy5fdHJpbUFsaWduVmFsdWUodCl9LF92YWx1ZXM6ZnVuY3Rpb24odCl7dmFyIGUsaSxzO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9dGhpcy5vcHRpb25zLnZhbHVlc1t0XSxlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpO2lmKHRoaXMuX2hhc011bHRpcGxlVmFsdWVzKCkpe2ZvcihpPXRoaXMub3B0aW9ucy52YWx1ZXMuc2xpY2UoKSxzPTA7czxpLmxlbmd0aDtzKz0xKWlbc109dGhpcy5fdHJpbUFsaWduVmFsdWUoaVtzXSk7cmV0dXJuIGl9cmV0dXJuW119LF90cmltQWxpZ25WYWx1ZTpmdW5jdGlvbih0KXtpZih0PD10aGlzLl92YWx1ZU1pbigpKXJldHVybiB0aGlzLl92YWx1ZU1pbigpO2lmKHQ+PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7dmFyIGU9dGhpcy5vcHRpb25zLnN0ZXA+MD90aGlzLm9wdGlvbnMuc3RlcDoxLGk9KHQtdGhpcy5fdmFsdWVNaW4oKSklZSxzPXQtaTtyZXR1cm4gMipNYXRoLmFicyhpKT49ZSYmKHMrPWk+MD9lOi1lKSxwYXJzZUZsb2F0KHMudG9GaXhlZCg1KSl9LF9jYWxjdWxhdGVOZXdNYXg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMubWF4LGU9dGhpcy5fdmFsdWVNaW4oKSxpPXRoaXMub3B0aW9ucy5zdGVwO3Q9TWF0aC5yb3VuZCgodC1lKS9pKSppK2UsdD50aGlzLm9wdGlvbnMubWF4JiYodC09aSksdGhpcy5tYXg9cGFyc2VGbG9hdCh0LnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gbnVsbCE9PXRoaXMub3B0aW9ucy5taW4mJih0PU1hdGgubWF4KHQsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSx0fSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24odCl7dmFyIGU9dC50b1N0cmluZygpLGk9ZS5pbmRleE9mKFwiLlwiKTtyZXR1cm4tMT09PWk/MDplLmxlbmd0aC1pLTF9LF92YWx1ZU1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWlufSxfdmFsdWVNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXh9LF9yZWZyZXNoUmFuZ2U6ZnVuY3Rpb24odCl7XCJ2ZXJ0aWNhbFwiPT09dCYmdGhpcy5yYW5nZS5jc3Moe3dpZHRoOlwiXCIsbGVmdDpcIlwifSksXCJob3Jpem9udGFsXCI9PT10JiZ0aGlzLnJhbmdlLmNzcyh7aGVpZ2h0OlwiXCIsYm90dG9tOlwiXCJ9KX0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciBlLGkscyxuLG8sYT10aGlzLm9wdGlvbnMucmFuZ2Uscj10aGlzLm9wdGlvbnMsaD10aGlzLGw9IXRoaXMuX2FuaW1hdGVPZmYmJnIuYW5pbWF0ZSxjPXt9O3RoaXMuX2hhc011bHRpcGxlVmFsdWVzKCk/dGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24ocyl7aT0oaC52YWx1ZXMocyktaC5fdmFsdWVNaW4oKSkvKGguX3ZhbHVlTWF4KCktaC5fdmFsdWVNaW4oKSkqMTAwLGNbXCJob3Jpem9udGFsXCI9PT1oLm9yaWVudGF0aW9uP1wibGVmdFwiOlwiYm90dG9tXCJdPWkrXCIlXCIsdCh0aGlzKS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXShjLHIuYW5pbWF0ZSksITA9PT1oLm9wdGlvbnMucmFuZ2UmJihcImhvcml6b250YWxcIj09PWgub3JpZW50YXRpb24/KDA9PT1zJiZoLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtsZWZ0OmkrXCIlXCJ9LHIuYW5pbWF0ZSksMT09PXMmJmgucmFuZ2VbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7d2lkdGg6aS1lK1wiJVwifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSkpOigwPT09cyYmaC5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7Ym90dG9tOmkrXCIlXCJ9LHIuYW5pbWF0ZSksMT09PXMmJmgucmFuZ2VbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OmktZStcIiVcIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pKSksZT1pfSk6KHM9dGhpcy52YWx1ZSgpLG49dGhpcy5fdmFsdWVNaW4oKSxvPXRoaXMuX3ZhbHVlTWF4KCksaT1vIT09bj8ocy1uKS8oby1uKSoxMDA6MCxjW1wiaG9yaXpvbnRhbFwiPT09dGhpcy5vcmllbnRhdGlvbj9cImxlZnRcIjpcImJvdHRvbVwiXT1pK1wiJVwiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKGMsci5hbmltYXRlKSxcIm1pblwiPT09YSYmXCJob3Jpem9udGFsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHt3aWR0aDppK1wiJVwifSxyLmFuaW1hdGUpLFwibWF4XCI9PT1hJiZcImhvcml6b250YWxcIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/XCJhbmltYXRlXCI6XCJjc3NcIl0oe3dpZHRoOjEwMC1pK1wiJVwifSxyLmFuaW1hdGUpLFwibWluXCI9PT1hJiZcInZlcnRpY2FsXCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtsP1wiYW5pbWF0ZVwiOlwiY3NzXCJdKHtoZWlnaHQ6aStcIiVcIn0sci5hbmltYXRlKSxcIm1heFwiPT09YSYmXCJ2ZXJ0aWNhbFwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD9cImFuaW1hdGVcIjpcImNzc1wiXSh7aGVpZ2h0OjEwMC1pK1wiJVwifSxyLmFuaW1hdGUpKX0sX2hhbmRsZUV2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbz10KGUudGFyZ2V0KS5kYXRhKFwidWktc2xpZGVyLWhhbmRsZS1pbmRleFwiKTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5IT01FOmNhc2UgdC51aS5rZXlDb2RlLkVORDpjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5SSUdIVDpjYXNlIHQudWkua2V5Q29kZS5ET1dOOmNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6aWYoZS5wcmV2ZW50RGVmYXVsdCgpLCF0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMCx0aGlzLl9hZGRDbGFzcyh0KGUudGFyZ2V0KSxudWxsLFwidWktc3RhdGUtYWN0aXZlXCIpLCExPT09dGhpcy5fc3RhcnQoZSxvKSkpcmV0dXJufXN3aXRjaChuPXRoaXMub3B0aW9ucy5zdGVwLGk9cz10aGlzLl9oYXNNdWx0aXBsZVZhbHVlcygpP3RoaXMudmFsdWVzKG8pOnRoaXMudmFsdWUoKSxlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6cz10aGlzLl92YWx1ZU1pbigpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkVORDpzPXRoaXMuX3ZhbHVlTWF4KCk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDpzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvdGhpcy5udW1QYWdlcyk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9ET1dOOnM9dGhpcy5fdHJpbUFsaWduVmFsdWUoaS0odGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS90aGlzLm51bVBhZ2VzKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDpjYXNlIHQudWkua2V5Q29kZS5SSUdIVDppZihpPT09dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpK24pO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDppZihpPT09dGhpcy5fdmFsdWVNaW4oKSlyZXR1cm47cz10aGlzLl90cmltQWxpZ25WYWx1ZShpLW4pfXRoaXMuX3NsaWRlKGUsbyxzKX0sa2V5dXA6ZnVuY3Rpb24oZSl7dmFyIGk9dChlLnRhcmdldCkuZGF0YShcInVpLXNsaWRlci1oYW5kbGUtaW5kZXhcIik7dGhpcy5fa2V5U2xpZGluZyYmKHRoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fc3RvcChlLGkpLHRoaXMuX2NoYW5nZShlLGkpLHRoaXMuX3JlbW92ZUNsYXNzKHQoZS50YXJnZXQpLG51bGwsXCJ1aS1zdGF0ZS1hY3RpdmVcIikpfX19KSx0LndpZGdldChcInVpLnNvcnRhYmxlXCIsdC51aS5tb3VzZSx7dmVyc2lvbjpcIjEuMTIuMVwiLHdpZGdldEV2ZW50UHJlZml4Olwic29ydFwiLHJlYWR5OiExLG9wdGlvbnM6e2FwcGVuZFRvOlwicGFyZW50XCIsYXhpczohMSxjb25uZWN0V2l0aDohMSxjb250YWlubWVudDohMSxjdXJzb3I6XCJhdXRvXCIsY3Vyc29yQXQ6ITEsZHJvcE9uRW1wdHk6ITAsZm9yY2VQbGFjZWhvbGRlclNpemU6ITEsZm9yY2VIZWxwZXJTaXplOiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjpcIm9yaWdpbmFsXCIsaXRlbXM6XCI+ICpcIixvcGFjaXR5OiExLHBsYWNlaG9sZGVyOiExLHJldmVydDohMSxzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc2NvcGU6XCJkZWZhdWx0XCIsdG9sZXJhbmNlOlwiaW50ZXJzZWN0XCIsekluZGV4OjFlMyxhY3RpdmF0ZTpudWxsLGJlZm9yZVN0b3A6bnVsbCxjaGFuZ2U6bnVsbCxkZWFjdGl2YXRlOm51bGwsb3V0Om51bGwsb3ZlcjpudWxsLHJlY2VpdmU6bnVsbCxyZW1vdmU6bnVsbCxzb3J0Om51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdXBkYXRlOm51bGx9LF9pc092ZXJBeGlzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm4gdD49ZSYmdDxlK2l9LF9pc0Zsb2F0aW5nOmZ1bmN0aW9uKHQpe3JldHVybi9sZWZ0fHJpZ2h0Ly50ZXN0KHQuY3NzKFwiZmxvYXRcIikpfHwvaW5saW5lfHRhYmxlLWNlbGwvLnRlc3QodC5jc3MoXCJkaXNwbGF5XCIpKX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5fYWRkQ2xhc3MoXCJ1aS1zb3J0YWJsZVwiKSx0aGlzLnJlZnJlc2goKSx0aGlzLm9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5fbW91c2VJbml0KCksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5yZWFkeT0hMH0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe3RoaXMuX3N1cGVyKHQsZSksXCJoYW5kbGVcIj09PXQmJnRoaXMuX3NldEhhbmRsZUNsYXNzTmFtZSgpfSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQuZmluZChcIi51aS1zb3J0YWJsZS1oYW5kbGVcIiksXCJ1aS1zb3J0YWJsZS1oYW5kbGVcIiksdC5lYWNoKHRoaXMuaXRlbXMsZnVuY3Rpb24oKXtlLl9hZGRDbGFzcyh0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGFuZGxlP3RoaXMuaXRlbS5maW5kKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oYW5kbGUpOnRoaXMuaXRlbSxcInVpLXNvcnRhYmxlLWhhbmRsZVwiKX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgdD10aGlzLml0ZW1zLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuaXRlbXNbdF0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZStcIi1pdGVtXCIpO3JldHVybiB0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUsaSl7dmFyIHM9bnVsbCxuPSExLG89dGhpcztyZXR1cm4hdGhpcy5yZXZlcnRpbmcmJighdGhpcy5vcHRpb25zLmRpc2FibGVkJiZcInN0YXRpY1wiIT09dGhpcy5vcHRpb25zLnR5cGUmJih0aGlzLl9yZWZyZXNoSXRlbXMoZSksdChlLnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtpZih0LmRhdGEodGhpcyxvLndpZGdldE5hbWUrXCItaXRlbVwiKT09PW8pcmV0dXJuIHM9dCh0aGlzKSwhMX0pLHQuZGF0YShlLnRhcmdldCxvLndpZGdldE5hbWUrXCItaXRlbVwiKT09PW8mJihzPXQoZS50YXJnZXQpKSwhIXMmJighKHRoaXMub3B0aW9ucy5oYW5kbGUmJiFpJiYodCh0aGlzLm9wdGlvbnMuaGFuZGxlLHMpLmZpbmQoXCIqXCIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PWUudGFyZ2V0JiYobj0hMCl9KSwhbikpJiYodGhpcy5jdXJyZW50SXRlbT1zLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksITApKSkpfSxfbW91c2VTdGFydDpmdW5jdGlvbihlLGkscyl7dmFyIG4sbyxhPXRoaXMub3B0aW9ucztpZih0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcyx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIoZSksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLHRoaXMub2Zmc2V0PXRoaXMuY3VycmVudEl0ZW0ub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LHQuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDplLnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOmUucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIsXCJhYnNvbHV0ZVwiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcyhcInBvc2l0aW9uXCIpLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLHRoaXMub3JpZ2luYWxQYWdlWD1lLnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT1lLnBhZ2VZLGEuY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoYS5jdXJzb3JBdCksdGhpcy5kb21Qb3NpdGlvbj17cHJldjp0aGlzLmN1cnJlbnRJdGVtLnByZXYoKVswXSxwYXJlbnQ6dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXX0sdGhpcy5oZWxwZXJbMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmN1cnJlbnRJdGVtLmhpZGUoKSx0aGlzLl9jcmVhdGVQbGFjZWhvbGRlcigpLGEuY29udGFpbm1lbnQmJnRoaXMuX3NldENvbnRhaW5tZW50KCksYS5jdXJzb3ImJlwiYXV0b1wiIT09YS5jdXJzb3ImJihvPXRoaXMuZG9jdW1lbnQuZmluZChcImJvZHlcIiksdGhpcy5zdG9yZWRDdXJzb3I9by5jc3MoXCJjdXJzb3JcIiksby5jc3MoXCJjdXJzb3JcIixhLmN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0PXQoXCI8c3R5bGU+KnsgY3Vyc29yOiBcIithLmN1cnNvcitcIiAhaW1wb3J0YW50OyB9PC9zdHlsZT5cIikuYXBwZW5kVG8obykpLGEub3BhY2l0eSYmKHRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIikmJih0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIikpLHRoaXMuaGVscGVyLmNzcyhcIm9wYWNpdHlcIixhLm9wYWNpdHkpKSxhLnpJbmRleCYmKHRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiKSYmKHRoaXMuX3N0b3JlZFpJbmRleD10aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIikpLHRoaXMuaGVscGVyLmNzcyhcInpJbmRleFwiLGEuekluZGV4KSksdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZcIkhUTUxcIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUmJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKFwic3RhcnRcIixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksIXMpZm9yKG49dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO24+PTA7bi0tKXRoaXMuY29udGFpbmVyc1tuXS5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSx0aGlzLl91aUhhc2godGhpcykpO3JldHVybiB0LnVpLmRkbWFuYWdlciYmKHQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdC51aS5kZG1hbmFnZXImJiFhLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsZSksdGhpcy5kcmFnZ2luZz0hMCx0aGlzLl9hZGRDbGFzcyh0aGlzLmhlbHBlcixcInVpLXNvcnRhYmxlLWhlbHBlclwiKSx0aGlzLl9tb3VzZURyYWcoZSksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10aGlzLm9wdGlvbnMscj0hMTtmb3IodGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oXCJhYnNvbHV0ZVwiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpLHRoaXMub3B0aW9ucy5zY3JvbGwmJih0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJlwiSFRNTFwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZT8odGhpcy5vdmVyZmxvd09mZnNldC50b3ArdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LWUucGFnZVk8YS5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3ArYS5zY3JvbGxTcGVlZDplLnBhZ2VZLXRoaXMub3ZlcmZsb3dPZmZzZXQudG9wPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AtYS5zY3JvbGxTcGVlZCksdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0K3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLWUucGFnZVg8YS5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCthLnNjcm9sbFNwZWVkOmUucGFnZVgtdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0PGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1hLnNjcm9sbFNwZWVkKSk6KGUucGFnZVktdGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKTxhLnNjcm9sbFNlbnNpdGl2aXR5P3I9dGhpcy5kb2N1bWVudC5zY3JvbGxUb3AodGhpcy5kb2N1bWVudC5zY3JvbGxUb3AoKS1hLnNjcm9sbFNwZWVkKTp0aGlzLndpbmRvdy5oZWlnaHQoKS0oZS5wYWdlWS10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpKTxhLnNjcm9sbFNlbnNpdGl2aXR5JiYocj10aGlzLmRvY3VtZW50LnNjcm9sbFRvcCh0aGlzLmRvY3VtZW50LnNjcm9sbFRvcCgpK2Euc2Nyb2xsU3BlZWQpKSxlLnBhZ2VYLXRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpPGEuc2Nyb2xsU2Vuc2l0aXZpdHk/cj10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQodGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KCktYS5zY3JvbGxTcGVlZCk6dGhpcy53aW5kb3cud2lkdGgoKS0oZS5wYWdlWC10aGlzLmRvY3VtZW50LnNjcm9sbExlZnQoKSk8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dGhpcy5kb2N1bWVudC5zY3JvbGxMZWZ0KHRoaXMuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpK2Euc2Nyb2xsU3BlZWQpKSksITEhPT1yJiZ0LnVpLmRkbWFuYWdlciYmIWEuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbyhcImFic29sdXRlXCIpLHRoaXMub3B0aW9ucy5heGlzJiZcInlcIj09PXRoaXMub3B0aW9ucy5heGlzfHwodGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrXCJweFwiKSx0aGlzLm9wdGlvbnMuYXhpcyYmXCJ4XCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8KHRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCtcInB4XCIpLGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlpZihzPXRoaXMuaXRlbXNbaV0sbj1zLml0ZW1bMF0sKG89dGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKHMpKSYmcy5pbnN0YW5jZT09PXRoaXMuY3VycmVudENvbnRhaW5lciYmIShuPT09dGhpcy5jdXJyZW50SXRlbVswXXx8dGhpcy5wbGFjZWhvbGRlclsxPT09bz9cIm5leHRcIjpcInByZXZcIl0oKVswXT09PW58fHQuY29udGFpbnModGhpcy5wbGFjZWhvbGRlclswXSxuKXx8XCJzZW1pLWR5bmFtaWNcIj09PXRoaXMub3B0aW9ucy50eXBlJiZ0LmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSxuKSkpe2lmKHRoaXMuZGlyZWN0aW9uPTE9PT1vP1wiZG93blwiOlwidXBcIixcInBvaW50ZXJcIiE9PXRoaXMub3B0aW9ucy50b2xlcmFuY2UmJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKWJyZWFrO3RoaXMuX3JlYXJyYW5nZShlLHMpLHRoaXMuX3RyaWdnZXIoXCJjaGFuZ2VcIixlLHRoaXMuX3VpSGFzaCgpKTticmVha31yZXR1cm4gdGhpcy5fY29udGFjdENvbnRhaW5lcnMoZSksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxlKSx0aGlzLl90cmlnZ2VyKFwic29ydFwiLGUsdGhpcy5fdWlIYXNoKCkpLHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMsITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSxpKXtpZihlKXtpZih0LnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsZSksdGhpcy5vcHRpb25zLnJldmVydCl7dmFyIHM9dGhpcyxuPXRoaXMucGxhY2Vob2xkZXIub2Zmc2V0KCksbz10aGlzLm9wdGlvbnMuYXhpcyxhPXt9O28mJlwieFwiIT09b3x8KGEubGVmdD1uLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLG8mJlwieVwiIT09b3x8KGEudG9wPW4udG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApKSx0aGlzLnJldmVydGluZz0hMCx0KHRoaXMuaGVscGVyKS5hbmltYXRlKGEscGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydCwxMCl8fDUwMCxmdW5jdGlvbigpe3MuX2NsZWFyKGUpfSl9ZWxzZSB0aGlzLl9jbGVhcihlLGkpO3JldHVybiExfX0sY2FuY2VsOmZ1bmN0aW9uKCl7aWYodGhpcy5kcmFnZ2luZyl7dGhpcy5fbW91c2VVcChuZXcgdC5FdmVudChcIm1vdXNldXBcIix7dGFyZ2V0Om51bGx9KSksXCJvcmlnaW5hbFwiPT09dGhpcy5vcHRpb25zLmhlbHBlcj8odGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmN1cnJlbnRJdGVtLFwidWktc29ydGFibGUtaGVscGVyXCIpKTp0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodmFyIGU9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuY29udGFpbmVyc1tlXS5fdHJpZ2dlcihcImRlYWN0aXZhdGVcIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoXCJvdXRcIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSxcIm9yaWdpbmFsXCIhPT10aGlzLm9wdGlvbnMuaGVscGVyJiZ0aGlzLmhlbHBlciYmdGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdC5leHRlbmQodGhpcyx7aGVscGVyOm51bGwsZHJhZ2dpbmc6ITEscmV2ZXJ0aW5nOiExLF9ub0ZpbmFsU29ydDpudWxsfSksdGhpcy5kb21Qb3NpdGlvbi5wcmV2P3QodGhpcy5kb21Qb3NpdGlvbi5wcmV2KS5hZnRlcih0aGlzLmN1cnJlbnRJdGVtKTp0KHRoaXMuZG9tUG9zaXRpb24ucGFyZW50KS5wcmVwZW5kKHRoaXMuY3VycmVudEl0ZW0pKSx0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeShlJiZlLmNvbm5lY3RlZCkscz1bXTtyZXR1cm4gZT1lfHx7fSx0KGkpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT0odChlLml0ZW18fHRoaXMpLmF0dHIoZS5hdHRyaWJ1dGV8fFwiaWRcIil8fFwiXCIpLm1hdGNoKGUuZXhwcmVzc2lvbnx8LyguKylbXFwtPV9dKC4rKS8pO2kmJnMucHVzaCgoZS5rZXl8fGlbMV0rXCJbXVwiKStcIj1cIisoZS5rZXkmJmUuZXhwcmVzc2lvbj9pWzFdOmlbMl0pKX0pLCFzLmxlbmd0aCYmZS5rZXkmJnMucHVzaChlLmtleStcIj1cIikscy5qb2luKFwiJlwiKX0sdG9BcnJheTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KGUmJmUuY29ubmVjdGVkKSxzPVtdO3JldHVybiBlPWV8fHt9LGkuZWFjaChmdW5jdGlvbigpe3MucHVzaCh0KGUuaXRlbXx8dGhpcykuYXR0cihlLmF0dHJpYnV0ZXx8XCJpZFwiKXx8XCJcIil9KSxzfSxfaW50ZXJzZWN0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LGk9ZSt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHM9dGhpcy5wb3NpdGlvbkFicy50b3Asbj1zK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LG89dC5sZWZ0LGE9byt0LndpZHRoLHI9dC50b3AsaD1yK3QuaGVpZ2h0LGw9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGM9dGhpcy5vZmZzZXQuY2xpY2subGVmdCx1PVwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHMrbD5yJiZzK2w8aCxkPVwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fGUrYz5vJiZlK2M8YSxwPXUmJmQ7cmV0dXJuXCJwb2ludGVyXCI9PT10aGlzLm9wdGlvbnMudG9sZXJhbmNlfHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8XCJwb2ludGVyXCIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiZ0aGlzLmhlbHBlclByb3BvcnRpb25zW3RoaXMuZmxvYXRpbmc/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJdPnRbdGhpcy5mbG9hdGluZz9cIndpZHRoXCI6XCJoZWlnaHRcIl0/cDpvPGUrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjxhJiZyPHMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmbi10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGh9LF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6ZnVuY3Rpb24odCl7dmFyIGUsaSxzPVwieFwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy50b3ArdGhpcy5vZmZzZXQuY2xpY2sudG9wLHQudG9wLHQuaGVpZ2h0KSxuPVwieVwiPT09dGhpcy5vcHRpb25zLmF4aXN8fHRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0LHQud2lkdGgpO3JldHVybiEoIXN8fCFuKSYmKGU9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksaT10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpLHRoaXMuZmxvYXRpbmc/XCJyaWdodFwiPT09aXx8XCJkb3duXCI9PT1lPzI6MTplJiYoXCJkb3duXCI9PT1lPzI6MSkpfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxpPXRoaXMuX2lzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0K3Qud2lkdGgvMix0LndpZHRoKSxzPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLG49dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mbG9hdGluZyYmbj9cInJpZ2h0XCI9PT1uJiZpfHxcImxlZnRcIj09PW4mJiFpOnMmJihcImRvd25cIj09PXMmJmV8fFwidXBcIj09PXMmJiFlKX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciB0PXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gMCE9PXQmJih0PjA/XCJkb3duXCI6XCJ1cFwiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIDAhPT10JiYodD4wP1wicmlnaHRcIjpcImxlZnRcIil9LHJlZnJlc2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlZnJlc2hJdGVtcyh0KSx0aGlzLl9zZXRIYW5kbGVDbGFzc05hbWUoKSx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzfSxfY29ubmVjdFdpdGg6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuIHQuY29ubmVjdFdpdGguY29uc3RydWN0b3I9PT1TdHJpbmc/W3QuY29ubmVjdFdpdGhdOnQuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXtyLnB1c2godGhpcyl9dmFyIHMsbixvLGEscj1bXSxoPVtdLGw9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihsJiZlKWZvcihzPWwubGVuZ3RoLTE7cz49MDtzLS0pZm9yKG89dChsW3NdLHRoaXMuZG9jdW1lbnRbMF0pLG49by5sZW5ndGgtMTtuPj0wO24tLSkoYT10LmRhdGEob1tuXSx0aGlzLndpZGdldEZ1bGxOYW1lKSkmJmEhPT10aGlzJiYhYS5vcHRpb25zLmRpc2FibGVkJiZoLnB1c2goW3QuaXNGdW5jdGlvbihhLm9wdGlvbnMuaXRlbXMpP2Eub3B0aW9ucy5pdGVtcy5jYWxsKGEuZWxlbWVudCk6dChhLm9wdGlvbnMuaXRlbXMsYS5lbGVtZW50KS5ub3QoXCIudWktc29ydGFibGUtaGVscGVyXCIpLm5vdChcIi51aS1zb3J0YWJsZS1wbGFjZWhvbGRlclwiKSxhXSk7Zm9yKGgucHVzaChbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KFwiLnVpLXNvcnRhYmxlLWhlbHBlclwiKS5ub3QoXCIudWktc29ydGFibGUtcGxhY2Vob2xkZXJcIiksdGhpc10pLHM9aC5sZW5ndGgtMTtzPj0wO3MtLSloW3NdWzBdLmVhY2goaSk7cmV0dXJuIHQocil9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0uZmluZChcIjpkYXRhKFwiK3RoaXMud2lkZ2V0TmFtZStcIi1pdGVtKVwiKTt0aGlzLml0ZW1zPXQuZ3JlcCh0aGlzLml0ZW1zLGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKGVbaV09PT10Lml0ZW1bMF0pcmV0dXJuITE7cmV0dXJuITB9KX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihlKXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGkscyxuLG8sYSxyLGgsbCxjPXRoaXMuaXRlbXMsdT1bW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSxlLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxkPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoZCYmdGhpcy5yZWFkeSlmb3IoaT1kLmxlbmd0aC0xO2k+PTA7aS0tKWZvcihuPXQoZFtpXSx0aGlzLmRvY3VtZW50WzBdKSxzPW4ubGVuZ3RoLTE7cz49MDtzLS0pKG89dC5kYXRhKG5bc10sdGhpcy53aWRnZXRGdWxsTmFtZSkpJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmKHUucHVzaChbdC5pc0Z1bmN0aW9uKG8ub3B0aW9ucy5pdGVtcyk/by5vcHRpb25zLml0ZW1zLmNhbGwoby5lbGVtZW50WzBdLGUse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCksb10pLHRoaXMuY29udGFpbmVycy5wdXNoKG8pKTtmb3IoaT11Lmxlbmd0aC0xO2k+PTA7aS0tKWZvcihhPXVbaV1bMV0scj11W2ldWzBdLHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspaD10KHJbc10pLGguZGF0YSh0aGlzLndpZGdldE5hbWUrXCItaXRlbVwiLGEpLGMucHVzaCh7aXRlbTpoLGluc3RhbmNlOmEsd2lkdGg6MCxoZWlnaHQ6MCxsZWZ0OjAsdG9wOjB9KX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbihlKXt0aGlzLmZsb2F0aW5nPSEhdGhpcy5pdGVtcy5sZW5ndGgmJihcInhcIj09PXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLl9pc0Zsb2F0aW5nKHRoaXMuaXRlbXNbMF0uaXRlbSkpLHRoaXMub2Zmc2V0UGFyZW50JiZ0aGlzLmhlbHBlciYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSk7dmFyIGkscyxuLG87Zm9yKGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlzPXRoaXMuaXRlbXNbaV0scy5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZzLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdfHwobj10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD90KHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LHMuaXRlbSk6cy5pdGVtLGV8fChzLndpZHRoPW4ub3V0ZXJXaWR0aCgpLHMuaGVpZ2h0PW4ub3V0ZXJIZWlnaHQoKSksbz1uLm9mZnNldCgpLHMubGVmdD1vLmxlZnQscy50b3A9by50b3ApO2lmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKHRoaXMpO2Vsc2UgZm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKW89dGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmxlZnQ9by5sZWZ0LHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS50b3A9by50b3AsdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLndpZHRoPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVyV2lkdGgoKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVySGVpZ2h0KCk7cmV0dXJuIHRoaXN9LF9jcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbihlKXtlPWV8fHRoaXM7dmFyIGkscz1lLm9wdGlvbnM7cy5wbGFjZWhvbGRlciYmcy5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciE9PVN0cmluZ3x8KGk9cy5wbGFjZWhvbGRlcixzLnBsYWNlaG9sZGVyPXtlbGVtZW50OmZ1bmN0aW9uKCl7dmFyIHM9ZS5jdXJyZW50SXRlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49dChcIjxcIitzK1wiPlwiLGUuZG9jdW1lbnRbMF0pO3JldHVybiBlLl9hZGRDbGFzcyhuLFwidWktc29ydGFibGUtcGxhY2Vob2xkZXJcIixpfHxlLmN1cnJlbnRJdGVtWzBdLmNsYXNzTmFtZSkuX3JlbW92ZUNsYXNzKG4sXCJ1aS1zb3J0YWJsZS1oZWxwZXJcIiksXCJ0Ym9keVwiPT09cz9lLl9jcmVhdGVUclBsYWNlaG9sZGVyKGUuY3VycmVudEl0ZW0uZmluZChcInRyXCIpLmVxKDApLHQoXCI8dHI+XCIsZS5kb2N1bWVudFswXSkuYXBwZW5kVG8obikpOlwidHJcIj09PXM/ZS5fY3JlYXRlVHJQbGFjZWhvbGRlcihlLmN1cnJlbnRJdGVtLG4pOlwiaW1nXCI9PT1zJiZuLmF0dHIoXCJzcmNcIixlLmN1cnJlbnRJdGVtLmF0dHIoXCJzcmNcIikpLGl8fG4uY3NzKFwidmlzaWJpbGl0eVwiLFwiaGlkZGVuXCIpLG59LHVwZGF0ZTpmdW5jdGlvbih0LG4pe2kmJiFzLmZvcmNlUGxhY2Vob2xkZXJTaXplfHwobi5oZWlnaHQoKXx8bi5oZWlnaHQoZS5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1RvcFwiKXx8MCwxMCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoXCJwYWRkaW5nQm90dG9tXCIpfHwwLDEwKSksbi53aWR0aCgpfHxuLndpZHRoKGUuY3VycmVudEl0ZW0uaW5uZXJXaWR0aCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ0xlZnRcIil8fDAsMTApLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKFwicGFkZGluZ1JpZ2h0XCIpfHwwLDEwKSkpfX0pLGUucGxhY2Vob2xkZXI9dChzLnBsYWNlaG9sZGVyLmVsZW1lbnQuY2FsbChlLmVsZW1lbnQsZS5jdXJyZW50SXRlbSkpLGUuY3VycmVudEl0ZW0uYWZ0ZXIoZS5wbGFjZWhvbGRlcikscy5wbGFjZWhvbGRlci51cGRhdGUoZSxlLnBsYWNlaG9sZGVyKX0sX2NyZWF0ZVRyUGxhY2Vob2xkZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10aGlzO2UuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dChcIjx0ZD4mIzE2MDs8L3RkPlwiLHMuZG9jdW1lbnRbMF0pLmF0dHIoXCJjb2xzcGFuXCIsdCh0aGlzKS5hdHRyKFwiY29sc3BhblwiKXx8MSkuYXBwZW5kVG8oaSl9KX0sX2NvbnRhY3RDb250YWluZXJzOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGEscixoLGwsYyx1LGQ9bnVsbCxwPW51bGw7Zm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKWlmKCF0LmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWlmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKGQmJnQuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sZC5lbGVtZW50WzBdKSljb250aW51ZTtkPXRoaXMuY29udGFpbmVyc1tpXSxwPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcihcIm91dFwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTtpZihkKWlmKDE9PT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoKXRoaXMuY29udGFpbmVyc1twXS5jb250YWluZXJDYWNoZS5vdmVyfHwodGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xKTtlbHNle2ZvcihuPTFlNCxvPW51bGwsYz1kLmZsb2F0aW5nfHx0aGlzLl9pc0Zsb2F0aW5nKHRoaXMuY3VycmVudEl0ZW0pLGE9Yz9cImxlZnRcIjpcInRvcFwiLHI9Yz9cIndpZHRoXCI6XCJoZWlnaHRcIix1PWM/XCJwYWdlWFwiOlwicGFnZVlcIixzPXRoaXMuaXRlbXMubGVuZ3RoLTE7cz49MDtzLS0pdC5jb250YWlucyh0aGlzLmNvbnRhaW5lcnNbcF0uZWxlbWVudFswXSx0aGlzLml0ZW1zW3NdLml0ZW1bMF0pJiZ0aGlzLml0ZW1zW3NdLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiYoaD10aGlzLml0ZW1zW3NdLml0ZW0ub2Zmc2V0KClbYV0sbD0hMSxlW3VdLWg+dGhpcy5pdGVtc1tzXVtyXS8yJiYobD0hMCksTWF0aC5hYnMoZVt1XS1oKTxuJiYobj1NYXRoLmFicyhlW3VdLWgpLG89dGhpcy5pdGVtc1tzXSx0aGlzLmRpcmVjdGlvbj1sP1widXBcIjpcImRvd25cIikpO2lmKCFvJiYhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5KXJldHVybjtpZih0aGlzLmN1cnJlbnRDb250YWluZXI9PT10aGlzLmNvbnRhaW5lcnNbcF0pcmV0dXJuIHZvaWQodGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbcF0uX3RyaWdnZXIoXCJvdmVyXCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5jdXJyZW50Q29udGFpbmVyLmNvbnRhaW5lckNhY2hlLm92ZXI9MSkpO28/dGhpcy5fcmVhcnJhbmdlKGUsbyxudWxsLCEwKTp0aGlzLl9yZWFycmFuZ2UoZSxudWxsLHRoaXMuY29udGFpbmVyc1twXS5lbGVtZW50LCEwKSx0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwiY2hhbmdlXCIsZSx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcF0sdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3BdLl90cmlnZ2VyKFwib3ZlclwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcF0uY29udGFpbmVyQ2FjaGUub3Zlcj0xfX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10LmlzRnVuY3Rpb24oaS5oZWxwZXIpP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlLHRoaXMuY3VycmVudEl0ZW1dKSk6XCJjbG9uZVwiPT09aS5oZWxwZXI/dGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpOnRoaXMuY3VycmVudEl0ZW07cmV0dXJuIHMucGFyZW50cyhcImJvZHlcIikubGVuZ3RofHx0KFwicGFyZW50XCIhPT1pLmFwcGVuZFRvP2kuYXBwZW5kVG86dGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChzWzBdKSxzWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSYmKHRoaXMuX3N0b3JlZENTUz17d2lkdGg6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQscG9zaXRpb246dGhpcy5jdXJyZW50SXRlbS5jc3MoXCJwb3NpdGlvblwiKSx0b3A6dGhpcy5jdXJyZW50SXRlbS5jc3MoXCJ0b3BcIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcyhcImxlZnRcIil9KSxzWzBdLnN0eWxlLndpZHRoJiYhaS5mb3JjZUhlbHBlclNpemV8fHMud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSxzWzBdLnN0eWxlLmhlaWdodCYmIWkuZm9yY2VIZWxwZXJTaXplfHxzLmhlaWdodCh0aGlzLmN1cnJlbnRJdGVtLmhlaWdodCgpKSxzfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbihlKXtcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9ZS5zcGxpdChcIiBcIikpLHQuaXNBcnJheShlKSYmKGU9e2xlZnQ6K2VbMF0sdG9wOitlWzFdfHwwfSksXCJsZWZ0XCJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD1lLmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLFwicmlnaHRcImluIGUmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtZS5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksXCJ0b3BcImluIGUmJih0aGlzLm9mZnNldC5jbGljay50b3A9ZS50b3ArdGhpcy5tYXJnaW5zLnRvcCksXCJib3R0b21cImluIGUmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtZS5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgZT10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTtyZXR1cm5cImFic29sdXRlXCI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksZS50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJlwiaHRtbFwiPT09dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZ0LnVpLmllKSYmKGU9e3RvcDowLGxlZnQ6MH0pLHt0b3A6ZS50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCksbGVmdDplLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcyhcImJvcmRlckxlZnRXaWR0aFwiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYoXCJyZWxhdGl2ZVwiPT09dGhpcy5jc3NQb3NpdGlvbil7dmFyIHQ9dGhpcy5jdXJyZW50SXRlbS5wb3NpdGlvbigpO3JldHVybnt0b3A6dC50b3AtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcyhcInRvcFwiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dC5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoXCJsZWZ0XCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcyhcIm1hcmdpbkxlZnRcIiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcyhcIm1hcmdpblRvcFwiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBlLGkscyxuPXRoaXMub3B0aW9ucztcInBhcmVudFwiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksXCJkb2N1bWVudFwiIT09bi5jb250YWlubWVudCYmXCJ3aW5kb3dcIiE9PW4uY29udGFpbm1lbnR8fCh0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxcImRvY3VtZW50XCI9PT1uLmNvbnRhaW5tZW50P3RoaXMuZG9jdW1lbnQud2lkdGgoKTp0aGlzLndpbmRvdy53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKFwiZG9jdW1lbnRcIj09PW4uY29udGFpbm1lbnQ/dGhpcy5kb2N1bWVudC5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodDp0aGlzLndpbmRvdy5oZWlnaHQoKXx8dGhpcy5kb2N1bWVudFswXS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSksL14oZG9jdW1lbnR8d2luZG93fHBhcmVudCkkLy50ZXN0KG4uY29udGFpbm1lbnQpfHwoZT10KG4uY29udGFpbm1lbnQpWzBdLGk9dChuLmNvbnRhaW5tZW50KS5vZmZzZXQoKSxzPVwiaGlkZGVuXCIhPT10KGUpLmNzcyhcIm92ZXJmbG93XCIpLHRoaXMuY29udGFpbm1lbnQ9W2kubGVmdCsocGFyc2VJbnQodChlKS5jc3MoXCJib3JkZXJMZWZ0V2lkdGhcIiksMTApfHwwKSsocGFyc2VJbnQodChlKS5jc3MoXCJwYWRkaW5nTGVmdFwiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LGkudG9wKyhwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCkrKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ1RvcFwiKSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3AsaS5sZWZ0KyhzP01hdGgubWF4KGUuc2Nyb2xsV2lkdGgsZS5vZmZzZXRXaWR0aCk6ZS5vZmZzZXRXaWR0aCktKHBhcnNlSW50KHQoZSkuY3NzKFwiYm9yZGVyTGVmdFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ1JpZ2h0XCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxpLnRvcCsocz9NYXRoLm1heChlLnNjcm9sbEhlaWdodCxlLm9mZnNldEhlaWdodCk6ZS5vZmZzZXRIZWlnaHQpLShwYXJzZUludCh0KGUpLmNzcyhcImJvcmRlclRvcFdpZHRoXCIpLDEwKXx8MCktKHBhcnNlSW50KHQoZSkuY3NzKFwicGFkZGluZ0JvdHRvbVwiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdKX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKGUsaSl7aXx8KGk9dGhpcy5wb3NpdGlvbik7dmFyIHM9XCJhYnNvbHV0ZVwiPT09ZT8xOi0xLG49XCJhYnNvbHV0ZVwiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdJiZ0LmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxvPS8oaHRtbHxib2R5KS9pLnRlc3QoblswXS50YWdOYW1lKTtyZXR1cm57dG9wOmkudG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpzK3RoaXMub2Zmc2V0LnBhcmVudC50b3Aqcy0oXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bz8wOm4uc2Nyb2xsVG9wKCkpKnMsbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpzK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnMtKFwiZml4ZWRcIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpvPzA6bi5zY3JvbGxMZWZ0KCkpKnN9fSxfZ2VuZXJhdGVQb3NpdGlvbjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dGhpcy5vcHRpb25zLG89ZS5wYWdlWCxhPWUucGFnZVkscj1cImFic29sdXRlXCIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMuZG9jdW1lbnRbMF0mJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGg9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpO3JldHVyblwicmVsYXRpdmVcIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09dGhpcy5kb2N1bWVudFswXSYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPT10aGlzLm9mZnNldFBhcmVudFswXXx8KHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJihlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXSYmKG89dGhpcy5jb250YWlubWVudFswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdJiYoYT10aGlzLmNvbnRhaW5tZW50WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0mJihvPXRoaXMuY29udGFpbm1lbnRbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksXG5lLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdJiYoYT10aGlzLmNvbnRhaW5tZW50WzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLG4uZ3JpZCYmKGk9dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKGEtdGhpcy5vcmlnaW5hbFBhZ2VZKS9uLmdyaWRbMV0pKm4uZ3JpZFsxXSxhPXRoaXMuY29udGFpbm1lbnQ/aS10aGlzLm9mZnNldC5jbGljay50b3A+PXRoaXMuY29udGFpbm1lbnRbMV0mJmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPD10aGlzLmNvbnRhaW5tZW50WzNdP2k6aS10aGlzLm9mZnNldC5jbGljay50b3A+PXRoaXMuY29udGFpbm1lbnRbMV0/aS1uLmdyaWRbMV06aStuLmdyaWRbMV06aSxzPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWCkvbi5ncmlkWzBdKSpuLmdyaWRbMF0sbz10aGlzLmNvbnRhaW5tZW50P3MtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXSYmcy10aGlzLm9mZnNldC5jbGljay5sZWZ0PD10aGlzLmNvbnRhaW5tZW50WzJdP3M6cy10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj10aGlzLmNvbnRhaW5tZW50WzBdP3Mtbi5ncmlkWzBdOnMrbi5ncmlkWzBdOnMpKSx7dG9wOmEtdGhpcy5vZmZzZXQuY2xpY2sudG9wLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wKyhcImZpeGVkXCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTpoPzA6ci5zY3JvbGxUb3AoKSksbGVmdDpvLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsoXCJmaXhlZFwiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOmg/MDpyLnNjcm9sbExlZnQoKSl9fSxfcmVhcnJhbmdlOmZ1bmN0aW9uKHQsZSxpLHMpe2k/aVswXS5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKTplLml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSxcImRvd25cIj09PXRoaXMuZGlyZWN0aW9uP2UuaXRlbVswXTplLml0ZW1bMF0ubmV4dFNpYmxpbmcpLHRoaXMuY291bnRlcj10aGlzLmNvdW50ZXI/Kyt0aGlzLmNvdW50ZXI6MTt2YXIgbj10aGlzLmNvdW50ZXI7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtuPT09dGhpcy5jb3VudGVyJiZ0aGlzLnJlZnJlc2hQb3NpdGlvbnMoIXMpfSl9LF9jbGVhcjpmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkodCxlLGkpe3JldHVybiBmdW5jdGlvbihzKXtpLl90cmlnZ2VyKHQscyxlLl91aUhhc2goZSkpfX10aGlzLnJldmVydGluZz0hMTt2YXIgcyxuPVtdO2lmKCF0aGlzLl9ub0ZpbmFsU29ydCYmdGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKS5sZW5ndGgmJnRoaXMucGxhY2Vob2xkZXIuYmVmb3JlKHRoaXMuY3VycmVudEl0ZW0pLHRoaXMuX25vRmluYWxTb3J0PW51bGwsdGhpcy5oZWxwZXJbMF09PT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IocyBpbiB0aGlzLl9zdG9yZWRDU1MpXCJhdXRvXCIhPT10aGlzLl9zdG9yZWRDU1Nbc10mJlwic3RhdGljXCIhPT10aGlzLl9zdG9yZWRDU1Nbc118fCh0aGlzLl9zdG9yZWRDU1Nbc109XCJcIik7dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmN1cnJlbnRJdGVtLFwidWktc29ydGFibGUtaGVscGVyXCIpfWVsc2UgdGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHRoaXMuZnJvbU91dHNpZGUmJiFlJiZuLnB1c2goZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcihcInJlY2VpdmVcIix0LHRoaXMuX3VpSGFzaCh0aGlzLmZyb21PdXRzaWRlKSl9KSwhdGhpcy5mcm9tT3V0c2lkZSYmdGhpcy5kb21Qb3NpdGlvbi5wcmV2PT09dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KFwiLnVpLXNvcnRhYmxlLWhlbHBlclwiKVswXSYmdGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQ9PT10aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfHxlfHxuLnB1c2goZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcihcInVwZGF0ZVwiLHQsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKGV8fChuLnB1c2goZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcihcInJlbW92ZVwiLHQsdGhpcy5fdWlIYXNoKCkpfSksbi5wdXNoKGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXt0Ll90cmlnZ2VyKFwicmVjZWl2ZVwiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSxuLnB1c2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuX3RyaWdnZXIoXCJ1cGRhdGVcIixlLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKSxzPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtzPj0wO3MtLSllfHxuLnB1c2goaShcImRlYWN0aXZhdGVcIix0aGlzLHRoaXMuY29udGFpbmVyc1tzXSkpLHRoaXMuY29udGFpbmVyc1tzXS5jb250YWluZXJDYWNoZS5vdmVyJiYobi5wdXNoKGkoXCJvdXRcIix0aGlzLHRoaXMuY29udGFpbmVyc1tzXSkpLHRoaXMuY29udGFpbmVyc1tzXS5jb250YWluZXJDYWNoZS5vdmVyPTApO2lmKHRoaXMuc3RvcmVkQ3Vyc29yJiYodGhpcy5kb2N1bWVudC5maW5kKFwiYm9keVwiKS5jc3MoXCJjdXJzb3JcIix0aGlzLnN0b3JlZEN1cnNvciksdGhpcy5zdG9yZWRTdHlsZXNoZWV0LnJlbW92ZSgpKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoXCJvcGFjaXR5XCIsdGhpcy5fc3RvcmVkT3BhY2l0eSksdGhpcy5fc3RvcmVkWkluZGV4JiZ0aGlzLmhlbHBlci5jc3MoXCJ6SW5kZXhcIixcImF1dG9cIj09PXRoaXMuX3N0b3JlZFpJbmRleD9cIlwiOnRoaXMuX3N0b3JlZFpJbmRleCksdGhpcy5kcmFnZ2luZz0hMSxlfHx0aGlzLl90cmlnZ2VyKFwiYmVmb3JlU3RvcFwiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSx0aGlzLmNhbmNlbEhlbHBlclJlbW92YWx8fCh0aGlzLmhlbHBlclswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwpLCFlKXtmb3Iocz0wO3M8bi5sZW5ndGg7cysrKW5bc10uY2FsbCh0aGlzLHQpO3RoaXMuX3RyaWdnZXIoXCJzdG9wXCIsdCx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsIXRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXshMT09PXQuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cykmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24oZSl7dmFyIGk9ZXx8dGhpcztyZXR1cm57aGVscGVyOmkuaGVscGVyLHBsYWNlaG9sZGVyOmkucGxhY2Vob2xkZXJ8fHQoW10pLHBvc2l0aW9uOmkucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjppLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmkucG9zaXRpb25BYnMsaXRlbTppLmN1cnJlbnRJdGVtLHNlbmRlcjplP2UuZWxlbWVudDpudWxsfX19KTt0LndpZGdldChcInVpLnNwaW5uZXJcIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlZmF1bHRFbGVtZW50OlwiPGlucHV0PlwiLHdpZGdldEV2ZW50UHJlZml4Olwic3BpblwiLG9wdGlvbnM6e2NsYXNzZXM6e1widWktc3Bpbm5lclwiOlwidWktY29ybmVyLWFsbFwiLFwidWktc3Bpbm5lci1kb3duXCI6XCJ1aS1jb3JuZXItYnJcIixcInVpLXNwaW5uZXItdXBcIjpcInVpLWNvcm5lci10clwifSxjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246XCJ1aS1pY29uLXRyaWFuZ2xlLTEtc1wiLHVwOlwidWktaWNvbi10cmlhbmdsZS0xLW5cIn0saW5jcmVtZW50YWw6ITAsbWF4Om51bGwsbWluOm51bGwsbnVtYmVyRm9ybWF0Om51bGwscGFnZToxMCxzdGVwOjEsY2hhbmdlOm51bGwsc3BpbjpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0T3B0aW9uKFwibWF4XCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKFwibWluXCIsdGhpcy5vcHRpb25zLm1pbiksdGhpcy5fc2V0T3B0aW9uKFwic3RlcFwiLHRoaXMub3B0aW9ucy5zdGVwKSxcIlwiIT09dGhpcy52YWx1ZSgpJiZ0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksITApLHRoaXMuX2RyYXcoKSx0aGlzLl9vbih0aGlzLl9ldmVudHMpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoXCJhdXRvY29tcGxldGVcIil9fSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc3VwZXIoKSxpPXRoaXMuZWxlbWVudDtyZXR1cm4gdC5lYWNoKFtcIm1pblwiLFwibWF4XCIsXCJzdGVwXCJdLGZ1bmN0aW9uKHQscyl7dmFyIG49aS5hdHRyKHMpO251bGwhPW4mJm4ubGVuZ3RoJiYoZVtzXT1uKX0pLGV9LF9ldmVudHM6e2tleWRvd246ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQodCkmJnRoaXMuX2tleWRvd24odCkmJnQucHJldmVudERlZmF1bHQoKX0sa2V5dXA6XCJfc3RvcFwiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24odCl7aWYodGhpcy5jYW5jZWxCbHVyKXJldHVybiB2b2lkIGRlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7dGhpcy5fc3RvcCgpLHRoaXMuX3JlZnJlc2goKSx0aGlzLnByZXZpb3VzIT09dGhpcy5lbGVtZW50LnZhbCgpJiZ0aGlzLl90cmlnZ2VyKFwiY2hhbmdlXCIsdCl9LG1vdXNld2hlZWw6ZnVuY3Rpb24odCxlKXtpZihlKXtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KHQpKXJldHVybiExO3RoaXMuX3NwaW4oKGU+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCx0KSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcCh0KX0sMTAwKSx0LnByZXZlbnREZWZhdWx0KCl9fSxcIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b25cIjpmdW5jdGlvbihlKXtmdW5jdGlvbiBpKCl7dGhpcy5lbGVtZW50WzBdPT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKXx8KHRoaXMuZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIiksdGhpcy5wcmV2aW91cz1zLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1zfSkpfXZhciBzO3M9dGhpcy5lbGVtZW50WzBdPT09dC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKT90aGlzLnByZXZpb3VzOnRoaXMuZWxlbWVudC52YWwoKSxlLnByZXZlbnREZWZhdWx0KCksaS5jYWxsKHRoaXMpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsaS5jYWxsKHRoaXMpfSksITEhPT10aGlzLl9zdGFydChlKSYmdGhpcy5fcmVwZWF0KG51bGwsdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKFwidWktc3Bpbm5lci11cFwiKT8xOi0xLGUpfSxcIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uXCI6XCJfc3RvcFwiLFwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b25cIjpmdW5jdGlvbihlKXtpZih0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zdGF0ZS1hY3RpdmVcIikpcmV0dXJuITEhPT10aGlzLl9zdGFydChlKSYmdm9pZCB0aGlzLl9yZXBlYXQobnVsbCx0KGUuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoXCJ1aS1zcGlubmVyLXVwXCIpPzE6LTEsZSl9LFwibW91c2VsZWF2ZSAudWktc3Bpbm5lci1idXR0b25cIjpcIl9zdG9wXCJ9LF9lbmhhbmNlOmZ1bmN0aW9uKCl7dGhpcy51aVNwaW5uZXI9dGhpcy5lbGVtZW50LmF0dHIoXCJhdXRvY29tcGxldGVcIixcIm9mZlwiKS53cmFwKFwiPHNwYW4+XCIpLnBhcmVudCgpLmFwcGVuZChcIjxhPjwvYT48YT48L2E+XCIpfSxfZHJhdzpmdW5jdGlvbigpe3RoaXMuX2VuaGFuY2UoKSx0aGlzLl9hZGRDbGFzcyh0aGlzLnVpU3Bpbm5lcixcInVpLXNwaW5uZXJcIixcInVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudFwiKSx0aGlzLl9hZGRDbGFzcyhcInVpLXNwaW5uZXItaW5wdXRcIiksdGhpcy5lbGVtZW50LmF0dHIoXCJyb2xlXCIsXCJzcGluYnV0dG9uXCIpLHRoaXMuYnV0dG9ucz10aGlzLnVpU3Bpbm5lci5jaGlsZHJlbihcImFcIikuYXR0cihcInRhYkluZGV4XCIsLTEpLmF0dHIoXCJhcmlhLWhpZGRlblwiLCEwKS5idXR0b24oe2NsYXNzZXM6e1widWktYnV0dG9uXCI6XCJcIn19KSx0aGlzLl9yZW1vdmVDbGFzcyh0aGlzLmJ1dHRvbnMsXCJ1aS1jb3JuZXItYWxsXCIpLHRoaXMuX2FkZENsYXNzKHRoaXMuYnV0dG9ucy5maXJzdCgpLFwidWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci11cFwiKSx0aGlzLl9hZGRDbGFzcyh0aGlzLmJ1dHRvbnMubGFzdCgpLFwidWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci1kb3duXCIpLHRoaXMuYnV0dG9ucy5maXJzdCgpLmJ1dHRvbih7aWNvbjp0aGlzLm9wdGlvbnMuaWNvbnMudXAsc2hvd0xhYmVsOiExfSksdGhpcy5idXR0b25zLmxhc3QoKS5idXR0b24oe2ljb246dGhpcy5vcHRpb25zLmljb25zLmRvd24sc2hvd0xhYmVsOiExfSksdGhpcy5idXR0b25zLmhlaWdodCgpPk1hdGguY2VpbCguNSp0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKSkmJnRoaXMudWlTcGlubmVyLmhlaWdodCgpPjAmJnRoaXMudWlTcGlubmVyLmhlaWdodCh0aGlzLnVpU3Bpbm5lci5oZWlnaHQoKSl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxzPXQudWkua2V5Q29kZTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHMuVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLDEsZSksITA7Y2FzZSBzLkRPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC0xLGUpLCEwO2Nhc2Ugcy5QQUdFX1VQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCxpLnBhZ2UsZSksITA7Y2FzZSBzLlBBR0VfRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLWkucGFnZSxlKSwhMH1yZXR1cm4hMX0sX3N0YXJ0OmZ1bmN0aW9uKHQpe3JldHVybiEoIXRoaXMuc3Bpbm5pbmcmJiExPT09dGhpcy5fdHJpZ2dlcihcInN0YXJ0XCIsdCkpJiYodGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApfSxfcmVwZWF0OmZ1bmN0aW9uKHQsZSxpKXt0PXR8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCxlLGkpfSx0KSx0aGlzLl9zcGluKGUqdGhpcy5vcHRpb25zLnN0ZXAsaSl9LF9zcGluOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxpPXRoaXMuX2FkanVzdFZhbHVlKGkrdCp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSksdGhpcy5zcGlubmluZyYmITE9PT10aGlzLl90cmlnZ2VyKFwic3BpblwiLGUse3ZhbHVlOml9KXx8KHRoaXMuX3ZhbHVlKGkpLHRoaXMuY291bnRlcisrKX0sX2luY3JlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuaW5jcmVtZW50YWw7cmV0dXJuIGk/dC5pc0Z1bmN0aW9uKGkpP2koZSk6TWF0aC5mbG9vcihlKmUqZS81ZTQtZSplLzUwMCsxNyplLzIwMCsxKToxfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKHQ9TWF0aC5tYXgodCx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLHR9LF9wcmVjaXNpb25PZjpmdW5jdGlvbih0KXt2YXIgZT10LnRvU3RyaW5nKCksaT1lLmluZGV4T2YoXCIuXCIpO3JldHVybi0xPT09aT8wOmUubGVuZ3RoLWktMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscz10aGlzLm9wdGlvbnM7cmV0dXJuIGU9bnVsbCE9PXMubWluP3MubWluOjAsaT10LWUsaT1NYXRoLnJvdW5kKGkvcy5zdGVwKSpzLnN0ZXAsdD1lK2ksdD1wYXJzZUZsb2F0KHQudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLG51bGwhPT1zLm1heCYmdD5zLm1heD9zLm1heDpudWxsIT09cy5taW4mJnQ8cy5taW4/cy5taW46dH0sX3N0b3A6ZnVuY3Rpb24odCl7dGhpcy5zcGlubmluZyYmKGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcihcInN0b3BcIix0KSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG47aWYoXCJjdWx0dXJlXCI9PT10fHxcIm51bWJlckZvcm1hdFwiPT09dClyZXR1cm4gaT10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpLHRoaXMub3B0aW9uc1t0XT1lLHZvaWQgdGhpcy5lbGVtZW50LnZhbCh0aGlzLl9mb3JtYXQoaSkpO1wibWF4XCIhPT10JiZcIm1pblwiIT09dCYmXCJzdGVwXCIhPT10fHxcInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5fcGFyc2UoZSkpLFwiaWNvbnNcIj09PXQmJihzPXRoaXMuYnV0dG9ucy5maXJzdCgpLmZpbmQoXCIudWktaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhzLG51bGwsdGhpcy5vcHRpb25zLmljb25zLnVwKSx0aGlzLl9hZGRDbGFzcyhzLG51bGwsZS51cCksbj10aGlzLmJ1dHRvbnMubGFzdCgpLmZpbmQoXCIudWktaWNvblwiKSx0aGlzLl9yZW1vdmVDbGFzcyhuLG51bGwsdGhpcy5vcHRpb25zLmljb25zLmRvd24pLHRoaXMuX2FkZENsYXNzKG4sbnVsbCxlLmRvd24pKSx0aGlzLl9zdXBlcih0LGUpfSxfc2V0T3B0aW9uRGlzYWJsZWQ6ZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCksdGhpcy5fdG9nZ2xlQ2xhc3ModGhpcy51aVNwaW5uZXIsbnVsbCxcInVpLXN0YXRlLWRpc2FibGVkXCIsISF0KSx0aGlzLmVsZW1lbnQucHJvcChcImRpc2FibGVkXCIsISF0KSx0aGlzLmJ1dHRvbnMuYnV0dG9uKHQ/XCJkaXNhYmxlXCI6XCJlbmFibGVcIil9LF9zZXRPcHRpb25zOnIoZnVuY3Rpb24odCl7dGhpcy5fc3VwZXIodCl9KSxfcGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJlwiXCIhPT10JiYodD13aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5wYXJzZUZsb2F0KHQsMTAsdGhpcy5vcHRpb25zLmN1bHR1cmUpOit0KSxcIlwiPT09dHx8aXNOYU4odCk/bnVsbDp0fSxfZm9ybWF0OmZ1bmN0aW9uKHQpe3JldHVyblwiXCI9PT10P1wiXCI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KHQsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6dH0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7XCJhcmlhLXZhbHVlbWluXCI6dGhpcy5vcHRpb25zLm1pbixcImFyaWEtdmFsdWVtYXhcIjp0aGlzLm9wdGlvbnMubWF4LFwiYXJpYS12YWx1ZW5vd1wiOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0saXNWYWxpZDpmdW5jdGlvbigpe3ZhciB0PXRoaXMudmFsdWUoKTtyZXR1cm4gbnVsbCE9PXQmJnQ9PT10aGlzLl9hZGp1c3RWYWx1ZSh0KX0sX3ZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk7XCJcIiE9PXQmJm51bGwhPT0oaT10aGlzLl9wYXJzZSh0KSkmJihlfHwoaT10aGlzLl9hZGp1c3RWYWx1ZShpKSksdD10aGlzLl9mb3JtYXQoaSkpLHRoaXMuZWxlbWVudC52YWwodCksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIiwhMSkucmVtb3ZlQXR0cihcImF1dG9jb21wbGV0ZSByb2xlIGFyaWEtdmFsdWVtaW4gYXJpYS12YWx1ZW1heCBhcmlhLXZhbHVlbm93XCIpLHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCl9LHN0ZXBVcDpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBVcCh0KX0pLF9zdGVwVXA6ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKHR8fDEpKnRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl9zdG9wKCkpfSxzdGVwRG93bjpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBEb3duKHQpfSksX3N0ZXBEb3duOmZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0KCkmJih0aGlzLl9zcGluKCh0fHwxKSotdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHBhZ2VVcDpyKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBVcCgodHx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSkscGFnZURvd246cihmdW5jdGlvbih0KXt0aGlzLl9zdGVwRG93bigodHx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSksdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7cih0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLHQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aVNwaW5uZXJ9fSksITEhPT10LnVpQmFja0NvbXBhdCYmdC53aWRnZXQoXCJ1aS5zcGlubmVyXCIsdC51aS5zcGlubmVyLHtfZW5oYW5jZTpmdW5jdGlvbigpe3RoaXMudWlTcGlubmVyPXRoaXMuZWxlbWVudC5hdHRyKFwiYXV0b2NvbXBsZXRlXCIsXCJvZmZcIikud3JhcCh0aGlzLl91aVNwaW5uZXJIdG1sKCkpLnBhcmVudCgpLmFwcGVuZCh0aGlzLl9idXR0b25IdG1sKCkpfSxfdWlTcGlubmVySHRtbDpmdW5jdGlvbigpe3JldHVyblwiPHNwYW4+XCJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuXCI8YT48L2E+PGE+PC9hPlwifX0pO3QudWkuc3Bpbm5lcjt0LndpZGdldChcInVpLnRhYnNcIix7dmVyc2lvbjpcIjEuMTIuMVwiLGRlbGF5OjMwMCxvcHRpb25zOnthY3RpdmU6bnVsbCxjbGFzc2VzOntcInVpLXRhYnNcIjpcInVpLWNvcm5lci1hbGxcIixcInVpLXRhYnMtbmF2XCI6XCJ1aS1jb3JuZXItYWxsXCIsXCJ1aS10YWJzLXBhbmVsXCI6XCJ1aS1jb3JuZXItYm90dG9tXCIsXCJ1aS10YWJzLXRhYlwiOlwidWktY29ybmVyLXRvcFwifSxjb2xsYXBzaWJsZTohMSxldmVudDpcImNsaWNrXCIsaGVpZ2h0U3R5bGU6XCJjb250ZW50XCIsaGlkZTpudWxsLHNob3c6bnVsbCxhY3RpdmF0ZTpudWxsLGJlZm9yZUFjdGl2YXRlOm51bGwsYmVmb3JlTG9hZDpudWxsLGxvYWQ6bnVsbH0sX2lzTG9jYWw6ZnVuY3Rpb24oKXt2YXIgdD0vIy4qJC87cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBpLHM7aT1lLmhyZWYucmVwbGFjZSh0LFwiXCIpLHM9bG9jYXRpb24uaHJlZi5yZXBsYWNlKHQsXCJcIik7dHJ5e2k9ZGVjb2RlVVJJQ29tcG9uZW50KGkpfWNhdGNoKHQpe310cnl7cz1kZWNvZGVVUklDb21wb25lbnQocyl9Y2F0Y2godCl7fXJldHVybiBlLmhhc2gubGVuZ3RoPjEmJmk9PT1zfX0oKSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXRoaXMub3B0aW9uczt0aGlzLnJ1bm5pbmc9ITEsdGhpcy5fYWRkQ2xhc3MoXCJ1aS10YWJzXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksdGhpcy5fdG9nZ2xlQ2xhc3MoXCJ1aS10YWJzLWNvbGxhcHNpYmxlXCIsbnVsbCxpLmNvbGxhcHNpYmxlKSx0aGlzLl9wcm9jZXNzVGFicygpLGkuYWN0aXZlPXRoaXMuX2luaXRpYWxBY3RpdmUoKSx0LmlzQXJyYXkoaS5kaXNhYmxlZCkmJihpLmRpc2FibGVkPXQudW5pcXVlKGkuZGlzYWJsZWQuY29uY2F0KHQubWFwKHRoaXMudGFicy5maWx0ZXIoXCIudWktc3RhdGUtZGlzYWJsZWRcIiksZnVuY3Rpb24odCl7cmV0dXJuIGUudGFicy5pbmRleCh0KX0pKSkuc29ydCgpKSwhMSE9PXRoaXMub3B0aW9ucy5hY3RpdmUmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSk6dGhpcy5hY3RpdmU9dCgpLHRoaXMuX3JlZnJlc2goKSx0aGlzLmFjdGl2ZS5sZW5ndGgmJnRoaXMubG9hZChpLmFjdGl2ZSl9LF9pbml0aWFsQWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFjdGl2ZSxpPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZSxzPWxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpO3JldHVybiBudWxsPT09ZSYmKHMmJnRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKGksbil7aWYodChuKS5hdHRyKFwiYXJpYS1jb250cm9sc1wiKT09PXMpcmV0dXJuIGU9aSwhMX0pLG51bGw9PT1lJiYoZT10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmZpbHRlcihcIi51aS10YWJzLWFjdGl2ZVwiKSkpLG51bGwhPT1lJiYtMSE9PWV8fChlPSEhdGhpcy50YWJzLmxlbmd0aCYmMCkpLCExIT09ZSYmLTE9PT0oZT10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmVxKGUpKSkmJihlPSFpJiYwKSwhaSYmITE9PT1lJiZ0aGlzLmFuY2hvcnMubGVuZ3RoJiYoZT0wKSxlfSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpOnQoKX19LF90YWJLZXlkb3duOmZ1bmN0aW9uKGUpe3ZhciBpPXQodC51aS5zYWZlQWN0aXZlRWxlbWVudCh0aGlzLmRvY3VtZW50WzBdKSkuY2xvc2VzdChcImxpXCIpLHM9dGhpcy50YWJzLmluZGV4KGkpLG49ITA7aWYoIXRoaXMuX2hhbmRsZVBhZ2VOYXYoZSkpe3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgdC51aS5rZXlDb2RlLlJJR0hUOmNhc2UgdC51aS5rZXlDb2RlLkRPV046cysrO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlVQOmNhc2UgdC51aS5rZXlDb2RlLkxFRlQ6bj0hMSxzLS07YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOnM9dGhpcy5hbmNob3JzLmxlbmd0aC0xO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6cz0wO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlNQQUNFOnJldHVybiBlLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdm9pZCB0aGlzLl9hY3RpdmF0ZShzKTtjYXNlIHQudWkua2V5Q29kZS5FTlRFUjpyZXR1cm4gZS5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHZvaWQgdGhpcy5fYWN0aXZhdGUocyE9PXRoaXMub3B0aW9ucy5hY3RpdmUmJnMpO2RlZmF1bHQ6cmV0dXJufWUucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSxzPXRoaXMuX2ZvY3VzTmV4dFRhYihzLG4pLGUuY3RybEtleXx8ZS5tZXRhS2V5fHwoaS5hdHRyKFwiYXJpYS1zZWxlY3RlZFwiLFwiZmFsc2VcIiksdGhpcy50YWJzLmVxKHMpLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsXCJ0cnVlXCIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKFwiYWN0aXZlXCIscyl9LHRoaXMuZGVsYXkpKX19LF9wYW5lbEtleWRvd246ZnVuY3Rpb24oZSl7dGhpcy5faGFuZGxlUGFnZU5hdihlKXx8ZS5jdHJsS2V5JiZlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVVAmJihlLnByZXZlbnREZWZhdWx0KCksdGhpcy5hY3RpdmUudHJpZ2dlcihcImZvY3VzXCIpKX0sX2hhbmRsZVBhZ2VOYXY6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYWx0S2V5JiZlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuUEFHRV9VUD8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwKTplLmFsdEtleSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlBBR0VfRE9XTj8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUrMSwhMCkpLCEwKTp2b2lkIDB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbihlLGkpe2Zvcih2YXIgcz10aGlzLnRhYnMubGVuZ3RoLTE7LTEhPT10LmluQXJyYXkoZnVuY3Rpb24oKXtyZXR1cm4gZT5zJiYoZT0wKSxlPDAmJihlPXMpLGV9KCksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspZT1pP2UrMTplLTE7cmV0dXJuIGV9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10aGlzLl9maW5kTmV4dFRhYih0LGUpLHRoaXMudGFicy5lcSh0KS50cmlnZ2VyKFwiZm9jdXNcIiksdH0sX3NldE9wdGlvbjpmdW5jdGlvbih0LGUpe2lmKFwiYWN0aXZlXCI9PT10KXJldHVybiB2b2lkIHRoaXMuX2FjdGl2YXRlKGUpO3RoaXMuX3N1cGVyKHQsZSksXCJjb2xsYXBzaWJsZVwiPT09dCYmKHRoaXMuX3RvZ2dsZUNsYXNzKFwidWktdGFicy1jb2xsYXBzaWJsZVwiLG51bGwsZSksZXx8ITEhPT10aGlzLm9wdGlvbnMuYWN0aXZlfHx0aGlzLl9hY3RpdmF0ZSgwKSksXCJldmVudFwiPT09dCYmdGhpcy5fc2V0dXBFdmVudHMoZSksXCJoZWlnaHRTdHlsZVwiPT09dCYmdGhpcy5fc2V0dXBIZWlnaHRTdHlsZShlKX0sX3Nhbml0aXplU2VsZWN0b3I6ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5yZXBsYWNlKC9bIVwiJCUmJygpKissLlxcLzo7PD0+P0BcXFtcXF1cXF5ge3x9fl0vZyxcIlxcXFwkJlwiKTpcIlwifSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGk9dGhpcy50YWJsaXN0LmNoaWxkcmVuKFwiOmhhcyhhW2hyZWZdKVwiKTtlLmRpc2FibGVkPXQubWFwKGkuZmlsdGVyKFwiLnVpLXN0YXRlLWRpc2FibGVkXCIpLGZ1bmN0aW9uKHQpe3JldHVybiBpLmluZGV4KHQpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKSwhMSE9PWUuYWN0aXZlJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuYWN0aXZlLmxlbmd0aCYmIXQuY29udGFpbnModGhpcy50YWJsaXN0WzBdLHRoaXMuYWN0aXZlWzBdKT90aGlzLnRhYnMubGVuZ3RoPT09ZS5kaXNhYmxlZC5sZW5ndGg/KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSk6dGhpcy5fYWN0aXZhdGUodGhpcy5fZmluZE5leHRUYWIoTWF0aC5tYXgoMCxlLmFjdGl2ZS0xKSwhMSkpOmUuYWN0aXZlPXRoaXMudGFicy5pbmRleCh0aGlzLmFjdGl2ZSk6KGUuYWN0aXZlPSExLHRoaXMuYWN0aXZlPXQoKSksdGhpcy5fcmVmcmVzaCgpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3NldE9wdGlvbkRpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7XCJhcmlhLXNlbGVjdGVkXCI6XCJmYWxzZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwiZmFsc2VcIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzLm5vdCh0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkpLmhpZGUoKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJ0cnVlXCJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLmFjdGl2ZSxcInVpLXRhYnMtYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHtcImFyaWEtaGlkZGVuXCI6XCJmYWxzZVwifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKFwidGFiSW5kZXhcIiwwKX0sX3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXRoaXMudGFicyxzPXRoaXMuYW5jaG9ycyxuPXRoaXMucGFuZWxzO3RoaXMudGFibGlzdD10aGlzLl9nZXRMaXN0KCkuYXR0cihcInJvbGVcIixcInRhYmxpc3RcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy50YWJsaXN0LFwidWktdGFicy1uYXZcIixcInVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlclwiKSx0aGlzLnRhYmxpc3Qub24oXCJtb3VzZWRvd25cIit0aGlzLmV2ZW50TmFtZXNwYWNlLFwiPiBsaVwiLGZ1bmN0aW9uKGUpe3QodGhpcykuaXMoXCIudWktc3RhdGUtZGlzYWJsZWRcIikmJmUucHJldmVudERlZmF1bHQoKX0pLm9uKFwiZm9jdXNcIit0aGlzLmV2ZW50TmFtZXNwYWNlLFwiLnVpLXRhYnMtYW5jaG9yXCIsZnVuY3Rpb24oKXt0KHRoaXMpLmNsb3Nlc3QoXCJsaVwiKS5pcyhcIi51aS1zdGF0ZS1kaXNhYmxlZFwiKSYmdGhpcy5ibHVyKCl9KSx0aGlzLnRhYnM9dGhpcy50YWJsaXN0LmZpbmQoXCI+IGxpOmhhcyhhW2hyZWZdKVwiKS5hdHRyKHtyb2xlOlwidGFiXCIsdGFiSW5kZXg6LTF9KSx0aGlzLl9hZGRDbGFzcyh0aGlzLnRhYnMsXCJ1aS10YWJzLXRhYlwiLFwidWktc3RhdGUtZGVmYXVsdFwiKSx0aGlzLmFuY2hvcnM9dGhpcy50YWJzLm1hcChmdW5jdGlvbigpe3JldHVybiB0KFwiYVwiLHRoaXMpWzBdfSkuYXR0cih7cm9sZTpcInByZXNlbnRhdGlvblwiLHRhYkluZGV4Oi0xfSksdGhpcy5fYWRkQ2xhc3ModGhpcy5hbmNob3JzLFwidWktdGFicy1hbmNob3JcIiksdGhpcy5wYW5lbHM9dCgpLHRoaXMuYW5jaG9ycy5lYWNoKGZ1bmN0aW9uKGkscyl7dmFyIG4sbyxhLHI9dChzKS51bmlxdWVJZCgpLmF0dHIoXCJpZFwiKSxoPXQocykuY2xvc2VzdChcImxpXCIpLGw9aC5hdHRyKFwiYXJpYS1jb250cm9sc1wiKTtlLl9pc0xvY2FsKHMpPyhuPXMuaGFzaCxhPW4uc3Vic3RyaW5nKDEpLG89ZS5lbGVtZW50LmZpbmQoZS5fc2FuaXRpemVTZWxlY3RvcihuKSkpOihhPWguYXR0cihcImFyaWEtY29udHJvbHNcIil8fHQoe30pLnVuaXF1ZUlkKClbMF0uaWQsbj1cIiNcIithLG89ZS5lbGVtZW50LmZpbmQobiksby5sZW5ndGh8fChvPWUuX2NyZWF0ZVBhbmVsKGEpLG8uaW5zZXJ0QWZ0ZXIoZS5wYW5lbHNbaS0xXXx8ZS50YWJsaXN0KSksby5hdHRyKFwiYXJpYS1saXZlXCIsXCJwb2xpdGVcIikpLG8ubGVuZ3RoJiYoZS5wYW5lbHM9ZS5wYW5lbHMuYWRkKG8pKSxsJiZoLmRhdGEoXCJ1aS10YWJzLWFyaWEtY29udHJvbHNcIixsKSxoLmF0dHIoe1wiYXJpYS1jb250cm9sc1wiOmEsXCJhcmlhLWxhYmVsbGVkYnlcIjpyfSksby5hdHRyKFwiYXJpYS1sYWJlbGxlZGJ5XCIscil9KSx0aGlzLnBhbmVscy5hdHRyKFwicm9sZVwiLFwidGFicGFuZWxcIiksdGhpcy5fYWRkQ2xhc3ModGhpcy5wYW5lbHMsXCJ1aS10YWJzLXBhbmVsXCIsXCJ1aS13aWRnZXQtY29udGVudFwiKSxpJiYodGhpcy5fb2ZmKGkubm90KHRoaXMudGFicykpLHRoaXMuX29mZihzLm5vdCh0aGlzLmFuY2hvcnMpKSx0aGlzLl9vZmYobi5ub3QodGhpcy5wYW5lbHMpKSl9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGlzdHx8dGhpcy5lbGVtZW50LmZpbmQoXCJvbCwgdWxcIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbihlKXtyZXR1cm4gdChcIjxkaXY+XCIpLmF0dHIoXCJpZFwiLGUpLmRhdGEoXCJ1aS10YWJzLWRlc3Ryb3lcIiwhMCl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbihlKXt2YXIgaSxzLG47Zm9yKHQuaXNBcnJheShlKSYmKGUubGVuZ3RoP2UubGVuZ3RoPT09dGhpcy5hbmNob3JzLmxlbmd0aCYmKGU9ITApOmU9ITEpLG49MDtzPXRoaXMudGFic1tuXTtuKyspaT10KHMpLCEwPT09ZXx8LTEhPT10LmluQXJyYXkobixlKT8oaS5hdHRyKFwiYXJpYS1kaXNhYmxlZFwiLFwidHJ1ZVwiKSx0aGlzLl9hZGRDbGFzcyhpLG51bGwsXCJ1aS1zdGF0ZS1kaXNhYmxlZFwiKSk6KGkucmVtb3ZlQXR0cihcImFyaWEtZGlzYWJsZWRcIiksdGhpcy5fcmVtb3ZlQ2xhc3MoaSxudWxsLFwidWktc3RhdGUtZGlzYWJsZWRcIikpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD1lLHRoaXMuX3RvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0KCksdGhpcy53aWRnZXRGdWxsTmFtZStcIi1kaXNhYmxlZFwiLG51bGwsITA9PT1lKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKGUpe3ZhciBpPXt9O2UmJnQuZWFjaChlLnNwbGl0KFwiIFwiKSxmdW5jdGlvbih0LGUpe2lbZV09XCJfZXZlbnRIYW5kbGVyXCJ9KSx0aGlzLl9vZmYodGhpcy5hbmNob3JzLmFkZCh0aGlzLnRhYnMpLmFkZCh0aGlzLnBhbmVscykpLHRoaXMuX29uKCEwLHRoaXMuYW5jaG9ycyx7Y2xpY2s6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpfX0pLHRoaXMuX29uKHRoaXMuYW5jaG9ycyxpKSx0aGlzLl9vbih0aGlzLnRhYnMse2tleWRvd246XCJfdGFiS2V5ZG93blwifSksdGhpcy5fb24odGhpcy5wYW5lbHMse2tleWRvd246XCJfcGFuZWxLZXlkb3duXCJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLmVsZW1lbnQucGFyZW50KCk7XCJmaWxsXCI9PT1lPyhpPXMuaGVpZ2h0KCksaS09dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCktdGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncyhcIjp2aXNpYmxlXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9ZS5jc3MoXCJwb3NpdGlvblwiKTtcImFic29sdXRlXCIhPT1zJiZcImZpeGVkXCIhPT1zJiYoaS09ZS5vdXRlckhlaWdodCghMCkpfSksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7aS09dCh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7dCh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxpLXQodGhpcykuaW5uZXJIZWlnaHQoKSt0KHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoXCJvdmVyZmxvd1wiLFwiYXV0b1wiKSk6XCJhdXRvXCI9PT1lJiYoaT0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtpPU1hdGgubWF4KGksdCh0aGlzKS5oZWlnaHQoXCJcIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KGkpKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPXQoZS5jdXJyZW50VGFyZ2V0KSxvPW4uY2xvc2VzdChcImxpXCIpLGE9b1swXT09PXNbMF0scj1hJiZpLmNvbGxhcHNpYmxlLGg9cj90KCk6dGhpcy5fZ2V0UGFuZWxGb3JUYWIobyksbD1zLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYihzKTp0KCksYz17b2xkVGFiOnMsb2xkUGFuZWw6bCxuZXdUYWI6cj90KCk6byxuZXdQYW5lbDpofTtlLnByZXZlbnREZWZhdWx0KCksby5oYXNDbGFzcyhcInVpLXN0YXRlLWRpc2FibGVkXCIpfHxvLmhhc0NsYXNzKFwidWktdGFicy1sb2FkaW5nXCIpfHx0aGlzLnJ1bm5pbmd8fGEmJiFpLmNvbGxhcHNpYmxlfHwhMT09PXRoaXMuX3RyaWdnZXIoXCJiZWZvcmVBY3RpdmF0ZVwiLGUsYyl8fChpLmFjdGl2ZT0hciYmdGhpcy50YWJzLmluZGV4KG8pLHRoaXMuYWN0aXZlPWE/dCgpOm8sdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksbC5sZW5ndGh8fGgubGVuZ3RofHx0LmVycm9yKFwialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuXCIpLGgubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KG8pLGUpLHRoaXMuX3RvZ2dsZShlLGMpKX0sX3RvZ2dsZTpmdW5jdGlvbihlLGkpe2Z1bmN0aW9uIHMoKXtvLnJ1bm5pbmc9ITEsby5fdHJpZ2dlcihcImFjdGl2YXRlXCIsZSxpKX1mdW5jdGlvbiBuKCl7by5fYWRkQ2xhc3MoaS5uZXdUYWIuY2xvc2VzdChcImxpXCIpLFwidWktdGFicy1hY3RpdmVcIixcInVpLXN0YXRlLWFjdGl2ZVwiKSxhLmxlbmd0aCYmby5vcHRpb25zLnNob3c/by5fc2hvdyhhLG8ub3B0aW9ucy5zaG93LHMpOihhLnNob3coKSxzKCkpfXZhciBvPXRoaXMsYT1pLm5ld1BhbmVsLHI9aS5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAsci5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocix0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe28uX3JlbW92ZUNsYXNzKGkub2xkVGFiLmNsb3Nlc3QoXCJsaVwiKSxcInVpLXRhYnMtYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksbigpfSk6KHRoaXMuX3JlbW92ZUNsYXNzKGkub2xkVGFiLmNsb3Nlc3QoXCJsaVwiKSxcInVpLXRhYnMtYWN0aXZlXCIsXCJ1aS1zdGF0ZS1hY3RpdmVcIiksci5oaWRlKCksbigpKSxyLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxpLm9sZFRhYi5hdHRyKHtcImFyaWEtc2VsZWN0ZWRcIjpcImZhbHNlXCIsXCJhcmlhLWV4cGFuZGVkXCI6XCJmYWxzZVwifSksYS5sZW5ndGgmJnIubGVuZ3RoP2kub2xkVGFiLmF0dHIoXCJ0YWJJbmRleFwiLC0xKTphLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09dCh0aGlzKS5hdHRyKFwidGFiSW5kZXhcIil9KS5hdHRyKFwidGFiSW5kZXhcIiwtMSksYS5hdHRyKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLGkubmV3VGFiLmF0dHIoe1wiYXJpYS1zZWxlY3RlZFwiOlwidHJ1ZVwiLFwiYXJpYS1leHBhbmRlZFwiOlwidHJ1ZVwiLHRhYkluZGV4OjB9KX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpLHM9dGhpcy5fZmluZEFjdGl2ZShlKTtzWzBdIT09dGhpcy5hY3RpdmVbMF0mJihzLmxlbmd0aHx8KHM9dGhpcy5hY3RpdmUpLGk9cy5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OnQubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT1lP3QoKTp0aGlzLnRhYnMuZXEoZSl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoXCJbaHJlZiQ9J1wiK3QudWkuZXNjYXBlU2VsZWN0b3IoZSkrXCInXVwiKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy50YWJsaXN0LnJlbW92ZUF0dHIoXCJyb2xlXCIpLm9mZih0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmFuY2hvcnMucmVtb3ZlQXR0cihcInJvbGUgdGFiSW5kZXhcIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYnMuYWRkKHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7dC5kYXRhKHRoaXMsXCJ1aS10YWJzLWRlc3Ryb3lcIik/dCh0aGlzKS5yZW1vdmUoKTp0KHRoaXMpLnJlbW92ZUF0dHIoXCJyb2xlIHRhYkluZGV4IGFyaWEtbGl2ZSBhcmlhLWJ1c3kgYXJpYS1zZWxlY3RlZCBhcmlhLWxhYmVsbGVkYnkgYXJpYS1oaWRkZW4gYXJpYS1leHBhbmRlZFwiKX0pLHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxpPWUuZGF0YShcInVpLXRhYnMtYXJpYS1jb250cm9sc1wiKTtpP2UuYXR0cihcImFyaWEtY29udHJvbHNcIixpKS5yZW1vdmVEYXRhKFwidWktdGFicy1hcmlhLWNvbnRyb2xzXCIpOmUucmVtb3ZlQXR0cihcImFyaWEtY29udHJvbHNcIil9KSx0aGlzLnBhbmVscy5zaG93KCksXCJjb250ZW50XCIhPT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJnRoaXMucGFuZWxzLmNzcyhcImhlaWdodFwiLFwiXCIpfSxlbmFibGU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zLmRpc2FibGVkOyExIT09aSYmKHZvaWQgMD09PWU/aT0hMTooZT10aGlzLl9nZXRJbmRleChlKSxpPXQuaXNBcnJheShpKT90Lm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybiB0IT09ZT90Om51bGx9KTp0Lm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24odCxpKXtyZXR1cm4gaSE9PWU/aTpudWxsfSkpLHRoaXMuX3NldE9wdGlvbkRpc2FibGVkKGkpKX0sZGlzYWJsZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYoITAhPT1pKXtpZih2b2lkIDA9PT1lKWk9ITA7ZWxzZXtpZihlPXRoaXMuX2dldEluZGV4KGUpLC0xIT09dC5pbkFycmF5KGUsaSkpcmV0dXJuO2k9dC5pc0FycmF5KGkpP3QubWVyZ2UoW2VdLGkpLnNvcnQoKTpbZV19dGhpcy5fc2V0T3B0aW9uRGlzYWJsZWQoaSl9fSxsb2FkOmZ1bmN0aW9uKGUsaSl7ZT10aGlzLl9nZXRJbmRleChlKTt2YXIgcz10aGlzLG49dGhpcy50YWJzLmVxKGUpLG89bi5maW5kKFwiLnVpLXRhYnMtYW5jaG9yXCIpLGE9dGhpcy5fZ2V0UGFuZWxGb3JUYWIobikscj17dGFiOm4scGFuZWw6YX0saD1mdW5jdGlvbih0LGUpe1wiYWJvcnRcIj09PWUmJnMucGFuZWxzLnN0b3AoITEsITApLHMuX3JlbW92ZUNsYXNzKG4sXCJ1aS10YWJzLWxvYWRpbmdcIiksYS5yZW1vdmVBdHRyKFwiYXJpYS1idXN5XCIpLHQ9PT1zLnhociYmZGVsZXRlIHMueGhyfTt0aGlzLl9pc0xvY2FsKG9bMF0pfHwodGhpcy54aHI9dC5hamF4KHRoaXMuX2FqYXhTZXR0aW5ncyhvLGkscikpLHRoaXMueGhyJiZcImNhbmNlbGVkXCIhPT10aGlzLnhoci5zdGF0dXNUZXh0JiYodGhpcy5fYWRkQ2xhc3MobixcInVpLXRhYnMtbG9hZGluZ1wiKSxhLmF0dHIoXCJhcmlhLWJ1c3lcIixcInRydWVcIiksdGhpcy54aHIuZG9uZShmdW5jdGlvbih0LGUsbil7c2V0VGltZW91dChmdW5jdGlvbigpe2EuaHRtbCh0KSxzLl90cmlnZ2VyKFwibG9hZFwiLGksciksaChuLGUpfSwxKX0pLmZhaWwoZnVuY3Rpb24odCxlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aCh0LGUpfSwxKX0pKSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXRoaXM7cmV0dXJue3VybDplLmF0dHIoXCJocmVmXCIpLnJlcGxhY2UoLyMuKiQvLFwiXCIpLGJlZm9yZVNlbmQ6ZnVuY3Rpb24oZSxvKXtyZXR1cm4gbi5fdHJpZ2dlcihcImJlZm9yZUxvYWRcIixpLHQuZXh0ZW5kKHtqcVhIUjplLGFqYXhTZXR0aW5nczpvfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSkuYXR0cihcImFyaWEtY29udHJvbHNcIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoXCIjXCIraSkpfX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkudGFic1wiLHQudWkudGFicyx7X3Byb2Nlc3NUYWJzOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMuX2FkZENsYXNzKHRoaXMudGFicyxcInVpLXRhYlwiKX19KTt0LnVpLnRhYnM7dC53aWRnZXQoXCJ1aS50b29sdGlwXCIse3ZlcnNpb246XCIxLjEyLjFcIixvcHRpb25zOntjbGFzc2VzOntcInVpLXRvb2x0aXBcIjpcInVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LXNoYWRvd1wifSxjb250ZW50OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5hdHRyKFwidGl0bGVcIil8fFwiXCI7cmV0dXJuIHQoXCI8YT5cIikudGV4dChlKS5odG1sKCl9LGhpZGU6ITAsaXRlbXM6XCJbdGl0bGVdOm5vdChbZGlzYWJsZWRdKVwiLHBvc2l0aW9uOntteTpcImxlZnQgdG9wKzE1XCIsYXQ6XCJsZWZ0IGJvdHRvbVwiLGNvbGxpc2lvbjpcImZsaXBmaXQgZmxpcFwifSxzaG93OiEwLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfYWRkRGVzY3JpYmVkQnk6ZnVuY3Rpb24oZSxpKXt2YXIgcz0oZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKXx8XCJcIikuc3BsaXQoL1xccysvKTtzLnB1c2goaSksZS5kYXRhKFwidWktdG9vbHRpcC1pZFwiLGkpLmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsdC50cmltKHMuam9pbihcIiBcIikpKX0sX3JlbW92ZURlc2NyaWJlZEJ5OmZ1bmN0aW9uKGUpe3ZhciBpPWUuZGF0YShcInVpLXRvb2x0aXAtaWRcIikscz0oZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiKXx8XCJcIikuc3BsaXQoL1xccysvKSxuPXQuaW5BcnJheShpLHMpOy0xIT09biYmcy5zcGxpY2UobiwxKSxlLnJlbW92ZURhdGEoXCJ1aS10b29sdGlwLWlkXCIpLHM9dC50cmltKHMuam9pbihcIiBcIikpLHM/ZS5hdHRyKFwiYXJpYS1kZXNjcmliZWRieVwiLHMpOmUucmVtb3ZlQXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vbih7bW91c2VvdmVyOlwib3BlblwiLGZvY3VzaW46XCJvcGVuXCJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLmxpdmVSZWdpb249dChcIjxkaXY+XCIpLmF0dHIoe3JvbGU6XCJsb2dcIixcImFyaWEtbGl2ZVwiOlwiYXNzZXJ0aXZlXCIsXCJhcmlhLXJlbGV2YW50XCI6XCJhZGRpdGlvbnNcIn0pLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fYWRkQ2xhc3ModGhpcy5saXZlUmVnaW9uLG51bGwsXCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGVcIiksdGhpcy5kaXNhYmxlZFRpdGxlcz10KFtdKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpe3ZhciBzPXRoaXM7dGhpcy5fc3VwZXIoZSxpKSxcImNvbnRlbnRcIj09PWUmJnQuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKHQsZSl7cy5fdXBkYXRlQ29udGVudChlLmVsZW1lbnQpfSl9LF9zZXRPcHRpb25EaXNhYmxlZDpmdW5jdGlvbih0KXt0aGlzW3Q/XCJfZGlzYWJsZVwiOlwiX2VuYWJsZVwiXSgpfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj10LkV2ZW50KFwiYmx1clwiKTtuLnRhcmdldD1uLmN1cnJlbnRUYXJnZXQ9cy5lbGVtZW50WzBdLGUuY2xvc2UobiwhMCl9KSx0aGlzLmRpc2FibGVkVGl0bGVzPXRoaXMuZGlzYWJsZWRUaXRsZXMuYWRkKHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7aWYoZS5pcyhcIlt0aXRsZV1cIikpcmV0dXJuIGUuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIixlLmF0dHIoXCJ0aXRsZVwiKSkucmVtb3ZlQXR0cihcInRpdGxlXCIpfSkpfSxfZW5hYmxlOmZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZFRpdGxlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIpJiZlLmF0dHIoXCJ0aXRsZVwiLGUuZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpfSksdGhpcy5kaXNhYmxlZFRpdGxlcz10KFtdKX0sb3BlbjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLHM9dChlP2UudGFyZ2V0OnRoaXMuZWxlbWVudCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuaXRlbXMpO3MubGVuZ3RoJiYhcy5kYXRhKFwidWktdG9vbHRpcC1pZFwiKSYmKHMuYXR0cihcInRpdGxlXCIpJiZzLmRhdGEoXCJ1aS10b29sdGlwLXRpdGxlXCIscy5hdHRyKFwidGl0bGVcIikpLHMuZGF0YShcInVpLXRvb2x0aXAtb3BlblwiLCEwKSxlJiZcIm1vdXNlb3ZlclwiPT09ZS50eXBlJiZzLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUscz10KHRoaXMpO3MuZGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSYmKGU9dC5FdmVudChcImJsdXJcIiksZS50YXJnZXQ9ZS5jdXJyZW50VGFyZ2V0PXRoaXMsaS5jbG9zZShlLCEwKSkscy5hdHRyKFwidGl0bGVcIikmJihzLnVuaXF1ZUlkKCksaS5wYXJlbnRzW3RoaXMuaWRdPXtlbGVtZW50OnRoaXMsdGl0bGU6cy5hdHRyKFwidGl0bGVcIil9LHMuYXR0cihcInRpdGxlXCIsXCJcIikpfSksdGhpcy5fcmVnaXN0ZXJDbG9zZUhhbmRsZXJzKGUscyksdGhpcy5fdXBkYXRlQ29udGVudChzLGUpKX0sX3VwZGF0ZUNvbnRlbnQ6ZnVuY3Rpb24odCxlKXt2YXIgaSxzPXRoaXMub3B0aW9ucy5jb250ZW50LG49dGhpcyxvPWU/ZS50eXBlOm51bGw7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHN8fHMubm9kZVR5cGV8fHMuanF1ZXJ5KXJldHVybiB0aGlzLl9vcGVuKGUsdCxzKTsoaT1zLmNhbGwodFswXSxmdW5jdGlvbihpKXtuLl9kZWxheShmdW5jdGlvbigpe3QuZGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSYmKGUmJihlLnR5cGU9byksdGhpcy5fb3BlbihlLHQsaSkpfSl9KSkmJnRoaXMuX29wZW4oZSx0LGkpfSxfb3BlbjpmdW5jdGlvbihlLGkscyl7ZnVuY3Rpb24gbih0KXtsLm9mPXQsYS5pcyhcIjpoaWRkZW5cIil8fGEucG9zaXRpb24obCl9dmFyIG8sYSxyLGgsbD10LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKHMpe2lmKG89dGhpcy5fZmluZChpKSlyZXR1cm4gdm9pZCBvLnRvb2x0aXAuZmluZChcIi51aS10b29sdGlwLWNvbnRlbnRcIikuaHRtbChzKTtpLmlzKFwiW3RpdGxlXVwiKSYmKGUmJlwibW91c2VvdmVyXCI9PT1lLnR5cGU/aS5hdHRyKFwidGl0bGVcIixcIlwiKTppLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKSksbz10aGlzLl90b29sdGlwKGkpLGE9by50b29sdGlwLHRoaXMuX2FkZERlc2NyaWJlZEJ5KGksYS5hdHRyKFwiaWRcIikpLGEuZmluZChcIi51aS10b29sdGlwLWNvbnRlbnRcIikuaHRtbChzKSx0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksaD10KFwiPGRpdj5cIikuaHRtbChhLmZpbmQoXCIudWktdG9vbHRpcC1jb250ZW50XCIpLmh0bWwoKSksaC5yZW1vdmVBdHRyKFwibmFtZVwiKS5maW5kKFwiW25hbWVdXCIpLnJlbW92ZUF0dHIoXCJuYW1lXCIpLGgucmVtb3ZlQXR0cihcImlkXCIpLmZpbmQoXCJbaWRdXCIpLnJlbW92ZUF0dHIoXCJpZFwiKSxoLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbiksdGhpcy5vcHRpb25zLnRyYWNrJiZlJiYvXm1vdXNlLy50ZXN0KGUudHlwZSk/KHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse21vdXNlbW92ZTpufSksbihlKSk6YS5wb3NpdGlvbih0LmV4dGVuZCh7b2Y6aX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksYS5oaWRlKCksdGhpcy5fc2hvdyhhLHRoaXMub3B0aW9ucy5zaG93KSx0aGlzLm9wdGlvbnMudHJhY2smJnRoaXMub3B0aW9ucy5zaG93JiZ0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSYmKHI9dGhpcy5kZWxheWVkU2hvdz1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2EuaXMoXCI6dmlzaWJsZVwiKSYmKG4obC5vZiksY2xlYXJJbnRlcnZhbChyKSl9LHQuZnguaW50ZXJ2YWwpKSx0aGlzLl90cmlnZ2VyKFwib3BlblwiLGUse3Rvb2x0aXA6YX0pfX0sX3JlZ2lzdGVyQ2xvc2VIYW5kbGVyczpmdW5jdGlvbihlLGkpe3ZhciBzPXtrZXl1cDpmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuRVNDQVBFKXt2YXIgcz10LkV2ZW50KGUpO3MuY3VycmVudFRhcmdldD1pWzBdLHRoaXMuY2xvc2UocywhMCl9fX07aVswXSE9PXRoaXMuZWxlbWVudFswXSYmKHMucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlVG9vbHRpcCh0aGlzLl9maW5kKGkpLnRvb2x0aXApfSksZSYmXCJtb3VzZW92ZXJcIiE9PWUudHlwZXx8KHMubW91c2VsZWF2ZT1cImNsb3NlXCIpLGUmJlwiZm9jdXNpblwiIT09ZS50eXBlfHwocy5mb2N1c291dD1cImNsb3NlXCIpLHRoaXMuX29uKCEwLGkscyl9LGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBpLHM9dGhpcyxuPXQoZT9lLmN1cnJlbnRUYXJnZXQ6dGhpcy5lbGVtZW50KSxvPXRoaXMuX2ZpbmQobik7aWYoIW8pcmV0dXJuIHZvaWQgbi5yZW1vdmVEYXRhKFwidWktdG9vbHRpcC1vcGVuXCIpO2k9by50b29sdGlwLG8uY2xvc2luZ3x8KGNsZWFySW50ZXJ2YWwodGhpcy5kZWxheWVkU2hvdyksbi5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSYmIW4uYXR0cihcInRpdGxlXCIpJiZuLmF0dHIoXCJ0aXRsZVwiLG4uZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpLHRoaXMuX3JlbW92ZURlc2NyaWJlZEJ5KG4pLG8uaGlkaW5nPSEwLGkuc3RvcCghMCksdGhpcy5faGlkZShpLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fcmVtb3ZlVG9vbHRpcCh0KHRoaXMpKX0pLG4ucmVtb3ZlRGF0YShcInVpLXRvb2x0aXAtb3BlblwiKSx0aGlzLl9vZmYobixcIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXBcIiksblswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5fb2ZmKG4sXCJyZW1vdmVcIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsXCJtb3VzZW1vdmVcIiksZSYmXCJtb3VzZWxlYXZlXCI9PT1lLnR5cGUmJnQuZWFjaCh0aGlzLnBhcmVudHMsZnVuY3Rpb24oZSxpKXt0KGkuZWxlbWVudCkuYXR0cihcInRpdGxlXCIsaS50aXRsZSksZGVsZXRlIHMucGFyZW50c1tlXX0pLG8uY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKFwiY2xvc2VcIixlLHt0b29sdGlwOml9KSxvLmhpZGluZ3x8KG8uY2xvc2luZz0hMSkpfSxfdG9vbHRpcDpmdW5jdGlvbihlKXt2YXIgaT10KFwiPGRpdj5cIikuYXR0cihcInJvbGVcIixcInRvb2x0aXBcIikscz10KFwiPGRpdj5cIikuYXBwZW5kVG8oaSksbj1pLnVuaXF1ZUlkKCkuYXR0cihcImlkXCIpO3JldHVybiB0aGlzLl9hZGRDbGFzcyhzLFwidWktdG9vbHRpcC1jb250ZW50XCIpLHRoaXMuX2FkZENsYXNzKGksXCJ1aS10b29sdGlwXCIsXCJ1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnRcIiksaS5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbyhlKSksdGhpcy50b29sdGlwc1tuXT17ZWxlbWVudDplLHRvb2x0aXA6aX19LF9maW5kOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0YShcInVpLXRvb2x0aXAtaWRcIik7cmV0dXJuIGU/dGhpcy50b29sdGlwc1tlXTpudWxsfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbih0KXt0LnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW3QuYXR0cihcImlkXCIpXX0sX2FwcGVuZFRvOmZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvc2VzdChcIi51aS1mcm9udCwgZGlhbG9nXCIpO3JldHVybiBlLmxlbmd0aHx8KGU9dGhpcy5kb2N1bWVudFswXS5ib2R5KSxlfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj10LkV2ZW50KFwiYmx1clwiKSxvPXMuZWxlbWVudDtuLnRhcmdldD1uLmN1cnJlbnRUYXJnZXQ9b1swXSxlLmNsb3NlKG4sITApLHQoXCIjXCIraSkucmVtb3ZlKCksby5kYXRhKFwidWktdG9vbHRpcC10aXRsZVwiKSYmKG8uYXR0cihcInRpdGxlXCIpfHxvLmF0dHIoXCJ0aXRsZVwiLG8uZGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpLG8ucmVtb3ZlRGF0YShcInVpLXRvb2x0aXAtdGl0bGVcIikpfSksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfX0pLCExIT09dC51aUJhY2tDb21wYXQmJnQud2lkZ2V0KFwidWkudG9vbHRpcFwiLHQudWkudG9vbHRpcCx7b3B0aW9uczp7dG9vbHRpcENsYXNzOm51bGx9LF90b29sdGlwOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpO3JldHVybiB0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzJiZ0LnRvb2x0aXAuYWRkQ2xhc3ModGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzcyksdH19KTt0LnVpLnRvb2x0aXB9KTsiLCIhZnVuY3Rpb24oZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIl0sZSk6ZShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9yZXF1aXJlKFwianF1ZXJ5XCIpOndpbmRvdy5qUXVlcnl8fHdpbmRvdy5aZXB0byl9KGZ1bmN0aW9uKGUpe3ZhciB0LG4saSxvLHIsYSxzPWZ1bmN0aW9uKCl7fSxsPSEhd2luZG93LmpRdWVyeSxjPWUod2luZG93KSxkPWZ1bmN0aW9uKGUsbil7dC5ldi5vbihcIm1mcFwiK2UrXCIubWZwXCIsbil9LHA9ZnVuY3Rpb24odCxuLGksbyl7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtyZXR1cm4gci5jbGFzc05hbWU9XCJtZnAtXCIrdCxpJiYoci5pbm5lckhUTUw9aSksbz9uJiZuLmFwcGVuZENoaWxkKHIpOihyPWUociksbiYmci5hcHBlbmRUbyhuKSkscn0sdT1mdW5jdGlvbihuLGkpe3QuZXYudHJpZ2dlckhhbmRsZXIoXCJtZnBcIituLGkpLHQuc3QuY2FsbGJhY2tzJiYobj1uLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpK24uc2xpY2UoMSksdC5zdC5jYWxsYmFja3Nbbl0mJnQuc3QuY2FsbGJhY2tzW25dLmFwcGx5KHQsZS5pc0FycmF5KGkpP2k6W2ldKSl9LGY9ZnVuY3Rpb24obil7cmV0dXJuIG49PT1hJiZ0LmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bnx8KHQuY3VyclRlbXBsYXRlLmNsb3NlQnRuPWUodC5zdC5jbG9zZU1hcmt1cC5yZXBsYWNlKFwiJXRpdGxlJVwiLHQuc3QudENsb3NlKSksYT1uKSx0LmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bn0sbT1mdW5jdGlvbigpe2UubWFnbmlmaWNQb3B1cC5pbnN0YW5jZXx8KHQ9bmV3IHMsdC5pbml0KCksZS5tYWduaWZpY1BvcHVwLmluc3RhbmNlPXQpfSxnPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIikuc3R5bGUsdD1bXCJtc1wiLFwiT1wiLFwiTW96XCIsXCJXZWJraXRcIl07aWYodm9pZCAwIT09ZS50cmFuc2l0aW9uKXJldHVybiEwO2Zvcig7dC5sZW5ndGg7KWlmKHQucG9wKCkrXCJUcmFuc2l0aW9uXCJpbiBlKXJldHVybiEwO3JldHVybiExfTtzLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cyxpbml0OmZ1bmN0aW9uKCl7dmFyIG49bmF2aWdhdG9yLmFwcFZlcnNpb247dC5pc0xvd0lFPXQuaXNJRTg9ZG9jdW1lbnQuYWxsJiYhZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcix0LmlzQW5kcm9pZD0vYW5kcm9pZC9naS50ZXN0KG4pLHQuaXNJT1M9L2lwaG9uZXxpcGFkfGlwb2QvZ2kudGVzdChuKSx0LnN1cHBvcnRzVHJhbnNpdGlvbj1nKCksdC5wcm9iYWJseU1vYmlsZT10LmlzQW5kcm9pZHx8dC5pc0lPU3x8LyhPcGVyYSBNaW5pKXxLaW5kbGV8d2ViT1N8QmxhY2tCZXJyeXwoT3BlcmEgTW9iaSl8KFdpbmRvd3MgUGhvbmUpfElFTW9iaWxlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxpPWUoZG9jdW1lbnQpLHQucG9wdXBzQ2FjaGU9e319LG9wZW46ZnVuY3Rpb24obil7dmFyIG87aWYoITE9PT1uLmlzT2JqKXt0Lml0ZW1zPW4uaXRlbXMudG9BcnJheSgpLHQuaW5kZXg9MDt2YXIgYSxzPW4uaXRlbXM7Zm9yKG89MDtvPHMubGVuZ3RoO28rKylpZihhPXNbb10sYS5wYXJzZWQmJihhPWEuZWxbMF0pLGE9PT1uLmVsWzBdKXt0LmluZGV4PW87YnJlYWt9fWVsc2UgdC5pdGVtcz1lLmlzQXJyYXkobi5pdGVtcyk/bi5pdGVtczpbbi5pdGVtc10sdC5pbmRleD1uLmluZGV4fHwwO2lmKHQuaXNPcGVuKXJldHVybiB2b2lkIHQudXBkYXRlSXRlbUhUTUwoKTt0LnR5cGVzPVtdLHI9XCJcIixuLm1haW5FbCYmbi5tYWluRWwubGVuZ3RoP3QuZXY9bi5tYWluRWwuZXEoMCk6dC5ldj1pLG4ua2V5Pyh0LnBvcHVwc0NhY2hlW24ua2V5XXx8KHQucG9wdXBzQ2FjaGVbbi5rZXldPXt9KSx0LmN1cnJUZW1wbGF0ZT10LnBvcHVwc0NhY2hlW24ua2V5XSk6dC5jdXJyVGVtcGxhdGU9e30sdC5zdD1lLmV4dGVuZCghMCx7fSxlLm1hZ25pZmljUG9wdXAuZGVmYXVsdHMsbiksdC5maXhlZENvbnRlbnRQb3M9XCJhdXRvXCI9PT10LnN0LmZpeGVkQ29udGVudFBvcz8hdC5wcm9iYWJseU1vYmlsZTp0LnN0LmZpeGVkQ29udGVudFBvcyx0LnN0Lm1vZGFsJiYodC5zdC5jbG9zZU9uQ29udGVudENsaWNrPSExLHQuc3QuY2xvc2VPbkJnQ2xpY2s9ITEsdC5zdC5zaG93Q2xvc2VCdG49ITEsdC5zdC5lbmFibGVFc2NhcGVLZXk9ITEpLHQuYmdPdmVybGF5fHwodC5iZ092ZXJsYXk9cChcImJnXCIpLm9uKFwiY2xpY2subWZwXCIsZnVuY3Rpb24oKXt0LmNsb3NlKCl9KSx0LndyYXA9cChcIndyYXBcIikuYXR0cihcInRhYmluZGV4XCIsLTEpLm9uKFwiY2xpY2subWZwXCIsZnVuY3Rpb24oZSl7dC5fY2hlY2tJZkNsb3NlKGUudGFyZ2V0KSYmdC5jbG9zZSgpfSksdC5jb250YWluZXI9cChcImNvbnRhaW5lclwiLHQud3JhcCkpLHQuY29udGVudENvbnRhaW5lcj1wKFwiY29udGVudFwiKSx0LnN0LnByZWxvYWRlciYmKHQucHJlbG9hZGVyPXAoXCJwcmVsb2FkZXJcIix0LmNvbnRhaW5lcix0LnN0LnRMb2FkaW5nKSk7dmFyIGw9ZS5tYWduaWZpY1BvcHVwLm1vZHVsZXM7Zm9yKG89MDtvPGwubGVuZ3RoO28rKyl7dmFyIG09bFtvXTttPW0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrbS5zbGljZSgxKSx0W1wiaW5pdFwiK21dLmNhbGwodCl9dShcIkJlZm9yZU9wZW5cIiksdC5zdC5zaG93Q2xvc2VCdG4mJih0LnN0LmNsb3NlQnRuSW5zaWRlPyhkKFwiTWFya3VwUGFyc2VcIixmdW5jdGlvbihlLHQsbixpKXtuLmNsb3NlX3JlcGxhY2VXaXRoPWYoaS50eXBlKX0pLHIrPVwiIG1mcC1jbG9zZS1idG4taW5cIik6dC53cmFwLmFwcGVuZChmKCkpKSx0LnN0LmFsaWduVG9wJiYocis9XCIgbWZwLWFsaWduLXRvcFwiKSx0LmZpeGVkQ29udGVudFBvcz90LndyYXAuY3NzKHtvdmVyZmxvdzp0LnN0Lm92ZXJmbG93WSxvdmVyZmxvd1g6XCJoaWRkZW5cIixvdmVyZmxvd1k6dC5zdC5vdmVyZmxvd1l9KTp0LndyYXAuY3NzKHt0b3A6Yy5zY3JvbGxUb3AoKSxwb3NpdGlvbjpcImFic29sdXRlXCJ9KSwoITE9PT10LnN0LmZpeGVkQmdQb3N8fFwiYXV0b1wiPT09dC5zdC5maXhlZEJnUG9zJiYhdC5maXhlZENvbnRlbnRQb3MpJiZ0LmJnT3ZlcmxheS5jc3Moe2hlaWdodDppLmhlaWdodCgpLHBvc2l0aW9uOlwiYWJzb2x1dGVcIn0pLHQuc3QuZW5hYmxlRXNjYXBlS2V5JiZpLm9uKFwia2V5dXAubWZwXCIsZnVuY3Rpb24oZSl7Mjc9PT1lLmtleUNvZGUmJnQuY2xvc2UoKX0pLGMub24oXCJyZXNpemUubWZwXCIsZnVuY3Rpb24oKXt0LnVwZGF0ZVNpemUoKX0pLHQuc3QuY2xvc2VPbkNvbnRlbnRDbGlja3x8KHIrPVwiIG1mcC1hdXRvLWN1cnNvclwiKSxyJiZ0LndyYXAuYWRkQ2xhc3Mocik7dmFyIGc9dC53SD1jLmhlaWdodCgpLHY9e307aWYodC5maXhlZENvbnRlbnRQb3MmJnQuX2hhc1Njcm9sbEJhcihnKSl7dmFyIGg9dC5fZ2V0U2Nyb2xsYmFyU2l6ZSgpO2gmJih2Lm1hcmdpblJpZ2h0PWgpfXQuZml4ZWRDb250ZW50UG9zJiYodC5pc0lFNz9lKFwiYm9keSwgaHRtbFwiKS5jc3MoXCJvdmVyZmxvd1wiLFwiaGlkZGVuXCIpOnYub3ZlcmZsb3c9XCJoaWRkZW5cIik7dmFyIEM9dC5zdC5tYWluQ2xhc3M7cmV0dXJuIHQuaXNJRTcmJihDKz1cIiBtZnAtaWU3XCIpLEMmJnQuX2FkZENsYXNzVG9NRlAoQyksdC51cGRhdGVJdGVtSFRNTCgpLHUoXCJCdWlsZENvbnRyb2xzXCIpLGUoXCJodG1sXCIpLmNzcyh2KSx0LmJnT3ZlcmxheS5hZGQodC53cmFwKS5wcmVwZW5kVG8odC5zdC5wcmVwZW5kVG98fGUoZG9jdW1lbnQuYm9keSkpLHQuX2xhc3RGb2N1c2VkRWw9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5jb250ZW50Pyh0Ll9hZGRDbGFzc1RvTUZQKFwibWZwLXJlYWR5XCIpLHQuX3NldEZvY3VzKCkpOnQuYmdPdmVybGF5LmFkZENsYXNzKFwibWZwLXJlYWR5XCIpLGkub24oXCJmb2N1c2luLm1mcFwiLHQuX29uRm9jdXNJbil9LDE2KSx0LmlzT3Blbj0hMCx0LnVwZGF0ZVNpemUoZyksdShcIk9wZW5cIiksbn0sY2xvc2U6ZnVuY3Rpb24oKXt0LmlzT3BlbiYmKHUoXCJCZWZvcmVDbG9zZVwiKSx0LmlzT3Blbj0hMSx0LnN0LnJlbW92YWxEZWxheSYmIXQuaXNMb3dJRSYmdC5zdXBwb3J0c1RyYW5zaXRpb24/KHQuX2FkZENsYXNzVG9NRlAoXCJtZnAtcmVtb3ZpbmdcIiksc2V0VGltZW91dChmdW5jdGlvbigpe3QuX2Nsb3NlKCl9LHQuc3QucmVtb3ZhbERlbGF5KSk6dC5fY2xvc2UoKSl9LF9jbG9zZTpmdW5jdGlvbigpe3UoXCJDbG9zZVwiKTt2YXIgbj1cIm1mcC1yZW1vdmluZyBtZnAtcmVhZHkgXCI7aWYodC5iZ092ZXJsYXkuZGV0YWNoKCksdC53cmFwLmRldGFjaCgpLHQuY29udGFpbmVyLmVtcHR5KCksdC5zdC5tYWluQ2xhc3MmJihuKz10LnN0Lm1haW5DbGFzcytcIiBcIiksdC5fcmVtb3ZlQ2xhc3NGcm9tTUZQKG4pLHQuZml4ZWRDb250ZW50UG9zKXt2YXIgbz17bWFyZ2luUmlnaHQ6XCJcIn07dC5pc0lFNz9lKFwiYm9keSwgaHRtbFwiKS5jc3MoXCJvdmVyZmxvd1wiLFwiXCIpOm8ub3ZlcmZsb3c9XCJcIixlKFwiaHRtbFwiKS5jc3Mobyl9aS5vZmYoXCJrZXl1cC5tZnAgZm9jdXNpbi5tZnBcIiksdC5ldi5vZmYoXCIubWZwXCIpLHQud3JhcC5hdHRyKFwiY2xhc3NcIixcIm1mcC13cmFwXCIpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKSx0LmJnT3ZlcmxheS5hdHRyKFwiY2xhc3NcIixcIm1mcC1iZ1wiKSx0LmNvbnRhaW5lci5hdHRyKFwiY2xhc3NcIixcIm1mcC1jb250YWluZXJcIiksIXQuc3Quc2hvd0Nsb3NlQnRufHx0LnN0LmNsb3NlQnRuSW5zaWRlJiYhMCE9PXQuY3VyclRlbXBsYXRlW3QuY3Vyckl0ZW0udHlwZV18fHQuY3VyclRlbXBsYXRlLmNsb3NlQnRuJiZ0LmN1cnJUZW1wbGF0ZS5jbG9zZUJ0bi5kZXRhY2goKSx0LnN0LmF1dG9Gb2N1c0xhc3QmJnQuX2xhc3RGb2N1c2VkRWwmJmUodC5fbGFzdEZvY3VzZWRFbCkuZm9jdXMoKSx0LmN1cnJJdGVtPW51bGwsdC5jb250ZW50PW51bGwsdC5jdXJyVGVtcGxhdGU9bnVsbCx0LnByZXZIZWlnaHQ9MCx1KFwiQWZ0ZXJDbG9zZVwiKX0sdXBkYXRlU2l6ZTpmdW5jdGlvbihlKXtpZih0LmlzSU9TKXt2YXIgbj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgvd2luZG93LmlubmVyV2lkdGgsaT13aW5kb3cuaW5uZXJIZWlnaHQqbjt0LndyYXAuY3NzKFwiaGVpZ2h0XCIsaSksdC53SD1pfWVsc2UgdC53SD1lfHxjLmhlaWdodCgpO3QuZml4ZWRDb250ZW50UG9zfHx0LndyYXAuY3NzKFwiaGVpZ2h0XCIsdC53SCksdShcIlJlc2l6ZVwiKX0sdXBkYXRlSXRlbUhUTUw6ZnVuY3Rpb24oKXt2YXIgbj10Lml0ZW1zW3QuaW5kZXhdO3QuY29udGVudENvbnRhaW5lci5kZXRhY2goKSx0LmNvbnRlbnQmJnQuY29udGVudC5kZXRhY2goKSxuLnBhcnNlZHx8KG49dC5wYXJzZUVsKHQuaW5kZXgpKTt2YXIgaT1uLnR5cGU7aWYodShcIkJlZm9yZUNoYW5nZVwiLFt0LmN1cnJJdGVtP3QuY3Vyckl0ZW0udHlwZTpcIlwiLGldKSx0LmN1cnJJdGVtPW4sIXQuY3VyclRlbXBsYXRlW2ldKXt2YXIgcj0hIXQuc3RbaV0mJnQuc3RbaV0ubWFya3VwO3UoXCJGaXJzdE1hcmt1cFBhcnNlXCIsciksdC5jdXJyVGVtcGxhdGVbaV09IXJ8fGUocil9byYmbyE9PW4udHlwZSYmdC5jb250YWluZXIucmVtb3ZlQ2xhc3MoXCJtZnAtXCIrbytcIi1ob2xkZXJcIik7dmFyIGE9dFtcImdldFwiK2kuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkraS5zbGljZSgxKV0obix0LmN1cnJUZW1wbGF0ZVtpXSk7dC5hcHBlbmRDb250ZW50KGEsaSksbi5wcmVsb2FkZWQ9ITAsdShcIkNoYW5nZVwiLG4pLG89bi50eXBlLHQuY29udGFpbmVyLnByZXBlbmQodC5jb250ZW50Q29udGFpbmVyKSx1KFwiQWZ0ZXJDaGFuZ2VcIil9LGFwcGVuZENvbnRlbnQ6ZnVuY3Rpb24oZSxuKXt0LmNvbnRlbnQ9ZSxlP3Quc3Quc2hvd0Nsb3NlQnRuJiZ0LnN0LmNsb3NlQnRuSW5zaWRlJiYhMD09PXQuY3VyclRlbXBsYXRlW25dP3QuY29udGVudC5maW5kKFwiLm1mcC1jbG9zZVwiKS5sZW5ndGh8fHQuY29udGVudC5hcHBlbmQoZigpKTp0LmNvbnRlbnQ9ZTp0LmNvbnRlbnQ9XCJcIix1KFwiQmVmb3JlQXBwZW5kXCIpLHQuY29udGFpbmVyLmFkZENsYXNzKFwibWZwLVwiK24rXCItaG9sZGVyXCIpLHQuY29udGVudENvbnRhaW5lci5hcHBlbmQodC5jb250ZW50KX0scGFyc2VFbDpmdW5jdGlvbihuKXt2YXIgaSxvPXQuaXRlbXNbbl07aWYoby50YWdOYW1lP289e2VsOmUobyl9OihpPW8udHlwZSxvPXtkYXRhOm8sc3JjOm8uc3JjfSksby5lbCl7Zm9yKHZhciByPXQudHlwZXMsYT0wO2E8ci5sZW5ndGg7YSsrKWlmKG8uZWwuaGFzQ2xhc3MoXCJtZnAtXCIrclthXSkpe2k9clthXTticmVha31vLnNyYz1vLmVsLmF0dHIoXCJkYXRhLW1mcC1zcmNcIiksby5zcmN8fChvLnNyYz1vLmVsLmF0dHIoXCJocmVmXCIpKX1yZXR1cm4gby50eXBlPWl8fHQuc3QudHlwZXx8XCJpbmxpbmVcIixvLmluZGV4PW4sby5wYXJzZWQ9ITAsdC5pdGVtc1tuXT1vLHUoXCJFbGVtZW50UGFyc2VcIixvKSx0Lml0ZW1zW25dfSxhZGRHcm91cDpmdW5jdGlvbihlLG4pe3ZhciBpPWZ1bmN0aW9uKGkpe2kubWZwRWw9dGhpcyx0Ll9vcGVuQ2xpY2soaSxlLG4pfTtufHwobj17fSk7dmFyIG89XCJjbGljay5tYWduaWZpY1BvcHVwXCI7bi5tYWluRWw9ZSxuLml0ZW1zPyhuLmlzT2JqPSEwLGUub2ZmKG8pLm9uKG8saSkpOihuLmlzT2JqPSExLG4uZGVsZWdhdGU/ZS5vZmYobykub24obyxuLmRlbGVnYXRlLGkpOihuLml0ZW1zPWUsZS5vZmYobykub24obyxpKSkpfSxfb3BlbkNsaWNrOmZ1bmN0aW9uKG4saSxvKXtpZigodm9pZCAwIT09by5taWRDbGljaz9vLm1pZENsaWNrOmUubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5taWRDbGljayl8fCEoMj09PW4ud2hpY2h8fG4uY3RybEtleXx8bi5tZXRhS2V5fHxuLmFsdEtleXx8bi5zaGlmdEtleSkpe3ZhciByPXZvaWQgMCE9PW8uZGlzYWJsZU9uP28uZGlzYWJsZU9uOmUubWFnbmlmaWNQb3B1cC5kZWZhdWx0cy5kaXNhYmxlT247aWYocilpZihlLmlzRnVuY3Rpb24ocikpe2lmKCFyLmNhbGwodCkpcmV0dXJuITB9ZWxzZSBpZihjLndpZHRoKCk8cilyZXR1cm4hMDtuLnR5cGUmJihuLnByZXZlbnREZWZhdWx0KCksdC5pc09wZW4mJm4uc3RvcFByb3BhZ2F0aW9uKCkpLG8uZWw9ZShuLm1mcEVsKSxvLmRlbGVnYXRlJiYoby5pdGVtcz1pLmZpbmQoby5kZWxlZ2F0ZSkpLHQub3BlbihvKX19LHVwZGF0ZVN0YXR1czpmdW5jdGlvbihlLGkpe2lmKHQucHJlbG9hZGVyKXtuIT09ZSYmdC5jb250YWluZXIucmVtb3ZlQ2xhc3MoXCJtZnAtcy1cIituKSxpfHxcImxvYWRpbmdcIiE9PWV8fChpPXQuc3QudExvYWRpbmcpO3ZhciBvPXtzdGF0dXM6ZSx0ZXh0Oml9O3UoXCJVcGRhdGVTdGF0dXNcIixvKSxlPW8uc3RhdHVzLGk9by50ZXh0LHQucHJlbG9hZGVyLmh0bWwoaSksdC5wcmVsb2FkZXIuZmluZChcImFcIikub24oXCJjbGlja1wiLGZ1bmN0aW9uKGUpe2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9KSx0LmNvbnRhaW5lci5hZGRDbGFzcyhcIm1mcC1zLVwiK2UpLG49ZX19LF9jaGVja0lmQ2xvc2U6ZnVuY3Rpb24obil7aWYoIWUobikuaGFzQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKSl7dmFyIGk9dC5zdC5jbG9zZU9uQ29udGVudENsaWNrLG89dC5zdC5jbG9zZU9uQmdDbGljaztpZihpJiZvKXJldHVybiEwO2lmKCF0LmNvbnRlbnR8fGUobikuaGFzQ2xhc3MoXCJtZnAtY2xvc2VcIil8fHQucHJlbG9hZGVyJiZuPT09dC5wcmVsb2FkZXJbMF0pcmV0dXJuITA7aWYobj09PXQuY29udGVudFswXXx8ZS5jb250YWlucyh0LmNvbnRlbnRbMF0sbikpe2lmKGkpcmV0dXJuITB9ZWxzZSBpZihvJiZlLmNvbnRhaW5zKGRvY3VtZW50LG4pKXJldHVybiEwO3JldHVybiExfX0sX2FkZENsYXNzVG9NRlA6ZnVuY3Rpb24oZSl7dC5iZ092ZXJsYXkuYWRkQ2xhc3MoZSksdC53cmFwLmFkZENsYXNzKGUpfSxfcmVtb3ZlQ2xhc3NGcm9tTUZQOmZ1bmN0aW9uKGUpe3RoaXMuYmdPdmVybGF5LnJlbW92ZUNsYXNzKGUpLHQud3JhcC5yZW1vdmVDbGFzcyhlKX0sX2hhc1Njcm9sbEJhcjpmdW5jdGlvbihlKXtyZXR1cm4odC5pc0lFNz9pLmhlaWdodCgpOmRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0KT4oZXx8Yy5oZWlnaHQoKSl9LF9zZXRGb2N1czpmdW5jdGlvbigpeyh0LnN0LmZvY3VzP3QuY29udGVudC5maW5kKHQuc3QuZm9jdXMpLmVxKDApOnQud3JhcCkuZm9jdXMoKX0sX29uRm9jdXNJbjpmdW5jdGlvbihuKXtpZihuLnRhcmdldCE9PXQud3JhcFswXSYmIWUuY29udGFpbnModC53cmFwWzBdLG4udGFyZ2V0KSlyZXR1cm4gdC5fc2V0Rm9jdXMoKSwhMX0sX3BhcnNlTWFya3VwOmZ1bmN0aW9uKHQsbixpKXt2YXIgbztpLmRhdGEmJihuPWUuZXh0ZW5kKGkuZGF0YSxuKSksdShcIk1hcmt1cFBhcnNlXCIsW3QsbixpXSksZS5lYWNoKG4sZnVuY3Rpb24obixpKXtpZih2b2lkIDA9PT1pfHwhMT09PWkpcmV0dXJuITA7aWYobz1uLnNwbGl0KFwiX1wiKSxvLmxlbmd0aD4xKXt2YXIgcj10LmZpbmQoXCIubWZwLVwiK29bMF0pO2lmKHIubGVuZ3RoPjApe3ZhciBhPW9bMV07XCJyZXBsYWNlV2l0aFwiPT09YT9yWzBdIT09aVswXSYmci5yZXBsYWNlV2l0aChpKTpcImltZ1wiPT09YT9yLmlzKFwiaW1nXCIpP3IuYXR0cihcInNyY1wiLGkpOnIucmVwbGFjZVdpdGgoZShcIjxpbWc+XCIpLmF0dHIoXCJzcmNcIixpKS5hdHRyKFwiY2xhc3NcIixyLmF0dHIoXCJjbGFzc1wiKSkpOnIuYXR0cihvWzFdLGkpfX1lbHNlIHQuZmluZChcIi5tZnAtXCIrbikuaHRtbChpKX0pfSxfZ2V0U2Nyb2xsYmFyU2l6ZTpmdW5jdGlvbigpe2lmKHZvaWQgMD09PXQuc2Nyb2xsYmFyU2l6ZSl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLnN0eWxlLmNzc1RleHQ9XCJ3aWR0aDogOTlweDsgaGVpZ2h0OiA5OXB4OyBvdmVyZmxvdzogc2Nyb2xsOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTk5OTlweDtcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLHQuc2Nyb2xsYmFyU2l6ZT1lLm9mZnNldFdpZHRoLWUuY2xpZW50V2lkdGgsZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKX1yZXR1cm4gdC5zY3JvbGxiYXJTaXplfX0sZS5tYWduaWZpY1BvcHVwPXtpbnN0YW5jZTpudWxsLHByb3RvOnMucHJvdG90eXBlLG1vZHVsZXM6W10sb3BlbjpmdW5jdGlvbih0LG4pe3JldHVybiBtKCksdD10P2UuZXh0ZW5kKCEwLHt9LHQpOnt9LHQuaXNPYmo9ITAsdC5pbmRleD1ufHwwLHRoaXMuaW5zdGFuY2Uub3Blbih0KX0sY2xvc2U6ZnVuY3Rpb24oKXtyZXR1cm4gZS5tYWduaWZpY1BvcHVwLmluc3RhbmNlJiZlLm1hZ25pZmljUG9wdXAuaW5zdGFuY2UuY2xvc2UoKX0scmVnaXN0ZXJNb2R1bGU6ZnVuY3Rpb24odCxuKXtuLm9wdGlvbnMmJihlLm1hZ25pZmljUG9wdXAuZGVmYXVsdHNbdF09bi5vcHRpb25zKSxlLmV4dGVuZCh0aGlzLnByb3RvLG4ucHJvdG8pLHRoaXMubW9kdWxlcy5wdXNoKHQpfSxkZWZhdWx0czp7ZGlzYWJsZU9uOjAsa2V5Om51bGwsbWlkQ2xpY2s6ITEsbWFpbkNsYXNzOlwiXCIscHJlbG9hZGVyOiEwLGZvY3VzOlwiXCIsY2xvc2VPbkNvbnRlbnRDbGljazohMSxjbG9zZU9uQmdDbGljazohMCxjbG9zZUJ0bkluc2lkZTohMCxzaG93Q2xvc2VCdG46ITAsZW5hYmxlRXNjYXBlS2V5OiEwLG1vZGFsOiExLGFsaWduVG9wOiExLHJlbW92YWxEZWxheTowLHByZXBlbmRUbzpudWxsLGZpeGVkQ29udGVudFBvczpcImF1dG9cIixmaXhlZEJnUG9zOlwiYXV0b1wiLG92ZXJmbG93WTpcImF1dG9cIixjbG9zZU1hcmt1cDonPGJ1dHRvbiB0aXRsZT1cIiV0aXRsZSVcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtZnAtY2xvc2VcIj4mIzIxNTs8L2J1dHRvbj4nLHRDbG9zZTpcIkNsb3NlIChFc2MpXCIsdExvYWRpbmc6XCJMb2FkaW5nLi4uXCIsYXV0b0ZvY3VzTGFzdDohMH19LGUuZm4ubWFnbmlmaWNQb3B1cD1mdW5jdGlvbihuKXttKCk7dmFyIGk9ZSh0aGlzKTtpZihcInN0cmluZ1wiPT10eXBlb2YgbilpZihcIm9wZW5cIj09PW4pe3ZhciBvLHI9bD9pLmRhdGEoXCJtYWduaWZpY1BvcHVwXCIpOmlbMF0ubWFnbmlmaWNQb3B1cCxhPXBhcnNlSW50KGFyZ3VtZW50c1sxXSwxMCl8fDA7ci5pdGVtcz9vPXIuaXRlbXNbYV06KG89aSxyLmRlbGVnYXRlJiYobz1vLmZpbmQoci5kZWxlZ2F0ZSkpLG89by5lcShhKSksdC5fb3BlbkNsaWNrKHttZnBFbDpvfSxpLHIpfWVsc2UgdC5pc09wZW4mJnRbbl0uYXBwbHkodCxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpO2Vsc2Ugbj1lLmV4dGVuZCghMCx7fSxuKSxsP2kuZGF0YShcIm1hZ25pZmljUG9wdXBcIixuKTppWzBdLm1hZ25pZmljUG9wdXA9bix0LmFkZEdyb3VwKGksbik7cmV0dXJuIGl9O3ZhciB2LGgsQyx5PWZ1bmN0aW9uKCl7QyYmKGguYWZ0ZXIoQy5hZGRDbGFzcyh2KSkuZGV0YWNoKCksQz1udWxsKX07ZS5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiaW5saW5lXCIse29wdGlvbnM6e2hpZGRlbkNsYXNzOlwiaGlkZVwiLG1hcmt1cDpcIlwiLHROb3RGb3VuZDpcIkNvbnRlbnQgbm90IGZvdW5kXCJ9LHByb3RvOntpbml0SW5saW5lOmZ1bmN0aW9uKCl7dC50eXBlcy5wdXNoKFwiaW5saW5lXCIpLGQoXCJDbG9zZS5pbmxpbmVcIixmdW5jdGlvbigpe3koKX0pfSxnZXRJbmxpbmU6ZnVuY3Rpb24obixpKXtpZih5KCksbi5zcmMpe3ZhciBvPXQuc3QuaW5saW5lLHI9ZShuLnNyYyk7aWYoci5sZW5ndGgpe3ZhciBhPXJbMF0ucGFyZW50Tm9kZTthJiZhLnRhZ05hbWUmJihofHwodj1vLmhpZGRlbkNsYXNzLGg9cCh2KSx2PVwibWZwLVwiK3YpLEM9ci5hZnRlcihoKS5kZXRhY2goKS5yZW1vdmVDbGFzcyh2KSksdC51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKX1lbHNlIHQudXBkYXRlU3RhdHVzKFwiZXJyb3JcIixvLnROb3RGb3VuZCkscj1lKFwiPGRpdj5cIik7cmV0dXJuIG4uaW5saW5lRWxlbWVudD1yLHJ9cmV0dXJuIHQudXBkYXRlU3RhdHVzKFwicmVhZHlcIiksdC5fcGFyc2VNYXJrdXAoaSx7fSxuKSxpfX19KTt2YXIgdyxiPWZ1bmN0aW9uKCl7dyYmZShkb2N1bWVudC5ib2R5KS5yZW1vdmVDbGFzcyh3KX0sST1mdW5jdGlvbigpe2IoKSx0LnJlcSYmdC5yZXEuYWJvcnQoKX07ZS5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiYWpheFwiLHtvcHRpb25zOntzZXR0aW5nczpudWxsLGN1cnNvcjpcIm1mcC1hamF4LWN1clwiLHRFcnJvcjonPGEgaHJlZj1cIiV1cmwlXCI+VGhlIGNvbnRlbnQ8L2E+IGNvdWxkIG5vdCBiZSBsb2FkZWQuJ30scHJvdG86e2luaXRBamF4OmZ1bmN0aW9uKCl7dC50eXBlcy5wdXNoKFwiYWpheFwiKSx3PXQuc3QuYWpheC5jdXJzb3IsZChcIkNsb3NlLmFqYXhcIixJKSxkKFwiQmVmb3JlQ2hhbmdlLmFqYXhcIixJKX0sZ2V0QWpheDpmdW5jdGlvbihuKXt3JiZlKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHcpLHQudXBkYXRlU3RhdHVzKFwibG9hZGluZ1wiKTt2YXIgaT1lLmV4dGVuZCh7dXJsOm4uc3JjLHN1Y2Nlc3M6ZnVuY3Rpb24oaSxvLHIpe3ZhciBhPXtkYXRhOmkseGhyOnJ9O3UoXCJQYXJzZUFqYXhcIixhKSx0LmFwcGVuZENvbnRlbnQoZShhLmRhdGEpLFwiYWpheFwiKSxuLmZpbmlzaGVkPSEwLGIoKSx0Ll9zZXRGb2N1cygpLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LndyYXAuYWRkQ2xhc3MoXCJtZnAtcmVhZHlcIil9LDE2KSx0LnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpLHUoXCJBamF4Q29udGVudEFkZGVkXCIpfSxlcnJvcjpmdW5jdGlvbigpe2IoKSxuLmZpbmlzaGVkPW4ubG9hZEVycm9yPSEwLHQudXBkYXRlU3RhdHVzKFwiZXJyb3JcIix0LnN0LmFqYXgudEVycm9yLnJlcGxhY2UoXCIldXJsJVwiLG4uc3JjKSl9fSx0LnN0LmFqYXguc2V0dGluZ3MpO3JldHVybiB0LnJlcT1lLmFqYXgoaSksXCJcIn19fSk7dmFyIHgsaz1mdW5jdGlvbihuKXtpZihuLmRhdGEmJnZvaWQgMCE9PW4uZGF0YS50aXRsZSlyZXR1cm4gbi5kYXRhLnRpdGxlO3ZhciBpPXQuc3QuaW1hZ2UudGl0bGVTcmM7aWYoaSl7aWYoZS5pc0Z1bmN0aW9uKGkpKXJldHVybiBpLmNhbGwodCxuKTtpZihuLmVsKXJldHVybiBuLmVsLmF0dHIoaSl8fFwiXCJ9cmV0dXJuXCJcIn07ZS5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwiaW1hZ2VcIix7b3B0aW9uczp7bWFya3VwOic8ZGl2IGNsYXNzPVwibWZwLWZpZ3VyZVwiPjxkaXYgY2xhc3M9XCJtZnAtY2xvc2VcIj48L2Rpdj48ZmlndXJlPjxkaXYgY2xhc3M9XCJtZnAtaW1nXCI+PC9kaXY+PGZpZ2NhcHRpb24+PGRpdiBjbGFzcz1cIm1mcC1ib3R0b20tYmFyXCI+PGRpdiBjbGFzcz1cIm1mcC10aXRsZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJtZnAtY291bnRlclwiPjwvZGl2PjwvZGl2PjwvZmlnY2FwdGlvbj48L2ZpZ3VyZT48L2Rpdj4nLGN1cnNvcjpcIm1mcC16b29tLW91dC1jdXJcIix0aXRsZVNyYzpcInRpdGxlXCIsdmVydGljYWxGaXQ6ITAsdEVycm9yOic8YSBocmVmPVwiJXVybCVcIj5UaGUgaW1hZ2U8L2E+IGNvdWxkIG5vdCBiZSBsb2FkZWQuJ30scHJvdG86e2luaXRJbWFnZTpmdW5jdGlvbigpe3ZhciBuPXQuc3QuaW1hZ2UsaT1cIi5pbWFnZVwiO3QudHlwZXMucHVzaChcImltYWdlXCIpLGQoXCJPcGVuXCIraSxmdW5jdGlvbigpe1wiaW1hZ2VcIj09PXQuY3Vyckl0ZW0udHlwZSYmbi5jdXJzb3ImJmUoZG9jdW1lbnQuYm9keSkuYWRkQ2xhc3Mobi5jdXJzb3IpfSksZChcIkNsb3NlXCIraSxmdW5jdGlvbigpe24uY3Vyc29yJiZlKGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKG4uY3Vyc29yKSxjLm9mZihcInJlc2l6ZS5tZnBcIil9KSxkKFwiUmVzaXplXCIraSx0LnJlc2l6ZUltYWdlKSx0LmlzTG93SUUmJmQoXCJBZnRlckNoYW5nZVwiLHQucmVzaXplSW1hZ2UpfSxyZXNpemVJbWFnZTpmdW5jdGlvbigpe3ZhciBlPXQuY3Vyckl0ZW07aWYoZSYmZS5pbWcmJnQuc3QuaW1hZ2UudmVydGljYWxGaXQpe3ZhciBuPTA7dC5pc0xvd0lFJiYobj1wYXJzZUludChlLmltZy5jc3MoXCJwYWRkaW5nLXRvcFwiKSwxMCkrcGFyc2VJbnQoZS5pbWcuY3NzKFwicGFkZGluZy1ib3R0b21cIiksMTApKSxlLmltZy5jc3MoXCJtYXgtaGVpZ2h0XCIsdC53SC1uKX19LF9vbkltYWdlSGFzU2l6ZTpmdW5jdGlvbihlKXtlLmltZyYmKGUuaGFzU2l6ZT0hMCx4JiZjbGVhckludGVydmFsKHgpLGUuaXNDaGVja2luZ0ltZ1NpemU9ITEsdShcIkltYWdlSGFzU2l6ZVwiLGUpLGUuaW1nSGlkZGVuJiYodC5jb250ZW50JiZ0LmNvbnRlbnQucmVtb3ZlQ2xhc3MoXCJtZnAtbG9hZGluZ1wiKSxlLmltZ0hpZGRlbj0hMSkpfSxmaW5kSW1hZ2VTaXplOmZ1bmN0aW9uKGUpe3ZhciBuPTAsaT1lLmltZ1swXSxvPWZ1bmN0aW9uKHIpe3gmJmNsZWFySW50ZXJ2YWwoeCkseD1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKGkubmF0dXJhbFdpZHRoPjApcmV0dXJuIHZvaWQgdC5fb25JbWFnZUhhc1NpemUoZSk7bj4yMDAmJmNsZWFySW50ZXJ2YWwoeCksbisrLDM9PT1uP28oMTApOjQwPT09bj9vKDUwKToxMDA9PT1uJiZvKDUwMCl9LHIpfTtvKDEpfSxnZXRJbWFnZTpmdW5jdGlvbihuLGkpe3ZhciBvPTAscj1mdW5jdGlvbigpe24mJihuLmltZ1swXS5jb21wbGV0ZT8obi5pbWcub2ZmKFwiLm1mcGxvYWRlclwiKSxuPT09dC5jdXJySXRlbSYmKHQuX29uSW1hZ2VIYXNTaXplKG4pLHQudXBkYXRlU3RhdHVzKFwicmVhZHlcIikpLG4uaGFzU2l6ZT0hMCxuLmxvYWRlZD0hMCx1KFwiSW1hZ2VMb2FkQ29tcGxldGVcIikpOihvKyssbzwyMDA/c2V0VGltZW91dChyLDEwMCk6YSgpKSl9LGE9ZnVuY3Rpb24oKXtuJiYobi5pbWcub2ZmKFwiLm1mcGxvYWRlclwiKSxuPT09dC5jdXJySXRlbSYmKHQuX29uSW1hZ2VIYXNTaXplKG4pLHQudXBkYXRlU3RhdHVzKFwiZXJyb3JcIixzLnRFcnJvci5yZXBsYWNlKFwiJXVybCVcIixuLnNyYykpKSxuLmhhc1NpemU9ITAsbi5sb2FkZWQ9ITAsbi5sb2FkRXJyb3I9ITApfSxzPXQuc3QuaW1hZ2UsbD1pLmZpbmQoXCIubWZwLWltZ1wiKTtpZihsLmxlbmd0aCl7dmFyIGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtjLmNsYXNzTmFtZT1cIm1mcC1pbWdcIixuLmVsJiZuLmVsLmZpbmQoXCJpbWdcIikubGVuZ3RoJiYoYy5hbHQ9bi5lbC5maW5kKFwiaW1nXCIpLmF0dHIoXCJhbHRcIikpLG4uaW1nPWUoYykub24oXCJsb2FkLm1mcGxvYWRlclwiLHIpLm9uKFwiZXJyb3IubWZwbG9hZGVyXCIsYSksYy5zcmM9bi5zcmMsbC5pcyhcImltZ1wiKSYmKG4uaW1nPW4uaW1nLmNsb25lKCkpLGM9bi5pbWdbMF0sYy5uYXR1cmFsV2lkdGg+MD9uLmhhc1NpemU9ITA6Yy53aWR0aHx8KG4uaGFzU2l6ZT0hMSl9cmV0dXJuIHQuX3BhcnNlTWFya3VwKGkse3RpdGxlOmsobiksaW1nX3JlcGxhY2VXaXRoOm4uaW1nfSxuKSx0LnJlc2l6ZUltYWdlKCksbi5oYXNTaXplPyh4JiZjbGVhckludGVydmFsKHgpLG4ubG9hZEVycm9yPyhpLmFkZENsYXNzKFwibWZwLWxvYWRpbmdcIiksdC51cGRhdGVTdGF0dXMoXCJlcnJvclwiLHMudEVycm9yLnJlcGxhY2UoXCIldXJsJVwiLG4uc3JjKSkpOihpLnJlbW92ZUNsYXNzKFwibWZwLWxvYWRpbmdcIiksdC51cGRhdGVTdGF0dXMoXCJyZWFkeVwiKSksaSk6KHQudXBkYXRlU3RhdHVzKFwibG9hZGluZ1wiKSxuLmxvYWRpbmc9ITAsbi5oYXNTaXplfHwobi5pbWdIaWRkZW49ITAsaS5hZGRDbGFzcyhcIm1mcC1sb2FkaW5nXCIpLHQuZmluZEltYWdlU2l6ZShuKSksaSl9fX0pO3ZhciBULF89ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09VCYmKFQ9dm9pZCAwIT09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIikuc3R5bGUuTW96VHJhbnNmb3JtKSxUfTtlLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJ6b29tXCIse29wdGlvbnM6e2VuYWJsZWQ6ITEsZWFzaW5nOlwiZWFzZS1pbi1vdXRcIixkdXJhdGlvbjozMDAsb3BlbmVyOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKFwiaW1nXCIpP2U6ZS5maW5kKFwiaW1nXCIpfX0scHJvdG86e2luaXRab29tOmZ1bmN0aW9uKCl7dmFyIGUsbj10LnN0Lnpvb20saT1cIi56b29tXCI7aWYobi5lbmFibGVkJiZ0LnN1cHBvcnRzVHJhbnNpdGlvbil7dmFyIG8scixhPW4uZHVyYXRpb24scz1mdW5jdGlvbihlKXt2YXIgdD1lLmNsb25lKCkucmVtb3ZlQXR0cihcInN0eWxlXCIpLnJlbW92ZUF0dHIoXCJjbGFzc1wiKS5hZGRDbGFzcyhcIm1mcC1hbmltYXRlZC1pbWFnZVwiKSxpPVwiYWxsIFwiK24uZHVyYXRpb24vMWUzK1wicyBcIituLmVhc2luZyxvPXtwb3NpdGlvbjpcImZpeGVkXCIsekluZGV4Ojk5OTksbGVmdDowLHRvcDowLFwiLXdlYmtpdC1iYWNrZmFjZS12aXNpYmlsaXR5XCI6XCJoaWRkZW5cIn0scj1cInRyYW5zaXRpb25cIjtyZXR1cm4gb1tcIi13ZWJraXQtXCIrcl09b1tcIi1tb3otXCIrcl09b1tcIi1vLVwiK3JdPW9bcl09aSx0LmNzcyhvKSx0fSxsPWZ1bmN0aW9uKCl7dC5jb250ZW50LmNzcyhcInZpc2liaWxpdHlcIixcInZpc2libGVcIil9O2QoXCJCdWlsZENvbnRyb2xzXCIraSxmdW5jdGlvbigpe2lmKHQuX2FsbG93Wm9vbSgpKXtpZihjbGVhclRpbWVvdXQobyksdC5jb250ZW50LmNzcyhcInZpc2liaWxpdHlcIixcImhpZGRlblwiKSwhKGU9dC5fZ2V0SXRlbVRvWm9vbSgpKSlyZXR1cm4gdm9pZCBsKCk7cj1zKGUpLHIuY3NzKHQuX2dldE9mZnNldCgpKSx0LndyYXAuYXBwZW5kKHIpLG89c2V0VGltZW91dChmdW5jdGlvbigpe3IuY3NzKHQuX2dldE9mZnNldCghMCkpLG89c2V0VGltZW91dChmdW5jdGlvbigpe2woKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5yZW1vdmUoKSxlPXI9bnVsbCx1KFwiWm9vbUFuaW1hdGlvbkVuZGVkXCIpfSwxNil9LGEpfSwxNil9fSksZChcIkJlZm9yZUNsb3NlXCIraSxmdW5jdGlvbigpe2lmKHQuX2FsbG93Wm9vbSgpKXtpZihjbGVhclRpbWVvdXQobyksdC5zdC5yZW1vdmFsRGVsYXk9YSwhZSl7aWYoIShlPXQuX2dldEl0ZW1Ub1pvb20oKSkpcmV0dXJuO3I9cyhlKX1yLmNzcyh0Ll9nZXRPZmZzZXQoITApKSx0LndyYXAuYXBwZW5kKHIpLHQuY29udGVudC5jc3MoXCJ2aXNpYmlsaXR5XCIsXCJoaWRkZW5cIiksc2V0VGltZW91dChmdW5jdGlvbigpe3IuY3NzKHQuX2dldE9mZnNldCgpKX0sMTYpfX0pLGQoXCJDbG9zZVwiK2ksZnVuY3Rpb24oKXt0Ll9hbGxvd1pvb20oKSYmKGwoKSxyJiZyLnJlbW92ZSgpLGU9bnVsbCl9KX19LF9hbGxvd1pvb206ZnVuY3Rpb24oKXtyZXR1cm5cImltYWdlXCI9PT10LmN1cnJJdGVtLnR5cGV9LF9nZXRJdGVtVG9ab29tOmZ1bmN0aW9uKCl7cmV0dXJuISF0LmN1cnJJdGVtLmhhc1NpemUmJnQuY3Vyckl0ZW0uaW1nfSxfZ2V0T2Zmc2V0OmZ1bmN0aW9uKG4pe3ZhciBpO2k9bj90LmN1cnJJdGVtLmltZzp0LnN0Lnpvb20ub3BlbmVyKHQuY3Vyckl0ZW0uZWx8fHQuY3Vyckl0ZW0pO3ZhciBvPWkub2Zmc2V0KCkscj1wYXJzZUludChpLmNzcyhcInBhZGRpbmctdG9wXCIpLDEwKSxhPXBhcnNlSW50KGkuY3NzKFwicGFkZGluZy1ib3R0b21cIiksMTApO28udG9wLT1lKHdpbmRvdykuc2Nyb2xsVG9wKCktcjt2YXIgcz17d2lkdGg6aS53aWR0aCgpLGhlaWdodDoobD9pLmlubmVySGVpZ2h0KCk6aVswXS5vZmZzZXRIZWlnaHQpLWEtcn07cmV0dXJuIF8oKT9zW1wiLW1vei10cmFuc2Zvcm1cIl09cy50cmFuc2Zvcm09XCJ0cmFuc2xhdGUoXCIrby5sZWZ0K1wicHgsXCIrby50b3ArXCJweClcIjoocy5sZWZ0PW8ubGVmdCxzLnRvcD1vLnRvcCksc319fSk7dmFyIFA9ZnVuY3Rpb24oZSl7aWYodC5jdXJyVGVtcGxhdGUuaWZyYW1lKXt2YXIgbj10LmN1cnJUZW1wbGF0ZS5pZnJhbWUuZmluZChcImlmcmFtZVwiKTtuLmxlbmd0aCYmKGV8fChuWzBdLnNyYz1cIi8vYWJvdXQ6YmxhbmtcIiksdC5pc0lFOCYmbi5jc3MoXCJkaXNwbGF5XCIsZT9cImJsb2NrXCI6XCJub25lXCIpKX19O2UubWFnbmlmaWNQb3B1cC5yZWdpc3Rlck1vZHVsZShcImlmcmFtZVwiLHtvcHRpb25zOnttYXJrdXA6JzxkaXYgY2xhc3M9XCJtZnAtaWZyYW1lLXNjYWxlclwiPjxkaXYgY2xhc3M9XCJtZnAtY2xvc2VcIj48L2Rpdj48aWZyYW1lIGNsYXNzPVwibWZwLWlmcmFtZVwiIHNyYz1cIi8vYWJvdXQ6YmxhbmtcIiBmcmFtZWJvcmRlcj1cIjBcIiBhbGxvd2Z1bGxzY3JlZW4+PC9pZnJhbWU+PC9kaXY+JyxzcmNBY3Rpb246XCJpZnJhbWVfc3JjXCIscGF0dGVybnM6e3lvdXR1YmU6e2luZGV4OlwieW91dHViZS5jb21cIixpZDpcInY9XCIsc3JjOlwiLy93d3cueW91dHViZS5jb20vZW1iZWQvJWlkJT9hdXRvcGxheT0xXCJ9LHZpbWVvOntpbmRleDpcInZpbWVvLmNvbS9cIixpZDpcIi9cIixzcmM6XCIvL3BsYXllci52aW1lby5jb20vdmlkZW8vJWlkJT9hdXRvcGxheT0xXCJ9LGdtYXBzOntpbmRleDpcIi8vbWFwcy5nb29nbGUuXCIsc3JjOlwiJWlkJSZvdXRwdXQ9ZW1iZWRcIn19fSxwcm90bzp7aW5pdElmcmFtZTpmdW5jdGlvbigpe3QudHlwZXMucHVzaChcImlmcmFtZVwiKSxkKFwiQmVmb3JlQ2hhbmdlXCIsZnVuY3Rpb24oZSx0LG4pe3QhPT1uJiYoXCJpZnJhbWVcIj09PXQ/UCgpOlwiaWZyYW1lXCI9PT1uJiZQKCEwKSl9KSxkKFwiQ2xvc2UuaWZyYW1lXCIsZnVuY3Rpb24oKXtQKCl9KX0sZ2V0SWZyYW1lOmZ1bmN0aW9uKG4saSl7dmFyIG89bi5zcmMscj10LnN0LmlmcmFtZTtlLmVhY2goci5wYXR0ZXJucyxmdW5jdGlvbigpe2lmKG8uaW5kZXhPZih0aGlzLmluZGV4KT4tMSlyZXR1cm4gdGhpcy5pZCYmKG89XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMuaWQ/by5zdWJzdHIoby5sYXN0SW5kZXhPZih0aGlzLmlkKSt0aGlzLmlkLmxlbmd0aCxvLmxlbmd0aCk6dGhpcy5pZC5jYWxsKHRoaXMsbykpLG89dGhpcy5zcmMucmVwbGFjZShcIiVpZCVcIixvKSwhMX0pO3ZhciBhPXt9O3JldHVybiByLnNyY0FjdGlvbiYmKGFbci5zcmNBY3Rpb25dPW8pLHQuX3BhcnNlTWFya3VwKGksYSxuKSx0LnVwZGF0ZVN0YXR1cyhcInJlYWR5XCIpLGl9fX0pO3ZhciBTPWZ1bmN0aW9uKGUpe3ZhciBuPXQuaXRlbXMubGVuZ3RoO3JldHVybiBlPm4tMT9lLW46ZTwwP24rZTplfSxFPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZS5yZXBsYWNlKC8lY3VyciUvZ2ksdCsxKS5yZXBsYWNlKC8ldG90YWwlL2dpLG4pfTtlLm1hZ25pZmljUG9wdXAucmVnaXN0ZXJNb2R1bGUoXCJnYWxsZXJ5XCIse29wdGlvbnM6e2VuYWJsZWQ6ITEsYXJyb3dNYXJrdXA6JzxidXR0b24gdGl0bGU9XCIldGl0bGUlXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWZwLWFycm93IG1mcC1hcnJvdy0lZGlyJVwiPjwvYnV0dG9uPicscHJlbG9hZDpbMCwyXSxuYXZpZ2F0ZUJ5SW1nQ2xpY2s6ITAsYXJyb3dzOiEwLHRQcmV2OlwiUHJldmlvdXMgKExlZnQgYXJyb3cga2V5KVwiLHROZXh0OlwiTmV4dCAoUmlnaHQgYXJyb3cga2V5KVwiLHRDb3VudGVyOlwiJWN1cnIlIG9mICV0b3RhbCVcIn0scHJvdG86e2luaXRHYWxsZXJ5OmZ1bmN0aW9uKCl7dmFyIG49dC5zdC5nYWxsZXJ5LG89XCIubWZwLWdhbGxlcnlcIjtpZih0LmRpcmVjdGlvbj0hMCwhbnx8IW4uZW5hYmxlZClyZXR1cm4hMTtyKz1cIiBtZnAtZ2FsbGVyeVwiLGQoXCJPcGVuXCIrbyxmdW5jdGlvbigpe24ubmF2aWdhdGVCeUltZ0NsaWNrJiZ0LndyYXAub24oXCJjbGlja1wiK28sXCIubWZwLWltZ1wiLGZ1bmN0aW9uKCl7aWYodC5pdGVtcy5sZW5ndGg+MSlyZXR1cm4gdC5uZXh0KCksITF9KSxpLm9uKFwia2V5ZG93blwiK28sZnVuY3Rpb24oZSl7Mzc9PT1lLmtleUNvZGU/dC5wcmV2KCk6Mzk9PT1lLmtleUNvZGUmJnQubmV4dCgpfSl9KSxkKFwiVXBkYXRlU3RhdHVzXCIrbyxmdW5jdGlvbihlLG4pe24udGV4dCYmKG4udGV4dD1FKG4udGV4dCx0LmN1cnJJdGVtLmluZGV4LHQuaXRlbXMubGVuZ3RoKSl9KSxkKFwiTWFya3VwUGFyc2VcIitvLGZ1bmN0aW9uKGUsaSxvLHIpe3ZhciBhPXQuaXRlbXMubGVuZ3RoO28uY291bnRlcj1hPjE/RShuLnRDb3VudGVyLHIuaW5kZXgsYSk6XCJcIn0pLGQoXCJCdWlsZENvbnRyb2xzXCIrbyxmdW5jdGlvbigpe2lmKHQuaXRlbXMubGVuZ3RoPjEmJm4uYXJyb3dzJiYhdC5hcnJvd0xlZnQpe3ZhciBpPW4uYXJyb3dNYXJrdXAsbz10LmFycm93TGVmdD1lKGkucmVwbGFjZSgvJXRpdGxlJS9naSxuLnRQcmV2KS5yZXBsYWNlKC8lZGlyJS9naSxcImxlZnRcIikpLmFkZENsYXNzKFwibWZwLXByZXZlbnQtY2xvc2VcIikscj10LmFycm93UmlnaHQ9ZShpLnJlcGxhY2UoLyV0aXRsZSUvZ2ksbi50TmV4dCkucmVwbGFjZSgvJWRpciUvZ2ksXCJyaWdodFwiKSkuYWRkQ2xhc3MoXCJtZnAtcHJldmVudC1jbG9zZVwiKTtvLmNsaWNrKGZ1bmN0aW9uKCl7dC5wcmV2KCl9KSxyLmNsaWNrKGZ1bmN0aW9uKCl7dC5uZXh0KCl9KSx0LmNvbnRhaW5lci5hcHBlbmQoby5hZGQocikpfX0pLGQoXCJDaGFuZ2VcIitvLGZ1bmN0aW9uKCl7dC5fcHJlbG9hZFRpbWVvdXQmJmNsZWFyVGltZW91dCh0Ll9wcmVsb2FkVGltZW91dCksdC5fcHJlbG9hZFRpbWVvdXQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QucHJlbG9hZE5lYXJieUltYWdlcygpLHQuX3ByZWxvYWRUaW1lb3V0PW51bGx9LDE2KX0pLGQoXCJDbG9zZVwiK28sZnVuY3Rpb24oKXtpLm9mZihvKSx0LndyYXAub2ZmKFwiY2xpY2tcIitvKSx0LmFycm93UmlnaHQ9dC5hcnJvd0xlZnQ9bnVsbH0pfSxuZXh0OmZ1bmN0aW9uKCl7dC5kaXJlY3Rpb249ITAsdC5pbmRleD1TKHQuaW5kZXgrMSksdC51cGRhdGVJdGVtSFRNTCgpfSxwcmV2OmZ1bmN0aW9uKCl7dC5kaXJlY3Rpb249ITEsdC5pbmRleD1TKHQuaW5kZXgtMSksdC51cGRhdGVJdGVtSFRNTCgpfSxnb1RvOmZ1bmN0aW9uKGUpe3QuZGlyZWN0aW9uPWU+PXQuaW5kZXgsdC5pbmRleD1lLHQudXBkYXRlSXRlbUhUTUwoKX0scHJlbG9hZE5lYXJieUltYWdlczpmdW5jdGlvbigpe3ZhciBlLG49dC5zdC5nYWxsZXJ5LnByZWxvYWQsaT1NYXRoLm1pbihuWzBdLHQuaXRlbXMubGVuZ3RoKSxvPU1hdGgubWluKG5bMV0sdC5pdGVtcy5sZW5ndGgpO2ZvcihlPTE7ZTw9KHQuZGlyZWN0aW9uP286aSk7ZSsrKXQuX3ByZWxvYWRJdGVtKHQuaW5kZXgrZSk7Zm9yKGU9MTtlPD0odC5kaXJlY3Rpb24/aTpvKTtlKyspdC5fcHJlbG9hZEl0ZW0odC5pbmRleC1lKX0sX3ByZWxvYWRJdGVtOmZ1bmN0aW9uKG4pe2lmKG49UyhuKSwhdC5pdGVtc1tuXS5wcmVsb2FkZWQpe3ZhciBpPXQuaXRlbXNbbl07aS5wYXJzZWR8fChpPXQucGFyc2VFbChuKSksdShcIkxhenlMb2FkXCIsaSksXCJpbWFnZVwiPT09aS50eXBlJiYoaS5pbWc9ZSgnPGltZyBjbGFzcz1cIm1mcC1pbWdcIiAvPicpLm9uKFwibG9hZC5tZnBsb2FkZXJcIixmdW5jdGlvbigpe2kuaGFzU2l6ZT0hMH0pLm9uKFwiZXJyb3IubWZwbG9hZGVyXCIsZnVuY3Rpb24oKXtpLmhhc1NpemU9ITAsaS5sb2FkRXJyb3I9ITAsdShcIkxhenlMb2FkRXJyb3JcIixpKX0pLmF0dHIoXCJzcmNcIixpLnNyYykpLGkucHJlbG9hZGVkPSEwfX19fSk7ZS5tYWduaWZpY1BvcHVwLnJlZ2lzdGVyTW9kdWxlKFwicmV0aW5hXCIse29wdGlvbnM6e3JlcGxhY2VTcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3JjLnJlcGxhY2UoL1xcLlxcdyskLyxmdW5jdGlvbihlKXtyZXR1cm5cIkAyeFwiK2V9KX0scmF0aW86MX0scHJvdG86e2luaXRSZXRpbmE6ZnVuY3Rpb24oKXtpZih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbz4xKXt2YXIgZT10LnN0LnJldGluYSxuPWUucmF0aW87bj1pc05hTihuKT9uKCk6bixuPjEmJihkKFwiSW1hZ2VIYXNTaXplLnJldGluYVwiLGZ1bmN0aW9uKGUsdCl7dC5pbWcuY3NzKHtcIm1heC13aWR0aFwiOnQuaW1nWzBdLm5hdHVyYWxXaWR0aC9uLHdpZHRoOlwiMTAwJVwifSl9KSxkKFwiRWxlbWVudFBhcnNlLnJldGluYVwiLGZ1bmN0aW9uKHQsaSl7aS5zcmM9ZS5yZXBsYWNlU3JjKGksbil9KSl9fX19KSxtKCl9KTsiLCIhZnVuY3Rpb24odCl7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIl0sdCk6XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwianF1ZXJ5XCIpKTp0KGpRdWVyeSl9KGZ1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciBlPXRoaXMsbj1mdW5jdGlvbigpe3ZhciBuPVtcImJyLXdyYXBwZXJcIl07XCJcIiE9PWUub3B0aW9ucy50aGVtZSYmbi5wdXNoKFwiYnItdGhlbWUtXCIrZS5vcHRpb25zLnRoZW1lKSxlLiRlbGVtLndyYXAodChcIjxkaXYgLz5cIix7Y2xhc3M6bi5qb2luKFwiIFwiKX0pKX0saT1mdW5jdGlvbigpe2UuJGVsZW0udW53cmFwKCl9LGE9ZnVuY3Rpb24obil7cmV0dXJuIHQuaXNOdW1lcmljKG4pJiYobj1NYXRoLmZsb29yKG4pKSx0KCdvcHRpb25bdmFsdWU9XCInK24rJ1wiXScsZS4kZWxlbSl9LHI9ZnVuY3Rpb24oKXt2YXIgbj1lLm9wdGlvbnMuaW5pdGlhbFJhdGluZztyZXR1cm4gbj9hKG4pOnQoXCJvcHRpb246c2VsZWN0ZWRcIixlLiRlbGVtKX0sbz1mdW5jdGlvbigpe3ZhciBuPWUuJGVsZW0uZmluZCgnb3B0aW9uW3ZhbHVlPVwiJytlLm9wdGlvbnMuZW1wdHlWYWx1ZSsnXCJdJyk7cmV0dXJuIW4ubGVuZ3RoJiZlLm9wdGlvbnMuYWxsb3dFbXB0eT8obj10KFwiPG9wdGlvbiAvPlwiLHt2YWx1ZTplLm9wdGlvbnMuZW1wdHlWYWx1ZX0pLG4ucHJlcGVuZFRvKGUuJGVsZW0pKTpufSxsPWZ1bmN0aW9uKHQpe3ZhciBuPWUuJGVsZW0uZGF0YShcImJhcnJhdGluZ1wiKTtyZXR1cm4gdm9pZCAwIT09dD9uW3RdOm59LHM9ZnVuY3Rpb24odCxuKXtudWxsIT09biYmXCJvYmplY3RcIj09dHlwZW9mIG4/ZS4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIsbik6ZS4kZWxlbS5kYXRhKFwiYmFycmF0aW5nXCIpW3RdPW59LHU9ZnVuY3Rpb24oKXt2YXIgdD1yKCksbj1vKCksaT10LnZhbCgpLGE9dC5kYXRhKFwiaHRtbFwiKT90LmRhdGEoXCJodG1sXCIpOnQudGV4dCgpLGw9bnVsbCE9PWUub3B0aW9ucy5hbGxvd0VtcHR5P2Uub3B0aW9ucy5hbGxvd0VtcHR5OiEhbi5sZW5ndGgsdT1uLmxlbmd0aD9uLnZhbCgpOm51bGwsZD1uLmxlbmd0aD9uLnRleHQoKTpudWxsO3MobnVsbCx7dXNlck9wdGlvbnM6ZS5vcHRpb25zLHJhdGluZ1ZhbHVlOmkscmF0aW5nVGV4dDphLG9yaWdpbmFsUmF0aW5nVmFsdWU6aSxvcmlnaW5hbFJhdGluZ1RleHQ6YSxhbGxvd0VtcHR5OmwsZW1wdHlSYXRpbmdWYWx1ZTp1LGVtcHR5UmF0aW5nVGV4dDpkLHJlYWRPbmx5OmUub3B0aW9ucy5yZWFkb25seSxyYXRpbmdNYWRlOiExfSl9LGQ9ZnVuY3Rpb24oKXtlLiRlbGVtLnJlbW92ZURhdGEoXCJiYXJyYXRpbmdcIil9LGM9ZnVuY3Rpb24oKXtyZXR1cm4gbChcInJhdGluZ1RleHRcIil9LGY9ZnVuY3Rpb24oKXtyZXR1cm4gbChcInJhdGluZ1ZhbHVlXCIpfSxnPWZ1bmN0aW9uKCl7dmFyIG49dChcIjxkaXYgLz5cIix7Y2xhc3M6XCJici13aWRnZXRcIn0pO3JldHVybiBlLiRlbGVtLmZpbmQoXCJvcHRpb25cIikuZWFjaChmdW5jdGlvbigpe3ZhciBpLGEscixvOyhpPXQodGhpcykudmFsKCkpIT09bChcImVtcHR5UmF0aW5nVmFsdWVcIikmJihhPXQodGhpcykudGV4dCgpLHI9dCh0aGlzKS5kYXRhKFwiaHRtbFwiKSxyJiYoYT1yKSxvPXQoXCI8YSAvPlwiLHtocmVmOlwiI1wiLFwiZGF0YS1yYXRpbmctdmFsdWVcIjppLFwiZGF0YS1yYXRpbmctdGV4dFwiOmEsaHRtbDplLm9wdGlvbnMuc2hvd1ZhbHVlcz9hOlwiXCJ9KSxuLmFwcGVuZChvKSl9KSxlLm9wdGlvbnMuc2hvd1NlbGVjdGVkUmF0aW5nJiZuLmFwcGVuZCh0KFwiPGRpdiAvPlwiLHt0ZXh0OlwiXCIsY2xhc3M6XCJici1jdXJyZW50LXJhdGluZ1wifSkpLGUub3B0aW9ucy5yZXZlcnNlJiZuLmFkZENsYXNzKFwiYnItcmV2ZXJzZVwiKSxlLm9wdGlvbnMucmVhZG9ubHkmJm4uYWRkQ2xhc3MoXCJici1yZWFkb25seVwiKSxufSxwPWZ1bmN0aW9uKCl7cmV0dXJuIGwoXCJ1c2VyT3B0aW9uc1wiKS5yZXZlcnNlP1wibmV4dEFsbFwiOlwicHJldkFsbFwifSxoPWZ1bmN0aW9uKHQpe2EodCkucHJvcChcInNlbGVjdGVkXCIsITApLGUuJGVsZW0uY2hhbmdlKCl9LG09ZnVuY3Rpb24oKXt0KFwib3B0aW9uXCIsZS4kZWxlbSkucHJvcChcInNlbGVjdGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0U2VsZWN0ZWR9KSxlLiRlbGVtLmNoYW5nZSgpfSx2PWZ1bmN0aW9uKHQpe3Q9dHx8YygpLHQ9PWwoXCJlbXB0eVJhdGluZ1RleHRcIikmJih0PVwiXCIpLGUub3B0aW9ucy5zaG93U2VsZWN0ZWRSYXRpbmcmJmUuJGVsZW0ucGFyZW50KCkuZmluZChcIi5ici1jdXJyZW50LXJhdGluZ1wiKS50ZXh0KHQpfSxiPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnJvdW5kKE1hdGguZmxvb3IoMTAqdCkvMTAlMSoxMDApfSx5PWZ1bmN0aW9uKCl7ZS4kd2lkZ2V0LmZpbmQoXCJhXCIpLnJlbW92ZUNsYXNzKGZ1bmN0aW9uKHQsZSl7cmV0dXJuKGUubWF0Y2goLyhefFxccylici1cXFMrL2cpfHxbXSkuam9pbihcIiBcIil9KX0sdz1mdW5jdGlvbigpe3ZhciBuLGksYT1lLiR3aWRnZXQuZmluZCgnYVtkYXRhLXJhdGluZy12YWx1ZT1cIicrZigpKydcIl0nKSxyPWwoXCJ1c2VyT3B0aW9uc1wiKS5pbml0aWFsUmF0aW5nLG89dC5pc051bWVyaWMoZigpKT9mKCk6MCxzPWIocik7aWYoeSgpLGEuYWRkQ2xhc3MoXCJici1zZWxlY3RlZCBici1jdXJyZW50XCIpW3AoKV0oKS5hZGRDbGFzcyhcImJyLXNlbGVjdGVkXCIpLCFsKFwicmF0aW5nTWFkZVwiKSYmdC5pc051bWVyaWMocikpe2lmKG8+PXJ8fCFzKXJldHVybjtuPWUuJHdpZGdldC5maW5kKFwiYVwiKSxpPWEubGVuZ3RoP2FbbChcInVzZXJPcHRpb25zXCIpLnJldmVyc2U/XCJwcmV2XCI6XCJuZXh0XCJdKCk6bltsKFwidXNlck9wdGlvbnNcIikucmV2ZXJzZT9cImxhc3RcIjpcImZpcnN0XCJdKCksaS5hZGRDbGFzcyhcImJyLWZyYWN0aW9uYWxcIiksaS5hZGRDbGFzcyhcImJyLWZyYWN0aW9uYWwtXCIrcyl9fSwkPWZ1bmN0aW9uKHQpe3JldHVybiEoIWwoXCJhbGxvd0VtcHR5XCIpfHwhbChcInVzZXJPcHRpb25zXCIpLmRlc2VsZWN0YWJsZSkmJmYoKT09dC5hdHRyKFwiZGF0YS1yYXRpbmctdmFsdWVcIil9LHg9ZnVuY3Rpb24obil7bi5vbihcImNsaWNrLmJhcnJhdGluZ1wiLGZ1bmN0aW9uKG4pe3ZhciBpLGEscj10KHRoaXMpLG89bChcInVzZXJPcHRpb25zXCIpO3JldHVybiBuLnByZXZlbnREZWZhdWx0KCksaT1yLmF0dHIoXCJkYXRhLXJhdGluZy12YWx1ZVwiKSxhPXIuYXR0cihcImRhdGEtcmF0aW5nLXRleHRcIiksJChyKSYmKGk9bChcImVtcHR5UmF0aW5nVmFsdWVcIiksYT1sKFwiZW1wdHlSYXRpbmdUZXh0XCIpKSxzKFwicmF0aW5nVmFsdWVcIixpKSxzKFwicmF0aW5nVGV4dFwiLGEpLHMoXCJyYXRpbmdNYWRlXCIsITApLGgoaSksdihhKSx3KCksby5vblNlbGVjdC5jYWxsKGUsZigpLGMoKSxuKSwhMX0pfSxSPWZ1bmN0aW9uKGUpe2Uub24oXCJtb3VzZWVudGVyLmJhcnJhdGluZ1wiLGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTt5KCksZS5hZGRDbGFzcyhcImJyLWFjdGl2ZVwiKVtwKCldKCkuYWRkQ2xhc3MoXCJici1hY3RpdmVcIiksdihlLmF0dHIoXCJkYXRhLXJhdGluZy10ZXh0XCIpKX0pfSxWPWZ1bmN0aW9uKHQpe2UuJHdpZGdldC5vbihcIm1vdXNlbGVhdmUuYmFycmF0aW5nIGJsdXIuYmFycmF0aW5nXCIsZnVuY3Rpb24oKXt2KCksdygpfSl9LE89ZnVuY3Rpb24oZSl7ZS5vbihcInRvdWNoc3RhcnQuYmFycmF0aW5nXCIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCksdCh0aGlzKS5jbGljaygpfSl9LEM9ZnVuY3Rpb24odCl7dC5vbihcImNsaWNrLmJhcnJhdGluZ1wiLGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0pfSxTPWZ1bmN0aW9uKHQpe3godCksZS5vcHRpb25zLmhvdmVyU3RhdGUmJihSKHQpLFYoKSl9LFQ9ZnVuY3Rpb24odCl7dC5vZmYoXCIuYmFycmF0aW5nXCIpfSxqPWZ1bmN0aW9uKHQpe3ZhciBuPWUuJHdpZGdldC5maW5kKFwiYVwiKTtPJiZPKG4pLHQ/KFQobiksQyhuKSk6UyhuKX07dGhpcy5zaG93PWZ1bmN0aW9uKCl7bCgpfHwobigpLHUoKSxlLiR3aWRnZXQ9ZygpLGUuJHdpZGdldC5pbnNlcnRBZnRlcihlLiRlbGVtKSx3KCksdigpLGooZS5vcHRpb25zLnJlYWRvbmx5KSxlLiRlbGVtLmhpZGUoKSl9LHRoaXMucmVhZG9ubHk9ZnVuY3Rpb24odCl7XCJib29sZWFuXCI9PXR5cGVvZiB0JiZsKFwicmVhZE9ubHlcIikhPXQmJihqKHQpLHMoXCJyZWFkT25seVwiLHQpLGUuJHdpZGdldC50b2dnbGVDbGFzcyhcImJyLXJlYWRvbmx5XCIpKX0sdGhpcy5zZXQ9ZnVuY3Rpb24odCl7dmFyIG49bChcInVzZXJPcHRpb25zXCIpOzAhPT1lLiRlbGVtLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicrdCsnXCJdJykubGVuZ3RoJiYocyhcInJhdGluZ1ZhbHVlXCIsdCkscyhcInJhdGluZ1RleHRcIixlLiRlbGVtLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicrdCsnXCJdJykudGV4dCgpKSxzKFwicmF0aW5nTWFkZVwiLCEwKSxoKGYoKSksdihjKCkpLHcoKSxuLnNpbGVudHx8bi5vblNlbGVjdC5jYWxsKHRoaXMsZigpLGMoKSkpfSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIHQ9bChcInVzZXJPcHRpb25zXCIpO3MoXCJyYXRpbmdWYWx1ZVwiLGwoXCJvcmlnaW5hbFJhdGluZ1ZhbHVlXCIpKSxzKFwicmF0aW5nVGV4dFwiLGwoXCJvcmlnaW5hbFJhdGluZ1RleHRcIikpLHMoXCJyYXRpbmdNYWRlXCIsITEpLG0oKSx2KGMoKSksdygpLHQub25DbGVhci5jYWxsKHRoaXMsZigpLGMoKSl9LHRoaXMuZGVzdHJveT1mdW5jdGlvbigpe3ZhciB0PWYoKSxuPWMoKSxhPWwoXCJ1c2VyT3B0aW9uc1wiKTtUKGUuJHdpZGdldC5maW5kKFwiYVwiKSksZS4kd2lkZ2V0LnJlbW92ZSgpLGQoKSxpKCksZS4kZWxlbS5zaG93KCksYS5vbkRlc3Ryb3kuY2FsbCh0aGlzLHQsbil9fXJldHVybiBlLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuJGVsZW09dChuKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sdC5mbi5iYXJyYXRpbmcuZGVmYXVsdHMsZSksdGhpcy5vcHRpb25zfSxlfSgpO3QuZm4uYmFycmF0aW5nPWZ1bmN0aW9uKG4saSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBhPW5ldyBlO2lmKHQodGhpcykuaXMoXCJzZWxlY3RcIil8fHQuZXJyb3IoXCJTb3JyeSwgdGhpcyBwbHVnaW4gb25seSB3b3JrcyB3aXRoIHNlbGVjdCBmaWVsZHMuXCIpLGEuaGFzT3duUHJvcGVydHkobikpe2lmKGEuaW5pdChpLHRoaXMpLFwic2hvd1wiPT09bilyZXR1cm4gYS5zaG93KGkpO2lmKGEuJGVsZW0uZGF0YShcImJhcnJhdGluZ1wiKSlyZXR1cm4gYS4kd2lkZ2V0PXQodGhpcykubmV4dChcIi5ici13aWRnZXRcIiksYVtuXShpKX1lbHNle2lmKFwib2JqZWN0XCI9PXR5cGVvZiBufHwhbilyZXR1cm4gaT1uLGEuaW5pdChpLHRoaXMpLGEuc2hvdygpO3QuZXJyb3IoXCJNZXRob2QgXCIrbitcIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuYmFycmF0aW5nXCIpfX0pfSx0LmZuLmJhcnJhdGluZy5kZWZhdWx0cz17dGhlbWU6XCJcIixpbml0aWFsUmF0aW5nOm51bGwsYWxsb3dFbXB0eTpudWxsLGVtcHR5VmFsdWU6XCJcIixzaG93VmFsdWVzOiExLHNob3dTZWxlY3RlZFJhdGluZzohMCxkZXNlbGVjdGFibGU6ITAscmV2ZXJzZTohMSxyZWFkb25seTohMSxmYXN0Q2xpY2tzOiEwLGhvdmVyU3RhdGU6ITAsc2lsZW50OiExLG9uU2VsZWN0OmZ1bmN0aW9uKHQsZSxuKXt9LG9uQ2xlYXI6ZnVuY3Rpb24odCxlKXt9LG9uRGVzdHJveTpmdW5jdGlvbih0LGUpe319LHQuZm4uYmFycmF0aW5nLkJhclJhdGluZz1lfSk7IiwiaWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGpRdWVyeSl0aHJvdyBuZXcgRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGpRdWVyeVwiKTsrZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9dC5mbi5qcXVlcnkuc3BsaXQoXCIgXCIpWzBdLnNwbGl0KFwiLlwiKTtpZihlWzBdPDImJmVbMV08OXx8MT09ZVswXSYmOT09ZVsxXSYmZVsyXTwxfHxlWzBdPjMpdGhyb3cgbmV3IEVycm9yKFwiQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdCByZXF1aXJlcyBqUXVlcnkgdmVyc2lvbiAxLjkuMSBvciBoaWdoZXIsIGJ1dCBsb3dlciB0aGFuIHZlcnNpb24gNFwiKX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJvb3RzdHJhcFwiKSxlPXtXZWJraXRUcmFuc2l0aW9uOlwid2Via2l0VHJhbnNpdGlvbkVuZFwiLE1velRyYW5zaXRpb246XCJ0cmFuc2l0aW9uZW5kXCIsT1RyYW5zaXRpb246XCJvVHJhbnNpdGlvbkVuZCBvdHJhbnNpdGlvbmVuZFwiLHRyYW5zaXRpb246XCJ0cmFuc2l0aW9uZW5kXCJ9O2Zvcih2YXIgaSBpbiBlKWlmKHZvaWQgMCE9PXQuc3R5bGVbaV0pcmV0dXJue2VuZDplW2ldfTtyZXR1cm4hMX10LmZuLmVtdWxhdGVUcmFuc2l0aW9uRW5kPWZ1bmN0aW9uKGUpe3ZhciBpPSExLG89dGhpczt0KHRoaXMpLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7aT0hMH0pO3ZhciBuPWZ1bmN0aW9uKCl7aXx8dChvKS50cmlnZ2VyKHQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCl9O3JldHVybiBzZXRUaW1lb3V0KG4sZSksdGhpc30sdChmdW5jdGlvbigpe3Quc3VwcG9ydC50cmFuc2l0aW9uPWUoKSx0LnN1cHBvcnQudHJhbnNpdGlvbiYmKHQuZXZlbnQuc3BlY2lhbC5ic1RyYW5zaXRpb25FbmQ9e2JpbmRUeXBlOnQuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCxkZWxlZ2F0ZVR5cGU6dC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kLGhhbmRsZTpmdW5jdGlvbihlKXtpZih0KGUudGFyZ2V0KS5pcyh0aGlzKSlyZXR1cm4gZS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10KHRoaXMpLG49aS5kYXRhKFwiYnMuYWxlcnRcIik7bnx8aS5kYXRhKFwiYnMuYWxlcnRcIixuPW5ldyBvKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmbltlXS5jYWxsKGkpfSl9dmFyIGk9J1tkYXRhLWRpc21pc3M9XCJhbGVydFwiXScsbz1mdW5jdGlvbihlKXt0KGUpLm9uKFwiY2xpY2tcIixpLHRoaXMuY2xvc2UpfTtvLlZFUlNJT049XCIzLjMuN1wiLG8uVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsby5wcm90b3R5cGUuY2xvc2U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gaSgpe2EuZGV0YWNoKCkudHJpZ2dlcihcImNsb3NlZC5icy5hbGVydFwiKS5yZW1vdmUoKX12YXIgbj10KHRoaXMpLHM9bi5hdHRyKFwiZGF0YS10YXJnZXRcIik7c3x8KHM9bi5hdHRyKFwiaHJlZlwiKSxzPXMmJnMucmVwbGFjZSgvLiooPz0jW15cXHNdKiQpLyxcIlwiKSk7dmFyIGE9dChcIiNcIj09PXM/W106cyk7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLGEubGVuZ3RofHwoYT1uLmNsb3Nlc3QoXCIuYWxlcnRcIikpLGEudHJpZ2dlcihlPXQuRXZlbnQoXCJjbG9zZS5icy5hbGVydFwiKSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8KGEucmVtb3ZlQ2xhc3MoXCJpblwiKSx0LnN1cHBvcnQudHJhbnNpdGlvbiYmYS5oYXNDbGFzcyhcImZhZGVcIik/YS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixpKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChvLlRSQU5TSVRJT05fRFVSQVRJT04pOmkoKSl9O3ZhciBuPXQuZm4uYWxlcnQ7dC5mbi5hbGVydD1lLHQuZm4uYWxlcnQuQ29uc3RydWN0b3I9byx0LmZuLmFsZXJ0Lm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5hbGVydD1uLHRoaXN9LHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGlcIixpLG8ucHJvdG90eXBlLmNsb3NlKX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz10KHRoaXMpLG49by5kYXRhKFwiYnMuYnV0dG9uXCIpLHM9XCJvYmplY3RcIj09dHlwZW9mIGUmJmU7bnx8by5kYXRhKFwiYnMuYnV0dG9uXCIsbj1uZXcgaSh0aGlzLHMpKSxcInRvZ2dsZVwiPT1lP24udG9nZ2xlKCk6ZSYmbi5zZXRTdGF0ZShlKX0pfXZhciBpPWZ1bmN0aW9uKGUsbyl7dGhpcy4kZWxlbWVudD10KGUpLHRoaXMub3B0aW9ucz10LmV4dGVuZCh7fSxpLkRFRkFVTFRTLG8pLHRoaXMuaXNMb2FkaW5nPSExfTtpLlZFUlNJT049XCIzLjMuN1wiLGkuREVGQVVMVFM9e2xvYWRpbmdUZXh0OlwibG9hZGluZy4uLlwifSxpLnByb3RvdHlwZS5zZXRTdGF0ZT1mdW5jdGlvbihlKXt2YXIgaT1cImRpc2FibGVkXCIsbz10aGlzLiRlbGVtZW50LG49by5pcyhcImlucHV0XCIpP1widmFsXCI6XCJodG1sXCIscz1vLmRhdGEoKTtlKz1cIlRleHRcIixudWxsPT1zLnJlc2V0VGV4dCYmby5kYXRhKFwicmVzZXRUZXh0XCIsb1tuXSgpKSxzZXRUaW1lb3V0KHQucHJveHkoZnVuY3Rpb24oKXtvW25dKG51bGw9PXNbZV0/dGhpcy5vcHRpb25zW2VdOnNbZV0pLFwibG9hZGluZ1RleHRcIj09ZT8odGhpcy5pc0xvYWRpbmc9ITAsby5hZGRDbGFzcyhpKS5hdHRyKGksaSkucHJvcChpLCEwKSk6dGhpcy5pc0xvYWRpbmcmJih0aGlzLmlzTG9hZGluZz0hMSxvLnJlbW92ZUNsYXNzKGkpLnJlbW92ZUF0dHIoaSkucHJvcChpLCExKSl9LHRoaXMpLDApfSxpLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgdD0hMCxlPXRoaXMuJGVsZW1lbnQuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpO2lmKGUubGVuZ3RoKXt2YXIgaT10aGlzLiRlbGVtZW50LmZpbmQoXCJpbnB1dFwiKTtcInJhZGlvXCI9PWkucHJvcChcInR5cGVcIik/KGkucHJvcChcImNoZWNrZWRcIikmJih0PSExKSxlLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJhY3RpdmVcIikpOlwiY2hlY2tib3hcIj09aS5wcm9wKFwidHlwZVwiKSYmKGkucHJvcChcImNoZWNrZWRcIikhPT10aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpJiYodD0hMSksdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKSksaS5wcm9wKFwiY2hlY2tlZFwiLHRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJhY3RpdmVcIikpLHQmJmkudHJpZ2dlcihcImNoYW5nZVwiKX1lbHNlIHRoaXMuJGVsZW1lbnQuYXR0cihcImFyaWEtcHJlc3NlZFwiLCF0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiYWN0aXZlXCIpKSx0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwiYWN0aXZlXCIpfTt2YXIgbz10LmZuLmJ1dHRvbjt0LmZuLmJ1dHRvbj1lLHQuZm4uYnV0dG9uLkNvbnN0cnVjdG9yPWksdC5mbi5idXR0b24ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmJ1dHRvbj1vLHRoaXN9LHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYnV0dG9uLmRhdGEtYXBpXCIsJ1tkYXRhLXRvZ2dsZV49XCJidXR0b25cIl0nLGZ1bmN0aW9uKGkpe3ZhciBvPXQoaS50YXJnZXQpLmNsb3Nlc3QoXCIuYnRuXCIpO2UuY2FsbChvLFwidG9nZ2xlXCIpLHQoaS50YXJnZXQpLmlzKCdpbnB1dFt0eXBlPVwicmFkaW9cIl0sIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpfHwoaS5wcmV2ZW50RGVmYXVsdCgpLG8uaXMoXCJpbnB1dCxidXR0b25cIik/by50cmlnZ2VyKFwiZm9jdXNcIik6by5maW5kKFwiaW5wdXQ6dmlzaWJsZSxidXR0b246dmlzaWJsZVwiKS5maXJzdCgpLnRyaWdnZXIoXCJmb2N1c1wiKSl9KS5vbihcImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJyxmdW5jdGlvbihlKXt0KGUudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKS50b2dnbGVDbGFzcyhcImZvY3VzXCIsL15mb2N1cyhpbik/JC8udGVzdChlLnR5cGUpKX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBvPXQodGhpcyksbj1vLmRhdGEoXCJicy5jYXJvdXNlbFwiKSxzPXQuZXh0ZW5kKHt9LGkuREVGQVVMVFMsby5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpLGE9XCJzdHJpbmdcIj09dHlwZW9mIGU/ZTpzLnNsaWRlO258fG8uZGF0YShcImJzLmNhcm91c2VsXCIsbj1uZXcgaSh0aGlzLHMpKSxcIm51bWJlclwiPT10eXBlb2YgZT9uLnRvKGUpOmE/blthXSgpOnMuaW50ZXJ2YWwmJm4ucGF1c2UoKS5jeWNsZSgpfSl9dmFyIGk9ZnVuY3Rpb24oZSxpKXt0aGlzLiRlbGVtZW50PXQoZSksdGhpcy4kaW5kaWNhdG9ycz10aGlzLiRlbGVtZW50LmZpbmQoXCIuY2Fyb3VzZWwtaW5kaWNhdG9yc1wiKSx0aGlzLm9wdGlvbnM9aSx0aGlzLnBhdXNlZD1udWxsLHRoaXMuc2xpZGluZz1udWxsLHRoaXMuaW50ZXJ2YWw9bnVsbCx0aGlzLiRhY3RpdmU9bnVsbCx0aGlzLiRpdGVtcz1udWxsLHRoaXMub3B0aW9ucy5rZXlib2FyZCYmdGhpcy4kZWxlbWVudC5vbihcImtleWRvd24uYnMuY2Fyb3VzZWxcIix0LnByb3h5KHRoaXMua2V5ZG93bix0aGlzKSksXCJob3ZlclwiPT10aGlzLm9wdGlvbnMucGF1c2UmJiEoXCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJnRoaXMuJGVsZW1lbnQub24oXCJtb3VzZWVudGVyLmJzLmNhcm91c2VsXCIsdC5wcm94eSh0aGlzLnBhdXNlLHRoaXMpKS5vbihcIm1vdXNlbGVhdmUuYnMuY2Fyb3VzZWxcIix0LnByb3h5KHRoaXMuY3ljbGUsdGhpcykpfTtpLlZFUlNJT049XCIzLjMuN1wiLGkuVFJBTlNJVElPTl9EVVJBVElPTj02MDAsaS5ERUZBVUxUUz17aW50ZXJ2YWw6NWUzLHBhdXNlOlwiaG92ZXJcIix3cmFwOiEwLGtleWJvYXJkOiEwfSxpLnByb3RvdHlwZS5rZXlkb3duPWZ1bmN0aW9uKHQpe2lmKCEvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KHQudGFyZ2V0LnRhZ05hbWUpKXtzd2l0Y2godC53aGljaCl7Y2FzZSAzNzp0aGlzLnByZXYoKTticmVhaztjYXNlIDM5OnRoaXMubmV4dCgpO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXQucHJldmVudERlZmF1bHQoKX19LGkucHJvdG90eXBlLmN5Y2xlPWZ1bmN0aW9uKGUpe3JldHVybiBlfHwodGhpcy5wYXVzZWQ9ITEpLHRoaXMuaW50ZXJ2YWwmJmNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbCksdGhpcy5vcHRpb25zLmludGVydmFsJiYhdGhpcy5wYXVzZWQmJih0aGlzLmludGVydmFsPXNldEludGVydmFsKHQucHJveHkodGhpcy5uZXh0LHRoaXMpLHRoaXMub3B0aW9ucy5pbnRlcnZhbCkpLHRoaXN9LGkucHJvdG90eXBlLmdldEl0ZW1JbmRleD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy4kaXRlbXM9dC5wYXJlbnQoKS5jaGlsZHJlbihcIi5pdGVtXCIpLHRoaXMuJGl0ZW1zLmluZGV4KHR8fHRoaXMuJGFjdGl2ZSl9LGkucHJvdG90eXBlLmdldEl0ZW1Gb3JEaXJlY3Rpb249ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLmdldEl0ZW1JbmRleChlKTtpZigoXCJwcmV2XCI9PXQmJjA9PT1pfHxcIm5leHRcIj09dCYmaT09dGhpcy4kaXRlbXMubGVuZ3RoLTEpJiYhdGhpcy5vcHRpb25zLndyYXApcmV0dXJuIGU7dmFyIG89XCJwcmV2XCI9PXQ/LTE6MSxuPShpK28pJXRoaXMuJGl0ZW1zLmxlbmd0aDtyZXR1cm4gdGhpcy4kaXRlbXMuZXEobil9LGkucHJvdG90eXBlLnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsaT10aGlzLmdldEl0ZW1JbmRleCh0aGlzLiRhY3RpdmU9dGhpcy4kZWxlbWVudC5maW5kKFwiLml0ZW0uYWN0aXZlXCIpKTtpZighKHQ+dGhpcy4kaXRlbXMubGVuZ3RoLTF8fHQ8MCkpcmV0dXJuIHRoaXMuc2xpZGluZz90aGlzLiRlbGVtZW50Lm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIixmdW5jdGlvbigpe2UudG8odCl9KTppPT10P3RoaXMucGF1c2UoKS5jeWNsZSgpOnRoaXMuc2xpZGUodD5pP1wibmV4dFwiOlwicHJldlwiLHRoaXMuJGl0ZW1zLmVxKHQpKX0saS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oZSl7cmV0dXJuIGV8fCh0aGlzLnBhdXNlZD0hMCksdGhpcy4kZWxlbWVudC5maW5kKFwiLm5leHQsIC5wcmV2XCIpLmxlbmd0aCYmdC5zdXBwb3J0LnRyYW5zaXRpb24mJih0aGlzLiRlbGVtZW50LnRyaWdnZXIodC5zdXBwb3J0LnRyYW5zaXRpb24uZW5kKSx0aGlzLmN5Y2xlKCEwKSksdGhpcy5pbnRlcnZhbD1jbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpLHRoaXN9LGkucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5zbGlkaW5nKXJldHVybiB0aGlzLnNsaWRlKFwibmV4dFwiKX0saS5wcm90b3R5cGUucHJldj1mdW5jdGlvbigpe2lmKCF0aGlzLnNsaWRpbmcpcmV0dXJuIHRoaXMuc2xpZGUoXCJwcmV2XCIpfSxpLnByb3RvdHlwZS5zbGlkZT1mdW5jdGlvbihlLG8pe3ZhciBuPXRoaXMuJGVsZW1lbnQuZmluZChcIi5pdGVtLmFjdGl2ZVwiKSxzPW98fHRoaXMuZ2V0SXRlbUZvckRpcmVjdGlvbihlLG4pLGE9dGhpcy5pbnRlcnZhbCxyPVwibmV4dFwiPT1lP1wibGVmdFwiOlwicmlnaHRcIixsPXRoaXM7aWYocy5oYXNDbGFzcyhcImFjdGl2ZVwiKSlyZXR1cm4gdGhpcy5zbGlkaW5nPSExO3ZhciBoPXNbMF0sZD10LkV2ZW50KFwic2xpZGUuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDpoLGRpcmVjdGlvbjpyfSk7aWYodGhpcy4kZWxlbWVudC50cmlnZ2VyKGQpLCFkLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZih0aGlzLnNsaWRpbmc9ITAsYSYmdGhpcy5wYXVzZSgpLHRoaXMuJGluZGljYXRvcnMubGVuZ3RoKXt0aGlzLiRpbmRpY2F0b3JzLmZpbmQoXCIuYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBwPXQodGhpcy4kaW5kaWNhdG9ycy5jaGlsZHJlbigpW3RoaXMuZ2V0SXRlbUluZGV4KHMpXSk7cCYmcC5hZGRDbGFzcyhcImFjdGl2ZVwiKX12YXIgYz10LkV2ZW50KFwic2xpZC5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OmgsZGlyZWN0aW9uOnJ9KTtyZXR1cm4gdC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJzbGlkZVwiKT8ocy5hZGRDbGFzcyhlKSxzWzBdLm9mZnNldFdpZHRoLG4uYWRkQ2xhc3Mocikscy5hZGRDbGFzcyhyKSxuLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLGZ1bmN0aW9uKCl7cy5yZW1vdmVDbGFzcyhbZSxyXS5qb2luKFwiIFwiKSkuYWRkQ2xhc3MoXCJhY3RpdmVcIiksbi5yZW1vdmVDbGFzcyhbXCJhY3RpdmVcIixyXS5qb2luKFwiIFwiKSksbC5zbGlkaW5nPSExLHNldFRpbWVvdXQoZnVuY3Rpb24oKXtsLiRlbGVtZW50LnRyaWdnZXIoYyl9LDApfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKSk6KG4ucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikscy5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLnNsaWRpbmc9ITEsdGhpcy4kZWxlbWVudC50cmlnZ2VyKGMpKSxhJiZ0aGlzLmN5Y2xlKCksdGhpc319O3ZhciBvPXQuZm4uY2Fyb3VzZWw7dC5mbi5jYXJvdXNlbD1lLHQuZm4uY2Fyb3VzZWwuQ29uc3RydWN0b3I9aSx0LmZuLmNhcm91c2VsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5jYXJvdXNlbD1vLHRoaXN9O3ZhciBuPWZ1bmN0aW9uKGkpe3ZhciBvLG49dCh0aGlzKSxzPXQobi5hdHRyKFwiZGF0YS10YXJnZXRcIil8fChvPW4uYXR0cihcImhyZWZcIikpJiZvLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIikpO2lmKHMuaGFzQ2xhc3MoXCJjYXJvdXNlbFwiKSl7dmFyIGE9dC5leHRlbmQoe30scy5kYXRhKCksbi5kYXRhKCkpLHI9bi5hdHRyKFwiZGF0YS1zbGlkZS10b1wiKTtyJiYoYS5pbnRlcnZhbD0hMSksZS5jYWxsKHMsYSksciYmcy5kYXRhKFwiYnMuY2Fyb3VzZWxcIikudG8ociksaS5wcmV2ZW50RGVmYXVsdCgpfX07dChkb2N1bWVudCkub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGVdXCIsbikub24oXCJjbGljay5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLFwiW2RhdGEtc2xpZGUtdG9dXCIsbiksdCh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtcmlkZT1cImNhcm91c2VsXCJdJykuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcyk7ZS5jYWxsKGksaS5kYXRhKCkpfSl9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3ZhciBpLG89ZS5hdHRyKFwiZGF0YS10YXJnZXRcIil8fChpPWUuYXR0cihcImhyZWZcIikpJiZpLnJlcGxhY2UoLy4qKD89I1teXFxzXSskKS8sXCJcIik7cmV0dXJuIHQobyl9ZnVuY3Rpb24gaShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxuPWkuZGF0YShcImJzLmNvbGxhcHNlXCIpLHM9dC5leHRlbmQoe30sby5ERUZBVUxUUyxpLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgZSYmZSk7IW4mJnMudG9nZ2xlJiYvc2hvd3xoaWRlLy50ZXN0KGUpJiYocy50b2dnbGU9ITEpLG58fGkuZGF0YShcImJzLmNvbGxhcHNlXCIsbj1uZXcgbyh0aGlzLHMpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmbltlXSgpfSl9dmFyIG89ZnVuY3Rpb24oZSxpKXt0aGlzLiRlbGVtZW50PXQoZSksdGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LG8uREVGQVVMVFMsaSksdGhpcy4kdHJpZ2dlcj10KCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtocmVmPVwiIycrZS5pZCsnXCJdLFtkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtdGFyZ2V0PVwiIycrZS5pZCsnXCJdJyksdGhpcy50cmFuc2l0aW9uaW5nPW51bGwsdGhpcy5vcHRpb25zLnBhcmVudD90aGlzLiRwYXJlbnQ9dGhpcy5nZXRQYXJlbnQoKTp0aGlzLmFkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLiRlbGVtZW50LHRoaXMuJHRyaWdnZXIpLHRoaXMub3B0aW9ucy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9O28uVkVSU0lPTj1cIjMuMy43XCIsby5UUkFOU0lUSU9OX0RVUkFUSU9OPTM1MCxvLkRFRkFVTFRTPXt0b2dnbGU6ITB9LG8ucHJvdG90eXBlLmRpbWVuc2lvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwid2lkdGhcIik/XCJ3aWR0aFwiOlwiaGVpZ2h0XCJ9LG8ucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiYhdGhpcy4kZWxlbWVudC5oYXNDbGFzcyhcImluXCIpKXt2YXIgZSxuPXRoaXMuJHBhcmVudCYmdGhpcy4kcGFyZW50LmNoaWxkcmVuKFwiLnBhbmVsXCIpLmNoaWxkcmVuKFwiLmluLCAuY29sbGFwc2luZ1wiKTtpZighKG4mJm4ubGVuZ3RoJiYoZT1uLmRhdGEoXCJicy5jb2xsYXBzZVwiKSkmJmUudHJhbnNpdGlvbmluZykpe3ZhciBzPXQuRXZlbnQoXCJzaG93LmJzLmNvbGxhcHNlXCIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihzKSwhcy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7biYmbi5sZW5ndGgmJihpLmNhbGwobixcImhpZGVcIiksZXx8bi5kYXRhKFwiYnMuY29sbGFwc2VcIixudWxsKSk7dmFyIGE9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwiY29sbGFwc2VcIikuYWRkQ2xhc3MoXCJjb2xsYXBzaW5nXCIpW2FdKDApLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLHRoaXMuJHRyaWdnZXIucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZWRcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy50cmFuc2l0aW9uaW5nPTE7dmFyIHI9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwiY29sbGFwc2luZ1wiKS5hZGRDbGFzcyhcImNvbGxhcHNlIGluXCIpW2FdKFwiXCIpLHRoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcInNob3duLmJzLmNvbGxhcHNlXCIpfTtpZighdC5zdXBwb3J0LnRyYW5zaXRpb24pcmV0dXJuIHIuY2FsbCh0aGlzKTt2YXIgbD10LmNhbWVsQ2FzZShbXCJzY3JvbGxcIixhXS5qb2luKFwiLVwiKSk7dGhpcy4kZWxlbWVudC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIix0LnByb3h5KHIsdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG8uVFJBTlNJVElPTl9EVVJBVElPTilbYV0odGhpcy4kZWxlbWVudFswXVtsXSl9fX19LG8ucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXtpZighdGhpcy50cmFuc2l0aW9uaW5nJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIikpe3ZhciBlPXQuRXZlbnQoXCJoaWRlLmJzLmNvbGxhcHNlXCIpO2lmKHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSwhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIGk9dGhpcy5kaW1lbnNpb24oKTt0aGlzLiRlbGVtZW50W2ldKHRoaXMuJGVsZW1lbnRbaV0oKSlbMF0ub2Zmc2V0SGVpZ2h0LHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLnJlbW92ZUNsYXNzKFwiY29sbGFwc2UgaW5cIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksdGhpcy4kdHJpZ2dlci5hZGRDbGFzcyhcImNvbGxhcHNlZFwiKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCExKSx0aGlzLnRyYW5zaXRpb25pbmc9MTt2YXIgbj1mdW5jdGlvbigpe3RoaXMudHJhbnNpdGlvbmluZz0wLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2VcIikudHJpZ2dlcihcImhpZGRlbi5icy5jb2xsYXBzZVwiKX07aWYoIXQuc3VwcG9ydC50cmFuc2l0aW9uKXJldHVybiBuLmNhbGwodGhpcyk7dGhpcy4kZWxlbWVudFtpXSgwKS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIix0LnByb3h5KG4sdGhpcykpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG8uVFJBTlNJVElPTl9EVVJBVElPTil9fX0sby5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKCl7dGhpc1t0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiaW5cIik/XCJoaWRlXCI6XCJzaG93XCJdKCl9LG8ucHJvdG90eXBlLmdldFBhcmVudD1mdW5jdGlvbigpe3JldHVybiB0KHRoaXMub3B0aW9ucy5wYXJlbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJyt0aGlzLm9wdGlvbnMucGFyZW50KydcIl0nKS5lYWNoKHQucHJveHkoZnVuY3Rpb24oaSxvKXt2YXIgbj10KG8pO3RoaXMuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKGUobiksbil9LHRoaXMpKS5lbmQoKX0sby5wcm90b3R5cGUuYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzPWZ1bmN0aW9uKHQsZSl7dmFyIGk9dC5oYXNDbGFzcyhcImluXCIpO3QuYXR0cihcImFyaWEtZXhwYW5kZWRcIixpKSxlLnRvZ2dsZUNsYXNzKFwiY29sbGFwc2VkXCIsIWkpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsaSl9O3ZhciBuPXQuZm4uY29sbGFwc2U7dC5mbi5jb2xsYXBzZT1pLHQuZm4uY29sbGFwc2UuQ29uc3RydWN0b3I9byx0LmZuLmNvbGxhcHNlLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5jb2xsYXBzZT1uLHRoaXN9LHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nLGZ1bmN0aW9uKG8pe3ZhciBuPXQodGhpcyk7bi5hdHRyKFwiZGF0YS10YXJnZXRcIil8fG8ucHJldmVudERlZmF1bHQoKTt2YXIgcz1lKG4pLGE9cy5kYXRhKFwiYnMuY29sbGFwc2VcIikscj1hP1widG9nZ2xlXCI6bi5kYXRhKCk7aS5jYWxsKHMscil9KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3ZhciBpPWUuYXR0cihcImRhdGEtdGFyZ2V0XCIpO2l8fChpPWUuYXR0cihcImhyZWZcIiksaT1pJiYvI1tBLVphLXpdLy50ZXN0KGkpJiZpLnJlcGxhY2UoLy4qKD89I1teXFxzXSokKS8sXCJcIikpO3ZhciBvPWkmJnQoaSk7cmV0dXJuIG8mJm8ubGVuZ3RoP286ZS5wYXJlbnQoKX1mdW5jdGlvbiBpKGkpe2kmJjM9PT1pLndoaWNofHwodChuKS5yZW1vdmUoKSx0KHMpLmVhY2goZnVuY3Rpb24oKXt2YXIgbz10KHRoaXMpLG49ZShvKSxzPXtyZWxhdGVkVGFyZ2V0OnRoaXN9O24uaGFzQ2xhc3MoXCJvcGVuXCIpJiYoaSYmXCJjbGlja1wiPT1pLnR5cGUmJi9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoaS50YXJnZXQudGFnTmFtZSkmJnQuY29udGFpbnMoblswXSxpLnRhcmdldCl8fChuLnRyaWdnZXIoaT10LkV2ZW50KFwiaGlkZS5icy5kcm9wZG93blwiLHMpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwoby5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwiZmFsc2VcIiksbi5yZW1vdmVDbGFzcyhcIm9wZW5cIikudHJpZ2dlcih0LkV2ZW50KFwiaGlkZGVuLmJzLmRyb3Bkb3duXCIscykpKSkpfSkpfWZ1bmN0aW9uIG8oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcyksbz1pLmRhdGEoXCJicy5kcm9wZG93blwiKTtvfHxpLmRhdGEoXCJicy5kcm9wZG93blwiLG89bmV3IGEodGhpcykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZvW2VdLmNhbGwoaSl9KX12YXIgbj1cIi5kcm9wZG93bi1iYWNrZHJvcFwiLHM9J1tkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJdJyxhPWZ1bmN0aW9uKGUpe3QoZSkub24oXCJjbGljay5icy5kcm9wZG93blwiLHRoaXMudG9nZ2xlKX07YS5WRVJTSU9OPVwiMy4zLjdcIixhLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24obyl7dmFyIG49dCh0aGlzKTtpZighbi5pcyhcIi5kaXNhYmxlZCwgOmRpc2FibGVkXCIpKXt2YXIgcz1lKG4pLGE9cy5oYXNDbGFzcyhcIm9wZW5cIik7aWYoaSgpLCFhKXtcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiYhcy5jbG9zZXN0KFwiLm5hdmJhci1uYXZcIikubGVuZ3RoJiZ0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikpLmFkZENsYXNzKFwiZHJvcGRvd24tYmFja2Ryb3BcIikuaW5zZXJ0QWZ0ZXIodCh0aGlzKSkub24oXCJjbGlja1wiLGkpO3ZhciByPXtyZWxhdGVkVGFyZ2V0OnRoaXN9O2lmKHMudHJpZ2dlcihvPXQuRXZlbnQoXCJzaG93LmJzLmRyb3Bkb3duXCIscikpLG8uaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuO24udHJpZ2dlcihcImZvY3VzXCIpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJ0cnVlXCIpLHMudG9nZ2xlQ2xhc3MoXCJvcGVuXCIpLnRyaWdnZXIodC5FdmVudChcInNob3duLmJzLmRyb3Bkb3duXCIscikpfXJldHVybiExfX0sYS5wcm90b3R5cGUua2V5ZG93bj1mdW5jdGlvbihpKXtpZigvKDM4fDQwfDI3fDMyKS8udGVzdChpLndoaWNoKSYmIS9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoaS50YXJnZXQudGFnTmFtZSkpe3ZhciBvPXQodGhpcyk7aWYoaS5wcmV2ZW50RGVmYXVsdCgpLGkuc3RvcFByb3BhZ2F0aW9uKCksIW8uaXMoXCIuZGlzYWJsZWQsIDpkaXNhYmxlZFwiKSl7dmFyIG49ZShvKSxhPW4uaGFzQ2xhc3MoXCJvcGVuXCIpO2lmKCFhJiYyNyE9aS53aGljaHx8YSYmMjc9PWkud2hpY2gpcmV0dXJuIDI3PT1pLndoaWNoJiZuLmZpbmQocykudHJpZ2dlcihcImZvY3VzXCIpLG8udHJpZ2dlcihcImNsaWNrXCIpO3ZhciByPW4uZmluZChcIi5kcm9wZG93bi1tZW51IGxpOm5vdCguZGlzYWJsZWQpOnZpc2libGUgYVwiKTtpZihyLmxlbmd0aCl7dmFyIGw9ci5pbmRleChpLnRhcmdldCk7Mzg9PWkud2hpY2gmJmw+MCYmbC0tLDQwPT1pLndoaWNoJiZsPHIubGVuZ3RoLTEmJmwrKyx+bHx8KGw9MCksci5lcShsKS50cmlnZ2VyKFwiZm9jdXNcIil9fX19O3ZhciByPXQuZm4uZHJvcGRvd247dC5mbi5kcm9wZG93bj1vLHQuZm4uZHJvcGRvd24uQ29uc3RydWN0b3I9YSx0LmZuLmRyb3Bkb3duLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5kcm9wZG93bj1yLHRoaXN9LHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuZHJvcGRvd24uZGF0YS1hcGlcIixpKS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsXCIuZHJvcGRvd24gZm9ybVwiLGZ1bmN0aW9uKHQpe3Quc3RvcFByb3BhZ2F0aW9uKCl9KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIscyxhLnByb3RvdHlwZS50b2dnbGUpLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLHMsYS5wcm90b3R5cGUua2V5ZG93bikub24oXCJrZXlkb3duLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsXCIuZHJvcGRvd24tbWVudVwiLGEucHJvdG90eXBlLmtleWRvd24pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUoZSxvKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49dCh0aGlzKSxzPW4uZGF0YShcImJzLm1vZGFsXCIpLGE9dC5leHRlbmQoe30saS5ERUZBVUxUUyxuLmRhdGEoKSxcIm9iamVjdFwiPT10eXBlb2YgZSYmZSk7c3x8bi5kYXRhKFwiYnMubW9kYWxcIixzPW5ldyBpKHRoaXMsYSkpLFwic3RyaW5nXCI9PXR5cGVvZiBlP3NbZV0obyk6YS5zaG93JiZzLnNob3cobyl9KX12YXIgaT1mdW5jdGlvbihlLGkpe3RoaXMub3B0aW9ucz1pLHRoaXMuJGJvZHk9dChkb2N1bWVudC5ib2R5KSx0aGlzLiRlbGVtZW50PXQoZSksdGhpcy4kZGlhbG9nPXRoaXMuJGVsZW1lbnQuZmluZChcIi5tb2RhbC1kaWFsb2dcIiksdGhpcy4kYmFja2Ryb3A9bnVsbCx0aGlzLmlzU2hvd249bnVsbCx0aGlzLm9yaWdpbmFsQm9keVBhZD1udWxsLHRoaXMuc2Nyb2xsYmFyV2lkdGg9MCx0aGlzLmlnbm9yZUJhY2tkcm9wQ2xpY2s9ITEsdGhpcy5vcHRpb25zLnJlbW90ZSYmdGhpcy4kZWxlbWVudC5maW5kKFwiLm1vZGFsLWNvbnRlbnRcIikubG9hZCh0aGlzLm9wdGlvbnMucmVtb3RlLHQucHJveHkoZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJsb2FkZWQuYnMubW9kYWxcIil9LHRoaXMpKX07aS5WRVJTSU9OPVwiMy4zLjdcIixpLlRSQU5TSVRJT05fRFVSQVRJT049MzAwLGkuQkFDS0RST1BfVFJBTlNJVElPTl9EVVJBVElPTj0xNTAsaS5ERUZBVUxUUz17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsc2hvdzohMH0saS5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KHQpfSxpLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKGUpe3ZhciBvPXRoaXMsbj10LkV2ZW50KFwic2hvdy5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OmV9KTt0aGlzLiRlbGVtZW50LnRyaWdnZXIobiksdGhpcy5pc1Nob3dufHxuLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5pc1Nob3duPSEwLHRoaXMuY2hlY2tTY3JvbGxiYXIoKSx0aGlzLnNldFNjcm9sbGJhcigpLHRoaXMuJGJvZHkuYWRkQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLCdbZGF0YS1kaXNtaXNzPVwibW9kYWxcIl0nLHQucHJveHkodGhpcy5oaWRlLHRoaXMpKSx0aGlzLiRkaWFsb2cub24oXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLGZ1bmN0aW9uKCl7by4kZWxlbWVudC5vbmUoXCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWxcIixmdW5jdGlvbihlKXt0KGUudGFyZ2V0KS5pcyhvLiRlbGVtZW50KSYmKG8uaWdub3JlQmFja2Ryb3BDbGljaz0hMCl9KX0pLHRoaXMuYmFja2Ryb3AoZnVuY3Rpb24oKXt2YXIgbj10LnN1cHBvcnQudHJhbnNpdGlvbiYmby4kZWxlbWVudC5oYXNDbGFzcyhcImZhZGVcIik7by4kZWxlbWVudC5wYXJlbnQoKS5sZW5ndGh8fG8uJGVsZW1lbnQuYXBwZW5kVG8oby4kYm9keSksby4kZWxlbWVudC5zaG93KCkuc2Nyb2xsVG9wKDApLG8uYWRqdXN0RGlhbG9nKCksbiYmby4kZWxlbWVudFswXS5vZmZzZXRXaWR0aCxvLiRlbGVtZW50LmFkZENsYXNzKFwiaW5cIiksby5lbmZvcmNlRm9jdXMoKTt2YXIgcz10LkV2ZW50KFwic2hvd24uYnMubW9kYWxcIix7cmVsYXRlZFRhcmdldDplfSk7bj9vLiRkaWFsb2cub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZnVuY3Rpb24oKXtvLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKS50cmlnZ2VyKHMpfSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKTpvLiRlbGVtZW50LnRyaWdnZXIoXCJmb2N1c1wiKS50cmlnZ2VyKHMpfSkpfSxpLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxlPXQuRXZlbnQoXCJoaWRlLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQudHJpZ2dlcihlKSx0aGlzLmlzU2hvd24mJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYodGhpcy5pc1Nob3duPSExLHRoaXMuZXNjYXBlKCksdGhpcy5yZXNpemUoKSx0KGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLHRoaXMuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoXCJpblwiKS5vZmYoXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIpLm9mZihcIm1vdXNldXAuZGlzbWlzcy5icy5tb2RhbFwiKSx0aGlzLiRkaWFsb2cub2ZmKFwibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWxcIiksdC5zdXBwb3J0LnRyYW5zaXRpb24mJnRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP3RoaXMuJGVsZW1lbnQub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsdC5wcm94eSh0aGlzLmhpZGVNb2RhbCx0aGlzKSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5UUkFOU0lUSU9OX0RVUkFUSU9OKTp0aGlzLmhpZGVNb2RhbCgpKX0saS5wcm90b3R5cGUuZW5mb3JjZUZvY3VzPWZ1bmN0aW9uKCl7dChkb2N1bWVudCkub2ZmKFwiZm9jdXNpbi5icy5tb2RhbFwiKS5vbihcImZvY3VzaW4uYnMubW9kYWxcIix0LnByb3h5KGZ1bmN0aW9uKHQpe2RvY3VtZW50PT09dC50YXJnZXR8fHRoaXMuJGVsZW1lbnRbMF09PT10LnRhcmdldHx8dGhpcy4kZWxlbWVudC5oYXModC50YXJnZXQpLmxlbmd0aHx8dGhpcy4kZWxlbWVudC50cmlnZ2VyKFwiZm9jdXNcIil9LHRoaXMpKX0saS5wcm90b3R5cGUuZXNjYXBlPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMua2V5Ym9hcmQ/dGhpcy4kZWxlbWVudC5vbihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLHQucHJveHkoZnVuY3Rpb24odCl7Mjc9PXQud2hpY2gmJnRoaXMuaGlkZSgpfSx0aGlzKSk6dGhpcy5pc1Nob3dufHx0aGlzLiRlbGVtZW50Lm9mZihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKX0saS5wcm90b3R5cGUucmVzaXplPWZ1bmN0aW9uKCl7dGhpcy5pc1Nob3duP3Qod2luZG93KS5vbihcInJlc2l6ZS5icy5tb2RhbFwiLHQucHJveHkodGhpcy5oYW5kbGVVcGRhdGUsdGhpcykpOnQod2luZG93KS5vZmYoXCJyZXNpemUuYnMubW9kYWxcIil9LGkucHJvdG90eXBlLmhpZGVNb2RhbD1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy4kZWxlbWVudC5oaWRlKCksdGhpcy5iYWNrZHJvcChmdW5jdGlvbigpe3QuJGJvZHkucmVtb3ZlQ2xhc3MoXCJtb2RhbC1vcGVuXCIpLHQucmVzZXRBZGp1c3RtZW50cygpLHQucmVzZXRTY3JvbGxiYXIoKSx0LiRlbGVtZW50LnRyaWdnZXIoXCJoaWRkZW4uYnMubW9kYWxcIil9KX0saS5wcm90b3R5cGUucmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLiRiYWNrZHJvcCYmdGhpcy4kYmFja2Ryb3AucmVtb3ZlKCksdGhpcy4kYmFja2Ryb3A9bnVsbH0saS5wcm90b3R5cGUuYmFja2Ryb3A9ZnVuY3Rpb24oZSl7dmFyIG89dGhpcyxuPXRoaXMuJGVsZW1lbnQuaGFzQ2xhc3MoXCJmYWRlXCIpP1wiZmFkZVwiOlwiXCI7aWYodGhpcy5pc1Nob3duJiZ0aGlzLm9wdGlvbnMuYmFja2Ryb3Ape3ZhciBzPXQuc3VwcG9ydC50cmFuc2l0aW9uJiZuO2lmKHRoaXMuJGJhY2tkcm9wPXQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSkuYWRkQ2xhc3MoXCJtb2RhbC1iYWNrZHJvcCBcIituKS5hcHBlbmRUbyh0aGlzLiRib2R5KSx0aGlzLiRlbGVtZW50Lm9uKFwiY2xpY2suZGlzbWlzcy5icy5tb2RhbFwiLHQucHJveHkoZnVuY3Rpb24odCl7aWYodGhpcy5pZ25vcmVCYWNrZHJvcENsaWNrKXJldHVybiB2b2lkKHRoaXMuaWdub3JlQmFja2Ryb3BDbGljaz0hMSk7dC50YXJnZXQ9PT10LmN1cnJlbnRUYXJnZXQmJihcInN0YXRpY1wiPT10aGlzLm9wdGlvbnMuYmFja2Ryb3A/dGhpcy4kZWxlbWVudFswXS5mb2N1cygpOnRoaXMuaGlkZSgpKX0sdGhpcykpLHMmJnRoaXMuJGJhY2tkcm9wWzBdLm9mZnNldFdpZHRoLHRoaXMuJGJhY2tkcm9wLmFkZENsYXNzKFwiaW5cIiksIWUpcmV0dXJuO3M/dGhpcy4kYmFja2Ryb3Aub25lKFwiYnNUcmFuc2l0aW9uRW5kXCIsZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoaS5CQUNLRFJPUF9UUkFOU0lUSU9OX0RVUkFUSU9OKTplKCl9ZWxzZSBpZighdGhpcy5pc1Nob3duJiZ0aGlzLiRiYWNrZHJvcCl7dGhpcy4kYmFja2Ryb3AucmVtb3ZlQ2xhc3MoXCJpblwiKTt2YXIgYT1mdW5jdGlvbigpe28ucmVtb3ZlQmFja2Ryb3AoKSxlJiZlKCl9O3Quc3VwcG9ydC50cmFuc2l0aW9uJiZ0aGlzLiRlbGVtZW50Lmhhc0NsYXNzKFwiZmFkZVwiKT90aGlzLiRiYWNrZHJvcC5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixhKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLkJBQ0tEUk9QX1RSQU5TSVRJT05fRFVSQVRJT04pOmEoKX1lbHNlIGUmJmUoKX0saS5wcm90b3R5cGUuaGFuZGxlVXBkYXRlPWZ1bmN0aW9uKCl7dGhpcy5hZGp1c3REaWFsb2coKX0saS5wcm90b3R5cGUuYWRqdXN0RGlhbG9nPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDt0aGlzLiRlbGVtZW50LmNzcyh7cGFkZGluZ0xlZnQ6IXRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnQ/dGhpcy5zY3JvbGxiYXJXaWR0aDpcIlwiLHBhZGRpbmdSaWdodDp0aGlzLmJvZHlJc092ZXJmbG93aW5nJiYhdD90aGlzLnNjcm9sbGJhcldpZHRoOlwiXCJ9KX0saS5wcm90b3R5cGUucmVzZXRBZGp1c3RtZW50cz1mdW5jdGlvbigpe3RoaXMuJGVsZW1lbnQuY3NzKHtwYWRkaW5nTGVmdDpcIlwiLHBhZGRpbmdSaWdodDpcIlwifSl9LGkucHJvdG90eXBlLmNoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9d2luZG93LmlubmVyV2lkdGg7aWYoIXQpe3ZhciBlPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0PWUucmlnaHQtTWF0aC5hYnMoZS5sZWZ0KX10aGlzLmJvZHlJc092ZXJmbG93aW5nPWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGg8dCx0aGlzLnNjcm9sbGJhcldpZHRoPXRoaXMubWVhc3VyZVNjcm9sbGJhcigpfSxpLnByb3RvdHlwZS5zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD1wYXJzZUludCh0aGlzLiRib2R5LmNzcyhcInBhZGRpbmctcmlnaHRcIil8fDAsMTApO3RoaXMub3JpZ2luYWxCb2R5UGFkPWRvY3VtZW50LmJvZHkuc3R5bGUucGFkZGluZ1JpZ2h0fHxcIlwiLHRoaXMuYm9keUlzT3ZlcmZsb3dpbmcmJnRoaXMuJGJvZHkuY3NzKFwicGFkZGluZy1yaWdodFwiLHQrdGhpcy5zY3JvbGxiYXJXaWR0aCl9LGkucHJvdG90eXBlLnJlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dGhpcy4kYm9keS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIsdGhpcy5vcmlnaW5hbEJvZHlQYWQpfSxpLnByb3RvdHlwZS5tZWFzdXJlU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTt0LmNsYXNzTmFtZT1cIm1vZGFsLXNjcm9sbGJhci1tZWFzdXJlXCIsdGhpcy4kYm9keS5hcHBlbmQodCk7dmFyIGU9dC5vZmZzZXRXaWR0aC10LmNsaWVudFdpZHRoO3JldHVybiB0aGlzLiRib2R5WzBdLnJlbW92ZUNoaWxkKHQpLGV9O3ZhciBvPXQuZm4ubW9kYWw7dC5mbi5tb2RhbD1lLHQuZm4ubW9kYWwuQ29uc3RydWN0b3I9aSx0LmZuLm1vZGFsLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi5tb2RhbD1vLHRoaXN9LHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMubW9kYWwuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLGZ1bmN0aW9uKGkpe3ZhciBvPXQodGhpcyksbj1vLmF0dHIoXCJocmVmXCIpLHM9dChvLmF0dHIoXCJkYXRhLXRhcmdldFwiKXx8biYmbi5yZXBsYWNlKC8uKig/PSNbXlxcc10rJCkvLFwiXCIpKSxhPXMuZGF0YShcImJzLm1vZGFsXCIpP1widG9nZ2xlXCI6dC5leHRlbmQoe3JlbW90ZTohLyMvLnRlc3QobikmJm59LHMuZGF0YSgpLG8uZGF0YSgpKTtvLmlzKFwiYVwiKSYmaS5wcmV2ZW50RGVmYXVsdCgpLHMub25lKFwic2hvdy5icy5tb2RhbFwiLGZ1bmN0aW9uKHQpe3QuaXNEZWZhdWx0UHJldmVudGVkKCl8fHMub25lKFwiaGlkZGVuLmJzLm1vZGFsXCIsZnVuY3Rpb24oKXtvLmlzKFwiOnZpc2libGVcIikmJm8udHJpZ2dlcihcImZvY3VzXCIpfSl9KSxlLmNhbGwocyxhLHRoaXMpfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG89dCh0aGlzKSxuPW8uZGF0YShcImJzLnRvb2x0aXBcIikscz1cIm9iamVjdFwiPT10eXBlb2YgZSYmZTshbiYmL2Rlc3Ryb3l8aGlkZS8udGVzdChlKXx8KG58fG8uZGF0YShcImJzLnRvb2x0aXBcIixuPW5ldyBpKHRoaXMscykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuW2VdKCkpfSl9dmFyIGk9ZnVuY3Rpb24odCxlKXt0aGlzLnR5cGU9bnVsbCx0aGlzLm9wdGlvbnM9bnVsbCx0aGlzLmVuYWJsZWQ9bnVsbCx0aGlzLnRpbWVvdXQ9bnVsbCx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzLiRlbGVtZW50PW51bGwsdGhpcy5pblN0YXRlPW51bGwsdGhpcy5pbml0KFwidG9vbHRpcFwiLHQsZSl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxpLkRFRkFVTFRTPXthbmltYXRpb246ITAscGxhY2VtZW50OlwidG9wXCIsc2VsZWN0b3I6ITEsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PjxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+PC9kaXY+Jyx0cmlnZ2VyOlwiaG92ZXIgZm9jdXNcIix0aXRsZTpcIlwiLGRlbGF5OjAsaHRtbDohMSxjb250YWluZXI6ITEsdmlld3BvcnQ6e3NlbGVjdG9yOlwiYm9keVwiLHBhZGRpbmc6MH19LGkucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oZSxpLG8pe2lmKHRoaXMuZW5hYmxlZD0hMCx0aGlzLnR5cGU9ZSx0aGlzLiRlbGVtZW50PXQoaSksdGhpcy5vcHRpb25zPXRoaXMuZ2V0T3B0aW9ucyhvKSx0aGlzLiR2aWV3cG9ydD10aGlzLm9wdGlvbnMudmlld3BvcnQmJnQodC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy52aWV3cG9ydCk/dGhpcy5vcHRpb25zLnZpZXdwb3J0LmNhbGwodGhpcyx0aGlzLiRlbGVtZW50KTp0aGlzLm9wdGlvbnMudmlld3BvcnQuc2VsZWN0b3J8fHRoaXMub3B0aW9ucy52aWV3cG9ydCksdGhpcy5pblN0YXRlPXtjbGljazohMSxob3ZlcjohMSxmb2N1czohMX0sdGhpcy4kZWxlbWVudFswXWluc3RhbmNlb2YgZG9jdW1lbnQuY29uc3RydWN0b3ImJiF0aGlzLm9wdGlvbnMuc2VsZWN0b3IpdGhyb3cgbmV3IEVycm9yKFwiYHNlbGVjdG9yYCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiBpbml0aWFsaXppbmcgXCIrdGhpcy50eXBlK1wiIG9uIHRoZSB3aW5kb3cuZG9jdW1lbnQgb2JqZWN0IVwiKTtmb3IodmFyIG49dGhpcy5vcHRpb25zLnRyaWdnZXIuc3BsaXQoXCIgXCIpLHM9bi5sZW5ndGg7cy0tOyl7dmFyIGE9bltzXTtpZihcImNsaWNrXCI9PWEpdGhpcy4kZWxlbWVudC5vbihcImNsaWNrLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsdC5wcm94eSh0aGlzLnRvZ2dsZSx0aGlzKSk7ZWxzZSBpZihcIm1hbnVhbFwiIT1hKXt2YXIgcj1cImhvdmVyXCI9PWE/XCJtb3VzZWVudGVyXCI6XCJmb2N1c2luXCIsbD1cImhvdmVyXCI9PWE/XCJtb3VzZWxlYXZlXCI6XCJmb2N1c291dFwiO3RoaXMuJGVsZW1lbnQub24ocitcIi5cIit0aGlzLnR5cGUsdGhpcy5vcHRpb25zLnNlbGVjdG9yLHQucHJveHkodGhpcy5lbnRlcix0aGlzKSksdGhpcy4kZWxlbWVudC5vbihsK1wiLlwiK3RoaXMudHlwZSx0aGlzLm9wdGlvbnMuc2VsZWN0b3IsdC5wcm94eSh0aGlzLmxlYXZlLHRoaXMpKX19dGhpcy5vcHRpb25zLnNlbGVjdG9yP3RoaXMuX29wdGlvbnM9dC5leHRlbmQoe30sdGhpcy5vcHRpb25zLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuZml4VGl0bGUoKX0saS5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5ERUZBVUxUU30saS5wcm90b3R5cGUuZ2V0T3B0aW9ucz1mdW5jdGlvbihlKXtyZXR1cm4gZT10LmV4dGVuZCh7fSx0aGlzLmdldERlZmF1bHRzKCksdGhpcy4kZWxlbWVudC5kYXRhKCksZSksZS5kZWxheSYmXCJudW1iZXJcIj09dHlwZW9mIGUuZGVsYXkmJihlLmRlbGF5PXtzaG93OmUuZGVsYXksaGlkZTplLmRlbGF5fSksZX0saS5wcm90b3R5cGUuZ2V0RGVsZWdhdGVPcHRpb25zPWZ1bmN0aW9uKCl7dmFyIGU9e30saT10aGlzLmdldERlZmF1bHRzKCk7cmV0dXJuIHRoaXMuX29wdGlvbnMmJnQuZWFjaCh0aGlzLl9vcHRpb25zLGZ1bmN0aW9uKHQsbyl7aVt0XSE9byYmKGVbdF09byl9KSxlfSxpLnByb3RvdHlwZS5lbnRlcj1mdW5jdGlvbihlKXt2YXIgaT1lIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9lOnQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtyZXR1cm4gaXx8KGk9bmV3IHRoaXMuY29uc3RydWN0b3IoZS5jdXJyZW50VGFyZ2V0LHRoaXMuZ2V0RGVsZWdhdGVPcHRpb25zKCkpLHQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlLGkpKSxlIGluc3RhbmNlb2YgdC5FdmVudCYmKGkuaW5TdGF0ZVtcImZvY3VzaW5cIj09ZS50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSEwKSxpLnRpcCgpLmhhc0NsYXNzKFwiaW5cIil8fFwiaW5cIj09aS5ob3ZlclN0YXRlP3ZvaWQoaS5ob3ZlclN0YXRlPVwiaW5cIik6KGNsZWFyVGltZW91dChpLnRpbWVvdXQpLGkuaG92ZXJTdGF0ZT1cImluXCIsaS5vcHRpb25zLmRlbGF5JiZpLm9wdGlvbnMuZGVsYXkuc2hvdz92b2lkKGkudGltZW91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XCJpblwiPT1pLmhvdmVyU3RhdGUmJmkuc2hvdygpfSxpLm9wdGlvbnMuZGVsYXkuc2hvdykpOmkuc2hvdygpKX0saS5wcm90b3R5cGUuaXNJblN0YXRlVHJ1ZT1mdW5jdGlvbigpe2Zvcih2YXIgdCBpbiB0aGlzLmluU3RhdGUpaWYodGhpcy5pblN0YXRlW3RdKXJldHVybiEwO3JldHVybiExfSxpLnByb3RvdHlwZS5sZWF2ZT1mdW5jdGlvbihlKXt2YXIgaT1lIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9lOnQoZS5jdXJyZW50VGFyZ2V0KS5kYXRhKFwiYnMuXCIrdGhpcy50eXBlKTtpZihpfHwoaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksdChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsaSkpLGUgaW5zdGFuY2VvZiB0LkV2ZW50JiYoaS5pblN0YXRlW1wiZm9jdXNvdXRcIj09ZS50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSExKSwhaS5pc0luU3RhdGVUcnVlKCkpe2lmKGNsZWFyVGltZW91dChpLnRpbWVvdXQpLGkuaG92ZXJTdGF0ZT1cIm91dFwiLCFpLm9wdGlvbnMuZGVsYXl8fCFpLm9wdGlvbnMuZGVsYXkuaGlkZSlyZXR1cm4gaS5oaWRlKCk7aS50aW1lb3V0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtcIm91dFwiPT1pLmhvdmVyU3RhdGUmJmkuaGlkZSgpfSxpLm9wdGlvbnMuZGVsYXkuaGlkZSl9fSxpLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dC5FdmVudChcInNob3cuYnMuXCIrdGhpcy50eXBlKTtpZih0aGlzLmhhc0NvbnRlbnQoKSYmdGhpcy5lbmFibGVkKXt0aGlzLiRlbGVtZW50LnRyaWdnZXIoZSk7dmFyIG89dC5jb250YWlucyh0aGlzLiRlbGVtZW50WzBdLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuJGVsZW1lbnRbMF0pO2lmKGUuaXNEZWZhdWx0UHJldmVudGVkKCl8fCFvKXJldHVybjt2YXIgbj10aGlzLHM9dGhpcy50aXAoKSxhPXRoaXMuZ2V0VUlEKHRoaXMudHlwZSk7dGhpcy5zZXRDb250ZW50KCkscy5hdHRyKFwiaWRcIixhKSx0aGlzLiRlbGVtZW50LmF0dHIoXCJhcmlhLWRlc2NyaWJlZGJ5XCIsYSksdGhpcy5vcHRpb25zLmFuaW1hdGlvbiYmcy5hZGRDbGFzcyhcImZhZGVcIik7dmFyIHI9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5vcHRpb25zLnBsYWNlbWVudD90aGlzLm9wdGlvbnMucGxhY2VtZW50LmNhbGwodGhpcyxzWzBdLHRoaXMuJGVsZW1lbnRbMF0pOnRoaXMub3B0aW9ucy5wbGFjZW1lbnQsbD0vXFxzP2F1dG8/XFxzPy9pLGg9bC50ZXN0KHIpO2gmJihyPXIucmVwbGFjZShsLFwiXCIpfHxcInRvcFwiKSxzLmRldGFjaCgpLmNzcyh7dG9wOjAsbGVmdDowLGRpc3BsYXk6XCJibG9ja1wifSkuYWRkQ2xhc3MocikuZGF0YShcImJzLlwiK3RoaXMudHlwZSx0aGlzKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyP3MuYXBwZW5kVG8odGhpcy5vcHRpb25zLmNvbnRhaW5lcik6cy5pbnNlcnRBZnRlcih0aGlzLiRlbGVtZW50KSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJpbnNlcnRlZC5icy5cIit0aGlzLnR5cGUpO3ZhciBkPXRoaXMuZ2V0UG9zaXRpb24oKSxwPXNbMF0ub2Zmc2V0V2lkdGgsYz1zWzBdLm9mZnNldEhlaWdodDtpZihoKXt2YXIgZj1yLHU9dGhpcy5nZXRQb3NpdGlvbih0aGlzLiR2aWV3cG9ydCk7cj1cImJvdHRvbVwiPT1yJiZkLmJvdHRvbStjPnUuYm90dG9tP1widG9wXCI6XCJ0b3BcIj09ciYmZC50b3AtYzx1LnRvcD9cImJvdHRvbVwiOlwicmlnaHRcIj09ciYmZC5yaWdodCtwPnUud2lkdGg/XCJsZWZ0XCI6XCJsZWZ0XCI9PXImJmQubGVmdC1wPHUubGVmdD9cInJpZ2h0XCI6cixzLnJlbW92ZUNsYXNzKGYpLmFkZENsYXNzKHIpfXZhciBnPXRoaXMuZ2V0Q2FsY3VsYXRlZE9mZnNldChyLGQscCxjKTt0aGlzLmFwcGx5UGxhY2VtZW50KGcscik7dmFyIG09ZnVuY3Rpb24oKXt2YXIgdD1uLmhvdmVyU3RhdGU7bi4kZWxlbWVudC50cmlnZ2VyKFwic2hvd24uYnMuXCIrbi50eXBlKSxuLmhvdmVyU3RhdGU9bnVsbCxcIm91dFwiPT10JiZuLmxlYXZlKG4pfTt0LnN1cHBvcnQudHJhbnNpdGlvbiYmdGhpcy4kdGlwLmhhc0NsYXNzKFwiZmFkZVwiKT9zLm9uZShcImJzVHJhbnNpdGlvbkVuZFwiLG0pLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkuVFJBTlNJVElPTl9EVVJBVElPTik6bSgpfX0saS5wcm90b3R5cGUuYXBwbHlQbGFjZW1lbnQ9ZnVuY3Rpb24oZSxpKXt2YXIgbz10aGlzLnRpcCgpLG49b1swXS5vZmZzZXRXaWR0aCxzPW9bMF0ub2Zmc2V0SGVpZ2h0LGE9cGFyc2VJbnQoby5jc3MoXCJtYXJnaW4tdG9wXCIpLDEwKSxyPXBhcnNlSW50KG8uY3NzKFwibWFyZ2luLWxlZnRcIiksMTApO2lzTmFOKGEpJiYoYT0wKSxpc05hTihyKSYmKHI9MCksZS50b3ArPWEsZS5sZWZ0Kz1yLHQub2Zmc2V0LnNldE9mZnNldChvWzBdLHQuZXh0ZW5kKHt1c2luZzpmdW5jdGlvbih0KXtvLmNzcyh7dG9wOk1hdGgucm91bmQodC50b3ApLGxlZnQ6TWF0aC5yb3VuZCh0LmxlZnQpfSl9fSxlKSwwKSxvLmFkZENsYXNzKFwiaW5cIik7dmFyIGw9b1swXS5vZmZzZXRXaWR0aCxoPW9bMF0ub2Zmc2V0SGVpZ2h0O1widG9wXCI9PWkmJmghPXMmJihlLnRvcD1lLnRvcCtzLWgpO3ZhciBkPXRoaXMuZ2V0Vmlld3BvcnRBZGp1c3RlZERlbHRhKGksZSxsLGgpO2QubGVmdD9lLmxlZnQrPWQubGVmdDplLnRvcCs9ZC50b3A7dmFyIHA9L3RvcHxib3R0b20vLnRlc3QoaSksYz1wPzIqZC5sZWZ0LW4rbDoyKmQudG9wLXMraCxmPXA/XCJvZmZzZXRXaWR0aFwiOlwib2Zmc2V0SGVpZ2h0XCI7by5vZmZzZXQoZSksdGhpcy5yZXBsYWNlQXJyb3coYyxvWzBdW2ZdLHApfSxpLnByb3RvdHlwZS5yZXBsYWNlQXJyb3c9ZnVuY3Rpb24odCxlLGkpe3RoaXMuYXJyb3coKS5jc3MoaT9cImxlZnRcIjpcInRvcFwiLDUwKigxLXQvZSkrXCIlXCIpLmNzcyhpP1widG9wXCI6XCJsZWZ0XCIsXCJcIil9LGkucHJvdG90eXBlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnRpcCgpLGU9dGhpcy5nZXRUaXRsZSgpO3QuZmluZChcIi50b29sdGlwLWlubmVyXCIpW3RoaXMub3B0aW9ucy5odG1sP1wiaHRtbFwiOlwidGV4dFwiXShlKSx0LnJlbW92ZUNsYXNzKFwiZmFkZSBpbiB0b3AgYm90dG9tIGxlZnQgcmlnaHRcIil9LGkucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbygpe1wiaW5cIiE9bi5ob3ZlclN0YXRlJiZzLmRldGFjaCgpLG4uJGVsZW1lbnQmJm4uJGVsZW1lbnQucmVtb3ZlQXR0cihcImFyaWEtZGVzY3JpYmVkYnlcIikudHJpZ2dlcihcImhpZGRlbi5icy5cIituLnR5cGUpLGUmJmUoKX12YXIgbj10aGlzLHM9dCh0aGlzLiR0aXApLGE9dC5FdmVudChcImhpZGUuYnMuXCIrdGhpcy50eXBlKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoYSksIWEuaXNEZWZhdWx0UHJldmVudGVkKCkpcmV0dXJuIHMucmVtb3ZlQ2xhc3MoXCJpblwiKSx0LnN1cHBvcnQudHJhbnNpdGlvbiYmcy5oYXNDbGFzcyhcImZhZGVcIik/cy5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixvKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pOm8oKSx0aGlzLmhvdmVyU3RhdGU9bnVsbCx0aGlzfSxpLnByb3RvdHlwZS5maXhUaXRsZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJGVsZW1lbnQ7KHQuYXR0cihcInRpdGxlXCIpfHxcInN0cmluZ1wiIT10eXBlb2YgdC5hdHRyKFwiZGF0YS1vcmlnaW5hbC10aXRsZVwiKSkmJnQuYXR0cihcImRhdGEtb3JpZ2luYWwtdGl0bGVcIix0LmF0dHIoXCJ0aXRsZVwiKXx8XCJcIikuYXR0cihcInRpdGxlXCIsXCJcIil9LGkucHJvdG90eXBlLmhhc0NvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUaXRsZSgpfSxpLnByb3RvdHlwZS5nZXRQb3NpdGlvbj1mdW5jdGlvbihlKXtlPWV8fHRoaXMuJGVsZW1lbnQ7dmFyIGk9ZVswXSxvPVwiQk9EWVwiPT1pLnRhZ05hbWUsbj1pLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO251bGw9PW4ud2lkdGgmJihuPXQuZXh0ZW5kKHt9LG4se3dpZHRoOm4ucmlnaHQtbi5sZWZ0LGhlaWdodDpuLmJvdHRvbS1uLnRvcH0pKTt2YXIgcz13aW5kb3cuU1ZHRWxlbWVudCYmaSBpbnN0YW5jZW9mIHdpbmRvdy5TVkdFbGVtZW50LGE9bz97dG9wOjAsbGVmdDowfTpzP251bGw6ZS5vZmZzZXQoKSxyPXtzY3JvbGw6bz9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDplLnNjcm9sbFRvcCgpfSxsPW8/e3dpZHRoOnQod2luZG93KS53aWR0aCgpLGhlaWdodDp0KHdpbmRvdykuaGVpZ2h0KCl9Om51bGw7cmV0dXJuIHQuZXh0ZW5kKHt9LG4scixsLGEpfSxpLnByb3RvdHlwZS5nZXRDYWxjdWxhdGVkT2Zmc2V0PWZ1bmN0aW9uKHQsZSxpLG8pe3JldHVyblwiYm90dG9tXCI9PXQ/e3RvcDplLnRvcCtlLmhlaWdodCxsZWZ0OmUubGVmdCtlLndpZHRoLzItaS8yfTpcInRvcFwiPT10P3t0b3A6ZS50b3AtbyxsZWZ0OmUubGVmdCtlLndpZHRoLzItaS8yfTpcImxlZnRcIj09dD97dG9wOmUudG9wK2UuaGVpZ2h0LzItby8yLGxlZnQ6ZS5sZWZ0LWl9Ont0b3A6ZS50b3ArZS5oZWlnaHQvMi1vLzIsbGVmdDplLmxlZnQrZS53aWR0aH19LGkucHJvdG90eXBlLmdldFZpZXdwb3J0QWRqdXN0ZWREZWx0YT1mdW5jdGlvbih0LGUsaSxvKXt2YXIgbj17dG9wOjAsbGVmdDowfTtpZighdGhpcy4kdmlld3BvcnQpcmV0dXJuIG47dmFyIHM9dGhpcy5vcHRpb25zLnZpZXdwb3J0JiZ0aGlzLm9wdGlvbnMudmlld3BvcnQucGFkZGluZ3x8MCxhPXRoaXMuZ2V0UG9zaXRpb24odGhpcy4kdmlld3BvcnQpO2lmKC9yaWdodHxsZWZ0Ly50ZXN0KHQpKXt2YXIgcj1lLnRvcC1zLWEuc2Nyb2xsLGw9ZS50b3Arcy1hLnNjcm9sbCtvO3I8YS50b3A/bi50b3A9YS50b3AtcjpsPmEudG9wK2EuaGVpZ2h0JiYobi50b3A9YS50b3ArYS5oZWlnaHQtbCl9ZWxzZXt2YXIgaD1lLmxlZnQtcyxkPWUubGVmdCtzK2k7aDxhLmxlZnQ/bi5sZWZ0PWEubGVmdC1oOmQ+YS5yaWdodCYmKG4ubGVmdD1hLmxlZnQrYS53aWR0aC1kKX1yZXR1cm4gbn0saS5wcm90b3R5cGUuZ2V0VGl0bGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRlbGVtZW50LGU9dGhpcy5vcHRpb25zO3JldHVybiB0LmF0dHIoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aXRsZT9lLnRpdGxlLmNhbGwodFswXSk6ZS50aXRsZSl9LGkucHJvdG90eXBlLmdldFVJRD1mdW5jdGlvbih0KXtkb3t0Kz1+figxZTYqTWF0aC5yYW5kb20oKSl9d2hpbGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCkpO3JldHVybiB0fSxpLnByb3RvdHlwZS50aXA9ZnVuY3Rpb24oKXtpZighdGhpcy4kdGlwJiYodGhpcy4kdGlwPXQodGhpcy5vcHRpb25zLnRlbXBsYXRlKSwxIT10aGlzLiR0aXAubGVuZ3RoKSl0aHJvdyBuZXcgRXJyb3IodGhpcy50eXBlK1wiIGB0ZW1wbGF0ZWAgb3B0aW9uIG11c3QgY29uc2lzdCBvZiBleGFjdGx5IDEgdG9wLWxldmVsIGVsZW1lbnQhXCIpO3JldHVybiB0aGlzLiR0aXB9LGkucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoXCIudG9vbHRpcC1hcnJvd1wiKX0saS5wcm90b3R5cGUuZW5hYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSEwfSxpLnByb3RvdHlwZS5kaXNhYmxlPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSExfSxpLnByb3RvdHlwZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5lbmFibGVkPSF0aGlzLmVuYWJsZWR9LGkucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbihlKXt2YXIgaT10aGlzO2UmJigoaT10KGUuY3VycmVudFRhcmdldCkuZGF0YShcImJzLlwiK3RoaXMudHlwZSkpfHwoaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLmN1cnJlbnRUYXJnZXQsdGhpcy5nZXREZWxlZ2F0ZU9wdGlvbnMoKSksdChlLmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJicy5cIit0aGlzLnR5cGUsaSkpKSxlPyhpLmluU3RhdGUuY2xpY2s9IWkuaW5TdGF0ZS5jbGljayxpLmlzSW5TdGF0ZVRydWUoKT9pLmVudGVyKGkpOmkubGVhdmUoaSkpOmkudGlwKCkuaGFzQ2xhc3MoXCJpblwiKT9pLmxlYXZlKGkpOmkuZW50ZXIoaSl9LGkucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2NsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpLHRoaXMuaGlkZShmdW5jdGlvbigpe3QuJGVsZW1lbnQub2ZmKFwiLlwiK3QudHlwZSkucmVtb3ZlRGF0YShcImJzLlwiK3QudHlwZSksdC4kdGlwJiZ0LiR0aXAuZGV0YWNoKCksdC4kdGlwPW51bGwsdC4kYXJyb3c9bnVsbCx0LiR2aWV3cG9ydD1udWxsLHQuJGVsZW1lbnQ9bnVsbH0pfTt2YXIgbz10LmZuLnRvb2x0aXA7dC5mbi50b29sdGlwPWUsdC5mbi50b29sdGlwLkNvbnN0cnVjdG9yPWksdC5mbi50b29sdGlwLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdC5mbi50b29sdGlwPW8sdGhpc319KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG89dCh0aGlzKSxuPW8uZGF0YShcImJzLnBvcG92ZXJcIikscz1cIm9iamVjdFwiPT10eXBlb2YgZSYmZTshbiYmL2Rlc3Ryb3l8aGlkZS8udGVzdChlKXx8KG58fG8uZGF0YShcImJzLnBvcG92ZXJcIixuPW5ldyBpKHRoaXMscykpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiZuW2VdKCkpfSl9dmFyIGk9ZnVuY3Rpb24odCxlKXt0aGlzLmluaXQoXCJwb3BvdmVyXCIsdCxlKX07aWYoIXQuZm4udG9vbHRpcCl0aHJvdyBuZXcgRXJyb3IoXCJQb3BvdmVyIHJlcXVpcmVzIHRvb2x0aXAuanNcIik7aS5WRVJTSU9OPVwiMy4zLjdcIixpLkRFRkFVTFRTPXQuZXh0ZW5kKHt9LHQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5ERUZBVUxUUyx7cGxhY2VtZW50OlwicmlnaHRcIix0cmlnZ2VyOlwiY2xpY2tcIixjb250ZW50OlwiXCIsdGVtcGxhdGU6JzxkaXYgY2xhc3M9XCJwb3BvdmVyXCIgcm9sZT1cInRvb2x0aXBcIj48ZGl2IGNsYXNzPVwiYXJyb3dcIj48L2Rpdj48aDMgY2xhc3M9XCJwb3BvdmVyLXRpdGxlXCI+PC9oMz48ZGl2IGNsYXNzPVwicG9wb3Zlci1jb250ZW50XCI+PC9kaXY+PC9kaXY+J30pLGkucHJvdG90eXBlPXQuZXh0ZW5kKHt9LHQuZm4udG9vbHRpcC5Db25zdHJ1Y3Rvci5wcm90b3R5cGUpLGkucHJvdG90eXBlLmNvbnN0cnVjdG9yPWksaS5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm4gaS5ERUZBVUxUU30saS5wcm90b3R5cGUuc2V0Q29udGVudD1mdW5jdGlvbigpe3ZhciB0PXRoaXMudGlwKCksZT10aGlzLmdldFRpdGxlKCksaT10aGlzLmdldENvbnRlbnQoKTt0LmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKVt0aGlzLm9wdGlvbnMuaHRtbD9cImh0bWxcIjpcInRleHRcIl0oZSksdC5maW5kKFwiLnBvcG92ZXItY29udGVudFwiKS5jaGlsZHJlbigpLmRldGFjaCgpLmVuZCgpW3RoaXMub3B0aW9ucy5odG1sP1wic3RyaW5nXCI9PXR5cGVvZiBpP1wiaHRtbFwiOlwiYXBwZW5kXCI6XCJ0ZXh0XCJdKGkpLHQucmVtb3ZlQ2xhc3MoXCJmYWRlIHRvcCBib3R0b20gbGVmdCByaWdodCBpblwiKSx0LmZpbmQoXCIucG9wb3Zlci10aXRsZVwiKS5odG1sKCl8fHQuZmluZChcIi5wb3BvdmVyLXRpdGxlXCIpLmhpZGUoKX0saS5wcm90b3R5cGUuaGFzQ29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFRpdGxlKCl8fHRoaXMuZ2V0Q29udGVudCgpfSxpLnByb3RvdHlwZS5nZXRDb250ZW50PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZWxlbWVudCxlPXRoaXMub3B0aW9ucztyZXR1cm4gdC5hdHRyKFwiZGF0YS1jb250ZW50XCIpfHwoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jb250ZW50P2UuY29udGVudC5jYWxsKHRbMF0pOmUuY29udGVudCl9LGkucHJvdG90eXBlLmFycm93PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGFycm93PXRoaXMuJGFycm93fHx0aGlzLnRpcCgpLmZpbmQoXCIuYXJyb3dcIil9O3ZhciBvPXQuZm4ucG9wb3Zlcjt0LmZuLnBvcG92ZXI9ZSx0LmZuLnBvcG92ZXIuQ29uc3RydWN0b3I9aSx0LmZuLnBvcG92ZXIubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLnBvcG92ZXI9byx0aGlzfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGksbyl7dGhpcy4kYm9keT10KGRvY3VtZW50LmJvZHkpLHRoaXMuJHNjcm9sbEVsZW1lbnQ9dCh0KGkpLmlzKGRvY3VtZW50LmJvZHkpP3dpbmRvdzppKSx0aGlzLm9wdGlvbnM9dC5leHRlbmQoe30sZS5ERUZBVUxUUyxvKSx0aGlzLnNlbGVjdG9yPSh0aGlzLm9wdGlvbnMudGFyZ2V0fHxcIlwiKStcIiAubmF2IGxpID4gYVwiLHRoaXMub2Zmc2V0cz1bXSx0aGlzLnRhcmdldHM9W10sdGhpcy5hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLnNjcm9sbEhlaWdodD0wLHRoaXMuJHNjcm9sbEVsZW1lbnQub24oXCJzY3JvbGwuYnMuc2Nyb2xsc3B5XCIsdC5wcm94eSh0aGlzLnByb2Nlc3MsdGhpcykpLHRoaXMucmVmcmVzaCgpLHRoaXMucHJvY2VzcygpfWZ1bmN0aW9uIGkoaSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBvPXQodGhpcyksbj1vLmRhdGEoXCJicy5zY3JvbGxzcHlcIikscz1cIm9iamVjdFwiPT10eXBlb2YgaSYmaTtufHxvLmRhdGEoXCJicy5zY3JvbGxzcHlcIixuPW5ldyBlKHRoaXMscykpLFwic3RyaW5nXCI9PXR5cGVvZiBpJiZuW2ldKCl9KX1lLlZFUlNJT049XCIzLjMuN1wiLGUuREVGQVVMVFM9e29mZnNldDoxMH0sZS5wcm90b3R5cGUuZ2V0U2Nyb2xsSGVpZ2h0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJHNjcm9sbEVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0fHxNYXRoLm1heCh0aGlzLiRib2R5WzBdLnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KX0sZS5wcm90b3R5cGUucmVmcmVzaD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsaT1cIm9mZnNldFwiLG89MDt0aGlzLm9mZnNldHM9W10sdGhpcy50YXJnZXRzPVtdLHRoaXMuc2Nyb2xsSGVpZ2h0PXRoaXMuZ2V0U2Nyb2xsSGVpZ2h0KCksdC5pc1dpbmRvdyh0aGlzLiRzY3JvbGxFbGVtZW50WzBdKXx8KGk9XCJwb3NpdGlvblwiLG89dGhpcy4kc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3AoKSksdGhpcy4kYm9keS5maW5kKHRoaXMuc2VsZWN0b3IpLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksbj1lLmRhdGEoXCJ0YXJnZXRcIil8fGUuYXR0cihcImhyZWZcIikscz0vXiMuLy50ZXN0KG4pJiZ0KG4pO3JldHVybiBzJiZzLmxlbmd0aCYmcy5pcyhcIjp2aXNpYmxlXCIpJiZbW3NbaV0oKS50b3ArbyxuXV18fG51bGx9KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRbMF0tZVswXX0pLmVhY2goZnVuY3Rpb24oKXtlLm9mZnNldHMucHVzaCh0aGlzWzBdKSxlLnRhcmdldHMucHVzaCh0aGlzWzFdKX0pfSxlLnByb3RvdHlwZS5wcm9jZXNzPWZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLiRzY3JvbGxFbGVtZW50LnNjcm9sbFRvcCgpK3RoaXMub3B0aW9ucy5vZmZzZXQsaT10aGlzLmdldFNjcm9sbEhlaWdodCgpLG89dGhpcy5vcHRpb25zLm9mZnNldCtpLXRoaXMuJHNjcm9sbEVsZW1lbnQuaGVpZ2h0KCksbj10aGlzLm9mZnNldHMscz10aGlzLnRhcmdldHMsYT10aGlzLmFjdGl2ZVRhcmdldDtpZih0aGlzLnNjcm9sbEhlaWdodCE9aSYmdGhpcy5yZWZyZXNoKCksZT49bylyZXR1cm4gYSE9KHQ9c1tzLmxlbmd0aC0xXSkmJnRoaXMuYWN0aXZhdGUodCk7aWYoYSYmZTxuWzBdKXJldHVybiB0aGlzLmFjdGl2ZVRhcmdldD1udWxsLHRoaXMuY2xlYXIoKTtmb3IodD1uLmxlbmd0aDt0LS07KWEhPXNbdF0mJmU+PW5bdF0mJih2b2lkIDA9PT1uW3QrMV18fGU8blt0KzFdKSYmdGhpcy5hY3RpdmF0ZShzW3RdKX0sZS5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24oZSl7XG50aGlzLmFjdGl2ZVRhcmdldD1lLHRoaXMuY2xlYXIoKTt2YXIgaT10aGlzLnNlbGVjdG9yKydbZGF0YS10YXJnZXQ9XCInK2UrJ1wiXSwnK3RoaXMuc2VsZWN0b3IrJ1tocmVmPVwiJytlKydcIl0nLG89dChpKS5wYXJlbnRzKFwibGlcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIik7by5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJihvPW8uY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpKSxvLnRyaWdnZXIoXCJhY3RpdmF0ZS5icy5zY3JvbGxzcHlcIil9LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dCh0aGlzLnNlbGVjdG9yKS5wYXJlbnRzVW50aWwodGhpcy5vcHRpb25zLnRhcmdldCxcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIil9O3ZhciBvPXQuZm4uc2Nyb2xsc3B5O3QuZm4uc2Nyb2xsc3B5PWksdC5mbi5zY3JvbGxzcHkuQ29uc3RydWN0b3I9ZSx0LmZuLnNjcm9sbHNweS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4uc2Nyb2xsc3B5PW8sdGhpc30sdCh3aW5kb3cpLm9uKFwibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGlcIixmdW5jdGlvbigpe3QoJ1tkYXRhLXNweT1cInNjcm9sbFwiXScpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2kuY2FsbChlLGUuZGF0YSgpKX0pfSl9KGpRdWVyeSksZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG89dCh0aGlzKSxuPW8uZGF0YShcImJzLnRhYlwiKTtufHxvLmRhdGEoXCJicy50YWJcIixuPW5ldyBpKHRoaXMpKSxcInN0cmluZ1wiPT10eXBlb2YgZSYmbltlXSgpfSl9dmFyIGk9ZnVuY3Rpb24oZSl7dGhpcy5lbGVtZW50PXQoZSl9O2kuVkVSU0lPTj1cIjMuMy43XCIsaS5UUkFOU0lUSU9OX0RVUkFUSU9OPTE1MCxpLnByb3RvdHlwZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LGk9ZS5jbG9zZXN0KFwidWw6bm90KC5kcm9wZG93bi1tZW51KVwiKSxvPWUuZGF0YShcInRhcmdldFwiKTtpZihvfHwobz1lLmF0dHIoXCJocmVmXCIpLG89byYmby5yZXBsYWNlKC8uKig/PSNbXlxcc10qJCkvLFwiXCIpKSwhZS5wYXJlbnQoXCJsaVwiKS5oYXNDbGFzcyhcImFjdGl2ZVwiKSl7dmFyIG49aS5maW5kKFwiLmFjdGl2ZTpsYXN0IGFcIikscz10LkV2ZW50KFwiaGlkZS5icy50YWJcIix7cmVsYXRlZFRhcmdldDplWzBdfSksYT10LkV2ZW50KFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDpuWzBdfSk7aWYobi50cmlnZ2VyKHMpLGUudHJpZ2dlcihhKSwhYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmIXMuaXNEZWZhdWx0UHJldmVudGVkKCkpe3ZhciByPXQobyk7dGhpcy5hY3RpdmF0ZShlLmNsb3Nlc3QoXCJsaVwiKSxpKSx0aGlzLmFjdGl2YXRlKHIsci5wYXJlbnQoKSxmdW5jdGlvbigpe24udHJpZ2dlcih7dHlwZTpcImhpZGRlbi5icy50YWJcIixyZWxhdGVkVGFyZ2V0OmVbMF19KSxlLnRyaWdnZXIoe3R5cGU6XCJzaG93bi5icy50YWJcIixyZWxhdGVkVGFyZ2V0Om5bMF19KX0pfX19LGkucHJvdG90eXBlLmFjdGl2YXRlPWZ1bmN0aW9uKGUsbyxuKXtmdW5jdGlvbiBzKCl7YS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKS5maW5kKFwiPiAuZHJvcGRvd24tbWVudSA+IC5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikuZW5kKCkuZmluZCgnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJykuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSksZS5hZGRDbGFzcyhcImFjdGl2ZVwiKS5maW5kKCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0nKS5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLCEwKSxyPyhlWzBdLm9mZnNldFdpZHRoLGUuYWRkQ2xhc3MoXCJpblwiKSk6ZS5yZW1vdmVDbGFzcyhcImZhZGVcIiksZS5wYXJlbnQoXCIuZHJvcGRvd24tbWVudVwiKS5sZW5ndGgmJmUuY2xvc2VzdChcImxpLmRyb3Bkb3duXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpLmVuZCgpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cInRhYlwiXScpLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsITApLG4mJm4oKX12YXIgYT1vLmZpbmQoXCI+IC5hY3RpdmVcIikscj1uJiZ0LnN1cHBvcnQudHJhbnNpdGlvbiYmKGEubGVuZ3RoJiZhLmhhc0NsYXNzKFwiZmFkZVwiKXx8ISFvLmZpbmQoXCI+IC5mYWRlXCIpLmxlbmd0aCk7YS5sZW5ndGgmJnI/YS5vbmUoXCJic1RyYW5zaXRpb25FbmRcIixzKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpLlRSQU5TSVRJT05fRFVSQVRJT04pOnMoKSxhLnJlbW92ZUNsYXNzKFwiaW5cIil9O3ZhciBvPXQuZm4udGFiO3QuZm4udGFiPWUsdC5mbi50YWIuQ29uc3RydWN0b3I9aSx0LmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHQuZm4udGFiPW8sdGhpc307dmFyIG49ZnVuY3Rpb24oaSl7aS5wcmV2ZW50RGVmYXVsdCgpLGUuY2FsbCh0KHRoaXMpLFwic2hvd1wiKX07dChkb2N1bWVudCkub24oXCJjbGljay5icy50YWIuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwidGFiXCJdJyxuKS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJwaWxsXCJdJyxuKX0oalF1ZXJ5KSxmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgbz10KHRoaXMpLG49by5kYXRhKFwiYnMuYWZmaXhcIikscz1cIm9iamVjdFwiPT10eXBlb2YgZSYmZTtufHxvLmRhdGEoXCJicy5hZmZpeFwiLG49bmV3IGkodGhpcyxzKSksXCJzdHJpbmdcIj09dHlwZW9mIGUmJm5bZV0oKX0pfXZhciBpPWZ1bmN0aW9uKGUsbyl7dGhpcy5vcHRpb25zPXQuZXh0ZW5kKHt9LGkuREVGQVVMVFMsbyksdGhpcy4kdGFyZ2V0PXQodGhpcy5vcHRpb25zLnRhcmdldCkub24oXCJzY3JvbGwuYnMuYWZmaXguZGF0YS1hcGlcIix0LnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSkub24oXCJjbGljay5icy5hZmZpeC5kYXRhLWFwaVwiLHQucHJveHkodGhpcy5jaGVja1Bvc2l0aW9uV2l0aEV2ZW50TG9vcCx0aGlzKSksdGhpcy4kZWxlbWVudD10KGUpLHRoaXMuYWZmaXhlZD1udWxsLHRoaXMudW5waW49bnVsbCx0aGlzLnBpbm5lZE9mZnNldD1udWxsLHRoaXMuY2hlY2tQb3NpdGlvbigpfTtpLlZFUlNJT049XCIzLjMuN1wiLGkuUkVTRVQ9XCJhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tXCIsaS5ERUZBVUxUUz17b2Zmc2V0OjAsdGFyZ2V0OndpbmRvd30saS5wcm90b3R5cGUuZ2V0U3RhdGU9ZnVuY3Rpb24odCxlLGksbyl7dmFyIG49dGhpcy4kdGFyZ2V0LnNjcm9sbFRvcCgpLHM9dGhpcy4kZWxlbWVudC5vZmZzZXQoKSxhPXRoaXMuJHRhcmdldC5oZWlnaHQoKTtpZihudWxsIT1pJiZcInRvcFwiPT10aGlzLmFmZml4ZWQpcmV0dXJuIG48aSYmXCJ0b3BcIjtpZihcImJvdHRvbVwiPT10aGlzLmFmZml4ZWQpcmV0dXJuIG51bGwhPWk/IShuK3RoaXMudW5waW48PXMudG9wKSYmXCJib3R0b21cIjohKG4rYTw9dC1vKSYmXCJib3R0b21cIjt2YXIgcj1udWxsPT10aGlzLmFmZml4ZWQsbD1yP246cy50b3AsaD1yP2E6ZTtyZXR1cm4gbnVsbCE9aSYmbjw9aT9cInRvcFwiOm51bGwhPW8mJmwraD49dC1vJiZcImJvdHRvbVwifSxpLnByb3RvdHlwZS5nZXRQaW5uZWRPZmZzZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLnBpbm5lZE9mZnNldClyZXR1cm4gdGhpcy5waW5uZWRPZmZzZXQ7dGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyhpLlJFU0VUKS5hZGRDbGFzcyhcImFmZml4XCIpO3ZhciB0PXRoaXMuJHRhcmdldC5zY3JvbGxUb3AoKSxlPXRoaXMuJGVsZW1lbnQub2Zmc2V0KCk7cmV0dXJuIHRoaXMucGlubmVkT2Zmc2V0PWUudG9wLXR9LGkucHJvdG90eXBlLmNoZWNrUG9zaXRpb25XaXRoRXZlbnRMb29wPWZ1bmN0aW9uKCl7c2V0VGltZW91dCh0LnByb3h5KHRoaXMuY2hlY2tQb3NpdGlvbix0aGlzKSwxKX0saS5wcm90b3R5cGUuY2hlY2tQb3NpdGlvbj1mdW5jdGlvbigpe2lmKHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSl7dmFyIGU9dGhpcy4kZWxlbWVudC5oZWlnaHQoKSxvPXRoaXMub3B0aW9ucy5vZmZzZXQsbj1vLnRvcCxzPW8uYm90dG9tLGE9TWF0aC5tYXgodChkb2N1bWVudCkuaGVpZ2h0KCksdChkb2N1bWVudC5ib2R5KS5oZWlnaHQoKSk7XCJvYmplY3RcIiE9dHlwZW9mIG8mJihzPW49byksXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49by50b3AodGhpcy4kZWxlbWVudCkpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHMmJihzPW8uYm90dG9tKHRoaXMuJGVsZW1lbnQpKTt2YXIgcj10aGlzLmdldFN0YXRlKGEsZSxuLHMpO2lmKHRoaXMuYWZmaXhlZCE9cil7bnVsbCE9dGhpcy51bnBpbiYmdGhpcy4kZWxlbWVudC5jc3MoXCJ0b3BcIixcIlwiKTt2YXIgbD1cImFmZml4XCIrKHI/XCItXCIrcjpcIlwiKSxoPXQuRXZlbnQobCtcIi5icy5hZmZpeFwiKTtpZih0aGlzLiRlbGVtZW50LnRyaWdnZXIoaCksaC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSlyZXR1cm47dGhpcy5hZmZpeGVkPXIsdGhpcy51bnBpbj1cImJvdHRvbVwiPT1yP3RoaXMuZ2V0UGlubmVkT2Zmc2V0KCk6bnVsbCx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKGkuUkVTRVQpLmFkZENsYXNzKGwpLnRyaWdnZXIobC5yZXBsYWNlKFwiYWZmaXhcIixcImFmZml4ZWRcIikrXCIuYnMuYWZmaXhcIil9XCJib3R0b21cIj09ciYmdGhpcy4kZWxlbWVudC5vZmZzZXQoe3RvcDphLWUtc30pfX07dmFyIG89dC5mbi5hZmZpeDt0LmZuLmFmZml4PWUsdC5mbi5hZmZpeC5Db25zdHJ1Y3Rvcj1pLHQuZm4uYWZmaXgubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiB0LmZuLmFmZml4PW8sdGhpc30sdCh3aW5kb3cpLm9uKFwibG9hZFwiLGZ1bmN0aW9uKCl7dCgnW2RhdGEtc3B5PVwiYWZmaXhcIl0nKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxvPWkuZGF0YSgpO28ub2Zmc2V0PW8ub2Zmc2V0fHx7fSxudWxsIT1vLm9mZnNldEJvdHRvbSYmKG8ub2Zmc2V0LmJvdHRvbT1vLm9mZnNldEJvdHRvbSksbnVsbCE9by5vZmZzZXRUb3AmJihvLm9mZnNldC50b3A9by5vZmZzZXRUb3ApLGUuY2FsbChpLG8pfSl9KX0oalF1ZXJ5KTsiLCIhZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0KXtpZighdClyZXR1cm5cIlwiO3ZhciBlLG89XCJcIjtmb3IoZT0wO2U8dC5sZW5ndGg7ZSs9MSlvKz1GW3QuY2hhckF0KGUpXXx8dC5jaGFyQXQoZSk7cmV0dXJuIG99ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXFwtXFxbXFxdXFwvXFx7XFx9XFwoXFwpXFwqXFwrXFw/XFwuXFxcXFxcXlxcJFxcfF0vZyxcIlxcXFwkJlwiKX1mdW5jdGlvbiBpKHQpe2lmKHQpe2lmKHQuc2VsZWN0aW9uU3RhcnQpcmV0dXJuIHQuc2VsZWN0aW9uU3RhcnQ7aWYoZG9jdW1lbnQuc2VsZWN0aW9uKXt0LmZvY3VzKCk7dmFyIGU9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCksbz1kb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0Lmxlbmd0aDtyZXR1cm4gZS5tb3ZlU3RhcnQoXCJjaGFyYWN0ZXJcIiwtdC52YWx1ZS5sZW5ndGgpLGUudGV4dC5sZW5ndGgtb319fWZ1bmN0aW9uIG4odCxlKXtpZih0LnNldFNlbGVjdGlvblJhbmdlKXQuZm9jdXMoKSx0LnNldFNlbGVjdGlvblJhbmdlKGUsZSk7ZWxzZSBpZih0LmNyZWF0ZVRleHRSYW5nZSl7dmFyIG89dC5jcmVhdGVUZXh0UmFuZ2UoKTtvLmNvbGxhcHNlKCEwKSxvLm1vdmVFbmQoXCJjaGFyYWN0ZXJcIixlKSxvLm1vdmVTdGFydChcImNoYXJhY3RlclwiLGUpLG8uc2VsZWN0KCl9fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHZvaWQgMCE9PXR9ZnVuY3Rpb24gcihlLG8saSxuKXtyZXR1cm4gYShlKSYmIXQuaXNBcnJheShlKT90LmlzRnVuY3Rpb24oZSk/ZS5hcHBseSh0aGlzLG8pOm46YShpKT9yLmNhbGwodGhpcyxpLG8pOm59ZnVuY3Rpb24gcyh0LGUsbyxpKXtyZXR1cm4gci5jYWxsKHRoaXMsYSh0aGlzLnNvdXJjZVtlXSkmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnNvdXJjZVtlXSx0KT90aGlzLnNvdXJjZVtlXVt0XTp2b2lkIDAsbyxmdW5jdGlvbigpe3JldHVybiByLmNhbGwodGhpcyxhKHRoaXNbdF1bZV0pP3RoaXNbdF1bZV06YSh0aGlzW3RdWzBdKT90aGlzW3RdWzBdOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLHQpP3RoaXNbdF06dm9pZCAwLG8sUFt0XVtlXXx8UFt0XVswXXx8UFt0XSxpKX0saSl9ZnVuY3Rpb24gbChlLG8pe3JldHVybiBhKG8pfHwobz0wKSx0LmlzQXJyYXkodGhpcy5zb3VyY2UpJiZhKHRoaXMuc291cmNlW29dKSYmYSh0aGlzLnNvdXJjZVtvXVtlXSk/dGhpcy5zb3VyY2Vbb11bZV06YSh0aGlzW2VdKT90LmlzQXJyYXkodGhpc1tlXSk/YSh0aGlzW2VdW29dKT90aGlzW2VdW29dOmEodGhpc1tlXVswXSk/dGhpc1tlXVswXTpudWxsOnRoaXNbZV06bnVsbH1mdW5jdGlvbiBjKGUsbyxpLG4pe28ueGhyJiZvLnhoci5hYm9ydCgpLG8ueGhyPXQuYWpheCh0LmV4dGVuZCghMCx7dXJsOmUsdHlwZTpcIkdFVFwiLGFzeW5jOiEwLGNhY2hlOiExLGRhdGFUeXBlOlwianNvblwifSxvLmFqYXgpKS5kb25lKGZ1bmN0aW9uKGUpe2kmJmkuYXBwbHkodGhpcyx0Lm1ha2VBcnJheShhcmd1bWVudHMpKX0pLmZhaWwoZnVuY3Rpb24odCxlKXtuJiZjb25zb2xlLmxvZyhcIlJlcXVlc3QgZmFpbGVkOiBcIitlKX0pfWZ1bmN0aW9uIHUodCxlKXt2YXIgbyxpPSExO2ZvcihvPTA7bzx0Lmxlbmd0aDtvKz0xKWlmKGk9cy5jYWxsKHRoaXMsXCJmaW5kUmlnaHRcIixvLFt0W29dLGUsb10pKXJldHVybntyaWdodDppLHNvdXJjZTpvfTtyZXR1cm4hMX1mdW5jdGlvbiBkKHQsZSl7dmFyIG87Zm9yKGguY2FsbCh0aGlzLHQsZSksbz0wO288dC5sZW5ndGg7bys9MSl0W29dPXMuY2FsbCh0aGlzLFwiZmlsdGVyXCIsbyxbdFtvXSxlLG9dLHRbb10pfWZ1bmN0aW9uIGYoZSxvLGkpe3ZhciBuLGw9dGhpcztpZih0LmlzRnVuY3Rpb24obC5zb3VyY2UpKWwuc291cmNlLmFwcGx5KGwsW2UsZnVuY3Rpb24odCl7bz1bdF0sci5jYWxsKGwsaSxbZV0pfSxvLDBdKTtlbHNlIGZvcihuPTA7bjxsLnNvdXJjZS5sZW5ndGg7bis9MSlpZih0LmlzQXJyYXkobC5zb3VyY2Vbbl0pKW9bbl09bC5zb3VyY2Vbbl07ZWxzZSBpZih0LmlzRnVuY3Rpb24obC5zb3VyY2Vbbl0pKSFmdW5jdGlvbihuKXtsLnNvdXJjZVtuXS5hcHBseShsLFtlLGZ1bmN0aW9uKGEpe2lmKG9bbl18fChvW25dPVtdKSxhJiZ0LmlzQXJyYXkoYSkpc3dpdGNoKGwuYXBwZW5kTWV0aG9kKXtjYXNlXCJyZXBsYWNlXCI6b1tuXT1hO2JyZWFrO2RlZmF1bHQ6b1tuXT1vW25dLmNvbmNhdChhKX1yLmNhbGwobCxpLFtlXSl9LG8sbl0pfShuKTtlbHNlIHN3aXRjaChsLnNvdXJjZVtuXS50eXBlKXtjYXNlXCJyZW1vdGVcIjppZihhKGwuc291cmNlW25dLnVybCkmJighYShsLnNvdXJjZVtuXS5taW5MZW5ndGgpfHxlLmxlbmd0aD49bC5zb3VyY2Vbbl0ubWluTGVuZ3RoKSl7dmFyIHU9cy5jYWxsKGwsXCJyZXBsYWNlXCIsbixbbC5zb3VyY2Vbbl0udXJsLGVdLFwiXCIpO29bbl18fChvW25dPVtdKSxmdW5jdGlvbih0KXtjKHUsbC5zb3VyY2VbdF0sZnVuY3Rpb24obil7b1t0XT1uLHIuY2FsbChsLGksW2VdKX0sbC5kZWJ1Zyl9KG4pfWJyZWFrO2RlZmF1bHQ6YShsLnNvdXJjZVtuXS5kYXRhKT9vW25dPWwuc291cmNlW25dLmRhdGE6b1tuXT1sLnNvdXJjZVtuXX1yLmNhbGwobCxpLFtlXSl9ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXRbb109cy5jYWxsKHRoaXMsXCJwcmVwYXJzZVwiLG8sW3Rbb10sZV0sdFtvXSl9ZnVuY3Rpb24gZyhlLG8pe3ZhciBpLG4sYSxyPVtdO2ZvcihpPTA7aTxlLmxlbmd0aDtpKz0xKWZvcihuPTA7bjxlW2ldLmxlbmd0aCYmIShyLmxlbmd0aD49dGhpcy5saW1pdCk7bis9MSlhPXQocy5jYWxsKHRoaXMsXCJyZW5kZXJcIixpLFtlW2ldW25dLGksbixvXSxcIlwiKSksYS5kYXRhKFwic291cmNlXCIsaSksYS5kYXRhKFwicGlkXCIsbiksYS5kYXRhKFwiaXRlbVwiLGVbaV1bbl0pLHIucHVzaChhKTtyZXR1cm4gcn1mdW5jdGlvbiBwKHQsZSl7cmV0dXJuISEoYSh0LmRhdGEoXCJzb3VyY2VcIikpJiZhKHQuZGF0YShcInBpZFwiKSkmJmEoZVt0LmRhdGEoXCJzb3VyY2VcIildKSYmYShlW3QuZGF0YShcInNvdXJjZVwiKV1bdC5kYXRhKFwicGlkXCIpXSkpJiZlW3QuZGF0YShcInNvdXJjZVwiKV1bdC5kYXRhKFwicGlkXCIpXX1mdW5jdGlvbiB2KHQsZSl7dmFyIG89cCh0LGUpO3JldHVybiBvP3MuY2FsbCh0aGlzLFwiZ2V0VmFsdWVcIix0LmRhdGEoXCJzb3VyY2VcIiksW28sdC5kYXRhKFwic291cmNlXCIpXSk6YSh0LmRhdGEoXCJ2YWx1ZVwiKSk/ZGVjb2RlVVJJQ29tcG9uZW50KHQuZGF0YShcInZhbHVlXCIpKTp0Lmh0bWwoKX1mdW5jdGlvbiBtKGUsbyl7ZnVuY3Rpb24gcigpe2lmKE8udmFsKCkhPUkpe2lmKEk9Ty52YWwoKSxJLmxlbmd0aDxvLm1pbkxlbmd0aClyZXR1cm4gdm9pZCBPLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIik7Zi5jYWxsKG8sSSxGLGZ1bmN0aW9uKHQpe2lmKHQ9PUkpe3ZhciBlO2lmKGQuY2FsbChvLEYsdCksTy50cmlnZ2VyKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIiksby5zaG93SGludCYmSS5sZW5ndGgmJkkubGVuZ3RoPD1PLnByb3AoXCJzaXplXCIpJiYoZT11LmNhbGwobyxGLEkpKSl7dmFyIGk9cy5jYWxsKG8sXCJnZXRUaXRsZVwiLGUuc291cmNlLFtlLnJpZ2h0LGUuc291cmNlXSk7aT10K2kuc3Vic3RyKHQubGVuZ3RoKSxQLnZhbChpKX1lbHNlIFAudmFsKFwiXCIpfX0pfX1mdW5jdGlvbiBsKHQpe3ZhciBlLG49dC5rZXlDb2RlO3N3aXRjaChuKXtjYXNlIEg6Y2FzZSBUOmNhc2UgajpjYXNlIFc6Y2FzZSBMOmlmKHQuc2hpZnRLZXl8fHQuY3RybEtleSlyZXR1cm4hMDticmVhaztjYXNlIFM6Y2FzZSBDOnJldHVybiEwO2Nhc2UgeDpjYXNlIHk6cmV0dXJuISEoX3x8QXx8dC5zaGlmdEtleXx8dC5jdHJsS2V5KXx8KEs9Ty52YWwoKSxxPWkoT1swXSksbiE9PXh8fHEhPT1LLmxlbmd0aHx8KChlPXUuY2FsbChvLEYsSykpP08udHJpZ2dlcihcInBpY2sueGRzb2Z0XCIsW3MuY2FsbChvLFwiZ2V0VmFsdWVcIixlLnNvdXJjZSxbZS5yaWdodCxlLnNvdXJjZV0pXSk6Ty50cmlnZ2VyKFwicGljay54ZHNvZnRcIiksdC5wcmV2ZW50RGVmYXVsdCgpLCExKSk7Y2FzZSBrOnJldHVybiEwO2Nhc2UgejpyZXR1cm4hRXx8KE8udHJpZ2dlcihcInBpY2sueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMSk7Y2FzZSBSOnJldHVybiBPLnZhbChJKS50cmlnZ2VyKFwiY2xvc2UueGRzb2Z0XCIpLHQucHJldmVudERlZmF1bHQoKSwhMTtjYXNlIHc6Y2FzZSBiOmlmKCFFKXJldHVybiBPLnRyaWdnZXIoXCJvcGVuLnhkc29mdFwiKSxPLnRyaWdnZXIoXCJ1cGRhdGVDb250ZW50Lnhkc29mdFwiKSx0LnByZXZlbnREZWZhdWx0KCksITE7Qj1tLmZpbmQoXCJkaXYuYWN0aXZlXCIpO3ZhciBhPW49PXc/XCJuZXh0XCI6XCJwcmV2XCIscj0hMDtyZXR1cm4gQi5sZW5ndGg/KEIucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksQlthXSgpLmxlbmd0aD9CW2FdKCkuYWRkQ2xhc3MoXCJhY3RpdmVcIik6KE8udmFsKEkpLHI9ITEpKTptLmNoaWxkcmVuKCkuZXEobj09dz8wOi0xKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxyJiZPLnRyaWdnZXIoXCJ0aW1lcGljay54ZHNvZnRcIiksbS50cmlnZ2VyKFwidXBkYXRlc2Nyb2xsLnhkc29mdFwiKSx0LnByZXZlbnREZWZhdWx0KCksITF9fWlmKCF0KGUpLmhhc0NsYXNzKFwieGRzb2Z0X2lucHV0XCIpKXt2YXIgYyxoPXQoJzxkaXYgY2xhc3M9XCJ4ZHNvZnRfYXV0b2NvbXBsZXRlXCI+PC9kaXY+JyksbT10KCc8ZGl2IGNsYXNzPVwieGRzb2Z0X2F1dG9jb21wbGV0ZV9kcm9wZG93blwiPjwvZGl2PicpLFA9dCgnPGlucHV0IHJlYWRvbmx5IGNsYXNzPVwieGRzb2Z0X2F1dG9jb21wbGV0ZV9oaW50XCIvPicpLE89dChlKSxGPVtdLEU9ITEsSz1cIlwiLEk9XCJcIixWPVwiXCIsQj1udWxsLHE9MDtPLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiLG8pLG0ub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKX0pLm9uKFwidXBkYXRlc2Nyb2xsLnhkc29mdFwiLGZ1bmN0aW9uKCl7dmFyIHQ9bS5maW5kKFwiLmFjdGl2ZVwiKTtpZih0Lmxlbmd0aCl7dmFyIGU9dC5wb3NpdGlvbigpLnRvcCxvPXQub3V0ZXJIZWlnaHQoITApLGk9bS5zY3JvbGxUb3AoKSxuPW0uaGVpZ2h0KCk7ZTwwP20uc2Nyb2xsVG9wKGktTWF0aC5hYnMoZSkpOmUrbz5uJiZtLnNjcm9sbFRvcChpK2Urby1uKX19KSxoLmNzcyh7ZGlzcGxheTpPLmNzcyhcImRpc3BsYXlcIiksd2lkdGg6Ty5jc3MoXCJ3aWR0aFwiKX0pLG8uc3R5bGUmJmguY3NzKG8uc3R5bGUpLE8uYWRkQ2xhc3MoXCJ4ZHNvZnRfaW5wdXRcIikuYXR0cihcImF1dG9jb21wbGV0ZVwiLFwib2ZmXCIpO3ZhciBEPW51bGwsVT1udWxsLE09ITE7bS5vbihcIm1vdXNlbW92ZVwiLFwiZGl2XCIsZnVuY3Rpb24oKXtpZih0KHRoaXMpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXJldHVybiEwO20uZmluZChcImRpdlwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSx0KHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlXCIpfSkub24oXCJtb3VzZWRvd25cIixcImRpdlwiLGZ1bmN0aW9uKGUpe20uZmluZChcImRpdlwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSx0KHRoaXMpLmFkZENsYXNzKFwiYWN0aXZlXCIpLE8udHJpZ2dlcihcInBpY2sueGRzb2Z0XCIpfSkub24oXCJ0b3VjaHN0YXJ0XCIsXCJkaXZcIixmdW5jdGlvbih0KXtEPXQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgsVT10Lm9yaWdpbmFsRXZlbnQudG91Y2hlc1swXS5jbGllbnRZfSkub24oXCJ0b3VjaGVuZFwiLFwiZGl2XCIsZnVuY3Rpb24oZSl7ITE9PT1NJiYobS5maW5kKFwiZGl2XCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHQodGhpcykuYWRkQ2xhc3MoXCJhY3RpdmVcIiksTy50cmlnZ2VyKFwicGljay54ZHNvZnRcIikpLE09ITF9KS5vbihcInRvdWNobW92ZVwiLFwiZGl2XCIsZnVuY3Rpb24odCl7aWYoRCYmVSl7dmFyIGU9dC5vcmlnaW5hbEV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCxvPXQub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFksaT1ELWUsbj1VLW87TT1NYXRoLmFicyhpKT5NYXRoLmFicyhuKT9pPjA/XCJsZWZ0XCI6XCJyaWdodFwiOm4+MD9cInRvcFwiOlwiYm90dG1cIixEPW51bGwsVT1udWxsfX0pLE8uZGF0YShcInhkc29mdF9hdXRvY29tcGxldGVcIixGKS5hZnRlcihoKS5vbihcInBpY2sueGRzb2Z0XCIsZnVuY3Rpb24odCxlKXtPLnRyaWdnZXIoXCJ0aW1lcGljay54ZHNvZnRcIixlKSxWPUk9Ty52YWwoKSxPLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIiksQj1tLmZpbmQoXCJkaXYuYWN0aXZlXCIpLmVxKDApLEIubGVuZ3RofHwoQj1tLmNoaWxkcmVuKCkuZmlyc3QoKSksTy50cmlnZ2VyKFwic2VsZWN0ZWQueGRzb2Z0XCIsW3AoQixGKV0pLG8uYWZ0ZXJTZWxlY3RlZCYmby5hZnRlclNlbGVjdGVkKCl9KS5vbihcInRpbWVwaWNrLnhkc29mdFwiLGZ1bmN0aW9uKHQsZSl7Qj1tLmZpbmQoXCJkaXYuYWN0aXZlXCIpLEIubGVuZ3RofHwoQj1tLmNoaWxkcmVuKCkuZmlyc3QoKSksQi5sZW5ndGgmJihhKGUpP08udmFsKGUpOk8udmFsKHYuY2FsbChvLEIsRikpLE8udHJpZ2dlcihcImF1dG9jb21wbGV0ZWQueGRzb2Z0XCIsW3AoQixGKV0pLFAudmFsKFwiXCIpLG4oT1swXSxPLnZhbCgpLmxlbmd0aCkpfSkub24oXCJrZXlkb3duLnhkc29mdCBpbnB1dC54ZHNvZnQgY3V0Lnhkc29mdCBwYXN0ZS54ZHNvZnRcIixmdW5jdGlvbih0KXt2YXIgZT1sKHQpO2lmKCExPT09ZXx8ITA9PT1lKXJldHVybiBlO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyKCl9LDEpLHIoKX0pLm9uKFwiY2hhbmdlLnhkc29mdFwiLGZ1bmN0aW9uKHQpe0k9Ty52YWwoKX0pLEk9Ty52YWwoKSxmLmNhbGwobyxPLnZhbCgpLEYsZnVuY3Rpb24odCl7ZC5jYWxsKG8sRix0KX0pLG8ub3Blbk9uRm9jdXMmJk8ub24oXCJmb2N1c2luLnhkc29mdFwiLGZ1bmN0aW9uKCl7Ty50cmlnZ2VyKFwib3Blbi54ZHNvZnRcIiksTy50cmlnZ2VyKFwidXBkYXRlQ29udGVudC54ZHNvZnRcIil9KSxvLmNsb3NlT25CbHVyJiZPLm9uKFwiZm9jdXNvdXQueGRzb2Z0XCIsZnVuY3Rpb24oKXtPLnRyaWdnZXIoXCJjbG9zZS54ZHNvZnRcIil9KSxoLmFwcGVuZChPKS5hcHBlbmQobSk7dmFyIE49ITEsWT0wO08ub24oXCJ1cGRhdGVIZWxwZXJQb3NpdGlvbi54ZHNvZnRcIixmdW5jdGlvbigpe2NsZWFyVGltZW91dChZKSxZPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZihoLmNzcyh7ZGlzcGxheTpPLmNzcyhcImRpc3BsYXlcIiksd2lkdGg6Ty5jc3MoXCJ3aWR0aFwiKX0pLG0uY3NzKHQuZXh0ZW5kKCEwLHtsZWZ0Ok8ucG9zaXRpb24oKS5sZWZ0LHRvcDpPLnBvc2l0aW9uKCkudG9wK3BhcnNlSW50KE8uY3NzKFwibWFyZ2luVG9wXCIpKStwYXJzZUludChPWzBdLm9mZnNldEhlaWdodCksbWFyZ2luTGVmdDpPLmNzcyhcIm1hcmdpbkxlZnRcIiksbWFyZ2luUmlnaHQ6Ty5jc3MoXCJtYXJnaW5SaWdodFwiKSx3aWR0aDpcIjEwMCVcIj09by5kcm9wZG93bldpZHRoP09bMF0ub2Zmc2V0V2lkdGg6by5kcm9wZG93bldpZHRofSxvLmRyb3Bkb3duU3R5bGUpKSxvLnNob3dIaW50KXt2YXIgZT1nZXRDb21wdXRlZFN0eWxlKE9bMF0sXCJcIik7UFswXS5zdHlsZS5jc3NUZXh0PWUuY3NzVGV4dCxQLmNzcyh7XCJib3gtc2l6aW5nXCI6ZS5ib3hTaXppbmcsYm9yZGVyU3R5bGU6XCJzb2xpZFwiLGJvcmRlckNvbGxhcHNlOmUuYm9yZGVyQ29sbGFwc2UsYm9yZGVyTGVmdFdpZHRoOmUuYm9yZGVyTGVmdFdpZHRoLGJvcmRlclJpZ2h0V2lkdGg6ZS5ib3JkZXJSaWdodFdpZHRoLGJvcmRlclRvcFdpZHRoOmUuYm9yZGVyVG9wV2lkdGgsYm9yZGVyQm90dG9tV2lkdGg6ZS5ib3JkZXJCb3R0b21XaWR0aCxwYWRkaW5nQm90dG9tOmUucGFkZGluZ0JvdHRvbSxtYXJnaW5Cb3R0b206ZS5tYXJnaW5Cb3R0b20scGFkZGluZ1RvcDplLnBhZGRpbmdUb3AsbWFyZ2luVG9wOmUubWFyZ2luVG9wLHBhZGRpbmdMZWZ0OmUucGFkZGluZ0xlZnQsbWFyZ2luTGVmdDplLm1hcmdpbkxlZnQscGFkZGluZ1JpZ2h0OmUucGFkZGluZ1JpZ2h0LG1hcmdpblJpZ2h0OmUubWFyZ2luUmlnaHQsbWF4SGVpZ2h0OmUubWF4SGVpZ2h0LG1pbkhlaWdodDplLm1pbkhlaWdodCxtYXhXaWR0aDplLm1heFdpZHRoLG1pbldpZHRoOmUubWluV2lkdGgsd2lkdGg6ZS53aWR0aCxsZXR0ZXJTcGFjaW5nOmUubGV0dGVyU3BhY2luZyxsaW5lSGVpZ2h0OmUubGluZUhlaWdodCxvdXRsaW5lV2lkdGg6ZS5vdXRsaW5lV2lkdGgsZm9udEZhbWlseTplLmZvbnRGYW1pbHksZm9udFZhcmlhbnQ6ZS5mb250VmFyaWFudCxmb250U3R5bGU6Ty5jc3MoXCJmb250U3R5bGVcIiksZm9udFNpemU6Ty5jc3MoXCJmb250U2l6ZVwiKSxmb250V2VpZ2h0Ok8uY3NzKFwiZm9udFdlaWdodFwiKSxmbGV4OmUuZmxleCxqdXN0aWZ5Q29udGVudDplLmp1c3RpZnlDb250ZW50LGJvcmRlclJhZGl1czplLmJvcmRlclJhZGl1cyxcIi13ZWJraXQtYm94LXNoYWRvd1wiOlwibm9uZVwiLFwiYm94LXNoYWRvd1wiOlwibm9uZVwifSksTy5jc3MoXCJmb250LXNpemVcIixPLmNzcyhcImZvbnRTaXplXCIpKSxQLmlubmVySGVpZ2h0KE8uaW5uZXJIZWlnaHQoKSksUC5jc3ModC5leHRlbmQoITAse3Bvc2l0aW9uOlwiYWJzb2x1dGVcIix6SW5kZXg6XCIxXCIsYm9yZGVyQ29sb3I6XCJ0cmFuc3BhcmVudFwiLG91dGxpbmVDb2xvcjpcInRyYW5zcGFyZW50XCIsbGVmdDpPLnBvc2l0aW9uKCkubGVmdCx0b3A6Ty5wb3NpdGlvbigpLnRvcCxiYWNrZ3JvdW5kOk8uY3NzKFwiYmFja2dyb3VuZFwiKX0sby5oaW50U3R5bGUpKSwhMSE9PU4/UC5jc3MoXCJiYWNrZ3JvdW5kXCIsTik6Tj1PLmNzcyhcImJhY2tncm91bmRcIik7dHJ5e09bMF0uc3R5bGUuc2V0UHJvcGVydHkoXCJiYWNrZ3JvdW5kXCIsXCJ0cmFuc3BhcmVudFwiLFwiaW1wb3J0YW50XCIpfWNhdGNoKHQpe08uY3NzKFwiYmFja2dyb3VuZFwiLFwidHJhbnNwYXJlbnRcIil9aC5hcHBlbmQoUCl9fSxvLnRpbWVvdXRVcGRhdGV8fDEpfSksTy5pcyhcIjp2aXNpYmxlXCIpP08udHJpZ2dlcihcInVwZGF0ZUhlbHBlclBvc2l0aW9uLnhkc29mdFwiKTpjPXNldEludGVydmFsKGZ1bmN0aW9uKCl7Ty5pcyhcIjp2aXNpYmxlXCIpJiYoTy50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpLGNsZWFySW50ZXJ2YWwoYykpfSwxMDApLHQod2luZG93KS5vbihcInJlc2l6ZVwiLGZ1bmN0aW9uKCl7aC5jc3Moe3dpZHRoOlwiYXV0b1wifSksTy50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpfSksTy5vbihcImNsb3NlLnhkc29mdFwiLGZ1bmN0aW9uKCl7RSYmKG0uaGlkZSgpLFAudmFsKFwiXCIpLG8uYXV0b3NlbGVjdHx8Ty52YWwoSSksRT0hMSl9KS5vbihcInVwZGF0ZUNvbnRlbnQueGRzb2Z0XCIsZnVuY3Rpb24oKXt2YXIgZT1nLmNhbGwobyxGLE8udmFsKCkpLGk9MTA7aWYoIWUubGVuZ3RoKXJldHVybiB2b2lkIE8udHJpZ2dlcihcImNsb3NlLnhkc29mdFwiKTtPLnRyaWdnZXIoXCJvcGVuLnhkc29mdFwiKSx0KGUpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmNzcyh0LmV4dGVuZCghMCx7cGFkZGluZ0xlZnQ6Ty5jc3MoXCJwYWRkaW5nTGVmdFwiKSxwYWRkaW5nUmlnaHQ6Ty5jc3MoXCJwYWRkaW5nUmlnaHRcIil9LG8uaXRlbVN0eWxlKSl9KSxtLmh0bWwoZSksaT1vLnZpc2libGVIZWlnaHQ/by52aXNpYmxlSGVpZ2h0Om8udmlzaWJsZUxpbWl0KigoZVswXT9lWzBdLm91dGVySGVpZ2h0KCEwKTowKXx8by5kZWZhdWx0SGVpZ2h0SXRlbSkrNSxtLmNzcyhcIm1heEhlaWdodFwiLGkrXCJweFwiKX0pLm9uKFwib3Blbi54ZHNvZnRcIixmdW5jdGlvbigpe0V8fChtLnNob3coKSxFPSEwKX0pLm9uKFwiZGVzdHJveS54ZHNvZnRcIixmdW5jdGlvbigpe08ucmVtb3ZlQ2xhc3MoXCJ4ZHNvZnRcIiksaC5hZnRlcihPKSxoLnJlbW92ZSgpLGNsZWFyVGltZW91dCgwKSxjbGVhclRpbWVvdXQoYyksTy5kYXRhKFwieGRzb2Z0X2F1dG9jb21wbGV0ZVwiLG51bGwpLE8ub2ZmKFwiLnhkc29mdFwiKX0pfX12YXIgeT0zNyx4PTM5LGI9Mzgsdz00MCxrPTksQz0xNyxTPTE2LHo9MTMsUj0yNyxIPTY1LFQ9Njcsaj04NixXPTkwLEw9ODksUD17fSxfPSExLEE9ITEsTz17fSxGPXtcIuG6mlwiOlwiYVwiLFwiw4FcIjpcImFcIixcIsOhXCI6XCJhXCIsXCLDgFwiOlwiYVwiLFwiw6BcIjpcImFcIixcIsSCXCI6XCJhXCIsXCLEg1wiOlwiYVwiLFwi4bquXCI6XCJhXCIsXCLhuq9cIjpcImFcIixcIuG6sFwiOlwiYVwiLFwi4bqxXCI6XCJhXCIsXCLhurRcIjpcImFcIixcIuG6tVwiOlwiYVwiLFwi4bqyXCI6XCJhXCIsXCLhuqpcIjpcImFcIixcIuG6q1wiOlwiYVwiLFwi4bqoXCI6XCJhXCIsXCLhuqlcIjpcImFcIixcIseNXCI6XCJhXCIsXCLHjlwiOlwiYVwiLFwiw4VcIjpcImFcIixcIsOlXCI6XCJhXCIsXCLHulwiOlwiYVwiLFwix7tcIjpcImFcIixcIsOEXCI6XCJhXCIsXCLDpFwiOlwiYVwiLFwix55cIjpcImFcIixcIsefXCI6XCJhXCIsXCLDg1wiOlwiYVwiLFwiw6NcIjpcImFcIixcIsimXCI6XCJhXCIsXCLIp1wiOlwiYVwiLFwix6BcIjpcImFcIixcIsehXCI6XCJhXCIsXCLEhFwiOlwiYVwiLFwixIVcIjpcImFcIixcIsSAXCI6XCJhXCIsXCLEgVwiOlwiYVwiLFwi4bqiXCI6XCJhXCIsXCLhuqNcIjpcImFcIixcIsiAXCI6XCJhXCIsXCLIgVwiOlwiYVwiLFwiyIJcIjpcImFcIixcIsiDXCI6XCJhXCIsXCLhuqBcIjpcImFcIixcIuG6oVwiOlwiYVwiLFwi4bq2XCI6XCJhXCIsXCLhurdcIjpcImFcIixcIuG6rFwiOlwiYVwiLFwi4bqtXCI6XCJhXCIsXCLhuIBcIjpcImFcIixcIuG4gVwiOlwiYVwiLFwiyLpcIjpcImFcIixcIuKxpVwiOlwiYVwiLFwix7xcIjpcImFcIixcIse9XCI6XCJhXCIsXCLHolwiOlwiYVwiLFwix6NcIjpcImFcIixcIuG4glwiOlwiYlwiLFwi4biDXCI6XCJiXCIsXCLhuIRcIjpcImJcIixcIuG4hVwiOlwiYlwiLFwi4biGXCI6XCJiXCIsXCLhuIdcIjpcImJcIixcIsmDXCI6XCJiXCIsXCLGgFwiOlwiYlwiLFwi4bWsXCI6XCJiXCIsXCLGgVwiOlwiYlwiLFwiyZNcIjpcImJcIixcIsaCXCI6XCJiXCIsXCLGg1wiOlwiYlwiLFwixIZcIjpcImNcIixcIsSHXCI6XCJjXCIsXCLEiFwiOlwiY1wiLFwixIlcIjpcImNcIixcIsSMXCI6XCJjXCIsXCLEjVwiOlwiY1wiLFwixIpcIjpcImNcIixcIsSLXCI6XCJjXCIsXCLDh1wiOlwiY1wiLFwiw6dcIjpcImNcIixcIuG4iFwiOlwiY1wiLFwi4biJXCI6XCJjXCIsXCLIu1wiOlwiY1wiLFwiyLxcIjpcImNcIixcIsaHXCI6XCJjXCIsXCLGiFwiOlwiY1wiLFwiyZVcIjpcImNcIixcIsSOXCI6XCJkXCIsXCLEj1wiOlwiZFwiLFwi4biKXCI6XCJkXCIsXCLhuItcIjpcImRcIixcIuG4kFwiOlwiZFwiLFwi4biRXCI6XCJkXCIsXCLhuIxcIjpcImRcIixcIuG4jVwiOlwiZFwiLFwi4biSXCI6XCJkXCIsXCLhuJNcIjpcImRcIixcIuG4jlwiOlwiZFwiLFwi4biPXCI6XCJkXCIsXCLEkFwiOlwiZFwiLFwixJFcIjpcImRcIixcIuG1rVwiOlwiZFwiLFwixolcIjpcImRcIixcIsmWXCI6XCJkXCIsXCLGilwiOlwiZFwiLFwiyZdcIjpcImRcIixcIsaLXCI6XCJkXCIsXCLGjFwiOlwiZFwiLFwiyKFcIjpcImRcIixcIsOwXCI6XCJkXCIsXCLDiVwiOlwiZVwiLFwixo9cIjpcImVcIixcIsaOXCI6XCJlXCIsXCLHnVwiOlwiZVwiLFwiw6lcIjpcImVcIixcIsOIXCI6XCJlXCIsXCLDqFwiOlwiZVwiLFwixJRcIjpcImVcIixcIsSVXCI6XCJlXCIsXCLDilwiOlwiZVwiLFwiw6pcIjpcImVcIixcIuG6vlwiOlwiZVwiLFwi4bq/XCI6XCJlXCIsXCLhu4BcIjpcImVcIixcIuG7gVwiOlwiZVwiLFwi4buEXCI6XCJlXCIsXCLhu4VcIjpcImVcIixcIuG7glwiOlwiZVwiLFwi4buDXCI6XCJlXCIsXCLEmlwiOlwiZVwiLFwixJtcIjpcImVcIixcIsOLXCI6XCJlXCIsXCLDq1wiOlwiZVwiLFwi4bq8XCI6XCJlXCIsXCLhur1cIjpcImVcIixcIsSWXCI6XCJlXCIsXCLEl1wiOlwiZVwiLFwiyKhcIjpcImVcIixcIsipXCI6XCJlXCIsXCLhuJxcIjpcImVcIixcIuG4nVwiOlwiZVwiLFwixJhcIjpcImVcIixcIsSZXCI6XCJlXCIsXCLEklwiOlwiZVwiLFwixJNcIjpcImVcIixcIuG4llwiOlwiZVwiLFwi4biXXCI6XCJlXCIsXCLhuJRcIjpcImVcIixcIuG4lVwiOlwiZVwiLFwi4bq6XCI6XCJlXCIsXCLhurtcIjpcImVcIixcIsiEXCI6XCJlXCIsXCLIhVwiOlwiZVwiLFwiyIZcIjpcImVcIixcIsiHXCI6XCJlXCIsXCLhurhcIjpcImVcIixcIuG6uVwiOlwiZVwiLFwi4buGXCI6XCJlXCIsXCLhu4dcIjpcImVcIixcIuG4mFwiOlwiZVwiLFwi4biZXCI6XCJlXCIsXCLhuJpcIjpcImVcIixcIuG4m1wiOlwiZVwiLFwiyYZcIjpcImVcIixcIsmHXCI6XCJlXCIsXCLJmlwiOlwiZVwiLFwiyZ1cIjpcImVcIixcIuG4nlwiOlwiZlwiLFwi4bifXCI6XCJmXCIsXCLhta5cIjpcImZcIixcIsaRXCI6XCJmXCIsXCLGklwiOlwiZlwiLFwix7RcIjpcImdcIixcIse1XCI6XCJnXCIsXCLEnlwiOlwiZ1wiLFwixJ9cIjpcImdcIixcIsScXCI6XCJnXCIsXCLEnVwiOlwiZ1wiLFwix6ZcIjpcImdcIixcIsenXCI6XCJnXCIsXCLEoFwiOlwiZ1wiLFwixKFcIjpcImdcIixcIsSiXCI6XCJnXCIsXCLEo1wiOlwiZ1wiLFwi4bigXCI6XCJnXCIsXCLhuKFcIjpcImdcIixcIsekXCI6XCJnXCIsXCLHpVwiOlwiZ1wiLFwixpNcIjpcImdcIixcIsmgXCI6XCJnXCIsXCLEpFwiOlwiaFwiLFwixKVcIjpcImhcIixcIsieXCI6XCJoXCIsXCLIn1wiOlwiaFwiLFwi4bimXCI6XCJoXCIsXCLhuKdcIjpcImhcIixcIuG4olwiOlwiaFwiLFwi4bijXCI6XCJoXCIsXCLhuKhcIjpcImhcIixcIuG4qVwiOlwiaFwiLFwi4bikXCI6XCJoXCIsXCLhuKVcIjpcImhcIixcIuG4qlwiOlwiaFwiLFwi4birXCI6XCJoXCIsSDpcImhcIixcIsyxXCI6XCJoXCIsXCLhupZcIjpcImhcIixcIsSmXCI6XCJoXCIsXCLEp1wiOlwiaFwiLFwi4rGnXCI6XCJoXCIsXCLisahcIjpcImhcIixcIsONXCI6XCJpXCIsXCLDrVwiOlwiaVwiLFwiw4xcIjpcImlcIixcIsOsXCI6XCJpXCIsXCLErFwiOlwiaVwiLFwixK1cIjpcImlcIixcIsOOXCI6XCJpXCIsXCLDrlwiOlwiaVwiLFwix49cIjpcImlcIixcIseQXCI6XCJpXCIsXCLDj1wiOlwiaVwiLFwiw69cIjpcImlcIixcIuG4rlwiOlwiaVwiLFwi4bivXCI6XCJpXCIsXCLEqFwiOlwiaVwiLFwixKlcIjpcImlcIixcIsSwXCI6XCJpXCIsaTpcImlcIixcIsSuXCI6XCJpXCIsXCLEr1wiOlwiaVwiLFwixKpcIjpcImlcIixcIsSrXCI6XCJpXCIsXCLhu4hcIjpcImlcIixcIuG7iVwiOlwiaVwiLFwiyIhcIjpcImlcIixcIsiJXCI6XCJpXCIsXCLIilwiOlwiaVwiLFwiyItcIjpcImlcIixcIuG7ilwiOlwiaVwiLFwi4buLXCI6XCJpXCIsXCLhuKxcIjpcImlcIixcIuG4rVwiOlwiaVwiLEk6XCJpXCIsXCLEsVwiOlwiaVwiLFwixpdcIjpcImlcIixcIsmoXCI6XCJpXCIsXCLEtFwiOlwialwiLFwixLVcIjpcImpcIixKOlwialwiLFwizIxcIjpcImpcIixcIsewXCI6XCJqXCIsXCLIt1wiOlwialwiLFwiyYhcIjpcImpcIixcIsmJXCI6XCJqXCIsXCLKnVwiOlwialwiLFwiyZ9cIjpcImpcIixcIsqEXCI6XCJqXCIsXCLhuLBcIjpcImtcIixcIuG4sVwiOlwia1wiLFwix6hcIjpcImtcIixcIsepXCI6XCJrXCIsXCLEtlwiOlwia1wiLFwixLdcIjpcImtcIixcIuG4slwiOlwia1wiLFwi4bizXCI6XCJrXCIsXCLhuLRcIjpcImtcIixcIuG4tVwiOlwia1wiLFwixphcIjpcImtcIixcIsaZXCI6XCJrXCIsXCLisalcIjpcImtcIixcIuKxqlwiOlwia1wiLFwixLlcIjpcImFcIixcIsS6XCI6XCJsXCIsXCLEvVwiOlwibFwiLFwixL5cIjpcImxcIixcIsS7XCI6XCJsXCIsXCLEvFwiOlwibFwiLFwi4bi2XCI6XCJsXCIsXCLhuLdcIjpcImxcIixcIuG4uFwiOlwibFwiLFwi4bi5XCI6XCJsXCIsXCLhuLxcIjpcImxcIixcIuG4vVwiOlwibFwiLFwi4bi6XCI6XCJsXCIsXCLhuLtcIjpcImxcIixcIsWBXCI6XCJsXCIsXCLFglwiOlwibFwiLFwizKNcIjpcImxcIixcIsS/XCI6XCJsXCIsXCLFgFwiOlwibFwiLFwiyL1cIjpcImxcIixcIsaaXCI6XCJsXCIsXCLisaBcIjpcImxcIixcIuKxoVwiOlwibFwiLFwi4rGiXCI6XCJsXCIsXCLJq1wiOlwibFwiLFwiyaxcIjpcImxcIixcIsmtXCI6XCJsXCIsXCLItFwiOlwibFwiLFwi4bi+XCI6XCJtXCIsXCLhuL9cIjpcIm1cIixcIuG5gFwiOlwibVwiLFwi4bmBXCI6XCJtXCIsXCLhuYJcIjpcIm1cIixcIuG5g1wiOlwibVwiLFwiybFcIjpcIm1cIixcIsWDXCI6XCJuXCIsXCLFhFwiOlwiblwiLFwix7hcIjpcIm5cIixcIse5XCI6XCJuXCIsXCLFh1wiOlwiblwiLFwixYhcIjpcIm5cIixcIsORXCI6XCJuXCIsXCLDsVwiOlwiblwiLFwi4bmEXCI6XCJuXCIsXCLhuYVcIjpcIm5cIixcIsWFXCI6XCJuXCIsXCLFhlwiOlwiblwiLFwi4bmGXCI6XCJuXCIsXCLhuYdcIjpcIm5cIixcIuG5ilwiOlwiblwiLFwi4bmLXCI6XCJuXCIsXCLhuYhcIjpcIm5cIixcIuG5iVwiOlwiblwiLFwixp1cIjpcIm5cIixcIsmyXCI6XCJuXCIsXCLIoFwiOlwiblwiLFwixp5cIjpcIm5cIixcIsmzXCI6XCJuXCIsXCLItVwiOlwiblwiLE46XCJuXCIsXCLMiFwiOlwiblwiLG46XCJuXCIsXCLDk1wiOlwib1wiLFwiw7NcIjpcIm9cIixcIsOSXCI6XCJvXCIsXCLDslwiOlwib1wiLFwixY5cIjpcIm9cIixcIsWPXCI6XCJvXCIsXCLDlFwiOlwib1wiLFwiw7RcIjpcIm9cIixcIuG7kFwiOlwib1wiLFwi4buRXCI6XCJvXCIsXCLhu5JcIjpcIm9cIixcIuG7k1wiOlwib1wiLFwi4buWXCI6XCJvXCIsXCLhu5dcIjpcIm9cIixcIuG7lFwiOlwib1wiLFwi4buVXCI6XCJvXCIsXCLHkVwiOlwib1wiLFwix5JcIjpcIm9cIixcIsOWXCI6XCJvXCIsXCLDtlwiOlwib1wiLFwiyKpcIjpcIm9cIixcIsirXCI6XCJvXCIsXCLFkFwiOlwib1wiLFwixZFcIjpcIm9cIixcIsOVXCI6XCJvXCIsXCLDtVwiOlwib1wiLFwi4bmMXCI6XCJvXCIsXCLhuY1cIjpcIm9cIixcIuG5jlwiOlwib1wiLFwi4bmPXCI6XCJvXCIsXCLIrFwiOlwib1wiLFwiyK1cIjpcIm9cIixcIsiuXCI6XCJvXCIsXCLIr1wiOlwib1wiLFwiyLBcIjpcIm9cIixcIsixXCI6XCJvXCIsXCLDmFwiOlwib1wiLFwiw7hcIjpcIm9cIixcIse+XCI6XCJvXCIsXCLHv1wiOlwib1wiLFwix6pcIjpcIm9cIixcIserXCI6XCJvXCIsXCLHrFwiOlwib1wiLFwix61cIjpcIm9cIixcIsWMXCI6XCJvXCIsXCLFjVwiOlwib1wiLFwi4bmSXCI6XCJvXCIsXCLhuZNcIjpcIm9cIixcIuG5kFwiOlwib1wiLFwi4bmRXCI6XCJvXCIsXCLhu45cIjpcIm9cIixcIuG7j1wiOlwib1wiLFwiyIxcIjpcIm9cIixcIsiNXCI6XCJvXCIsXCLIjlwiOlwib1wiLFwiyI9cIjpcIm9cIixcIsagXCI6XCJvXCIsXCLGoVwiOlwib1wiLFwi4buaXCI6XCJvXCIsXCLhu5tcIjpcIm9cIixcIuG7nFwiOlwib1wiLFwi4budXCI6XCJvXCIsXCLhu6BcIjpcIm9cIixcIuG7oVwiOlwib1wiLFwi4bueXCI6XCJvXCIsXCLhu59cIjpcIm9cIixcIuG7olwiOlwib1wiLFwi4bujXCI6XCJvXCIsXCLhu4xcIjpcIm9cIixcIuG7jVwiOlwib1wiLFwi4buYXCI6XCJvXCIsXCLhu5lcIjpcIm9cIixcIsafXCI6XCJvXCIsXCLJtVwiOlwib1wiLFwi4bmUXCI6XCJwXCIsXCLhuZVcIjpcInBcIixcIuG5llwiOlwicFwiLFwi4bmXXCI6XCJwXCIsXCLisaNcIjpcInBcIixcIsakXCI6XCJwXCIsXCLGpVwiOlwicFwiLFA6XCJwXCIsXCLMg1wiOlwicFwiLHA6XCJwXCIsXCLKoFwiOlwicVwiLFwiyYpcIjpcInFcIixcIsmLXCI6XCJxXCIsXCLFlFwiOlwiclwiLFwixZVcIjpcInJcIixcIsWYXCI6XCJyXCIsXCLFmVwiOlwiclwiLFwi4bmYXCI6XCJyXCIsXCLhuZlcIjpcInJcIixcIsWWXCI6XCJyXCIsXCLFl1wiOlwiclwiLFwiyJBcIjpcInJcIixcIsiRXCI6XCJyXCIsXCLIklwiOlwiclwiLFwiyJNcIjpcInJcIixcIuG5mlwiOlwiclwiLFwi4bmbXCI6XCJyXCIsXCLhuZxcIjpcInJcIixcIuG5nVwiOlwiclwiLFwi4bmeXCI6XCJyXCIsXCLhuZ9cIjpcInJcIixcIsmMXCI6XCJyXCIsXCLJjVwiOlwiclwiLFwi4bWyXCI6XCJyXCIsXCLJvFwiOlwiclwiLFwi4rGkXCI6XCJyXCIsXCLJvVwiOlwiclwiLFwiyb5cIjpcInJcIixcIuG1s1wiOlwiclwiLFwiw59cIjpcInNcIixcIsWaXCI6XCJzXCIsXCLFm1wiOlwic1wiLFwi4bmkXCI6XCJzXCIsXCLhuaVcIjpcInNcIixcIsWcXCI6XCJzXCIsXCLFnVwiOlwic1wiLFwixaBcIjpcInNcIixcIsWhXCI6XCJzXCIsXCLhuaZcIjpcInNcIixcIuG5p1wiOlwic1wiLFwi4bmgXCI6XCJzXCIsXCLhuaFcIjpcInNcIixcIuG6m1wiOlwic1wiLFwixZ5cIjpcInNcIixcIsWfXCI6XCJzXCIsXCLhuaJcIjpcInNcIixcIuG5o1wiOlwic1wiLFwi4bmoXCI6XCJzXCIsXCLhualcIjpcInNcIixcIsiYXCI6XCJzXCIsXCLImVwiOlwic1wiLFwiyoJcIjpcInNcIixTOlwic1wiLFwizKlcIjpcInNcIixzOlwic1wiLFwiw55cIjpcInRcIixcIsO+XCI6XCJ0XCIsXCLFpFwiOlwidFwiLFwixaVcIjpcInRcIixUOlwidFwiLFwi4bqXXCI6XCJ0XCIsXCLhuapcIjpcInRcIixcIuG5q1wiOlwidFwiLFwixaJcIjpcInRcIixcIsWjXCI6XCJ0XCIsXCLhuaxcIjpcInRcIixcIuG5rVwiOlwidFwiLFwiyJpcIjpcInRcIixcIsibXCI6XCJ0XCIsXCLhubBcIjpcInRcIixcIuG5sVwiOlwidFwiLFwi4bmuXCI6XCJ0XCIsXCLhua9cIjpcInRcIixcIsWmXCI6XCJ0XCIsXCLFp1wiOlwidFwiLFwiyL5cIjpcInRcIixcIuKxplwiOlwidFwiLFwi4bW1XCI6XCJ0XCIsXCLGq1wiOlwidFwiLFwixqxcIjpcInRcIixcIsatXCI6XCJ0XCIsXCLGrlwiOlwidFwiLFwiyohcIjpcInRcIixcIsi2XCI6XCJ0XCIsXCLDmlwiOlwidVwiLFwiw7pcIjpcInVcIixcIsOZXCI6XCJ1XCIsXCLDuVwiOlwidVwiLFwixaxcIjpcInVcIixcIsWtXCI6XCJ1XCIsXCLDm1wiOlwidVwiLFwiw7tcIjpcInVcIixcIseTXCI6XCJ1XCIsXCLHlFwiOlwidVwiLFwixa5cIjpcInVcIixcIsWvXCI6XCJ1XCIsXCLDnFwiOlwidVwiLFwiw7xcIjpcInVcIixcIseXXCI6XCJ1XCIsXCLHmFwiOlwidVwiLFwix5tcIjpcInVcIixcIsecXCI6XCJ1XCIsXCLHmVwiOlwidVwiLFwix5pcIjpcInVcIixcIseVXCI6XCJ1XCIsXCLHllwiOlwidVwiLFwixbBcIjpcInVcIixcIsWxXCI6XCJ1XCIsXCLFqFwiOlwidVwiLFwixalcIjpcInVcIixcIuG5uFwiOlwidVwiLFwi4bm5XCI6XCJ1XCIsXCLFslwiOlwidVwiLFwixbNcIjpcInVcIixcIsWqXCI6XCJ1XCIsXCLFq1wiOlwidVwiLFwi4bm6XCI6XCJ1XCIsXCLhubtcIjpcInVcIixcIuG7plwiOlwidVwiLFwi4bunXCI6XCJ1XCIsXCLIlFwiOlwidVwiLFwiyJVcIjpcInVcIixcIsiWXCI6XCJ1XCIsXCLIl1wiOlwidVwiLFwixq9cIjpcInVcIixcIsawXCI6XCJ1XCIsXCLhu6hcIjpcInVcIixcIuG7qVwiOlwidVwiLFwi4buqXCI6XCJ1XCIsXCLhu6tcIjpcInVcIixcIuG7rlwiOlwidVwiLFwi4buvXCI6XCJ1XCIsXCLhu6xcIjpcInVcIixcIuG7rVwiOlwidVwiLFwi4buwXCI6XCJ1XCIsXCLhu7FcIjpcInVcIixcIuG7pFwiOlwidVwiLFwi4bulXCI6XCJ1XCIsXCLhubJcIjpcInVcIixcIuG5s1wiOlwidVwiLFwi4bm2XCI6XCJ1XCIsXCLhubdcIjpcInVcIixcIuG5tFwiOlwidVwiLFwi4bm1XCI6XCJ1XCIsXCLJhFwiOlwidVwiLFwiyolcIjpcInVcIixcIuG5vFwiOlwidlwiLFwi4bm9XCI6XCJ2XCIsXCLhub5cIjpcInZcIixcIuG5v1wiOlwidlwiLFwixrJcIjpcInZcIixcIsqLXCI6XCJ2XCIsXCLhuoJcIjpcIndcIixcIuG6g1wiOlwid1wiLFwi4bqAXCI6XCJ3XCIsXCLhuoFcIjpcIndcIixcIsW0XCI6XCJ3XCIsXCLFtVwiOlwid1wiLFc6XCJ3XCIsXCLMilwiOlwid1wiLFwi4bqYXCI6XCJ3XCIsXCLhuoRcIjpcIndcIixcIuG6hVwiOlwid1wiLFwi4bqGXCI6XCJ3XCIsXCLhuodcIjpcIndcIixcIuG6iFwiOlwid1wiLFwi4bqJXCI6XCJ3XCIsXCLhuoxcIjpcInhcIixcIuG6jVwiOlwieFwiLFwi4bqKXCI6XCJ4XCIsXCLhuotcIjpcInhcIixcIsOdXCI6XCJ5XCIsXCLDvVwiOlwieVwiLFwi4buyXCI6XCJ5XCIsXCLhu7NcIjpcInlcIixcIsW2XCI6XCJ5XCIsXCLFt1wiOlwieVwiLFk6XCJ5XCIsXCLhuplcIjpcInlcIixcIsW4XCI6XCJ5XCIsXCLDv1wiOlwieVwiLFwi4bu4XCI6XCJ5XCIsXCLhu7lcIjpcInlcIixcIuG6jlwiOlwieVwiLFwi4bqPXCI6XCJ5XCIsXCLIslwiOlwieVwiLFwiyLNcIjpcInlcIixcIuG7tlwiOlwieVwiLFwi4bu3XCI6XCJ5XCIsXCLhu7RcIjpcInlcIixcIuG7tVwiOlwieVwiLFwiyo9cIjpcInlcIixcIsmOXCI6XCJ5XCIsXCLJj1wiOlwieVwiLFwixrNcIjpcInlcIixcIsa0XCI6XCJ5XCIsXCLFuVwiOlwielwiLFwixbpcIjpcInpcIixcIuG6kFwiOlwielwiLFwi4bqRXCI6XCJ6XCIsXCLFvVwiOlwielwiLFwixb5cIjpcInpcIixcIsW7XCI6XCJ6XCIsXCLFvFwiOlwielwiLFwi4bqSXCI6XCJ6XCIsXCLhupNcIjpcInpcIixcIuG6lFwiOlwielwiLFwi4bqVXCI6XCJ6XCIsXCLGtVwiOlwielwiLFwixrZcIjpcInpcIixcIsikXCI6XCJ6XCIsXCLIpVwiOlwielwiLFwiypBcIjpcInpcIixcIsqRXCI6XCJ6XCIsXCLisatcIjpcInpcIixcIuKxrFwiOlwielwiLFwix65cIjpcInpcIixcIsevXCI6XCJ6XCIsXCLGulwiOlwielwiLFwi77ySXCI6XCIyXCIsXCLvvJZcIjpcIjZcIixcIu+8olwiOlwiQlwiLFwi77ymXCI6XCJGXCIsXCLvvKpcIjpcIkpcIixcIu+8rlwiOlwiTlwiLFwi77yyXCI6XCJSXCIsXCLvvLZcIjpcIlZcIixcIu+8ulwiOlwiWlwiLFwi772CXCI6XCJiXCIsXCLvvYZcIjpcImZcIixcIu+9ilwiOlwialwiLFwi772OXCI6XCJuXCIsXCLvvZJcIjpcInJcIixcIu+9llwiOlwidlwiLFwi772aXCI6XCJ6XCIsXCLvvJFcIjpcIjFcIixcIu+8lVwiOlwiNVwiLFwi77yZXCI6XCI5XCIsXCLvvKFcIjpcIkFcIixcIu+8pVwiOlwiRVwiLFwi77ypXCI6XCJJXCIsXCLvvK1cIjpcIk1cIixcIu+8sVwiOlwiUVwiLFwi77y1XCI6XCJVXCIsXCLvvLlcIjpcIllcIixcIu+9gVwiOlwiYVwiLFwi772FXCI6XCJlXCIsXCLvvYlcIjpcImlcIixcIu+9jVwiOlwibVwiLFwi772RXCI6XCJxXCIsXCLvvZVcIjpcInVcIixcIu+9mVwiOlwieVwiLFwi77yQXCI6XCIwXCIsXCLvvJRcIjpcIjRcIixcIu+8mFwiOlwiOFwiLFwi77ykXCI6XCJEXCIsXCLvvKhcIjpcIkhcIixcIu+8rFwiOlwiTFwiLFwi77ywXCI6XCJQXCIsXCLvvLRcIjpcIlRcIixcIu+8uFwiOlwiWFwiLFwi772EXCI6XCJkXCIsXCLvvYhcIjpcImhcIixcIu+9jFwiOlwibFwiLFwi772QXCI6XCJwXCIsXCLvvZRcIjpcInRcIixcIu+9mFwiOlwieFwiLFwi77yTXCI6XCIzXCIsXCLvvJdcIjpcIjdcIixcIu+8o1wiOlwiQ1wiLFwi77ynXCI6XCJHXCIsXCLvvKtcIjpcIktcIixcIu+8r1wiOlwiT1wiLFwi77yzXCI6XCJTXCIsXCLvvLdcIjpcIldcIixcIu+9g1wiOlwiY1wiLFwi772HXCI6XCJnXCIsXCLvvYtcIjpcImtcIixcIu+9j1wiOlwib1wiLFwi772TXCI6XCJzXCIsXCLvvZdcIjpcIndcIixcIuG6s1wiOlwiYVwiLFwiw4JcIjpcImFcIixcIsOiXCI6XCJhXCIsXCLhuqRcIjpcImFcIixcIuG6pVwiOlwiYVwiLFwi4bqmXCI6XCJhXCIsXCLhuqdcIjpcImFcIn07dm9pZCAwPT09d2luZG93LmdldENvbXB1dGVkU3R5bGUmJih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSxvLGksbil7dmFyIGEscj1vW2ldLHM9cGFyc2VGbG9hdChyKSxsPXIuc3BsaXQoL1xcZC8pWzBdO3JldHVybiBuPW51bGwhPT1uP246LyV8ZW0vLnRlc3QobCkmJmUucGFyZW50RWxlbWVudD90KGUucGFyZW50RWxlbWVudCxlLnBhcmVudEVsZW1lbnQuY3VycmVudFN0eWxlLFwiZm9udFNpemVcIixudWxsKToxNixhPVwiZm9udFNpemVcIj09PWk/bjovd2lkdGgvaS50ZXN0KGkpP2UuY2xpZW50V2lkdGg6ZS5jbGllbnRIZWlnaHQsXCJlbVwiPT09bD9zKm46XCJpblwiPT09bD85NipzOlwicHRcIj09PWw/OTYqcy83MjpcIiVcIj09PWw/cy8xMDAqYTpzfWZ1bmN0aW9uIGUodCxlKXt2YXIgbz1cImJvcmRlclwiPT09ZT9cIldpZHRoXCI6XCJcIixpPWUrXCJUb3BcIitvLG49ZStcIlJpZ2h0XCIrbyxhPWUrXCJCb3R0b21cIitvLHI9ZStcIkxlZnRcIitvO3RbZV09KHRbaV09PT10W25dPT09dFthXT09PXRbcl0/W3RbaV1dOnRbaV09PT10W2FdJiZ0W3JdPT09dFtuXT9bdFtpXSx0W25dXTp0W3JdPT09dFtuXT9bdFtpXSx0W25dLHRbYV1dOlt0W2ldLHRbbl0sdFthXSx0W3JdXSkuam9pbihcIiBcIil9ZnVuY3Rpb24gbyhvKXt2YXIgaSxuPW8uY3VycmVudFN0eWxlLGE9dGhpcyxyPXQobyxuLFwiZm9udFNpemVcIixudWxsKTtmb3IoaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYoL3dpZHRofGhlaWdodHxtYXJnaW4ufHBhZGRpbmcufGJvcmRlci4rVy8udGVzdChpKSYmXCJhdXRvXCIhPT1hW2ldP2FbaV09dChvLG4saSxyKStcInB4XCI6XCJzdHlsZUZsb2F0XCI9PT1pP2EuZmxvYXQ9bltpXTphW2ldPW5baV0pO3JldHVybiBlKGEsXCJtYXJnaW5cIiksZShhLFwicGFkZGluZ1wiKSxlKGEsXCJib3JkZXJcIiksYS5mb250U2l6ZT1yK1wicHhcIixhfWZ1bmN0aW9uIGkodCl7cmV0dXJuIG5ldyBvKHQpfXJldHVybiBvLnByb3RvdHlwZT17Y29uc3RydWN0b3I6byxnZXRQcm9wZXJ0eVByaW9yaXR5OmZ1bmN0aW9uKCl7fSxnZXRQcm9wZXJ0eVZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW3RdfHxcIlwifSxpdGVtOmZ1bmN0aW9uKCl7fSxyZW1vdmVQcm9wZXJ0eTpmdW5jdGlvbigpe30sc2V0UHJvcGVydHk6ZnVuY3Rpb24oKXt9LGdldFByb3BlcnR5Q1NTVmFsdWU6ZnVuY3Rpb24oKXt9fSxpfSgpKSx0KGRvY3VtZW50KS5vbihcImtleWRvd24ueGRzb2Z0Y3RybFwiLGZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PUMmJihfPSEwKSx0LmtleUNvZGU9PT1TJiYoXz0hMCl9KS5vbihcImtleXVwLnhkc29mdGN0cmxcIixmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1DJiYoXz0hMSksdC5rZXlDb2RlPT09UyYmKF89ITEpfSksUD17bWluTGVuZ3RoOjAsdmFsdWVLZXk6XCJ2YWx1ZVwiLHRpdGxlS2V5OlwidGl0bGVcIixoaWdobGlnaHQ6ITAsc2hvd0hpbnQ6ITAsZHJvcGRvd25XaWR0aDpcIjEwMCVcIixkcm9wZG93blN0eWxlOnt9LGl0ZW1TdHlsZTp7fSxoaW50U3R5bGU6ITEsc3R5bGU6ITEsZGVidWc6ITAsb3Blbk9uRm9jdXM6ITEsY2xvc2VPbkJsdXI6ITAsYXV0b3NlbGVjdDohMSxhY2NlbnRzOiEwLHJlcGxhY2VBY2NlbnRzRm9yUmVtb3RlOiEwLGxpbWl0OjIwLHZpc2libGVMaW1pdDoyMCx2aXNpYmxlSGVpZ2h0OjAsZGVmYXVsdEhlaWdodEl0ZW06MzAsdGltZW91dFVwZGF0ZToxMCxnZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbC5jYWxsKHRoaXMsdCxlKX0scmVwbGFjZTpbZnVuY3Rpb24odCxvKXtyZXR1cm4gdGhpcy5yZXBsYWNlQWNjZW50c0ZvclJlbW90ZSYmKG89ZShvKSksdC5yZXBsYWNlKFwiJVFVRVJZJVwiLGVuY29kZVVSSUNvbXBvbmVudChvKSl9XSxlcXVhbDpmdW5jdGlvbih0LGUpe3JldHVybiBlLnRvTG93ZXJDYXNlKCk9PXQuc3Vic3RyKDAsZS5sZW5ndGgpLnRvTG93ZXJDYXNlKCl9LGZpbmRSaWdodDpbZnVuY3Rpb24odCxlLG8pe3ZhciBpLG49XCJcIjtpZih0KWZvcihpPTA7aTx0Lmxlbmd0aDtpKz0xKWlmKG49cy5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLG8sW3RbaV0sb10pLHMuY2FsbCh0aGlzLFwiZXF1YWxcIixvLFtuLGUsb10sITEpKXJldHVybiB0W2ldO3JldHVybiExfV0sdmFsaWQ6W2Z1bmN0aW9uKHQsbyl7cmV0dXJuIHRoaXMuYWNjZW50cyYmKHQ9ZSh0KSxvPWUobykpLC0xIT10LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihvLnRvTG93ZXJDYXNlKCkpfV0sZmlsdGVyOltmdW5jdGlvbih0LGUsbyl7dmFyIGksbj1bXSxyPVwiXCI7aWYodClmb3IoaT0wO2k8dC5sZW5ndGg7aSs9MSlyPWEodFtpXVt0aGlzLmdldChcInZhbHVlS2V5XCIsbyldKT90W2ldW3RoaXMuZ2V0KFwidmFsdWVLZXlcIixvKV06dFtpXS50b1N0cmluZygpLHMuY2FsbCh0aGlzLFwidmFsaWRcIixvLFtyLGVdKSYmbi5wdXNoKHRbaV0pO3JldHVybiBufV0scHJlcGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuIHR9LGdldFZhbHVlOltmdW5jdGlvbih0LGUpe3JldHVybiBhKHRbdGhpcy5nZXQoXCJ2YWx1ZUtleVwiLGUpXSk/dFt0aGlzLmdldChcInZhbHVlS2V5XCIsZSldOnQudG9TdHJpbmcoKX1dLGdldFRpdGxlOltmdW5jdGlvbih0LGUpe3JldHVybiBhKHRbdGhpcy5nZXQoXCJ0aXRsZUtleVwiLGUpXSk/dFt0aGlzLmdldChcInRpdGxlS2V5XCIsZSldOnQudG9TdHJpbmcoKX1dLHJlbmRlcjpbZnVuY3Rpb24odCxpLG4sYSl7dmFyIHIsbCxjLHU9cy5jYWxsKHRoaXMsXCJnZXRWYWx1ZVwiLGksW3QsaV0sUC5nZXRWYWx1ZVswXS5jYWxsKHRoaXMsdCxpKSksZD1zLmNhbGwodGhpcyxcImdldFRpdGxlXCIsaSxbdCxpXSxQLmdldFRpdGxlWzBdLmNhbGwodGhpcyx0LGkpKSxmPVwiXCIsaD1cIlwiLGc9XCJcIixwPVwiXCIsdj0wO2lmKHRoaXMuaGlnaGxpZ2h0KWlmKHRoaXMuYWNjZW50cyl7Zm9yKGg9ZShkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1s8Pl0rL2csXCJcIiksZj1lKGEpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWzw+XSsvZyxcIlwiKSxnPWgucmVwbGFjZShuZXcgUmVnRXhwKG8oZiksXCJnXCIpLFwiPFwiK2YrXCI+XCIpLGM9MDtjPGcubGVuZ3RoO2MrPTEpcj1kLmNoYXJBdCh2KSxsPWcuY2hhckF0KGMpLFwiPFwiPT09bD9wKz1cIjxiPlwiOlwiPlwiPT09bD9wKz1cIjwvYj5cIjoodis9MSxwKz1yKTtkPXB9ZWxzZSBkPWQucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiK28oYSkrXCIpXCIsXCJpXCIpLFwiPGI+JDE8L2I+XCIpO3JldHVyblwiPGRpdiBcIisodT09YT8nY2xhc3M9XCJhY3RpdmVcIic6XCJcIikrJyBkYXRhLXZhbHVlPVwiJytlbmNvZGVVUklDb21wb25lbnQodSkrJ1wiPicrZCtcIjwvZGl2PlwifV0sYXBwZW5kTWV0aG9kOlwiY29uY2F0XCIsc291cmNlOltdLGFmdGVyU2VsZWN0ZWQ6ZnVuY3Rpb24oKXt9fSxPPXtkZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHJpZ2dlcihcImRlc3Ryb3kueGRzb2Z0XCIpfSx1cGRhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50cmlnZ2VyKFwidXBkYXRlSGVscGVyUG9zaXRpb24ueGRzb2Z0XCIpfSxvcHRpb25zOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSYmdC5pc1BsYWluT2JqZWN0KGUpJiZ0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiLHQuZXh0ZW5kKCEwLHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpLGUpKSx0aGlzfSxzZXRTb3VyY2U6ZnVuY3Rpb24oZSxvKXtpZih0aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSYmKHQuaXNQbGFpbk9iamVjdChlKXx8dC5pc0Z1bmN0aW9uKGUpfHx0LmlzQXJyYXkoZSkpKXt2YXIgaT10aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKSxuPXRoaXMuZGF0YShcInhkc29mdF9hdXRvY29tcGxldGVcIiksYT1pLnNvdXJjZTt2b2lkIDA9PT1vfHxpc05hTihvKT90LmlzRnVuY3Rpb24oZSk/dGhpcy5kYXRhKFwiYXV0b2NvbXBsZXRlX29wdGlvbnNcIikuc291cmNlPWU6dC5leHRlbmQoITAsYSxlKTp0LmlzUGxhaW5PYmplY3QoZSl8fHQuaXNBcnJheShlKT9hW29dPXQuZXh0ZW5kKCEwLHQuaXNBcnJheShlKT9bXTp7fSxlKTphW29dPWUsZi5jYWxsKGksdGhpcy52YWwoKSxuLGZ1bmN0aW9uKHQpe2QuY2FsbChpLG4sdCl9KX1yZXR1cm4gdGhpc30sZ2V0U291cmNlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuZGF0YShcImF1dG9jb21wbGV0ZV9vcHRpb25zXCIpKXt2YXIgZT10aGlzLmRhdGEoXCJhdXRvY29tcGxldGVfb3B0aW9uc1wiKS5zb3VyY2U7cmV0dXJuIHZvaWQgMCE9PXQmJiFpc05hTih0KSYmZVt0XT9lW3RdOmV9cmV0dXJuIG51bGx9fSx0LmZuLmF1dG9jb21wbGV0ZT1mdW5jdGlvbihlLG8saSl7cmV0dXJuXCJzdHJpbmdcIj09PXQudHlwZShlKSYmT1tlXT9PW2VdLmNhbGwodGhpcyxvLGkpOnRoaXMuZWFjaChmdW5jdGlvbigpe20odGhpcyx0LmV4dGVuZCghMCx7fSxQLGUpKX0pfX0oalF1ZXJ5KTsiLCJmdW5jdGlvbiBzZWFyY2hTdWNjZXNzKGUsYSxjKXskKFwiI3NlYXJjaC1yZXN1bHRzXCIpLmh0bWwoZSl9IWZ1bmN0aW9uKGUpe2UoXCIjc2VhcmNoXCIpLmtleXVwKGZ1bmN0aW9uKCl7ZS5hamF4KHt0eXBlOlwiUE9TVFwiLHVybDpcIi9zZWFyY2gvXCIsZGF0YTp7c2VhcmNoX3RleHQ6ZShcIiNzZWFyY2hcIikudmFsKCksY3NyZm1pZGRsZXdhcmV0b2tlbjplKFwiaW5wdXRbbmFtZT1jc3JmbWlkZGxld2FyZXRva2VuXVwiKS52YWwoKX0sc3VjY2VzczpzZWFyY2hTdWNjZXNzLGRhdGFUeXBlOlwiaHRtbFwifSl9KX0oJCk7IiwiZnVuY3Rpb24gc2hvd09ySGlkZShlLHQpe2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KSxlLmNoZWNrZWQ/dC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjp0LnN0eWxlLmRpc3BsYXk9XCJub25lXCJ9ZnVuY3Rpb24gX2Rpc2NvdW50KGUsdCl7aWYoXCJ7fVwiPT1KU09OLnN0cmluZ2lmeSh0KSlyZXR1cm4gMTtmb3IodmFyIG49T2JqZWN0LmtleXModCksYT0wLHI9bi5sZW5ndGg7YTxyO2ErKyl7dmFyIHU9blthXS5zcGxpdChcIi1cIik7aWYocGFyc2VJbnQodVswXSk8PWUmJmU8cGFyc2VGbG9hdCh1WzFdKSlyZXR1cm4gcGFyc2VGbG9hdCh0W25bYV1dKX19ZnVuY3Rpb24gY2FsY3VsYXRlKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2YXJpYW50X2xlbmd0aFwiKS52YWx1ZSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIikmJmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVhbnRpdHlcIikudmFsdWUsbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3VsdFwiKSxhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJpY2VfcGVyX2l0b21cIikscj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVyd1wiKSx1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidmFyaWFudHNcIikmJkpTT04ucGFyc2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2YXJpYW50c1wiKS52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLG89SlNPTi5wYXJzZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRpc2NvdW50X3BvbGljeVwiKS52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLGw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcm9kdWN0X3NsdWdcIiksYz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3VsdF9pdG9nXCIpLGQ9MDtpZigwPT1lJiYoZD1NYXRoLnJvdW5kKHVbMF0ucHJpY2UqX2Rpc2NvdW50KHQsbykpLG4uaW5uZXJIVE1MPWQsYS52YWx1ZT1kLGQqPXQsYy5pbm5lckhUTUw9ZCxyLmlubmVySFRNTD1NYXRoLnJvdW5kKC4wNSpkKSxsLnZhbHVlPXVbMF0uc2x1ZyksZT4xKWZvcih2YXIgaT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXzBcIiksbT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlkXzFcIikscz1KU09OLnBhcnNlKGkudmFsdWUucmVwbGFjZSgvJy9nLCdcIicpKSxwPUpTT04ucGFyc2UobS52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLGc9MCx2PXUubGVuZ3RoO2c8djtnKyspdVtnXS5hdHRyaWJ1dGVzW2kubmFtZV09PXMubmFtZSYmdVtnXS5hdHRyaWJ1dGVzW20ubmFtZV09PXAubmFtZSYmKGQ9TWF0aC5yb3VuZCh1W2ddLnByaWNlKl9kaXNjb3VudCh0LG8pKSxuLmlubmVySFRNTD1kLGEudmFsdWU9ZCxkKj10LGMuaW5uZXJIVE1MPWQsci5pbm5lckhUTUw9TWF0aC5yb3VuZCguMDUqZCksbC52YWx1ZT11W2ddLnNsdWcpO2Vsc2UgZm9yKHZhciBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWRfMFwiKSxzPUpTT04ucGFyc2UoaS52YWx1ZS5yZXBsYWNlKC8nL2csJ1wiJykpLGc9MCx2PXUubGVuZ3RoO2c8djtnKyspdVtnXS5hdHRyaWJ1dGVzW2kubmFtZV09PXMubmFtZSYmKGQ9TWF0aC5yb3VuZCh1W2ddLnByaWNlKl9kaXNjb3VudCh0LG8pKSxuLmlubmVySFRNTD1kLGEudmFsdWU9ZCxkKj10LGMuaW5uZXJIVE1MPWQsci5pbm5lckhUTUw9TWF0aC5yb3VuZCguMDUqZCksbC52YWx1ZT11W2ddLnNsdWcpfSQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpeyQoXCIuYmFza2V0LWl0ZW1zXCIpLnJlbW92ZUNsYXNzKFwiaGlkZGVuXCIpfXZhciB0PSQoXCIjZm9ybS1idXlpbmctcHJvZHVjdHNcIik7dC5vbihcInN1Ym1pdFwiLGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSwkKFwiI251bWJlclwiKS52YWwoKTt2YXIgbj0kKFwiI251bWJlclwiKS52YWwoKSxhPSQoXCIjc3VibWl0LWJ0blwiKSxyPWEuZGF0YShcInByb2R1Y3RzLWlkXCIpLHU9KGEuZGF0YShcInByb2R1Y3RzLW5hbWVcIiksYS5kYXRhKFwicHJvZHVjdHMtcHJpY2VcIikse30pO3UucHJvZHVjdF9pZD1yLHUubm1iPW47dmFyIG89JCgnI2Zvcm0tYnV5aW5nLXByb2R1Y3RzIFtuYW1lPVwiY3NyZm1pZGRsZXdhcmV0b2tlblwiXScpLnZhbCgpO3UuY3NyZm1pZGRsZXdhcmV0b2tlbj1vO3ZhciBsPXQuYXR0cihcImFjdGlvblwiKTskLmFqYXgoe3VybDpsLHR5cGU6XCJQT1NUXCIsZGF0YTp1LGNhY2hlOiEwLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7ZS5wcm9kdWN0c190b3RhbF9ubWImJigkKFwiI2Jhc2tldF90b3RhbF9ubWJcIikudGV4dChcIihcIitlLnByb2R1Y3RzX3RvdGFsX25tYitcIilcIiksJChcIi5iYXNrZXQtaXRlbXMgdWxcIikuaHRtbChcIlwiKSwkLmVhY2goZS5wcm9kdWN0cyxmdW5jdGlvbihlLHQpeyQoXCIuYmFza2V0LWl0ZW1zIHVsXCIpLmFwcGVuZChcIjxsaT5cIit0Lm5hbWUrXCIsIFwiK3Qubm1iK1wicGMuIGZvciBcIit0LnByaWNlX3Blcl9pdGVtK1wicnViLiAgPC9saT5cIil9KSl9LGVycm9yOmZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCJlcnJvclwiKX19KX0pLCQoXCIuYmFza2V0LWNvbnRhaW5lclwiKS5tb3VzZW92ZXIoZnVuY3Rpb24oKXtlKCl9KSwkKFwiLmJhc2tldC1jb250YWluZXJcIikubW91c2VvdXQoZnVuY3Rpb24oKXtlKCl9KSwkKGRvY3VtZW50KS5vbihcImNsaWNrXCIsXCIuZGVsZXRlLWl0ZW1cIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksJCh0aGlzKS5jbG9zZXN0KFwibGlcIikucmVtb3ZlKCl9KX0pOyIsIiFmdW5jdGlvbih0KXt0KGZ1bmN0aW9uKCl7dmFyIGE9dChcIiNyYW5nZVwiKSxlPWEuYXR0cihcImRhdGEtbWluXCIpLGk9YS5hdHRyKFwiZGF0YS1tYXhcIikscj10KFwiLmZpbHRlcl9fbWluXCIpLG49dChcIi5maWx0ZXJfX21heFwiKTtyLnZhbChlKSxuLnZhbChpKSxyPDAmJihyPTApLG48MCYmKG49MCksYS5zbGlkZXIoe3JhbmdlOiEwLG1heDppLHZhbHVlczpbZSxpXSxjaGFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaT1hLnNsaWRlcihcInZhbHVlc1wiLDApLGw9YS5zbGlkZXIoXCJ2YWx1ZXNcIiwxKTtjb25zb2xlLmxvZyhpLGwpLHIudmFsKGkpLG4udmFsKGwpfX0pLHQoXCIuZmlsdGVyX19jYXRlZ29yeSAuZmlsdGVyX19jYXRlZ29yeS1pdGVtIHVsXCIpLnRvZ2dsZSgpLHQoXCIuZmlsdGVyX19jYXRlZ29yeSAuZmlsdGVyX19jYXRlZ29yeS1pdGVtIC5jYXRlZ29yeV9fdGl0bGVcIikuY2xpY2soZnVuY3Rpb24oKXt0KHRoaXMpLnBhcmVudCgpLmZpbmQoXCJ1bFwiKS5zbGlkZVRvZ2dsZSgpfSksdChcIiNtZW51X2FjdGl2ZVwiKS5jbGljayhmdW5jdGlvbigpe3QoXCIubW9iYWlsLW1lbnVcIikuc2xpZGVUb2dnbGUoKX0pLHQoXCIjY29udGVudF9fY2F0ZWdvcnktYnRuXCIpLmNsaWNrKGZ1bmN0aW9uKCl7dChcIi5jb250ZW50X19jYXRlZ29yeVwiKS5zbGlkZVRvZ2dsZSgpfSksdChcIi5iYW5uZXJfX2Nsb3NlXCIpLmNsaWNrKGZ1bmN0aW9uKCl7dChcIi5iYW5uZXJfX2Nsb3NlXCIpLnBhcmVudCgpLmhpZGUoKX0pLHQoXCIuY2VydGlmaWNhdGVfX2l0ZW1cIikubWFnbmlmaWNQb3B1cCh7dHlwZTpcImltYWdlXCJ9KTt2YXIgbD10KFwiLnN0YXJzXCIpO2wuYmFycmF0aW5nKHt0aGVtZTpcImZvbnRhd2Vzb21lLXN0YXJzXCJ9KTt2YXIgYz1sLmF0dHIoXCJkYXRhLXJhdGluZ1wiKTtsLmJhcnJhdGluZyhcInNldFwiLGMpO3ZhciBvPXQoXCIuc2xpZGVyX19tYWluLWltYWdlIGltZ1wiKSxfPXQoXCIuc2xpZGVyX19saXN0IGxpXCIpO28uYXR0cihcInNyY1wiLF8uZmluZChcImltZ1wiKS5hdHRyKFwic3JjXCIpKSxfLmNsaWNrKGZ1bmN0aW9uKCl7dmFyIGE9dCh0aGlzKS5maW5kKFwiaW1nXCIpLmF0dHIoXCJzcmNcIik7by5hdHRyKFwic3JjXCIsYSl9KX0pfSgkKTsiLCJmdW5jdGlvbiBnZXRQYXJhbWV0ZXJCeU5hbWUoZSxuKXtufHwobj13aW5kb3cubG9jYXRpb24uaHJlZiksZT1lLnJlcGxhY2UoL1tcXFtcXF1dL2csXCJcXFxcJCZcIik7dmFyIHQ9bmV3IFJlZ0V4cChcIls/Jl1cIitlK1wiKD0oW14mI10qKXwmfCN8JClcIiksbz10LmV4ZWMobik7cmV0dXJuIG8/b1syXT9kZWNvZGVVUklDb21wb25lbnQob1syXS5yZXBsYWNlKC9cXCsvZyxcIiBcIikpOlwiXCI6bnVsbH1mdW5jdGlvbiBvbkZhY2V0Q2hhbmdlQXBwbGllZCgpe3ZhciBlPXdpbmRvdy5sb2NhdGlvbi5ocmVmLnNwbGl0KFwiP1wiKVswXSxuPWdldFBhcmFtZXRlckJ5TmFtZShcInFcIiksdD1lK1wiP3E9XCIrbjtyZXR1cm4gJChcImlucHV0OmNoZWNrYm94LmZhY2V0XCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNoZWNrZWQ/JCh0aGlzKS52YWwoKTpudWxsLG49dGhpcy5jaGVja2VkPyQodGhpcykuYXR0cihcIm5hbWVcIik6bnVsbDtudWxsIT09ZSYmKHQrPVwiJlwiK2VuY29kZVVSSUNvbXBvbmVudChuKStcIj1cIitlbmNvZGVVUklDb21wb25lbnQoZSkpfSksbG9jYXRpb24uaHJlZj10LCEwfWZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zKCl7Zm9yKHZhciBlLG49e30sdD13aW5kb3cubG9jYXRpb24uaHJlZi5zbGljZSh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKFwiP1wiKSsxKS5zcGxpdChcIiZcIiksbz0wO288dC5sZW5ndGg7bysrKWU9dFtvXS5zcGxpdChcIj1cIiksbltlWzFdXT1lWzBdO3JldHVybiBufSQoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjskKFwiI3FcIikuYXV0b2NvbXBsZXRlKHtzZXJ2aWNlVXJsOlwiaHR0cDovLzEyNy4wLjAuMTo4MDAxL3NlYXJjaC9hdXRvY29tcGxldGUvXCIsbWluQ2hhcnM6MixkYXRhVHlwZTpcImpzb25cIix0eXBlOlwiR0VUXCIsb25TZWxlY3Q6ZnVuY3Rpb24oZSl7Y29uc29sZS5sb2coZS52YWx1ZStcIiwgZGF0YSA6XCIrZS5kYXRhKX19KX0pLCQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7dmFyIGU9Z2V0UXVlcnlQYXJhbXMoKTtjb25zb2xlLmxvZygpLCQuZWFjaChlLGZ1bmN0aW9uKGUsbil7aWQ9ZGVjb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1xccy9nLFwiXCIpLCQoXCIjXCIraWQpLmF0dHIoXCJjaGVja2VkXCIsXCJjaGVja2VkXCIpfSl9KTsiXX0=
|
|
|
|