geekin-devtoys 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const r=require("vue"),Bb=require("../_plugin-vue_export-helper-BHFhmbuH.js");var TZ=typeof document<"u"?document.currentScript:null;function Gb(l,d){return function(){return l.apply(d,arguments)}}const{toString:Eb}=Object.prototype,{getPrototypeOf:fZ}=Object,{iterator:oZ,toStringTag:Xb}=Symbol,tZ=(l=>d=>{const b=Eb.call(d);return l[b]||(l[b]=b.slice(8,-1).toLowerCase())})(Object.create(null)),Xl=l=>(l=l.toLowerCase(),d=>tZ(d)===l),CZ=l=>d=>typeof d===l,{isArray:al}=Array,Yl=CZ("undefined");function kl(l){return l!==null&&!Yl(l)&&l.constructor!==null&&!Yl(l.constructor)&&_(l.constructor.isBuffer)&&l.constructor.isBuffer(l)}const ib=Xl("ArrayBuffer");function jb(l){let d;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?d=ArrayBuffer.isView(l):d=l&&l.buffer&&ib(l.buffer),d}const Ob=CZ("string"),_=CZ("function"),mb=CZ("number"),Fl=l=>l!==null&&typeof l=="object",Pb=l=>l===!0||l===!1,el=l=>{if(tZ(l)!=="object")return!1;const d=fZ(l);return(d===null||d===Object.prototype||Object.getPrototypeOf(d)===null)&&!(Xb in l)&&!(oZ in l)},Db=l=>{if(!Fl(l)||kl(l))return!1;try{return Object.keys(l).length===0&&Object.getPrototypeOf(l)===Object.prototype}catch{return!1}},rb=Xl("Date"),Ab=Xl("File"),qb=Xl("Blob"),_b=Xl("FileList"),$b=l=>Fl(l)&&_(l.pipe),ld=l=>{let d;return l&&(typeof FormData=="function"&&l instanceof FormData||_(l.append)&&((d=tZ(l))==="formdata"||d==="object"&&_(l.toString)&&l.toString()==="[object FormData]"))},Zd=Xl("URLSearchParams"),[bd,dd,Gd,Xd]=["ReadableStream","Request","Response","Headers"].map(Xl),id=l=>l.trim?l.trim():l.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function Tl(l,d,{allOwnKeys:b=!1}={}){if(l===null||typeof l>"u")return;let Z,G;if(typeof l!="object"&&(l=[l]),al(l))for(Z=0,G=l.length;Z<G;Z++)d.call(null,l[Z],Z,l);else{if(kl(l))return;const m=b?Object.getOwnPropertyNames(l):Object.keys(l),c=m.length;let V;for(Z=0;Z<c;Z++)V=m[Z],d.call(null,l[V],V,l)}}function Wb(l,d){if(kl(l))return null;d=d.toLowerCase();const b=Object.keys(l);let Z=b.length,G;for(;Z-- >0;)if(G=b[Z],d===G.toLowerCase())return G;return null}const cl=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Vb=l=>!Yl(l)&&l!==cl;function MZ(){const{caseless:l,skipUndefined:d}=Vb(this)&&this||{},b={},Z=(G,m)=>{const c=l&&Wb(b,m)||m;el(b[c])&&el(G)?b[c]=MZ(b[c],G):el(G)?b[c]=MZ({},G):al(G)?b[c]=G.slice():(!d||!Yl(G))&&(b[c]=G)};for(let G=0,m=arguments.length;G<m;G++)arguments[G]&&Tl(arguments[G],Z);return b}const md=(l,d,b,{allOwnKeys:Z}={})=>(Tl(d,(G,m)=>{b&&_(G)?l[m]=Gb(G,b):l[m]=G},{allOwnKeys:Z}),l),Wd=l=>(l.charCodeAt(0)===65279&&(l=l.slice(1)),l),Vd=(l,d,b,Z)=>{l.prototype=Object.create(d.prototype,Z),l.prototype.constructor=l,Object.defineProperty(l,"super",{value:d.prototype}),b&&Object.assign(l.prototype,b)},cd=(l,d,b,Z)=>{let G,m,c;const V={};if(d=d||{},l==null)return d;do{for(G=Object.getOwnPropertyNames(l),m=G.length;m-- >0;)c=G[m],(!Z||Z(c,l,d))&&!V[c]&&(d[c]=l[c],V[c]=!0);l=b!==!1&&fZ(l)}while(l&&(!b||b(l,d))&&l!==Object.prototype);return d},ud=(l,d,b)=>{l=String(l),(b===void 0||b>l.length)&&(b=l.length),b-=d.length;const Z=l.indexOf(d,b);return Z!==-1&&Z===b},pd=l=>{if(!l)return null;if(al(l))return l;let d=l.length;if(!mb(d))return null;const b=new Array(d);for(;d-- >0;)b[d]=l[d];return b},Id=(l=>d=>l&&d instanceof l)(typeof Uint8Array<"u"&&fZ(Uint8Array)),Ld=(l,d)=>{const Z=(l&&l[oZ]).call(l);let G;for(;(G=Z.next())&&!G.done;){const m=G.value;d.call(l,m[0],m[1])}},hd=(l,d)=>{let b;const Z=[];for(;(b=l.exec(d))!==null;)Z.push(b);return Z},sd=Xl("HTMLFormElement"),Rd=l=>l.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(b,Z,G){return Z.toUpperCase()+G}),X0=(({hasOwnProperty:l})=>(d,b)=>l.call(d,b))(Object.prototype),Yd=Xl("RegExp"),cb=(l,d)=>{const b=Object.getOwnPropertyDescriptors(l),Z={};Tl(b,(G,m)=>{let c;(c=d(G,m,l))!==!1&&(Z[m]=c||G)}),Object.defineProperties(l,Z)},ad=l=>{cb(l,(d,b)=>{if(_(l)&&["arguments","caller","callee"].indexOf(b)!==-1)return!1;const Z=l[b];if(_(Z)){if(d.enumerable=!1,"writable"in d){d.writable=!1;return}d.set||(d.set=()=>{throw Error("Can not rewrite read-only method '"+b+"'")})}})},xd=(l,d)=>{const b={},Z=G=>{G.forEach(m=>{b[m]=!0})};return al(l)?Z(l):Z(String(l).split(d)),b},yd=()=>{},Sd=(l,d)=>l!=null&&Number.isFinite(l=+l)?l:d;function Kd(l){return!!(l&&_(l.append)&&l[Xb]==="FormData"&&l[oZ])}const od=l=>{const d=new Array(10),b=(Z,G)=>{if(Fl(Z)){if(d.indexOf(Z)>=0)return;if(kl(Z))return Z;if(!("toJSON"in Z)){d[G]=Z;const m=al(Z)?[]:{};return Tl(Z,(c,V)=>{const Y=b(c,G+1);!Yl(Y)&&(m[V]=Y)}),d[G]=void 0,m}}return Z};return b(l,0)},td=Xl("AsyncFunction"),Cd=l=>l&&(Fl(l)||_(l))&&_(l.then)&&_(l.catch),ub=((l,d)=>l?setImmediate:d?((b,Z)=>(cl.addEventListener("message",({source:G,data:m})=>{G===cl&&m===b&&Z.length&&Z.shift()()},!1),G=>{Z.push(G),cl.postMessage(b,"*")}))(`axios@${Math.random()}`,[]):b=>setTimeout(b))(typeof setImmediate=="function",_(cl.postMessage)),Jd=typeof queueMicrotask<"u"?queueMicrotask.bind(cl):typeof process<"u"&&process.nextTick||ub,Nd=l=>l!=null&&_(l[oZ]),t={isArray:al,isArrayBuffer:ib,isBuffer:kl,isFormData:ld,isArrayBufferView:jb,isString:Ob,isNumber:mb,isBoolean:Pb,isObject:Fl,isPlainObject:el,isEmptyObject:Db,isReadableStream:bd,isRequest:dd,isResponse:Gd,isHeaders:Xd,isUndefined:Yl,isDate:rb,isFile:Ab,isBlob:qb,isRegExp:Yd,isFunction:_,isStream:$b,isURLSearchParams:Zd,isTypedArray:Id,isFileList:_b,forEach:Tl,merge:MZ,extend:md,trim:id,stripBOM:Wd,inherits:Vd,toFlatObject:cd,kindOf:tZ,kindOfTest:Xl,endsWith:ud,toArray:pd,forEachEntry:Ld,matchAll:hd,isHTMLForm:sd,hasOwnProperty:X0,hasOwnProp:X0,reduceDescriptors:cb,freezeMethods:ad,toObjectSet:xd,toCamelCase:Rd,noop:yd,toFiniteNumber:Sd,findKey:Wb,global:cl,isContextDefined:Vb,isSpecCompliantForm:Kd,toJSONObject:od,isAsyncFn:td,isThenable:Cd,setImmediate:ub,asap:Jd,isIterable:Nd};function e(l,d,b,Z,G){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=l,this.name="AxiosError",d&&(this.code=d),b&&(this.config=b),Z&&(this.request=Z),G&&(this.response=G,this.status=G.status?G.status:null)}t.inherits(e,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:t.toJSONObject(this.config),code:this.code,status:this.status}}});const pb=e.prototype,Ib={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(l=>{Ib[l]={value:l}});Object.defineProperties(e,Ib);Object.defineProperty(pb,"isAxiosError",{value:!0});e.from=(l,d,b,Z,G,m)=>{const c=Object.create(pb);t.toFlatObject(l,c,function(i){return i!==Error.prototype},X=>X!=="isAxiosError");const V=l&&l.message?l.message:"Error",Y=d==null&&l?l.code:d;return e.call(c,V,Y,b,Z,G),l&&c.cause==null&&Object.defineProperty(c,"cause",{value:l,configurable:!0}),c.name=l&&l.name||"Error",m&&Object.assign(c,m),c};const nd=null;function eZ(l){return t.isPlainObject(l)||t.isArray(l)}function Lb(l){return t.endsWith(l,"[]")?l.slice(0,-2):l}function i0(l,d,b){return l?l.concat(d).map(function(G,m){return G=Lb(G),!b&&m?"["+G+"]":G}).join(b?".":""):d}function kd(l){return t.isArray(l)&&!l.some(eZ)}const Fd=t.toFlatObject(t,{},null,function(d){return/^is[A-Z]/.test(d)});function JZ(l,d,b){if(!t.isObject(l))throw new TypeError("target must be an object");d=d||new FormData,b=t.toFlatObject(b,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,p){return!t.isUndefined(p[h])});const Z=b.metaTokens,G=b.visitor||i,m=b.dots,c=b.indexes,Y=(b.Blob||typeof Blob<"u"&&Blob)&&t.isSpecCompliantForm(d);if(!t.isFunction(G))throw new TypeError("visitor must be a function");function X(W){if(W===null)return"";if(t.isDate(W))return W.toISOString();if(t.isBoolean(W))return W.toString();if(!Y&&t.isBlob(W))throw new e("Blob is not supported. Use a Buffer instead.");return t.isArrayBuffer(W)||t.isTypedArray(W)?Y&&typeof Blob=="function"?new Blob([W]):Buffer.from(W):W}function i(W,h,p){let x=W;if(W&&!p&&typeof W=="object"){if(t.endsWith(h,"{}"))h=Z?h:h.slice(0,-2),W=JSON.stringify(W);else if(t.isArray(W)&&kd(W)||(t.isFileList(W)||t.endsWith(h,"[]"))&&(x=t.toArray(W)))return h=Lb(h),x.forEach(function(I,R){!(t.isUndefined(I)||I===null)&&d.append(c===!0?i0([h],R,m):c===null?h:h+"[]",X(I))}),!1}return eZ(W)?!0:(d.append(i0(p,h,m),X(W)),!1)}const a=[],u=Object.assign(Fd,{defaultVisitor:i,convertValue:X,isVisitable:eZ});function s(W,h){if(!t.isUndefined(W)){if(a.indexOf(W)!==-1)throw Error("Circular reference detected in "+h.join("."));a.push(W),t.forEach(W,function(x,L){(!(t.isUndefined(x)||x===null)&&G.call(d,x,t.isString(L)?L.trim():L,h,u))===!0&&s(x,h?h.concat(L):[L])}),a.pop()}}if(!t.isObject(l))throw new TypeError("data must be an object");return s(l),d}function m0(l){const d={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(l).replace(/[!'()~]|%20|%00/g,function(Z){return d[Z]})}function wZ(l,d){this._pairs=[],l&&JZ(l,this,d)}const hb=wZ.prototype;hb.append=function(d,b){this._pairs.push([d,b])};hb.toString=function(d){const b=d?function(Z){return d.call(this,Z,m0)}:m0;return this._pairs.map(function(G){return b(G[0])+"="+b(G[1])},"").join("&")};function Td(l){return encodeURIComponent(l).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function sb(l,d,b){if(!d)return l;const Z=b&&b.encode||Td;t.isFunction(b)&&(b={serialize:b});const G=b&&b.serialize;let m;if(G?m=G(d,b):m=t.isURLSearchParams(d)?d.toString():new wZ(d,b).toString(Z),m){const c=l.indexOf("#");c!==-1&&(l=l.slice(0,c)),l+=(l.indexOf("?")===-1?"?":"&")+m}return l}class W0{constructor(){this.handlers=[]}use(d,b,Z){return this.handlers.push({fulfilled:d,rejected:b,synchronous:Z?Z.synchronous:!1,runWhen:Z?Z.runWhen:null}),this.handlers.length-1}eject(d){this.handlers[d]&&(this.handlers[d]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(d){t.forEach(this.handlers,function(Z){Z!==null&&d(Z)})}}const Rb={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Ud=typeof URLSearchParams<"u"?URLSearchParams:wZ,Hd=typeof FormData<"u"?FormData:null,zd=typeof Blob<"u"?Blob:null,gd={isBrowser:!0,classes:{URLSearchParams:Ud,FormData:Hd,Blob:zd},protocols:["http","https","file","blob","url","data"]},BZ=typeof window<"u"&&typeof document<"u",vZ=typeof navigator=="object"&&navigator||void 0,Md=BZ&&(!vZ||["ReactNative","NativeScript","NS"].indexOf(vZ.product)<0),ed=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",vd=BZ&&window.location.href||"http://localhost",Qd=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:BZ,hasStandardBrowserEnv:Md,hasStandardBrowserWebWorkerEnv:ed,navigator:vZ,origin:vd},Symbol.toStringTag,{value:"Module"})),A={...Qd,...gd};function fd(l,d){return JZ(l,new A.classes.URLSearchParams,{visitor:function(b,Z,G,m){return A.isNode&&t.isBuffer(b)?(this.append(Z,b.toString("base64")),!1):m.defaultVisitor.apply(this,arguments)},...d})}function wd(l){return t.matchAll(/\w+|\[(\w*)]/g,l).map(d=>d[0]==="[]"?"":d[1]||d[0])}function Bd(l){const d={},b=Object.keys(l);let Z;const G=b.length;let m;for(Z=0;Z<G;Z++)m=b[Z],d[m]=l[m];return d}function Yb(l){function d(b,Z,G,m){let c=b[m++];if(c==="__proto__")return!0;const V=Number.isFinite(+c),Y=m>=b.length;return c=!c&&t.isArray(G)?G.length:c,Y?(t.hasOwnProp(G,c)?G[c]=[G[c],Z]:G[c]=Z,!V):((!G[c]||!t.isObject(G[c]))&&(G[c]=[]),d(b,Z,G[c],m)&&t.isArray(G[c])&&(G[c]=Bd(G[c])),!V)}if(t.isFormData(l)&&t.isFunction(l.entries)){const b={};return t.forEachEntry(l,(Z,G)=>{d(wd(Z),G,b,0)}),b}return null}function Ed(l,d,b){if(t.isString(l))try{return(d||JSON.parse)(l),t.trim(l)}catch(Z){if(Z.name!=="SyntaxError")throw Z}return(b||JSON.stringify)(l)}const Ul={transitional:Rb,adapter:["xhr","http","fetch"],transformRequest:[function(d,b){const Z=b.getContentType()||"",G=Z.indexOf("application/json")>-1,m=t.isObject(d);if(m&&t.isHTMLForm(d)&&(d=new FormData(d)),t.isFormData(d))return G?JSON.stringify(Yb(d)):d;if(t.isArrayBuffer(d)||t.isBuffer(d)||t.isStream(d)||t.isFile(d)||t.isBlob(d)||t.isReadableStream(d))return d;if(t.isArrayBufferView(d))return d.buffer;if(t.isURLSearchParams(d))return b.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),d.toString();let V;if(m){if(Z.indexOf("application/x-www-form-urlencoded")>-1)return fd(d,this.formSerializer).toString();if((V=t.isFileList(d))||Z.indexOf("multipart/form-data")>-1){const Y=this.env&&this.env.FormData;return JZ(V?{"files[]":d}:d,Y&&new Y,this.formSerializer)}}return m||G?(b.setContentType("application/json",!1),Ed(d)):d}],transformResponse:[function(d){const b=this.transitional||Ul.transitional,Z=b&&b.forcedJSONParsing,G=this.responseType==="json";if(t.isResponse(d)||t.isReadableStream(d))return d;if(d&&t.isString(d)&&(Z&&!this.responseType||G)){const c=!(b&&b.silentJSONParsing)&&G;try{return JSON.parse(d,this.parseReviver)}catch(V){if(c)throw V.name==="SyntaxError"?e.from(V,e.ERR_BAD_RESPONSE,this,null,this.response):V}}return d}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:A.classes.FormData,Blob:A.classes.Blob},validateStatus:function(d){return d>=200&&d<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};t.forEach(["delete","get","head","post","put","patch"],l=>{Ul.headers[l]={}});const jd=t.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),Od=l=>{const d={};let b,Z,G;return l&&l.split(`
2
+ `).forEach(function(c){G=c.indexOf(":"),b=c.substring(0,G).trim().toLowerCase(),Z=c.substring(G+1).trim(),!(!b||d[b]&&jd[b])&&(b==="set-cookie"?d[b]?d[b].push(Z):d[b]=[Z]:d[b]=d[b]?d[b]+", "+Z:Z)}),d},V0=Symbol("internals");function Nl(l){return l&&String(l).trim().toLowerCase()}function vl(l){return l===!1||l==null?l:t.isArray(l)?l.map(vl):String(l)}function Pd(l){const d=Object.create(null),b=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let Z;for(;Z=b.exec(l);)d[Z[1]]=Z[2];return d}const Dd=l=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(l.trim());function UZ(l,d,b,Z,G){if(t.isFunction(Z))return Z.call(this,d,b);if(G&&(d=b),!!t.isString(d)){if(t.isString(Z))return d.indexOf(Z)!==-1;if(t.isRegExp(Z))return Z.test(d)}}function rd(l){return l.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(d,b,Z)=>b.toUpperCase()+Z)}function Ad(l,d){const b=t.toCamelCase(" "+d);["get","set","has"].forEach(Z=>{Object.defineProperty(l,Z+b,{value:function(G,m,c){return this[Z].call(this,d,G,m,c)},configurable:!0})})}let $=class{constructor(d){d&&this.set(d)}set(d,b,Z){const G=this;function m(V,Y,X){const i=Nl(Y);if(!i)throw new Error("header name must be a non-empty string");const a=t.findKey(G,i);(!a||G[a]===void 0||X===!0||X===void 0&&G[a]!==!1)&&(G[a||Y]=vl(V))}const c=(V,Y)=>t.forEach(V,(X,i)=>m(X,i,Y));if(t.isPlainObject(d)||d instanceof this.constructor)c(d,b);else if(t.isString(d)&&(d=d.trim())&&!Dd(d))c(Od(d),b);else if(t.isObject(d)&&t.isIterable(d)){let V={},Y,X;for(const i of d){if(!t.isArray(i))throw TypeError("Object iterator must return a key-value pair");V[X=i[0]]=(Y=V[X])?t.isArray(Y)?[...Y,i[1]]:[Y,i[1]]:i[1]}c(V,b)}else d!=null&&m(b,d,Z);return this}get(d,b){if(d=Nl(d),d){const Z=t.findKey(this,d);if(Z){const G=this[Z];if(!b)return G;if(b===!0)return Pd(G);if(t.isFunction(b))return b.call(this,G,Z);if(t.isRegExp(b))return b.exec(G);throw new TypeError("parser must be boolean|regexp|function")}}}has(d,b){if(d=Nl(d),d){const Z=t.findKey(this,d);return!!(Z&&this[Z]!==void 0&&(!b||UZ(this,this[Z],Z,b)))}return!1}delete(d,b){const Z=this;let G=!1;function m(c){if(c=Nl(c),c){const V=t.findKey(Z,c);V&&(!b||UZ(Z,Z[V],V,b))&&(delete Z[V],G=!0)}}return t.isArray(d)?d.forEach(m):m(d),G}clear(d){const b=Object.keys(this);let Z=b.length,G=!1;for(;Z--;){const m=b[Z];(!d||UZ(this,this[m],m,d,!0))&&(delete this[m],G=!0)}return G}normalize(d){const b=this,Z={};return t.forEach(this,(G,m)=>{const c=t.findKey(Z,m);if(c){b[c]=vl(G),delete b[m];return}const V=d?rd(m):String(m).trim();V!==m&&delete b[m],b[V]=vl(G),Z[V]=!0}),this}concat(...d){return this.constructor.concat(this,...d)}toJSON(d){const b=Object.create(null);return t.forEach(this,(Z,G)=>{Z!=null&&Z!==!1&&(b[G]=d&&t.isArray(Z)?Z.join(", "):Z)}),b}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([d,b])=>d+": "+b).join(`
3
+ `)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(d){return d instanceof this?d:new this(d)}static concat(d,...b){const Z=new this(d);return b.forEach(G=>Z.set(G)),Z}static accessor(d){const Z=(this[V0]=this[V0]={accessors:{}}).accessors,G=this.prototype;function m(c){const V=Nl(c);Z[V]||(Ad(G,c),Z[V]=!0)}return t.isArray(d)?d.forEach(m):m(d),this}};$.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);t.reduceDescriptors($.prototype,({value:l},d)=>{let b=d[0].toUpperCase()+d.slice(1);return{get:()=>l,set(Z){this[b]=Z}}});t.freezeMethods($);function HZ(l,d){const b=this||Ul,Z=d||b,G=$.from(Z.headers);let m=Z.data;return t.forEach(l,function(V){m=V.call(b,m,G.normalize(),d?d.status:void 0)}),G.normalize(),m}function ab(l){return!!(l&&l.__CANCEL__)}function xl(l,d,b){e.call(this,l??"canceled",e.ERR_CANCELED,d,b),this.name="CanceledError"}t.inherits(xl,e,{__CANCEL__:!0});function xb(l,d,b){const Z=b.config.validateStatus;!b.status||!Z||Z(b.status)?l(b):d(new e("Request failed with status code "+b.status,[e.ERR_BAD_REQUEST,e.ERR_BAD_RESPONSE][Math.floor(b.status/100)-4],b.config,b.request,b))}function qd(l){const d=/^([-+\w]{1,25})(:?\/\/|:)/.exec(l);return d&&d[1]||""}function _d(l,d){l=l||10;const b=new Array(l),Z=new Array(l);let G=0,m=0,c;return d=d!==void 0?d:1e3,function(Y){const X=Date.now(),i=Z[m];c||(c=X),b[G]=Y,Z[G]=X;let a=m,u=0;for(;a!==G;)u+=b[a++],a=a%l;if(G=(G+1)%l,G===m&&(m=(m+1)%l),X-c<d)return;const s=i&&X-i;return s?Math.round(u*1e3/s):void 0}}function $d(l,d){let b=0,Z=1e3/d,G,m;const c=(X,i=Date.now())=>{b=i,G=null,m&&(clearTimeout(m),m=null),l(...X)};return[(...X)=>{const i=Date.now(),a=i-b;a>=Z?c(X,i):(G=X,m||(m=setTimeout(()=>{m=null,c(G)},Z-a)))},()=>G&&c(G)]}const KZ=(l,d,b=3)=>{let Z=0;const G=_d(50,250);return $d(m=>{const c=m.loaded,V=m.lengthComputable?m.total:void 0,Y=c-Z,X=G(Y),i=c<=V;Z=c;const a={loaded:c,total:V,progress:V?c/V:void 0,bytes:Y,rate:X||void 0,estimated:X&&V&&i?(V-c)/X:void 0,event:m,lengthComputable:V!=null,[d?"download":"upload"]:!0};l(a)},b)},c0=(l,d)=>{const b=l!=null;return[Z=>d[0]({lengthComputable:b,total:l,loaded:Z}),d[1]]},u0=l=>(...d)=>t.asap(()=>l(...d)),lG=A.hasStandardBrowserEnv?((l,d)=>b=>(b=new URL(b,A.origin),l.protocol===b.protocol&&l.host===b.host&&(d||l.port===b.port)))(new URL(A.origin),A.navigator&&/(msie|trident)/i.test(A.navigator.userAgent)):()=>!0,ZG=A.hasStandardBrowserEnv?{write(l,d,b,Z,G,m,c){if(typeof document>"u")return;const V=[`${l}=${encodeURIComponent(d)}`];t.isNumber(b)&&V.push(`expires=${new Date(b).toUTCString()}`),t.isString(Z)&&V.push(`path=${Z}`),t.isString(G)&&V.push(`domain=${G}`),m===!0&&V.push("secure"),t.isString(c)&&V.push(`SameSite=${c}`),document.cookie=V.join("; ")},read(l){if(typeof document>"u")return null;const d=document.cookie.match(new RegExp("(?:^|; )"+l+"=([^;]*)"));return d?decodeURIComponent(d[1]):null},remove(l){this.write(l,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function bG(l){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(l)}function dG(l,d){return d?l.replace(/\/?\/$/,"")+"/"+d.replace(/^\/+/,""):l}function yb(l,d,b){let Z=!bG(d);return l&&(Z||b==!1)?dG(l,d):d}const p0=l=>l instanceof $?{...l}:l;function pl(l,d){d=d||{};const b={};function Z(X,i,a,u){return t.isPlainObject(X)&&t.isPlainObject(i)?t.merge.call({caseless:u},X,i):t.isPlainObject(i)?t.merge({},i):t.isArray(i)?i.slice():i}function G(X,i,a,u){if(t.isUndefined(i)){if(!t.isUndefined(X))return Z(void 0,X,a,u)}else return Z(X,i,a,u)}function m(X,i){if(!t.isUndefined(i))return Z(void 0,i)}function c(X,i){if(t.isUndefined(i)){if(!t.isUndefined(X))return Z(void 0,X)}else return Z(void 0,i)}function V(X,i,a){if(a in d)return Z(X,i);if(a in l)return Z(void 0,X)}const Y={url:m,method:m,data:m,baseURL:c,transformRequest:c,transformResponse:c,paramsSerializer:c,timeout:c,timeoutMessage:c,withCredentials:c,withXSRFToken:c,adapter:c,responseType:c,xsrfCookieName:c,xsrfHeaderName:c,onUploadProgress:c,onDownloadProgress:c,decompress:c,maxContentLength:c,maxBodyLength:c,beforeRedirect:c,transport:c,httpAgent:c,httpsAgent:c,cancelToken:c,socketPath:c,responseEncoding:c,validateStatus:V,headers:(X,i,a)=>G(p0(X),p0(i),a,!0)};return t.forEach(Object.keys({...l,...d}),function(i){const a=Y[i]||G,u=a(l[i],d[i],i);t.isUndefined(u)&&a!==V||(b[i]=u)}),b}const Sb=l=>{const d=pl({},l);let{data:b,withXSRFToken:Z,xsrfHeaderName:G,xsrfCookieName:m,headers:c,auth:V}=d;if(d.headers=c=$.from(c),d.url=sb(yb(d.baseURL,d.url,d.allowAbsoluteUrls),l.params,l.paramsSerializer),V&&c.set("Authorization","Basic "+btoa((V.username||"")+":"+(V.password?unescape(encodeURIComponent(V.password)):""))),t.isFormData(b)){if(A.hasStandardBrowserEnv||A.hasStandardBrowserWebWorkerEnv)c.setContentType(void 0);else if(t.isFunction(b.getHeaders)){const Y=b.getHeaders(),X=["content-type","content-length"];Object.entries(Y).forEach(([i,a])=>{X.includes(i.toLowerCase())&&c.set(i,a)})}}if(A.hasStandardBrowserEnv&&(Z&&t.isFunction(Z)&&(Z=Z(d)),Z||Z!==!1&&lG(d.url))){const Y=G&&m&&ZG.read(m);Y&&c.set(G,Y)}return d},GG=typeof XMLHttpRequest<"u",XG=GG&&function(l){return new Promise(function(b,Z){const G=Sb(l);let m=G.data;const c=$.from(G.headers).normalize();let{responseType:V,onUploadProgress:Y,onDownloadProgress:X}=G,i,a,u,s,W;function h(){s&&s(),W&&W(),G.cancelToken&&G.cancelToken.unsubscribe(i),G.signal&&G.signal.removeEventListener("abort",i)}let p=new XMLHttpRequest;p.open(G.method.toUpperCase(),G.url,!0),p.timeout=G.timeout;function x(){if(!p)return;const I=$.from("getAllResponseHeaders"in p&&p.getAllResponseHeaders()),S={data:!V||V==="text"||V==="json"?p.responseText:p.response,status:p.status,statusText:p.statusText,headers:I,config:l,request:p};xb(function(o){b(o),h()},function(o){Z(o),h()},S),p=null}"onloadend"in p?p.onloadend=x:p.onreadystatechange=function(){!p||p.readyState!==4||p.status===0&&!(p.responseURL&&p.responseURL.indexOf("file:")===0)||setTimeout(x)},p.onabort=function(){p&&(Z(new e("Request aborted",e.ECONNABORTED,l,p)),p=null)},p.onerror=function(R){const S=R&&R.message?R.message:"Network Error",K=new e(S,e.ERR_NETWORK,l,p);K.event=R||null,Z(K),p=null},p.ontimeout=function(){let R=G.timeout?"timeout of "+G.timeout+"ms exceeded":"timeout exceeded";const S=G.transitional||Rb;G.timeoutErrorMessage&&(R=G.timeoutErrorMessage),Z(new e(R,S.clarifyTimeoutError?e.ETIMEDOUT:e.ECONNABORTED,l,p)),p=null},m===void 0&&c.setContentType(null),"setRequestHeader"in p&&t.forEach(c.toJSON(),function(R,S){p.setRequestHeader(S,R)}),t.isUndefined(G.withCredentials)||(p.withCredentials=!!G.withCredentials),V&&V!=="json"&&(p.responseType=G.responseType),X&&([u,W]=KZ(X,!0),p.addEventListener("progress",u)),Y&&p.upload&&([a,s]=KZ(Y),p.upload.addEventListener("progress",a),p.upload.addEventListener("loadend",s)),(G.cancelToken||G.signal)&&(i=I=>{p&&(Z(!I||I.type?new xl(null,l,p):I),p.abort(),p=null)},G.cancelToken&&G.cancelToken.subscribe(i),G.signal&&(G.signal.aborted?i():G.signal.addEventListener("abort",i)));const L=qd(G.url);if(L&&A.protocols.indexOf(L)===-1){Z(new e("Unsupported protocol "+L+":",e.ERR_BAD_REQUEST,l));return}p.send(m||null)})},iG=(l,d)=>{const{length:b}=l=l?l.filter(Boolean):[];if(d||b){let Z=new AbortController,G;const m=function(X){if(!G){G=!0,V();const i=X instanceof Error?X:this.reason;Z.abort(i instanceof e?i:new xl(i instanceof Error?i.message:i))}};let c=d&&setTimeout(()=>{c=null,m(new e(`timeout ${d} of ms exceeded`,e.ETIMEDOUT))},d);const V=()=>{l&&(c&&clearTimeout(c),c=null,l.forEach(X=>{X.unsubscribe?X.unsubscribe(m):X.removeEventListener("abort",m)}),l=null)};l.forEach(X=>X.addEventListener("abort",m));const{signal:Y}=Z;return Y.unsubscribe=()=>t.asap(V),Y}},mG=function*(l,d){let b=l.byteLength;if(b<d){yield l;return}let Z=0,G;for(;Z<b;)G=Z+d,yield l.slice(Z,G),Z=G},WG=async function*(l,d){for await(const b of VG(l))yield*mG(b,d)},VG=async function*(l){if(l[Symbol.asyncIterator]){yield*l;return}const d=l.getReader();try{for(;;){const{done:b,value:Z}=await d.read();if(b)break;yield Z}}finally{await d.cancel()}},I0=(l,d,b,Z)=>{const G=WG(l,d);let m=0,c,V=Y=>{c||(c=!0,Z&&Z(Y))};return new ReadableStream({async pull(Y){try{const{done:X,value:i}=await G.next();if(X){V(),Y.close();return}let a=i.byteLength;if(b){let u=m+=a;b(u)}Y.enqueue(new Uint8Array(i))}catch(X){throw V(X),X}},cancel(Y){return V(Y),G.return()}},{highWaterMark:2})},L0=64*1024,{isFunction:Ml}=t,cG=(({Request:l,Response:d})=>({Request:l,Response:d}))(t.global),{ReadableStream:h0,TextEncoder:s0}=t.global,R0=(l,...d)=>{try{return!!l(...d)}catch{return!1}},uG=l=>{l=t.merge.call({skipUndefined:!0},cG,l);const{fetch:d,Request:b,Response:Z}=l,G=d?Ml(d):typeof fetch=="function",m=Ml(b),c=Ml(Z);if(!G)return!1;const V=G&&Ml(h0),Y=G&&(typeof s0=="function"?(W=>h=>W.encode(h))(new s0):async W=>new Uint8Array(await new b(W).arrayBuffer())),X=m&&V&&R0(()=>{let W=!1;const h=new b(A.origin,{body:new h0,method:"POST",get duplex(){return W=!0,"half"}}).headers.has("Content-Type");return W&&!h}),i=c&&V&&R0(()=>t.isReadableStream(new Z("").body)),a={stream:i&&(W=>W.body)};G&&["text","arrayBuffer","blob","formData","stream"].forEach(W=>{!a[W]&&(a[W]=(h,p)=>{let x=h&&h[W];if(x)return x.call(h);throw new e(`Response type '${W}' is not supported`,e.ERR_NOT_SUPPORT,p)})});const u=async W=>{if(W==null)return 0;if(t.isBlob(W))return W.size;if(t.isSpecCompliantForm(W))return(await new b(A.origin,{method:"POST",body:W}).arrayBuffer()).byteLength;if(t.isArrayBufferView(W)||t.isArrayBuffer(W))return W.byteLength;if(t.isURLSearchParams(W)&&(W=W+""),t.isString(W))return(await Y(W)).byteLength},s=async(W,h)=>{const p=t.toFiniteNumber(W.getContentLength());return p??u(h)};return async W=>{let{url:h,method:p,data:x,signal:L,cancelToken:I,timeout:R,onDownloadProgress:S,onUploadProgress:K,responseType:o,headers:J,withCredentials:H="same-origin",fetchOptions:y}=Sb(W),C=d||fetch;o=o?(o+"").toLowerCase():"text";let k=iG([L,I&&I.toAbortSignal()],R),n=null;const z=k&&k.unsubscribe&&(()=>{k.unsubscribe()});let g;try{if(K&&X&&p!=="get"&&p!=="head"&&(g=await s(J,x))!==0){let N=new b(h,{method:"POST",body:x,duplex:"half"}),T;if(t.isFormData(x)&&(T=N.headers.get("content-type"))&&J.setContentType(T),N.body){const[U,F]=c0(g,KZ(u0(K)));x=I0(N.body,L0,U,F)}}t.isString(H)||(H=H?"include":"omit");const M=m&&"credentials"in b.prototype,E={...y,signal:k,method:p.toUpperCase(),headers:J.normalize().toJSON(),body:x,duplex:"half",credentials:M?H:void 0};n=m&&new b(h,E);let v=await(m?C(n,y):C(h,E));const B=i&&(o==="stream"||o==="response");if(i&&(S||B&&z)){const N={};["status","statusText","headers"].forEach(j=>{N[j]=v[j]});const T=t.toFiniteNumber(v.headers.get("content-length")),[U,F]=S&&c0(T,KZ(u0(S),!0))||[];v=new Z(I0(v.body,L0,U,()=>{F&&F(),z&&z()}),N)}o=o||"text";let w=await a[t.findKey(a,o)||"text"](v,W);return!B&&z&&z(),await new Promise((N,T)=>{xb(N,T,{data:w,headers:$.from(v.headers),status:v.status,statusText:v.statusText,config:W,request:n})})}catch(M){throw z&&z(),M&&M.name==="TypeError"&&/Load failed|fetch/i.test(M.message)?Object.assign(new e("Network Error",e.ERR_NETWORK,W,n),{cause:M.cause||M}):e.from(M,M&&M.code,W,n)}}},pG=new Map,Kb=l=>{let d=l&&l.env||{};const{fetch:b,Request:Z,Response:G}=d,m=[Z,G,b];let c=m.length,V=c,Y,X,i=pG;for(;V--;)Y=m[V],X=i.get(Y),X===void 0&&i.set(Y,X=V?new Map:uG(d)),i=X;return X};Kb();const EZ={http:nd,xhr:XG,fetch:{get:Kb}};t.forEach(EZ,(l,d)=>{if(l){try{Object.defineProperty(l,"name",{value:d})}catch{}Object.defineProperty(l,"adapterName",{value:d})}});const Y0=l=>`- ${l}`,IG=l=>t.isFunction(l)||l===null||l===!1;function LG(l,d){l=t.isArray(l)?l:[l];const{length:b}=l;let Z,G;const m={};for(let c=0;c<b;c++){Z=l[c];let V;if(G=Z,!IG(Z)&&(G=EZ[(V=String(Z)).toLowerCase()],G===void 0))throw new e(`Unknown adapter '${V}'`);if(G&&(t.isFunction(G)||(G=G.get(d))))break;m[V||"#"+c]=G}if(!G){const c=Object.entries(m).map(([Y,X])=>`adapter ${Y} `+(X===!1?"is not supported by the environment":"is not available in the build"));let V=b?c.length>1?`since :
4
+ `+c.map(Y0).join(`
5
+ `):" "+Y0(c[0]):"as no adapter specified";throw new e("There is no suitable adapter to dispatch the request "+V,"ERR_NOT_SUPPORT")}return G}const ob={getAdapter:LG,adapters:EZ};function zZ(l){if(l.cancelToken&&l.cancelToken.throwIfRequested(),l.signal&&l.signal.aborted)throw new xl(null,l)}function a0(l){return zZ(l),l.headers=$.from(l.headers),l.data=HZ.call(l,l.transformRequest),["post","put","patch"].indexOf(l.method)!==-1&&l.headers.setContentType("application/x-www-form-urlencoded",!1),ob.getAdapter(l.adapter||Ul.adapter,l)(l).then(function(Z){return zZ(l),Z.data=HZ.call(l,l.transformResponse,Z),Z.headers=$.from(Z.headers),Z},function(Z){return ab(Z)||(zZ(l),Z&&Z.response&&(Z.response.data=HZ.call(l,l.transformResponse,Z.response),Z.response.headers=$.from(Z.response.headers))),Promise.reject(Z)})}const tb="1.13.2",NZ={};["object","boolean","number","function","string","symbol"].forEach((l,d)=>{NZ[l]=function(Z){return typeof Z===l||"a"+(d<1?"n ":" ")+l}});const x0={};NZ.transitional=function(d,b,Z){function G(m,c){return"[Axios v"+tb+"] Transitional option '"+m+"'"+c+(Z?". "+Z:"")}return(m,c,V)=>{if(d===!1)throw new e(G(c," has been removed"+(b?" in "+b:"")),e.ERR_DEPRECATED);return b&&!x0[c]&&(x0[c]=!0,console.warn(G(c," has been deprecated since v"+b+" and will be removed in the near future"))),d?d(m,c,V):!0}};NZ.spelling=function(d){return(b,Z)=>(console.warn(`${Z} is likely a misspelling of ${d}`),!0)};function hG(l,d,b){if(typeof l!="object")throw new e("options must be an object",e.ERR_BAD_OPTION_VALUE);const Z=Object.keys(l);let G=Z.length;for(;G-- >0;){const m=Z[G],c=d[m];if(c){const V=l[m],Y=V===void 0||c(V,m,l);if(Y!==!0)throw new e("option "+m+" must be "+Y,e.ERR_BAD_OPTION_VALUE);continue}if(b!==!0)throw new e("Unknown option "+m,e.ERR_BAD_OPTION)}}const Ql={assertOptions:hG,validators:NZ},il=Ql.validators;let ul=class{constructor(d){this.defaults=d||{},this.interceptors={request:new W0,response:new W0}}async request(d,b){try{return await this._request(d,b)}catch(Z){if(Z instanceof Error){let G={};Error.captureStackTrace?Error.captureStackTrace(G):G=new Error;const m=G.stack?G.stack.replace(/^.+\n/,""):"";try{Z.stack?m&&!String(Z.stack).endsWith(m.replace(/^.+\n.+\n/,""))&&(Z.stack+=`
6
+ `+m):Z.stack=m}catch{}}throw Z}}_request(d,b){typeof d=="string"?(b=b||{},b.url=d):b=d||{},b=pl(this.defaults,b);const{transitional:Z,paramsSerializer:G,headers:m}=b;Z!==void 0&&Ql.assertOptions(Z,{silentJSONParsing:il.transitional(il.boolean),forcedJSONParsing:il.transitional(il.boolean),clarifyTimeoutError:il.transitional(il.boolean)},!1),G!=null&&(t.isFunction(G)?b.paramsSerializer={serialize:G}:Ql.assertOptions(G,{encode:il.function,serialize:il.function},!0)),b.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?b.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:b.allowAbsoluteUrls=!0),Ql.assertOptions(b,{baseUrl:il.spelling("baseURL"),withXsrfToken:il.spelling("withXSRFToken")},!0),b.method=(b.method||this.defaults.method||"get").toLowerCase();let c=m&&t.merge(m.common,m[b.method]);m&&t.forEach(["delete","get","head","post","put","patch","common"],W=>{delete m[W]}),b.headers=$.concat(c,m);const V=[];let Y=!0;this.interceptors.request.forEach(function(h){typeof h.runWhen=="function"&&h.runWhen(b)===!1||(Y=Y&&h.synchronous,V.unshift(h.fulfilled,h.rejected))});const X=[];this.interceptors.response.forEach(function(h){X.push(h.fulfilled,h.rejected)});let i,a=0,u;if(!Y){const W=[a0.bind(this),void 0];for(W.unshift(...V),W.push(...X),u=W.length,i=Promise.resolve(b);a<u;)i=i.then(W[a++],W[a++]);return i}u=V.length;let s=b;for(;a<u;){const W=V[a++],h=V[a++];try{s=W(s)}catch(p){h.call(this,p);break}}try{i=a0.call(this,s)}catch(W){return Promise.reject(W)}for(a=0,u=X.length;a<u;)i=i.then(X[a++],X[a++]);return i}getUri(d){d=pl(this.defaults,d);const b=yb(d.baseURL,d.url,d.allowAbsoluteUrls);return sb(b,d.params,d.paramsSerializer)}};t.forEach(["delete","get","head","options"],function(d){ul.prototype[d]=function(b,Z){return this.request(pl(Z||{},{method:d,url:b,data:(Z||{}).data}))}});t.forEach(["post","put","patch"],function(d){function b(Z){return function(m,c,V){return this.request(pl(V||{},{method:d,headers:Z?{"Content-Type":"multipart/form-data"}:{},url:m,data:c}))}}ul.prototype[d]=b(),ul.prototype[d+"Form"]=b(!0)});let sG=class Cb{constructor(d){if(typeof d!="function")throw new TypeError("executor must be a function.");let b;this.promise=new Promise(function(m){b=m});const Z=this;this.promise.then(G=>{if(!Z._listeners)return;let m=Z._listeners.length;for(;m-- >0;)Z._listeners[m](G);Z._listeners=null}),this.promise.then=G=>{let m;const c=new Promise(V=>{Z.subscribe(V),m=V}).then(G);return c.cancel=function(){Z.unsubscribe(m)},c},d(function(m,c,V){Z.reason||(Z.reason=new xl(m,c,V),b(Z.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(d){if(this.reason){d(this.reason);return}this._listeners?this._listeners.push(d):this._listeners=[d]}unsubscribe(d){if(!this._listeners)return;const b=this._listeners.indexOf(d);b!==-1&&this._listeners.splice(b,1)}toAbortSignal(){const d=new AbortController,b=Z=>{d.abort(Z)};return this.subscribe(b),d.signal.unsubscribe=()=>this.unsubscribe(b),d.signal}static source(){let d;return{token:new Cb(function(G){d=G}),cancel:d}}};function RG(l){return function(b){return l.apply(null,b)}}function YG(l){return t.isObject(l)&&l.isAxiosError===!0}const QZ={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(QZ).forEach(([l,d])=>{QZ[d]=l});function Jb(l){const d=new ul(l),b=Gb(ul.prototype.request,d);return t.extend(b,ul.prototype,d,{allOwnKeys:!0}),t.extend(b,d,null,{allOwnKeys:!0}),b.create=function(G){return Jb(pl(l,G))},b}const P=Jb(Ul);P.Axios=ul;P.CanceledError=xl;P.CancelToken=sG;P.isCancel=ab;P.VERSION=tb;P.toFormData=JZ;P.AxiosError=e;P.Cancel=P.CanceledError;P.all=function(d){return Promise.all(d)};P.spread=RG;P.isAxiosError=YG;P.mergeConfig=pl;P.AxiosHeaders=$;P.formToJSON=l=>Yb(t.isHTMLForm(l)?new FormData(l):l);P.getAdapter=ob.getAdapter;P.HttpStatusCode=QZ;P.default=P;const{Axios:vX,AxiosError:QX,CanceledError:fX,isCancel:wX,CancelToken:BX,VERSION:EX,all:jX,Cancel:OX,isAxiosError:PX,spread:DX,toFormData:rX,AxiosHeaders:AX,HttpStatusCode:qX,formToJSON:_X,getAdapter:$X,mergeConfig:li}=P;var gZ=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function aG(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}function xG(l){if(Object.prototype.hasOwnProperty.call(l,"__esModule"))return l;var d=l.default;if(typeof d=="function"){var b=function Z(){var G=!1;try{G=this instanceof Z}catch{}return G?Reflect.construct(d,arguments,this.constructor):d.apply(this,arguments)};b.prototype=d.prototype}else b={};return Object.defineProperty(b,"__esModule",{value:!0}),Object.keys(l).forEach(function(Z){var G=Object.getOwnPropertyDescriptor(l,Z);Object.defineProperty(b,Z,G.get?G:{enumerable:!0,get:function(){return l[Z]}})}),b}var fl={exports:{}};function yG(l){throw new Error('Could not dynamically require "'+l+'". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.')}var wl={exports:{}};const SG={},KG=Object.freeze(Object.defineProperty({__proto__:null,default:SG},Symbol.toStringTag,{value:"Module"})),oG=xG(KG);var tG=wl.exports,y0;function f(){return y0||(y0=1,(function(l,d){(function(b,Z){l.exports=Z()})(tG,function(){var b=b||(function(Z,G){var m;if(typeof window<"u"&&window.crypto&&(m=window.crypto),typeof self<"u"&&self.crypto&&(m=self.crypto),typeof globalThis<"u"&&globalThis.crypto&&(m=globalThis.crypto),!m&&typeof window<"u"&&window.msCrypto&&(m=window.msCrypto),!m&&typeof gZ<"u"&&gZ.crypto&&(m=gZ.crypto),!m&&typeof yG=="function")try{m=oG}catch{}var c=function(){if(m){if(typeof m.getRandomValues=="function")try{return m.getRandomValues(new Uint32Array(1))[0]}catch{}if(typeof m.randomBytes=="function")try{return m.randomBytes(4).readInt32LE()}catch{}}throw new Error("Native crypto module could not be used to get secure random number.")},V=Object.create||(function(){function L(){}return function(I){var R;return L.prototype=I,R=new L,L.prototype=null,R}})(),Y={},X=Y.lib={},i=X.Base=(function(){return{extend:function(L){var I=V(this);return L&&I.mixIn(L),(!I.hasOwnProperty("init")||this.init===I.init)&&(I.init=function(){I.$super.init.apply(this,arguments)}),I.init.prototype=I,I.$super=this,I},create:function(){var L=this.extend();return L.init.apply(L,arguments),L},init:function(){},mixIn:function(L){for(var I in L)L.hasOwnProperty(I)&&(this[I]=L[I]);L.hasOwnProperty("toString")&&(this.toString=L.toString)},clone:function(){return this.init.prototype.extend(this)}}})(),a=X.WordArray=i.extend({init:function(L,I){L=this.words=L||[],I!=G?this.sigBytes=I:this.sigBytes=L.length*4},toString:function(L){return(L||s).stringify(this)},concat:function(L){var I=this.words,R=L.words,S=this.sigBytes,K=L.sigBytes;if(this.clamp(),S%4)for(var o=0;o<K;o++){var J=R[o>>>2]>>>24-o%4*8&255;I[S+o>>>2]|=J<<24-(S+o)%4*8}else for(var H=0;H<K;H+=4)I[S+H>>>2]=R[H>>>2];return this.sigBytes+=K,this},clamp:function(){var L=this.words,I=this.sigBytes;L[I>>>2]&=4294967295<<32-I%4*8,L.length=Z.ceil(I/4)},clone:function(){var L=i.clone.call(this);return L.words=this.words.slice(0),L},random:function(L){for(var I=[],R=0;R<L;R+=4)I.push(c());return new a.init(I,L)}}),u=Y.enc={},s=u.Hex={stringify:function(L){for(var I=L.words,R=L.sigBytes,S=[],K=0;K<R;K++){var o=I[K>>>2]>>>24-K%4*8&255;S.push((o>>>4).toString(16)),S.push((o&15).toString(16))}return S.join("")},parse:function(L){for(var I=L.length,R=[],S=0;S<I;S+=2)R[S>>>3]|=parseInt(L.substr(S,2),16)<<24-S%8*4;return new a.init(R,I/2)}},W=u.Latin1={stringify:function(L){for(var I=L.words,R=L.sigBytes,S=[],K=0;K<R;K++){var o=I[K>>>2]>>>24-K%4*8&255;S.push(String.fromCharCode(o))}return S.join("")},parse:function(L){for(var I=L.length,R=[],S=0;S<I;S++)R[S>>>2]|=(L.charCodeAt(S)&255)<<24-S%4*8;return new a.init(R,I)}},h=u.Utf8={stringify:function(L){try{return decodeURIComponent(escape(W.stringify(L)))}catch{throw new Error("Malformed UTF-8 data")}},parse:function(L){return W.parse(unescape(encodeURIComponent(L)))}},p=X.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(L){typeof L=="string"&&(L=h.parse(L)),this._data.concat(L),this._nDataBytes+=L.sigBytes},_process:function(L){var I,R=this._data,S=R.words,K=R.sigBytes,o=this.blockSize,J=o*4,H=K/J;L?H=Z.ceil(H):H=Z.max((H|0)-this._minBufferSize,0);var y=H*o,C=Z.min(y*4,K);if(y){for(var k=0;k<y;k+=o)this._doProcessBlock(S,k);I=S.splice(0,y),R.sigBytes-=C}return new a.init(I,C)},clone:function(){var L=i.clone.call(this);return L._data=this._data.clone(),L},_minBufferSize:0});X.Hasher=p.extend({cfg:i.extend(),init:function(L){this.cfg=this.cfg.extend(L),this.reset()},reset:function(){p.reset.call(this),this._doReset()},update:function(L){return this._append(L),this._process(),this},finalize:function(L){L&&this._append(L);var I=this._doFinalize();return I},blockSize:16,_createHelper:function(L){return function(I,R){return new L.init(R).finalize(I)}},_createHmacHelper:function(L){return function(I,R){return new x.HMAC.init(L,R).finalize(I)}}});var x=Y.algo={};return Y})(Math);return b})})(wl)),wl.exports}var Bl={exports:{}},CG=Bl.exports,S0;function nZ(){return S0||(S0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(CG,function(b){return(function(Z){var G=b,m=G.lib,c=m.Base,V=m.WordArray,Y=G.x64={};Y.Word=c.extend({init:function(X,i){this.high=X,this.low=i}}),Y.WordArray=c.extend({init:function(X,i){X=this.words=X||[],i!=Z?this.sigBytes=i:this.sigBytes=X.length*8},toX32:function(){for(var X=this.words,i=X.length,a=[],u=0;u<i;u++){var s=X[u];a.push(s.high),a.push(s.low)}return V.create(a,this.sigBytes)},clone:function(){for(var X=c.clone.call(this),i=X.words=this.words.slice(0),a=i.length,u=0;u<a;u++)i[u]=i[u].clone();return X}})})(),b})})(Bl)),Bl.exports}var El={exports:{}},JG=El.exports,K0;function NG(){return K0||(K0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(JG,function(b){return(function(){if(typeof ArrayBuffer=="function"){var Z=b,G=Z.lib,m=G.WordArray,c=m.init,V=m.init=function(Y){if(Y instanceof ArrayBuffer&&(Y=new Uint8Array(Y)),(Y instanceof Int8Array||typeof Uint8ClampedArray<"u"&&Y instanceof Uint8ClampedArray||Y instanceof Int16Array||Y instanceof Uint16Array||Y instanceof Int32Array||Y instanceof Uint32Array||Y instanceof Float32Array||Y instanceof Float64Array)&&(Y=new Uint8Array(Y.buffer,Y.byteOffset,Y.byteLength)),Y instanceof Uint8Array){for(var X=Y.byteLength,i=[],a=0;a<X;a++)i[a>>>2]|=Y[a]<<24-a%4*8;c.call(this,i,X)}else c.apply(this,arguments)};V.prototype=m}})(),b.lib.WordArray})})(El)),El.exports}var jl={exports:{}},nG=jl.exports,o0;function kG(){return o0||(o0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(nG,function(b){return(function(){var Z=b,G=Z.lib,m=G.WordArray,c=Z.enc;c.Utf16=c.Utf16BE={stringify:function(Y){for(var X=Y.words,i=Y.sigBytes,a=[],u=0;u<i;u+=2){var s=X[u>>>2]>>>16-u%4*8&65535;a.push(String.fromCharCode(s))}return a.join("")},parse:function(Y){for(var X=Y.length,i=[],a=0;a<X;a++)i[a>>>1]|=Y.charCodeAt(a)<<16-a%2*16;return m.create(i,X*2)}},c.Utf16LE={stringify:function(Y){for(var X=Y.words,i=Y.sigBytes,a=[],u=0;u<i;u+=2){var s=V(X[u>>>2]>>>16-u%4*8&65535);a.push(String.fromCharCode(s))}return a.join("")},parse:function(Y){for(var X=Y.length,i=[],a=0;a<X;a++)i[a>>>1]|=V(Y.charCodeAt(a)<<16-a%2*16);return m.create(i,X*2)}};function V(Y){return Y<<8&4278255360|Y>>>8&16711935}})(),b.enc.Utf16})})(jl)),jl.exports}var Ol={exports:{}},FG=Ol.exports,t0;function Il(){return t0||(t0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(FG,function(b){return(function(){var Z=b,G=Z.lib,m=G.WordArray,c=Z.enc;c.Base64={stringify:function(Y){var X=Y.words,i=Y.sigBytes,a=this._map;Y.clamp();for(var u=[],s=0;s<i;s+=3)for(var W=X[s>>>2]>>>24-s%4*8&255,h=X[s+1>>>2]>>>24-(s+1)%4*8&255,p=X[s+2>>>2]>>>24-(s+2)%4*8&255,x=W<<16|h<<8|p,L=0;L<4&&s+L*.75<i;L++)u.push(a.charAt(x>>>6*(3-L)&63));var I=a.charAt(64);if(I)for(;u.length%4;)u.push(I);return u.join("")},parse:function(Y){var X=Y.length,i=this._map,a=this._reverseMap;if(!a){a=this._reverseMap=[];for(var u=0;u<i.length;u++)a[i.charCodeAt(u)]=u}var s=i.charAt(64);if(s){var W=Y.indexOf(s);W!==-1&&(X=W)}return V(Y,X,a)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="};function V(Y,X,i){for(var a=[],u=0,s=0;s<X;s++)if(s%4){var W=i[Y.charCodeAt(s-1)]<<s%4*2,h=i[Y.charCodeAt(s)]>>>6-s%4*2,p=W|h;a[u>>>2]|=p<<24-u%4*8,u++}return m.create(a,u)}})(),b.enc.Base64})})(Ol)),Ol.exports}var Pl={exports:{}},TG=Pl.exports,C0;function UG(){return C0||(C0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(TG,function(b){return(function(){var Z=b,G=Z.lib,m=G.WordArray,c=Z.enc;c.Base64url={stringify:function(Y,X){X===void 0&&(X=!0);var i=Y.words,a=Y.sigBytes,u=X?this._safe_map:this._map;Y.clamp();for(var s=[],W=0;W<a;W+=3)for(var h=i[W>>>2]>>>24-W%4*8&255,p=i[W+1>>>2]>>>24-(W+1)%4*8&255,x=i[W+2>>>2]>>>24-(W+2)%4*8&255,L=h<<16|p<<8|x,I=0;I<4&&W+I*.75<a;I++)s.push(u.charAt(L>>>6*(3-I)&63));var R=u.charAt(64);if(R)for(;s.length%4;)s.push(R);return s.join("")},parse:function(Y,X){X===void 0&&(X=!0);var i=Y.length,a=X?this._safe_map:this._map,u=this._reverseMap;if(!u){u=this._reverseMap=[];for(var s=0;s<a.length;s++)u[a.charCodeAt(s)]=s}var W=a.charAt(64);if(W){var h=Y.indexOf(W);h!==-1&&(i=h)}return V(Y,i,u)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_safe_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"};function V(Y,X,i){for(var a=[],u=0,s=0;s<X;s++)if(s%4){var W=i[Y.charCodeAt(s-1)]<<s%4*2,h=i[Y.charCodeAt(s)]>>>6-s%4*2,p=W|h;a[u>>>2]|=p<<24-u%4*8,u++}return m.create(a,u)}})(),b.enc.Base64url})})(Pl)),Pl.exports}var Dl={exports:{}},HG=Dl.exports,J0;function Ll(){return J0||(J0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(HG,function(b){return(function(Z){var G=b,m=G.lib,c=m.WordArray,V=m.Hasher,Y=G.algo,X=[];(function(){for(var h=0;h<64;h++)X[h]=Z.abs(Z.sin(h+1))*4294967296|0})();var i=Y.MD5=V.extend({_doReset:function(){this._hash=new c.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(h,p){for(var x=0;x<16;x++){var L=p+x,I=h[L];h[L]=(I<<8|I>>>24)&16711935|(I<<24|I>>>8)&4278255360}var R=this._hash.words,S=h[p+0],K=h[p+1],o=h[p+2],J=h[p+3],H=h[p+4],y=h[p+5],C=h[p+6],k=h[p+7],n=h[p+8],z=h[p+9],g=h[p+10],M=h[p+11],E=h[p+12],v=h[p+13],B=h[p+14],w=h[p+15],N=R[0],T=R[1],U=R[2],F=R[3];N=a(N,T,U,F,S,7,X[0]),F=a(F,N,T,U,K,12,X[1]),U=a(U,F,N,T,o,17,X[2]),T=a(T,U,F,N,J,22,X[3]),N=a(N,T,U,F,H,7,X[4]),F=a(F,N,T,U,y,12,X[5]),U=a(U,F,N,T,C,17,X[6]),T=a(T,U,F,N,k,22,X[7]),N=a(N,T,U,F,n,7,X[8]),F=a(F,N,T,U,z,12,X[9]),U=a(U,F,N,T,g,17,X[10]),T=a(T,U,F,N,M,22,X[11]),N=a(N,T,U,F,E,7,X[12]),F=a(F,N,T,U,v,12,X[13]),U=a(U,F,N,T,B,17,X[14]),T=a(T,U,F,N,w,22,X[15]),N=u(N,T,U,F,K,5,X[16]),F=u(F,N,T,U,C,9,X[17]),U=u(U,F,N,T,M,14,X[18]),T=u(T,U,F,N,S,20,X[19]),N=u(N,T,U,F,y,5,X[20]),F=u(F,N,T,U,g,9,X[21]),U=u(U,F,N,T,w,14,X[22]),T=u(T,U,F,N,H,20,X[23]),N=u(N,T,U,F,z,5,X[24]),F=u(F,N,T,U,B,9,X[25]),U=u(U,F,N,T,J,14,X[26]),T=u(T,U,F,N,n,20,X[27]),N=u(N,T,U,F,v,5,X[28]),F=u(F,N,T,U,o,9,X[29]),U=u(U,F,N,T,k,14,X[30]),T=u(T,U,F,N,E,20,X[31]),N=s(N,T,U,F,y,4,X[32]),F=s(F,N,T,U,n,11,X[33]),U=s(U,F,N,T,M,16,X[34]),T=s(T,U,F,N,B,23,X[35]),N=s(N,T,U,F,K,4,X[36]),F=s(F,N,T,U,H,11,X[37]),U=s(U,F,N,T,k,16,X[38]),T=s(T,U,F,N,g,23,X[39]),N=s(N,T,U,F,v,4,X[40]),F=s(F,N,T,U,S,11,X[41]),U=s(U,F,N,T,J,16,X[42]),T=s(T,U,F,N,C,23,X[43]),N=s(N,T,U,F,z,4,X[44]),F=s(F,N,T,U,E,11,X[45]),U=s(U,F,N,T,w,16,X[46]),T=s(T,U,F,N,o,23,X[47]),N=W(N,T,U,F,S,6,X[48]),F=W(F,N,T,U,k,10,X[49]),U=W(U,F,N,T,B,15,X[50]),T=W(T,U,F,N,y,21,X[51]),N=W(N,T,U,F,E,6,X[52]),F=W(F,N,T,U,J,10,X[53]),U=W(U,F,N,T,g,15,X[54]),T=W(T,U,F,N,K,21,X[55]),N=W(N,T,U,F,n,6,X[56]),F=W(F,N,T,U,w,10,X[57]),U=W(U,F,N,T,C,15,X[58]),T=W(T,U,F,N,v,21,X[59]),N=W(N,T,U,F,H,6,X[60]),F=W(F,N,T,U,M,10,X[61]),U=W(U,F,N,T,o,15,X[62]),T=W(T,U,F,N,z,21,X[63]),R[0]=R[0]+N|0,R[1]=R[1]+T|0,R[2]=R[2]+U|0,R[3]=R[3]+F|0},_doFinalize:function(){var h=this._data,p=h.words,x=this._nDataBytes*8,L=h.sigBytes*8;p[L>>>5]|=128<<24-L%32;var I=Z.floor(x/4294967296),R=x;p[(L+64>>>9<<4)+15]=(I<<8|I>>>24)&16711935|(I<<24|I>>>8)&4278255360,p[(L+64>>>9<<4)+14]=(R<<8|R>>>24)&16711935|(R<<24|R>>>8)&4278255360,h.sigBytes=(p.length+1)*4,this._process();for(var S=this._hash,K=S.words,o=0;o<4;o++){var J=K[o];K[o]=(J<<8|J>>>24)&16711935|(J<<24|J>>>8)&4278255360}return S},clone:function(){var h=V.clone.call(this);return h._hash=this._hash.clone(),h}});function a(h,p,x,L,I,R,S){var K=h+(p&x|~p&L)+I+S;return(K<<R|K>>>32-R)+p}function u(h,p,x,L,I,R,S){var K=h+(p&L|x&~L)+I+S;return(K<<R|K>>>32-R)+p}function s(h,p,x,L,I,R,S){var K=h+(p^x^L)+I+S;return(K<<R|K>>>32-R)+p}function W(h,p,x,L,I,R,S){var K=h+(x^(p|~L))+I+S;return(K<<R|K>>>32-R)+p}G.MD5=V._createHelper(i),G.HmacMD5=V._createHmacHelper(i)})(Math),b.MD5})})(Dl)),Dl.exports}var rl={exports:{}},zG=rl.exports,N0;function Nb(){return N0||(N0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(zG,function(b){return(function(){var Z=b,G=Z.lib,m=G.WordArray,c=G.Hasher,V=Z.algo,Y=[],X=V.SHA1=c.extend({_doReset:function(){this._hash=new m.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(i,a){for(var u=this._hash.words,s=u[0],W=u[1],h=u[2],p=u[3],x=u[4],L=0;L<80;L++){if(L<16)Y[L]=i[a+L]|0;else{var I=Y[L-3]^Y[L-8]^Y[L-14]^Y[L-16];Y[L]=I<<1|I>>>31}var R=(s<<5|s>>>27)+x+Y[L];L<20?R+=(W&h|~W&p)+1518500249:L<40?R+=(W^h^p)+1859775393:L<60?R+=(W&h|W&p|h&p)-1894007588:R+=(W^h^p)-899497514,x=p,p=h,h=W<<30|W>>>2,W=s,s=R}u[0]=u[0]+s|0,u[1]=u[1]+W|0,u[2]=u[2]+h|0,u[3]=u[3]+p|0,u[4]=u[4]+x|0},_doFinalize:function(){var i=this._data,a=i.words,u=this._nDataBytes*8,s=i.sigBytes*8;return a[s>>>5]|=128<<24-s%32,a[(s+64>>>9<<4)+14]=Math.floor(u/4294967296),a[(s+64>>>9<<4)+15]=u,i.sigBytes=a.length*4,this._process(),this._hash},clone:function(){var i=c.clone.call(this);return i._hash=this._hash.clone(),i}});Z.SHA1=c._createHelper(X),Z.HmacSHA1=c._createHmacHelper(X)})(),b.SHA1})})(rl)),rl.exports}var Al={exports:{}},gG=Al.exports,n0;function jZ(){return n0||(n0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(gG,function(b){return(function(Z){var G=b,m=G.lib,c=m.WordArray,V=m.Hasher,Y=G.algo,X=[],i=[];(function(){function s(x){for(var L=Z.sqrt(x),I=2;I<=L;I++)if(!(x%I))return!1;return!0}function W(x){return(x-(x|0))*4294967296|0}for(var h=2,p=0;p<64;)s(h)&&(p<8&&(X[p]=W(Z.pow(h,1/2))),i[p]=W(Z.pow(h,1/3)),p++),h++})();var a=[],u=Y.SHA256=V.extend({_doReset:function(){this._hash=new c.init(X.slice(0))},_doProcessBlock:function(s,W){for(var h=this._hash.words,p=h[0],x=h[1],L=h[2],I=h[3],R=h[4],S=h[5],K=h[6],o=h[7],J=0;J<64;J++){if(J<16)a[J]=s[W+J]|0;else{var H=a[J-15],y=(H<<25|H>>>7)^(H<<14|H>>>18)^H>>>3,C=a[J-2],k=(C<<15|C>>>17)^(C<<13|C>>>19)^C>>>10;a[J]=y+a[J-7]+k+a[J-16]}var n=R&S^~R&K,z=p&x^p&L^x&L,g=(p<<30|p>>>2)^(p<<19|p>>>13)^(p<<10|p>>>22),M=(R<<26|R>>>6)^(R<<21|R>>>11)^(R<<7|R>>>25),E=o+M+n+i[J]+a[J],v=g+z;o=K,K=S,S=R,R=I+E|0,I=L,L=x,x=p,p=E+v|0}h[0]=h[0]+p|0,h[1]=h[1]+x|0,h[2]=h[2]+L|0,h[3]=h[3]+I|0,h[4]=h[4]+R|0,h[5]=h[5]+S|0,h[6]=h[6]+K|0,h[7]=h[7]+o|0},_doFinalize:function(){var s=this._data,W=s.words,h=this._nDataBytes*8,p=s.sigBytes*8;return W[p>>>5]|=128<<24-p%32,W[(p+64>>>9<<4)+14]=Z.floor(h/4294967296),W[(p+64>>>9<<4)+15]=h,s.sigBytes=W.length*4,this._process(),this._hash},clone:function(){var s=V.clone.call(this);return s._hash=this._hash.clone(),s}});G.SHA256=V._createHelper(u),G.HmacSHA256=V._createHmacHelper(u)})(Math),b.SHA256})})(Al)),Al.exports}var ql={exports:{}},MG=ql.exports,k0;function eG(){return k0||(k0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),jZ())})(MG,function(b){return(function(){var Z=b,G=Z.lib,m=G.WordArray,c=Z.algo,V=c.SHA256,Y=c.SHA224=V.extend({_doReset:function(){this._hash=new m.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var X=V._doFinalize.call(this);return X.sigBytes-=4,X}});Z.SHA224=V._createHelper(Y),Z.HmacSHA224=V._createHmacHelper(Y)})(),b.SHA224})})(ql)),ql.exports}var _l={exports:{}},vG=_l.exports,F0;function nb(){return F0||(F0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),nZ())})(vG,function(b){return(function(){var Z=b,G=Z.lib,m=G.Hasher,c=Z.x64,V=c.Word,Y=c.WordArray,X=Z.algo;function i(){return V.create.apply(V,arguments)}var a=[i(1116352408,3609767458),i(1899447441,602891725),i(3049323471,3964484399),i(3921009573,2173295548),i(961987163,4081628472),i(1508970993,3053834265),i(2453635748,2937671579),i(2870763221,3664609560),i(3624381080,2734883394),i(310598401,1164996542),i(607225278,1323610764),i(1426881987,3590304994),i(1925078388,4068182383),i(2162078206,991336113),i(2614888103,633803317),i(3248222580,3479774868),i(3835390401,2666613458),i(4022224774,944711139),i(264347078,2341262773),i(604807628,2007800933),i(770255983,1495990901),i(1249150122,1856431235),i(1555081692,3175218132),i(1996064986,2198950837),i(2554220882,3999719339),i(2821834349,766784016),i(2952996808,2566594879),i(3210313671,3203337956),i(3336571891,1034457026),i(3584528711,2466948901),i(113926993,3758326383),i(338241895,168717936),i(666307205,1188179964),i(773529912,1546045734),i(1294757372,1522805485),i(1396182291,2643833823),i(1695183700,2343527390),i(1986661051,1014477480),i(2177026350,1206759142),i(2456956037,344077627),i(2730485921,1290863460),i(2820302411,3158454273),i(3259730800,3505952657),i(3345764771,106217008),i(3516065817,3606008344),i(3600352804,1432725776),i(4094571909,1467031594),i(275423344,851169720),i(430227734,3100823752),i(506948616,1363258195),i(659060556,3750685593),i(883997877,3785050280),i(958139571,3318307427),i(1322822218,3812723403),i(1537002063,2003034995),i(1747873779,3602036899),i(1955562222,1575990012),i(2024104815,1125592928),i(2227730452,2716904306),i(2361852424,442776044),i(2428436474,593698344),i(2756734187,3733110249),i(3204031479,2999351573),i(3329325298,3815920427),i(3391569614,3928383900),i(3515267271,566280711),i(3940187606,3454069534),i(4118630271,4000239992),i(116418474,1914138554),i(174292421,2731055270),i(289380356,3203993006),i(460393269,320620315),i(685471733,587496836),i(852142971,1086792851),i(1017036298,365543100),i(1126000580,2618297676),i(1288033470,3409855158),i(1501505948,4234509866),i(1607167915,987167468),i(1816402316,1246189591)],u=[];(function(){for(var W=0;W<80;W++)u[W]=i()})();var s=X.SHA512=m.extend({_doReset:function(){this._hash=new Y.init([new V.init(1779033703,4089235720),new V.init(3144134277,2227873595),new V.init(1013904242,4271175723),new V.init(2773480762,1595750129),new V.init(1359893119,2917565137),new V.init(2600822924,725511199),new V.init(528734635,4215389547),new V.init(1541459225,327033209)])},_doProcessBlock:function(W,h){for(var p=this._hash.words,x=p[0],L=p[1],I=p[2],R=p[3],S=p[4],K=p[5],o=p[6],J=p[7],H=x.high,y=x.low,C=L.high,k=L.low,n=I.high,z=I.low,g=R.high,M=R.low,E=S.high,v=S.low,B=K.high,w=K.low,N=o.high,T=o.low,U=J.high,F=J.low,j=H,O=y,q=C,Q=k,yl=n,hl=z,kZ=g,Sl=M,dl=E,ll=v,Hl=B,Kl=w,zl=N,ol=T,FZ=U,tl=F,Gl=0;Gl<80;Gl++){var bl,ml,gl=u[Gl];if(Gl<16)ml=gl.high=W[h+Gl*2]|0,bl=gl.low=W[h+Gl*2+1]|0;else{var PZ=u[Gl-15],sl=PZ.high,Cl=PZ.low,kb=(sl>>>1|Cl<<31)^(sl>>>8|Cl<<24)^sl>>>7,DZ=(Cl>>>1|sl<<31)^(Cl>>>8|sl<<24)^(Cl>>>7|sl<<25),rZ=u[Gl-2],Rl=rZ.high,Jl=rZ.low,Fb=(Rl>>>19|Jl<<13)^(Rl<<3|Jl>>>29)^Rl>>>6,AZ=(Jl>>>19|Rl<<13)^(Jl<<3|Rl>>>29)^(Jl>>>6|Rl<<26),qZ=u[Gl-7],Tb=qZ.high,Ub=qZ.low,_Z=u[Gl-16],Hb=_Z.high,$Z=_Z.low;bl=DZ+Ub,ml=kb+Tb+(bl>>>0<DZ>>>0?1:0),bl=bl+AZ,ml=ml+Fb+(bl>>>0<AZ>>>0?1:0),bl=bl+$Z,ml=ml+Hb+(bl>>>0<$Z>>>0?1:0),gl.high=ml,gl.low=bl}var zb=dl&Hl^~dl&zl,l0=ll&Kl^~ll&ol,gb=j&q^j&yl^q&yl,Mb=O&Q^O&hl^Q&hl,eb=(j>>>28|O<<4)^(j<<30|O>>>2)^(j<<25|O>>>7),Z0=(O>>>28|j<<4)^(O<<30|j>>>2)^(O<<25|j>>>7),vb=(dl>>>14|ll<<18)^(dl>>>18|ll<<14)^(dl<<23|ll>>>9),Qb=(ll>>>14|dl<<18)^(ll>>>18|dl<<14)^(ll<<23|dl>>>9),b0=a[Gl],fb=b0.high,d0=b0.low,Zl=tl+Qb,Wl=FZ+vb+(Zl>>>0<tl>>>0?1:0),Zl=Zl+l0,Wl=Wl+zb+(Zl>>>0<l0>>>0?1:0),Zl=Zl+d0,Wl=Wl+fb+(Zl>>>0<d0>>>0?1:0),Zl=Zl+bl,Wl=Wl+ml+(Zl>>>0<bl>>>0?1:0),G0=Z0+Mb,wb=eb+gb+(G0>>>0<Z0>>>0?1:0);FZ=zl,tl=ol,zl=Hl,ol=Kl,Hl=dl,Kl=ll,ll=Sl+Zl|0,dl=kZ+Wl+(ll>>>0<Sl>>>0?1:0)|0,kZ=yl,Sl=hl,yl=q,hl=Q,q=j,Q=O,O=Zl+G0|0,j=Wl+wb+(O>>>0<Zl>>>0?1:0)|0}y=x.low=y+O,x.high=H+j+(y>>>0<O>>>0?1:0),k=L.low=k+Q,L.high=C+q+(k>>>0<Q>>>0?1:0),z=I.low=z+hl,I.high=n+yl+(z>>>0<hl>>>0?1:0),M=R.low=M+Sl,R.high=g+kZ+(M>>>0<Sl>>>0?1:0),v=S.low=v+ll,S.high=E+dl+(v>>>0<ll>>>0?1:0),w=K.low=w+Kl,K.high=B+Hl+(w>>>0<Kl>>>0?1:0),T=o.low=T+ol,o.high=N+zl+(T>>>0<ol>>>0?1:0),F=J.low=F+tl,J.high=U+FZ+(F>>>0<tl>>>0?1:0)},_doFinalize:function(){var W=this._data,h=W.words,p=this._nDataBytes*8,x=W.sigBytes*8;h[x>>>5]|=128<<24-x%32,h[(x+128>>>10<<5)+30]=Math.floor(p/4294967296),h[(x+128>>>10<<5)+31]=p,W.sigBytes=h.length*4,this._process();var L=this._hash.toX32();return L},clone:function(){var W=m.clone.call(this);return W._hash=this._hash.clone(),W},blockSize:1024/32});Z.SHA512=m._createHelper(s),Z.HmacSHA512=m._createHmacHelper(s)})(),b.SHA512})})(_l)),_l.exports}var $l={exports:{}},QG=$l.exports,T0;function fG(){return T0||(T0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),nZ(),nb())})(QG,function(b){return(function(){var Z=b,G=Z.x64,m=G.Word,c=G.WordArray,V=Z.algo,Y=V.SHA512,X=V.SHA384=Y.extend({_doReset:function(){this._hash=new c.init([new m.init(3418070365,3238371032),new m.init(1654270250,914150663),new m.init(2438529370,812702999),new m.init(355462360,4144912697),new m.init(1731405415,4290775857),new m.init(2394180231,1750603025),new m.init(3675008525,1694076839),new m.init(1203062813,3204075428)])},_doFinalize:function(){var i=Y._doFinalize.call(this);return i.sigBytes-=16,i}});Z.SHA384=Y._createHelper(X),Z.HmacSHA384=Y._createHmacHelper(X)})(),b.SHA384})})($l)),$l.exports}var lZ={exports:{}},wG=lZ.exports,U0;function BG(){return U0||(U0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),nZ())})(wG,function(b){return(function(Z){var G=b,m=G.lib,c=m.WordArray,V=m.Hasher,Y=G.x64,X=Y.Word,i=G.algo,a=[],u=[],s=[];(function(){for(var p=1,x=0,L=0;L<24;L++){a[p+5*x]=(L+1)*(L+2)/2%64;var I=x%5,R=(2*p+3*x)%5;p=I,x=R}for(var p=0;p<5;p++)for(var x=0;x<5;x++)u[p+5*x]=x+(2*p+3*x)%5*5;for(var S=1,K=0;K<24;K++){for(var o=0,J=0,H=0;H<7;H++){if(S&1){var y=(1<<H)-1;y<32?J^=1<<y:o^=1<<y-32}S&128?S=S<<1^113:S<<=1}s[K]=X.create(o,J)}})();var W=[];(function(){for(var p=0;p<25;p++)W[p]=X.create()})();var h=i.SHA3=V.extend({cfg:V.cfg.extend({outputLength:512}),_doReset:function(){for(var p=this._state=[],x=0;x<25;x++)p[x]=new X.init;this.blockSize=(1600-2*this.cfg.outputLength)/32},_doProcessBlock:function(p,x){for(var L=this._state,I=this.blockSize/2,R=0;R<I;R++){var S=p[x+2*R],K=p[x+2*R+1];S=(S<<8|S>>>24)&16711935|(S<<24|S>>>8)&4278255360,K=(K<<8|K>>>24)&16711935|(K<<24|K>>>8)&4278255360;var o=L[R];o.high^=K,o.low^=S}for(var J=0;J<24;J++){for(var H=0;H<5;H++){for(var y=0,C=0,k=0;k<5;k++){var o=L[H+5*k];y^=o.high,C^=o.low}var n=W[H];n.high=y,n.low=C}for(var H=0;H<5;H++)for(var z=W[(H+4)%5],g=W[(H+1)%5],M=g.high,E=g.low,y=z.high^(M<<1|E>>>31),C=z.low^(E<<1|M>>>31),k=0;k<5;k++){var o=L[H+5*k];o.high^=y,o.low^=C}for(var v=1;v<25;v++){var y,C,o=L[v],B=o.high,w=o.low,N=a[v];N<32?(y=B<<N|w>>>32-N,C=w<<N|B>>>32-N):(y=w<<N-32|B>>>64-N,C=B<<N-32|w>>>64-N);var T=W[u[v]];T.high=y,T.low=C}var U=W[0],F=L[0];U.high=F.high,U.low=F.low;for(var H=0;H<5;H++)for(var k=0;k<5;k++){var v=H+5*k,o=L[v],j=W[v],O=W[(H+1)%5+5*k],q=W[(H+2)%5+5*k];o.high=j.high^~O.high&q.high,o.low=j.low^~O.low&q.low}var o=L[0],Q=s[J];o.high^=Q.high,o.low^=Q.low}},_doFinalize:function(){var p=this._data,x=p.words;this._nDataBytes*8;var L=p.sigBytes*8,I=this.blockSize*32;x[L>>>5]|=1<<24-L%32,x[(Z.ceil((L+1)/I)*I>>>5)-1]|=128,p.sigBytes=x.length*4,this._process();for(var R=this._state,S=this.cfg.outputLength/8,K=S/8,o=[],J=0;J<K;J++){var H=R[J],y=H.high,C=H.low;y=(y<<8|y>>>24)&16711935|(y<<24|y>>>8)&4278255360,C=(C<<8|C>>>24)&16711935|(C<<24|C>>>8)&4278255360,o.push(C),o.push(y)}return new c.init(o,S)},clone:function(){for(var p=V.clone.call(this),x=p._state=this._state.slice(0),L=0;L<25;L++)x[L]=x[L].clone();return p}});G.SHA3=V._createHelper(h),G.HmacSHA3=V._createHmacHelper(h)})(Math),b.SHA3})})(lZ)),lZ.exports}var ZZ={exports:{}},EG=ZZ.exports,H0;function jG(){return H0||(H0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(EG,function(b){return(function(Z){var G=b,m=G.lib,c=m.WordArray,V=m.Hasher,Y=G.algo,X=c.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),i=c.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),a=c.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),u=c.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),s=c.create([0,1518500249,1859775393,2400959708,2840853838]),W=c.create([1352829926,1548603684,1836072691,2053994217,0]),h=Y.RIPEMD160=V.extend({_doReset:function(){this._hash=c.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(K,o){for(var J=0;J<16;J++){var H=o+J,y=K[H];K[H]=(y<<8|y>>>24)&16711935|(y<<24|y>>>8)&4278255360}var C=this._hash.words,k=s.words,n=W.words,z=X.words,g=i.words,M=a.words,E=u.words,v,B,w,N,T,U,F,j,O,q;U=v=C[0],F=B=C[1],j=w=C[2],O=N=C[3],q=T=C[4];for(var Q,J=0;J<80;J+=1)Q=v+K[o+z[J]]|0,J<16?Q+=p(B,w,N)+k[0]:J<32?Q+=x(B,w,N)+k[1]:J<48?Q+=L(B,w,N)+k[2]:J<64?Q+=I(B,w,N)+k[3]:Q+=R(B,w,N)+k[4],Q=Q|0,Q=S(Q,M[J]),Q=Q+T|0,v=T,T=N,N=S(w,10),w=B,B=Q,Q=U+K[o+g[J]]|0,J<16?Q+=R(F,j,O)+n[0]:J<32?Q+=I(F,j,O)+n[1]:J<48?Q+=L(F,j,O)+n[2]:J<64?Q+=x(F,j,O)+n[3]:Q+=p(F,j,O)+n[4],Q=Q|0,Q=S(Q,E[J]),Q=Q+q|0,U=q,q=O,O=S(j,10),j=F,F=Q;Q=C[1]+w+O|0,C[1]=C[2]+N+q|0,C[2]=C[3]+T+U|0,C[3]=C[4]+v+F|0,C[4]=C[0]+B+j|0,C[0]=Q},_doFinalize:function(){var K=this._data,o=K.words,J=this._nDataBytes*8,H=K.sigBytes*8;o[H>>>5]|=128<<24-H%32,o[(H+64>>>9<<4)+14]=(J<<8|J>>>24)&16711935|(J<<24|J>>>8)&4278255360,K.sigBytes=(o.length+1)*4,this._process();for(var y=this._hash,C=y.words,k=0;k<5;k++){var n=C[k];C[k]=(n<<8|n>>>24)&16711935|(n<<24|n>>>8)&4278255360}return y},clone:function(){var K=V.clone.call(this);return K._hash=this._hash.clone(),K}});function p(K,o,J){return K^o^J}function x(K,o,J){return K&o|~K&J}function L(K,o,J){return(K|~o)^J}function I(K,o,J){return K&J|o&~J}function R(K,o,J){return K^(o|~J)}function S(K,o){return K<<o|K>>>32-o}G.RIPEMD160=V._createHelper(h),G.HmacRIPEMD160=V._createHmacHelper(h)})(),b.RIPEMD160})})(ZZ)),ZZ.exports}var bZ={exports:{}},OG=bZ.exports,z0;function OZ(){return z0||(z0=1,(function(l,d){(function(b,Z){l.exports=Z(f())})(OG,function(b){(function(){var Z=b,G=Z.lib,m=G.Base,c=Z.enc,V=c.Utf8,Y=Z.algo;Y.HMAC=m.extend({init:function(X,i){X=this._hasher=new X.init,typeof i=="string"&&(i=V.parse(i));var a=X.blockSize,u=a*4;i.sigBytes>u&&(i=X.finalize(i)),i.clamp();for(var s=this._oKey=i.clone(),W=this._iKey=i.clone(),h=s.words,p=W.words,x=0;x<a;x++)h[x]^=1549556828,p[x]^=909522486;s.sigBytes=W.sigBytes=u,this.reset()},reset:function(){var X=this._hasher;X.reset(),X.update(this._iKey)},update:function(X){return this._hasher.update(X),this},finalize:function(X){var i=this._hasher,a=i.finalize(X);i.reset();var u=i.finalize(this._oKey.clone().concat(a));return u}})})()})})(bZ)),bZ.exports}var dZ={exports:{}},PG=dZ.exports,g0;function DG(){return g0||(g0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),jZ(),OZ())})(PG,function(b){return(function(){var Z=b,G=Z.lib,m=G.Base,c=G.WordArray,V=Z.algo,Y=V.SHA256,X=V.HMAC,i=V.PBKDF2=m.extend({cfg:m.extend({keySize:128/32,hasher:Y,iterations:25e4}),init:function(a){this.cfg=this.cfg.extend(a)},compute:function(a,u){for(var s=this.cfg,W=X.create(s.hasher,a),h=c.create(),p=c.create([1]),x=h.words,L=p.words,I=s.keySize,R=s.iterations;x.length<I;){var S=W.update(u).finalize(p);W.reset();for(var K=S.words,o=K.length,J=S,H=1;H<R;H++){J=W.finalize(J),W.reset();for(var y=J.words,C=0;C<o;C++)K[C]^=y[C]}h.concat(S),L[0]++}return h.sigBytes=I*4,h}});Z.PBKDF2=function(a,u,s){return i.create(s).compute(a,u)}})(),b.PBKDF2})})(dZ)),dZ.exports}var GZ={exports:{}},rG=GZ.exports,M0;function Vl(){return M0||(M0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Nb(),OZ())})(rG,function(b){return(function(){var Z=b,G=Z.lib,m=G.Base,c=G.WordArray,V=Z.algo,Y=V.MD5,X=V.EvpKDF=m.extend({cfg:m.extend({keySize:128/32,hasher:Y,iterations:1}),init:function(i){this.cfg=this.cfg.extend(i)},compute:function(i,a){for(var u,s=this.cfg,W=s.hasher.create(),h=c.create(),p=h.words,x=s.keySize,L=s.iterations;p.length<x;){u&&W.update(u),u=W.update(i).finalize(a),W.reset();for(var I=1;I<L;I++)u=W.finalize(u),W.reset();h.concat(u)}return h.sigBytes=x*4,h}});Z.EvpKDF=function(i,a,u){return X.create(u).compute(i,a)}})(),b.EvpKDF})})(GZ)),GZ.exports}var XZ={exports:{}},AG=XZ.exports,e0;function D(){return e0||(e0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Vl())})(AG,function(b){b.lib.Cipher||(function(Z){var G=b,m=G.lib,c=m.Base,V=m.WordArray,Y=m.BufferedBlockAlgorithm,X=G.enc;X.Utf8;var i=X.Base64,a=G.algo,u=a.EvpKDF,s=m.Cipher=Y.extend({cfg:c.extend(),createEncryptor:function(y,C){return this.create(this._ENC_XFORM_MODE,y,C)},createDecryptor:function(y,C){return this.create(this._DEC_XFORM_MODE,y,C)},init:function(y,C,k){this.cfg=this.cfg.extend(k),this._xformMode=y,this._key=C,this.reset()},reset:function(){Y.reset.call(this),this._doReset()},process:function(y){return this._append(y),this._process()},finalize:function(y){y&&this._append(y);var C=this._doFinalize();return C},keySize:128/32,ivSize:128/32,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:(function(){function y(C){return typeof C=="string"?H:K}return function(C){return{encrypt:function(k,n,z){return y(n).encrypt(C,k,n,z)},decrypt:function(k,n,z){return y(n).decrypt(C,k,n,z)}}}})()});m.StreamCipher=s.extend({_doFinalize:function(){var y=this._process(!0);return y},blockSize:1});var W=G.mode={},h=m.BlockCipherMode=c.extend({createEncryptor:function(y,C){return this.Encryptor.create(y,C)},createDecryptor:function(y,C){return this.Decryptor.create(y,C)},init:function(y,C){this._cipher=y,this._iv=C}}),p=W.CBC=(function(){var y=h.extend();y.Encryptor=y.extend({processBlock:function(k,n){var z=this._cipher,g=z.blockSize;C.call(this,k,n,g),z.encryptBlock(k,n),this._prevBlock=k.slice(n,n+g)}}),y.Decryptor=y.extend({processBlock:function(k,n){var z=this._cipher,g=z.blockSize,M=k.slice(n,n+g);z.decryptBlock(k,n),C.call(this,k,n,g),this._prevBlock=M}});function C(k,n,z){var g,M=this._iv;M?(g=M,this._iv=Z):g=this._prevBlock;for(var E=0;E<z;E++)k[n+E]^=g[E]}return y})(),x=G.pad={},L=x.Pkcs7={pad:function(y,C){for(var k=C*4,n=k-y.sigBytes%k,z=n<<24|n<<16|n<<8|n,g=[],M=0;M<n;M+=4)g.push(z);var E=V.create(g,n);y.concat(E)},unpad:function(y){var C=y.words[y.sigBytes-1>>>2]&255;y.sigBytes-=C}};m.BlockCipher=s.extend({cfg:s.cfg.extend({mode:p,padding:L}),reset:function(){var y;s.reset.call(this);var C=this.cfg,k=C.iv,n=C.mode;this._xformMode==this._ENC_XFORM_MODE?y=n.createEncryptor:(y=n.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==y?this._mode.init(this,k&&k.words):(this._mode=y.call(n,this,k&&k.words),this._mode.__creator=y)},_doProcessBlock:function(y,C){this._mode.processBlock(y,C)},_doFinalize:function(){var y,C=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(C.pad(this._data,this.blockSize),y=this._process(!0)):(y=this._process(!0),C.unpad(y)),y},blockSize:128/32});var I=m.CipherParams=c.extend({init:function(y){this.mixIn(y)},toString:function(y){return(y||this.formatter).stringify(this)}}),R=G.format={},S=R.OpenSSL={stringify:function(y){var C,k=y.ciphertext,n=y.salt;return n?C=V.create([1398893684,1701076831]).concat(n).concat(k):C=k,C.toString(i)},parse:function(y){var C,k=i.parse(y),n=k.words;return n[0]==1398893684&&n[1]==1701076831&&(C=V.create(n.slice(2,4)),n.splice(0,4),k.sigBytes-=16),I.create({ciphertext:k,salt:C})}},K=m.SerializableCipher=c.extend({cfg:c.extend({format:S}),encrypt:function(y,C,k,n){n=this.cfg.extend(n);var z=y.createEncryptor(k,n),g=z.finalize(C),M=z.cfg;return I.create({ciphertext:g,key:k,iv:M.iv,algorithm:y,mode:M.mode,padding:M.padding,blockSize:y.blockSize,formatter:n.format})},decrypt:function(y,C,k,n){n=this.cfg.extend(n),C=this._parse(C,n.format);var z=y.createDecryptor(k,n).finalize(C.ciphertext);return z},_parse:function(y,C){return typeof y=="string"?C.parse(y,this):y}}),o=G.kdf={},J=o.OpenSSL={execute:function(y,C,k,n,z){if(n||(n=V.random(64/8)),z)var g=u.create({keySize:C+k,hasher:z}).compute(y,n);else var g=u.create({keySize:C+k}).compute(y,n);var M=V.create(g.words.slice(C),k*4);return g.sigBytes=C*4,I.create({key:g,iv:M,salt:n})}},H=m.PasswordBasedCipher=K.extend({cfg:K.cfg.extend({kdf:J}),encrypt:function(y,C,k,n){n=this.cfg.extend(n);var z=n.kdf.execute(k,y.keySize,y.ivSize,n.salt,n.hasher);n.iv=z.iv;var g=K.encrypt.call(this,y,C,z.key,n);return g.mixIn(z),g},decrypt:function(y,C,k,n){n=this.cfg.extend(n),C=this._parse(C,n.format);var z=n.kdf.execute(k,y.keySize,y.ivSize,C.salt,n.hasher);n.iv=z.iv;var g=K.decrypt.call(this,y,C,z.key,n);return g}})})()})})(XZ)),XZ.exports}var iZ={exports:{}},qG=iZ.exports,v0;function _G(){return v0||(v0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(qG,function(b){return b.mode.CFB=(function(){var Z=b.lib.BlockCipherMode.extend();Z.Encryptor=Z.extend({processBlock:function(m,c){var V=this._cipher,Y=V.blockSize;G.call(this,m,c,Y,V),this._prevBlock=m.slice(c,c+Y)}}),Z.Decryptor=Z.extend({processBlock:function(m,c){var V=this._cipher,Y=V.blockSize,X=m.slice(c,c+Y);G.call(this,m,c,Y,V),this._prevBlock=X}});function G(m,c,V,Y){var X,i=this._iv;i?(X=i.slice(0),this._iv=void 0):X=this._prevBlock,Y.encryptBlock(X,0);for(var a=0;a<V;a++)m[c+a]^=X[a]}return Z})(),b.mode.CFB})})(iZ)),iZ.exports}var mZ={exports:{}},$G=mZ.exports,Q0;function lX(){return Q0||(Q0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})($G,function(b){return b.mode.CTR=(function(){var Z=b.lib.BlockCipherMode.extend(),G=Z.Encryptor=Z.extend({processBlock:function(m,c){var V=this._cipher,Y=V.blockSize,X=this._iv,i=this._counter;X&&(i=this._counter=X.slice(0),this._iv=void 0);var a=i.slice(0);V.encryptBlock(a,0),i[Y-1]=i[Y-1]+1|0;for(var u=0;u<Y;u++)m[c+u]^=a[u]}});return Z.Decryptor=G,Z})(),b.mode.CTR})})(mZ)),mZ.exports}var WZ={exports:{}},ZX=WZ.exports,f0;function bX(){return f0||(f0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(ZX,function(b){return b.mode.CTRGladman=(function(){var Z=b.lib.BlockCipherMode.extend();function G(V){if((V>>24&255)===255){var Y=V>>16&255,X=V>>8&255,i=V&255;Y===255?(Y=0,X===255?(X=0,i===255?i=0:++i):++X):++Y,V=0,V+=Y<<16,V+=X<<8,V+=i}else V+=1<<24;return V}function m(V){return(V[0]=G(V[0]))===0&&(V[1]=G(V[1])),V}var c=Z.Encryptor=Z.extend({processBlock:function(V,Y){var X=this._cipher,i=X.blockSize,a=this._iv,u=this._counter;a&&(u=this._counter=a.slice(0),this._iv=void 0),m(u);var s=u.slice(0);X.encryptBlock(s,0);for(var W=0;W<i;W++)V[Y+W]^=s[W]}});return Z.Decryptor=c,Z})(),b.mode.CTRGladman})})(WZ)),WZ.exports}var VZ={exports:{}},dX=VZ.exports,w0;function GX(){return w0||(w0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(dX,function(b){return b.mode.OFB=(function(){var Z=b.lib.BlockCipherMode.extend(),G=Z.Encryptor=Z.extend({processBlock:function(m,c){var V=this._cipher,Y=V.blockSize,X=this._iv,i=this._keystream;X&&(i=this._keystream=X.slice(0),this._iv=void 0),V.encryptBlock(i,0);for(var a=0;a<Y;a++)m[c+a]^=i[a]}});return Z.Decryptor=G,Z})(),b.mode.OFB})})(VZ)),VZ.exports}var cZ={exports:{}},XX=cZ.exports,B0;function iX(){return B0||(B0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(XX,function(b){return b.mode.ECB=(function(){var Z=b.lib.BlockCipherMode.extend();return Z.Encryptor=Z.extend({processBlock:function(G,m){this._cipher.encryptBlock(G,m)}}),Z.Decryptor=Z.extend({processBlock:function(G,m){this._cipher.decryptBlock(G,m)}}),Z})(),b.mode.ECB})})(cZ)),cZ.exports}var uZ={exports:{}},mX=uZ.exports,E0;function WX(){return E0||(E0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(mX,function(b){return b.pad.AnsiX923={pad:function(Z,G){var m=Z.sigBytes,c=G*4,V=c-m%c,Y=m+V-1;Z.clamp(),Z.words[Y>>>2]|=V<<24-Y%4*8,Z.sigBytes+=V},unpad:function(Z){var G=Z.words[Z.sigBytes-1>>>2]&255;Z.sigBytes-=G}},b.pad.Ansix923})})(uZ)),uZ.exports}var pZ={exports:{}},VX=pZ.exports,j0;function cX(){return j0||(j0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(VX,function(b){return b.pad.Iso10126={pad:function(Z,G){var m=G*4,c=m-Z.sigBytes%m;Z.concat(b.lib.WordArray.random(c-1)).concat(b.lib.WordArray.create([c<<24],1))},unpad:function(Z){var G=Z.words[Z.sigBytes-1>>>2]&255;Z.sigBytes-=G}},b.pad.Iso10126})})(pZ)),pZ.exports}var IZ={exports:{}},uX=IZ.exports,O0;function pX(){return O0||(O0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(uX,function(b){return b.pad.Iso97971={pad:function(Z,G){Z.concat(b.lib.WordArray.create([2147483648],1)),b.pad.ZeroPadding.pad(Z,G)},unpad:function(Z){b.pad.ZeroPadding.unpad(Z),Z.sigBytes--}},b.pad.Iso97971})})(IZ)),IZ.exports}var LZ={exports:{}},IX=LZ.exports,P0;function LX(){return P0||(P0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(IX,function(b){return b.pad.ZeroPadding={pad:function(Z,G){var m=G*4;Z.clamp(),Z.sigBytes+=m-(Z.sigBytes%m||m)},unpad:function(Z){for(var G=Z.words,m=Z.sigBytes-1,m=Z.sigBytes-1;m>=0;m--)if(G[m>>>2]>>>24-m%4*8&255){Z.sigBytes=m+1;break}}},b.pad.ZeroPadding})})(LZ)),LZ.exports}var hZ={exports:{}},hX=hZ.exports,D0;function sX(){return D0||(D0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(hX,function(b){return b.pad.NoPadding={pad:function(){},unpad:function(){}},b.pad.NoPadding})})(hZ)),hZ.exports}var sZ={exports:{}},RX=sZ.exports,r0;function YX(){return r0||(r0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),D())})(RX,function(b){return(function(Z){var G=b,m=G.lib,c=m.CipherParams,V=G.enc,Y=V.Hex,X=G.format;X.Hex={stringify:function(i){return i.ciphertext.toString(Y)},parse:function(i){var a=Y.parse(i);return c.create({ciphertext:a})}}})(),b.format.Hex})})(sZ)),sZ.exports}var RZ={exports:{}},aX=RZ.exports,A0;function xX(){return A0||(A0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Il(),Ll(),Vl(),D())})(aX,function(b){return(function(){var Z=b,G=Z.lib,m=G.BlockCipher,c=Z.algo,V=[],Y=[],X=[],i=[],a=[],u=[],s=[],W=[],h=[],p=[];(function(){for(var I=[],R=0;R<256;R++)R<128?I[R]=R<<1:I[R]=R<<1^283;for(var S=0,K=0,R=0;R<256;R++){var o=K^K<<1^K<<2^K<<3^K<<4;o=o>>>8^o&255^99,V[S]=o,Y[o]=S;var J=I[S],H=I[J],y=I[H],C=I[o]*257^o*16843008;X[S]=C<<24|C>>>8,i[S]=C<<16|C>>>16,a[S]=C<<8|C>>>24,u[S]=C;var C=y*16843009^H*65537^J*257^S*16843008;s[o]=C<<24|C>>>8,W[o]=C<<16|C>>>16,h[o]=C<<8|C>>>24,p[o]=C,S?(S=J^I[I[I[y^J]]],K^=I[I[K]]):S=K=1}})();var x=[0,1,2,4,8,16,32,64,128,27,54],L=c.AES=m.extend({_doReset:function(){var I;if(!(this._nRounds&&this._keyPriorReset===this._key)){for(var R=this._keyPriorReset=this._key,S=R.words,K=R.sigBytes/4,o=this._nRounds=K+6,J=(o+1)*4,H=this._keySchedule=[],y=0;y<J;y++)y<K?H[y]=S[y]:(I=H[y-1],y%K?K>6&&y%K==4&&(I=V[I>>>24]<<24|V[I>>>16&255]<<16|V[I>>>8&255]<<8|V[I&255]):(I=I<<8|I>>>24,I=V[I>>>24]<<24|V[I>>>16&255]<<16|V[I>>>8&255]<<8|V[I&255],I^=x[y/K|0]<<24),H[y]=H[y-K]^I);for(var C=this._invKeySchedule=[],k=0;k<J;k++){var y=J-k;if(k%4)var I=H[y];else var I=H[y-4];k<4||y<=4?C[k]=I:C[k]=s[V[I>>>24]]^W[V[I>>>16&255]]^h[V[I>>>8&255]]^p[V[I&255]]}}},encryptBlock:function(I,R){this._doCryptBlock(I,R,this._keySchedule,X,i,a,u,V)},decryptBlock:function(I,R){var S=I[R+1];I[R+1]=I[R+3],I[R+3]=S,this._doCryptBlock(I,R,this._invKeySchedule,s,W,h,p,Y);var S=I[R+1];I[R+1]=I[R+3],I[R+3]=S},_doCryptBlock:function(I,R,S,K,o,J,H,y){for(var C=this._nRounds,k=I[R]^S[0],n=I[R+1]^S[1],z=I[R+2]^S[2],g=I[R+3]^S[3],M=4,E=1;E<C;E++){var v=K[k>>>24]^o[n>>>16&255]^J[z>>>8&255]^H[g&255]^S[M++],B=K[n>>>24]^o[z>>>16&255]^J[g>>>8&255]^H[k&255]^S[M++],w=K[z>>>24]^o[g>>>16&255]^J[k>>>8&255]^H[n&255]^S[M++],N=K[g>>>24]^o[k>>>16&255]^J[n>>>8&255]^H[z&255]^S[M++];k=v,n=B,z=w,g=N}var v=(y[k>>>24]<<24|y[n>>>16&255]<<16|y[z>>>8&255]<<8|y[g&255])^S[M++],B=(y[n>>>24]<<24|y[z>>>16&255]<<16|y[g>>>8&255]<<8|y[k&255])^S[M++],w=(y[z>>>24]<<24|y[g>>>16&255]<<16|y[k>>>8&255]<<8|y[n&255])^S[M++],N=(y[g>>>24]<<24|y[k>>>16&255]<<16|y[n>>>8&255]<<8|y[z&255])^S[M++];I[R]=v,I[R+1]=B,I[R+2]=w,I[R+3]=N},keySize:256/32});Z.AES=m._createHelper(L)})(),b.AES})})(RZ)),RZ.exports}var YZ={exports:{}},yX=YZ.exports,q0;function SX(){return q0||(q0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Il(),Ll(),Vl(),D())})(yX,function(b){return(function(){var Z=b,G=Z.lib,m=G.WordArray,c=G.BlockCipher,V=Z.algo,Y=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],X=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],i=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],a=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],u=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],s=V.DES=c.extend({_doReset:function(){for(var x=this._key,L=x.words,I=[],R=0;R<56;R++){var S=Y[R]-1;I[R]=L[S>>>5]>>>31-S%32&1}for(var K=this._subKeys=[],o=0;o<16;o++){for(var J=K[o]=[],H=i[o],R=0;R<24;R++)J[R/6|0]|=I[(X[R]-1+H)%28]<<31-R%6,J[4+(R/6|0)]|=I[28+(X[R+24]-1+H)%28]<<31-R%6;J[0]=J[0]<<1|J[0]>>>31;for(var R=1;R<7;R++)J[R]=J[R]>>>(R-1)*4+3;J[7]=J[7]<<5|J[7]>>>27}for(var y=this._invSubKeys=[],R=0;R<16;R++)y[R]=K[15-R]},encryptBlock:function(x,L){this._doCryptBlock(x,L,this._subKeys)},decryptBlock:function(x,L){this._doCryptBlock(x,L,this._invSubKeys)},_doCryptBlock:function(x,L,I){this._lBlock=x[L],this._rBlock=x[L+1],W.call(this,4,252645135),W.call(this,16,65535),h.call(this,2,858993459),h.call(this,8,16711935),W.call(this,1,1431655765);for(var R=0;R<16;R++){for(var S=I[R],K=this._lBlock,o=this._rBlock,J=0,H=0;H<8;H++)J|=a[H][((o^S[H])&u[H])>>>0];this._lBlock=o,this._rBlock=K^J}var y=this._lBlock;this._lBlock=this._rBlock,this._rBlock=y,W.call(this,1,1431655765),h.call(this,8,16711935),h.call(this,2,858993459),W.call(this,16,65535),W.call(this,4,252645135),x[L]=this._lBlock,x[L+1]=this._rBlock},keySize:64/32,ivSize:64/32,blockSize:64/32});function W(x,L){var I=(this._lBlock>>>x^this._rBlock)&L;this._rBlock^=I,this._lBlock^=I<<x}function h(x,L){var I=(this._rBlock>>>x^this._lBlock)&L;this._lBlock^=I,this._rBlock^=I<<x}Z.DES=c._createHelper(s);var p=V.TripleDES=c.extend({_doReset:function(){var x=this._key,L=x.words;if(L.length!==2&&L.length!==4&&L.length<6)throw new Error("Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.");var I=L.slice(0,2),R=L.length<4?L.slice(0,2):L.slice(2,4),S=L.length<6?L.slice(0,2):L.slice(4,6);this._des1=s.createEncryptor(m.create(I)),this._des2=s.createEncryptor(m.create(R)),this._des3=s.createEncryptor(m.create(S))},encryptBlock:function(x,L){this._des1.encryptBlock(x,L),this._des2.decryptBlock(x,L),this._des3.encryptBlock(x,L)},decryptBlock:function(x,L){this._des3.decryptBlock(x,L),this._des2.encryptBlock(x,L),this._des1.decryptBlock(x,L)},keySize:192/32,ivSize:64/32,blockSize:64/32});Z.TripleDES=c._createHelper(p)})(),b.TripleDES})})(YZ)),YZ.exports}var aZ={exports:{}},KX=aZ.exports,_0;function oX(){return _0||(_0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Il(),Ll(),Vl(),D())})(KX,function(b){return(function(){var Z=b,G=Z.lib,m=G.StreamCipher,c=Z.algo,V=c.RC4=m.extend({_doReset:function(){for(var i=this._key,a=i.words,u=i.sigBytes,s=this._S=[],W=0;W<256;W++)s[W]=W;for(var W=0,h=0;W<256;W++){var p=W%u,x=a[p>>>2]>>>24-p%4*8&255;h=(h+s[W]+x)%256;var L=s[W];s[W]=s[h],s[h]=L}this._i=this._j=0},_doProcessBlock:function(i,a){i[a]^=Y.call(this)},keySize:256/32,ivSize:0});function Y(){for(var i=this._S,a=this._i,u=this._j,s=0,W=0;W<4;W++){a=(a+1)%256,u=(u+i[a])%256;var h=i[a];i[a]=i[u],i[u]=h,s|=i[(i[a]+i[u])%256]<<24-W*8}return this._i=a,this._j=u,s}Z.RC4=m._createHelper(V);var X=c.RC4Drop=V.extend({cfg:V.cfg.extend({drop:192}),_doReset:function(){V._doReset.call(this);for(var i=this.cfg.drop;i>0;i--)Y.call(this)}});Z.RC4Drop=m._createHelper(X)})(),b.RC4})})(aZ)),aZ.exports}var xZ={exports:{}},tX=xZ.exports,$0;function CX(){return $0||($0=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Il(),Ll(),Vl(),D())})(tX,function(b){return(function(){var Z=b,G=Z.lib,m=G.StreamCipher,c=Z.algo,V=[],Y=[],X=[],i=c.Rabbit=m.extend({_doReset:function(){for(var u=this._key.words,s=this.cfg.iv,W=0;W<4;W++)u[W]=(u[W]<<8|u[W]>>>24)&16711935|(u[W]<<24|u[W]>>>8)&4278255360;var h=this._X=[u[0],u[3]<<16|u[2]>>>16,u[1],u[0]<<16|u[3]>>>16,u[2],u[1]<<16|u[0]>>>16,u[3],u[2]<<16|u[1]>>>16],p=this._C=[u[2]<<16|u[2]>>>16,u[0]&4294901760|u[1]&65535,u[3]<<16|u[3]>>>16,u[1]&4294901760|u[2]&65535,u[0]<<16|u[0]>>>16,u[2]&4294901760|u[3]&65535,u[1]<<16|u[1]>>>16,u[3]&4294901760|u[0]&65535];this._b=0;for(var W=0;W<4;W++)a.call(this);for(var W=0;W<8;W++)p[W]^=h[W+4&7];if(s){var x=s.words,L=x[0],I=x[1],R=(L<<8|L>>>24)&16711935|(L<<24|L>>>8)&4278255360,S=(I<<8|I>>>24)&16711935|(I<<24|I>>>8)&4278255360,K=R>>>16|S&4294901760,o=S<<16|R&65535;p[0]^=R,p[1]^=K,p[2]^=S,p[3]^=o,p[4]^=R,p[5]^=K,p[6]^=S,p[7]^=o;for(var W=0;W<4;W++)a.call(this)}},_doProcessBlock:function(u,s){var W=this._X;a.call(this),V[0]=W[0]^W[5]>>>16^W[3]<<16,V[1]=W[2]^W[7]>>>16^W[5]<<16,V[2]=W[4]^W[1]>>>16^W[7]<<16,V[3]=W[6]^W[3]>>>16^W[1]<<16;for(var h=0;h<4;h++)V[h]=(V[h]<<8|V[h]>>>24)&16711935|(V[h]<<24|V[h]>>>8)&4278255360,u[s+h]^=V[h]},blockSize:128/32,ivSize:64/32});function a(){for(var u=this._X,s=this._C,W=0;W<8;W++)Y[W]=s[W];s[0]=s[0]+1295307597+this._b|0,s[1]=s[1]+3545052371+(s[0]>>>0<Y[0]>>>0?1:0)|0,s[2]=s[2]+886263092+(s[1]>>>0<Y[1]>>>0?1:0)|0,s[3]=s[3]+1295307597+(s[2]>>>0<Y[2]>>>0?1:0)|0,s[4]=s[4]+3545052371+(s[3]>>>0<Y[3]>>>0?1:0)|0,s[5]=s[5]+886263092+(s[4]>>>0<Y[4]>>>0?1:0)|0,s[6]=s[6]+1295307597+(s[5]>>>0<Y[5]>>>0?1:0)|0,s[7]=s[7]+3545052371+(s[6]>>>0<Y[6]>>>0?1:0)|0,this._b=s[7]>>>0<Y[7]>>>0?1:0;for(var W=0;W<8;W++){var h=u[W]+s[W],p=h&65535,x=h>>>16,L=((p*p>>>17)+p*x>>>15)+x*x,I=((h&4294901760)*h|0)+((h&65535)*h|0);X[W]=L^I}u[0]=X[0]+(X[7]<<16|X[7]>>>16)+(X[6]<<16|X[6]>>>16)|0,u[1]=X[1]+(X[0]<<8|X[0]>>>24)+X[7]|0,u[2]=X[2]+(X[1]<<16|X[1]>>>16)+(X[0]<<16|X[0]>>>16)|0,u[3]=X[3]+(X[2]<<8|X[2]>>>24)+X[1]|0,u[4]=X[4]+(X[3]<<16|X[3]>>>16)+(X[2]<<16|X[2]>>>16)|0,u[5]=X[5]+(X[4]<<8|X[4]>>>24)+X[3]|0,u[6]=X[6]+(X[5]<<16|X[5]>>>16)+(X[4]<<16|X[4]>>>16)|0,u[7]=X[7]+(X[6]<<8|X[6]>>>24)+X[5]|0}Z.Rabbit=m._createHelper(i)})(),b.Rabbit})})(xZ)),xZ.exports}var yZ={exports:{}},JX=yZ.exports,lb;function NX(){return lb||(lb=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Il(),Ll(),Vl(),D())})(JX,function(b){return(function(){var Z=b,G=Z.lib,m=G.StreamCipher,c=Z.algo,V=[],Y=[],X=[],i=c.RabbitLegacy=m.extend({_doReset:function(){var u=this._key.words,s=this.cfg.iv,W=this._X=[u[0],u[3]<<16|u[2]>>>16,u[1],u[0]<<16|u[3]>>>16,u[2],u[1]<<16|u[0]>>>16,u[3],u[2]<<16|u[1]>>>16],h=this._C=[u[2]<<16|u[2]>>>16,u[0]&4294901760|u[1]&65535,u[3]<<16|u[3]>>>16,u[1]&4294901760|u[2]&65535,u[0]<<16|u[0]>>>16,u[2]&4294901760|u[3]&65535,u[1]<<16|u[1]>>>16,u[3]&4294901760|u[0]&65535];this._b=0;for(var p=0;p<4;p++)a.call(this);for(var p=0;p<8;p++)h[p]^=W[p+4&7];if(s){var x=s.words,L=x[0],I=x[1],R=(L<<8|L>>>24)&16711935|(L<<24|L>>>8)&4278255360,S=(I<<8|I>>>24)&16711935|(I<<24|I>>>8)&4278255360,K=R>>>16|S&4294901760,o=S<<16|R&65535;h[0]^=R,h[1]^=K,h[2]^=S,h[3]^=o,h[4]^=R,h[5]^=K,h[6]^=S,h[7]^=o;for(var p=0;p<4;p++)a.call(this)}},_doProcessBlock:function(u,s){var W=this._X;a.call(this),V[0]=W[0]^W[5]>>>16^W[3]<<16,V[1]=W[2]^W[7]>>>16^W[5]<<16,V[2]=W[4]^W[1]>>>16^W[7]<<16,V[3]=W[6]^W[3]>>>16^W[1]<<16;for(var h=0;h<4;h++)V[h]=(V[h]<<8|V[h]>>>24)&16711935|(V[h]<<24|V[h]>>>8)&4278255360,u[s+h]^=V[h]},blockSize:128/32,ivSize:64/32});function a(){for(var u=this._X,s=this._C,W=0;W<8;W++)Y[W]=s[W];s[0]=s[0]+1295307597+this._b|0,s[1]=s[1]+3545052371+(s[0]>>>0<Y[0]>>>0?1:0)|0,s[2]=s[2]+886263092+(s[1]>>>0<Y[1]>>>0?1:0)|0,s[3]=s[3]+1295307597+(s[2]>>>0<Y[2]>>>0?1:0)|0,s[4]=s[4]+3545052371+(s[3]>>>0<Y[3]>>>0?1:0)|0,s[5]=s[5]+886263092+(s[4]>>>0<Y[4]>>>0?1:0)|0,s[6]=s[6]+1295307597+(s[5]>>>0<Y[5]>>>0?1:0)|0,s[7]=s[7]+3545052371+(s[6]>>>0<Y[6]>>>0?1:0)|0,this._b=s[7]>>>0<Y[7]>>>0?1:0;for(var W=0;W<8;W++){var h=u[W]+s[W],p=h&65535,x=h>>>16,L=((p*p>>>17)+p*x>>>15)+x*x,I=((h&4294901760)*h|0)+((h&65535)*h|0);X[W]=L^I}u[0]=X[0]+(X[7]<<16|X[7]>>>16)+(X[6]<<16|X[6]>>>16)|0,u[1]=X[1]+(X[0]<<8|X[0]>>>24)+X[7]|0,u[2]=X[2]+(X[1]<<16|X[1]>>>16)+(X[0]<<16|X[0]>>>16)|0,u[3]=X[3]+(X[2]<<8|X[2]>>>24)+X[1]|0,u[4]=X[4]+(X[3]<<16|X[3]>>>16)+(X[2]<<16|X[2]>>>16)|0,u[5]=X[5]+(X[4]<<8|X[4]>>>24)+X[3]|0,u[6]=X[6]+(X[5]<<16|X[5]>>>16)+(X[4]<<16|X[4]>>>16)|0,u[7]=X[7]+(X[6]<<8|X[6]>>>24)+X[5]|0}Z.RabbitLegacy=m._createHelper(i)})(),b.RabbitLegacy})})(yZ)),yZ.exports}var SZ={exports:{}},nX=SZ.exports,Zb;function kX(){return Zb||(Zb=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),Il(),Ll(),Vl(),D())})(nX,function(b){return(function(){var Z=b,G=Z.lib,m=G.BlockCipher,c=Z.algo;const V=16,Y=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],X=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]];var i={pbox:[],sbox:[]};function a(p,x){let L=x>>24&255,I=x>>16&255,R=x>>8&255,S=x&255,K=p.sbox[0][L]+p.sbox[1][I];return K=K^p.sbox[2][R],K=K+p.sbox[3][S],K}function u(p,x,L){let I=x,R=L,S;for(let K=0;K<V;++K)I=I^p.pbox[K],R=a(p,I)^R,S=I,I=R,R=S;return S=I,I=R,R=S,R=R^p.pbox[V],I=I^p.pbox[V+1],{left:I,right:R}}function s(p,x,L){let I=x,R=L,S;for(let K=V+1;K>1;--K)I=I^p.pbox[K],R=a(p,I)^R,S=I,I=R,R=S;return S=I,I=R,R=S,R=R^p.pbox[1],I=I^p.pbox[0],{left:I,right:R}}function W(p,x,L){for(let o=0;o<4;o++){p.sbox[o]=[];for(let J=0;J<256;J++)p.sbox[o][J]=X[o][J]}let I=0;for(let o=0;o<V+2;o++)p.pbox[o]=Y[o]^x[I],I++,I>=L&&(I=0);let R=0,S=0,K=0;for(let o=0;o<V+2;o+=2)K=u(p,R,S),R=K.left,S=K.right,p.pbox[o]=R,p.pbox[o+1]=S;for(let o=0;o<4;o++)for(let J=0;J<256;J+=2)K=u(p,R,S),R=K.left,S=K.right,p.sbox[o][J]=R,p.sbox[o][J+1]=S;return!0}var h=c.Blowfish=m.extend({_doReset:function(){if(this._keyPriorReset!==this._key){var p=this._keyPriorReset=this._key,x=p.words,L=p.sigBytes/4;W(i,x,L)}},encryptBlock:function(p,x){var L=u(i,p[x],p[x+1]);p[x]=L.left,p[x+1]=L.right},decryptBlock:function(p,x){var L=s(i,p[x],p[x+1]);p[x]=L.left,p[x+1]=L.right},blockSize:64/32,keySize:128/32,ivSize:64/32});Z.Blowfish=m._createHelper(h)})(),b.Blowfish})})(SZ)),SZ.exports}var FX=fl.exports,bb;function TX(){return bb||(bb=1,(function(l,d){(function(b,Z,G){l.exports=Z(f(),nZ(),NG(),kG(),Il(),UG(),Ll(),Nb(),jZ(),eG(),nb(),fG(),BG(),jG(),OZ(),DG(),Vl(),D(),_G(),lX(),bX(),GX(),iX(),WX(),cX(),pX(),LX(),sX(),YX(),xX(),SX(),oX(),CX(),NX(),kX())})(FX,function(b){return b})})(fl)),fl.exports}var UX=TX();const db=aG(UX);class HX{constructor(d,b,Z){this.appKey=b||"24460774",this.appSecret=Z||"vphyI4pTqEVk4lT67jVe",this.baseURL=d||""}_generateSignature(d,b){const Z=["POST","*/*","application/json",`x-ca-key:${b["X-Ca-Key"]}`,d].join(`
7
+ `),G=db.HmacSHA256(Z,this.appSecret);return db.enc.Base64.stringify(G)}request(d){const b={Accept:"*/*","Content-Type":"application/json","X-Ca-Key":this.appKey,"X-Ca-Signature-Headers":"x-ca-key"};return b["X-Ca-Signature"]=this._generateSignature(d.url,b),P({baseURL:this.baseURL,method:d.method||"POST",url:d.url,headers:b,data:d.data})}}const zX=["id"],gX={__name:"index",props:{videoName:{type:String,default:""},channelCode:{type:String,default:""},streamType:{type:Number,default:1},baseUrl:{type:String,default:""},appKey:{type:String,default:"24460774"},appSecret:{type:String,default:"vphyI4pTqEVk4lT67jVe"}},emits:["double-click"],setup(l,{emit:d}){const b=l,Z=d,G=r.ref(null),m=r.ref(""),c=r.computed(()=>`video-window-${b.channelCode}`),V=()=>new Promise((I,R)=>{if(window.JSPlugin){I();return}const S=document.createElement("script");let K;try{K=new URL("data:text/javascript;base64,IWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNle3ZhciBuLGk9dCgpO2ZvcihuIGluIGkpKCJvYmplY3QiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW25dPWlbbl19fSh3aW5kb3csZnVuY3Rpb24oKXtyZXR1cm4gbj1bZnVuY3Rpb24oZSx0LGhzKXshZnVuY3Rpb24oZHMpe3ZhciBsczsvLyEgbW9tZW50LmpzCi8vISB2ZXJzaW9uIDogMi4zMC4xCi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzCi8vISBsaWNlbnNlIDogTUlUCi8vISBtb21lbnRqcy5jb20KZHMuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt2YXIgdCxyO2Z1bmN0aW9uIGgoKXtyZXR1cm4gdC5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZShlKXt0PWV9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEFycmF5fHxPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBBcnJheV0ifWZ1bmN0aW9uIG8oZSl7cmV0dXJuIGUhPW51bGwmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IE9iamVjdF0ifWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9ZnVuY3Rpb24gZChlKXtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcylyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSkubGVuZ3RoPT09MDtlbHNle3ZhciB0O2Zvcih0IGluIGUpaWYodShlLHQpKXJldHVybiBmYWxzZTtyZXR1cm4gdHJ1ZX19ZnVuY3Rpb24gbChlKXtyZXR1cm4gZT09PXZvaWQgMH1mdW5jdGlvbiBjKGUpe3JldHVybiB0eXBlb2YgZT09PSJudW1iZXIifHxPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSk9PT0iW29iamVjdCBOdW1iZXJdIn1mdW5jdGlvbiBhKGUpe3JldHVybiBlIGluc3RhbmNlb2YgRGF0ZXx8T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpPT09IltvYmplY3QgRGF0ZV0ifWZ1bmN0aW9uIGkoZSx0KXt2YXIgbj1bXSxpLHI9ZS5sZW5ndGg7Zm9yKGk9MDtpPHI7KytpKW4ucHVzaCh0KGVbaV0saSkpO3JldHVybiBufWZ1bmN0aW9uIF8oZSx0KXtmb3IodmFyIG4gaW4gdClpZih1KHQsbikpZVtuXT10W25dO2lmKHUodCwidG9TdHJpbmciKSllLnRvU3RyaW5nPXQudG9TdHJpbmc7aWYodSh0LCJ2YWx1ZU9mIikpZS52YWx1ZU9mPXQudmFsdWVPZjtyZXR1cm4gZX1mdW5jdGlvbiBmKGUsdCxuLGkpe3JldHVybiBKbihlLHQsbixpLHRydWUpLnV0YygpfWZ1bmN0aW9uIG4oKXtyZXR1cm57ZW1wdHk6ZmFsc2UsdW51c2VkVG9rZW5zOltdLHVudXNlZElucHV0OltdLG92ZXJmbG93Oi0yLGNoYXJzTGVmdE92ZXI6MCxudWxsSW5wdXQ6ZmFsc2UsaW52YWxpZEVyYTpudWxsLGludmFsaWRNb250aDpudWxsLGludmFsaWRGb3JtYXQ6ZmFsc2UsdXNlckludmFsaWRhdGVkOmZhbHNlLGlzbzpmYWxzZSxwYXJzZWREYXRlUGFydHM6W10sZXJhOm51bGwsbWVyaWRpZW06bnVsbCxyZmMyODIyOmZhbHNlLHdlZWtkYXlNaXNtYXRjaDpmYWxzZX19ZnVuY3Rpb24gbShlKXtpZihlLl9wZj09bnVsbCllLl9wZj1uKCk7cmV0dXJuIGUuX3BmfWlmKEFycmF5LnByb3RvdHlwZS5zb21lKXI9QXJyYXkucHJvdG90eXBlLnNvbWU7ZWxzZSByPWZ1bmN0aW9uKGUpe3ZhciB0PU9iamVjdCh0aGlzKSxuPXQubGVuZ3RoPj4+MCxpO2ZvcihpPTA7aTxuO2krKylpZihpIGluIHQmJmUuY2FsbCh0aGlzLHRbaV0saSx0KSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2V9O2Z1bmN0aW9uIHAoZSl7dmFyIHQ9bnVsbCxuPWZhbHNlLGk9ZS5fZCYmIWlzTmFOKGUuX2QuZ2V0VGltZSgpKTtpZihpKXt0PW0oZSk7bj1yLmNhbGwodC5wYXJzZWREYXRlUGFydHMsZnVuY3Rpb24oZSl7cmV0dXJuIGUhPW51bGx9KTtpPXQub3ZlcmZsb3c8MCYmIXQuZW1wdHkmJiF0LmludmFsaWRFcmEmJiF0LmludmFsaWRNb250aCYmIXQuaW52YWxpZFdlZWtkYXkmJiF0LndlZWtkYXlNaXNtYXRjaCYmIXQubnVsbElucHV0JiYhdC5pbnZhbGlkRm9ybWF0JiYhdC51c2VySW52YWxpZGF0ZWQmJighdC5tZXJpZGllbXx8dC5tZXJpZGllbSYmbik7aWYoZS5fc3RyaWN0KWk9aSYmdC5jaGFyc0xlZnRPdmVyPT09MCYmdC51bnVzZWRUb2tlbnMubGVuZ3RoPT09MCYmdC5iaWdIb3VyPT09dW5kZWZpbmVkfWlmKE9iamVjdC5pc0Zyb3plbj09bnVsbHx8IU9iamVjdC5pc0Zyb3plbihlKSllLl9pc1ZhbGlkPWk7ZWxzZSByZXR1cm4gaTtyZXR1cm4gZS5faXNWYWxpZH1mdW5jdGlvbiB5KGUpe3ZhciB0PWYoTmFOKTtpZihlIT1udWxsKV8obSh0KSxlKTtlbHNlIG0odCkudXNlckludmFsaWRhdGVkPXRydWU7cmV0dXJuIHR9dmFyIHY9aC5tb21lbnRQcm9wZXJ0aWVzPVtdLGc9ZmFsc2U7ZnVuY3Rpb24gTShlLHQpe3ZhciBuLGkscixhPXYubGVuZ3RoO2lmKCFsKHQuX2lzQU1vbWVudE9iamVjdCkpZS5faXNBTW9tZW50T2JqZWN0PXQuX2lzQU1vbWVudE9iamVjdDtpZighbCh0Ll9pKSllLl9pPXQuX2k7aWYoIWwodC5fZikpZS5fZj10Ll9mO2lmKCFsKHQuX2wpKWUuX2w9dC5fbDtpZighbCh0Ll9zdHJpY3QpKWUuX3N0cmljdD10Ll9zdHJpY3Q7aWYoIWwodC5fdHptKSllLl90em09dC5fdHptO2lmKCFsKHQuX2lzVVRDKSllLl9pc1VUQz10Ll9pc1VUQztpZighbCh0Ll9vZmZzZXQpKWUuX29mZnNldD10Ll9vZmZzZXQ7aWYoIWwodC5fcGYpKWUuX3BmPW0odCk7aWYoIWwodC5fbG9jYWxlKSllLl9sb2NhbGU9dC5fbG9jYWxlO2lmKGE+MClmb3Iobj0wO248YTtuKyspe2k9dltuXTtyPXRbaV07aWYoIWwocikpZVtpXT1yfXJldHVybiBlfWZ1bmN0aW9uIEwoZSl7TSh0aGlzLGUpO3RoaXMuX2Q9bmV3IERhdGUoZS5fZCE9bnVsbD9lLl9kLmdldFRpbWUoKTpOYU4pO2lmKCF0aGlzLmlzVmFsaWQoKSl0aGlzLl9kPW5ldyBEYXRlKE5hTik7aWYoZz09PWZhbHNlKXtnPXRydWU7aC51cGRhdGVPZmZzZXQodGhpcyk7Zz1mYWxzZX19ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEx8fGUhPW51bGwmJmUuX2lzQU1vbWVudE9iamVjdCE9bnVsbH1mdW5jdGlvbiBrKGUpe2lmKGguc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPT09ZmFsc2UmJnR5cGVvZiBjb25zb2xlIT09InVuZGVmaW5lZCImJmNvbnNvbGUud2Fybiljb25zb2xlLndhcm4oIkRlcHJlY2F0aW9uIHdhcm5pbmc6ICIrZSl9ZnVuY3Rpb24gYihhLHMpe3ZhciBvPXRydWU7cmV0dXJuIF8oZnVuY3Rpb24oKXtpZihoLmRlcHJlY2F0aW9uSGFuZGxlciE9bnVsbCloLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLGEpO2lmKG8pe3ZhciBlPVtdLHQsbixpLHI9YXJndW1lbnRzLmxlbmd0aDtmb3Iobj0wO248cjtuKyspe3Q9IiI7aWYodHlwZW9mIGFyZ3VtZW50c1tuXT09PSJvYmplY3QiKXt0Kz0iXG5bIituKyJdICI7Zm9yKGkgaW4gYXJndW1lbnRzWzBdKWlmKHUoYXJndW1lbnRzWzBdLGkpKXQrPWkrIjogIithcmd1bWVudHNbMF1baV0rIiwgIjt0PXQuc2xpY2UoMCwtMil9ZWxzZSB0PWFyZ3VtZW50c1tuXTtlLnB1c2godCl9ayhhKyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChlKS5qb2luKCIiKSsiXG4iKyhuZXcgRXJyb3IpLnN0YWNrKTtvPWZhbHNlfXJldHVybiBzLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0scyl9dmFyIHc9e30sRDtmdW5jdGlvbiBUKGUsdCl7aWYoaC5kZXByZWNhdGlvbkhhbmRsZXIhPW51bGwpaC5kZXByZWNhdGlvbkhhbmRsZXIoZSx0KTtpZighd1tlXSl7ayh0KTt3W2VdPXRydWV9fWZ1bmN0aW9uIEUoZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbiE9PSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgRnVuY3Rpb258fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9ZnVuY3Rpb24gWShlKXt2YXIgdCxuO2ZvcihuIGluIGUpaWYodShlLG4pKXt0PWVbbl07aWYoRSh0KSl0aGlzW25dPXQ7ZWxzZSB0aGlzWyJfIituXT10fXRoaXMuX2NvbmZpZz1lO3RoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50PW5ldyBSZWdFeHAoKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlfHx0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSsifCIrL1xkezEsMn0vLnNvdXJjZSl9ZnVuY3Rpb24gUChlLHQpe3ZhciBuPV8oe30sZSksaTtmb3IoaSBpbiB0KWlmKHUodCxpKSlpZihvKGVbaV0pJiZvKHRbaV0pKXtuW2ldPXt9O18obltpXSxlW2ldKTtfKG5baV0sdFtpXSl9ZWxzZSBpZih0W2ldIT1udWxsKW5baV09dFtpXTtlbHNlIGRlbGV0ZSBuW2ldO2ZvcihpIGluIGUpaWYodShlLGkpJiYhdSh0LGkpJiZvKGVbaV0pKW5baV09Xyh7fSxuW2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBDKGUpe2lmKGUhPW51bGwpdGhpcy5zZXQoZSl9aWYoaC5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3M9ZmFsc2UsaC5kZXByZWNhdGlvbkhhbmRsZXI9bnVsbCxPYmplY3Qua2V5cylEPU9iamVjdC5rZXlzO2Vsc2UgRD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdO2Zvcih0IGluIGUpaWYodShlLHQpKW4ucHVzaCh0KTtyZXR1cm4gbn07dmFyIFI9e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifTtmdW5jdGlvbiBBKGUsdCxuKXt2YXIgaT10aGlzLl9jYWxlbmRhcltlXXx8dGhpcy5fY2FsZW5kYXJbInNhbWVFbHNlIl07cmV0dXJuIEUoaSk/aS5jYWxsKHQsbik6aX1mdW5jdGlvbiB4KGUsdCxuKXt2YXIgaT0iIitNYXRoLmFicyhlKSxyPXQtaS5sZW5ndGgsYT1lPj0wO3JldHVybihhP24/IisiOiIiOiItIikrTWF0aC5wb3coMTAsTWF0aC5tYXgoMCxyKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkraX12YXIgTz0vKFxbW15cW10qXF0pfChcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxJPS8oXFtbXlxbXSpcXSl8KFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFc9e30sSD17fTtmdW5jdGlvbiBqKGUsdCxuLGkpe3ZhciByPWk7aWYodHlwZW9mIGk9PT0ic3RyaW5nIilyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbaV0oKX07aWYoZSlIW2VdPXI7aWYodClIW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIHgoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksdFsxXSx0WzJdKX07aWYobilIW25dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZSl9fWZ1bmN0aW9uIEYoZSl7aWYoZS5tYXRjaCgvXFtbXHNcU10vKSlyZXR1cm4gZS5yZXBsYWNlKC9eXFt8XF0kL2csIiIpO3JldHVybiBlLnJlcGxhY2UoL1xcL2csIiIpfWZ1bmN0aW9uIEIoaSl7dmFyIHI9aS5tYXRjaChPKSxlLGE7Zm9yKGU9MCxhPXIubGVuZ3RoO2U8YTtlKyspaWYoSFtyW2VdXSlyW2VdPUhbcltlXV07ZWxzZSByW2VdPUYocltlXSk7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PSIiLG47Zm9yKG49MDtuPGE7bisrKXQrPUUocltuXSk/cltuXS5jYWxsKGUsaSk6cltuXTtyZXR1cm4gdH19ZnVuY3Rpb24gVShlLHQpe2lmKCFlLmlzVmFsaWQoKSlyZXR1cm4gZS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt0PU4odCxlLmxvY2FsZURhdGEoKSk7V1t0XT1XW3RdfHxCKHQpO3JldHVybiBXW3RdKGUpfWZ1bmN0aW9uIE4oZSx0KXt2YXIgbj01O2Z1bmN0aW9uIGkoZSl7cmV0dXJuIHQubG9uZ0RhdGVGb3JtYXQoZSl8fGV9SS5sYXN0SW5kZXg9MDt3aGlsZShuPj0wJiZJLnRlc3QoZSkpe2U9ZS5yZXBsYWNlKEksaSk7SS5sYXN0SW5kZXg9MDtuLT0xfXJldHVybiBlfXZhciB6PXtMVFM6Img6bW06c3MgQSIsTFQ6Img6bW0gQSIsTDoiTU0vREQvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn07ZnVuY3Rpb24gVihlKXt2YXIgdD10aGlzLl9sb25nRGF0ZUZvcm1hdFtlXSxuPXRoaXMuX2xvbmdEYXRlRm9ybWF0W2UudG9VcHBlckNhc2UoKV07aWYodHx8IW4pcmV0dXJuIHQ7dGhpcy5fbG9uZ0RhdGVGb3JtYXRbZV09bi5tYXRjaChPKS5tYXAoZnVuY3Rpb24oZSl7aWYoZT09PSJNTU1NInx8ZT09PSJNTSJ8fGU9PT0iREQifHxlPT09ImRkZGQiKXJldHVybiBlLnNsaWNlKDEpO3JldHVybiBlfSkuam9pbigiIik7cmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2VdfXZhciBHPSJJbnZhbGlkIGRhdGUiO2Z1bmN0aW9uIEooKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9dmFyIHE9IiVkIixLPS9cZHsxLDJ9LztmdW5jdGlvbiBYKGUpe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoIiVkIixlKX12YXIgWj17ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsdzoiYSB3ZWVrIix3dzoiJWQgd2Vla3MiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn07ZnVuY3Rpb24gJChlLHQsbixpKXt2YXIgcj10aGlzLl9yZWxhdGl2ZVRpbWVbbl07cmV0dXJuIEUocik/cihlLHQsbixpKTpyLnJlcGxhY2UoLyVkL2ksZSl9ZnVuY3Rpb24gUShlLHQpe3ZhciBuPXRoaXMuX3JlbGF0aXZlVGltZVtlPjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gRShuKT9uKHQpOm4ucmVwbGFjZSgvJXMvaSx0KX12YXIgZWU9e0Q6ImRhdGUiLGRhdGVzOiJkYXRlIixkYXRlOiJkYXRlIixkOiJkYXkiLGRheXM6ImRheSIsZGF5OiJkYXkiLGU6IndlZWtkYXkiLHdlZWtkYXlzOiJ3ZWVrZGF5Iix3ZWVrZGF5OiJ3ZWVrZGF5IixFOiJpc29XZWVrZGF5Iixpc293ZWVrZGF5czoiaXNvV2Vla2RheSIsaXNvd2Vla2RheToiaXNvV2Vla2RheSIsREREOiJkYXlPZlllYXIiLGRheW9meWVhcnM6ImRheU9mWWVhciIsZGF5b2Z5ZWFyOiJkYXlPZlllYXIiLGg6ImhvdXIiLGhvdXJzOiJob3VyIixob3VyOiJob3VyIixtczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kczoibWlsbGlzZWNvbmQiLG1pbGxpc2Vjb25kOiJtaWxsaXNlY29uZCIsbToibWludXRlIixtaW51dGVzOiJtaW51dGUiLG1pbnV0ZToibWludXRlIixNOiJtb250aCIsbW9udGhzOiJtb250aCIsbW9udGg6Im1vbnRoIixROiJxdWFydGVyIixxdWFydGVyczoicXVhcnRlciIscXVhcnRlcjoicXVhcnRlciIsczoic2Vjb25kIixzZWNvbmRzOiJzZWNvbmQiLHNlY29uZDoic2Vjb25kIixnZzoid2Vla1llYXIiLHdlZWt5ZWFyczoid2Vla1llYXIiLHdlZWt5ZWFyOiJ3ZWVrWWVhciIsR0c6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcnM6Imlzb1dlZWtZZWFyIixpc293ZWVreWVhcjoiaXNvV2Vla1llYXIiLHc6IndlZWsiLHdlZWtzOiJ3ZWVrIix3ZWVrOiJ3ZWVrIixXOiJpc29XZWVrIixpc293ZWVrczoiaXNvV2VlayIsaXNvd2VlazoiaXNvV2VlayIseToieWVhciIseWVhcnM6InllYXIiLHllYXI6InllYXIifTtmdW5jdGlvbiB0ZShlKXtyZXR1cm4gdHlwZW9mIGU9PT0ic3RyaW5nIj9lZVtlXXx8ZWVbZS50b0xvd2VyQ2FzZSgpXTp1bmRlZmluZWR9ZnVuY3Rpb24gbmUoZSl7dmFyIHQ9e30sbixpO2ZvcihpIGluIGUpaWYodShlLGkpKXtuPXRlKGkpO2lmKG4pdFtuXT1lW2ldfXJldHVybiB0fXZhciBpZT17ZGF0ZTo5LGRheToxMSx3ZWVrZGF5OjExLGlzb1dlZWtkYXk6MTEsZGF5T2ZZZWFyOjQsaG91cjoxMyxtaWxsaXNlY29uZDoxNixtaW51dGU6MTQsbW9udGg6OCxxdWFydGVyOjcsc2Vjb25kOjE1LHdlZWtZZWFyOjEsaXNvV2Vla1llYXI6MSx3ZWVrOjUsaXNvV2Vlazo1LHllYXI6MX07ZnVuY3Rpb24gcmUoZSl7dmFyIHQ9W10sbjtmb3IobiBpbiBlKWlmKHUoZSxuKSl0LnB1c2goe3VuaXQ6bixwcmlvcml0eTppZVtuXX0pO3Quc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLnByaW9yaXR5LXQucHJpb3JpdHl9KTtyZXR1cm4gdH12YXIgYWU9L1xkLyxzZT0vXGRcZC8sb2U9L1xkezN9Lyx1ZT0vXGR7NH0vLGRlPS9bKy1dP1xkezZ9LyxsZT0vXGRcZD8vLGhlPS9cZFxkXGRcZD8vLGNlPS9cZFxkXGRcZFxkXGQ/LyxfZT0vXGR7MSwzfS8sZmU9L1xkezEsNH0vLG1lPS9bKy1dP1xkezEsNn0vLHBlPS9cZCsvLHllPS9bKy1dP1xkKy8sdmU9L1p8WystXVxkXGQ6P1xkXGQvZ2ksZ2U9L1p8WystXVxkXGQoPzo6P1xkXGQpPy9naSxNZT0vWystXT9cZCsoXC5cZHsxLDN9KT8vLExlPS9bMC05XXswLDI1Nn1bJ2Etelx1MDBBMC1cdTA1RkZcdTA3MDAtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGMDdcdUZGMTAtXHVGRkVGXXsxLDI1Nn18W1x1MDYwMC1cdTA2RkZcL117MSwyNTZ9KFxzKj9bXHUwNjAwLVx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksU2U9L15bMS05XVxkPy8sa2U9L14oWzEtOV1cZHxcZCkvLGJlO2Z1bmN0aW9uIHdlKGUsbixpKXtiZVtlXT1FKG4pP246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSYmaT9pOm59fWZ1bmN0aW9uIERlKGUsdCl7aWYoIXUoYmUsZSkpcmV0dXJuIG5ldyBSZWdFeHAoVGUoZSkpO3JldHVybiBiZVtlXSh0Ll9zdHJpY3QsdC5fbG9jYWxlKX1mdW5jdGlvbiBUZShlKXtyZXR1cm4gRWUoZS5yZXBsYWNlKCJcXCIsIiIpLnJlcGxhY2UoL1xcKFxbKXxcXChcXSl8XFsoW15cXVxbXSopXF18XFwoLikvZyxmdW5jdGlvbihlLHQsbixpLHIpe3JldHVybiB0fHxufHxpfHxyfSkpfWZ1bmN0aW9uIEVlKGUpe3JldHVybiBlLnJlcGxhY2UoL1stXC9cXF4kKis/LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gWWUoZSl7aWYoZTwwKXJldHVybiBNYXRoLmNlaWwoZSl8fDA7ZWxzZSByZXR1cm4gTWF0aC5mbG9vcihlKX1mdW5jdGlvbiBQZShlKXt2YXIgdD0rZSxuPTA7aWYodCE9PTAmJmlzRmluaXRlKHQpKW49WWUodCk7cmV0dXJuIG59dmFyIGJlPXt9LENlPXt9O2Z1bmN0aW9uIFJlKGUsbil7dmFyIHQsaT1uLHI7aWYodHlwZW9mIGU9PT0ic3RyaW5nIillPVtlXTtpZihjKG4pKWk9ZnVuY3Rpb24oZSx0KXt0W25dPVBlKGUpfTtyPWUubGVuZ3RoO2Zvcih0PTA7dDxyO3QrKylDZVtlW3RdXT1pfWZ1bmN0aW9uIEFlKGUscil7UmUoZSxmdW5jdGlvbihlLHQsbixpKXtuLl93PW4uX3d8fHt9O3IoZSxuLl93LG4saSl9KX1mdW5jdGlvbiB4ZShlLHQsbil7aWYodCE9bnVsbCYmdShDZSxlKSlDZVtlXSh0LG4uX2EsbixlKX1mdW5jdGlvbiBPZShlKXtyZXR1cm4gZSU0PT09MCYmZSUxMDAhPT0wfHxlJTQwMD09PTB9dmFyIEllPTAsV2U9MSxIZT0yLGplPTMsRmU9NCxCZT01LFVlPTYsTmU9Nyx6ZT04O2Z1bmN0aW9uIFZlKGUpe3JldHVybiBPZShlKT8zNjY6MzY1fWooIlkiLDAsMCxmdW5jdGlvbigpe3ZhciBlPXRoaXMueWVhcigpO3JldHVybiBlPD05OTk5P3goZSw0KToiKyIrZX0pLGooMCxbIllZIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueWVhcigpJTEwMH0pLGooMCxbIllZWVkiLDRdLDAsInllYXIiKSxqKDAsWyJZWVlZWSIsNV0sMCwieWVhciIpLGooMCxbIllZWVlZWSIsNix0cnVlXSwwLCJ5ZWFyIiksd2UoIlkiLHllKSx3ZSgiWVkiLGxlLHNlKSx3ZSgiWVlZWSIsZmUsdWUpLHdlKCJZWVlZWSIsbWUsZGUpLHdlKCJZWVlZWVkiLG1lLGRlKSxSZShbIllZWVlZIiwiWVlZWVlZIl0sSWUpLFJlKCJZWVlZIixmdW5jdGlvbihlLHQpe3RbSWVdPWUubGVuZ3RoPT09Mj9oLnBhcnNlVHdvRGlnaXRZZWFyKGUpOlBlKGUpfSksUmUoIllZIixmdW5jdGlvbihlLHQpe3RbSWVdPWgucGFyc2VUd29EaWdpdFllYXIoZSl9KSxSZSgiWSIsZnVuY3Rpb24oZSx0KXt0W0llXT1wYXJzZUludChlLDEwKX0pLGgucGFyc2VUd29EaWdpdFllYXI9ZnVuY3Rpb24oZSl7cmV0dXJuIFBlKGUpKyhQZShlKT42OD8xOTAwOjJlMyl9O3ZhciBHZT1LZSgiRnVsbFllYXIiLHRydWUpLEplO2Z1bmN0aW9uIHFlKCl7cmV0dXJuIE9lKHRoaXMueWVhcigpKX1mdW5jdGlvbiBLZSh0LG4pe3JldHVybiBmdW5jdGlvbihlKXtpZihlIT1udWxsKXtaZSh0aGlzLHQsZSk7aC51cGRhdGVPZmZzZXQodGhpcyxuKTtyZXR1cm4gdGhpc31lbHNlIHJldHVybiBYZSh0aGlzLHQpfX1mdW5jdGlvbiBYZShlLHQpe2lmKCFlLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3ZhciBuPWUuX2QsaT1lLl9pc1VUQztzd2l0Y2godCl7Y2FzZSJNaWxsaXNlY29uZHMiOnJldHVybiBpP24uZ2V0VVRDTWlsbGlzZWNvbmRzKCk6bi5nZXRNaWxsaXNlY29uZHMoKTtjYXNlIlNlY29uZHMiOnJldHVybiBpP24uZ2V0VVRDU2Vjb25kcygpOm4uZ2V0U2Vjb25kcygpO2Nhc2UiTWludXRlcyI6cmV0dXJuIGk/bi5nZXRVVENNaW51dGVzKCk6bi5nZXRNaW51dGVzKCk7Y2FzZSJIb3VycyI6cmV0dXJuIGk/bi5nZXRVVENIb3VycygpOm4uZ2V0SG91cnMoKTtjYXNlIkRhdGUiOnJldHVybiBpP24uZ2V0VVRDRGF0ZSgpOm4uZ2V0RGF0ZSgpO2Nhc2UiRGF5IjpyZXR1cm4gaT9uLmdldFVUQ0RheSgpOm4uZ2V0RGF5KCk7Y2FzZSJNb250aCI6cmV0dXJuIGk/bi5nZXRVVENNb250aCgpOm4uZ2V0TW9udGgoKTtjYXNlIkZ1bGxZZWFyIjpyZXR1cm4gaT9uLmdldFVUQ0Z1bGxZZWFyKCk6bi5nZXRGdWxsWWVhcigpO2RlZmF1bHQ6cmV0dXJuIE5hTn19ZnVuY3Rpb24gWmUoZSx0LG4pe3ZhciBpLHIsYSxzLG87aWYoIWUuaXNWYWxpZCgpfHxpc05hTihuKSlyZXR1cm47aT1lLl9kO3I9ZS5faXNVVEM7c3dpdGNoKHQpe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gdm9pZChyP2kuc2V0VVRDTWlsbGlzZWNvbmRzKG4pOmkuc2V0TWlsbGlzZWNvbmRzKG4pKTtjYXNlIlNlY29uZHMiOnJldHVybiB2b2lkKHI/aS5zZXRVVENTZWNvbmRzKG4pOmkuc2V0U2Vjb25kcyhuKSk7Y2FzZSJNaW51dGVzIjpyZXR1cm4gdm9pZChyP2kuc2V0VVRDTWludXRlcyhuKTppLnNldE1pbnV0ZXMobikpO2Nhc2UiSG91cnMiOnJldHVybiB2b2lkKHI/aS5zZXRVVENIb3VycyhuKTppLnNldEhvdXJzKG4pKTtjYXNlIkRhdGUiOnJldHVybiB2b2lkKHI/aS5zZXRVVENEYXRlKG4pOmkuc2V0RGF0ZShuKSk7Y2FzZSJGdWxsWWVhciI6YnJlYWs7ZGVmYXVsdDpyZXR1cm59YT1uO3M9ZS5tb250aCgpO289ZS5kYXRlKCk7bz1vPT09MjkmJnM9PT0xJiYhT2UoYSk/Mjg6bzt2b2lkKHI/aS5zZXRVVENGdWxsWWVhcihhLHMsbyk6aS5zZXRGdWxsWWVhcihhLHMsbykpfWZ1bmN0aW9uICRlKGUpe2U9dGUoZSk7aWYoRSh0aGlzW2VdKSlyZXR1cm4gdGhpc1tlXSgpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFFlKGUsdCl7aWYodHlwZW9mIGU9PT0ib2JqZWN0Iil7ZT1uZShlKTt2YXIgbj1yZShlKSxpLHI9bi5sZW5ndGg7Zm9yKGk9MDtpPHI7aSsrKXRoaXNbbltpXS51bml0XShlW25baV0udW5pdF0pfWVsc2V7ZT10ZShlKTtpZihFKHRoaXNbZV0pKXJldHVybiB0aGlzW2VdKHQpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGV0KGUsdCl7cmV0dXJuKGUldCt0KSV0fWlmKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKUplPUFycmF5LnByb3RvdHlwZS5pbmRleE9mO2Vsc2UgSmU9ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQ9MDt0PHRoaXMubGVuZ3RoOysrdClpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX07ZnVuY3Rpb24gdHQoZSx0KXtpZihpc05hTihlKXx8aXNOYU4odCkpcmV0dXJuIE5hTjt2YXIgbj1ldCh0LDEyKTtlKz0odC1uKS8xMjtyZXR1cm4gbj09PTE/T2UoZSk/Mjk6Mjg6MzEtbiU3JTJ9aigiTSIsWyJNTSIsMl0sIk1vIixmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vbnRoKCkrMX0pLGooIk1NTSIsMCwwLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLGUpfSksaigiTU1NTSIsMCwwLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcyxlKX0pLHdlKCJNIixsZSxTZSksd2UoIk1NIixsZSxzZSksd2UoIk1NTSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5tb250aHNTaG9ydFJlZ2V4KGUpfSksd2UoIk1NTU0iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQubW9udGhzUmVnZXgoZSl9KSxSZShbIk0iLCJNTSJdLGZ1bmN0aW9uKGUsdCl7dFtXZV09UGUoZSktMX0pLFJlKFsiTU1NIiwiTU1NTSJdLGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPW4uX2xvY2FsZS5tb250aHNQYXJzZShlLGksbi5fc3RyaWN0KTtpZihyIT1udWxsKXRbV2VdPXI7ZWxzZSBtKG4pLmludmFsaWRNb250aD1lfSk7dmFyIG50PSJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLGl0PSJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSxydD0vRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT8vLGF0PUxlLHN0PUxlO2Z1bmN0aW9uIG90KGUsdCl7aWYoIWUpcmV0dXJuIHModGhpcy5fbW9udGhzKT90aGlzLl9tb250aHM6dGhpcy5fbW9udGhzWyJzdGFuZGFsb25lIl07cmV0dXJuIHModGhpcy5fbW9udGhzKT90aGlzLl9tb250aHNbZS5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRocy5pc0Zvcm1hdHx8cnQpLnRlc3QodCk/ImZvcm1hdCI6InN0YW5kYWxvbmUiXVtlLm1vbnRoKCldfWZ1bmN0aW9uIHV0KGUsdCl7aWYoIWUpcmV0dXJuIHModGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0WyJzdGFuZGFsb25lIl07cmV0dXJuIHModGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0W2UubW9udGgoKV06dGhpcy5fbW9udGhzU2hvcnRbcnQudGVzdCh0KT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW2UubW9udGgoKV19ZnVuY3Rpb24gZHQoZSx0LG4pe3ZhciBpLHIsYSxzPWUudG9Mb2NhbGVMb3dlckNhc2UoKTtpZighdGhpcy5fbW9udGhzUGFyc2Upe3RoaXMuX21vbnRoc1BhcnNlPVtdO3RoaXMuX2xvbmdNb250aHNQYXJzZT1bXTt0aGlzLl9zaG9ydE1vbnRoc1BhcnNlPVtdO2ZvcihpPTA7aTwxMjsrK2kpe2E9ZihbMmUzLGldKTt0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldPXRoaXMubW9udGhzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLl9sb25nTW9udGhzUGFyc2VbaV09dGhpcy5tb250aHMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKX19aWYobilpZih0PT09Ik1NTSIpe3I9SmUuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLHMpO3JldHVybiByIT09LTE/cjpudWxsfWVsc2V7cj1KZS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxzKTtyZXR1cm4gciE9PS0xP3I6bnVsbH1lbHNlIGlmKHQ9PT0iTU1NIil7cj1KZS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2Uscyk7aWYociE9PS0xKXJldHVybiByO3I9SmUuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2Uscyk7cmV0dXJuIHIhPT0tMT9yOm51bGx9ZWxzZXtyPUplLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLHMpO2lmKHIhPT0tMSlyZXR1cm4gcjtyPUplLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxzKTtyZXR1cm4gciE9PS0xP3I6bnVsbH19ZnVuY3Rpb24gbHQoZSx0LG4pe3ZhciBpLHIsYTtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXJldHVybiBkdC5jYWxsKHRoaXMsZSx0LG4pO2lmKCF0aGlzLl9tb250aHNQYXJzZSl7dGhpcy5fbW9udGhzUGFyc2U9W107dGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdO3RoaXMuX3Nob3J0TW9udGhzUGFyc2U9W119Zm9yKGk9MDtpPDEyO2krKyl7cj1mKFsyZTMsaV0pO2lmKG4mJiF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pe3RoaXMuX2xvbmdNb250aHNQYXJzZVtpXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRocyhyLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIik7dGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXT1uZXcgUmVnRXhwKCJeIit0aGlzLm1vbnRoc1Nob3J0KHIsIiIpLnJlcGxhY2UoIi4iLCIiKSsiJCIsImkiKX1pZighbiYmIXRoaXMuX21vbnRoc1BhcnNlW2ldKXthPSJeIit0aGlzLm1vbnRocyhyLCIiKSsifF4iK3RoaXMubW9udGhzU2hvcnQociwiIik7dGhpcy5fbW9udGhzUGFyc2VbaV09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpfWlmKG4mJnQ9PT0iTU1NTSImJnRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KGUpKXJldHVybiBpO2Vsc2UgaWYobiYmdD09PSJNTU0iJiZ0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QoZSkpcmV0dXJuIGk7ZWxzZSBpZighbiYmdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChlKSlyZXR1cm4gaX19ZnVuY3Rpb24gaHQoZSx0KXtpZighZS5pc1ZhbGlkKCkpcmV0dXJuIGU7aWYodHlwZW9mIHQ9PT0ic3RyaW5nIilpZigvXlxkKyQvLnRlc3QodCkpdD1QZSh0KTtlbHNle3Q9ZS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodCk7aWYoIWModCkpcmV0dXJuIGV9dmFyIG49dCxpPWUuZGF0ZSgpO2k9aTwyOT9pOk1hdGgubWluKGksdHQoZS55ZWFyKCksbikpO3ZvaWQoZS5faXNVVEM/ZS5fZC5zZXRVVENNb250aChuLGkpOmUuX2Quc2V0TW9udGgobixpKSk7cmV0dXJuIGV9ZnVuY3Rpb24gY3QoZSl7aWYoZSE9bnVsbCl7aHQodGhpcyxlKTtoLnVwZGF0ZU9mZnNldCh0aGlzLHRydWUpO3JldHVybiB0aGlzfWVsc2UgcmV0dXJuIFhlKHRoaXMsIk1vbnRoIil9ZnVuY3Rpb24gX3QoKXtyZXR1cm4gdHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX1mdW5jdGlvbiBmdChlKXtpZih0aGlzLl9tb250aHNQYXJzZUV4YWN0KXtpZighdSh0aGlzLCJfbW9udGhzUmVnZXgiKSlwdC5jYWxsKHRoaXMpO2lmKGUpcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7ZWxzZSByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleH1lbHNle2lmKCF1KHRoaXMsIl9tb250aHNTaG9ydFJlZ2V4IikpdGhpcy5fbW9udGhzU2hvcnRSZWdleD1hdDtyZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCYmZT90aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX21vbnRoc1Nob3J0UmVnZXh9fWZ1bmN0aW9uIG10KGUpe2lmKHRoaXMuX21vbnRoc1BhcnNlRXhhY3Qpe2lmKCF1KHRoaXMsIl9tb250aHNSZWdleCIpKXB0LmNhbGwodGhpcyk7aWYoZSlyZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7ZWxzZSByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXh9ZWxzZXtpZighdSh0aGlzLCJfbW9udGhzUmVnZXgiKSl0aGlzLl9tb250aHNSZWdleD1zdDtyZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXgmJmU/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXh9fWZ1bmN0aW9uIHB0KCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiB0Lmxlbmd0aC1lLmxlbmd0aH12YXIgdD1bXSxuPVtdLGk9W10scixhLHMsbztmb3Iocj0wO3I8MTI7cisrKXthPWYoWzJlMyxyXSk7cz1FZSh0aGlzLm1vbnRoc1Nob3J0KGEsIiIpKTtvPUVlKHRoaXMubW9udGhzKGEsIiIpKTt0LnB1c2gocyk7bi5wdXNoKG8pO2kucHVzaChvKTtpLnB1c2gocyl9dC5zb3J0KGUpO24uc29ydChlKTtpLnNvcnQoZSk7dGhpcy5fbW9udGhzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpO3RoaXMuX21vbnRoc1Nob3J0UmVnZXg9dGhpcy5fbW9udGhzUmVnZXg7dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK24uam9pbigifCIpKyIpIiwiaSIpO3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3Quam9pbigifCIpKyIpIiwiaSIpfWZ1bmN0aW9uIHl0KGUsdCxuLGkscixhLHMpe3ZhciBvO2lmKGU8MTAwJiZlPj0wKXtvPW5ldyBEYXRlKGUrNDAwLHQsbixpLHIsYSxzKTtpZihpc0Zpbml0ZShvLmdldEZ1bGxZZWFyKCkpKW8uc2V0RnVsbFllYXIoZSl9ZWxzZSBvPW5ldyBEYXRlKGUsdCxuLGkscixhLHMpO3JldHVybiBvfWZ1bmN0aW9uIHZ0KGUpe3ZhciB0LG47aWYoZTwxMDAmJmU+PTApe249QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtuWzBdPWUrNDAwO3Q9bmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCxuKSk7aWYoaXNGaW5pdGUodC5nZXRVVENGdWxsWWVhcigpKSl0LnNldFVUQ0Z1bGxZZWFyKGUpfWVsc2UgdD1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpO3JldHVybiB0fWZ1bmN0aW9uIGd0KGUsdCxuKXt2YXIgaT03K3QtbixyPSg3K3Z0KGUsMCxpKS5nZXRVVENEYXkoKS10KSU3O3JldHVybi1yK2ktMX1mdW5jdGlvbiBNdChlLHQsbixpLHIpe3ZhciBhPSg3K24taSklNyxzPWd0KGUsaSxyKSxvPTErNyoodC0xKSthK3MsdSxkO2lmKG88PTApe3U9ZS0xO2Q9VmUodSkrb31lbHNlIGlmKG8+VmUoZSkpe3U9ZSsxO2Q9by1WZShlKX1lbHNle3U9ZTtkPW99cmV0dXJue3llYXI6dSxkYXlPZlllYXI6ZH19ZnVuY3Rpb24gTHQoZSx0LG4pe3ZhciBpPWd0KGUueWVhcigpLHQsbikscj1NYXRoLmZsb29yKChlLmRheU9mWWVhcigpLWktMSkvNykrMSxhLHM7aWYocjwxKXtzPWUueWVhcigpLTE7YT1yK1N0KHMsdCxuKX1lbHNlIGlmKHI+U3QoZS55ZWFyKCksdCxuKSl7YT1yLVN0KGUueWVhcigpLHQsbik7cz1lLnllYXIoKSsxfWVsc2V7cz1lLnllYXIoKTthPXJ9cmV0dXJue3dlZWs6YSx5ZWFyOnN9fWZ1bmN0aW9uIFN0KGUsdCxuKXt2YXIgaT1ndChlLHQsbikscj1ndChlKzEsdCxuKTtyZXR1cm4oVmUoZSktaStyKS83fWZ1bmN0aW9uIGt0KGUpe3JldHVybiBMdChlLHRoaXMuX3dlZWsuZG93LHRoaXMuX3dlZWsuZG95KS53ZWVrfWooInciLFsid3ciLDJdLCJ3byIsIndlZWsiKSxqKCJXIixbIldXIiwyXSwiV28iLCJpc29XZWVrIiksd2UoInciLGxlLFNlKSx3ZSgid3ciLGxlLHNlKSx3ZSgiVyIsbGUsU2UpLHdlKCJXVyIsbGUsc2UpLEFlKFsidyIsInd3IiwiVyIsIldXIl0sZnVuY3Rpb24oZSx0LG4saSl7dFtpLnN1YnN0cigwLDEpXT1QZShlKX0pO3ZhciBidD17ZG93OjAsZG95OjZ9O2Z1bmN0aW9uIHd0KCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fWZ1bmN0aW9uIER0KCl7cmV0dXJuIHRoaXMuX3dlZWsuZG95fWZ1bmN0aW9uIFR0KGUpe3ZhciB0PXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIGU9PW51bGw/dDp0aGlzLmFkZCgoZS10KSo3LCJkIil9ZnVuY3Rpb24gRXQoZSl7dmFyIHQ9THQodGhpcywxLDQpLndlZWs7cmV0dXJuIGU9PW51bGw/dDp0aGlzLmFkZCgoZS10KSo3LCJkIil9ZnVuY3Rpb24gWXQoZSx0KXtpZih0eXBlb2YgZSE9PSJzdHJpbmciKXJldHVybiBlO2lmKCFpc05hTihlKSlyZXR1cm4gcGFyc2VJbnQoZSwxMCk7ZT10LndlZWtkYXlzUGFyc2UoZSk7aWYodHlwZW9mIGU9PT0ibnVtYmVyIilyZXR1cm4gZTtyZXR1cm4gbnVsbH1mdW5jdGlvbiBQdChlLHQpe2lmKHR5cGVvZiBlPT09InN0cmluZyIpcmV0dXJuIHQud2Vla2RheXNQYXJzZShlKSU3fHw3O3JldHVybiBpc05hTihlKT9udWxsOmV9ZnVuY3Rpb24gQ3QoZSx0KXtyZXR1cm4gZS5zbGljZSh0LDcpLmNvbmNhdChlLnNsaWNlKDAsdCkpfWooImQiLDAsImRvIiwiZGF5IiksaigiZGQiLDAsMCxmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyxlKX0pLGooImRkZCIsMCwwLGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsZSl9KSxqKCJkZGRkIiwwLDAsZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsZSl9KSxqKCJlIiwwLDAsIndlZWtkYXkiKSxqKCJFIiwwLDAsImlzb1dlZWtkYXkiKSx3ZSgiZCIsbGUpLHdlKCJlIixsZSksd2UoIkUiLGxlKSx3ZSgiZGQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQud2Vla2RheXNNaW5SZWdleChlKX0pLHdlKCJkZGQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQud2Vla2RheXNTaG9ydFJlZ2V4KGUpfSksd2UoImRkZGQiLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQud2Vla2RheXNSZWdleChlKX0pLEFlKFsiZGQiLCJkZGQiLCJkZGRkIl0sZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9bi5fbG9jYWxlLndlZWtkYXlzUGFyc2UoZSxpLG4uX3N0cmljdCk7aWYociE9bnVsbCl0LmQ9cjtlbHNlIG0obikuaW52YWxpZFdlZWtkYXk9ZX0pLEFlKFsiZCIsImUiLCJFIl0sZnVuY3Rpb24oZSx0LG4saSl7dFtpXT1QZShlKX0pO3ZhciBSdD0iU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksQXQ9IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx4dD0iU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksT3Q9TGUsSXQ9TGUsV3Q9TGU7ZnVuY3Rpb24gSHQoZSx0KXt2YXIgbj1zKHRoaXMuX3dlZWtkYXlzKT90aGlzLl93ZWVrZGF5czp0aGlzLl93ZWVrZGF5c1tlJiZlIT09dHJ1ZSYmdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdCh0KT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiBlPT09dHJ1ZT9DdChuLHRoaXMuX3dlZWsuZG93KTplP25bZS5kYXkoKV06bn1mdW5jdGlvbiBqdChlKXtyZXR1cm4gZT09PXRydWU/Q3QodGhpcy5fd2Vla2RheXNTaG9ydCx0aGlzLl93ZWVrLmRvdyk6ZT90aGlzLl93ZWVrZGF5c1Nob3J0W2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzU2hvcnR9ZnVuY3Rpb24gRnQoZSl7cmV0dXJuIGU9PT10cnVlP0N0KHRoaXMuX3dlZWtkYXlzTWluLHRoaXMuX3dlZWsuZG93KTplP3RoaXMuX3dlZWtkYXlzTWluW2UuZGF5KCldOnRoaXMuX3dlZWtkYXlzTWlufWZ1bmN0aW9uIEJ0KGUsdCxuKXt2YXIgaSxyLGEscz1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2Upe3RoaXMuX3dlZWtkYXlzUGFyc2U9W107dGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdO3RoaXMuX21pbldlZWtkYXlzUGFyc2U9W107Zm9yKGk9MDtpPDc7KytpKXthPWYoWzJlMywxXSkuZGF5KGkpO3RoaXMuX21pbldlZWtkYXlzUGFyc2VbaV09dGhpcy53ZWVrZGF5c01pbihhLCIiKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXT10aGlzLndlZWtkYXlzU2hvcnQoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLl93ZWVrZGF5c1BhcnNlW2ldPXRoaXMud2Vla2RheXMoYSwiIikudG9Mb2NhbGVMb3dlckNhc2UoKX19aWYobilpZih0PT09ImRkZGQiKXtyPUplLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxzKTtyZXR1cm4gciE9PS0xP3I6bnVsbH1lbHNlIGlmKHQ9PT0iZGRkIil7cj1KZS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxzKTtyZXR1cm4gciE9PS0xP3I6bnVsbH1lbHNle3I9SmUuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHMpO3JldHVybiByIT09LTE/cjpudWxsfWVsc2UgaWYodD09PSJkZGRkIil7cj1KZS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2Uscyk7aWYociE9PS0xKXJldHVybiByO3I9SmUuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Uscyk7aWYociE9PS0xKXJldHVybiByO3I9SmUuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLHMpO3JldHVybiByIT09LTE/cjpudWxsfWVsc2UgaWYodD09PSJkZGQiKXtyPUplLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLHMpO2lmKHIhPT0tMSlyZXR1cm4gcjtyPUplLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSxzKTtpZihyIT09LTEpcmV0dXJuIHI7cj1KZS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2Uscyk7cmV0dXJuIHIhPT0tMT9yOm51bGx9ZWxzZXtyPUplLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxzKTtpZihyIT09LTEpcmV0dXJuIHI7cj1KZS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2Uscyk7aWYociE9PS0xKXJldHVybiByO3I9SmUuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2Uscyk7cmV0dXJuIHIhPT0tMT9yOm51bGx9fWZ1bmN0aW9uIFV0KGUsdCxuKXt2YXIgaSxyLGE7aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiBCdC5jYWxsKHRoaXMsZSx0LG4pO2lmKCF0aGlzLl93ZWVrZGF5c1BhcnNlKXt0aGlzLl93ZWVrZGF5c1BhcnNlPVtdO3RoaXMuX21pbldlZWtkYXlzUGFyc2U9W107dGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlPVtdO3RoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlPVtdfWZvcihpPTA7aTw3O2krKyl7cj1mKFsyZTMsMV0pLmRheShpKTtpZihuJiYhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pe3RoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXMociwiIikucmVwbGFjZSgiLiIsIlxcLj8iKSsiJCIsImkiKTt0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV09bmV3IFJlZ0V4cCgiXiIrdGhpcy53ZWVrZGF5c1Nob3J0KHIsIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIik7dGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzTWluKHIsIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIil9aWYoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pe2E9Il4iK3RoaXMud2Vla2RheXMociwiIikrInxeIit0aGlzLndlZWtkYXlzU2hvcnQociwiIikrInxeIit0aGlzLndlZWtkYXlzTWluKHIsIiIpO3RoaXMuX3dlZWtkYXlzUGFyc2VbaV09bmV3IFJlZ0V4cChhLnJlcGxhY2UoIi4iLCIiKSwiaSIpfWlmKG4mJnQ9PT0iZGRkZCImJnRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3QoZSkpcmV0dXJuIGk7ZWxzZSBpZihuJiZ0PT09ImRkZCImJnRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KGUpKXJldHVybiBpO2Vsc2UgaWYobiYmdD09PSJkZCImJnRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdChlKSlyZXR1cm4gaTtlbHNlIGlmKCFuJiZ0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3QoZSkpcmV0dXJuIGl9fWZ1bmN0aW9uIE50KGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gZSE9bnVsbD90aGlzOk5hTjt2YXIgdD1YZSh0aGlzLCJEYXkiKTtpZihlIT1udWxsKXtlPVl0KGUsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmFkZChlLXQsImQiKX1lbHNlIHJldHVybiB0fWZ1bmN0aW9uIHp0KGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gZSE9bnVsbD90aGlzOk5hTjt2YXIgdD0odGhpcy5kYXkoKSs3LXRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyklNztyZXR1cm4gZT09bnVsbD90OnRoaXMuYWRkKGUtdCwiZCIpfWZ1bmN0aW9uIFZ0KGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gZSE9bnVsbD90aGlzOk5hTjtpZihlIT1udWxsKXt2YXIgdD1QdChlLHRoaXMubG9jYWxlRGF0YSgpKTtyZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSU3P3Q6dC03KX1lbHNlIHJldHVybiB0aGlzLmRheSgpfHw3fWZ1bmN0aW9uIEd0KGUpe2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCl7aWYoIXUodGhpcywiX3dlZWtkYXlzUmVnZXgiKSlLdC5jYWxsKHRoaXMpO2lmKGUpcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7ZWxzZSByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleH1lbHNle2lmKCF1KHRoaXMsIl93ZWVrZGF5c1JlZ2V4IikpdGhpcy5fd2Vla2RheXNSZWdleD1PdDtyZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCYmZT90aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzUmVnZXh9fWZ1bmN0aW9uIEp0KGUpe2lmKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCl7aWYoIXUodGhpcywiX3dlZWtkYXlzUmVnZXgiKSlLdC5jYWxsKHRoaXMpO2lmKGUpcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtlbHNlIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXh9ZWxzZXtpZighdSh0aGlzLCJfd2Vla2RheXNTaG9ydFJlZ2V4IikpdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PUl0O3JldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgmJmU/dGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4OnRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleH19ZnVuY3Rpb24gcXQoZSl7aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXtpZighdSh0aGlzLCJfd2Vla2RheXNSZWdleCIpKUt0LmNhbGwodGhpcyk7aWYoZSlyZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtlbHNlIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4fWVsc2V7aWYoIXUodGhpcywiX3dlZWtkYXlzTWluUmVnZXgiKSl0aGlzLl93ZWVrZGF5c01pblJlZ2V4PVd0O3JldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4JiZlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleH19ZnVuY3Rpb24gS3QoKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIHQubGVuZ3RoLWUubGVuZ3RofXZhciB0PVtdLG49W10saT1bXSxyPVtdLGEscyxvLHUsZDtmb3IoYT0wO2E8NzthKyspe3M9ZihbMmUzLDFdKS5kYXkoYSk7bz1FZSh0aGlzLndlZWtkYXlzTWluKHMsIiIpKTt1PUVlKHRoaXMud2Vla2RheXNTaG9ydChzLCIiKSk7ZD1FZSh0aGlzLndlZWtkYXlzKHMsIiIpKTt0LnB1c2gobyk7bi5wdXNoKHUpO2kucHVzaChkKTtyLnB1c2gobyk7ci5wdXNoKHUpO3IucHVzaChkKX10LnNvcnQoZSk7bi5zb3J0KGUpO2kuc29ydChlKTtyLnNvcnQoZSk7dGhpcy5fd2Vla2RheXNSZWdleD1uZXcgUmVnRXhwKCJeKCIrci5qb2luKCJ8IikrIikiLCJpIik7dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4PXRoaXMuX3dlZWtkYXlzUmVnZXg7dGhpcy5fd2Vla2RheXNNaW5SZWdleD10aGlzLl93ZWVrZGF5c1JlZ2V4O3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK2kuam9pbigifCIpKyIpIiwiaSIpO3RoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrbi5qb2luKCJ8IikrIikiLCJpIik7dGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrdC5qb2luKCJ8IikrIikiLCJpIil9ZnVuY3Rpb24gWHQoKXtyZXR1cm4gdGhpcy5ob3VycygpJTEyfHwxMn1mdW5jdGlvbiBadCgpe3JldHVybiB0aGlzLmhvdXJzKCl8fDI0fWZ1bmN0aW9uICR0KGUsdCl7aihlLDAsMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbSh0aGlzLmhvdXJzKCksdGhpcy5taW51dGVzKCksdCl9KX1mdW5jdGlvbiBRdChlLHQpe3JldHVybiB0Ll9tZXJpZGllbVBhcnNlfWZ1bmN0aW9uIGVuKGUpe3JldHVybihlKyIiKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKT09PSJwIn1qKCJIIixbIkhIIiwyXSwwLCJob3VyIiksaigiaCIsWyJoaCIsMl0sMCxYdCksaigiayIsWyJrayIsMl0sMCxadCksaigiaG1tIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIitYdC5hcHBseSh0aGlzKSt4KHRoaXMubWludXRlcygpLDIpfSksaigiaG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK1h0LmFwcGx5KHRoaXMpK3godGhpcy5taW51dGVzKCksMikreCh0aGlzLnNlY29uZHMoKSwyKX0pLGooIkhtbSIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK3godGhpcy5taW51dGVzKCksMil9KSxqKCJIbW1zcyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJuIiIrdGhpcy5ob3VycygpK3godGhpcy5taW51dGVzKCksMikreCh0aGlzLnNlY29uZHMoKSwyKX0pLCR0KCJhIix0cnVlKSwkdCgiQSIsZmFsc2UpLHdlKCJhIixRdCksd2UoIkEiLFF0KSx3ZSgiSCIsbGUsa2UpLHdlKCJoIixsZSxTZSksd2UoImsiLGxlLFNlKSx3ZSgiSEgiLGxlLHNlKSx3ZSgiaGgiLGxlLHNlKSx3ZSgia2siLGxlLHNlKSx3ZSgiaG1tIixoZSksd2UoImhtbXNzIixjZSksd2UoIkhtbSIsaGUpLHdlKCJIbW1zcyIsY2UpLFJlKFsiSCIsIkhIIl0samUpLFJlKFsiayIsImtrIl0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPVBlKGUpO3RbamVdPWk9PT0yND8wOml9KSxSZShbImEiLCJBIl0sZnVuY3Rpb24oZSx0LG4pe24uX2lzUG09bi5fbG9jYWxlLmlzUE0oZSk7bi5fbWVyaWRpZW09ZX0pLFJlKFsiaCIsImhoIl0sZnVuY3Rpb24oZSx0LG4pe3RbamVdPVBlKGUpO20obikuYmlnSG91cj10cnVlfSksUmUoImhtbSIsZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUubGVuZ3RoLTI7dFtqZV09UGUoZS5zdWJzdHIoMCxpKSk7dFtGZV09UGUoZS5zdWJzdHIoaSkpO20obikuYmlnSG91cj10cnVlfSksUmUoImhtbXNzIixmdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5sZW5ndGgtNCxyPWUubGVuZ3RoLTI7dFtqZV09UGUoZS5zdWJzdHIoMCxpKSk7dFtGZV09UGUoZS5zdWJzdHIoaSwyKSk7dFtCZV09UGUoZS5zdWJzdHIocikpO20obikuYmlnSG91cj10cnVlfSksUmUoIkhtbSIsZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUubGVuZ3RoLTI7dFtqZV09UGUoZS5zdWJzdHIoMCxpKSk7dFtGZV09UGUoZS5zdWJzdHIoaSkpfSksUmUoIkhtbXNzIixmdW5jdGlvbihlLHQsbil7dmFyIGk9ZS5sZW5ndGgtNCxyPWUubGVuZ3RoLTI7dFtqZV09UGUoZS5zdWJzdHIoMCxpKSk7dFtGZV09UGUoZS5zdWJzdHIoaSwyKSk7dFtCZV09UGUoZS5zdWJzdHIocikpfSk7dmFyIHRuLG5uPUtlKCJIb3VycyIsdHJ1ZSk7ZnVuY3Rpb24gcm4oZSx0LG4pe2lmKGU+MTEpcmV0dXJuIG4/InBtIjoiUE0iO2Vsc2UgcmV0dXJuIG4/ImFtIjoiQU0ifXZhciBhbj17Y2FsZW5kYXI6Uixsb25nRGF0ZUZvcm1hdDp6LGludmFsaWREYXRlOkcsb3JkaW5hbDpxLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6SyxyZWxhdGl2ZVRpbWU6Wixtb250aHM6bnQsbW9udGhzU2hvcnQ6aXQsd2VlazpidCx3ZWVrZGF5czpSdCx3ZWVrZGF5c01pbjp4dCx3ZWVrZGF5c1Nob3J0OkF0LG1lcmlkaWVtUGFyc2U6L1thcF1cLj9tP1wuPy9pfSxzbj17fSxvbj17fSx1bjtmdW5jdGlvbiBkbihlLHQpe3ZhciBuLGk9TWF0aC5taW4oZS5sZW5ndGgsdC5sZW5ndGgpO2ZvcihuPTA7bjxpO24rPTEpaWYoZVtuXSE9PXRbbl0pcmV0dXJuIG47cmV0dXJuIGl9ZnVuY3Rpb24gbG4oZSl7cmV0dXJuIGU/ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIik6ZX1mdW5jdGlvbiBobihlKXt2YXIgdD0wLG4saSxyLGE7d2hpbGUodDxlLmxlbmd0aCl7YT1sbihlW3RdKS5zcGxpdCgiLSIpO249YS5sZW5ndGg7aT1sbihlW3QrMV0pO2k9aT9pLnNwbGl0KCItIik6bnVsbDt3aGlsZShuPjApe3I9X24oYS5zbGljZSgwLG4pLmpvaW4oIi0iKSk7aWYocilyZXR1cm4gcjtpZihpJiZpLmxlbmd0aD49biYmZG4oYSxpKT49bi0xKWJyZWFrO24tLX10Kyt9cmV0dXJuIHVufWZ1bmN0aW9uIGNuKGUpe3JldHVybiEhKGUmJmUubWF0Y2goIl5bXi9cXFxcXSokIikpfWZ1bmN0aW9uIF9uKHQpe3ZhciBlPW51bGwsbjtpZihzblt0XT09PXVuZGVmaW5lZCYmdHlwZW9mIGRzIT09InVuZGVmaW5lZCImJmRzJiZkcy5leHBvcnRzJiZjbih0KSl0cnl7ZT11bi5fYWJicjtuPWxzO2hzKDI4NykoIi4vIit0KTtmbihlKX1jYXRjaChlKXtzblt0XT1udWxsfXJldHVybiBzblt0XX1mdW5jdGlvbiBmbihlLHQpe3ZhciBuO2lmKGUpe2lmKGwodCkpbj15bihlKTtlbHNlIG49bW4oZSx0KTtpZihuKXVuPW47ZWxzZSBpZih0eXBlb2YgY29uc29sZSE9PSJ1bmRlZmluZWQiJiZjb25zb2xlLndhcm4pY29uc29sZS53YXJuKCJMb2NhbGUgIitlKyIgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PyIpfXJldHVybiB1bi5fYWJicn1mdW5jdGlvbiBtbihlLHQpe2lmKHQhPT1udWxsKXt2YXIgbixpPWFuO3QuYWJicj1lO2lmKHNuW2VdIT1udWxsKXtUKCJkZWZpbmVMb2NhbGVPdmVycmlkZSIsInVzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICIrImFuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAiKyJjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAiKyJTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLiIpO2k9c25bZV0uX2NvbmZpZ31lbHNlIGlmKHQucGFyZW50TG9jYWxlIT1udWxsKWlmKHNuW3QucGFyZW50TG9jYWxlXSE9bnVsbClpPXNuW3QucGFyZW50TG9jYWxlXS5fY29uZmlnO2Vsc2V7bj1fbih0LnBhcmVudExvY2FsZSk7aWYobiE9bnVsbClpPW4uX2NvbmZpZztlbHNle2lmKCFvblt0LnBhcmVudExvY2FsZV0pb25bdC5wYXJlbnRMb2NhbGVdPVtdO29uW3QucGFyZW50TG9jYWxlXS5wdXNoKHtuYW1lOmUsY29uZmlnOnR9KTtyZXR1cm4gbnVsbH19c25bZV09bmV3IEMoUChpLHQpKTtpZihvbltlXSlvbltlXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe21uKGUubmFtZSxlLmNvbmZpZyl9KTtmbihlKTtyZXR1cm4gc25bZV19ZWxzZXtkZWxldGUgc25bZV07cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHBuKGUsdCl7aWYodCE9bnVsbCl7dmFyIG4saSxyPWFuO2lmKHNuW2VdIT1udWxsJiZzbltlXS5wYXJlbnRMb2NhbGUhPW51bGwpc25bZV0uc2V0KFAoc25bZV0uX2NvbmZpZyx0KSk7ZWxzZXtpPV9uKGUpO2lmKGkhPW51bGwpcj1pLl9jb25maWc7dD1QKHIsdCk7aWYoaT09bnVsbCl0LmFiYnI9ZTtuPW5ldyBDKHQpO24ucGFyZW50TG9jYWxlPXNuW2VdO3NuW2VdPW59Zm4oZSl9ZWxzZSBpZihzbltlXSE9bnVsbClpZihzbltlXS5wYXJlbnRMb2NhbGUhPW51bGwpe3NuW2VdPXNuW2VdLnBhcmVudExvY2FsZTtpZihlPT09Zm4oKSlmbihlKX1lbHNlIGlmKHNuW2VdIT1udWxsKWRlbGV0ZSBzbltlXTtyZXR1cm4gc25bZV19ZnVuY3Rpb24geW4oZSl7dmFyIHQ7aWYoZSYmZS5fbG9jYWxlJiZlLl9sb2NhbGUuX2FiYnIpZT1lLl9sb2NhbGUuX2FiYnI7aWYoIWUpcmV0dXJuIHVuO2lmKCFzKGUpKXt0PV9uKGUpO2lmKHQpcmV0dXJuIHQ7ZT1bZV19cmV0dXJuIGhuKGUpfWZ1bmN0aW9uIHZuKCl7cmV0dXJuIEQoc24pfWZ1bmN0aW9uIGduKGUpe3ZhciB0LG49ZS5fYTtpZihuJiZtKGUpLm92ZXJmbG93PT09LTIpe3Q9bltXZV08MHx8bltXZV0+MTE/V2U6bltIZV08MXx8bltIZV0+dHQobltJZV0sbltXZV0pP0hlOm5bamVdPDB8fG5bamVdPjI0fHxuW2plXT09PTI0JiYobltGZV0hPT0wfHxuW0JlXSE9PTB8fG5bVWVdIT09MCk/amU6bltGZV08MHx8bltGZV0+NTk/RmU6bltCZV08MHx8bltCZV0+NTk/QmU6bltVZV08MHx8bltVZV0+OTk5P1VlOi0xO2lmKG0oZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYodDxJZXx8dD5IZSkpdD1IZTtpZihtKGUpLl9vdmVyZmxvd1dlZWtzJiZ0PT09LTEpdD1OZTtpZihtKGUpLl9vdmVyZmxvd1dlZWtkYXkmJnQ9PT0tMSl0PXplO20oZSkub3ZlcmZsb3c9dH1yZXR1cm4gZX12YXIgTW49L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLExuPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkfCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLFNuPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLGtuPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7NH0tV1xkXGQvLGZhbHNlXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLyxmYWxzZV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0fVdcZHsyfS8sZmFsc2VdLFsiWVlZWURERCIsL1xkezd9L10sWyJZWVlZTU0iLC9cZHs2fS8sZmFsc2VdLFsiWVlZWSIsL1xkezR9LyxmYWxzZV1dLGJuPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDptbTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsiSEgiLC9cZFxkL11dLHduPS9eXC8/RGF0ZVwoKC0/XGQrKS9pLERuPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxkKSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLFRuPXtVVDowLEdNVDowLEVEVDotNCo2MCxFU1Q6LTUqNjAsQ0RUOi01KjYwLENTVDotNio2MCxNRFQ6LTYqNjAsTVNUOi03KjYwLFBEVDotNyo2MCxQU1Q6LTgqNjB9O2Z1bmN0aW9uIEVuKGUpe3ZhciB0LG4saT1lLl9pLHI9TW4uZXhlYyhpKXx8TG4uZXhlYyhpKSxhLHMsbyx1LGQ9a24ubGVuZ3RoLGw9Ym4ubGVuZ3RoO2lmKHIpe20oZSkuaXNvPXRydWU7Zm9yKHQ9MCxuPWQ7dDxuO3QrKylpZihrblt0XVsxXS5leGVjKHJbMV0pKXtzPWtuW3RdWzBdO2E9a25bdF1bMl0hPT1mYWxzZTticmVha31pZihzPT1udWxsKXtlLl9pc1ZhbGlkPWZhbHNlO3JldHVybn1pZihyWzNdKXtmb3IodD0wLG49bDt0PG47dCsrKWlmKGJuW3RdWzFdLmV4ZWMoclszXSkpe289KHJbMl18fCIgIikrYm5bdF1bMF07YnJlYWt9aWYobz09bnVsbCl7ZS5faXNWYWxpZD1mYWxzZTtyZXR1cm59fWlmKCFhJiZvIT1udWxsKXtlLl9pc1ZhbGlkPWZhbHNlO3JldHVybn1pZihyWzRdKWlmKFNuLmV4ZWMocls0XSkpdT0iWiI7ZWxzZXtlLl9pc1ZhbGlkPWZhbHNlO3JldHVybn1lLl9mPXMrKG98fCIiKSsodXx8IiIpO0ZuKGUpfWVsc2UgZS5faXNWYWxpZD1mYWxzZX1mdW5jdGlvbiBZbihlLHQsbixpLHIsYSl7dmFyIHM9W1BuKGUpLGl0LmluZGV4T2YodCkscGFyc2VJbnQobiwxMCkscGFyc2VJbnQoaSwxMCkscGFyc2VJbnQociwxMCldO2lmKGEpcy5wdXNoKHBhcnNlSW50KGEsMTApKTtyZXR1cm4gc31mdW5jdGlvbiBQbihlKXt2YXIgdD1wYXJzZUludChlLDEwKTtpZih0PD00OSlyZXR1cm4gMmUzK3Q7ZWxzZSBpZih0PD05OTkpcmV0dXJuIDE5MDArdDtyZXR1cm4gdH1mdW5jdGlvbiBDbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cKFteKCldKlwpfFtcblx0XS9nLCIgIikucmVwbGFjZSgvKFxzXHMrKS9nLCIgIikucmVwbGFjZSgvXlxzXHMqLywiIikucmVwbGFjZSgvXHNccyokLywiIil9ZnVuY3Rpb24gUm4oZSx0LG4pe2lmKGUpe3ZhciBpPUF0LmluZGV4T2YoZSkscj1uZXcgRGF0ZSh0WzBdLHRbMV0sdFsyXSkuZ2V0RGF5KCk7aWYoaSE9PXIpe20obikud2Vla2RheU1pc21hdGNoPXRydWU7bi5faXNWYWxpZD1mYWxzZTtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfWZ1bmN0aW9uIEFuKGUsdCxuKXtpZihlKXJldHVybiBUbltlXTtlbHNlIGlmKHQpcmV0dXJuIDA7ZWxzZXt2YXIgaT1wYXJzZUludChuLDEwKSxyPWklMTAwLGE9KGktcikvMTAwO3JldHVybiBhKjYwK3J9fWZ1bmN0aW9uIHhuKGUpe3ZhciB0PURuLmV4ZWMoQ24oZS5faSkpLG47aWYodCl7bj1Zbih0WzRdLHRbM10sdFsyXSx0WzVdLHRbNl0sdFs3XSk7aWYoIVJuKHRbMV0sbixlKSlyZXR1cm47ZS5fYT1uO2UuX3R6bT1Bbih0WzhdLHRbOV0sdFsxMF0pO2UuX2Q9dnQuYXBwbHkobnVsbCxlLl9hKTtlLl9kLnNldFVUQ01pbnV0ZXMoZS5fZC5nZXRVVENNaW51dGVzKCktZS5fdHptKTttKGUpLnJmYzI4MjI9dHJ1ZX1lbHNlIGUuX2lzVmFsaWQ9ZmFsc2V9ZnVuY3Rpb24gT24oZSl7dmFyIHQ9d24uZXhlYyhlLl9pKTtpZih0IT09bnVsbCl7ZS5fZD1uZXcgRGF0ZSgrdFsxXSk7cmV0dXJufUVuKGUpO2lmKGUuX2lzVmFsaWQ9PT1mYWxzZSlkZWxldGUgZS5faXNWYWxpZDtlbHNlIHJldHVybjt4bihlKTtpZihlLl9pc1ZhbGlkPT09ZmFsc2UpZGVsZXRlIGUuX2lzVmFsaWQ7ZWxzZSByZXR1cm47aWYoZS5fc3RyaWN0KWUuX2lzVmFsaWQ9ZmFsc2U7ZWxzZSBoLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpfWZ1bmN0aW9uIEluKGUsdCxuKXtpZihlIT1udWxsKXJldHVybiBlO2lmKHQhPW51bGwpcmV0dXJuIHQ7cmV0dXJuIG59ZnVuY3Rpb24gV24oZSl7dmFyIHQ9bmV3IERhdGUoaC5ub3coKSk7aWYoZS5fdXNlVVRDKXJldHVyblt0LmdldFVUQ0Z1bGxZZWFyKCksdC5nZXRVVENNb250aCgpLHQuZ2V0VVRDRGF0ZSgpXTtyZXR1cm5bdC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKV19ZnVuY3Rpb24gSG4oZSl7dmFyIHQsbixpPVtdLHIsYSxzO2lmKGUuX2QpcmV0dXJuO3I9V24oZSk7aWYoZS5fdyYmZS5fYVtIZV09PW51bGwmJmUuX2FbV2VdPT1udWxsKWpuKGUpO2lmKGUuX2RheU9mWWVhciE9bnVsbCl7cz1JbihlLl9hW0llXSxyW0llXSk7aWYoZS5fZGF5T2ZZZWFyPlZlKHMpfHxlLl9kYXlPZlllYXI9PT0wKW0oZSkuX292ZXJmbG93RGF5T2ZZZWFyPXRydWU7bj12dChzLDAsZS5fZGF5T2ZZZWFyKTtlLl9hW1dlXT1uLmdldFVUQ01vbnRoKCk7ZS5fYVtIZV09bi5nZXRVVENEYXRlKCl9Zm9yKHQ9MDt0PDMmJmUuX2FbdF09PW51bGw7Kyt0KWUuX2FbdF09aVt0XT1yW3RdO2Zvcig7dDw3O3QrKyllLl9hW3RdPWlbdF09ZS5fYVt0XT09bnVsbD90PT09Mj8xOjA6ZS5fYVt0XTtpZihlLl9hW2plXT09PTI0JiZlLl9hW0ZlXT09PTAmJmUuX2FbQmVdPT09MCYmZS5fYVtVZV09PT0wKXtlLl9uZXh0RGF5PXRydWU7ZS5fYVtqZV09MH1lLl9kPShlLl91c2VVVEM/dnQ6eXQpLmFwcGx5KG51bGwsaSk7YT1lLl91c2VVVEM/ZS5fZC5nZXRVVENEYXkoKTplLl9kLmdldERheSgpO2lmKGUuX3R6bSE9bnVsbCllLl9kLnNldFVUQ01pbnV0ZXMoZS5fZC5nZXRVVENNaW51dGVzKCktZS5fdHptKTtpZihlLl9uZXh0RGF5KWUuX2FbamVdPTI0O2lmKGUuX3cmJnR5cGVvZiBlLl93LmQhPT0idW5kZWZpbmVkIiYmZS5fdy5kIT09YSltKGUpLndlZWtkYXlNaXNtYXRjaD10cnVlfWZ1bmN0aW9uIGpuKGUpe3ZhciB0LG4saSxyLGEscyxvLHUsZDt0PWUuX3c7aWYodC5HRyE9bnVsbHx8dC5XIT1udWxsfHx0LkUhPW51bGwpe2E9MTtzPTQ7bj1Jbih0LkdHLGUuX2FbSWVdLEx0KHFuKCksMSw0KS55ZWFyKTtpPUluKHQuVywxKTtyPUluKHQuRSwxKTtpZihyPDF8fHI+Nyl1PXRydWV9ZWxzZXthPWUuX2xvY2FsZS5fd2Vlay5kb3c7cz1lLl9sb2NhbGUuX3dlZWsuZG95O2Q9THQocW4oKSxhLHMpO249SW4odC5nZyxlLl9hW0llXSxkLnllYXIpO2k9SW4odC53LGQud2Vlayk7aWYodC5kIT1udWxsKXtyPXQuZDtpZihyPDB8fHI+Nil1PXRydWV9ZWxzZSBpZih0LmUhPW51bGwpe3I9dC5lK2E7aWYodC5lPDB8fHQuZT42KXU9dHJ1ZX1lbHNlIHI9YX1pZihpPDF8fGk+U3QobixhLHMpKW0oZSkuX292ZXJmbG93V2Vla3M9dHJ1ZTtlbHNlIGlmKHUhPW51bGwpbShlKS5fb3ZlcmZsb3dXZWVrZGF5PXRydWU7ZWxzZXtvPU10KG4saSxyLGEscyk7ZS5fYVtJZV09by55ZWFyO2UuX2RheU9mWWVhcj1vLmRheU9mWWVhcn19ZnVuY3Rpb24gRm4oZSl7aWYoZS5fZj09PWguSVNPXzg2MDEpe0VuKGUpO3JldHVybn1pZihlLl9mPT09aC5SRkNfMjgyMil7eG4oZSk7cmV0dXJufWUuX2E9W107bShlKS5lbXB0eT10cnVlO3ZhciB0PSIiK2UuX2ksbixpLHIsYSxzLG89dC5sZW5ndGgsdT0wLGQsbDtyPU4oZS5fZixlLl9sb2NhbGUpLm1hdGNoKE8pfHxbXTtsPXIubGVuZ3RoO2ZvcihuPTA7bjxsO24rKyl7YT1yW25dO2k9KHQubWF0Y2goRGUoYSxlKSl8fFtdKVswXTtpZihpKXtzPXQuc3Vic3RyKDAsdC5pbmRleE9mKGkpKTtpZihzLmxlbmd0aD4wKW0oZSkudW51c2VkSW5wdXQucHVzaChzKTt0PXQuc2xpY2UodC5pbmRleE9mKGkpK2kubGVuZ3RoKTt1Kz1pLmxlbmd0aH1pZihIW2FdKXtpZihpKW0oZSkuZW1wdHk9ZmFsc2U7ZWxzZSBtKGUpLnVudXNlZFRva2Vucy5wdXNoKGEpO3hlKGEsaSxlKX1lbHNlIGlmKGUuX3N0cmljdCYmIWkpbShlKS51bnVzZWRUb2tlbnMucHVzaChhKX1tKGUpLmNoYXJzTGVmdE92ZXI9by11O2lmKHQubGVuZ3RoPjApbShlKS51bnVzZWRJbnB1dC5wdXNoKHQpO2lmKGUuX2FbamVdPD0xMiYmbShlKS5iaWdIb3VyPT09dHJ1ZSYmZS5fYVtqZV0+MCltKGUpLmJpZ0hvdXI9dW5kZWZpbmVkO20oZSkucGFyc2VkRGF0ZVBhcnRzPWUuX2Euc2xpY2UoMCk7bShlKS5tZXJpZGllbT1lLl9tZXJpZGllbTtlLl9hW2plXT1CbihlLl9sb2NhbGUsZS5fYVtqZV0sZS5fbWVyaWRpZW0pO2Q9bShlKS5lcmE7aWYoZCE9PW51bGwpZS5fYVtJZV09ZS5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihkLGUuX2FbSWVdKTtIbihlKTtnbihlKX1mdW5jdGlvbiBCbihlLHQsbil7dmFyIGk7aWYobj09bnVsbClyZXR1cm4gdDtpZihlLm1lcmlkaWVtSG91ciE9bnVsbClyZXR1cm4gZS5tZXJpZGllbUhvdXIodCxuKTtlbHNlIGlmKGUuaXNQTSE9bnVsbCl7aT1lLmlzUE0obik7aWYoaSYmdDwxMil0Kz0xMjtpZighaSYmdD09PTEyKXQ9MDtyZXR1cm4gdH1lbHNlIHJldHVybiB0fWZ1bmN0aW9uIFVuKGUpe3ZhciB0LG4saSxyLGEscyxvPWZhbHNlLHU9ZS5fZi5sZW5ndGg7aWYodT09PTApe20oZSkuaW52YWxpZEZvcm1hdD10cnVlO2UuX2Q9bmV3IERhdGUoTmFOKTtyZXR1cm59Zm9yKHI9MDtyPHU7cisrKXthPTA7cz1mYWxzZTt0PU0oe30sZSk7aWYoZS5fdXNlVVRDIT1udWxsKXQuX3VzZVVUQz1lLl91c2VVVEM7dC5fZj1lLl9mW3JdO0ZuKHQpO2lmKHAodCkpcz10cnVlO2ErPW0odCkuY2hhcnNMZWZ0T3ZlcjthKz1tKHQpLnVudXNlZFRva2Vucy5sZW5ndGgqMTA7bSh0KS5zY29yZT1hO2lmKCFvKXtpZihpPT1udWxsfHxhPGl8fHMpe2k9YTtuPXQ7aWYocylvPXRydWV9fWVsc2UgaWYoYTxpKXtpPWE7bj10fX1fKGUsbnx8dCl9ZnVuY3Rpb24gTm4oZSl7aWYoZS5fZClyZXR1cm47dmFyIHQ9bmUoZS5faSksbj10LmRheT09PXVuZGVmaW5lZD90LmRhdGU6dC5kYXk7ZS5fYT1pKFt0LnllYXIsdC5tb250aCxuLHQuaG91cix0Lm1pbnV0ZSx0LnNlY29uZCx0Lm1pbGxpc2Vjb25kXSxmdW5jdGlvbihlKXtyZXR1cm4gZSYmcGFyc2VJbnQoZSwxMCl9KTtIbihlKX1mdW5jdGlvbiB6bihlKXt2YXIgdD1uZXcgTChnbihWbihlKSkpO2lmKHQuX25leHREYXkpe3QuYWRkKDEsImQiKTt0Ll9uZXh0RGF5PXVuZGVmaW5lZH1yZXR1cm4gdH1mdW5jdGlvbiBWbihlKXt2YXIgdD1lLl9pLG49ZS5fZjtlLl9sb2NhbGU9ZS5fbG9jYWxlfHx5bihlLl9sKTtpZih0PT09bnVsbHx8bj09PXVuZGVmaW5lZCYmdD09PSIiKXJldHVybiB5KHtudWxsSW5wdXQ6dHJ1ZX0pO2lmKHR5cGVvZiB0PT09InN0cmluZyIpZS5faT10PWUuX2xvY2FsZS5wcmVwYXJzZSh0KTtpZihTKHQpKXJldHVybiBuZXcgTChnbih0KSk7ZWxzZSBpZihhKHQpKWUuX2Q9dDtlbHNlIGlmKHMobikpVW4oZSk7ZWxzZSBpZihuKUZuKGUpO2Vsc2UgR24oZSk7aWYoIXAoZSkpZS5fZD1udWxsO3JldHVybiBlfWZ1bmN0aW9uIEduKGUpe3ZhciB0PWUuX2k7aWYobCh0KSllLl9kPW5ldyBEYXRlKGgubm93KCkpO2Vsc2UgaWYoYSh0KSllLl9kPW5ldyBEYXRlKHQudmFsdWVPZigpKTtlbHNlIGlmKHR5cGVvZiB0PT09InN0cmluZyIpT24oZSk7ZWxzZSBpZihzKHQpKXtlLl9hPWkodC5zbGljZSgwKSxmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxMCl9KTtIbihlKX1lbHNlIGlmKG8odCkpTm4oZSk7ZWxzZSBpZihjKHQpKWUuX2Q9bmV3IERhdGUodCk7ZWxzZSBoLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGUpfWZ1bmN0aW9uIEpuKGUsdCxuLGkscil7dmFyIGE9e307aWYodD09PXRydWV8fHQ9PT1mYWxzZSl7aT10O3Q9dW5kZWZpbmVkfWlmKG49PT10cnVlfHxuPT09ZmFsc2Upe2k9bjtuPXVuZGVmaW5lZH1pZihvKGUpJiZkKGUpfHxzKGUpJiZlLmxlbmd0aD09PTApZT11bmRlZmluZWQ7YS5faXNBTW9tZW50T2JqZWN0PXRydWU7YS5fdXNlVVRDPWEuX2lzVVRDPXI7YS5fbD1uO2EuX2k9ZTthLl9mPXQ7YS5fc3RyaWN0PWk7cmV0dXJuIHpuKGEpfWZ1bmN0aW9uIHFuKGUsdCxuLGkpe3JldHVybiBKbihlLHQsbixpLGZhbHNlKX1oLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrPWIoInZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAiKyJ3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICIrImRpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsZnVuY3Rpb24oZSl7ZS5fZD1uZXcgRGF0ZShlLl9pKyhlLl91c2VVVEM/IiBVVEMiOiIiKSl9KSxoLklTT184NjAxPWZ1bmN0aW9uKCl7fSxoLlJGQ18yODIyPWZ1bmN0aW9uKCl7fTt2YXIgS249YigibW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIGU9cW4uYXBwbHkobnVsbCxhcmd1bWVudHMpO2lmKHRoaXMuaXNWYWxpZCgpJiZlLmlzVmFsaWQoKSlyZXR1cm4gZTx0aGlzP3RoaXM6ZTtlbHNlIHJldHVybiB5KCl9KSxYbj1iKCJtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24oKXt2YXIgZT1xbi5hcHBseShudWxsLGFyZ3VtZW50cyk7aWYodGhpcy5pc1ZhbGlkKCkmJmUuaXNWYWxpZCgpKXJldHVybiBlPnRoaXM/dGhpczplO2Vsc2UgcmV0dXJuIHkoKX0pO2Z1bmN0aW9uIFpuKGUsdCl7dmFyIG4saTtpZih0Lmxlbmd0aD09PTEmJnModFswXSkpdD10WzBdO2lmKCF0Lmxlbmd0aClyZXR1cm4gcW4oKTtuPXRbMF07Zm9yKGk9MTtpPHQubGVuZ3RoOysraSlpZighdFtpXS5pc1ZhbGlkKCl8fHRbaV1bZV0obikpbj10W2ldO3JldHVybiBufWZ1bmN0aW9uICRuKCl7dmFyIGU9W10uc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIFpuKCJpc0JlZm9yZSIsZSl9ZnVuY3Rpb24gUW4oKXt2YXIgZT1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTtyZXR1cm4gWm4oImlzQWZ0ZXIiLGUpfXZhciBlaT1mdW5jdGlvbigpe3JldHVybiBEYXRlLm5vdz9EYXRlLm5vdygpOituZXcgRGF0ZX0sdGk9WyJ5ZWFyIiwicXVhcnRlciIsIm1vbnRoIiwid2VlayIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCJdO2Z1bmN0aW9uIG5pKGUpe3ZhciB0LG49ZmFsc2UsaSxyPXRpLmxlbmd0aDtmb3IodCBpbiBlKWlmKHUoZSx0KSYmIShKZS5jYWxsKHRpLHQpIT09LTEmJihlW3RdPT1udWxsfHwhaXNOYU4oZVt0XSkpKSlyZXR1cm4gZmFsc2U7Zm9yKGk9MDtpPHI7KytpKWlmKGVbdGlbaV1dKXtpZihuKXJldHVybiBmYWxzZTtpZihwYXJzZUZsb2F0KGVbdGlbaV1dKSE9PVBlKGVbdGlbaV1dKSluPXRydWV9cmV0dXJuIHRydWV9ZnVuY3Rpb24gaWkoKXtyZXR1cm4gdGhpcy5faXNWYWxpZH1mdW5jdGlvbiByaSgpe3JldHVybiBUaShOYU4pfWZ1bmN0aW9uIGFpKGUpe3ZhciB0PW5lKGUpLG49dC55ZWFyfHwwLGk9dC5xdWFydGVyfHwwLHI9dC5tb250aHx8MCxhPXQud2Vla3x8dC5pc29XZWVrfHwwLHM9dC5kYXl8fDAsbz10LmhvdXJ8fDAsdT10Lm1pbnV0ZXx8MCxkPXQuc2Vjb25kfHwwLGw9dC5taWxsaXNlY29uZHx8MDt0aGlzLl9pc1ZhbGlkPW5pKHQpO3RoaXMuX21pbGxpc2Vjb25kcz0rbCtkKjFlMyt1KjZlNCtvKjFlMyo2MCo2MDt0aGlzLl9kYXlzPStzK2EqNzt0aGlzLl9tb250aHM9K3IraSozK24qMTI7dGhpcy5fZGF0YT17fTt0aGlzLl9sb2NhbGU9eW4oKTt0aGlzLl9idWJibGUoKX1mdW5jdGlvbiBzaShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIGFpfWZ1bmN0aW9uIG9pKGUpe2lmKGU8MClyZXR1cm4gTWF0aC5yb3VuZCgtMSplKSotMTtlbHNlIHJldHVybiBNYXRoLnJvdW5kKGUpfWZ1bmN0aW9uIHVpKGUsdCxuKXt2YXIgaT1NYXRoLm1pbihlLmxlbmd0aCx0Lmxlbmd0aCkscj1NYXRoLmFicyhlLmxlbmd0aC10Lmxlbmd0aCksYT0wLHM7Zm9yKHM9MDtzPGk7cysrKWlmKG4mJmVbc10hPT10W3NdfHwhbiYmUGUoZVtzXSkhPT1QZSh0W3NdKSlhKys7cmV0dXJuIGErcn1mdW5jdGlvbiBkaShlLG4pe2ooZSwwLDAsZnVuY3Rpb24oKXt2YXIgZT10aGlzLnV0Y09mZnNldCgpLHQ9IisiO2lmKGU8MCl7ZT0tZTt0PSItIn1yZXR1cm4gdCt4KH5+KGUvNjApLDIpK24reCh+fmUlNjAsMil9KX1kaSgiWiIsIjoiKSxkaSgiWloiLCIiKSx3ZSgiWiIsZ2UpLHdlKCJaWiIsZ2UpLFJlKFsiWiIsIlpaIl0sZnVuY3Rpb24oZSx0LG4pe24uX3VzZVVUQz10cnVlO24uX3R6bT1oaShnZSxlKX0pO3ZhciBsaT0vKFtcK1wtXXxcZFxkKS9naTtmdW5jdGlvbiBoaShlLHQpe3ZhciBuPSh0fHwiIikubWF0Y2goZSksaSxyLGE7aWYobj09PW51bGwpcmV0dXJuIG51bGw7aT1uW24ubGVuZ3RoLTFdfHxbXTtyPShpKyIiKS5tYXRjaChsaSl8fFsiLSIsMCwwXTthPSsoclsxXSo2MCkrUGUoclsyXSk7cmV0dXJuIGE9PT0wPzA6clswXT09PSIrIj9hOi1hfWZ1bmN0aW9uIGNpKGUsdCl7dmFyIG4saTtpZih0Ll9pc1VUQyl7bj10LmNsb25lKCk7aT0oUyhlKXx8YShlKT9lLnZhbHVlT2YoKTpxbihlKS52YWx1ZU9mKCkpLW4udmFsdWVPZigpO24uX2Quc2V0VGltZShuLl9kLnZhbHVlT2YoKStpKTtoLnVwZGF0ZU9mZnNldChuLGZhbHNlKTtyZXR1cm4gbn1lbHNlIHJldHVybiBxbihlKS5sb2NhbCgpfWZ1bmN0aW9uIF9pKGUpe3JldHVybi1NYXRoLnJvdW5kKGUuX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gZmkoZSx0LG4pe3ZhciBpPXRoaXMuX29mZnNldHx8MCxyO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gZSE9bnVsbD90aGlzOk5hTjtpZihlIT1udWxsKXtpZih0eXBlb2YgZT09PSJzdHJpbmciKXtlPWhpKGdlLGUpO2lmKGU9PT1udWxsKXJldHVybiB0aGlzfWVsc2UgaWYoTWF0aC5hYnMoZSk8MTYmJiFuKWU9ZSo2MDtpZighdGhpcy5faXNVVEMmJnQpcj1faSh0aGlzKTt0aGlzLl9vZmZzZXQ9ZTt0aGlzLl9pc1VUQz10cnVlO2lmKHIhPW51bGwpdGhpcy5hZGQociwibSIpO2lmKGkhPT1lKWlmKCF0fHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzKVJpKHRoaXMsVGkoZS1pLCJtIiksMSxmYWxzZSk7ZWxzZSBpZighdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyl7dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz10cnVlO2gudXBkYXRlT2Zmc2V0KHRoaXMsdHJ1ZSk7dGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz1udWxsfXJldHVybiB0aGlzfWVsc2UgcmV0dXJuIHRoaXMuX2lzVVRDP2k6X2kodGhpcyl9ZnVuY3Rpb24gbWkoZSx0KXtpZihlIT1udWxsKXtpZih0eXBlb2YgZSE9PSJzdHJpbmciKWU9LWU7dGhpcy51dGNPZmZzZXQoZSx0KTtyZXR1cm4gdGhpc31lbHNlIHJldHVybi10aGlzLnV0Y09mZnNldCgpfWZ1bmN0aW9uIHBpKGUpe3JldHVybiB0aGlzLnV0Y09mZnNldCgwLGUpfWZ1bmN0aW9uIHlpKGUpe2lmKHRoaXMuX2lzVVRDKXt0aGlzLnV0Y09mZnNldCgwLGUpO3RoaXMuX2lzVVRDPWZhbHNlO2lmKGUpdGhpcy5zdWJ0cmFjdChfaSh0aGlzKSwibSIpfXJldHVybiB0aGlzfWZ1bmN0aW9uIHZpKCl7aWYodGhpcy5fdHptIT1udWxsKXRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSxmYWxzZSx0cnVlKTtlbHNlIGlmKHR5cGVvZiB0aGlzLl9pPT09InN0cmluZyIpe3ZhciBlPWhpKHZlLHRoaXMuX2kpO2lmKGUhPW51bGwpdGhpcy51dGNPZmZzZXQoZSk7ZWxzZSB0aGlzLnV0Y09mZnNldCgwLHRydWUpfXJldHVybiB0aGlzfWZ1bmN0aW9uIGdpKGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gZmFsc2U7ZT1lP3FuKGUpLnV0Y09mZnNldCgpOjA7cmV0dXJuKHRoaXMudXRjT2Zmc2V0KCktZSklNjA9PT0wfWZ1bmN0aW9uIE1pKCl7cmV0dXJuIHRoaXMudXRjT2Zmc2V0KCk+dGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpfHx0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKX1mdW5jdGlvbiBMaSgpe2lmKCFsKHRoaXMuX2lzRFNUU2hpZnRlZCkpcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDt2YXIgZT17fSx0O00oZSx0aGlzKTtlPVZuKGUpO2lmKGUuX2Epe3Q9ZS5faXNVVEM/ZihlLl9hKTpxbihlLl9hKTt0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJnVpKGUuX2EsdC50b0FycmF5KCkpPjB9ZWxzZSB0aGlzLl9pc0RTVFNoaWZ0ZWQ9ZmFsc2U7cmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZH1mdW5jdGlvbiBTaSgpe3JldHVybiB0aGlzLmlzVmFsaWQoKT8hdGhpcy5faXNVVEM6ZmFsc2V9ZnVuY3Rpb24ga2koKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5faXNVVEM6ZmFsc2V9ZnVuY3Rpb24gYmkoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5faXNVVEMmJnRoaXMuX29mZnNldD09PTA6ZmFsc2V9aC51cGRhdGVPZmZzZXQ9ZnVuY3Rpb24oKXt9O3ZhciB3aT0vXigtfFwrKT8oPzooXGQqKVsuIF0pPyhcZCspOihcZCspKD86OihcZCspKFwuXGQqKT8pPyQvLERpPS9eKC18XCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztmdW5jdGlvbiBUaShlLHQpe3ZhciBuPWUsaT1udWxsLHIsYSxzO2lmKHNpKGUpKW49e21zOmUuX21pbGxpc2Vjb25kcyxkOmUuX2RheXMsTTplLl9tb250aHN9O2Vsc2UgaWYoYyhlKXx8IWlzTmFOKCtlKSl7bj17fTtpZih0KW5bdF09K2U7ZWxzZSBuLm1pbGxpc2Vjb25kcz0rZX1lbHNlIGlmKGk9d2kuZXhlYyhlKSl7cj1pWzFdPT09Ii0iPy0xOjE7bj17eTowLGQ6UGUoaVtIZV0pKnIsaDpQZShpW2plXSkqcixtOlBlKGlbRmVdKSpyLHM6UGUoaVtCZV0pKnIsbXM6UGUob2koaVtVZV0qMWUzKSkqcn19ZWxzZSBpZihpPURpLmV4ZWMoZSkpe3I9aVsxXT09PSItIj8tMToxO249e3k6RWkoaVsyXSxyKSxNOkVpKGlbM10sciksdzpFaShpWzRdLHIpLGQ6RWkoaVs1XSxyKSxoOkVpKGlbNl0sciksbTpFaShpWzddLHIpLHM6RWkoaVs4XSxyKX19ZWxzZSBpZihuPT1udWxsKW49e307ZWxzZSBpZih0eXBlb2Ygbj09PSJvYmplY3QiJiYoImZyb20iaW4gbnx8InRvImluIG4pKXtzPVBpKHFuKG4uZnJvbSkscW4obi50bykpO249e307bi5tcz1zLm1pbGxpc2Vjb25kcztuLk09cy5tb250aHN9YT1uZXcgYWkobik7aWYoc2koZSkmJnUoZSwiX2xvY2FsZSIpKWEuX2xvY2FsZT1lLl9sb2NhbGU7aWYoc2koZSkmJnUoZSwiX2lzVmFsaWQiKSlhLl9pc1ZhbGlkPWUuX2lzVmFsaWQ7cmV0dXJuIGF9ZnVuY3Rpb24gRWkoZSx0KXt2YXIgbj1lJiZwYXJzZUZsb2F0KGUucmVwbGFjZSgiLCIsIi4iKSk7cmV0dXJuKGlzTmFOKG4pPzA6bikqdH1mdW5jdGlvbiBZaShlLHQpe3ZhciBuPXt9O24ubW9udGhzPXQubW9udGgoKS1lLm1vbnRoKCkrKHQueWVhcigpLWUueWVhcigpKSoxMjtpZihlLmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIikuaXNBZnRlcih0KSktLW4ubW9udGhzO24ubWlsbGlzZWNvbmRzPSt0LStlLmNsb25lKCkuYWRkKG4ubW9udGhzLCJNIik7cmV0dXJuIG59ZnVuY3Rpb24gUGkoZSx0KXt2YXIgbjtpZighKGUuaXNWYWxpZCgpJiZ0LmlzVmFsaWQoKSkpcmV0dXJue21pbGxpc2Vjb25kczowLG1vbnRoczowfTt0PWNpKHQsZSk7aWYoZS5pc0JlZm9yZSh0KSluPVlpKGUsdCk7ZWxzZXtuPVlpKHQsZSk7bi5taWxsaXNlY29uZHM9LW4ubWlsbGlzZWNvbmRzO24ubW9udGhzPS1uLm1vbnRoc31yZXR1cm4gbn1mdW5jdGlvbiBDaShyLGEpe3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciBuLGk7aWYodCE9PW51bGwmJiFpc05hTigrdCkpe1QoYSwibW9tZW50KCkuIithKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuIithKyIobnVtYmVyLCBwZXJpb2QpLiAiKyJTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uIik7aT1lO2U9dDt0PWl9bj1UaShlLHQpO1JpKHRoaXMsbixyKTtyZXR1cm4gdGhpc319ZnVuY3Rpb24gUmkoZSx0LG4saSl7dmFyIHI9dC5fbWlsbGlzZWNvbmRzLGE9b2kodC5fZGF5cykscz1vaSh0Ll9tb250aHMpO2lmKCFlLmlzVmFsaWQoKSlyZXR1cm47aT1pPT1udWxsP3RydWU6aTtpZihzKWh0KGUsWGUoZSwiTW9udGgiKStzKm4pO2lmKGEpWmUoZSwiRGF0ZSIsWGUoZSwiRGF0ZSIpK2Eqbik7aWYocillLl9kLnNldFRpbWUoZS5fZC52YWx1ZU9mKCkrcipuKTtpZihpKWgudXBkYXRlT2Zmc2V0KGUsYXx8cyl9VGkuZm49YWkucHJvdG90eXBlLFRpLmludmFsaWQ9cmk7dmFyIEFpPUNpKDEsImFkZCIpLHhpPUNpKC0xLCJzdWJ0cmFjdCIpO2Z1bmN0aW9uIE9pKGUpe3JldHVybiB0eXBlb2YgZT09PSJzdHJpbmcifHxlIGluc3RhbmNlb2YgU3RyaW5nfWZ1bmN0aW9uIElpKGUpe3JldHVybiBTKGUpfHxhKGUpfHxPaShlKXx8YyhlKXx8SGkoZSl8fFdpKGUpfHxlPT09bnVsbHx8ZT09PXVuZGVmaW5lZH1mdW5jdGlvbiBXaShlKXt2YXIgdD1vKGUpJiYhZChlKSxuPWZhbHNlLGk9WyJ5ZWFycyIsInllYXIiLCJ5IiwibW9udGhzIiwibW9udGgiLCJNIiwiZGF5cyIsImRheSIsImQiLCJkYXRlcyIsImRhdGUiLCJEIiwiaG91cnMiLCJob3VyIiwiaCIsIm1pbnV0ZXMiLCJtaW51dGUiLCJtIiwic2Vjb25kcyIsInNlY29uZCIsInMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1zIl0scixhLHM9aS5sZW5ndGg7Zm9yKHI9MDtyPHM7cis9MSl7YT1pW3JdO249bnx8dShlLGEpfXJldHVybiB0JiZufWZ1bmN0aW9uIEhpKHQpe3ZhciBlPXModCksbj1mYWxzZTtpZihlKW49dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIWMoZSkmJk9pKHQpfSkubGVuZ3RoPT09MDtyZXR1cm4gZSYmbn1mdW5jdGlvbiBqaShlKXt2YXIgdD1vKGUpJiYhZChlKSxuPWZhbHNlLGk9WyJzYW1lRGF5IiwibmV4dERheSIsImxhc3REYXkiLCJuZXh0V2VlayIsImxhc3RXZWVrIiwic2FtZUVsc2UiXSxyLGE7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrPTEpe2E9aVtyXTtuPW58fHUoZSxhKX1yZXR1cm4gdCYmbn1mdW5jdGlvbiBGaShlLHQpe3ZhciBuPWUuZGlmZih0LCJkYXlzIix0cnVlKTtyZXR1cm4gbjwtNj8ic2FtZUVsc2UiOm48LTE/Imxhc3RXZWVrIjpuPDA/Imxhc3REYXkiOm48MT8ic2FtZURheSI6bjwyPyJuZXh0RGF5IjpuPDc/Im5leHRXZWVrIjoic2FtZUVsc2UifWZ1bmN0aW9uIEJpKGUsdCl7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpaWYoIWFyZ3VtZW50c1swXSl7ZT11bmRlZmluZWQ7dD11bmRlZmluZWR9ZWxzZSBpZihJaShhcmd1bWVudHNbMF0pKXtlPWFyZ3VtZW50c1swXTt0PXVuZGVmaW5lZH1lbHNlIGlmKGppKGFyZ3VtZW50c1swXSkpe3Q9YXJndW1lbnRzWzBdO2U9dW5kZWZpbmVkfXZhciBuPWV8fHFuKCksaT1jaShuLHRoaXMpLnN0YXJ0T2YoImRheSIpLHI9aC5jYWxlbmRhckZvcm1hdCh0aGlzLGkpfHwic2FtZUVsc2UiLGE9dCYmKEUodFtyXSk/dFtyXS5jYWxsKHRoaXMsbik6dFtyXSk7cmV0dXJuIHRoaXMuZm9ybWF0KGF8fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKHIsdGhpcyxxbihuKSkpfWZ1bmN0aW9uIFVpKCl7cmV0dXJuIG5ldyBMKHRoaXMpfWZ1bmN0aW9uIE5pKGUsdCl7dmFyIG49UyhlKT9lOnFuKGUpO2lmKCEodGhpcy5pc1ZhbGlkKCkmJm4uaXNWYWxpZCgpKSlyZXR1cm4gZmFsc2U7dD10ZSh0KXx8Im1pbGxpc2Vjb25kIjtpZih0PT09Im1pbGxpc2Vjb25kIilyZXR1cm4gdGhpcy52YWx1ZU9mKCk+bi52YWx1ZU9mKCk7ZWxzZSByZXR1cm4gbi52YWx1ZU9mKCk8dGhpcy5jbG9uZSgpLnN0YXJ0T2YodCkudmFsdWVPZigpfWZ1bmN0aW9uIHppKGUsdCl7dmFyIG49UyhlKT9lOnFuKGUpO2lmKCEodGhpcy5pc1ZhbGlkKCkmJm4uaXNWYWxpZCgpKSlyZXR1cm4gZmFsc2U7dD10ZSh0KXx8Im1pbGxpc2Vjb25kIjtpZih0PT09Im1pbGxpc2Vjb25kIilyZXR1cm4gdGhpcy52YWx1ZU9mKCk8bi52YWx1ZU9mKCk7ZWxzZSByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHQpLnZhbHVlT2YoKTxuLnZhbHVlT2YoKX1mdW5jdGlvbiBWaShlLHQsbixpKXt2YXIgcj1TKGUpP2U6cW4oZSksYT1TKHQpP3Q6cW4odCk7aWYoISh0aGlzLmlzVmFsaWQoKSYmci5pc1ZhbGlkKCkmJmEuaXNWYWxpZCgpKSlyZXR1cm4gZmFsc2U7aT1pfHwiKCkiO3JldHVybihpWzBdPT09IigiP3RoaXMuaXNBZnRlcihyLG4pOiF0aGlzLmlzQmVmb3JlKHIsbikpJiYoaVsxXT09PSIpIj90aGlzLmlzQmVmb3JlKGEsbik6IXRoaXMuaXNBZnRlcihhLG4pKX1mdW5jdGlvbiBHaShlLHQpe3ZhciBuPVMoZSk/ZTpxbihlKSxpO2lmKCEodGhpcy5pc1ZhbGlkKCkmJm4uaXNWYWxpZCgpKSlyZXR1cm4gZmFsc2U7dD10ZSh0KXx8Im1pbGxpc2Vjb25kIjtpZih0PT09Im1pbGxpc2Vjb25kIilyZXR1cm4gdGhpcy52YWx1ZU9mKCk9PT1uLnZhbHVlT2YoKTtlbHNle2k9bi52YWx1ZU9mKCk7cmV0dXJuIHRoaXMuY2xvbmUoKS5zdGFydE9mKHQpLnZhbHVlT2YoKTw9aSYmaTw9dGhpcy5jbG9uZSgpLmVuZE9mKHQpLnZhbHVlT2YoKX19ZnVuY3Rpb24gSmkoZSx0KXtyZXR1cm4gdGhpcy5pc1NhbWUoZSx0KXx8dGhpcy5pc0FmdGVyKGUsdCl9ZnVuY3Rpb24gcWkoZSx0KXtyZXR1cm4gdGhpcy5pc1NhbWUoZSx0KXx8dGhpcy5pc0JlZm9yZShlLHQpfWZ1bmN0aW9uIEtpKGUsdCxuKXt2YXIgaSxyLGE7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47aT1jaShlLHRoaXMpO2lmKCFpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3I9KGkudXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqNmU0O3Q9dGUodCk7c3dpdGNoKHQpe2Nhc2UieWVhciI6YT1YaSh0aGlzLGkpLzEyO2JyZWFrO2Nhc2UibW9udGgiOmE9WGkodGhpcyxpKTticmVhaztjYXNlInF1YXJ0ZXIiOmE9WGkodGhpcyxpKS8zO2JyZWFrO2Nhc2Uic2Vjb25kIjphPSh0aGlzLWkpLzFlMzticmVhaztjYXNlIm1pbnV0ZSI6YT0odGhpcy1pKS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjphPSh0aGlzLWkpLzM2ZTU7YnJlYWs7Y2FzZSJkYXkiOmE9KHRoaXMtaS1yKS84NjRlNTticmVhaztjYXNlIndlZWsiOmE9KHRoaXMtaS1yKS82MDQ4ZTU7YnJlYWs7ZGVmYXVsdDphPXRoaXMtaX1yZXR1cm4gbj9hOlllKGEpfWZ1bmN0aW9uIFhpKGUsdCl7aWYoZS5kYXRlKCk8dC5kYXRlKCkpcmV0dXJuLVhpKHQsZSk7dmFyIG49KHQueWVhcigpLWUueWVhcigpKSoxMisodC5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKG4sIm1vbnRocyIpLHIsYTtpZih0LWk8MCl7cj1lLmNsb25lKCkuYWRkKG4tMSwibW9udGhzIik7YT0odC1pKS8oaS1yKX1lbHNle3I9ZS5jbG9uZSgpLmFkZChuKzEsIm1vbnRocyIpO2E9KHQtaSkvKHItaSl9cmV0dXJuLShuK2EpfHwwfWZ1bmN0aW9uIFppKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoImVuIikuZm9ybWF0KCJkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWiIpfWZ1bmN0aW9uICRpKGUpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbDt2YXIgdD1lIT09dHJ1ZSxuPXQ/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7aWYobi55ZWFyKCk8MHx8bi55ZWFyKCk+OTk5OSlyZXR1cm4gVShuLHQ/IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1oiKTtpZihFKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSlpZih0KXJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7ZWxzZSByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkrdGhpcy51dGNPZmZzZXQoKSo2MCoxZTMpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgiWiIsVShuLCJaIikpO3JldHVybiBVKG4sdD8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9ZnVuY3Rpb24gUWkoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIGU9Im1vbWVudCIsdD0iIixuLGkscixhO2lmKCF0aGlzLmlzTG9jYWwoKSl7ZT10aGlzLnV0Y09mZnNldCgpPT09MD8ibW9tZW50LnV0YyI6Im1vbWVudC5wYXJzZVpvbmUiO3Q9IloifW49IlsiK2UrJygiXSc7aT0wPD10aGlzLnllYXIoKSYmdGhpcy55ZWFyKCk8PTk5OTk/IllZWVkiOiJZWVlZWVkiO3I9Ii1NTS1ERFtUXUhIOm1tOnNzLlNTUyI7YT10KydbIildJztyZXR1cm4gdGhpcy5mb3JtYXQobitpK3IrYSl9ZnVuY3Rpb24gZXIoZSl7aWYoIWUpZT10aGlzLmlzVXRjKCk/aC5kZWZhdWx0Rm9ybWF0VXRjOmguZGVmYXVsdEZvcm1hdDt2YXIgdD1VKHRoaXMsZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQodCl9ZnVuY3Rpb24gdHIoZSx0KXtpZih0aGlzLmlzVmFsaWQoKSYmKFMoZSkmJmUuaXNWYWxpZCgpfHxxbihlKS5pc1ZhbGlkKCkpKXJldHVybiBUaSh7dG86dGhpcyxmcm9tOmV9KS5sb2NhbGUodGhpcy5sb2NhbGUoKSkuaHVtYW5pemUoIXQpO2Vsc2UgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9ZnVuY3Rpb24gbnIoZSl7cmV0dXJuIHRoaXMuZnJvbShxbigpLGUpfWZ1bmN0aW9uIGlyKGUsdCl7aWYodGhpcy5pc1ZhbGlkKCkmJihTKGUpJiZlLmlzVmFsaWQoKXx8cW4oZSkuaXNWYWxpZCgpKSlyZXR1cm4gVGkoe2Zyb206dGhpcyx0bzplfSkubG9jYWxlKHRoaXMubG9jYWxlKCkpLmh1bWFuaXplKCF0KTtlbHNlIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIHJyKGUpe3JldHVybiB0aGlzLnRvKHFuKCksZSl9ZnVuY3Rpb24gYXIoZSl7dmFyIHQ7aWYoZT09PXVuZGVmaW5lZClyZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO2Vsc2V7dD15bihlKTtpZih0IT1udWxsKXRoaXMuX2xvY2FsZT10O3JldHVybiB0aGlzfX1oLmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIixoLmRlZmF1bHRGb3JtYXRVdGM9IllZWVktTU0tRERUSEg6bW06c3NbWl0iO3ZhciBzcj1iKCJtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLiIsZnVuY3Rpb24oZSl7aWYoZT09PXVuZGVmaW5lZClyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7ZWxzZSByZXR1cm4gdGhpcy5sb2NhbGUoZSl9KTtmdW5jdGlvbiBvcigpe3JldHVybiB0aGlzLl9sb2NhbGV9dmFyIHVyPTFlMyxkcj02MCp1cixscj02MCpkcixocj0oMzY1KjQwMCs5NykqMjQqbHI7ZnVuY3Rpb24gY3IoZSx0KXtyZXR1cm4oZSV0K3QpJXR9ZnVuY3Rpb24gX3IoZSx0LG4pe2lmKGU8MTAwJiZlPj0wKXJldHVybiBuZXcgRGF0ZShlKzQwMCx0LG4pLWhyO2Vsc2UgcmV0dXJuIG5ldyBEYXRlKGUsdCxuKS52YWx1ZU9mKCl9ZnVuY3Rpb24gZnIoZSx0LG4pe2lmKGU8MTAwJiZlPj0wKXJldHVybiBEYXRlLlVUQyhlKzQwMCx0LG4pLWhyO2Vsc2UgcmV0dXJuIERhdGUuVVRDKGUsdCxuKX1mdW5jdGlvbiBtcihlKXt2YXIgdCxuO2U9dGUoZSk7aWYoZT09PXVuZGVmaW5lZHx8ZT09PSJtaWxsaXNlY29uZCJ8fCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcztuPXRoaXMuX2lzVVRDP2ZyOl9yO3N3aXRjaChlKXtjYXNlInllYXIiOnQ9bih0aGlzLnllYXIoKSwwLDEpO2JyZWFrO2Nhc2UicXVhcnRlciI6dD1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMywxKTticmVhaztjYXNlIm1vbnRoIjp0PW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nhc2Uid2VlayI6dD1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS10aGlzLndlZWtkYXkoKSk7YnJlYWs7Y2FzZSJpc29XZWVrIjp0PW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSk7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6dD1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSk7YnJlYWs7Y2FzZSJob3VyIjp0PXRoaXMuX2QudmFsdWVPZigpO3QtPWNyKHQrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpkciksbHIpO2JyZWFrO2Nhc2UibWludXRlIjp0PXRoaXMuX2QudmFsdWVPZigpO3QtPWNyKHQsZHIpO2JyZWFrO2Nhc2Uic2Vjb25kIjp0PXRoaXMuX2QudmFsdWVPZigpO3QtPWNyKHQsdXIpO2JyZWFrfXRoaXMuX2Quc2V0VGltZSh0KTtoLnVwZGF0ZU9mZnNldCh0aGlzLHRydWUpO3JldHVybiB0aGlzfWZ1bmN0aW9uIHByKGUpe3ZhciB0LG47ZT10ZShlKTtpZihlPT09dW5kZWZpbmVkfHxlPT09Im1pbGxpc2Vjb25kInx8IXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzO249dGhpcy5faXNVVEM/ZnI6X3I7c3dpdGNoKGUpe2Nhc2UieWVhciI6dD1uKHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6dD1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKS10aGlzLm1vbnRoKCklMyszLDEpLTE7YnJlYWs7Y2FzZSJtb250aCI6dD1uKHRoaXMueWVhcigpLHRoaXMubW9udGgoKSsxLDEpLTE7YnJlYWs7Y2FzZSJ3ZWVrIjp0PW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjp0PW4odGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLSh0aGlzLmlzb1dlZWtkYXkoKS0xKSs3KS0xO2JyZWFrO2Nhc2UiZGF5IjpjYXNlImRhdGUiOnQ9bih0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCkrMSktMTticmVhaztjYXNlImhvdXIiOnQ9dGhpcy5fZC52YWx1ZU9mKCk7dCs9bHItY3IodCsodGhpcy5faXNVVEM/MDp0aGlzLnV0Y09mZnNldCgpKmRyKSxsciktMTticmVhaztjYXNlIm1pbnV0ZSI6dD10aGlzLl9kLnZhbHVlT2YoKTt0Kz1kci1jcih0LGRyKS0xO2JyZWFrO2Nhc2Uic2Vjb25kIjp0PXRoaXMuX2QudmFsdWVPZigpO3QrPXVyLWNyKHQsdXIpLTE7YnJlYWt9dGhpcy5fZC5zZXRUaW1lKHQpO2gudXBkYXRlT2Zmc2V0KHRoaXMsdHJ1ZSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24geXIoKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktKHRoaXMuX29mZnNldHx8MCkqNmU0fWZ1bmN0aW9uIHZyKCl7cmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkvMWUzKX1mdW5jdGlvbiBncigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9ZnVuY3Rpb24gTXIoKXt2YXIgZT10aGlzO3JldHVybltlLnllYXIoKSxlLm1vbnRoKCksZS5kYXRlKCksZS5ob3VyKCksZS5taW51dGUoKSxlLnNlY29uZCgpLGUubWlsbGlzZWNvbmQoKV19ZnVuY3Rpb24gTHIoKXt2YXIgZT10aGlzO3JldHVybnt5ZWFyczplLnllYXIoKSxtb250aHM6ZS5tb250aCgpLGRhdGU6ZS5kYXRlKCksaG91cnM6ZS5ob3VycygpLG1pbnV0ZXM6ZS5taW51dGVzKCksc2Vjb25kczplLnNlY29uZHMoKSxtaWxsaXNlY29uZHM6ZS5taWxsaXNlY29uZHMoKX19ZnVuY3Rpb24gU3IoKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy50b0lTT1N0cmluZygpOm51bGx9ZnVuY3Rpb24ga3IoKXtyZXR1cm4gcCh0aGlzKX1mdW5jdGlvbiBicigpe3JldHVybiBfKHt9LG0odGhpcykpfWZ1bmN0aW9uIHdyKCl7cmV0dXJuIG0odGhpcykub3ZlcmZsb3d9ZnVuY3Rpb24gRHIoKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxlLGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fWZ1bmN0aW9uIFRyKGUsdCl7dmFyIG4saSxyLGE9dGhpcy5fZXJhc3x8eW4oImVuIikuX2VyYXM7Zm9yKG49MCxpPWEubGVuZ3RoO248aTsrK24pe3N3aXRjaCh0eXBlb2YgYVtuXS5zaW5jZSl7Y2FzZSJzdHJpbmciOnI9aChhW25dLnNpbmNlKS5zdGFydE9mKCJkYXkiKTthW25dLnNpbmNlPXIudmFsdWVPZigpO2JyZWFrfXN3aXRjaCh0eXBlb2YgYVtuXS51bnRpbCl7Y2FzZSJ1bmRlZmluZWQiOmFbbl0udW50aWw9K0luZmluaXR5O2JyZWFrO2Nhc2Uic3RyaW5nIjpyPWgoYVtuXS51bnRpbCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpO2Fbbl0udW50aWw9ci52YWx1ZU9mKCk7YnJlYWt9fXJldHVybiBhfWZ1bmN0aW9uIEVyKGUsdCxuKXt2YXIgaSxyLGE9dGhpcy5lcmFzKCkscyxvLHU7ZT1lLnRvVXBwZXJDYXNlKCk7Zm9yKGk9MCxyPWEubGVuZ3RoO2k8cjsrK2kpe3M9YVtpXS5uYW1lLnRvVXBwZXJDYXNlKCk7bz1hW2ldLmFiYnIudG9VcHBlckNhc2UoKTt1PWFbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7aWYobilzd2l0Y2godCl7Y2FzZSJOIjpjYXNlIk5OIjpjYXNlIk5OTiI6aWYobz09PWUpcmV0dXJuIGFbaV07YnJlYWs7Y2FzZSJOTk5OIjppZihzPT09ZSlyZXR1cm4gYVtpXTticmVhaztjYXNlIk5OTk5OIjppZih1PT09ZSlyZXR1cm4gYVtpXTticmVha31lbHNlIGlmKFtzLG8sdV0uaW5kZXhPZihlKT49MClyZXR1cm4gYVtpXX19ZnVuY3Rpb24gWXIoZSx0KXt2YXIgbj1lLnNpbmNlPD1lLnVudGlsPysxOi0xO2lmKHQ9PT11bmRlZmluZWQpcmV0dXJuIGgoZS5zaW5jZSkueWVhcigpO2Vsc2UgcmV0dXJuIGgoZS5zaW5jZSkueWVhcigpKyh0LWUub2Zmc2V0KSpufWZ1bmN0aW9uIFByKCl7dmFyIGUsdCxuLGk9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihlPTAsdD1pLmxlbmd0aDtlPHQ7KytlKXtuPXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCk7aWYoaVtlXS5zaW5jZTw9biYmbjw9aVtlXS51bnRpbClyZXR1cm4gaVtlXS5uYW1lO2lmKGlbZV0udW50aWw8PW4mJm48PWlbZV0uc2luY2UpcmV0dXJuIGlbZV0ubmFtZX1yZXR1cm4iIn1mdW5jdGlvbiBDcigpe3ZhciBlLHQsbixpPXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoZT0wLHQ9aS5sZW5ndGg7ZTx0OysrZSl7bj10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpO2lmKGlbZV0uc2luY2U8PW4mJm48PWlbZV0udW50aWwpcmV0dXJuIGlbZV0ubmFycm93O2lmKGlbZV0udW50aWw8PW4mJm48PWlbZV0uc2luY2UpcmV0dXJuIGlbZV0ubmFycm93fXJldHVybiIifWZ1bmN0aW9uIFJyKCl7dmFyIGUsdCxuLGk9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihlPTAsdD1pLmxlbmd0aDtlPHQ7KytlKXtuPXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCk7aWYoaVtlXS5zaW5jZTw9biYmbjw9aVtlXS51bnRpbClyZXR1cm4gaVtlXS5hYmJyO2lmKGlbZV0udW50aWw8PW4mJm48PWlbZV0uc2luY2UpcmV0dXJuIGlbZV0uYWJicn1yZXR1cm4iIn1mdW5jdGlvbiBBcigpe3ZhciBlLHQsbixpLHI9dGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihlPTAsdD1yLmxlbmd0aDtlPHQ7KytlKXtuPXJbZV0uc2luY2U8PXJbZV0udW50aWw/KzE6LTE7aT10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpO2lmKHJbZV0uc2luY2U8PWkmJmk8PXJbZV0udW50aWx8fHJbZV0udW50aWw8PWkmJmk8PXJbZV0uc2luY2UpcmV0dXJuKHRoaXMueWVhcigpLWgocltlXS5zaW5jZSkueWVhcigpKSpuK3JbZV0ub2Zmc2V0fXJldHVybiB0aGlzLnllYXIoKX1mdW5jdGlvbiB4cihlKXtpZighdSh0aGlzLCJfZXJhc05hbWVSZWdleCIpKUJyLmNhbGwodGhpcyk7cmV0dXJuIGU/dGhpcy5fZXJhc05hbWVSZWdleDp0aGlzLl9lcmFzUmVnZXh9ZnVuY3Rpb24gT3IoZSl7aWYoIXUodGhpcywiX2VyYXNBYmJyUmVnZXgiKSlCci5jYWxsKHRoaXMpO3JldHVybiBlP3RoaXMuX2VyYXNBYmJyUmVnZXg6dGhpcy5fZXJhc1JlZ2V4fWZ1bmN0aW9uIElyKGUpe2lmKCF1KHRoaXMsIl9lcmFzTmFycm93UmVnZXgiKSlCci5jYWxsKHRoaXMpO3JldHVybiBlP3RoaXMuX2VyYXNOYXJyb3dSZWdleDp0aGlzLl9lcmFzUmVnZXh9ZnVuY3Rpb24gV3IoZSx0KXtyZXR1cm4gdC5lcmFzQWJiclJlZ2V4KGUpfWZ1bmN0aW9uIEhyKGUsdCl7cmV0dXJuIHQuZXJhc05hbWVSZWdleChlKX1mdW5jdGlvbiBqcihlLHQpe3JldHVybiB0LmVyYXNOYXJyb3dSZWdleChlKX1mdW5jdGlvbiBGcihlLHQpe3JldHVybiB0Ll9lcmFZZWFyT3JkaW5hbFJlZ2V4fHxwZX1mdW5jdGlvbiBCcigpe3ZhciBlPVtdLHQ9W10sbj1bXSxpPVtdLHIsYSxzLG8sdSxkPXRoaXMuZXJhcygpO2ZvcihyPTAsYT1kLmxlbmd0aDtyPGE7KytyKXtzPUVlKGRbcl0ubmFtZSk7bz1FZShkW3JdLmFiYnIpO3U9RWUoZFtyXS5uYXJyb3cpO3QucHVzaChzKTtlLnB1c2gobyk7bi5wdXNoKHUpO2kucHVzaChzKTtpLnB1c2gobyk7aS5wdXNoKHUpfXRoaXMuX2VyYXNSZWdleD1uZXcgUmVnRXhwKCJeKCIraS5qb2luKCJ8IikrIikiLCJpIik7dGhpcy5fZXJhc05hbWVSZWdleD1uZXcgUmVnRXhwKCJeKCIrdC5qb2luKCJ8IikrIikiLCJpIik7dGhpcy5fZXJhc0FiYnJSZWdleD1uZXcgUmVnRXhwKCJeKCIrZS5qb2luKCJ8IikrIikiLCJpIik7dGhpcy5fZXJhc05hcnJvd1JlZ2V4PW5ldyBSZWdFeHAoIl4oIituLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBVcihlLHQpe2ooMCxbZSxlLmxlbmd0aF0sMCx0KX1mdW5jdGlvbiBOcihlKXtyZXR1cm4gS3IuY2FsbCh0aGlzLGUsdGhpcy53ZWVrKCksdGhpcy53ZWVrZGF5KCkrdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyx0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3kpfWZ1bmN0aW9uIHpyKGUpe3JldHVybiBLci5jYWxsKHRoaXMsZSx0aGlzLmlzb1dlZWsoKSx0aGlzLmlzb1dlZWtkYXkoKSwxLDQpfWZ1bmN0aW9uIFZyKCl7cmV0dXJuIFN0KHRoaXMueWVhcigpLDEsNCl9ZnVuY3Rpb24gR3IoKXtyZXR1cm4gU3QodGhpcy5pc29XZWVrWWVhcigpLDEsNCl9ZnVuY3Rpb24gSnIoKXt2YXIgZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gU3QodGhpcy55ZWFyKCksZS5kb3csZS5kb3kpfWZ1bmN0aW9uIHFyKCl7dmFyIGU9dGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7cmV0dXJuIFN0KHRoaXMud2Vla1llYXIoKSxlLmRvdyxlLmRveSl9ZnVuY3Rpb24gS3IoZSx0LG4saSxyKXt2YXIgYTtpZihlPT1udWxsKXJldHVybiBMdCh0aGlzLGkscikueWVhcjtlbHNle2E9U3QoZSxpLHIpO2lmKHQ+YSl0PWE7cmV0dXJuIFhyLmNhbGwodGhpcyxlLHQsbixpLHIpfX1mdW5jdGlvbiBYcihlLHQsbixpLHIpe3ZhciBhPU10KGUsdCxuLGkscikscz12dChhLnllYXIsMCxhLmRheU9mWWVhcik7dGhpcy55ZWFyKHMuZ2V0VVRDRnVsbFllYXIoKSk7dGhpcy5tb250aChzLmdldFVUQ01vbnRoKCkpO3RoaXMuZGF0ZShzLmdldFVUQ0RhdGUoKSk7cmV0dXJuIHRoaXN9ZnVuY3Rpb24gWnIoZSl7cmV0dXJuIGU9PW51bGw/TWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkrMSkvMyk6dGhpcy5tb250aCgoZS0xKSozK3RoaXMubW9udGgoKSUzKX1qKCJOIiwwLDAsImVyYUFiYnIiKSxqKCJOTiIsMCwwLCJlcmFBYmJyIiksaigiTk5OIiwwLDAsImVyYUFiYnIiKSxqKCJOTk5OIiwwLDAsImVyYU5hbWUiKSxqKCJOTk5OTiIsMCwwLCJlcmFOYXJyb3ciKSxqKCJ5IixbInkiLDFdLCJ5byIsImVyYVllYXIiKSxqKCJ5IixbInl5IiwyXSwwLCJlcmFZZWFyIiksaigieSIsWyJ5eXkiLDNdLDAsImVyYVllYXIiKSxqKCJ5IixbInl5eXkiLDRdLDAsImVyYVllYXIiKSx3ZSgiTiIsV3IpLHdlKCJOTiIsV3IpLHdlKCJOTk4iLFdyKSx3ZSgiTk5OTiIsSHIpLHdlKCJOTk5OTiIsanIpLFJlKFsiTiIsIk5OIiwiTk5OIiwiTk5OTiIsIk5OTk5OIl0sZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9bi5fbG9jYWxlLmVyYXNQYXJzZShlLGksbi5fc3RyaWN0KTtpZihyKW0obikuZXJhPXI7ZWxzZSBtKG4pLmludmFsaWRFcmE9ZX0pLHdlKCJ5IixwZSksd2UoInl5IixwZSksd2UoInl5eSIscGUpLHdlKCJ5eXl5IixwZSksd2UoInlvIixGciksUmUoWyJ5IiwieXkiLCJ5eXkiLCJ5eXl5Il0sSWUpLFJlKFsieW8iXSxmdW5jdGlvbihlLHQsbixpKXt2YXIgcjtpZihuLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpcj1lLm1hdGNoKG4uX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7aWYobi5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpdFtJZV09bi5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoZSxyKTtlbHNlIHRbSWVdPXBhcnNlSW50KGUsMTApfSksaigwLFsiZ2ciLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy53ZWVrWWVhcigpJTEwMH0pLGooMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxVcigiZ2dnZyIsIndlZWtZZWFyIiksVXIoImdnZ2dnIiwid2Vla1llYXIiKSxVcigiR0dHRyIsImlzb1dlZWtZZWFyIiksVXIoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSx3ZSgiRyIseWUpLHdlKCJnIix5ZSksd2UoIkdHIixsZSxzZSksd2UoImdnIixsZSxzZSksd2UoIkdHR0ciLGZlLHVlKSx3ZSgiZ2dnZyIsZmUsdWUpLHdlKCJHR0dHRyIsbWUsZGUpLHdlKCJnZ2dnZyIsbWUsZGUpLEFlKFsiZ2dnZyIsImdnZ2dnIiwiR0dHRyIsIkdHR0dHIl0sZnVuY3Rpb24oZSx0LG4saSl7dFtpLnN1YnN0cigwLDIpXT1QZShlKX0pLEFlKFsiZ2ciLCJHRyJdLGZ1bmN0aW9uKGUsdCxuLGkpe3RbaV09aC5wYXJzZVR3b0RpZ2l0WWVhcihlKX0pLGooIlEiLDAsIlFvIiwicXVhcnRlciIpLHdlKCJRIixhZSksUmUoIlEiLGZ1bmN0aW9uKGUsdCl7dFtXZV09KFBlKGUpLTEpKjN9KSxqKCJEIixbIkREIiwyXSwiRG8iLCJkYXRlIiksd2UoIkQiLGxlLFNlKSx3ZSgiREQiLGxlLHNlKSx3ZSgiRG8iLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/dC5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8dC5fb3JkaW5hbFBhcnNlOnQuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50fSksUmUoWyJEIiwiREQiXSxIZSksUmUoIkRvIixmdW5jdGlvbihlLHQpe3RbSGVdPVBlKGUubWF0Y2gobGUpWzBdKX0pO3ZhciAkcj1LZSgiRGF0ZSIsdHJ1ZSk7ZnVuY3Rpb24gUXIoZSl7dmFyIHQ9TWF0aC5yb3VuZCgodGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRheSIpLXRoaXMuY2xvbmUoKS5zdGFydE9mKCJ5ZWFyIikpLzg2NGU1KSsxO3JldHVybiBlPT1udWxsP3Q6dGhpcy5hZGQoZS10LCJkIil9aigiREREIixbIkREREQiLDNdLCJERERvIiwiZGF5T2ZZZWFyIiksd2UoIkRERCIsX2UpLHdlKCJEREREIixvZSksUmUoWyJEREQiLCJEREREIl0sZnVuY3Rpb24oZSx0LG4pe24uX2RheU9mWWVhcj1QZShlKX0pLGooIm0iLFsibW0iLDJdLDAsIm1pbnV0ZSIpLHdlKCJtIixsZSxrZSksd2UoIm1tIixsZSxzZSksUmUoWyJtIiwibW0iXSxGZSk7dmFyIGVhPUtlKCJNaW51dGVzIixmYWxzZSk7aigicyIsWyJzcyIsMl0sMCwic2Vjb25kIiksd2UoInMiLGxlLGtlKSx3ZSgic3MiLGxlLHNlKSxSZShbInMiLCJzcyJdLEJlKTt2YXIgdGE9S2UoIlNlY29uZHMiLGZhbHNlKSxuYSxpYTtmb3IoaigiUyIsMCwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwMCl9KSxqKDAsWyJTUyIsMl0sMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMCl9KSxqKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksaigwLFsiU1NTUyIsNF0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkqMTB9KSxqKDAsWyJTU1NTUyIsNV0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkqMTAwfSksaigwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSoxZTN9KSxqKDAsWyJTU1NTU1NTIiw3XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSoxZTR9KSxqKDAsWyJTU1NTU1NTUyIsOF0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkqMWU1fSksaigwLFsiU1NTU1NTU1NTIiw5XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSoxZTZ9KSx3ZSgiUyIsX2UsYWUpLHdlKCJTUyIsX2Usc2UpLHdlKCJTU1MiLF9lLG9lKSxuYT0iU1NTUyI7bmEubGVuZ3RoPD05O25hKz0iUyIpd2UobmEscGUpO2Z1bmN0aW9uIHJhKGUsdCl7dFtVZV09UGUoKCIwLiIrZSkqMWUzKX1mb3IobmE9IlMiO25hLmxlbmd0aDw9OTtuYSs9IlMiKVJlKG5hLHJhKTtmdW5jdGlvbiBhYSgpe3JldHVybiB0aGlzLl9pc1VUQz8iVVRDIjoiIn1mdW5jdGlvbiBzYSgpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifWlhPUtlKCJNaWxsaXNlY29uZHMiLGZhbHNlKSxqKCJ6IiwwLDAsInpvbmVBYmJyIiksaigienoiLDAsMCwiem9uZU5hbWUiKTt2YXIgb2E9TC5wcm90b3R5cGU7aWYob2EuYWRkPUFpLG9hLmNhbGVuZGFyPUJpLG9hLmNsb25lPVVpLG9hLmRpZmY9S2ksb2EuZW5kT2Y9cHIsb2EuZm9ybWF0PWVyLG9hLmZyb209dHIsb2EuZnJvbU5vdz1ucixvYS50bz1pcixvYS50b05vdz1ycixvYS5nZXQ9JGUsb2EuaW52YWxpZEF0PXdyLG9hLmlzQWZ0ZXI9Tmksb2EuaXNCZWZvcmU9emksb2EuaXNCZXR3ZWVuPVZpLG9hLmlzU2FtZT1HaSxvYS5pc1NhbWVPckFmdGVyPUppLG9hLmlzU2FtZU9yQmVmb3JlPXFpLG9hLmlzVmFsaWQ9a3Isb2EubGFuZz1zcixvYS5sb2NhbGU9YXIsb2EubG9jYWxlRGF0YT1vcixvYS5tYXg9WG4sb2EubWluPUtuLG9hLnBhcnNpbmdGbGFncz1icixvYS5zZXQ9UWUsb2Euc3RhcnRPZj1tcixvYS5zdWJ0cmFjdD14aSxvYS50b0FycmF5PU1yLG9hLnRvT2JqZWN0PUxyLG9hLnRvRGF0ZT1ncixvYS50b0lTT1N0cmluZz0kaSxvYS5pbnNwZWN0PVFpLHR5cGVvZiBTeW1ib2whPT0idW5kZWZpbmVkIiYmU3ltYm9sLmZvciE9bnVsbClvYVtTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpXT1mdW5jdGlvbigpe3JldHVybiJNb21lbnQ8Iit0aGlzLmZvcm1hdCgpKyI+In07ZnVuY3Rpb24gdWEoZSl7cmV0dXJuIHFuKGUqMWUzKX1mdW5jdGlvbiBkYSgpe3JldHVybiBxbi5hcHBseShudWxsLGFyZ3VtZW50cykucGFyc2Vab25lKCl9ZnVuY3Rpb24gbGEoZSl7cmV0dXJuIGV9b2EudG9KU09OPVNyLG9hLnRvU3RyaW5nPVppLG9hLnVuaXg9dnIsb2EudmFsdWVPZj15cixvYS5jcmVhdGlvbkRhdGE9RHIsb2EuZXJhTmFtZT1QcixvYS5lcmFOYXJyb3c9Q3Isb2EuZXJhQWJicj1ScixvYS5lcmFZZWFyPUFyLG9hLnllYXI9R2Usb2EuaXNMZWFwWWVhcj1xZSxvYS53ZWVrWWVhcj1OcixvYS5pc29XZWVrWWVhcj16cixvYS5xdWFydGVyPW9hLnF1YXJ0ZXJzPVpyLG9hLm1vbnRoPWN0LG9hLmRheXNJbk1vbnRoPV90LG9hLndlZWs9b2Eud2Vla3M9VHQsb2EuaXNvV2Vlaz1vYS5pc29XZWVrcz1FdCxvYS53ZWVrc0luWWVhcj1KcixvYS53ZWVrc0luV2Vla1llYXI9cXIsb2EuaXNvV2Vla3NJblllYXI9VnIsb2EuaXNvV2Vla3NJbklTT1dlZWtZZWFyPUdyLG9hLmRhdGU9JHIsb2EuZGF5PW9hLmRheXM9TnQsb2Eud2Vla2RheT16dCxvYS5pc29XZWVrZGF5PVZ0LG9hLmRheU9mWWVhcj1RcixvYS5ob3VyPW9hLmhvdXJzPW5uLG9hLm1pbnV0ZT1vYS5taW51dGVzPWVhLG9hLnNlY29uZD1vYS5zZWNvbmRzPXRhLG9hLm1pbGxpc2Vjb25kPW9hLm1pbGxpc2Vjb25kcz1pYSxvYS51dGNPZmZzZXQ9Zmksb2EudXRjPXBpLG9hLmxvY2FsPXlpLG9hLnBhcnNlWm9uZT12aSxvYS5oYXNBbGlnbmVkSG91ck9mZnNldD1naSxvYS5pc0RTVD1NaSxvYS5pc0xvY2FsPVNpLG9hLmlzVXRjT2Zmc2V0PWtpLG9hLmlzVXRjPWJpLG9hLmlzVVRDPWJpLG9hLnpvbmVBYmJyPWFhLG9hLnpvbmVOYW1lPXNhLG9hLmRhdGVzPWIoImRhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuIiwkciksb2EubW9udGhzPWIoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsY3QpLG9hLnllYXJzPWIoInllYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQiLEdlKSxvYS56b25lPWIoIm1vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvIixtaSksb2EuaXNEU1RTaGlmdGVkPWIoImlzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24iLExpKTt2YXIgaGE9Qy5wcm90b3R5cGU7ZnVuY3Rpb24gY2EoZSx0LG4saSl7dmFyIHI9eW4oKSxhPWYoKS5zZXQoaSx0KTtyZXR1cm4gcltuXShhLGUpfWZ1bmN0aW9uIF9hKGUsdCxuKXtpZihjKGUpKXt0PWU7ZT11bmRlZmluZWR9ZT1lfHwiIjtpZih0IT1udWxsKXJldHVybiBjYShlLHQsbiwibW9udGgiKTt2YXIgaSxyPVtdO2ZvcihpPTA7aTwxMjtpKyspcltpXT1jYShlLGksbiwibW9udGgiKTtyZXR1cm4gcn1mdW5jdGlvbiBmYShlLHQsbixpKXtpZih0eXBlb2YgZT09PSJib29sZWFuIil7aWYoYyh0KSl7bj10O3Q9dW5kZWZpbmVkfXQ9dHx8IiJ9ZWxzZXt0PWU7bj10O2U9ZmFsc2U7aWYoYyh0KSl7bj10O3Q9dW5kZWZpbmVkfXQ9dHx8IiJ9dmFyIHI9eW4oKSxhPWU/ci5fd2Vlay5kb3c6MCxzLG89W107aWYobiE9bnVsbClyZXR1cm4gY2EodCwobithKSU3LGksImRheSIpO2ZvcihzPTA7czw3O3MrKylvW3NdPWNhKHQsKHMrYSklNyxpLCJkYXkiKTtyZXR1cm4gb31mdW5jdGlvbiBtYShlLHQpe3JldHVybiBfYShlLHQsIm1vbnRocyIpfWZ1bmN0aW9uIHBhKGUsdCl7cmV0dXJuIF9hKGUsdCwibW9udGhzU2hvcnQiKX1mdW5jdGlvbiB5YShlLHQsbil7cmV0dXJuIGZhKGUsdCxuLCJ3ZWVrZGF5cyIpfWZ1bmN0aW9uIHZhKGUsdCxuKXtyZXR1cm4gZmEoZSx0LG4sIndlZWtkYXlzU2hvcnQiKX1mdW5jdGlvbiBnYShlLHQsbil7cmV0dXJuIGZhKGUsdCxuLCJ3ZWVrZGF5c01pbiIpfWhhLmNhbGVuZGFyPUEsaGEubG9uZ0RhdGVGb3JtYXQ9VixoYS5pbnZhbGlkRGF0ZT1KLGhhLm9yZGluYWw9WCxoYS5wcmVwYXJzZT1sYSxoYS5wb3N0Zm9ybWF0PWxhLGhhLnJlbGF0aXZlVGltZT0kLGhhLnBhc3RGdXR1cmU9USxoYS5zZXQ9WSxoYS5lcmFzPVRyLGhhLmVyYXNQYXJzZT1FcixoYS5lcmFzQ29udmVydFllYXI9WXIsaGEuZXJhc0FiYnJSZWdleD1PcixoYS5lcmFzTmFtZVJlZ2V4PXhyLGhhLmVyYXNOYXJyb3dSZWdleD1JcixoYS5tb250aHM9b3QsaGEubW9udGhzU2hvcnQ9dXQsaGEubW9udGhzUGFyc2U9bHQsaGEubW9udGhzUmVnZXg9bXQsaGEubW9udGhzU2hvcnRSZWdleD1mdCxoYS53ZWVrPWt0LGhhLmZpcnN0RGF5T2ZZZWFyPUR0LGhhLmZpcnN0RGF5T2ZXZWVrPXd0LGhhLndlZWtkYXlzPUh0LGhhLndlZWtkYXlzTWluPUZ0LGhhLndlZWtkYXlzU2hvcnQ9anQsaGEud2Vla2RheXNQYXJzZT1VdCxoYS53ZWVrZGF5c1JlZ2V4PUd0LGhhLndlZWtkYXlzU2hvcnRSZWdleD1KdCxoYS53ZWVrZGF5c01pblJlZ2V4PXF0LGhhLmlzUE09ZW4saGEubWVyaWRpZW09cm4sZm4oImVuIix7ZXJhczpbe3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDorSW5maW5pdHksb2Zmc2V0OjEsbmFtZToiQW5ubyBEb21pbmkiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotSW5maW5pdHksb2Zmc2V0OjEsbmFtZToiQmVmb3JlIENocmlzdCIsbmFycm93OiJCQyIsYWJicjoiQkMifV0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSh0aHxzdHxuZHxyZCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMCxuPVBlKGUlMTAwLzEwKT09PTE/InRoIjp0PT09MT8ic3QiOnQ9PT0yPyJuZCI6dD09PTM/InJkIjoidGgiO3JldHVybiBlK259fSksaC5sYW5nPWIoIm1vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuIixmbiksaC5sYW5nRGF0YT1iKCJtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuIix5bik7dmFyIE1hPU1hdGguYWJzO2Z1bmN0aW9uIExhKCl7dmFyIGU9dGhpcy5fZGF0YTt0aGlzLl9taWxsaXNlY29uZHM9TWEodGhpcy5fbWlsbGlzZWNvbmRzKTt0aGlzLl9kYXlzPU1hKHRoaXMuX2RheXMpO3RoaXMuX21vbnRocz1NYSh0aGlzLl9tb250aHMpO2UubWlsbGlzZWNvbmRzPU1hKGUubWlsbGlzZWNvbmRzKTtlLnNlY29uZHM9TWEoZS5zZWNvbmRzKTtlLm1pbnV0ZXM9TWEoZS5taW51dGVzKTtlLmhvdXJzPU1hKGUuaG91cnMpO2UubW9udGhzPU1hKGUubW9udGhzKTtlLnllYXJzPU1hKGUueWVhcnMpO3JldHVybiB0aGlzfWZ1bmN0aW9uIFNhKGUsdCxuLGkpe3ZhciByPVRpKHQsbik7ZS5fbWlsbGlzZWNvbmRzKz1pKnIuX21pbGxpc2Vjb25kcztlLl9kYXlzKz1pKnIuX2RheXM7ZS5fbW9udGhzKz1pKnIuX21vbnRocztyZXR1cm4gZS5fYnViYmxlKCl9ZnVuY3Rpb24ga2EoZSx0KXtyZXR1cm4gU2EodGhpcyxlLHQsMSl9ZnVuY3Rpb24gYmEoZSx0KXtyZXR1cm4gU2EodGhpcyxlLHQsLTEpfWZ1bmN0aW9uIHdhKGUpe2lmKGU8MClyZXR1cm4gTWF0aC5mbG9vcihlKTtlbHNlIHJldHVybiBNYXRoLmNlaWwoZSl9ZnVuY3Rpb24gRGEoKXt2YXIgZT10aGlzLl9taWxsaXNlY29uZHMsdD10aGlzLl9kYXlzLG49dGhpcy5fbW9udGhzLGk9dGhpcy5fZGF0YSxyLGEscyxvLHU7aWYoIShlPj0wJiZ0Pj0wJiZuPj0wfHxlPD0wJiZ0PD0wJiZuPD0wKSl7ZSs9d2EoRWEobikrdCkqODY0ZTU7dD0wO249MH1pLm1pbGxpc2Vjb25kcz1lJTFlMztyPVllKGUvMWUzKTtpLnNlY29uZHM9ciU2MDthPVllKHIvNjApO2kubWludXRlcz1hJTYwO3M9WWUoYS82MCk7aS5ob3Vycz1zJTI0O3QrPVllKHMvMjQpO3U9WWUoVGEodCkpO24rPXU7dC09d2EoRWEodSkpO289WWUobi8xMik7biU9MTI7aS5kYXlzPXQ7aS5tb250aHM9bjtpLnllYXJzPW87cmV0dXJuIHRoaXN9ZnVuY3Rpb24gVGEoZSl7cmV0dXJuIGUqNDgwMC8xNDYwOTd9ZnVuY3Rpb24gRWEoZSl7cmV0dXJuIGUqMTQ2MDk3LzQ4MDB9ZnVuY3Rpb24gWWEoZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIHQsbixpPXRoaXMuX21pbGxpc2Vjb25kcztlPXRlKGUpO2lmKGU9PT0ibW9udGgifHxlPT09InF1YXJ0ZXIifHxlPT09InllYXIiKXt0PXRoaXMuX2RheXMraS84NjRlNTtuPXRoaXMuX21vbnRocytUYSh0KTtzd2l0Y2goZSl7Y2FzZSJtb250aCI6cmV0dXJuIG47Y2FzZSJxdWFydGVyIjpyZXR1cm4gbi8zO2Nhc2UieWVhciI6cmV0dXJuIG4vMTJ9fWVsc2V7dD10aGlzLl9kYXlzK01hdGgucm91bmQoRWEodGhpcy5fbW9udGhzKSk7c3dpdGNoKGUpe2Nhc2Uid2VlayI6cmV0dXJuIHQvNytpLzYwNDhlNTtjYXNlImRheSI6cmV0dXJuIHQraS84NjRlNTtjYXNlImhvdXIiOnJldHVybiB0KjI0K2kvMzZlNTtjYXNlIm1pbnV0ZSI6cmV0dXJuIHQqMTQ0MCtpLzZlNDtjYXNlInNlY29uZCI6cmV0dXJuIHQqODY0MDAraS8xZTM7Y2FzZSJtaWxsaXNlY29uZCI6cmV0dXJuIE1hdGguZmxvb3IodCo4NjRlNSkraTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrZSl9fX1mdW5jdGlvbiBQYShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcyhlKX19dmFyIENhPVBhKCJtcyIpLFJhPVBhKCJzIiksQWE9UGEoIm0iKSx4YT1QYSgiaCIpLE9hPVBhKCJkIiksSWE9UGEoInciKSxXYT1QYSgiTSIpLEhhPVBhKCJRIiksamE9UGEoInkiKSxGYT1DYTtmdW5jdGlvbiBCYSgpe3JldHVybiBUaSh0aGlzKX1mdW5jdGlvbiBVYShlKXtlPXRlKGUpO3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzW2UrInMiXSgpOk5hTn1mdW5jdGlvbiBOYShlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCk/dGhpcy5fZGF0YVtlXTpOYU59fXZhciB6YT1OYSgibWlsbGlzZWNvbmRzIiksVmE9TmEoInNlY29uZHMiKSxHYT1OYSgibWludXRlcyIpLEphPU5hKCJob3VycyIpLHFhPU5hKCJkYXlzIiksS2E9TmEoIm1vbnRocyIpLFhhPU5hKCJ5ZWFycyIpO2Z1bmN0aW9uIFphKCl7cmV0dXJuIFllKHRoaXMuZGF5cygpLzcpfXZhciAkYT1NYXRoLnJvdW5kLFFhPXtzczo0NCxzOjQ1LG06NDUsaDoyMixkOjI2LHc6bnVsbCxNOjExfTtmdW5jdGlvbiBlcyhlLHQsbixpLHIpe3JldHVybiByLnJlbGF0aXZlVGltZSh0fHwxLCEhbixlLGkpfWZ1bmN0aW9uIHRzKGUsdCxuLGkpe3ZhciByPVRpKGUpLmFicygpLGE9JGEoci5hcygicyIpKSxzPSRhKHIuYXMoIm0iKSksbz0kYShyLmFzKCJoIikpLHU9JGEoci5hcygiZCIpKSxkPSRhKHIuYXMoIk0iKSksbD0kYShyLmFzKCJ3IikpLGg9JGEoci5hcygieSIpKSxjPWE8PW4uc3MmJlsicyIsYV18fGE8bi5zJiZbInNzIixhXXx8czw9MSYmWyJtIl18fHM8bi5tJiZbIm1tIixzXXx8bzw9MSYmWyJoIl18fG88bi5oJiZbImhoIixvXXx8dTw9MSYmWyJkIl18fHU8bi5kJiZbImRkIix1XTtpZihuLnchPW51bGwpYz1jfHxsPD0xJiZbInciXXx8bDxuLncmJlsid3ciLGxdO2M9Y3x8ZDw9MSYmWyJNIl18fGQ8bi5NJiZbIk1NIixkXXx8aDw9MSYmWyJ5Il18fFsieXkiLGhdO2NbMl09dDtjWzNdPStlPjA7Y1s0XT1pO3JldHVybiBlcy5hcHBseShudWxsLGMpfWZ1bmN0aW9uIG5zKGUpe2lmKGU9PT11bmRlZmluZWQpcmV0dXJuICRhO2lmKHR5cGVvZiBlPT09ImZ1bmN0aW9uIil7JGE9ZTtyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9ZnVuY3Rpb24gaXMoZSx0KXtpZihRYVtlXT09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7aWYodD09PXVuZGVmaW5lZClyZXR1cm4gUWFbZV07UWFbZV09dDtpZihlPT09InMiKVFhLnNzPXQtMTtyZXR1cm4gdHJ1ZX1mdW5jdGlvbiBycyhlLHQpe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTt2YXIgbj1mYWxzZSxpPVFhLHIsYTtpZih0eXBlb2YgZT09PSJvYmplY3QiKXt0PWU7ZT1mYWxzZX1pZih0eXBlb2YgZT09PSJib29sZWFuIiluPWU7aWYodHlwZW9mIHQ9PT0ib2JqZWN0Iil7aT1PYmplY3QuYXNzaWduKHt9LFFhLHQpO2lmKHQucyE9bnVsbCYmdC5zcz09bnVsbClpLnNzPXQucy0xfXI9dGhpcy5sb2NhbGVEYXRhKCk7YT10cyh0aGlzLCFuLGkscik7aWYobilhPXIucGFzdEZ1dHVyZSgrdGhpcyxhKTtyZXR1cm4gci5wb3N0Zm9ybWF0KGEpfXZhciBhcz1NYXRoLmFicztmdW5jdGlvbiBzcyhlKXtyZXR1cm4oZT4wKS0oZTwwKXx8K2V9ZnVuY3Rpb24gb3MoKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIGU9YXModGhpcy5fbWlsbGlzZWNvbmRzKS8xZTMsdD1hcyh0aGlzLl9kYXlzKSxuPWFzKHRoaXMuX21vbnRocyksaSxyLGEscyxvPXRoaXMuYXNTZWNvbmRzKCksdSxkLGwsaDtpZighbylyZXR1cm4iUDBEIjtpPVllKGUvNjApO3I9WWUoaS82MCk7ZSU9NjA7aSU9NjA7YT1ZZShuLzEyKTtuJT0xMjtzPWU/ZS50b0ZpeGVkKDMpLnJlcGxhY2UoL1wuPzArJC8sIiIpOiIiO3U9bzwwPyItIjoiIjtkPXNzKHRoaXMuX21vbnRocykhPT1zcyhvKT8iLSI6IiI7bD1zcyh0aGlzLl9kYXlzKSE9PXNzKG8pPyItIjoiIjtoPXNzKHRoaXMuX21pbGxpc2Vjb25kcykhPT1zcyhvKT8iLSI6IiI7cmV0dXJuIHUrIlAiKyhhP2QrYSsiWSI6IiIpKyhuP2QrbisiTSI6IiIpKyh0P2wrdCsiRCI6IiIpKyhyfHxpfHxlPyJUIjoiIikrKHI/aCtyKyJIIjoiIikrKGk/aCtpKyJNIjoiIikrKGU/aCtzKyJTIjoiIil9dmFyIHVzPWFpLnByb3RvdHlwZTtyZXR1cm4gdXMuaXNWYWxpZD1paSx1cy5hYnM9TGEsdXMuYWRkPWthLHVzLnN1YnRyYWN0PWJhLHVzLmFzPVlhLHVzLmFzTWlsbGlzZWNvbmRzPUNhLHVzLmFzU2Vjb25kcz1SYSx1cy5hc01pbnV0ZXM9QWEsdXMuYXNIb3Vycz14YSx1cy5hc0RheXM9T2EsdXMuYXNXZWVrcz1JYSx1cy5hc01vbnRocz1XYSx1cy5hc1F1YXJ0ZXJzPUhhLHVzLmFzWWVhcnM9amEsdXMudmFsdWVPZj1GYSx1cy5fYnViYmxlPURhLHVzLmNsb25lPUJhLHVzLmdldD1VYSx1cy5taWxsaXNlY29uZHM9emEsdXMuc2Vjb25kcz1WYSx1cy5taW51dGVzPUdhLHVzLmhvdXJzPUphLHVzLmRheXM9cWEsdXMud2Vla3M9WmEsdXMubW9udGhzPUthLHVzLnllYXJzPVhhLHVzLmh1bWFuaXplPXJzLHVzLnRvSVNPU3RyaW5nPW9zLHVzLnRvU3RyaW5nPW9zLHVzLnRvSlNPTj1vcyx1cy5sb2NhbGU9YXIsdXMubG9jYWxlRGF0YT1vcix1cy50b0lzb1N0cmluZz1iKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsb3MpLHVzLmxhbmc9c3IsaigiWCIsMCwwLCJ1bml4IiksaigieCIsMCwwLCJ2YWx1ZU9mIiksd2UoIngiLHllKSx3ZSgiWCIsTWUpLFJlKCJYIixmdW5jdGlvbihlLHQsbil7bi5fZD1uZXcgRGF0ZShwYXJzZUZsb2F0KGUpKjFlMyl9KSxSZSgieCIsZnVuY3Rpb24oZSx0LG4pe24uX2Q9bmV3IERhdGUoUGUoZSkpfSksCi8vISBtb21lbnQuanMKaC52ZXJzaW9uPSIyLjMwLjEiLGUocW4pLGguZm49b2EsaC5taW49JG4saC5tYXg9UW4saC5ub3c9ZWksaC51dGM9ZixoLnVuaXg9dWEsaC5tb250aHM9bWEsaC5pc0RhdGU9YSxoLmxvY2FsZT1mbixoLmludmFsaWQ9eSxoLmR1cmF0aW9uPVRpLGguaXNNb21lbnQ9UyxoLndlZWtkYXlzPXlhLGgucGFyc2Vab25lPWRhLGgubG9jYWxlRGF0YT15bixoLmlzRHVyYXRpb249c2ksaC5tb250aHNTaG9ydD1wYSxoLndlZWtkYXlzTWluPWdhLGguZGVmaW5lTG9jYWxlPW1uLGgudXBkYXRlTG9jYWxlPXBuLGgubG9jYWxlcz12bixoLndlZWtkYXlzU2hvcnQ9dmEsaC5ub3JtYWxpemVVbml0cz10ZSxoLnJlbGF0aXZlVGltZVJvdW5kaW5nPW5zLGgucmVsYXRpdmVUaW1lVGhyZXNob2xkPWlzLGguY2FsZW5kYXJGb3JtYXQ9RmksaC5wcm90b3R5cGU9b2EsaC5IVE1MNV9GTVQ9e0RBVEVUSU1FX0xPQ0FMOiJZWVlZLU1NLUREVEhIOm1tIixEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiJZWVlZLU1NLUREVEhIOm1tOnNzIixEQVRFVElNRV9MT0NBTF9NUzoiWVlZWS1NTS1ERFRISDptbTpzcy5TU1MiLERBVEU6IllZWVktTU0tREQiLFRJTUU6IkhIOm1tIixUSU1FX1NFQ09ORFM6IkhIOm1tOnNzIixUSU1FX01TOiJISDptbTpzcy5TU1MiLFdFRUs6IkdHR0ctW1ddV1ciLE1PTlRIOiJZWVlZLU1NIn0saH0oKX0uY2FsbCh0aGlzLGhzKDI4NikoZSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMCx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpLHI9big5MiksYT0oaT1yKSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX07ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksKDAsYS5kZWZhdWx0KShlLGkua2V5LGkpfX10LmRlZmF1bHQ9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZzKGUucHJvdG90eXBlLHQpLG4mJnMoZSxuKSxlfX0sZnVuY3Rpb24oZSx0KXtlPWUuZXhwb3J0cz17dmVyc2lvbjoiMi42LjEyIn07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9ZSl9LGZ1bmN0aW9uKGUsdCxuKXtmdW5jdGlvbiBtKGUsdCxuKXt2YXIgaSxyLGEscz1lJm0uRixvPWUmbS5HLHU9ZSZtLlMsZD1lJm0uUCxsPWUmbS5CLGg9ZSZtLlcsYz1vP3k6eVt0XXx8KHlbdF09e30pLF89Y1tMXSxmPW8/cDp1P3BbdF06KHBbdF18fHt9KVtMXTtmb3IoaSBpbiBuPW8/dDpuKShyPSFzJiZmJiZ2b2lkIDAhPT1mW2ldKSYmTShjLGkpfHwoYT0ocj9mOm4pW2ldLGNbaV09byYmImZ1bmN0aW9uIiE9dHlwZW9mIGZbaV0/bltpXTpsJiZyP3YoYSxwKTpoJiZmW2ldPT1hP2Z1bmN0aW9uKGkpe2Z1bmN0aW9uIGUoZSx0LG4pe2lmKHRoaXMgaW5zdGFuY2VvZiBpKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgaTtjYXNlIDE6cmV0dXJuIG5ldyBpKGUpO2Nhc2UgMjpyZXR1cm4gbmV3IGkoZSx0KX1yZXR1cm4gbmV3IGkoZSx0LG4pfXJldHVybiBpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gZVtMXT1pW0xdLGV9KGEpOmQmJiJmdW5jdGlvbiI9PXR5cGVvZiBhP3YoRnVuY3Rpb24uY2FsbCxhKTphLGQmJigoYy52aXJ0dWFsfHwoYy52aXJ0dWFsPXt9KSlbaV09YSxlJm0uUiYmXyYmIV9baV0mJmcoXyxpLGEpKSl9dmFyIHA9big1KSx5PW4oMyksdj1uKDE1KSxnPW4oMTgpLE09bigyMCksTD0icHJvdG90eXBlIjttLkY9MSxtLkc9MixtLlM9NCxtLlA9OCxtLkI9MTYsbS5XPTMyLG0uVT02NCxtLlI9MTI4LGUuZXhwb3J0cz1tfSxmdW5jdGlvbihlLHQpe2U9ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPWUpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1hKG4oMSkpLHI9YShuKDIpKSxuPWEobigxMykpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIuZGVmYXVsdCkocyxudWxsLFt7a2V5OiJlIix2YWx1ZTpmdW5jdGlvbihlKXtlJiYhcy5GT1JDRV9HTE9CQUxfVEFHfHwoZT1zLkdMT0JBTF9UQUcpO2Zvcih2YXIgdD1bXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksbj0iWyIrZSsiXSA+ICIsaT0xO2k8dC5sZW5ndGg7aSsrKW4rPXRbaV0rIiA+ICI7cy5FTkFCTEVfQ0FMTEJBQ0smJnMuZW1pdHRlci5lbWl0KCJsb2ciLCJlcnJvciIsbikscy5FTkFCTEVfRVJST1ImJihjb25zb2xlLmVycm9yP2NvbnNvbGUuZXJyb3Iobik6Y29uc29sZS53YXJuP2NvbnNvbGUud2FybihuKTpjb25zb2xlLmxvZyhuKSl9fSx7a2V5OiJpIix2YWx1ZTpmdW5jdGlvbihlKXtlJiYhcy5GT1JDRV9HTE9CQUxfVEFHfHwoZT1zLkdMT0JBTF9UQUcpO2Zvcih2YXIgdD1bXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksbj0iWyIrZSsiXSA+ICIsaT0xO2k8dC5sZW5ndGg7aSsrKW4rPXRbaV0rIiA+ICI7cy5FTkFCTEVfQ0FMTEJBQ0smJnMuZW1pdHRlci5lbWl0KCJsb2ciLCJpbmZvIixuKSxzLkVOQUJMRV9JTkZPJiYoY29uc29sZS5pbmZvP2NvbnNvbGUuaW5mbyhuKTpjb25zb2xlLmxvZyhuKSl9fSx7a2V5OiJ3Iix2YWx1ZTpmdW5jdGlvbihlKXtlJiYhcy5GT1JDRV9HTE9CQUxfVEFHfHwoZT1zLkdMT0JBTF9UQUcpO2Zvcih2YXIgdD1bXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksbj0iWyIrZSsiXSA+ICIsaT0xO2k8dC5sZW5ndGg7aSsrKW4rPXRbaV0rIiA+ICI7cy5FTkFCTEVfQ0FMTEJBQ0smJnMuZW1pdHRlci5lbWl0KCJsb2ciLCJ3YXJuIixuKSxzLkVOQUJMRV9XQVJOJiYoY29uc29sZS53YXJuP2NvbnNvbGUud2FybihuKTpjb25zb2xlLmxvZyhuKSl9fSx7a2V5OiJkIix2YWx1ZTpmdW5jdGlvbihlKXtlJiYhcy5GT1JDRV9HTE9CQUxfVEFHfHwoZT1zLkdMT0JBTF9UQUcpO2Zvcih2YXIgdD1bXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSksbj0iWyIrZSsiXSA+ICIsaT0xO2k8dC5sZW5ndGg7aSsrKW4rPXRbaV0rIiA+ICI7cy5FTkFCTEVfQ0FMTEJBQ0smJnMuZW1pdHRlci5lbWl0KCJsb2ciLCJkZWJ1ZyIsbikscy5FTkFCTEVfREVCVUcmJihjb25zb2xlLmRlYnVnP2NvbnNvbGUuZGVidWcobik6Y29uc29sZS5sb2cobikpfX0se2tleToidiIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSYmIXMuRk9SQ0VfR0xPQkFMX1RBR3x8KGU9cy5HTE9CQUxfVEFHKTtmb3IodmFyIHQ9W10uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpLG49IlsiK2UrIl0gPiAiLGk9MTtpPHQubGVuZ3RoO2krKyluKz10W2ldKyIgPiAiO3MuRU5BQkxFX0NBTExCQUNLJiZzLmVtaXR0ZXIuZW1pdCgibG9nIiwidmVyYm9zZSIsbikscy5FTkFCTEVfVkVSQk9TRSYmY29uc29sZS5sb2cobil9fV0pLHI9cztmdW5jdGlvbiBzKCl7KDAsaS5kZWZhdWx0KSh0aGlzLHMpfXIuR0xPQkFMX1RBRz0iZmx2LmpzIixyLkZPUkNFX0dMT0JBTF9UQUc9ITEsci5FTkFCTEVfRVJST1I9ITAsci5FTkFCTEVfSU5GTz0hMCxyLkVOQUJMRV9XQVJOPSEwLHIuRU5BQkxFX0RFQlVHPSEwLHIuRU5BQkxFX1ZFUkJPU0U9ITAsci5FTkFCTEVfQ0FMTEJBQ0s9ITEsci5lbWl0dGVyPW5ldyBuLmRlZmF1bHQsdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTm90SW1wbGVtZW50ZWRFeGNlcHRpb249dC5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb249dC5JbGxlZ2FsU3RhdGVFeGNlcHRpb249dC5SdW50aW1lRXhjZXB0aW9uPXZvaWQgMDt2YXIgaT11KG4oMjQpKSxyPXUobigyNSkpLGE9dShuKDI2KSkscz11KG4oMSkpLG89dShuKDIpKTtmdW5jdGlvbiB1KGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1uPXQuUnVudGltZUV4Y2VwdGlvbj0oKDAsby5kZWZhdWx0KShkLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uYW1lKyI6ICIrdGhpcy5tZXNzYWdlfX0se2tleToibmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIlJ1bnRpbWVFeGNlcHRpb24ifX0se2tleToibWVzc2FnZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lc3NhZ2V9fV0pLGQpO2Z1bmN0aW9uIGQoZSl7KDAscy5kZWZhdWx0KSh0aGlzLGQpLHRoaXMuX21lc3NhZ2U9ZX10LklsbGVnYWxTdGF0ZUV4Y2VwdGlvbj0oKDAsYS5kZWZhdWx0KShsLG4pLCgwLG8uZGVmYXVsdCkobCxbe2tleToibmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIklsbGVnYWxTdGF0ZUV4Y2VwdGlvbiJ9fV0pLGwpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuKDAscy5kZWZhdWx0KSh0aGlzLGwpLCgwLHIuZGVmYXVsdCkodGhpcywobC5fX3Byb3RvX198fCgwLGkuZGVmYXVsdCkobCkpLmNhbGwodGhpcyxlKSl9dC5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb249KCgwLGEuZGVmYXVsdCkoaCxuKSwoMCxvLmRlZmF1bHQpKGgsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiJJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24ifX1dKSxoKTtmdW5jdGlvbiBoKGUpe3JldHVybigwLHMuZGVmYXVsdCkodGhpcyxoKSwoMCxyLmRlZmF1bHQpKHRoaXMsKGguX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKGgpKS5jYWxsKHRoaXMsZSkpfXQuTm90SW1wbGVtZW50ZWRFeGNlcHRpb249KCgwLGEuZGVmYXVsdCkoYyxuKSwoMCxvLmRlZmF1bHQpKGMsW3trZXk6Im5hbWUiLGdldDpmdW5jdGlvbigpe3JldHVybiJOb3RJbXBsZW1lbnRlZEV4Y2VwdGlvbiJ9fV0pLGMpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuKDAscy5kZWZhdWx0KSh0aGlzLGMpLCgwLHIuZGVmYXVsdCkodGhpcywoYy5fX3Byb3RvX198fCgwLGkuZGVmYXVsdCkoYykpLmNhbGwodGhpcyxlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big1MykoIndrcyIpLHI9big0MCksYT1uKDUpLlN5bWJvbCxzPSJmdW5jdGlvbiI9PXR5cGVvZiBhOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGlbZV18fChpW2VdPXMmJmFbZV18fChzP2E6cikoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPWl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE2KSxyPW4oNzYpLGE9big1MCkscz1PYmplY3QuZGVmaW5lUHJvcGVydHk7dC5mPW4oMTEpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbihlLHQsbil7aWYoaShlKSx0PWEodCwhMCksaShuKSxyKXRyeXtyZXR1cm4gcyhlLHQsbil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gbnx8InNldCJpbiBuKXRocm93IFR5cGVFcnJvcigiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhIik7cmV0dXJuInZhbHVlImluIG4mJihlW3RdPW4udmFsdWUpLGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGU/bnVsbCE9PWU6ImZ1bmN0aW9uIj09dHlwZW9mIGV9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKDE5KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPXMobigyNzUpKSxyPXMobigyNzcpKSxhPSJmdW5jdGlvbiI9PXR5cGVvZiByLmRlZmF1bHQmJiJzeW1ib2wiPT10eXBlb2YgaS5kZWZhdWx0P2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiByLmRlZmF1bHQmJmUuY29uc3RydWN0b3I9PT1yLmRlZmF1bHQmJmUhPT1yLmRlZmF1bHQucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTtmdW5jdGlvbiBzKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX10LmRlZmF1bHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHIuZGVmYXVsdCYmInN5bWJvbCI9PT1hKGkuZGVmYXVsdCk/ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/InVuZGVmaW5lZCI6YShlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiByLmRlZmF1bHQmJmUuY29uc3RydWN0b3I9PT1yLmRlZmF1bHQmJmUhPT1yLmRlZmF1bHQucHJvdG90eXBlPyJzeW1ib2wiOnZvaWQgMD09PWU/InVuZGVmaW5lZCI6YShlKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCx1PWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLmFwcGx5P2kuYXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQsbil9O3ZhciByPWkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLm93bktleXM/aS5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpfSxhPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9O2Z1bmN0aW9uIHMoKXtzLmluaXQuY2FsbCh0aGlzKX1lLmV4cG9ydHM9cyxlLmV4cG9ydHMub25jZT1mdW5jdGlvbihvLHUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSl7by5yZW1vdmVMaXN0ZW5lcih1LGkpLHQoZSl9ZnVuY3Rpb24gaSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBvLnJlbW92ZUxpc3RlbmVyJiZvLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsbiksZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXZhciByLGEscztwKG8sdSxpLHtvbmNlOiEwfSksImVycm9yIiE9PXUmJihhPW4scz17b25jZTohMH0sImZ1bmN0aW9uIj09dHlwZW9mKHI9bykub24mJnAociwiZXJyb3IiLGEscykpfSl9LChzLkV2ZW50RW1pdHRlcj1zKS5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAscy5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAscy5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIG89MTA7ZnVuY3Rpb24gZChlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gdm9pZCAwPT09ZS5fbWF4TGlzdGVuZXJzP3MuZGVmYXVsdE1heExpc3RlbmVyczplLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gaChlLHQsbixpKXt2YXIgcixhO3JldHVybiBkKG4pLHZvaWQgMD09PShyPWUuX2V2ZW50cyk/KHI9ZS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PXIubmV3TGlzdGVuZXImJihlLmVtaXQoIm5ld0xpc3RlbmVyIix0LG4ubGlzdGVuZXJ8fG4pLHI9ZS5fZXZlbnRzKSxhPXJbdF0pLHZvaWQgMD09PWE/KGE9clt0XT1uLCsrZS5fZXZlbnRzQ291bnQpOigiZnVuY3Rpb24iPT10eXBlb2YgYT9hPXJbdF09aT9bbixhXTpbYSxuXTppP2EudW5zaGlmdChuKTphLnB1c2gobiksMDwobj1sKGUpKSYmYS5sZW5ndGg+biYmIWEud2FybmVkJiYoYS53YXJuZWQ9ITAsKG49bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrYS5sZW5ndGgrIiAiK1N0cmluZyh0KSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKSkubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixuLmVtaXR0ZXI9ZSxuLnR5cGU9dCxuLmNvdW50PWEubGVuZ3RoLG49bixjb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihuKSkpLGV9ZnVuY3Rpb24gYyhlLHQsbil7ZT17ZmlyZWQ6ITEsd3JhcEZuOnZvaWQgMCx0YXJnZXQ6ZSx0eXBlOnQsbGlzdGVuZXI6bn0sdD1mdW5jdGlvbigpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9LmJpbmQoZSk7cmV0dXJuIHQubGlzdGVuZXI9bixlLndyYXBGbj10fWZ1bmN0aW9uIF8oZSx0LG4pe2U9ZS5fZXZlbnRzO2lmKHZvaWQgMD09PWUpcmV0dXJuW107dD1lW3RdO3JldHVybiB2b2lkIDA9PT10P1tdOiJmdW5jdGlvbiI9PXR5cGVvZiB0P24/W3QubGlzdGVuZXJ8fHRdOlt0XTpuP2Z1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPHQubGVuZ3RoOysrbil0W25dPWVbbl0ubGlzdGVuZXJ8fGVbbl07cmV0dXJuIHR9KHQpOm0odCx0Lmxlbmd0aCl9ZnVuY3Rpb24gZihlKXt2YXIgdD10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09dCl7ZT10W2VdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiAxO2lmKHZvaWQgMCE9PWUpcmV0dXJuIGUubGVuZ3RofXJldHVybiAwfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIG49bmV3IEFycmF5KHQpLGk9MDtpPHQ7KytpKW5baV09ZVtpXTtyZXR1cm4gbn1mdW5jdGlvbiBwKG4saSxyLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLm9uKWEub25jZT9uLm9uY2UoaSxyKTpuLm9uKGkscik7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygbi5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBuKTtuLmFkZEV2ZW50TGlzdGVuZXIoaSxmdW5jdGlvbiBlKHQpe2Eub25jZSYmbi5yZW1vdmVFdmVudExpc3RlbmVyKGksZSkscih0KX0pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkocywiZGVmYXVsdE1heExpc3RlbmVycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG99LHNldDpmdW5jdGlvbihlKXtpZigibnVtYmVyIiE9dHlwZW9mIGV8fGU8MHx8YShlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK2UrIi4iKTtvPWV9fSkscy5pbml0PWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5fZXZlbnRzJiZ0aGlzLl9ldmVudHMhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0scy5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZXx8ZTwwfHxhKGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZSx0aGlzfSxzLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzKX0scy5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdC5wdXNoKGFyZ3VtZW50c1tuXSk7dmFyIGkscj0iZXJyb3IiPT09ZSxhPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1hKXI9ciYmdm9pZCAwPT09YS5lcnJvcjtlbHNlIGlmKCFyKXJldHVybiExO2lmKHIpe2lmKChpPTA8dC5sZW5ndGg/dFswXTppKWluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaTtyPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIrKGk/IiAoIitpLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgci5jb250ZXh0PWkscn1lPWFbZV07aWYodm9pZCAwPT09ZSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZSl1KGUsdGhpcyx0KTtlbHNlIGZvcih2YXIgcz1lLmxlbmd0aCxvPW0oZSxzKSxuPTA7bjxzOysrbil1KG9bbl0sdGhpcyx0KTtyZXR1cm4hMH0scy5wcm90b3R5cGUub249cy5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaCh0aGlzLGUsdCwhMSl9LHMucHJvdG90eXBlLnByZXBlbmRMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBoKHRoaXMsZSx0LCEwKX0scy5wcm90b3R5cGUub25jZT1mdW5jdGlvbihlLHQpe3JldHVybiBkKHQpLHRoaXMub24oZSxjKHRoaXMsZSx0KSksdGhpc30scy5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihlLHQpe3JldHVybiBkKHQpLHRoaXMucHJlcGVuZExpc3RlbmVyKGUsYyh0aGlzLGUsdCkpLHRoaXN9LHMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGUsdCl7dmFyIG4saSxyLGEscztpZihkKHQpLHZvaWQgMD09PShpPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG49aVtlXSkpcmV0dXJuIHRoaXM7aWYobj09PXR8fG4ubGlzdGVuZXI9PT10KTA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBpW2VdLGkucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGUsbi5saXN0ZW5lcnx8dCkpO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIG4pe2ZvcihyPS0xLGE9bi5sZW5ndGgtMTswPD1hO2EtLSlpZihuW2FdPT09dHx8blthXS5saXN0ZW5lcj09PXQpe3M9blthXS5saXN0ZW5lcixyPWE7YnJlYWt9aWYocjwwKXJldHVybiB0aGlzOzA9PT1yP24uc2hpZnQoKTpmdW5jdGlvbihlLHQpe2Zvcig7dCsxPGUubGVuZ3RoO3QrKyllW3RdPWVbdCsxXTtlLnBvcCgpfShuLHIpLDE9PT1uLmxlbmd0aCYmKGlbZV09blswXSksdm9pZCAwIT09aS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsZSxzfHx0KX1yZXR1cm4gdGhpc30scy5wcm90b3R5cGUub2ZmPXMucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyLHMucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuX2V2ZW50cztpZih2b2lkIDA9PT1uKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW4ucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1uW2VdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbltlXSksdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKHZhciBpLHI9T2JqZWN0LmtleXMobiksYT0wO2E8ci5sZW5ndGg7KythKSJyZW1vdmVMaXN0ZW5lciIhPT0oaT1yW2FdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoaSk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigiZnVuY3Rpb24iPT10eXBlb2YodD1uW2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKGUsdCk7ZWxzZSBpZih2b2lkIDAhPT10KWZvcihhPXQubGVuZ3RoLTE7MDw9YTthLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihlLHRbYV0pO3JldHVybiB0aGlzfSxzLnByb3RvdHlwZS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuIF8odGhpcyxlLCEwKX0scy5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybiBfKHRoaXMsZSwhMSl9LHMubGlzdGVuZXJDb3VudD1mdW5jdGlvbihlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlLmxpc3RlbmVyQ291bnQ/ZS5saXN0ZW5lckNvdW50KHQpOmYuY2FsbChlLHQpfSxzLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PWYscy5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiAwPHRoaXMuX2V2ZW50c0NvdW50P3IodGhpcy5fZXZlbnRzKTpbXX19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigyNDcpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7dmFyIGE9bigyOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGkscixlKXtpZihhKGkpLHZvaWQgMD09PXIpcmV0dXJuIGk7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2FsbChyLGUpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkuY2FsbChyLGUsdCl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3JldHVybiBpLmNhbGwocixlLHQsbil9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBpLmFwcGx5KHIsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigxMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFpKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGFuIG9iamVjdCEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmFzZUxvYWRlcj10LkxvYWRlckVycm9ycz10LkxvYWRlclN0YXR1cz12b2lkIDA7dmFyIGk9cyhuKDEpKSxyPXMobigyKSksYT1uKDcpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBvPXQuTG9hZGVyU3RhdHVzPXtrSWRsZTowLGtDb25uZWN0aW5nOjEsa0J1ZmZlcmluZzoyLGtFcnJvcjozLGtDb21wbGV0ZTo0fTt0LkxvYWRlckVycm9ycz17T0s6Ik9LIixFWENFUFRJT046IkV4Y2VwdGlvbiIsSFRUUF9TVEFUVVNfQ09ERV9JTlZBTElEOiJIdHRwU3RhdHVzQ29kZUludmFsaWQiLENPTk5FQ1RJTkdfVElNRU9VVDoiQ29ubmVjdGluZ1RpbWVvdXQiLEVBUkxZX0VPRjoiRWFybHlFb2YiLFVOUkVDT1ZFUkFCTEVfRUFSTFlfRU9GOiJVbnJlY292ZXJhYmxlRWFybHlFb2YifSx0LkJhc2VMb2FkZXI9KCgwLHIuZGVmYXVsdCkodSxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9zdGF0dXM9by5rSWRsZSx0aGlzLl9vbkNvbnRlbnRMZW5ndGhLbm93bj1udWxsLHRoaXMuX29uVVJMUmVkaXJlY3Q9bnVsbCx0aGlzLl9vbkRhdGFBcnJpdmFsPW51bGwsdGhpcy5fb25FcnJvcj1udWxsLHRoaXMuX29uQ29tcGxldGU9bnVsbH19LHtrZXk6ImlzV29ya2luZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhdHVzPT09by5rQ29ubmVjdGluZ3x8dGhpcy5fc3RhdHVzPT09by5rQnVmZmVyaW5nfX0se2tleToib3BlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aHJvdyBuZXcgYS5Ob3RJbXBsZW1lbnRlZEV4Y2VwdGlvbigiVW5pbXBsZW1lbnRlZCBhYnN0cmFjdCBmdW5jdGlvbiEiKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBhLk5vdEltcGxlbWVudGVkRXhjZXB0aW9uKCJVbmltcGxlbWVudGVkIGFic3RyYWN0IGZ1bmN0aW9uISIpfX0se2tleToidHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGV9fSx7a2V5OiJzdGF0dXMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGF0dXN9fSx7a2V5OiJuZWVkU3Rhc2hCdWZmZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9uZWVkU3Rhc2h9fSx7a2V5OiJvbkNvbnRlbnRMZW5ndGhLbm93biIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uQ29udGVudExlbmd0aEtub3dufSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25Db250ZW50TGVuZ3RoS25vd249ZX19LHtrZXk6Im9uVVJMUmVkaXJlY3QiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblVSTFJlZGlyZWN0fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25VUkxSZWRpcmVjdD1lfX0se2tleToib25EYXRhQXJyaXZhbCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRGF0YUFycml2YWx9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vbkRhdGFBcnJpdmFsPWV9fSx7a2V5OiJvbkVycm9yIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25FcnJvcn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uRXJyb3I9ZX19LHtrZXk6Im9uQ29tcGxldGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkNvbXBsZXRlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25Db21wbGV0ZT1lfX1dKSx1KTtmdW5jdGlvbiB1KGUpeygwLGkuZGVmYXVsdCkodGhpcyx1KSx0aGlzLl90eXBlPWV8fCJ1bmRlZmluZWQiLHRoaXMuX3N0YXR1cz1vLmtJZGxlLHRoaXMuX25lZWRTdGFzaD0hMSx0aGlzLl9vbkNvbnRlbnRMZW5ndGhLbm93bj1udWxsLHRoaXMuX29uVVJMUmVkaXJlY3Q9bnVsbCx0aGlzLl9vbkRhdGFBcnJpdmFsPW51bGwsdGhpcy5fb25FcnJvcj1udWxsLHRoaXMuX29uQ29tcGxldGU9bnVsbH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDkpLHI9bigyOSk7ZS5leHBvcnRzPW4oMTEpP2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaS5mKGUsdCxyKDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30uaGFzT3duUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG4uY2FsbChlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNTEpLHI9big0Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpKHIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNDcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGkoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDMxMiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigzMjIpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3QuX19lc01vZHVsZT0hMDt2YXIgaSxyPW4oMTIpLGE9KGk9cikmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9O3QuZGVmYXVsdD1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6KDAsYS5kZWZhdWx0KSh0KSkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpPXMobig0MikpLHI9cyhuKDMyNCkpLGE9cyhuKDEyKSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIisodm9pZCAwPT09dD8idW5kZWZpbmVkIjooMCxhLmRlZmF1bHQpKHQpKSk7ZS5wcm90b3R5cGU9KDAsci5kZWZhdWx0KSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKGkuZGVmYXVsdD8oMCxpLmRlZmF1bHQpKGUsdCk6ZS5fX3Byb3RvX189dCl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz0hMH0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBmdW5jdGlvbiEiKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9e319LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDc4KSxyPW4oNTQpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSxyKX19LGZ1bmN0aW9uKGUsdCl7dmFyIG49e30udG9TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuLmNhbGwoZSkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big5KS5mLHI9bigyMCksYT1uKDgpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZSYmIXIoZT1uP2U6ZS5wcm90b3R5cGUsYSkmJmkoZSxhLHtjb25maWd1cmFibGU6ITAsdmFsdWU6dH0pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBoPW4oMTUpLGM9big4MiksXz1uKDgzKSxmPW4oMTYpLG09bigzOSkscD1uKDg0KSx5PXt9LHY9e307KHQ9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGEscyxvLHUscj1yP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OnAoZSksZD1oKG4saSx0PzI6MSksbD0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiByKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKF8ocikpe2ZvcihhPW0oZS5sZW5ndGgpO2w8YTtsKyspaWYoKHU9dD9kKGYocz1lW2xdKVswXSxzWzFdKTpkKGVbbF0pKT09PXl8fHU9PT12KXJldHVybiB1fWVsc2UgZm9yKG89ci5jYWxsKGUpOyEocz1vLm5leHQoKSkuZG9uZTspaWYoKHU9YyhvLGQscy52YWx1ZSx0KSk9PT15fHx1PT09dilyZXR1cm4gdX0pLkJSRUFLPXksdC5SRVRVUk49dn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt0Ll9fZXNNb2R1bGU9ITA7dmFyIGE9aShuKDI0KSkscz1pKG4oMzI4KSk7ZnVuY3Rpb24gaShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5kZWZhdWx0PWZ1bmN0aW9uIGUodCxuLGkpe251bGw9PT10JiYodD1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciByPSgwLHMuZGVmYXVsdCkodCxuKTtpZih2b2lkIDAhPT1yKXtpZigidmFsdWUiaW4gcilyZXR1cm4gci52YWx1ZTtyPXIuZ2V0O3JldHVybiB2b2lkIDAhPT1yP3IuY2FsbChpKTp2b2lkIDB9dD0oMCxhLmRlZmF1bHQpKHQpO2lmKG51bGwhPT10KXJldHVybiBlKHQsbixpKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpLHI9bigyMyksYT0oaT1yKSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX07dmFyIHM9e307IWZ1bmN0aW9uKCl7dmFyIGUsdD1zZWxmLm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxuPS8oZWRnZSlcLyhbXHcuXSspLy5leGVjKHQpfHwvKG9wcilbXC9dKFtcdy5dKykvLmV4ZWModCl8fC8oY2hyb21lKVsgXC9dKFtcdy5dKykvLmV4ZWModCl8fC8oaWVtb2JpbGUpW1wvXShbXHcuXSspLy5leGVjKHQpfHwvKHZlcnNpb24pKGFwcGxld2Via2l0KVsgXC9dKFtcdy5dKykuKihzYWZhcmkpWyBcL10oW1x3Ll0rKS8uZXhlYyh0KXx8Lyh3ZWJraXQpWyBcL10oW1x3Ll0rKS4qKHZlcnNpb24pWyBcL10oW1x3Ll0rKS4qKHNhZmFyaSlbIFwvXShbXHcuXSspLy5leGVjKHQpfHwvKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKHQpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBcL10oW1x3Ll0rKS8uZXhlYyh0KXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyh0KXx8MDw9dC5pbmRleE9mKCJ0cmlkZW50IikmJi8ocnYpKD86OnwgKShbXHcuXSspLy5leGVjKHQpfHx0LmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiYvKGZpcmVmb3gpWyBcL10oW1x3Ll0rKS8uZXhlYyh0KXx8W10saT0vKGlwYWQpLy5leGVjKHQpfHwvKGlwb2QpLy5leGVjKHQpfHwvKHdpbmRvd3MgcGhvbmUpLy5leGVjKHQpfHwvKGlwaG9uZSkvLmV4ZWModCl8fC8oa2luZGxlKS8uZXhlYyh0KXx8LyhhbmRyb2lkKS8uZXhlYyh0KXx8Lyh3aW5kb3dzKS8uZXhlYyh0KXx8LyhtYWMpLy5leGVjKHQpfHwvKGxpbnV4KS8uZXhlYyh0KXx8Lyhjcm9zKS8uZXhlYyh0KXx8W10sdD17YnJvd3NlcjpuWzVdfHxuWzNdfHxuWzFdfHwiIix2ZXJzaW9uOm5bMl18fG5bNF18fCIwIixtYWpvclZlcnNpb246bls0XXx8blsyXXx8IjAiLHBsYXRmb3JtOmlbMF18fCIifSxuPXt9O2ZvcihlIGluIHQuYnJvd3NlciYmKG5bdC5icm93c2VyXT0hMCxpPXQubWFqb3JWZXJzaW9uLnNwbGl0KCIuIiksbi52ZXJzaW9uPXttYWpvcjpwYXJzZUludCh0Lm1ham9yVmVyc2lvbiwxMCksc3RyaW5nOnQudmVyc2lvbn0sMTxpLmxlbmd0aCYmKG4udmVyc2lvbi5taW5vcj1wYXJzZUludChpWzFdLDEwKSksMjxpLmxlbmd0aCYmKG4udmVyc2lvbi5idWlsZD1wYXJzZUludChpWzJdLDEwKSkpLHQucGxhdGZvcm0mJihuW3QucGxhdGZvcm1dPSEwKSwobi5jaHJvbWV8fG4ub3ByfHxuLnNhZmFyaSkmJihuLndlYmtpdD0hMCksKG4ucnZ8fG4uaWVtb2JpbGUpJiYobi5ydiYmZGVsZXRlIG4ucnYsdC5icm93c2VyPSJtc2llIixuLm1zaWU9ITApLG4uZWRnZSYmKGRlbGV0ZSBuLmVkZ2UsdC5icm93c2VyPSJtc2VkZ2UiLG4ubXNlZGdlPSEwKSxuLm9wciYmKHQuYnJvd3Nlcj0ib3BlcmEiLG4ub3BlcmE9ITApLG4uc2FmYXJpJiZuLmFuZHJvaWQmJihuW3QuYnJvd3Nlcj0iYW5kcm9pZCJdPSEwKSxuLm5hbWU9dC5icm93c2VyLG4ucGxhdGZvcm09dC5wbGF0Zm9ybSxzKXMuaGFzT3duUHJvcGVydHkoZSkmJmRlbGV0ZSBzW2VdOygwLGEuZGVmYXVsdCkocyxuKX0oKSx0LmRlZmF1bHQ9c30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDI0OCkoITApO24oNDgpKFN0cmluZywiU3RyaW5nIixmdW5jdGlvbihlKXt0aGlzLl90PVN0cmluZyhlKSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdCx0PXRoaXMuX2k7cmV0dXJuIHQ+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9aShlLHQpLHRoaXMuX2krPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaSgpe312YXIgcj1uKDE2KSxhPW4oMjUwKSxzPW4oNTQpLG89big1MikoIklFX1BST1RPIiksdT0icHJvdG90eXBlIixkPWZ1bmN0aW9uKCl7dmFyIGU9big0OSkoImlmcmFtZSIpLHQ9cy5sZW5ndGg7Zm9yKGUuc3R5bGUuZGlzcGxheT0ibm9uZSIsbig3OSkuYXBwZW5kQ2hpbGQoZSksZS5zcmM9ImphdmFzY3JpcHQ6IiwoZT1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLGUuY2xvc2UoKSxkPWUuRjt0LS07KWRlbGV0ZSBkW3VdW3NbdF1dO3JldHVybiBkKCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8oaVt1XT1yKGUpLG49bmV3IGksaVt1XT1udWxsLG5bb109ZSk6bj1kKCksdm9pZCAwPT09dD9uOmEobix0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDQ2KSxyPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gMDxlP3IoaShlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLGk9TWF0aC5yYW5kb20oKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1lPyIiOmUsIilfIiwoKytuK2kpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbihlLHQpe3QuZj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDMxNSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZGVmYXVsdD17RVJST1I6ImVycm9yIixMT0FESU5HX0NPTVBMRVRFOiJsb2FkaW5nX2NvbXBsZXRlIixSRUNPVkVSRURfRUFSTFlfRU9GOiJyZWNvdmVyZWRfZWFybHlfZW9mIixNRURJQV9JTkZPOiJtZWRpYV9pbmZvIixNRVRBREFUQV9BUlJJVkVEOiJtZXRhZGF0YV9hcnJpdmVkIixTQ1JJUFREQVRBX0FSUklWRUQ6InNjcmlwdGRhdGFfYXJyaXZlZCIsU1RBVElTVElDU19JTkZPOiJzdGF0aXN0aWNzX2luZm8iLFZJREVPX1JFU09MVVRJT05fQ0hBTkdFRDoidmlkZW9fcmVzb2x1dGlvbl9jaGFuZ2VkIixNRURJQV9TT1VSQ0VfRU5ERUQ6Im1lZGlhX3NvdXJjZV9lbmRlZCIsTUVESUFfU09VUkNFX0NMT1NFOiJtZWRpYV9zb3VyY2VfY2xvc2UiLFZJREVPX0ZST1pFTjoidmlkZW9fZGVjb2RlZF9mcmFtZV9mcm96ZW4iLE1TX0JVRkZFUl9GVUxMOiJtZWRpYV9zb3VyY2VfYnVmZmVyX2Z1bGwiLExPQURFRF9NRVRBX0RBVEE6ImxvYWRlZF9tZXRhX2RhdGEiLE1FRElBX1NPVVJDRV9BRERfRVJST1I6Im1lZGlhX3NvdXJjZV9hZGRfZXJyb3IifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5kZWZhdWx0PXtJT19FUlJPUjoiaW9fZXJyb3IiLERFTVVYX0VSUk9SOiJkZW11eF9lcnJvciIsSU5JVF9TRUdNRU5UOiJpbml0X3NlZ21lbnQiLE1FRElBX1NFR01FTlQ6Im1lZGlhX3NlZ21lbnQiLExPQURJTkdfQ09NUExFVEU6ImxvYWRpbmdfY29tcGxldGUiLFJFQ09WRVJFRF9FQVJMWV9FT0Y6InJlY292ZXJlZF9lYXJseV9lb2YiLE1FRElBX0lORk86Im1lZGlhX2luZm8iLE1FVEFEQVRBX0FSUklWRUQ6Im1ldGFkYXRhX2Fycml2ZWQiLFNDUklQVERBVEFfQVJSSVZFRDoic2NyaXB0ZGF0YV9hcnJpdmVkIixTVEFUSVNUSUNTX0lORk86InN0YXRpc3RpY3NfaW5mbyIsUkVDT01NRU5EX1NFRUtQT0lOVDoicmVjb21tZW5kX3NlZWtwb2ludCIsVklERU9fUkVTT0xVVElPTl9DSEFOR0VEOiJ2aWRlb19yZXNvbHV0aW9uX2NoYW5nZWQiLFBBUlNFRERBVEFfQVJSSVZFRDoicGFyc2VkZGF0YV9hcnJpdmVkIn19LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguY2VpbCxpPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpc05hTihlPStlKT8wOigwPGU/aTpuKShlKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitlKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdigpe3JldHVybiB0aGlzfXZhciBnPW4oMjcpLE09big0KSxMPW4oNzcpLFM9bigxOCksaz1uKDMwKSxiPW4oMjQ5KSx3PW4oMzMpLEQ9big4MCksVD1uKDgpKCJpdGVyYXRvciIpLEU9IShbXS5rZXlzJiYibmV4dCJpbltdLmtleXMoKSksWT0idmFsdWVzIjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4saSxyLGEscyl7YihuLHQsaSk7ZnVuY3Rpb24gbyhlKXtpZighRSYmZSBpbiBmKXJldHVybiBmW2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UgWTpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXZhciB1LGQsbCxoPXQrIiBJdGVyYXRvciIsYz1yPT1ZLF89ITEsZj1lLnByb3RvdHlwZSxtPWZbVF18fGZbIkBAaXRlcmF0b3IiXXx8ciYmZltyXSxwPW18fG8ocikseT1yP2M/bygiZW50cmllcyIpOnA6dm9pZCAwLGk9IkFycmF5Ij09dCYmZi5lbnRyaWVzfHxtO2lmKGkmJihsPUQoaS5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmbC5uZXh0JiYodyhsLGgsITApLGd8fCJmdW5jdGlvbiI9PXR5cGVvZiBsW1RdfHxTKGwsVCx2KSksYyYmbSYmbS5uYW1lIT09WSYmKF89ITAscD1mdW5jdGlvbigpe3JldHVybiBtLmNhbGwodGhpcyl9KSxnJiYhc3x8IUUmJiFfJiZmW1RdfHxTKGYsVCxwKSxrW3RdPXAsa1toXT12LHIpaWYodT17dmFsdWVzOmM/cDpvKFkpLGtleXM6YT9wOm8oImtleXMiKSxlbnRyaWVzOnl9LHMpZm9yKGQgaW4gdSlkIGluIGZ8fEwoZixkLHVbZF0pO2Vsc2UgTShNLlArTS5GKihFfHxfKSx0LHUpO3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMTApLHI9big1KS5kb2N1bWVudCxhPWkocikmJmkoci5jcmVhdGVFbGVtZW50KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGE/ci5jcmVhdGVFbGVtZW50KGUpOnt9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpKXJldHVybiBlO3ZhciBuLGk7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mKG49ZS50b1N0cmluZykmJiFyKGk9bi5jYWxsKGUpKSlyZXR1cm4gaTtpZigiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnZhbHVlT2YpJiYhcihpPW4uY2FsbChlKSkpcmV0dXJuIGk7aWYoIXQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihpPW4uY2FsbChlKSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDMyKTtlLmV4cG9ydHM9T2JqZWN0KCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCk/T2JqZWN0OmZ1bmN0aW9uKGUpe3JldHVybiJTdHJpbmciPT1pKGUpP2Uuc3BsaXQoIiIpOk9iamVjdChlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDUzKSgia2V5cyIpLHI9big0MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpW2VdfHwoaVtlXT1yKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDMpLHI9big1KSxhPSJfX2NvcmUtanNfc2hhcmVkX18iLHM9clthXXx8KHJbYV09e30pOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gc1tlXXx8KHNbZV09dm9pZCAwIT09dD90Ont9KX0pKCJ2ZXJzaW9ucyIsW10pLnB1c2goe3ZlcnNpb246aS52ZXJzaW9uLG1vZGU6bigyNyk/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0sZnVuY3Rpb24oZSx0LG4pe24oMjUzKTtmb3IodmFyIGk9big1KSxyPW4oMTgpLGE9bigzMCkscz1uKDgpKCJ0b1N0cmluZ1RhZyIpLG89IkNTU1J1bGVMaXN0LENTU1N0eWxlRGVjbGFyYXRpb24sQ1NTVmFsdWVMaXN0LENsaWVudFJlY3RMaXN0LERPTVJlY3RMaXN0LERPTVN0cmluZ0xpc3QsRE9NVG9rZW5MaXN0LERhdGFUcmFuc2Zlckl0ZW1MaXN0LEZpbGVMaXN0LEhUTUxBbGxDb2xsZWN0aW9uLEhUTUxDb2xsZWN0aW9uLEhUTUxGb3JtRWxlbWVudCxIVE1MU2VsZWN0RWxlbWVudCxNZWRpYUxpc3QsTWltZVR5cGVBcnJheSxOYW1lZE5vZGVNYXAsTm9kZUxpc3QsUGFpbnRSZXF1ZXN0TGlzdCxQbHVnaW4sUGx1Z2luQXJyYXksU1ZHTGVuZ3RoTGlzdCxTVkdOdW1iZXJMaXN0LFNWR1BhdGhTZWdMaXN0LFNWR1BvaW50TGlzdCxTVkdTdHJpbmdMaXN0LFNWR1RyYW5zZm9ybUxpc3QsU291cmNlQnVmZmVyTGlzdCxTdHlsZVNoZWV0TGlzdCxUZXh0VHJhY2tDdWVMaXN0LFRleHRUcmFja0xpc3QsVG91Y2hMaXN0Ii5zcGxpdCgiLCIpLHU9MDt1PG8ubGVuZ3RoO3UrKyl7dmFyIGQ9b1t1XSxsPWlbZF0sbD1sJiZsLnByb3RvdHlwZTtsJiYhbFtzXSYmcihsLHMsZCksYVtkXT1hLkFycmF5fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzIpLHI9big4KSgidG9TdHJpbmdUYWciKSxhPSJBcmd1bWVudHMiPT1pKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKGU9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1PYmplY3QoZSkscikpP2U6YT9pKHQpOiJPYmplY3QiPT0oZT1pKHQpKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsbGVlPyJBcmd1bWVudHMiOmV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixpKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09aSYmaSBpbiBlKXRocm93IFR5cGVFcnJvcihuKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI4KTtmdW5jdGlvbiBpKGUpe3ZhciBuLGk7dGhpcy5wcm9taXNlPW5ldyBlKGZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09bnx8dm9pZCAwIT09aSl0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7bj1lLGk9dH0pLHRoaXMucmVzb2x2ZT1yKG4pLHRoaXMucmVqZWN0PXIoaSl9ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBpKGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpIGluIHQpbiYmZVtpXT9lW2ldPXRbaV06cihlLGksdFtpXSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0KSxhPW4oMykscz1uKDE5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oYS5PYmplY3R8fHt9KVtlXXx8T2JqZWN0W2VdLGk9e307aVtlXT10KG4pLHIoci5TK3IuRipzKGZ1bmN0aW9uKCl7bigxKX0pLCJPYmplY3QiLGkpfX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz1uKDI2Myl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dC5fX2VzTW9kdWxlPSEwO3ZhciBpLHI9bigxNCksdT0oaT1yKSYmaS5fX2VzTW9kdWxlP2k6e2RlZmF1bHQ6aX07dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBvPWUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuZXcgdS5kZWZhdWx0KGZ1bmN0aW9uKGEscyl7cmV0dXJuIGZ1bmN0aW9uIHQoZSxuKXt0cnl7dmFyIGk9b1tlXShuKSxyPWkudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcyhlKX1pZighaS5kb25lKXJldHVybiB1LmRlZmF1bHQucmVzb2x2ZShyKS50aGVuKGZ1bmN0aW9uKGUpe3QoIm5leHQiLGUpfSxmdW5jdGlvbihlKXt0KCJ0aHJvdyIsZSl9KTthKHIpfSgibmV4dCIpfSl9fX0sZnVuY3Rpb24oUXQsZW4sZSl7dmFyIHRuOwovKiEKICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My42LjAKICogaHR0cHM6Ly9qcXVlcnkuY29tLwogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCiAqCiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzCiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZQogKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBEYXRlOiAyMDIxLTAzLTAyVDE3OjA4WgogKi8KIWZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiOyJvYmplY3QiPT10eXBlb2YgUXQuZXhwb3J0cz9RdC5leHBvcnRzPWUuZG9jdW1lbnQ/dChlLCEwKTpmdW5jdGlvbihlKXtpZighZS5kb2N1bWVudCl0aHJvdyBuZXcgRXJyb3IoImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnQiKTtyZXR1cm4gdChlKX06dChlKX0oInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsZnVuY3Rpb24oUyxlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbShlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmIm51bWJlciIhPXR5cGVvZiBlLm5vZGVUeXBlJiYiZnVuY3Rpb24iIT10eXBlb2YgZS5pdGVtfWZ1bmN0aW9uIHAoZSl7cmV0dXJuIG51bGwhPWUmJmU9PT1lLndpbmRvd312YXIgdD1bXSxuPU9iamVjdC5nZXRQcm90b3R5cGVPZixvPXQuc2xpY2UseT10LmZsYXQ/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZmxhdC5jYWxsKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gdC5jb25jYXQuYXBwbHkoW10sZSl9LHU9dC5wdXNoLHI9dC5pbmRleE9mLGk9e30sYT1pLnRvU3RyaW5nLHY9aS5oYXNPd25Qcm9wZXJ0eSxzPXYudG9TdHJpbmcsZD1zLmNhbGwoT2JqZWN0KSxnPXt9LGs9Uy5kb2N1bWVudCxsPXt0eXBlOiEwLHNyYzohMCxub25jZTohMCxub01vZHVsZTohMH07ZnVuY3Rpb24gTShlLHQsbil7dmFyIGkscixhPShuPW58fGspLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO2lmKGEudGV4dD1lLHQpZm9yKGkgaW4gbCkocj10W2ldfHx0LmdldEF0dHJpYnV0ZSYmdC5nZXRBdHRyaWJ1dGUoaSkpJiZhLnNldEF0dHJpYnV0ZShpLHIpO24uaGVhZC5hcHBlbmRDaGlsZChhKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIG51bGw9PWU/ZSsiIjoib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlP2lbYS5jYWxsKGUpXXx8Im9iamVjdCI6dHlwZW9mIGV9dmFyIGI9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGIuZm4uaW5pdChlLHQpfTtmdW5jdGlvbiBoKGUpe3ZhciB0PSEhZSYmImxlbmd0aCJpbiBlJiZlLmxlbmd0aCxuPWYoZSk7cmV0dXJuIW0oZSkmJiFwKGUpJiYoImFycmF5Ij09PW58fDA9PT10fHwibnVtYmVyIj09dHlwZW9mIHQmJjA8dCYmdC0xIGluIGUpfWIuZm49Yi5wcm90b3R5cGU9e2pxdWVyeToiMy42LjAiLGNvbnN0cnVjdG9yOmIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBvLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT9vLmNhbGwodGhpcyk6ZTwwP3RoaXNbZSt0aGlzLmxlbmd0aF06dGhpc1tlXX0scHVzaFN0YWNrOmZ1bmN0aW9uKGUpe2U9Yi5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIGUucHJldk9iamVjdD10aGlzLGV9LGVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIGIuZWFjaCh0aGlzLGUpfSxtYXA6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGIubWFwKHRoaXMsZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCxlKX0pKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soby5hcHBseSh0aGlzLGFyZ3VtZW50cykpfSxmaXJzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKDApfSxsYXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoLTEpfSxldmVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGIuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKHQrMSklMn0pKX0sb2RkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGIuZ3JlcCh0aGlzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQlMn0pKX0sZXE6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sZW5ndGgsZT0rZSsoZTwwP3Q6MCk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKDA8PWUmJmU8dD9bdGhpc1tlXV06W10pfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmV2T2JqZWN0fHx0aGlzLmNvbnN0cnVjdG9yKCl9LHB1c2g6dSxzb3J0OnQuc29ydCxzcGxpY2U6dC5zcGxpY2V9LGIuZXh0ZW5kPWIuZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsdCxuLGkscixhPWFyZ3VtZW50c1swXXx8e30scz0xLG89YXJndW1lbnRzLmxlbmd0aCx1PSExO2ZvcigiYm9vbGVhbiI9PXR5cGVvZiBhJiYodT1hLGE9YXJndW1lbnRzW3NdfHx7fSxzKyspLCJvYmplY3QiPT10eXBlb2YgYXx8bShhKXx8KGE9e30pLHM9PT1vJiYoYT10aGlzLHMtLSk7czxvO3MrKylpZihudWxsIT0oZT1hcmd1bWVudHNbc10pKWZvcih0IGluIGUpbj1lW3RdLCJfX3Byb3RvX18iIT09dCYmYSE9PW4mJih1JiZuJiYoYi5pc1BsYWluT2JqZWN0KG4pfHwoaT1BcnJheS5pc0FycmF5KG4pKSk/KHI9YVt0XSxyPWkmJiFBcnJheS5pc0FycmF5KHIpP1tdOml8fGIuaXNQbGFpbk9iamVjdChyKT9yOnt9LGk9ITEsYVt0XT1iLmV4dGVuZCh1LHIsbikpOnZvaWQgMCE9PW4mJihhW3RdPW4pKTtyZXR1cm4gYX0sYi5leHRlbmQoe2V4cGFuZG86ImpRdWVyeSIrKCIzLjYuMCIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgvXEQvZywiIiksaXNSZWFkeTohMCxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoZSl9LG5vb3A6ZnVuY3Rpb24oKXt9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuISghZXx8IltvYmplY3QgT2JqZWN0XSIhPT1hLmNhbGwoZSkpJiYoIShlPW4oZSkpfHwiZnVuY3Rpb24iPT10eXBlb2YoZT12LmNhbGwoZSwiY29uc3RydWN0b3IiKSYmZS5jb25zdHJ1Y3RvcikmJnMuY2FsbChlKT09PWQpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSxnbG9iYWxFdmFsOmZ1bmN0aW9uKGUsdCxuKXtNKGUse25vbmNlOnQmJnQubm9uY2V9LG4pfSxlYWNoOmZ1bmN0aW9uKGUsdCl7dmFyIG4saT0wO2lmKGgoZSkpZm9yKG49ZS5sZW5ndGg7aTxuJiYhMSE9PXQuY2FsbChlW2ldLGksZVtpXSk7aSsrKTtlbHNlIGZvcihpIGluIGUpaWYoITE9PT10LmNhbGwoZVtpXSxpLGVbaV0pKWJyZWFrO3JldHVybiBlfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt0PXR8fFtdO3JldHVybiBudWxsIT1lJiYoaChPYmplY3QoZSkpP2IubWVyZ2UodCwic3RyaW5nIj09dHlwZW9mIGU/W2VdOmUpOnUuY2FsbCh0LGUpKSx0fSxpbkFycmF5OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbnVsbD09dD8tMTpyLmNhbGwodCxlLG4pfSxtZXJnZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0rdC5sZW5ndGgsaT0wLHI9ZS5sZW5ndGg7aTxuO2krKyllW3IrK109dFtpXTtyZXR1cm4gZS5sZW5ndGg9cixlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIGk9W10scj0wLGE9ZS5sZW5ndGgscz0hbjtyPGE7cisrKSF0KGVbcl0scikhPXMmJmkucHVzaChlW3JdKTtyZXR1cm4gaX0sbWFwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyLGE9MCxzPVtdO2lmKGgoZSkpZm9yKGk9ZS5sZW5ndGg7YTxpO2ErKyludWxsIT0ocj10KGVbYV0sYSxuKSkmJnMucHVzaChyKTtlbHNlIGZvcihhIGluIGUpbnVsbCE9KHI9dChlW2FdLGEsbikpJiZzLnB1c2gocik7cmV0dXJuIHkocyl9LGd1aWQ6MSxzdXBwb3J0Omd9KSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoYi5mbltTeW1ib2wuaXRlcmF0b3JdPXRbU3ltYm9sLml0ZXJhdG9yXSksYi5lYWNoKCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2lbIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSk7dmFyIGM9Ci8qIQogKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjYKICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vCiAqCiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlCiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi8KICoKICogRGF0ZTogMjAyMS0wMi0xNgogKi8KZnVuY3Rpb24obil7ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlPSIweCIrZS5zbGljZSgxKS02NTUzNix0fHwoZTwwP1N0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzYrZSk6U3RyaW5nLmZyb21DaGFyQ29kZShlPj4xMHw1NTI5NiwxMDIzJmV8NTYzMjApKX1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIHQ/IlwwIj09PWU/Iu+/vSI6ZS5zbGljZSgwLC0xKSsiXFwiK2UuY2hhckNvZGVBdChlLmxlbmd0aC0xKS50b1N0cmluZygxNikrIiAiOiJcXCIrZX1mdW5jdGlvbiBpKCl7UygpfXZhciBlLF8sTSxhLHIsZixtLHAsTCx1LGQsUyxrLHMsYix5LG8sbCx2LHc9InNpenpsZSIrICtuZXcgRGF0ZSxnPW4uZG9jdW1lbnQsRD0wLFQ9MCxFPXVlKCksWT11ZSgpLFA9dWUoKSxDPXVlKCksUj1mdW5jdGlvbihlLHQpe3JldHVybiBlPT09dCYmKGQ9ITApLDB9LEE9e30uaGFzT3duUHJvcGVydHksdD1bXSx4PXQucG9wLE89dC5wdXNoLEk9dC5wdXNoLFc9dC5zbGljZSxIPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAsaT1lLmxlbmd0aDtuPGk7bisrKWlmKGVbbl09PT10KXJldHVybiBuO3JldHVybi0xfSxqPSJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZCIsRj0iW1xceDIwXFx0XFxyXFxuXFxmXSIsQj0iKD86XFxcXFtcXGRhLWZBLUZdezEsNn0iK0YrIj98XFxcXFteXFxyXFxuXFxmXXxbXFx3LV18W15cMC1cXHg3Zl0pKyIsVT0iXFxbIitGKyIqKCIrQisiKSg/OiIrRisiKihbKl4kfCF+XT89KSIrRisiKig/OicoKD86XFxcXC58W15cXFxcJ10pKiknfFwiKCg/OlxcXFwufFteXFxcXFwiXSkqKVwifCgiK0IrIikpfCkiK0YrIipcXF0iLE49IjooIitCKyIpKD86XFwoKCgnKCg/OlxcXFwufFteXFxcXCddKSopJ3xcIigoPzpcXFxcLnxbXlxcXFxcIl0pKilcIil8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IitVKyIpKil8LiopXFwpfCkiLHo9bmV3IFJlZ0V4cChGKyIrIiwiZyIpLFY9bmV3IFJlZ0V4cCgiXiIrRisiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitGKyIrJCIsImciKSxHPW5ldyBSZWdFeHAoIl4iK0YrIiosIitGKyIqIiksSj1uZXcgUmVnRXhwKCJeIitGKyIqKFs+K35dfCIrRisiKSIrRisiKiIpLHE9bmV3IFJlZ0V4cChGKyJ8PiIpLEs9bmV3IFJlZ0V4cChOKSxYPW5ldyBSZWdFeHAoIl4iK0IrIiQiKSxaPXtJRDpuZXcgUmVnRXhwKCJeIygiK0IrIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrQisiKSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrQisifFsqXSkiKSxBVFRSOm5ldyBSZWdFeHAoIl4iK1UpLFBTRVVETzpuZXcgUmVnRXhwKCJeIitOKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK0YrIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK0YrIiooPzooWystXXwpIitGKyIqKFxcZCspfCkpIitGKyIqXFwpfCkiLCJpIiksYm9vbDpuZXcgUmVnRXhwKCJeKD86IitqKyIpJCIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrRisiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFwoIitGKyIqKCg/Oi1cXGQpP1xcZCopIitGKyIqXFwpfCkoPz1bXi1dfCQpIiwiaSIpfSwkPS9IVE1MJC9pLFE9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxlZT0vXmhcZCQvaSx0ZT0vXltee10rXHtccypcW25hdGl2ZSBcdy8sbmU9L14oPzojKFtcdy1dKyl8KFx3Kyl8XC4oW1x3LV0rKSkkLyxpZT0vWyt+XS8scmU9bmV3IFJlZ0V4cCgiXFxcXFtcXGRhLWZBLUZdezEsNn0iK0YrIj98XFxcXChbXlxcclxcblxcZl0pIiwiZyIpLGFlPS8oW1wwLVx4MWZceDdmXXxeLT9cZCl8Xi0kfFteXDAtXHgxZlx4N2YtXHVGRkZGXHctXS9nLHNlPXZlKGZ1bmN0aW9uKGUpe3JldHVybiEwPT09ZS5kaXNhYmxlZCYmImZpZWxkc2V0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0se2RpcjoicGFyZW50Tm9kZSIsbmV4dDoibGVnZW5kIn0pO3RyeXtJLmFwcGx5KHQ9Vy5jYWxsKGcuY2hpbGROb2RlcyksZy5jaGlsZE5vZGVzKSx0W2cuY2hpbGROb2Rlcy5sZW5ndGhdLm5vZGVUeXBlfWNhdGNoKGUpe0k9e2FwcGx5OnQubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7Ty5hcHBseShlLFcuY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWUubGVuZ3RoLGk9MDtlW24rK109dFtpKytdOyk7ZS5sZW5ndGg9bi0xfX19ZnVuY3Rpb24gb2UodCxlLG4saSl7dmFyIHIsYSxzLG8sdSxkLGw9ZSYmZS5vd25lckRvY3VtZW50LGg9ZT9lLm5vZGVUeXBlOjk7aWYobj1ufHxbXSwic3RyaW5nIiE9dHlwZW9mIHR8fCF0fHwxIT09aCYmOSE9PWgmJjExIT09aClyZXR1cm4gbjtpZighaSYmKFMoZSksZT1lfHxrLGIpKXtpZigxMSE9PWgmJihvPW5lLmV4ZWModCkpKWlmKGQ9b1sxXSl7aWYoOT09PWgpe2lmKCEoYT1lLmdldEVsZW1lbnRCeUlkKGQpKSlyZXR1cm4gbjtpZihhLmlkPT09ZClyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZSBpZihsJiYoYT1sLmdldEVsZW1lbnRCeUlkKGQpKSYmdihlLGEpJiZhLmlkPT09ZClyZXR1cm4gbi5wdXNoKGEpLG59ZWxzZXtpZihvWzJdKXJldHVybiBJLmFwcGx5KG4sZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0KSksbjtpZigoZD1vWzNdKSYmXy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpcmV0dXJuIEkuYXBwbHkobixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZCkpLG59aWYoXy5xc2EmJiFDW3QrIiAiXSYmKCF5fHwheS50ZXN0KHQpKSYmKDEhPT1ofHwib2JqZWN0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpe2lmKGQ9dCxsPWUsMT09PWgmJihxLnRlc3QodCl8fEoudGVzdCh0KSkpe2ZvcigobD1pZS50ZXN0KHQpJiZtZShlLnBhcmVudE5vZGUpfHxlKT09PWUmJl8uc2NvcGV8fCgocz1lLmdldEF0dHJpYnV0ZSgiaWQiKSk/cz1zLnJlcGxhY2UoYWUsYyk6ZS5zZXRBdHRyaWJ1dGUoImlkIixzPXcpKSxyPSh1PWYodCkpLmxlbmd0aDtyLS07KXVbcl09KHM/IiMiK3M6IjpzY29wZSIpKyIgIit5ZSh1W3JdKTtkPXUuam9pbigiLCIpfXRyeXtyZXR1cm4gSS5hcHBseShuLGwucXVlcnlTZWxlY3RvckFsbChkKSksbn1jYXRjaChlKXtDKHQsITApfWZpbmFsbHl7cz09PXcmJmUucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIHAodC5yZXBsYWNlKFYsIiQxIiksZSxuLGkpfWZ1bmN0aW9uIHVlKCl7dmFyIG49W107ZnVuY3Rpb24gaShlLHQpe3JldHVybiBuLnB1c2goZSsiICIpPk0uY2FjaGVMZW5ndGgmJmRlbGV0ZSBpW24uc2hpZnQoKV0saVtlKyIgIl09dH1yZXR1cm4gaX1mdW5jdGlvbiBkZShlKXtyZXR1cm4gZVt3XT0hMCxlfWZ1bmN0aW9uIGxlKGUpe3ZhciB0PWsuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKGUpe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9fWZ1bmN0aW9uIGhlKGUsdCl7Zm9yKHZhciBuPWUuc3BsaXQoInwiKSxpPW4ubGVuZ3RoO2ktLTspTS5hdHRySGFuZGxlW25baV1dPXR9ZnVuY3Rpb24gY2UoZSx0KXt2YXIgbj10JiZlLGk9biYmMT09PWUubm9kZVR5cGUmJjE9PT10Lm5vZGVUeXBlJiZlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7aWYoaSlyZXR1cm4gaTtpZihuKWZvcig7bj1uLm5leHRTaWJsaW5nOylpZihuPT09dClyZXR1cm4tMTtyZXR1cm4gZT8xOi0xfWZ1bmN0aW9uIF9lKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4iZm9ybSJpbiBlP2UucGFyZW50Tm9kZSYmITE9PT1lLmRpc2FibGVkPyJsYWJlbCJpbiBlPyJsYWJlbCJpbiBlLnBhcmVudE5vZGU/ZS5wYXJlbnROb2RlLmRpc2FibGVkPT09dDplLmRpc2FibGVkPT09dDplLmlzRGlzYWJsZWQ9PT10fHxlLmlzRGlzYWJsZWQhPT0hdCYmc2UoZSk9PT10OmUuZGlzYWJsZWQ9PT10OiJsYWJlbCJpbiBlJiZlLmRpc2FibGVkPT09dH19ZnVuY3Rpb24gZmUocyl7cmV0dXJuIGRlKGZ1bmN0aW9uKGEpe3JldHVybiBhPSthLGRlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLGk9cyhbXSxlLmxlbmd0aCxhKSxyPWkubGVuZ3RoO3ItLTspZVtuPWlbcl1dJiYoZVtuXT0hKHRbbl09ZVtuXSkpfSl9KX1mdW5jdGlvbiBtZShlKXtyZXR1cm4gZSYmdm9pZCAwIT09ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSYmZX1mb3IoZSBpbiBfPW9lLnN1cHBvcnQ9e30scj1vZS5pc1hNTD1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLm5hbWVzcGFjZVVSSSxlPWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4hJC50ZXN0KHR8fGUmJmUubm9kZU5hbWV8fCJIVE1MIil9LFM9b2Uuc2V0RG9jdW1lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQsZT1lP2Uub3duZXJEb2N1bWVudHx8ZTpnO3JldHVybiBlIT1rJiY5PT09ZS5ub2RlVHlwZSYmZS5kb2N1bWVudEVsZW1lbnQmJihzPShrPWUpLmRvY3VtZW50RWxlbWVudCxiPSFyKGspLGchPWsmJih0PWsuZGVmYXVsdFZpZXcpJiZ0LnRvcCE9PXQmJih0LmFkZEV2ZW50TGlzdGVuZXI/dC5hZGRFdmVudExpc3RlbmVyKCJ1bmxvYWQiLGksITEpOnQuYXR0YWNoRXZlbnQmJnQuYXR0YWNoRXZlbnQoIm9udW5sb2FkIixpKSksXy5zY29wZT1sZShmdW5jdGlvbihlKXtyZXR1cm4gcy5hcHBlbmRDaGlsZChlKS5hcHBlbmRDaGlsZChrLmNyZWF0ZUVsZW1lbnQoImRpdiIpKSx2b2lkIDAhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwmJiFlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSBmaWVsZHNldCBkaXYiKS5sZW5ndGh9KSxfLmF0dHJpYnV0ZXM9bGUoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2xhc3NOYW1lPSJpIiwhZS5nZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIpfSksXy5nZXRFbGVtZW50c0J5VGFnTmFtZT1sZShmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBlbmRDaGlsZChrLmNyZWF0ZUNvbW1lbnQoIiIpKSwhZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aH0pLF8uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT10ZS50ZXN0KGsuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSksXy5nZXRCeUlkPWxlKGZ1bmN0aW9uKGUpe3JldHVybiBzLmFwcGVuZENoaWxkKGUpLmlkPXcsIWsuZ2V0RWxlbWVudHNCeU5hbWV8fCFrLmdldEVsZW1lbnRzQnlOYW1lKHcpLmxlbmd0aH0pLF8uZ2V0QnlJZD8oTS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJlLGgpO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoImlkIik9PT10fX0sTS5maW5kLklEPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dC5nZXRFbGVtZW50QnlJZCYmYil7ZT10LmdldEVsZW1lbnRCeUlkKGUpO3JldHVybiBlP1tlXTpbXX19KTooTS5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJlLGgpO3JldHVybiBmdW5jdGlvbihlKXtlPXZvaWQgMCE9PWUuZ2V0QXR0cmlidXRlTm9kZSYmZS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBlJiZlLnZhbHVlPT09dH19LE0uZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PXQuZ2V0RWxlbWVudEJ5SWQmJmIpe3ZhciBuLGkscixhPXQuZ2V0RWxlbWVudEJ5SWQoZSk7aWYoYSl7aWYoKG49YS5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpKSYmbi52YWx1ZT09PWUpcmV0dXJuW2FdO2ZvcihyPXQuZ2V0RWxlbWVudHNCeU5hbWUoZSksaT0wO2E9cltpKytdOylpZigobj1hLmdldEF0dHJpYnV0ZU5vZGUoImlkIikpJiZuLnZhbHVlPT09ZSlyZXR1cm5bYV19cmV0dXJuW119fSksTS5maW5kLlRBRz1fLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PXQuZ2V0RWxlbWVudHNCeVRhZ05hbWU/dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTpfLnFzYT90LnF1ZXJ5U2VsZWN0b3JBbGwoZSk6dm9pZCAwfTpmdW5jdGlvbihlLHQpe3ZhciBuLGk9W10scj0wLGE9dC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKTtpZigiKiIhPT1lKXJldHVybiBhO2Zvcig7bj1hW3IrK107KTE9PT1uLm5vZGVUeXBlJiZpLnB1c2gobik7cmV0dXJuIGl9LE0uZmluZC5DTEFTUz1fLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZiKXJldHVybiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoZSl9LG89W10seT1bXSwoXy5xc2E9dGUudGVzdChrLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKGxlKGZ1bmN0aW9uKGUpe3ZhciB0O3MuYXBwZW5kQ2hpbGQoZSkuaW5uZXJIVE1MPSI8YSBpZD0nIit3KyInPjwvYT48c2VsZWN0IGlkPSciK3crIi1cclxcJyBtc2FsbG93Y2FwdHVyZT0nJz48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbbXNhbGxvd2NhcHR1cmVePScnXSIpLmxlbmd0aCYmeS5wdXNoKCJbKl4kXT0iK0YrIiooPzonJ3xcIlwiKSIpLGUucXVlcnlTZWxlY3RvckFsbCgiW3NlbGVjdGVkXSIpLmxlbmd0aHx8eS5wdXNoKCJcXFsiK0YrIiooPzp2YWx1ZXwiK2orIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZH49Iit3KyItXSIpLmxlbmd0aHx8eS5wdXNoKCJ+PSIpLCh0PWsuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJuYW1lIiwiIiksZS5hcHBlbmRDaGlsZCh0KSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIltuYW1lPScnXSIpLmxlbmd0aHx8eS5wdXNoKCJcXFsiK0YrIipuYW1lIitGKyIqPSIrRisiKig/OicnfFwiXCIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8eS5wdXNoKCI6Y2hlY2tlZCIpLGUucXVlcnlTZWxlY3RvckFsbCgiYSMiK3crIisqIikubGVuZ3RofHx5LnB1c2goIi4jLitbK35dIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJcXFxmIikseS5wdXNoKCJbXFxyXFxuXFxmXSIpfSksbGUoZnVuY3Rpb24oZSl7ZS5pbm5lckhUTUw9IjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+PHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PiI7dmFyIHQ9ay5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJEIiksZS5xdWVyeVNlbGVjdG9yQWxsKCJbbmFtZT1kXSIpLmxlbmd0aCYmeS5wdXNoKCJuYW1lIitGKyIqWypeJHwhfl0/PSIpLDIhPT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RoJiZ5LnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIikscy5hcHBlbmRDaGlsZChlKS5kaXNhYmxlZD0hMCwyIT09ZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZGlzYWJsZWQiKS5sZW5ndGgmJnkucHVzaCgiOmVuYWJsZWQiLCI6ZGlzYWJsZWQiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIiosOngiKSx5LnB1c2goIiwuKjoiKX0pKSwoXy5tYXRjaGVzU2VsZWN0b3I9dGUudGVzdChsPXMubWF0Y2hlc3x8cy53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fHMubW96TWF0Y2hlc1NlbGVjdG9yfHxzLm9NYXRjaGVzU2VsZWN0b3J8fHMubXNNYXRjaGVzU2VsZWN0b3IpKSYmbGUoZnVuY3Rpb24oZSl7Xy5kaXNjb25uZWN0ZWRNYXRjaD1sLmNhbGwoZSwiKiIpLGwuY2FsbChlLCJbcyE9JyddOngiKSxvLnB1c2goIiE9IixOKX0pLHk9eS5sZW5ndGgmJm5ldyBSZWdFeHAoeS5qb2luKCJ8IikpLG89by5sZW5ndGgmJm5ldyBSZWdFeHAoby5qb2luKCJ8IikpLHQ9dGUudGVzdChzLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSx2PXR8fHRlLnRlc3Qocy5jb250YWlucyk/ZnVuY3Rpb24oZSx0KXt2YXIgbj05PT09ZS5ub2RlVHlwZT9lLmRvY3VtZW50RWxlbWVudDplLHQ9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09dHx8ISghdHx8MSE9PXQubm9kZVR5cGV8fCEobi5jb250YWlucz9uLmNvbnRhaW5zKHQpOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkpKX06ZnVuY3Rpb24oZSx0KXtpZih0KWZvcig7dD10LnBhcmVudE5vZGU7KWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxSPXQ/ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZD0hMCwwO3ZhciBuPSFlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uLSF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO3JldHVybiBufHwoMSYobj0oZS5vd25lckRvY3VtZW50fHxlKT09KHQub3duZXJEb2N1bWVudHx8dCk/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KToxKXx8IV8uc29ydERldGFjaGVkJiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGUpPT09bj9lPT1rfHxlLm93bmVyRG9jdW1lbnQ9PWcmJnYoZyxlKT8tMTp0PT1rfHx0Lm93bmVyRG9jdW1lbnQ9PWcmJnYoZyx0KT8xOnU/SCh1LGUpLUgodSx0KTowOjQmbj8tMToxKX06ZnVuY3Rpb24oZSx0KXtpZihlPT09dClyZXR1cm4gZD0hMCwwO3ZhciBuLGk9MCxyPWUucGFyZW50Tm9kZSxhPXQucGFyZW50Tm9kZSxzPVtlXSxvPVt0XTtpZighcnx8IWEpcmV0dXJuIGU9PWs/LTE6dD09az8xOnI/LTE6YT8xOnU/SCh1LGUpLUgodSx0KTowO2lmKHI9PT1hKXJldHVybiBjZShlLHQpO2ZvcihuPWU7bj1uLnBhcmVudE5vZGU7KXMudW5zaGlmdChuKTtmb3Iobj10O249bi5wYXJlbnROb2RlOylvLnVuc2hpZnQobik7Zm9yKDtzW2ldPT09b1tpXTspaSsrO3JldHVybiBpP2NlKHNbaV0sb1tpXSk6c1tpXT09Zz8tMTpvW2ldPT1nPzE6MH0pLGt9LG9lLm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gb2UoZSxudWxsLG51bGwsdCl9LG9lLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKFMoZSksXy5tYXRjaGVzU2VsZWN0b3ImJmImJiFDW3QrIiAiXSYmKCFvfHwhby50ZXN0KHQpKSYmKCF5fHwheS50ZXN0KHQpKSl0cnl7dmFyIG49bC5jYWxsKGUsdCk7aWYobnx8Xy5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGUpe0ModCwhMCl9cmV0dXJuIDA8b2UodCxrLG51bGwsW2VdKS5sZW5ndGh9LG9lLmNvbnRhaW5zPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUub3duZXJEb2N1bWVudHx8ZSkhPWsmJlMoZSksdihlLHQpfSxvZS5hdHRyPWZ1bmN0aW9uKGUsdCl7KGUub3duZXJEb2N1bWVudHx8ZSkhPWsmJlMoZSk7dmFyIG49TS5hdHRySGFuZGxlW3QudG9Mb3dlckNhc2UoKV0sbj1uJiZBLmNhbGwoTS5hdHRySGFuZGxlLHQudG9Mb3dlckNhc2UoKSk/bihlLHQsIWIpOnZvaWQgMDtyZXR1cm4gdm9pZCAwIT09bj9uOl8uYXR0cmlidXRlc3x8IWI/ZS5nZXRBdHRyaWJ1dGUodCk6KG49ZS5nZXRBdHRyaWJ1dGVOb2RlKHQpKSYmbi5zcGVjaWZpZWQ/bi52YWx1ZTpudWxsfSxvZS5lc2NhcGU9ZnVuY3Rpb24oZSl7cmV0dXJuKGUrIiIpLnJlcGxhY2UoYWUsYyl9LG9lLmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sb2UudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLGk9MCxyPTA7aWYoZD0hXy5kZXRlY3REdXBsaWNhdGVzLHU9IV8uc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoUiksZCl7Zm9yKDt0PWVbcisrXTspdD09PWVbcl0mJihpPW4ucHVzaChyKSk7Zm9yKDtpLS07KWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIHU9bnVsbCxlfSxhPW9lLmdldFRleHQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj0iIixpPTAscj1lLm5vZGVUeXBlO2lmKHIpe2lmKDE9PT1yfHw5PT09cnx8MTE9PT1yKXtpZigic3RyaW5nIj09dHlwZW9mIGUudGV4dENvbnRlbnQpcmV0dXJuIGUudGV4dENvbnRlbnQ7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKW4rPWEoZSl9ZWxzZSBpZigzPT09cnx8ND09PXIpcmV0dXJuIGUubm9kZVZhbHVlfWVsc2UgZm9yKDt0PWVbaSsrXTspbis9YSh0KTtyZXR1cm4gbn0sKE09b2Uuc2VsZWN0b3JzPXtjYWNoZUxlbmd0aDo1MCxjcmVhdGVQc2V1ZG86ZGUsbWF0Y2g6WixhdHRySGFuZGxlOnt9LGZpbmQ6e30scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKHJlLGgpLGVbM109KGVbM118fGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHJlLGgpLCJ+PSI9PT1lWzJdJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLCJudGgiPT09ZVsxXS5zbGljZSgwLDMpPyhlWzNdfHxvZS5lcnJvcihlWzBdKSxlWzRdPSsoZVs0XT9lWzVdKyhlWzZdfHwxKToyKigiZXZlbiI9PT1lWzNdfHwib2RkIj09PWVbM10pKSxlWzVdPSsoZVs3XStlWzhdfHwib2RkIj09PWVbM10pKTplWzNdJiZvZS5lcnJvcihlWzBdKSxlfSxQU0VVRE86ZnVuY3Rpb24oZSl7dmFyIHQsbj0hZVs2XSYmZVsyXTtyZXR1cm4gWi5DSElMRC50ZXN0KGVbMF0pP251bGw6KGVbM10/ZVsyXT1lWzRdfHxlWzVdfHwiIjpuJiZLLnRlc3QobikmJih0PWYobiwhMCkpJiYodD1uLmluZGV4T2YoIikiLG4ubGVuZ3RoLXQpLW4ubGVuZ3RoKSYmKGVbMF09ZVswXS5zbGljZSgwLHQpLGVbMl09bi5zbGljZSgwLHQpKSxlLnNsaWNlKDAsMykpfX0sZmlsdGVyOntUQUc6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJlLGgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PUVbZSsiICJdO3JldHVybiB0fHwodD1uZXcgUmVnRXhwKCIoXnwiK0YrIikiK2UrIigiK0YrInwkKSIpKSYmRShlLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRlc3QoInN0cmluZyI9PXR5cGVvZiBlLmNsYXNzTmFtZSYmZS5jbGFzc05hbWV8fHZvaWQgMCE9PWUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24odCxuLGkpe3JldHVybiBmdW5jdGlvbihlKXtlPW9lLmF0dHIoZSx0KTtyZXR1cm4gbnVsbD09ZT8iIT0iPT09bjohbnx8KGUrPSIiLCI9Ij09PW4/ZT09PWk6IiE9Ij09PW4/ZSE9PWk6Il49Ij09PW4/aSYmMD09PWUuaW5kZXhPZihpKToiKj0iPT09bj9pJiYtMTxlLmluZGV4T2YoaSk6IiQ9Ij09PW4/aSYmZS5zbGljZSgtaS5sZW5ndGgpPT09aToifj0iPT09bj8tMTwoIiAiK2UucmVwbGFjZSh6LCIgIikrIiAiKS5pbmRleE9mKGkpOiJ8PSI9PT1uJiYoZT09PWl8fGUuc2xpY2UoMCxpLmxlbmd0aCsxKT09PWkrIi0iKSl9fSxDSElMRDpmdW5jdGlvbihmLGUsdCxtLHApe3ZhciB5PSJudGgiIT09Zi5zbGljZSgwLDMpLHY9Imxhc3QiIT09Zi5zbGljZSgtNCksZz0ib2YtdHlwZSI9PT1lO3JldHVybiAxPT09bSYmMD09PXA/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyLGEscyxvLHUsZD15IT12PyJuZXh0U2libGluZyI6InByZXZpb3VzU2libGluZyIsbD1lLnBhcmVudE5vZGUsaD1nJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYz0hbiYmIWcsXz0hMTtpZihsKXtpZih5KXtmb3IoO2Q7KXtmb3Iocz1lO3M9c1tkXTspaWYoZz9zLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1oOjE9PT1zLm5vZGVUeXBlKXJldHVybiExO3U9ZD0ib25seSI9PT1mJiYhdSYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZih1PVt2P2wuZmlyc3RDaGlsZDpsLmxhc3RDaGlsZF0sdiYmYyl7Zm9yKF89KG89KGk9KHI9KGE9KHM9bClbd118fChzW3ddPXt9KSlbcy51bmlxdWVJRF18fChhW3MudW5pcXVlSURdPXt9KSlbZl18fFtdKVswXT09PUQmJmlbMV0pJiZpWzJdLHM9byYmbC5jaGlsZE5vZGVzW29dO3M9KytvJiZzJiZzW2RdfHwoXz1vPTApfHx1LnBvcCgpOylpZigxPT09cy5ub2RlVHlwZSYmKytfJiZzPT09ZSl7cltmXT1bRCxvLF9dO2JyZWFrfX1lbHNlIGlmKCExPT09KF89Yz9vPShpPShyPShhPShzPWUpW3ddfHwoc1t3XT17fSkpW3MudW5pcXVlSURdfHwoYVtzLnVuaXF1ZUlEXT17fSkpW2ZdfHxbXSlbMF09PT1EJiZpWzFdOl8pKWZvcig7KHM9KytvJiZzJiZzW2RdfHwoXz1vPTApfHx1LnBvcCgpKSYmKChnP3Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9PWg6MSE9PXMubm9kZVR5cGUpfHwhKytffHwoYyYmKChyPShhPXNbd118fChzW3ddPXt9KSlbcy51bmlxdWVJRF18fChhW3MudW5pcXVlSURdPXt9KSlbZl09W0QsX10pLHMhPT1lKSk7KTtyZXR1cm4oXy09cCk9PT1tfHxfJW09PTAmJjA8PV8vbX19fSxQU0VVRE86ZnVuY3Rpb24oZSxhKXt2YXIgdCxzPU0ucHNldWRvc1tlXXx8TS5zZXRGaWx0ZXJzW2UudG9Mb3dlckNhc2UoKV18fG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBwc2V1ZG86ICIrZSk7cmV0dXJuIHNbd10/cyhhKToxPHMubGVuZ3RoPyh0PVtlLGUsIiIsYV0sTS5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KGUudG9Mb3dlckNhc2UoKSk/ZGUoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4saT1zKGUsYSkscj1pLmxlbmd0aDtyLS07KWVbbj1IKGUsaVtyXSldPSEodFtuXT1pW3JdKX0pOmZ1bmN0aW9uKGUpe3JldHVybiBzKGUsMCx0KX0pOnN9fSxwc2V1ZG9zOntub3Q6ZGUoZnVuY3Rpb24oZSl7dmFyIGk9W10scj1bXSxvPW0oZS5yZXBsYWNlKFYsIiQxIikpO3JldHVybiBvW3ddP2RlKGZ1bmN0aW9uKGUsdCxuLGkpe2Zvcih2YXIgcixhPW8oZSxudWxsLGksW10pLHM9ZS5sZW5ndGg7cy0tOykocj1hW3NdKSYmKGVbc109ISh0W3NdPXIpKX0pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaVswXT1lLG8oaSxudWxsLG4sciksaVswXT1udWxsLCFyLnBvcCgpfX0pLGhhczpkZShmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIDA8b2UodCxlKS5sZW5ndGh9fSksY29udGFpbnM6ZGUoZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC5yZXBsYWNlKHJlLGgpLGZ1bmN0aW9uKGUpe3JldHVybi0xPChlLnRleHRDb250ZW50fHxhKGUpKS5pbmRleE9mKHQpfX0pLGxhbmc6ZGUoZnVuY3Rpb24obil7cmV0dXJuIFgudGVzdChufHwiIil8fG9lLmVycm9yKCJ1bnN1cHBvcnRlZCBsYW5nOiAiK24pLG49bi5yZXBsYWNlKHJlLGgpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oZSl7dmFyIHQ7ZG97aWYodD1iP2UubGFuZzplLmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8ZS5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4odD10LnRvTG93ZXJDYXNlKCkpPT09bnx8MD09PXQuaW5kZXhPZihuKyItIil9d2hpbGUoKGU9ZS5wYXJlbnROb2RlKSYmMT09PWUubm9kZVR5cGUpO3JldHVybiExfX0pLHRhcmdldDpmdW5jdGlvbihlKXt2YXIgdD1uLmxvY2F0aW9uJiZuLmxvY2F0aW9uLmhhc2g7cmV0dXJuIHQmJnQuc2xpY2UoMSk9PT1lLmlkfSxyb290OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09c30sZm9jdXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1rLmFjdGl2ZUVsZW1lbnQmJighay5oYXNGb2N1c3x8ay5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sZW5hYmxlZDpfZSghMSksZGlzYWJsZWQ6X2UoITApLGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10JiYhIWUuY2hlY2tlZHx8Im9wdGlvbiI9PT10JiYhIWUuc2VsZWN0ZWR9LHNlbGVjdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4LCEwPT09ZS5zZWxlY3RlZH0sZW1wdHk6ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWlmKGUubm9kZVR5cGU8NilyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFNLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZWUudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIFEudGVzdChlLm5vZGVOYW1lKX0sYnV0dG9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09dCYmImJ1dHRvbiI9PT1lLnR5cGV8fCJidXR0b24iPT09dH0sdGV4dDpmdW5jdGlvbihlKXtyZXR1cm4iaW5wdXQiPT09ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiYidGV4dCI9PT1lLnR5cGUmJihudWxsPT0oZT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKXx8InRleHQiPT09ZS50b0xvd2VyQ2FzZSgpKX0sZmlyc3Q6ZmUoZnVuY3Rpb24oKXtyZXR1cm5bMF19KSxsYXN0OmZlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuW3QtMV19KSxlcTpmZShmdW5jdGlvbihlLHQsbil7cmV0dXJuW248MD9uK3Q6bl19KSxldmVuOmZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksb2RkOmZlKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTE7bjx0O24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6ZmUoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT1uPDA/bit0OnQ8bj90Om47MDw9LS1pOyllLnB1c2goaSk7cmV0dXJuIGV9KSxndDpmZShmdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPW48MD9uK3Q6bjsrK2k8dDspZS5wdXNoKGkpO3JldHVybiBlfSl9fSkucHNldWRvcy5udGg9TS5wc2V1ZG9zLmVxLHtyYWRpbzohMCxjaGVja2JveDohMCxmaWxlOiEwLHBhc3N3b3JkOiEwLGltYWdlOiEwfSlNLnBzZXVkb3NbZV09ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiJpbnB1dCI9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJmUudHlwZT09PXR9fShlKTtmb3IoZSBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KU0ucHNldWRvc1tlXT1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybigiaW5wdXQiPT09dHx8ImJ1dHRvbiI9PT10KSYmZS50eXBlPT09bn19KGUpO2Z1bmN0aW9uIHBlKCl7fWZ1bmN0aW9uIHllKGUpe2Zvcih2YXIgdD0wLG49ZS5sZW5ndGgsaT0iIjt0PG47dCsrKWkrPWVbdF0udmFsdWU7cmV0dXJuIGl9ZnVuY3Rpb24gdmUocyxlLHQpe3ZhciBvPWUuZGlyLHU9ZS5uZXh0LGQ9dXx8byxsPXQmJiJwYXJlbnROb2RlIj09PWQsaD1UKys7cmV0dXJuIGUuZmlyc3Q/ZnVuY3Rpb24oZSx0LG4pe2Zvcig7ZT1lW29dOylpZigxPT09ZS5ub2RlVHlwZXx8bClyZXR1cm4gcyhlLHQsbik7cmV0dXJuITF9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyLGE9W0QsaF07aWYobil7Zm9yKDtlPWVbb107KWlmKCgxPT09ZS5ub2RlVHlwZXx8bCkmJnMoZSx0LG4pKXJldHVybiEwfWVsc2UgZm9yKDtlPWVbb107KWlmKDE9PT1lLm5vZGVUeXBlfHxsKWlmKGk9KHI9ZVt3XXx8KGVbd109e30pKVtlLnVuaXF1ZUlEXXx8KHJbZS51bmlxdWVJRF09e30pLHUmJnU9PT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpZT1lW29dfHxlO2Vsc2V7aWYoKHI9aVtkXSkmJnJbMF09PT1EJiZyWzFdPT09aClyZXR1cm4gYVsyXT1yWzJdO2lmKChpW2RdPWEpWzJdPXMoZSx0LG4pKXJldHVybiEwfXJldHVybiExfX1mdW5jdGlvbiBnZShyKXtyZXR1cm4gMTxyLmxlbmd0aD9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPXIubGVuZ3RoO2ktLTspaWYoIXJbaV0oZSx0LG4pKXJldHVybiExO3JldHVybiEwfTpyWzBdfWZ1bmN0aW9uIE1lKGUsdCxuLGkscil7Zm9yKHZhciBhLHM9W10sbz0wLHU9ZS5sZW5ndGgsZD1udWxsIT10O288dTtvKyspKGE9ZVtvXSkmJihuJiYhbihhLGkscil8fChzLnB1c2goYSksZCYmdC5wdXNoKG8pKSk7cmV0dXJuIHN9ZnVuY3Rpb24gTGUoXyxmLG0scCx5LGUpe3JldHVybiBwJiYhcFt3XSYmKHA9TGUocCkpLHkmJiF5W3ddJiYoeT1MZSh5LGUpKSxkZShmdW5jdGlvbihlLHQsbixpKXt2YXIgcixhLHMsbz1bXSx1PVtdLGQ9dC5sZW5ndGgsbD1lfHxmdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPTAscj10Lmxlbmd0aDtpPHI7aSsrKW9lKGUsdFtpXSxuKTtyZXR1cm4gbn0oZnx8IioiLG4ubm9kZVR5cGU/W25dOm4sW10pLGg9IV98fCFlJiZmP2w6TWUobCxvLF8sbixpKSxjPW0/eXx8KGU/XzpkfHxwKT9bXTp0Omg7aWYobSYmbShoLGMsbixpKSxwKWZvcihyPU1lKGMsdSkscChyLFtdLG4saSksYT1yLmxlbmd0aDthLS07KShzPXJbYV0pJiYoY1t1W2FdXT0hKGhbdVthXV09cykpO2lmKGUpe2lmKHl8fF8pe2lmKHkpe2ZvcihyPVtdLGE9Yy5sZW5ndGg7YS0tOykocz1jW2FdKSYmci5wdXNoKGhbYV09cyk7eShudWxsLGM9W10scixpKX1mb3IoYT1jLmxlbmd0aDthLS07KShzPWNbYV0pJiYtMTwocj15P0goZSxzKTpvW2FdKSYmKGVbcl09ISh0W3JdPXMpKX19ZWxzZSBjPU1lKGM9PT10P2Muc3BsaWNlKGQsYy5sZW5ndGgpOmMpLHk/eShudWxsLHQsYyxpKTpJLmFwcGx5KHQsYyl9KX1mdW5jdGlvbiBTZShwLHkpe2Z1bmN0aW9uIGUoZSx0LG4saSxyKXt2YXIgYSxzLG8sdT0wLGQ9IjAiLGw9ZSYmW10saD1bXSxjPUwsXz1lfHxnJiZNLmZpbmQuVEFHKCIqIixyKSxmPUQrPW51bGw9PWM/MTpNYXRoLnJhbmRvbSgpfHwuMSxtPV8ubGVuZ3RoO2ZvcihyJiYoTD10PT1rfHx0fHxyKTtkIT09bSYmbnVsbCE9KGE9X1tkXSk7ZCsrKXtpZihnJiZhKXtmb3Iocz0wLHR8fGEub3duZXJEb2N1bWVudD09a3x8KFMoYSksbj0hYik7bz1wW3MrK107KWlmKG8oYSx0fHxrLG4pKXtpLnB1c2goYSk7YnJlYWt9ciYmKEQ9Zil9diYmKChhPSFvJiZhKSYmdS0tLGUmJmwucHVzaChhKSl9aWYodSs9ZCx2JiZkIT09dSl7Zm9yKHM9MDtvPXlbcysrXTspbyhsLGgsdCxuKTtpZihlKXtpZigwPHUpZm9yKDtkLS07KWxbZF18fGhbZF18fChoW2RdPXguY2FsbChpKSk7aD1NZShoKX1JLmFwcGx5KGksaCksciYmIWUmJjA8aC5sZW5ndGgmJjE8dSt5Lmxlbmd0aCYmb2UudW5pcXVlU29ydChpKX1yZXR1cm4gciYmKEQ9ZixMPWMpLGx9dmFyIHY9MDx5Lmxlbmd0aCxnPTA8cC5sZW5ndGg7cmV0dXJuIHY/ZGUoZSk6ZX1yZXR1cm4gcGUucHJvdG90eXBlPU0uZmlsdGVycz1NLnBzZXVkb3MsTS5zZXRGaWx0ZXJzPW5ldyBwZSxmPW9lLnRva2VuaXplPWZ1bmN0aW9uKGUsdCl7dmFyIG4saSxyLGEscyxvLHUsZD1ZW2UrIiAiXTtpZihkKXJldHVybiB0PzA6ZC5zbGljZSgwKTtmb3Iocz1lLG89W10sdT1NLnByZUZpbHRlcjtzOyl7Zm9yKGEgaW4gbiYmIShpPUcuZXhlYyhzKSl8fChpJiYocz1zLnNsaWNlKGlbMF0ubGVuZ3RoKXx8cyksby5wdXNoKHI9W10pKSxuPSExLChpPUouZXhlYyhzKSkmJihuPWkuc2hpZnQoKSxyLnB1c2goe3ZhbHVlOm4sdHlwZTppWzBdLnJlcGxhY2UoViwiICIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSksTS5maWx0ZXIpIShpPVpbYV0uZXhlYyhzKSl8fHVbYV0mJiEoaT11W2FdKGkpKXx8KG49aS5zaGlmdCgpLHIucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczppfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9vZS5lcnJvcihlKTpZKGUsbykuc2xpY2UoMCl9LG09b2UuY29tcGlsZT1mdW5jdGlvbihlLHQpe3ZhciBuLGk9W10scj1bXSxhPVBbZSsiICJdO2lmKCFhKXtmb3Iobj0odD10fHxmKGUpKS5sZW5ndGg7bi0tOykoKGE9ZnVuY3Rpb24gZSh0KXtmb3IodmFyIGksbixyLGE9dC5sZW5ndGgscz1NLnJlbGF0aXZlW3RbMF0udHlwZV0sbz1zfHxNLnJlbGF0aXZlWyIgIl0sdT1zPzE6MCxkPXZlKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09aX0sbywhMCksbD12ZShmdW5jdGlvbihlKXtyZXR1cm4tMTxIKGksZSl9LG8sITApLGg9W2Z1bmN0aW9uKGUsdCxuKXtyZXR1cm4gbj0hcyYmKG58fHQhPT1MKXx8KChpPXQpLm5vZGVUeXBlP2Q6bCkoZSx0LG4pLGk9bnVsbCxufV07dTxhO3UrKylpZihuPU0ucmVsYXRpdmVbdFt1XS50eXBlXSloPVt2ZShnZShoKSxuKV07ZWxzZXtpZigobj1NLmZpbHRlclt0W3VdLnR5cGVdLmFwcGx5KG51bGwsdFt1XS5tYXRjaGVzKSlbd10pe2ZvcihyPSsrdTtyPGEmJiFNLnJlbGF0aXZlW3Rbcl0udHlwZV07cisrKTtyZXR1cm4gTGUoMTx1JiZnZShoKSwxPHUmJnllKHQuc2xpY2UoMCx1LTEpLmNvbmNhdCh7dmFsdWU6IiAiPT09dFt1LTJdLnR5cGU/IioiOiIifSkpLnJlcGxhY2UoViwiJDEiKSxuLHU8ciYmZSh0LnNsaWNlKHUscikpLHI8YSYmZSh0PXQuc2xpY2UocikpLHI8YSYmeWUodCkpfWgucHVzaChuKX1yZXR1cm4gZ2UoaCl9KHRbbl0pKVt3XT9pOnIpLnB1c2goYSk7KGE9UChlLFNlKHIsaSkpKS5zZWxlY3Rvcj1lfXJldHVybiBhfSxwPW9lLnNlbGVjdD1mdW5jdGlvbihlLHQsbixpKXt2YXIgcixhLHMsbyx1LGQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUsbD0haSYmZihlPWQuc2VsZWN0b3J8fGUpO2lmKG49bnx8W10sMT09PWwubGVuZ3RoKXtpZigyPChhPWxbMF09bFswXS5zbGljZSgwKSkubGVuZ3RoJiYiSUQiPT09KHM9YVswXSkudHlwZSYmOT09PXQubm9kZVR5cGUmJmImJk0ucmVsYXRpdmVbYVsxXS50eXBlXSl7aWYoISh0PShNLmZpbmQuSUQocy5tYXRjaGVzWzBdLnJlcGxhY2UocmUsaCksdCl8fFtdKVswXSkpcmV0dXJuIG47ZCYmKHQ9dC5wYXJlbnROb2RlKSxlPWUuc2xpY2UoYS5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9Zm9yKHI9Wi5uZWVkc0NvbnRleHQudGVzdChlKT8wOmEubGVuZ3RoO3ItLSYmKHM9YVtyXSwhTS5yZWxhdGl2ZVtvPXMudHlwZV0pOylpZigodT1NLmZpbmRbb10pJiYoaT11KHMubWF0Y2hlc1swXS5yZXBsYWNlKHJlLGgpLGllLnRlc3QoYVswXS50eXBlKSYmbWUodC5wYXJlbnROb2RlKXx8dCkpKXtpZihhLnNwbGljZShyLDEpLCEoZT1pLmxlbmd0aCYmeWUoYSkpKXJldHVybiBJLmFwcGx5KG4saSksbjticmVha319cmV0dXJuKGR8fG0oZSxsKSkoaSx0LCFiLG4sIXR8fGllLnRlc3QoZSkmJm1lKHQucGFyZW50Tm9kZSl8fHQpLG59LF8uc29ydFN0YWJsZT13LnNwbGl0KCIiKS5zb3J0KFIpLmpvaW4oIiIpPT09dyxfLmRldGVjdER1cGxpY2F0ZXM9ISFkLFMoKSxfLnNvcnREZXRhY2hlZD1sZShmdW5jdGlvbihlKXtyZXR1cm4gMSZlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGsuY3JlYXRlRWxlbWVudCgiZmllbGRzZXQiKSl9KSxsZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxhIGhyZWY9JyMnPjwvYT4iLCIjIj09PWUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKX0pfHxoZSgidHlwZXxocmVmfGhlaWdodHx3aWR0aCIsZnVuY3Rpb24oZSx0LG4pe2lmKCFuKXJldHVybiBlLmdldEF0dHJpYnV0ZSh0LCJ0eXBlIj09PXQudG9Mb3dlckNhc2UoKT8xOjIpfSksXy5hdHRyaWJ1dGVzJiZsZShmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxoZSgidmFsdWUiLGZ1bmN0aW9uKGUsdCxuKXtpZighbiYmImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlyZXR1cm4gZS5kZWZhdWx0VmFsdWV9KSxsZShmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZS5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIil9KXx8aGUoaixmdW5jdGlvbihlLHQsbil7aWYoIW4pcmV0dXJuITA9PT1lW3RdP3QudG9Mb3dlckNhc2UoKToodD1lLmdldEF0dHJpYnV0ZU5vZGUodCkpJiZ0LnNwZWNpZmllZD90LnZhbHVlOm51bGx9KSxvZX0oUyk7Yi5maW5kPWMsYi5leHByPWMuc2VsZWN0b3JzLGIuZXhwclsiOiJdPWIuZXhwci5wc2V1ZG9zLGIudW5pcXVlU29ydD1iLnVuaXF1ZT1jLnVuaXF1ZVNvcnQsYi50ZXh0PWMuZ2V0VGV4dCxiLmlzWE1MRG9jPWMuaXNYTUwsYi5jb250YWlucz1jLmNvbnRhaW5zLGIuZXNjYXBlU2VsZWN0b3I9Yy5lc2NhcGU7ZnVuY3Rpb24gXyhlLHQsbil7Zm9yKHZhciBpPVtdLHI9dm9pZCAwIT09bjsoZT1lW3RdKSYmOSE9PWUubm9kZVR5cGU7KWlmKDE9PT1lLm5vZGVUeXBlKXtpZihyJiZiKGUpLmlzKG4pKWJyZWFrO2kucHVzaChlKX1yZXR1cm4gaX1mdW5jdGlvbiBMKGUsdCl7Zm9yKHZhciBuPVtdO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufXZhciB3PWIuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7ZnVuY3Rpb24gRChlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9dmFyIFQ9L148KFthLXpdW15cL1wwPjpceDIwXHRcclxuXGZdKilbXHgyMFx0XHJcblxmXSpcLz8+KD86PFwvXDE+fCkkL2k7ZnVuY3Rpb24gRShlLG4saSl7cmV0dXJuIG0obik/Yi5ncmVwKGUsZnVuY3Rpb24oZSx0KXtyZXR1cm4hIW4uY2FsbChlLHQsZSkhPT1pfSk6bi5ub2RlVHlwZT9iLmdyZXAoZSxmdW5jdGlvbihlKXtyZXR1cm4gZT09PW4hPT1pfSk6InN0cmluZyIhPXR5cGVvZiBuP2IuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybi0xPHIuY2FsbChuLGUpIT09aX0pOmIuZmlsdGVyKG4sZSxpKX1iLmZpbHRlcj1mdW5jdGlvbihlLHQsbil7dmFyIGk9dFswXTtyZXR1cm4gbiYmKGU9Ijpub3QoIitlKyIpIiksMT09PXQubGVuZ3RoJiYxPT09aS5ub2RlVHlwZT9iLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGksZSk/W2ldOltdOmIuZmluZC5tYXRjaGVzKGUsYi5ncmVwKHQsZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfSkpfSxiLmZuLmV4dGVuZCh7ZmluZDpmdW5jdGlvbihlKXt2YXIgdCxuLGk9dGhpcy5sZW5ndGgscj10aGlzO2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gdGhpcy5wdXNoU3RhY2soYihlKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3Q8aTt0KyspaWYoYi5jb250YWlucyhyW3RdLHRoaXMpKXJldHVybiEwfSkpO2ZvcihuPXRoaXMucHVzaFN0YWNrKFtdKSx0PTA7dDxpO3QrKyliLmZpbmQoZSxyW3RdLG4pO3JldHVybiAxPGk/Yi51bmlxdWVTb3J0KG4pOm59LGZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRSh0aGlzLGV8fFtdLCExKSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRSh0aGlzLGV8fFtdLCEwKSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhRSh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmdy50ZXN0KGUpP2IoZSk6ZXx8W10sITEpLmxlbmd0aH19KTt2YXIgWT0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSspKSQvOyhiLmZuLmluaXQ9ZnVuY3Rpb24oZSx0LG4pe2lmKCFlKXJldHVybiB0aGlzO2lmKG49bnx8UCwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIGUubm9kZVR5cGU/KHRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOm0oZSk/dm9pZCAwIT09bi5yZWFkeT9uLnJlYWR5KGUpOmUoYik6Yi5tYWtlQXJyYXkoZSx0aGlzKTtpZighKGk9IjwiPT09ZVswXSYmIj4iPT09ZVtlLmxlbmd0aC0xXSYmMzw9ZS5sZW5ndGg/W251bGwsZSxudWxsXTpZLmV4ZWMoZSkpfHwhaVsxXSYmdClyZXR1cm4oIXR8fHQuanF1ZXJ5P3R8fG46dGhpcy5jb25zdHJ1Y3Rvcih0KSkuZmluZChlKTtpZihpWzFdKXtpZih0PXQgaW5zdGFuY2VvZiBiP3RbMF06dCxiLm1lcmdlKHRoaXMsYi5wYXJzZUhUTUwoaVsxXSx0JiZ0Lm5vZGVUeXBlP3Qub3duZXJEb2N1bWVudHx8dDprLCEwKSksVC50ZXN0KGlbMV0pJiZiLmlzUGxhaW5PYmplY3QodCkpZm9yKHZhciBpIGluIHQpbSh0aGlzW2ldKT90aGlzW2ldKHRbaV0pOnRoaXMuYXR0cihpLHRbaV0pO3JldHVybiB0aGlzfXJldHVybihlPWsuZ2V0RWxlbWVudEJ5SWQoaVsyXSkpJiYodGhpc1swXT1lLHRoaXMubGVuZ3RoPTEpLHRoaXN9KS5wcm90b3R5cGU9Yi5mbjt2YXIgUD1iKGspLEM9L14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sUj17Y2hpbGRyZW46ITAsY29udGVudHM6ITAsbmV4dDohMCxwcmV2OiEwfTtmdW5jdGlvbiBBKGUsdCl7Zm9yKDsoZT1lW3RdKSYmMSE9PWUubm9kZVR5cGU7KTtyZXR1cm4gZX1iLmZuLmV4dGVuZCh7aGFzOmZ1bmN0aW9uKGUpe3ZhciB0PWIoZSx0aGlzKSxuPXQubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgZT0wO2U8bjtlKyspaWYoYi5jb250YWlucyh0aGlzLHRbZV0pKXJldHVybiEwfSl9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPTAscj10aGlzLmxlbmd0aCxhPVtdLHM9InN0cmluZyIhPXR5cGVvZiBlJiZiKGUpO2lmKCF3LnRlc3QoZSkpZm9yKDtpPHI7aSsrKWZvcihuPXRoaXNbaV07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYobi5ub2RlVHlwZTwxMSYmKHM/LTE8cy5pbmRleChuKToxPT09bi5ub2RlVHlwZSYmYi5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7YS5wdXNoKG4pO2JyZWFrfXJldHVybiB0aGlzLnB1c2hTdGFjaygxPGEubGVuZ3RoP2IudW5pcXVlU29ydChhKTphKX0saW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/InN0cmluZyI9PXR5cGVvZiBlP3IuY2FsbChiKGUpLHRoaXNbMF0pOnIuY2FsbCh0aGlzLGUuanF1ZXJ5P2VbMF06ZSk6dGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoOi0xfSxhZGQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soYi51bmlxdWVTb3J0KGIubWVyZ2UodGhpcy5nZXQoKSxiKGUsdCkpKSl9LGFkZEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYWRkKG51bGw9PWU/dGhpcy5wcmV2T2JqZWN0OnRoaXMucHJldk9iamVjdC5maWx0ZXIoZSkpfX0pLGIuZWFjaCh7cGFyZW50OmZ1bmN0aW9uKGUpe2U9ZS5wYXJlbnROb2RlO3JldHVybiBlJiYxMSE9PWUubm9kZVR5cGU/ZTpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiBfKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gXyhlLCJwYXJlbnROb2RlIixuKX0sbmV4dDpmdW5jdGlvbihlKXtyZXR1cm4gQShlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBBKGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiBfKGUsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIF8oZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBfKGUsInByZXZpb3VzU2libGluZyIsbil9LHNpYmxpbmdzOmZ1bmN0aW9uKGUpe3JldHVybiBMKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gTChlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZS5jb250ZW50RG9jdW1lbnQmJm4oZS5jb250ZW50RG9jdW1lbnQpP2UuY29udGVudERvY3VtZW50OihEKGUsInRlbXBsYXRlIikmJihlPWUuY29udGVudHx8ZSksYi5tZXJnZShbXSxlLmNoaWxkTm9kZXMpKX19LGZ1bmN0aW9uKGkscil7Yi5mbltpXT1mdW5jdGlvbihlLHQpe3ZhciBuPWIubWFwKHRoaXMscixlKTtyZXR1cm4odD0iVW50aWwiIT09aS5zbGljZSgtNSk/ZTp0KSYmInN0cmluZyI9PXR5cGVvZiB0JiYobj1iLmZpbHRlcih0LG4pKSwxPHRoaXMubGVuZ3RoJiYoUltpXXx8Yi51bmlxdWVTb3J0KG4pLEMudGVzdChpKSYmbi5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKG4pfX0pO3ZhciB4PS9bXlx4MjBcdFxyXG5cZl0rL2c7ZnVuY3Rpb24gTyhlKXtyZXR1cm4gZX1mdW5jdGlvbiBJKGUpe3Rocm93IGV9ZnVuY3Rpb24gVyhlLHQsbixpKXt2YXIgcjt0cnl7ZSYmbShyPWUucHJvbWlzZSk/ci5jYWxsKGUpLmRvbmUodCkuZmFpbChuKTplJiZtKHI9ZS50aGVuKT9yLmNhbGwoZSx0LG4pOnQuYXBwbHkodm9pZCAwLFtlXS5zbGljZShpKSl9Y2F0Y2goZSl7bi5hcHBseSh2b2lkIDAsW2VdKX19Yi5DYWxsYmFja3M9ZnVuY3Rpb24oaSl7dmFyIGUsbjtpPSJzdHJpbmciPT10eXBlb2YgaT8oZT1pLG49e30sYi5lYWNoKGUubWF0Y2goeCl8fFtdLGZ1bmN0aW9uKGUsdCl7blt0XT0hMH0pLG4pOmIuZXh0ZW5kKHt9LGkpO2Z1bmN0aW9uIHIoKXtmb3Iobz1vfHxpLm9uY2Uscz1hPSEwO2QubGVuZ3RoO2w9LTEpZm9yKHQ9ZC5zaGlmdCgpOysrbDx1Lmxlbmd0aDspITE9PT11W2xdLmFwcGx5KHRbMF0sdFsxXSkmJmkuc3RvcE9uRmFsc2UmJihsPXUubGVuZ3RoLHQ9ITEpO2kubWVtb3J5fHwodD0hMSksYT0hMSxvJiYodT10P1tdOiIiKX12YXIgYSx0LHMsbyx1PVtdLGQ9W10sbD0tMSxoPXthZGQ6ZnVuY3Rpb24oKXtyZXR1cm4gdSYmKHQmJiFhJiYobD11Lmxlbmd0aC0xLGQucHVzaCh0KSksZnVuY3Rpb24gbihlKXtiLmVhY2goZSxmdW5jdGlvbihlLHQpe20odCk/aS51bmlxdWUmJmguaGFzKHQpfHx1LnB1c2godCk6dCYmdC5sZW5ndGgmJiJzdHJpbmciIT09Zih0KSYmbih0KX0pfShhcmd1bWVudHMpLHQmJiFhJiZyKCkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBiLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuOy0xPChuPWIuaW5BcnJheSh0LHUsbikpOyl1LnNwbGljZShuLDEpLG48PWwmJmwtLX0pLHRoaXN9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4gZT8tMTxiLmluQXJyYXkoZSx1KTowPHUubGVuZ3RofSxlbXB0eTpmdW5jdGlvbigpe3JldHVybiB1PXUmJltdLHRoaXN9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gbz1kPVtdLHU9dD0iIix0aGlzfSxkaXNhYmxlZDpmdW5jdGlvbigpe3JldHVybiF1fSxsb2NrOmZ1bmN0aW9uKCl7cmV0dXJuIG89ZD1bXSx0fHxhfHwodT10PSIiKSx0aGlzfSxsb2NrZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIW99LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG98fCh0PVtlLCh0PXR8fFtdKS5zbGljZT90LnNsaWNlKCk6dF0sZC5wdXNoKHQpLGF8fHIoKSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBoLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhc319O3JldHVybiBofSxiLmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oZSl7dmFyIGE9W1sibm90aWZ5IiwicHJvZ3Jlc3MiLGIuQ2FsbGJhY2tzKCJtZW1vcnkiKSxiLkNhbGxiYWNrcygibWVtb3J5IiksMl0sWyJyZXNvbHZlIiwiZG9uZSIsYi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksYi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksMCwicmVzb2x2ZWQiXSxbInJlamVjdCIsImZhaWwiLGIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLDEsInJlamVjdGVkIl1dLHI9InBlbmRpbmciLHM9e3N0YXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGFsd2F5czpmdW5jdGlvbigpe3JldHVybiBvLmRvbmUoYXJndW1lbnRzKS5mYWlsKGFyZ3VtZW50cyksdGhpc30sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHMudGhlbihudWxsLGUpfSxwaXBlOmZ1bmN0aW9uKCl7dmFyIHI9YXJndW1lbnRzO3JldHVybiBiLkRlZmVycmVkKGZ1bmN0aW9uKGkpe2IuZWFjaChhLGZ1bmN0aW9uKGUsdCl7dmFyIG49bShyW3RbNF1dKSYmclt0WzRdXTtvW3RbMV1dKGZ1bmN0aW9uKCl7dmFyIGU9biYmbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZSYmbShlLnByb21pc2UpP2UucHJvbWlzZSgpLnByb2dyZXNzKGkubm90aWZ5KS5kb25lKGkucmVzb2x2ZSkuZmFpbChpLnJlamVjdCk6aVt0WzBdKyJXaXRoIl0odGhpcyxuP1tlXTphcmd1bWVudHMpfSl9KSxyPW51bGx9KS5wcm9taXNlKCl9LHRoZW46ZnVuY3Rpb24odCxuLGkpe3ZhciB1PTA7ZnVuY3Rpb24gZChyLGEscyxvKXtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGUsdDtpZighKHI8dSkpe2lmKChlPXMuYXBwbHkobixpKSk9PT1hLnByb21pc2UoKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb24iKTt0PWUmJigib2JqZWN0Ij09dHlwZW9mIGV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlKSYmZS50aGVuLG0odCk/bz90LmNhbGwoZSxkKHUsYSxPLG8pLGQodSxhLEksbykpOih1KyssdC5jYWxsKGUsZCh1LGEsTyxvKSxkKHUsYSxJLG8pLGQodSxhLE8sYS5ub3RpZnlXaXRoKSkpOihzIT09TyYmKG49dm9pZCAwLGk9W2VdKSwob3x8YS5yZXNvbHZlV2l0aCkobixpKSl9fXZhciBuPXRoaXMsaT1hcmd1bWVudHMsdD1vP2U6ZnVuY3Rpb24oKXt0cnl7ZSgpfWNhdGNoKGUpe2IuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayYmYi5EZWZlcnJlZC5leGNlcHRpb25Ib29rKGUsdC5zdGFja1RyYWNlKSx1PD1yKzEmJihzIT09SSYmKG49dm9pZCAwLGk9W2VdKSxhLnJlamVjdFdpdGgobixpKSl9fTtyP3QoKTooYi5EZWZlcnJlZC5nZXRTdGFja0hvb2smJih0LnN0YWNrVHJhY2U9Yi5EZWZlcnJlZC5nZXRTdGFja0hvb2soKSksUy5zZXRUaW1lb3V0KHQpKX19cmV0dXJuIGIuRGVmZXJyZWQoZnVuY3Rpb24oZSl7YVswXVszXS5hZGQoZCgwLGUsbShpKT9pOk8sZS5ub3RpZnlXaXRoKSksYVsxXVszXS5hZGQoZCgwLGUsbSh0KT90Ok8pKSxhWzJdWzNdLmFkZChkKDAsZSxtKG4pP246SSkpfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP2IuZXh0ZW5kKGUscyk6c319LG89e307cmV0dXJuIGIuZWFjaChhLGZ1bmN0aW9uKGUsdCl7dmFyIG49dFsyXSxpPXRbNV07c1t0WzFdXT1uLmFkZCxpJiZuLmFkZChmdW5jdGlvbigpe3I9aX0sYVszLWVdWzJdLmRpc2FibGUsYVszLWVdWzNdLmRpc2FibGUsYVswXVsyXS5sb2NrLGFbMF1bM10ubG9jayksbi5hZGQodFszXS5maXJlKSxvW3RbMF1dPWZ1bmN0aW9uKCl7cmV0dXJuIG9bdFswXSsiV2l0aCJdKHRoaXM9PT1vP3ZvaWQgMDp0aGlzLGFyZ3VtZW50cyksdGhpc30sb1t0WzBdKyJXaXRoIl09bi5maXJlV2l0aH0pLHMucHJvbWlzZShvKSxlJiZlLmNhbGwobyxvKSxvfSx3aGVuOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JbdF09dGhpcyxhW3RdPTE8YXJndW1lbnRzLmxlbmd0aD9vLmNhbGwoYXJndW1lbnRzKTplLC0tbnx8cy5yZXNvbHZlV2l0aChyLGEpfX12YXIgbj1hcmd1bWVudHMubGVuZ3RoLGk9bixyPUFycmF5KGkpLGE9by5jYWxsKGFyZ3VtZW50cykscz1iLkRlZmVycmVkKCk7aWYobjw9MSYmKFcoZSxzLmRvbmUodChpKSkucmVzb2x2ZSxzLnJlamVjdCwhbiksInBlbmRpbmciPT09cy5zdGF0ZSgpfHxtKGFbaV0mJmFbaV0udGhlbikpKXJldHVybiBzLnRoZW4oKTtmb3IoO2ktLTspVyhhW2ldLHQoaSkscy5yZWplY3QpO3JldHVybiBzLnByb21pc2UoKX19KTt2YXIgSD0vXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztiLkRlZmVycmVkLmV4Y2VwdGlvbkhvb2s9ZnVuY3Rpb24oZSx0KXtTLmNvbnNvbGUmJlMuY29uc29sZS53YXJuJiZlJiZILnRlc3QoZS5uYW1lKSYmUy5jb25zb2xlLndhcm4oImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246ICIrZS5tZXNzYWdlLGUuc3RhY2ssdCl9LGIucmVhZHlFeGNlcHRpb249ZnVuY3Rpb24oZSl7Uy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhyb3cgZX0pfTt2YXIgaj1iLkRlZmVycmVkKCk7ZnVuY3Rpb24gRigpe2sucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsRiksUy5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixGKSxiLnJlYWR5KCl9Yi5mbi5yZWFkeT1mdW5jdGlvbihlKXtyZXR1cm4gai50aGVuKGUpLmNhdGNoKGZ1bmN0aW9uKGUpe2IucmVhZHlFeGNlcHRpb24oZSl9KSx0aGlzfSxiLmV4dGVuZCh7aXNSZWFkeTohMSxyZWFkeVdhaXQ6MSxyZWFkeTpmdW5jdGlvbihlKXsoITA9PT1lPy0tYi5yZWFkeVdhaXQ6Yi5pc1JlYWR5KXx8KGIuaXNSZWFkeT0hMCkhPT1lJiYwPC0tYi5yZWFkeVdhaXR8fGoucmVzb2x2ZVdpdGgoayxbYl0pfX0pLGIucmVhZHkudGhlbj1qLnRoZW4sImNvbXBsZXRlIj09PWsucmVhZHlTdGF0ZXx8ImxvYWRpbmciIT09ay5yZWFkeVN0YXRlJiYhay5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGw/Uy5zZXRUaW1lb3V0KGIucmVhZHkpOihrLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLEYpLFMuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsRikpO2Z1bmN0aW9uIEIoZSx0LG4saSxyLGEscyl7dmFyIG89MCx1PWUubGVuZ3RoLGQ9bnVsbD09bjtpZigib2JqZWN0Ij09PWYobikpZm9yKG8gaW4gcj0hMCxuKUIoZSx0LG8sbltvXSwhMCxhLHMpO2Vsc2UgaWYodm9pZCAwIT09aSYmKHI9ITAsbShpKXx8KHM9ITApLHQ9ZD9zPyh0LmNhbGwoZSxpKSxudWxsKTooZD10LGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZC5jYWxsKGIoZSksbil9KTp0KSlmb3IoO288dTtvKyspdChlW29dLG4scz9pOmkuY2FsbChlW29dLG8sdChlW29dLG4pKSk7cmV0dXJuIHI/ZTpkP3QuY2FsbChlKTp1P3QoZVswXSxuKTphfXZhciBVPS9eLW1zLS8sTj0vLShbYS16XSkvZztmdW5jdGlvbiB6KGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX1mdW5jdGlvbiBWKGUpe3JldHVybiBlLnJlcGxhY2UoVSwibXMtIikucmVwbGFjZShOLHopfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlfHw5PT09ZS5ub2RlVHlwZXx8IStlLm5vZGVUeXBlfWZ1bmN0aW9uIEooKXt0aGlzLmV4cGFuZG89Yi5leHBhbmRvK0oudWlkKyt9Si51aWQ9MSxKLnByb3RvdHlwZT17Y2FjaGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVt0aGlzLmV4cGFuZG9dO3JldHVybiB0fHwodD17fSxHKGUpJiYoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dDpPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0aGlzLmV4cGFuZG8se3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwfSkpKSx0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHI9dGhpcy5jYWNoZShlKTtpZigic3RyaW5nIj09dHlwZW9mIHQpcltWKHQpXT1uO2Vsc2UgZm9yKGkgaW4gdClyW1YoaSldPXRbaV07cmV0dXJuIHJ9LGdldDpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10P3RoaXMuY2FjaGUoZSk6ZVt0aGlzLmV4cGFuZG9dJiZlW3RoaXMuZXhwYW5kb11bVih0KV19LGFjY2VzczpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHZvaWQgMD09PXR8fHQmJiJzdHJpbmciPT10eXBlb2YgdCYmdm9pZCAwPT09bj90aGlzLmdldChlLHQpOih0aGlzLnNldChlLHQsbiksdm9pZCAwIT09bj9uOnQpfSxyZW1vdmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPWVbdGhpcy5leHBhbmRvXTtpZih2b2lkIDAhPT1pKXtpZih2b2lkIDAhPT10KXtuPSh0PUFycmF5LmlzQXJyYXkodCk/dC5tYXAoVik6KHQ9Vih0KSlpbiBpP1t0XTp0Lm1hdGNoKHgpfHxbXSkubGVuZ3RoO2Zvcig7bi0tOylkZWxldGUgaVt0W25dXX12b2lkIDAhPT10JiYhYi5pc0VtcHR5T2JqZWN0KGkpfHwoZS5ub2RlVHlwZT9lW3RoaXMuZXhwYW5kb109dm9pZCAwOmRlbGV0ZSBlW3RoaXMuZXhwYW5kb10pfX0saGFzRGF0YTpmdW5jdGlvbihlKXtlPWVbdGhpcy5leHBhbmRvXTtyZXR1cm4gdm9pZCAwIT09ZSYmIWIuaXNFbXB0eU9iamVjdChlKX19O3ZhciBxPW5ldyBKLEs9bmV3IEosWD0vXig/Olx7W1x3XFddKlx9fFxbW1x3XFddKlxdKSQvLFo9L1tBLVpdL2c7ZnVuY3Rpb24gJChlLHQsbil7dmFyIGkscjtpZih2b2lkIDA9PT1uJiYxPT09ZS5ub2RlVHlwZSlpZihpPSJkYXRhLSIrdC5yZXBsYWNlKFosIi0kJiIpLnRvTG93ZXJDYXNlKCksInN0cmluZyI9PXR5cGVvZihuPWUuZ2V0QXR0cmlidXRlKGkpKSl7dHJ5e249InRydWUiPT09KHI9bil8fCJmYWxzZSIhPT1yJiYoIm51bGwiPT09cj9udWxsOnI9PT0rcisiIj8rcjpYLnRlc3Qocik/SlNPTi5wYXJzZShyKTpyKX1jYXRjaChlKXt9Sy5zZXQoZSx0LG4pfWVsc2Ugbj12b2lkIDA7cmV0dXJuIG59Yi5leHRlbmQoe2hhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIEsuaGFzRGF0YShlKXx8cS5oYXNEYXRhKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gSy5hY2Nlc3MoZSx0LG4pfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7Sy5yZW1vdmUoZSx0KX0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBxLmFjY2VzcyhlLHQsbil9LF9yZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCl7cS5yZW1vdmUoZSx0KX19KSxiLmZuLmV4dGVuZCh7ZGF0YTpmdW5jdGlvbihuLGUpe3ZhciB0LGkscixhPXRoaXNbMF0scz1hJiZhLmF0dHJpYnV0ZXM7aWYodm9pZCAwIT09bilyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG4/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5zZXQodGhpcyxuKX0pOkIodGhpcyxmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gYSYmdm9pZCAwPT09ZT92b2lkIDAhPT0odD1LLmdldChhLG4pKXx8dm9pZCAwIT09KHQ9JChhLG4pKT90OnZvaWQgMDp2b2lkIHRoaXMuZWFjaChmdW5jdGlvbigpe0suc2V0KHRoaXMsbixlKX0pfSxudWxsLGUsMTxhcmd1bWVudHMubGVuZ3RoLG51bGwsITApO2lmKHRoaXMubGVuZ3RoJiYocj1LLmdldChhKSwxPT09YS5ub2RlVHlwZSYmIXEuZ2V0KGEsImhhc0RhdGFBdHRycyIpKSl7Zm9yKHQ9cy5sZW5ndGg7dC0tOylzW3RdJiYwPT09KGk9c1t0XS5uYW1lKS5pbmRleE9mKCJkYXRhLSIpJiYoaT1WKGkuc2xpY2UoNSkpLCQoYSxpLHJbaV0pKTtxLnNldChhLCJoYXNEYXRhQXR0cnMiLCEwKX1yZXR1cm4gcn0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Sy5yZW1vdmUodGhpcyxlKX0pfX0pLGIuZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLHQsbil7dmFyIGk7aWYoZSlyZXR1cm4gaT1xLmdldChlLHQ9KHR8fCJmeCIpKyJxdWV1ZSIpLG4mJighaXx8QXJyYXkuaXNBcnJheShuKT9pPXEuYWNjZXNzKGUsdCxiLm1ha2VBcnJheShuKSk6aS5wdXNoKG4pKSxpfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj1iLnF1ZXVlKGUsdCksaT1uLmxlbmd0aCxyPW4uc2hpZnQoKSxhPWIuX3F1ZXVlSG9va3MoZSx0KTsiaW5wcm9ncmVzcyI9PT1yJiYocj1uLnNoaWZ0KCksaS0tKSxyJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBhLnN0b3Asci5jYWxsKGUsZnVuY3Rpb24oKXtiLmRlcXVldWUoZSx0KX0sYSkpLCFpJiZhJiZhLmVtcHR5LmZpcmUoKX0sX3F1ZXVlSG9va3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10KyJxdWV1ZUhvb2tzIjtyZXR1cm4gcS5nZXQoZSxuKXx8cS5hY2Nlc3MoZSxuLHtlbXB0eTpiLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXtxLnJlbW92ZShlLFt0KyJxdWV1ZSIsbl0pfSl9KX19KSxiLmZuLmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24odCxuKXt2YXIgZT0yO3JldHVybiJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSJmeCIsZS0tKSxhcmd1bWVudHMubGVuZ3RoPGU/Yi5xdWV1ZSh0aGlzWzBdLHQpOnZvaWQgMD09PW4/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1iLnF1ZXVlKHRoaXMsdCxuKTtiLl9xdWV1ZUhvb2tzKHRoaXMsdCksImZ4Ij09PXQmJiJpbnByb2dyZXNzIiE9PWVbMF0mJmIuZGVxdWV1ZSh0aGlzLHQpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2IuZGVxdWV1ZSh0aGlzLGUpfSl9LGNsZWFyUXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucXVldWUoZXx8ImZ4IixbXSl9LHByb21pc2U6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7LS1yfHxhLnJlc29sdmVXaXRoKHMsW3NdKX12YXIgaSxyPTEsYT1iLkRlZmVycmVkKCkscz10aGlzLG89dGhpcy5sZW5ndGg7Zm9yKCJzdHJpbmciIT10eXBlb2YgZSYmKHQ9ZSxlPXZvaWQgMCksZT1lfHwiZngiO28tLTspKGk9cS5nZXQoc1tvXSxlKyJxdWV1ZUhvb2tzIikpJiZpLmVtcHR5JiYocisrLGkuZW1wdHkuYWRkKG4pKTtyZXR1cm4gbigpLGEucHJvbWlzZSh0KX19KTt2YXIgUT0vWystXT8oPzpcZCpcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvLnNvdXJjZSxlZT1uZXcgUmVnRXhwKCJeKD86KFsrLV0pPXwpKCIrUSsiKShbYS16JV0qKSQiLCJpIiksdGU9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxuZT1rLmRvY3VtZW50RWxlbWVudCxpZT1mdW5jdGlvbihlKXtyZXR1cm4gYi5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl9LHJlPXtjb21wb3NlZDohMH07bmUuZ2V0Um9vdE5vZGUmJihpZT1mdW5jdGlvbihlKXtyZXR1cm4gYi5jb250YWlucyhlLm93bmVyRG9jdW1lbnQsZSl8fGUuZ2V0Um9vdE5vZGUocmUpPT09ZS5vd25lckRvY3VtZW50fSk7ZnVuY3Rpb24gYWUoZSx0KXtyZXR1cm4ibm9uZSI9PT0oZT10fHxlKS5zdHlsZS5kaXNwbGF5fHwiIj09PWUuc3R5bGUuZGlzcGxheSYmaWUoZSkmJiJub25lIj09PWIuY3NzKGUsImRpc3BsYXkiKX1mdW5jdGlvbiBzZShlLHQsbixpKXt2YXIgcixhLHM9MjAsbz1pP2Z1bmN0aW9uKCl7cmV0dXJuIGkuY3VyKCl9OmZ1bmN0aW9uKCl7cmV0dXJuIGIuY3NzKGUsdCwiIil9LHU9bygpLGQ9biYmblszXXx8KGIuY3NzTnVtYmVyW3RdPyIiOiJweCIpLGw9ZS5ub2RlVHlwZSYmKGIuY3NzTnVtYmVyW3RdfHwicHgiIT09ZCYmK3UpJiZlZS5leGVjKGIuY3NzKGUsdCkpO2lmKGwmJmxbM10hPT1kKXtmb3IoZD1kfHxsWzNdLGw9Kyh1Lz0yKXx8MTtzLS07KWIuc3R5bGUoZSx0LGwrZCksKDEtYSkqKDEtKGE9bygpL3V8fC41KSk8PTAmJihzPTApLGwvPWE7Yi5zdHlsZShlLHQsKGwqPTIpK2QpLG49bnx8W119cmV0dXJuIG4mJihsPStsfHwrdXx8MCxyPW5bMV0/bCsoblsxXSsxKSpuWzJdOituWzJdLGkmJihpLnVuaXQ9ZCxpLnN0YXJ0PWwsaS5lbmQ9cikpLHJ9dmFyIG9lPXt9O2Z1bmN0aW9uIHVlKGUsdCl7Zm9yKHZhciBuLGkscixhLHMsbz1bXSx1PTAsZD1lLmxlbmd0aDt1PGQ7dSsrKShpPWVbdV0pLnN0eWxlJiYobj1pLnN0eWxlLmRpc3BsYXksdD8oIm5vbmUiPT09biYmKG9bdV09cS5nZXQoaSwiZGlzcGxheSIpfHxudWxsLG9bdV18fChpLnN0eWxlLmRpc3BsYXk9IiIpKSwiIj09PWkuc3R5bGUuZGlzcGxheSYmYWUoaSkmJihvW3VdPShzPWE9dm9pZCAwLGE9KHI9aSkub3duZXJEb2N1bWVudCxzPXIubm9kZU5hbWUsKHI9b2Vbc10pfHwoYT1hLmJvZHkuYXBwZW5kQ2hpbGQoYS5jcmVhdGVFbGVtZW50KHMpKSxyPWIuY3NzKGEsImRpc3BsYXkiKSxhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksb2Vbc109cj0ibm9uZSI9PT1yPyJibG9jayI6cikpKSk6Im5vbmUiIT09biYmKG9bdV09Im5vbmUiLHEuc2V0KGksImRpc3BsYXkiLG4pKSk7Zm9yKHU9MDt1PGQ7dSsrKW51bGwhPW9bdV0mJihlW3VdLnN0eWxlLmRpc3BsYXk9b1t1XSk7cmV0dXJuIGV9Yi5mbi5leHRlbmQoe3Nob3c6ZnVuY3Rpb24oKXtyZXR1cm4gdWUodGhpcywhMCl9LGhpZGU6ZnVuY3Rpb24oKXtyZXR1cm4gdWUodGhpcyl9LHRvZ2dsZTpmdW5jdGlvbihlKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBlP2U/dGhpcy5zaG93KCk6dGhpcy5oaWRlKCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7YWUodGhpcyk/Yih0aGlzKS5zaG93KCk6Yih0aGlzKS5oaWRlKCl9KX19KTt2YXIgZGU9L14oPzpjaGVja2JveHxyYWRpbykkL2ksbGU9LzwoW2Etel1bXlwvXDA+XHgyMFx0XHJcblxmXSopL2ksaGU9L14kfF5tb2R1bGUkfFwvKD86amF2YXxlY21hKXNjcmlwdC9pO0p0PWsuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLmFwcGVuZENoaWxkKGsuY3JlYXRlRWxlbWVudCgiZGl2IikpLChjPWsuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSkuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSxjLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSxjLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxKdC5hcHBlbmRDaGlsZChjKSxnLmNoZWNrQ2xvbmU9SnQuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLEp0LmlubmVySFRNTD0iPHRleHRhcmVhPng8L3RleHRhcmVhPiIsZy5ub0Nsb25lQ2hlY2tlZD0hIUp0LmNsb25lTm9kZSghMCkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZSxKdC5pbm5lckhUTUw9IjxvcHRpb24+PC9vcHRpb24+IixnLm9wdGlvbj0hIUp0Lmxhc3RDaGlsZDt2YXIgY2U9e3RoZWFkOlsxLCI8dGFibGU+IiwiPC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfTtmdW5jdGlvbiBfZShlLHQpe3ZhciBuPXZvaWQgMCE9PWUuZ2V0RWxlbWVudHNCeVRhZ05hbWU/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSh0fHwiKiIpOnZvaWQgMCE9PWUucXVlcnlTZWxlY3RvckFsbD9lLnF1ZXJ5U2VsZWN0b3JBbGwodHx8IioiKTpbXTtyZXR1cm4gdm9pZCAwPT09dHx8dCYmRChlLHQpP2IubWVyZ2UoW2VdLG4pOm59ZnVuY3Rpb24gZmUoZSx0KXtmb3IodmFyIG49MCxpPWUubGVuZ3RoO248aTtuKyspcS5zZXQoZVtuXSwiZ2xvYmFsRXZhbCIsIXR8fHEuZ2V0KHRbbl0sImdsb2JhbEV2YWwiKSl9Y2UudGJvZHk9Y2UudGZvb3Q9Y2UuY29sZ3JvdXA9Y2UuY2FwdGlvbj1jZS50aGVhZCxjZS50aD1jZS50ZCxnLm9wdGlvbnx8KGNlLm9wdGdyb3VwPWNlLm9wdGlvbj1bMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdKTt2YXIgbWU9Lzx8JiM/XHcrOy87ZnVuY3Rpb24gcGUoZSx0LG4saSxyKXtmb3IodmFyIGEscyxvLHUsZCxsPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9W10sYz0wLF89ZS5sZW5ndGg7YzxfO2MrKylpZigoYT1lW2NdKXx8MD09PWEpaWYoIm9iamVjdCI9PT1mKGEpKWIubWVyZ2UoaCxhLm5vZGVUeXBlP1thXTphKTtlbHNlIGlmKG1lLnRlc3QoYSkpe2ZvcihzPXN8fGwuYXBwZW5kQ2hpbGQodC5jcmVhdGVFbGVtZW50KCJkaXYiKSksbz0obGUuZXhlYyhhKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKSxvPWNlW29dfHxjZS5fZGVmYXVsdCxzLmlubmVySFRNTD1vWzFdK2IuaHRtbFByZWZpbHRlcihhKStvWzJdLGQ9b1swXTtkLS07KXM9cy5sYXN0Q2hpbGQ7Yi5tZXJnZShoLHMuY2hpbGROb2RlcyksKHM9bC5maXJzdENoaWxkKS50ZXh0Q29udGVudD0iIn1lbHNlIGgucHVzaCh0LmNyZWF0ZVRleHROb2RlKGEpKTtmb3IobC50ZXh0Q29udGVudD0iIixjPTA7YT1oW2MrK107KWlmKGkmJi0xPGIuaW5BcnJheShhLGkpKXImJnIucHVzaChhKTtlbHNlIGlmKHU9aWUoYSkscz1fZShsLmFwcGVuZENoaWxkKGEpLCJzY3JpcHQiKSx1JiZmZShzKSxuKWZvcihkPTA7YT1zW2QrK107KWhlLnRlc3QoYS50eXBlfHwiIikmJm4ucHVzaChhKTtyZXR1cm4gbH12YXIgeWU9L14oW14uXSopKD86XC4oLispfCkvO2Z1bmN0aW9uIHZlKCl7cmV0dXJuITB9ZnVuY3Rpb24gZ2UoKXtyZXR1cm4hMX1mdW5jdGlvbiBNZShlLHQpe3JldHVybiBlPT09ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGsuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fSgpPT0oImZvY3VzIj09PXQpfWZ1bmN0aW9uIExlKGUsdCxuLGkscixhKXt2YXIgcyxvO2lmKCJvYmplY3QiPT10eXBlb2YgdCl7Zm9yKG8gaW4ic3RyaW5nIiE9dHlwZW9mIG4mJihpPWl8fG4sbj12b2lkIDApLHQpTGUoZSxvLG4saSx0W29dLGEpO3JldHVybiBlfWlmKG51bGw9PWkmJm51bGw9PXI/KHI9bixpPW49dm9pZCAwKTpudWxsPT1yJiYoInN0cmluZyI9PXR5cGVvZiBuPyhyPWksaT12b2lkIDApOihyPWksaT1uLG49dm9pZCAwKSksITE9PT1yKXI9Z2U7ZWxzZSBpZighcilyZXR1cm4gZTtyZXR1cm4gMT09PWEmJihzPXIsKHI9ZnVuY3Rpb24oZSl7cmV0dXJuIGIoKS5vZmYoZSkscy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KS5ndWlkPXMuZ3VpZHx8KHMuZ3VpZD1iLmd1aWQrKykpLGUuZWFjaChmdW5jdGlvbigpe2IuZXZlbnQuYWRkKHRoaXMsdCxyLGksbil9KX1mdW5jdGlvbiBTZShlLHIsYSl7YT8ocS5zZXQoZSxyLCExKSxiLmV2ZW50LmFkZChlLHIse25hbWVzcGFjZTohMSxoYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciB0LG4saT1xLmdldCh0aGlzLHIpO2lmKDEmZS5pc1RyaWdnZXImJnRoaXNbcl0pe2lmKGkubGVuZ3RoKShiLmV2ZW50LnNwZWNpYWxbcl18fHt9KS5kZWxlZ2F0ZVR5cGUmJmUuc3RvcFByb3BhZ2F0aW9uKCk7ZWxzZSBpZihpPW8uY2FsbChhcmd1bWVudHMpLHEuc2V0KHRoaXMscixpKSx0PWEodGhpcyxyKSx0aGlzW3JdKCksaSE9PShuPXEuZ2V0KHRoaXMscikpfHx0P3Euc2V0KHRoaXMsciwhMSk6bj17fSxpIT09bilyZXR1cm4gZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSxlLnByZXZlbnREZWZhdWx0KCksbiYmbi52YWx1ZX1lbHNlIGkubGVuZ3RoJiYocS5zZXQodGhpcyxyLHt2YWx1ZTpiLmV2ZW50LnRyaWdnZXIoYi5leHRlbmQoaVswXSxiLkV2ZW50LnByb3RvdHlwZSksaS5zbGljZSgxKSx0aGlzKX0pLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfX0pKTp2b2lkIDA9PT1xLmdldChlLHIpJiZiLmV2ZW50LmFkZChlLHIsdmUpfWIuZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24odCxlLG4saSxyKXt2YXIgYSxzLG8sdSxkLGwsaCxjLF8sZj1xLmdldCh0KTtpZihHKHQpKWZvcihuLmhhbmRsZXImJihuPShhPW4pLmhhbmRsZXIscj1hLnNlbGVjdG9yKSxyJiZiLmZpbmQubWF0Y2hlc1NlbGVjdG9yKG5lLHIpLG4uZ3VpZHx8KG4uZ3VpZD1iLmd1aWQrKyksKG89Zi5ldmVudHMpfHwobz1mLmV2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpKSwocz1mLmhhbmRsZSl8fChzPWYuaGFuZGxlPWZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1iJiZiLmV2ZW50LnRyaWdnZXJlZCE9PWUudHlwZT9iLmV2ZW50LmRpc3BhdGNoLmFwcGx5KHQsYXJndW1lbnRzKTp2b2lkIDB9KSx1PShlPShlfHwiIikubWF0Y2goeCl8fFsiIl0pLmxlbmd0aDt1LS07KWg9Xz0oZD15ZS5leGVjKGVbdV0pfHxbXSlbMV0sYz0oZFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGgmJihsPWIuZXZlbnQuc3BlY2lhbFtoXXx8e30saD0ocj9sLmRlbGVnYXRlVHlwZTpsLmJpbmRUeXBlKXx8aCxsPWIuZXZlbnQuc3BlY2lhbFtoXXx8e30sZD1iLmV4dGVuZCh7dHlwZTpoLG9yaWdUeXBlOl8sZGF0YTppLGhhbmRsZXI6bixndWlkOm4uZ3VpZCxzZWxlY3RvcjpyLG5lZWRzQ29udGV4dDpyJiZiLmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QociksbmFtZXNwYWNlOmMuam9pbigiLiIpfSxhKSwoXz1vW2hdKXx8KChfPW9baF09W10pLmRlbGVnYXRlQ291bnQ9MCxsLnNldHVwJiYhMSE9PWwuc2V0dXAuY2FsbCh0LGksYyxzKXx8dC5hZGRFdmVudExpc3RlbmVyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoaCxzKSksbC5hZGQmJihsLmFkZC5jYWxsKHQsZCksZC5oYW5kbGVyLmd1aWR8fChkLmhhbmRsZXIuZ3VpZD1uLmd1aWQpKSxyP18uc3BsaWNlKF8uZGVsZWdhdGVDb3VudCsrLDAsZCk6Xy5wdXNoKGQpLGIuZXZlbnQuZ2xvYmFsW2hdPSEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGEscyxvLHUsZCxsLGgsYyxfLGYsbSxwPXEuaGFzRGF0YShlKSYmcS5nZXQoZSk7aWYocCYmKHU9cC5ldmVudHMpKXtmb3IoZD0odD0odHx8IiIpLm1hdGNoKHgpfHxbIiJdKS5sZW5ndGg7ZC0tOylpZihfPW09KG89eWUuZXhlYyh0W2RdKXx8W10pWzFdLGY9KG9bMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxfKXtmb3IoaD1iLmV2ZW50LnNwZWNpYWxbX118fHt9LGM9dVtfPShpP2guZGVsZWdhdGVUeXBlOmguYmluZFR5cGUpfHxfXXx8W10sbz1vWzJdJiZuZXcgUmVnRXhwKCIoXnxcXC4pIitmLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLHM9YT1jLmxlbmd0aDthLS07KWw9Y1thXSwhciYmbSE9PWwub3JpZ1R5cGV8fG4mJm4uZ3VpZCE9PWwuZ3VpZHx8byYmIW8udGVzdChsLm5hbWVzcGFjZSl8fGkmJmkhPT1sLnNlbGVjdG9yJiYoIioqIiE9PWl8fCFsLnNlbGVjdG9yKXx8KGMuc3BsaWNlKGEsMSksbC5zZWxlY3RvciYmYy5kZWxlZ2F0ZUNvdW50LS0saC5yZW1vdmUmJmgucmVtb3ZlLmNhbGwoZSxsKSk7cyYmIWMubGVuZ3RoJiYoaC50ZWFyZG93biYmITEhPT1oLnRlYXJkb3duLmNhbGwoZSxmLHAuaGFuZGxlKXx8Yi5yZW1vdmVFdmVudChlLF8scC5oYW5kbGUpLGRlbGV0ZSB1W19dKX1lbHNlIGZvcihfIGluIHUpYi5ldmVudC5yZW1vdmUoZSxfK3RbZF0sbixpLCEwKTtiLmlzRW1wdHlPYmplY3QodSkmJnEucmVtb3ZlKGUsImhhbmRsZSBldmVudHMiKX19LGRpc3BhdGNoOmZ1bmN0aW9uKGUpe3ZhciB0LG4saSxyLGEscz1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksbz1iLmV2ZW50LmZpeChlKSx1PShxLmdldCh0aGlzLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbby50eXBlXXx8W10sZT1iLmV2ZW50LnNwZWNpYWxbby50eXBlXXx8e307Zm9yKHNbMF09byx0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKylzW3RdPWFyZ3VtZW50c1t0XTtpZihvLmRlbGVnYXRlVGFyZ2V0PXRoaXMsIWUucHJlRGlzcGF0Y2h8fCExIT09ZS5wcmVEaXNwYXRjaC5jYWxsKHRoaXMsbykpe2ZvcihhPWIuZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLG8sdSksdD0wOyhpPWFbdCsrXSkmJiFvLmlzUHJvcGFnYXRpb25TdG9wcGVkKCk7KWZvcihvLmN1cnJlbnRUYXJnZXQ9aS5lbGVtLG49MDsocj1pLmhhbmRsZXJzW24rK10pJiYhby5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpOylvLnJuYW1lc3BhY2UmJiExIT09ci5uYW1lc3BhY2UmJiFvLnJuYW1lc3BhY2UudGVzdChyLm5hbWVzcGFjZSl8fChvLmhhbmRsZU9iaj1yLG8uZGF0YT1yLmRhdGEsdm9pZCAwIT09KHI9KChiLmV2ZW50LnNwZWNpYWxbci5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fHIuaGFuZGxlcikuYXBwbHkoaS5lbGVtLHMpKSYmITE9PT0oby5yZXN1bHQ9cikmJihvLnByZXZlbnREZWZhdWx0KCksby5zdG9wUHJvcGFnYXRpb24oKSkpO3JldHVybiBlLnBvc3REaXNwYXRjaCYmZS5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLG8pLG8ucmVzdWx0fX0saGFuZGxlcnM6ZnVuY3Rpb24oZSx0KXt2YXIgbixpLHIsYSxzLG89W10sdT10LmRlbGVnYXRlQ291bnQsZD1lLnRhcmdldDtpZih1JiZkLm5vZGVUeXBlJiYhKCJjbGljayI9PT1lLnR5cGUmJjE8PWUuYnV0dG9uKSlmb3IoO2QhPT10aGlzO2Q9ZC5wYXJlbnROb2RlfHx0aGlzKWlmKDE9PT1kLm5vZGVUeXBlJiYoImNsaWNrIiE9PWUudHlwZXx8ITAhPT1kLmRpc2FibGVkKSl7Zm9yKGE9W10scz17fSxuPTA7bjx1O24rKyl2b2lkIDA9PT1zW3I9KGk9dFtuXSkuc2VsZWN0b3IrIiAiXSYmKHNbcl09aS5uZWVkc0NvbnRleHQ/LTE8YihyLHRoaXMpLmluZGV4KGQpOmIuZmluZChyLHRoaXMsbnVsbCxbZF0pLmxlbmd0aCksc1tyXSYmYS5wdXNoKGkpO2EubGVuZ3RoJiZvLnB1c2goe2VsZW06ZCxoYW5kbGVyczphfSl9cmV0dXJuIGQ9dGhpcyx1PHQubGVuZ3RoJiZvLnB1c2goe2VsZW06ZCxoYW5kbGVyczp0LnNsaWNlKHUpfSksb30sYWRkUHJvcDpmdW5jdGlvbih0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLkV2ZW50LnByb3RvdHlwZSx0LHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6bShlKT9mdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gZSh0aGlzLm9yaWdpbmFsRXZlbnQpfTpmdW5jdGlvbigpe2lmKHRoaXMub3JpZ2luYWxFdmVudClyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50W3RdfSxzZXQ6ZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsdCx7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pfX0pfSxmaXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbYi5leHBhbmRvXT9lOm5ldyBiLkV2ZW50KGUpfSxzcGVjaWFsOntsb2FkOntub0J1YmJsZTohMH0sY2xpY2s6e3NldHVwOmZ1bmN0aW9uKGUpe2U9dGhpc3x8ZTtyZXR1cm4gZGUudGVzdChlLnR5cGUpJiZlLmNsaWNrJiZEKGUsImlucHV0IikmJlNlKGUsImNsaWNrIix2ZSksITF9LHRyaWdnZXI6ZnVuY3Rpb24oZSl7ZT10aGlzfHxlO3JldHVybiBkZS50ZXN0KGUudHlwZSkmJmUuY2xpY2smJkQoZSwiaW5wdXQiKSYmU2UoZSwiY2xpY2siKSwhMH0sX2RlZmF1bHQ6ZnVuY3Rpb24oZSl7ZT1lLnRhcmdldDtyZXR1cm4gZGUudGVzdChlLnR5cGUpJiZlLmNsaWNrJiZEKGUsImlucHV0IikmJnEuZ2V0KGUsImNsaWNrIil8fEQoZSwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5yZXN1bHQmJmUub3JpZ2luYWxFdmVudCYmKGUub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZT1lLnJlc3VsdCl9fX19LGIucmVtb3ZlRXZlbnQ9ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbil9LGIuRXZlbnQ9ZnVuY3Rpb24oZSx0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBiLkV2ZW50KSlyZXR1cm4gbmV3IGIuRXZlbnQoZSx0KTtlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHx2b2lkIDA9PT1lLmRlZmF1bHRQcmV2ZW50ZWQmJiExPT09ZS5yZXR1cm5WYWx1ZT92ZTpnZSx0aGlzLnRhcmdldD1lLnRhcmdldCYmMz09PWUudGFyZ2V0Lm5vZGVUeXBlP2UudGFyZ2V0LnBhcmVudE5vZGU6ZS50YXJnZXQsdGhpcy5jdXJyZW50VGFyZ2V0PWUuY3VycmVudFRhcmdldCx0aGlzLnJlbGF0ZWRUYXJnZXQ9ZS5yZWxhdGVkVGFyZ2V0KTp0aGlzLnR5cGU9ZSx0JiZiLmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHxEYXRlLm5vdygpLHRoaXNbYi5leHBhbmRvXT0hMH0sYi5FdmVudC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmIuRXZlbnQsaXNEZWZhdWx0UHJldmVudGVkOmdlLGlzUHJvcGFnYXRpb25TdG9wcGVkOmdlLGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmdlLGlzU2ltdWxhdGVkOiExLHByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O3RoaXMuaXNEZWZhdWx0UHJldmVudGVkPXZlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnByZXZlbnREZWZhdWx0KCl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXZlLGUmJiF0aGlzLmlzU2ltdWxhdGVkJiZlLnN0b3BQcm9wYWdhdGlvbigpfSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9yaWdpbmFsRXZlbnQ7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD12ZSxlJiYhdGhpcy5pc1NpbXVsYXRlZCYmZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSx0aGlzLnN0b3BQcm9wYWdhdGlvbigpfX0sYi5lYWNoKHthbHRLZXk6ITAsYnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNoYW5nZWRUb3VjaGVzOiEwLGN0cmxLZXk6ITAsZGV0YWlsOiEwLGV2ZW50UGhhc2U6ITAsbWV0YUtleTohMCxwYWdlWDohMCxwYWdlWTohMCxzaGlmdEtleTohMCx2aWV3OiEwLGNoYXI6ITAsY29kZTohMCxjaGFyQ29kZTohMCxrZXk6ITAsa2V5Q29kZTohMCxidXR0b246ITAsYnV0dG9uczohMCxjbGllbnRYOiEwLGNsaWVudFk6ITAsb2Zmc2V0WDohMCxvZmZzZXRZOiEwLHBvaW50ZXJJZDohMCxwb2ludGVyVHlwZTohMCxzY3JlZW5YOiEwLHNjcmVlblk6ITAsdGFyZ2V0VG91Y2hlczohMCx0b0VsZW1lbnQ6ITAsdG91Y2hlczohMCx3aGljaDohMH0sYi5ldmVudC5hZGRQcm9wKSxiLmVhY2goe2ZvY3VzOiJmb2N1c2luIixibHVyOiJmb2N1c291dCJ9LGZ1bmN0aW9uKGUsdCl7Yi5ldmVudC5zcGVjaWFsW2VdPXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiBTZSh0aGlzLGUsTWUpLCExfSx0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIFNlKHRoaXMsZSksITB9LF9kZWZhdWx0OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGRlbGVnYXRlVHlwZTp0fX0pLGIuZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCIscG9pbnRlcmVudGVyOiJwb2ludGVyb3ZlciIscG9pbnRlcmxlYXZlOiJwb2ludGVyb3V0In0sZnVuY3Rpb24oZSxyKXtiLmV2ZW50LnNwZWNpYWxbZV09e2RlbGVnYXRlVHlwZTpyLGJpbmRUeXBlOnIsaGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5yZWxhdGVkVGFyZ2V0LGk9ZS5oYW5kbGVPYmo7cmV0dXJuIG4mJihuPT09dGhpc3x8Yi5jb250YWlucyh0aGlzLG4pKXx8KGUudHlwZT1pLm9yaWdUeXBlLHQ9aS5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9ciksdH19fSksYi5mbi5leHRlbmQoe29uOmZ1bmN0aW9uKGUsdCxuLGkpe3JldHVybiBMZSh0aGlzLGUsdCxuLGkpfSxvbmU6ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIExlKHRoaXMsZSx0LG4saSwxKX0sb2ZmOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyO2lmKGUmJmUucHJldmVudERlZmF1bHQmJmUuaGFuZGxlT2JqKXJldHVybiBpPWUuaGFuZGxlT2JqLGIoZS5kZWxlZ2F0ZVRhcmdldCkub2ZmKGkubmFtZXNwYWNlP2kub3JpZ1R5cGUrIi4iK2kubmFtZXNwYWNlOmkub3JpZ1R5cGUsaS5zZWxlY3RvcixpLmhhbmRsZXIpLHRoaXM7aWYoIm9iamVjdCIhPXR5cGVvZiBlKXJldHVybiExIT09dCYmImZ1bmN0aW9uIiE9dHlwZW9mIHR8fChuPXQsdD12b2lkIDApLCExPT09biYmKG49Z2UpLHRoaXMuZWFjaChmdW5jdGlvbigpe2IuZXZlbnQucmVtb3ZlKHRoaXMsZSxuLHQpfSk7Zm9yKHIgaW4gZSl0aGlzLm9mZihyLHQsZVtyXSk7cmV0dXJuIHRoaXN9fSk7dmFyIGtlPS88c2NyaXB0fDxzdHlsZXw8bGluay9pLGJlPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLHdlPS9eXHMqPCEoPzpcW0NEQVRBXFt8LS0pfCg/OlxdXF18LS0pPlxzKiQvZztmdW5jdGlvbiBEZShlLHQpe3JldHVybiBEKGUsInRhYmxlIikmJkQoMTEhPT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpJiZiKGUpLmNoaWxkcmVuKCJ0Ym9keSIpWzBdfHxlfWZ1bmN0aW9uIFRlKGUpe3JldHVybiBlLnR5cGU9KG51bGwhPT1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKSsiLyIrZS50eXBlLGV9ZnVuY3Rpb24gRWUoZSl7cmV0dXJuInRydWUvIj09PShlLnR5cGV8fCIiKS5zbGljZSgwLDUpP2UudHlwZT1lLnR5cGUuc2xpY2UoNSk6ZS5yZW1vdmVBdHRyaWJ1dGUoInR5cGUiKSxlfWZ1bmN0aW9uIFllKGUsdCl7dmFyIG4saSxyLGE7aWYoMT09PXQubm9kZVR5cGUpe2lmKHEuaGFzRGF0YShlKSYmKGE9cS5nZXQoZSkuZXZlbnRzKSlmb3IociBpbiBxLnJlbW92ZSh0LCJoYW5kbGUgZXZlbnRzIiksYSlmb3Iobj0wLGk9YVtyXS5sZW5ndGg7bjxpO24rKyliLmV2ZW50LmFkZCh0LHIsYVtyXVtuXSk7Sy5oYXNEYXRhKGUpJiYoZT1LLmFjY2VzcyhlKSxlPWIuZXh0ZW5kKHt9LGUpLEsuc2V0KHQsZSkpfX1mdW5jdGlvbiBQZShuLGkscixhKXtpPXkoaSk7dmFyIGUsdCxzLG8sdSxkLGw9MCxoPW4ubGVuZ3RoLGM9aC0xLF89aVswXSxmPW0oXyk7aWYoZnx8MTxoJiYic3RyaW5nIj09dHlwZW9mIF8mJiFnLmNoZWNrQ2xvbmUmJmJlLnRlc3QoXykpcmV0dXJuIG4uZWFjaChmdW5jdGlvbihlKXt2YXIgdD1uLmVxKGUpO2YmJihpWzBdPV8uY2FsbCh0aGlzLGUsdC5odG1sKCkpKSxQZSh0LGkscixhKX0pO2lmKGgmJih0PShlPXBlKGksblswXS5vd25lckRvY3VtZW50LCExLG4sYSkpLmZpcnN0Q2hpbGQsMT09PWUuY2hpbGROb2Rlcy5sZW5ndGgmJihlPXQpLHR8fGEpKXtmb3Iobz0ocz1iLm1hcChfZShlLCJzY3JpcHQiKSxUZSkpLmxlbmd0aDtsPGg7bCsrKXU9ZSxsIT09YyYmKHU9Yi5jbG9uZSh1LCEwLCEwKSxvJiZiLm1lcmdlKHMsX2UodSwic2NyaXB0IikpKSxyLmNhbGwobltsXSx1LGwpO2lmKG8pZm9yKGQ9c1tzLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LGIubWFwKHMsRWUpLGw9MDtsPG87bCsrKXU9c1tsXSxoZS50ZXN0KHUudHlwZXx8IiIpJiYhcS5hY2Nlc3ModSwiZ2xvYmFsRXZhbCIpJiZiLmNvbnRhaW5zKGQsdSkmJih1LnNyYyYmIm1vZHVsZSIhPT0odS50eXBlfHwiIikudG9Mb3dlckNhc2UoKT9iLl9ldmFsVXJsJiYhdS5ub01vZHVsZSYmYi5fZXZhbFVybCh1LnNyYyx7bm9uY2U6dS5ub25jZXx8dS5nZXRBdHRyaWJ1dGUoIm5vbmNlIil9LGQpOk0odS50ZXh0Q29udGVudC5yZXBsYWNlKHdlLCIiKSx1LGQpKX1yZXR1cm4gbn1mdW5jdGlvbiBDZShlLHQsbil7Zm9yKHZhciBpLHI9dD9iLmZpbHRlcih0LGUpOmUsYT0wO251bGwhPShpPXJbYV0pO2ErKylufHwxIT09aS5ub2RlVHlwZXx8Yi5jbGVhbkRhdGEoX2UoaSkpLGkucGFyZW50Tm9kZSYmKG4mJmllKGkpJiZmZShfZShpLCJzY3JpcHQiKSksaS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGkpKTtyZXR1cm4gZX1iLmV4dGVuZCh7aHRtbFByZWZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sY2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHIsYSxzLG8sdSxkLGw9ZS5jbG9uZU5vZGUoITApLGg9aWUoZSk7aWYoIShnLm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHxiLmlzWE1MRG9jKGUpKSlmb3Iocz1fZShsKSxpPTAscj0oYT1fZShlKSkubGVuZ3RoO2k8cjtpKyspbz1hW2ldLHU9c1tpXSxkPXZvaWQgMCwiaW5wdXQiPT09KGQ9dS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSYmZGUudGVzdChvLnR5cGUpP3UuY2hlY2tlZD1vLmNoZWNrZWQ6ImlucHV0IiE9PWQmJiJ0ZXh0YXJlYSIhPT1kfHwodS5kZWZhdWx0VmFsdWU9by5kZWZhdWx0VmFsdWUpO2lmKHQpaWYobilmb3IoYT1hfHxfZShlKSxzPXN8fF9lKGwpLGk9MCxyPWEubGVuZ3RoO2k8cjtpKyspWWUoYVtpXSxzW2ldKTtlbHNlIFllKGUsbCk7cmV0dXJuIDA8KHM9X2UobCwic2NyaXB0IikpLmxlbmd0aCYmZmUocywhaCYmX2UoZSwic2NyaXB0IikpLGx9LGNsZWFuRGF0YTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixpLHI9Yi5ldmVudC5zcGVjaWFsLGE9MDt2b2lkIDAhPT0obj1lW2FdKTthKyspaWYoRyhuKSl7aWYodD1uW3EuZXhwYW5kb10pe2lmKHQuZXZlbnRzKWZvcihpIGluIHQuZXZlbnRzKXJbaV0/Yi5ldmVudC5yZW1vdmUobixpKTpiLnJlbW92ZUV2ZW50KG4saSx0LmhhbmRsZSk7bltxLmV4cGFuZG9dPXZvaWQgMH1uW0suZXhwYW5kb10mJihuW0suZXhwYW5kb109dm9pZCAwKX19fSksYi5mbi5leHRlbmQoe2RldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gQ2UodGhpcyxlLCEwKX0scmVtb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiBDZSh0aGlzLGUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBCKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWU/Yi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5lYWNoKGZ1bmN0aW9uKCl7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0aGlzLnRleHRDb250ZW50PWUpfSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0sYXBwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpezEhPT10aGlzLm5vZGVUeXBlJiYxMSE9PXRoaXMubm9kZVR5cGUmJjkhPT10aGlzLm5vZGVUeXBlfHxEZSh0aGlzLGUpLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ7MSE9PXRoaXMubm9kZVR5cGUmJjExIT09dGhpcy5ub2RlVHlwZSYmOSE9PXRoaXMubm9kZVR5cGV8fCh0PURlKHRoaXMsZSkpLmluc2VydEJlZm9yZShlLHQuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIFBlKHRoaXMsYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LGVtcHR5OmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9MDtudWxsIT0oZT10aGlzW3RdKTt0KyspMT09PWUubm9kZVR5cGUmJihiLmNsZWFuRGF0YShfZShlLCExKSksZS50ZXh0Q29udGVudD0iIik7cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbCE9ZSYmZSx0PW51bGw9PXQ/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGIuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIEIodGhpcyxmdW5jdGlvbihlKXt2YXIgdD10aGlzWzBdfHx7fSxuPTAsaT10aGlzLmxlbmd0aDtpZih2b2lkIDA9PT1lJiYxPT09dC5ub2RlVHlwZSlyZXR1cm4gdC5pbm5lckhUTUw7aWYoInN0cmluZyI9PXR5cGVvZiBlJiYha2UudGVzdChlKSYmIWNlWyhsZS5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1iLmh0bWxQcmVmaWx0ZXIoZSk7dHJ5e2Zvcig7bjxpO24rKykxPT09KHQ9dGhpc1tuXXx8e30pLm5vZGVUeXBlJiYoYi5jbGVhbkRhdGEoX2UodCwhMSkpLHQuaW5uZXJIVE1MPWUpO3Q9MH1jYXRjaChlKXt9fXQmJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgbj1bXTtyZXR1cm4gUGUodGhpcyxhcmd1bWVudHMsZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wYXJlbnROb2RlO2IuaW5BcnJheSh0aGlzLG4pPDAmJihiLmNsZWFuRGF0YShfZSh0aGlzKSksdCYmdC5yZXBsYWNlQ2hpbGQoZSx0aGlzKSl9LG4pfX0pLGIuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGUscyl7Yi5mbltlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj1bXSxpPWIoZSkscj1pLmxlbmd0aC0xLGE9MDthPD1yO2ErKyl0PWE9PT1yP3RoaXM6dGhpcy5jbG9uZSghMCksYihpW2FdKVtzXSh0KSx1LmFwcGx5KG4sdC5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKG4pfX0pO2Z1bmN0aW9uIFJlKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztyZXR1cm4odD0hdHx8IXQub3BlbmVyP1M6dCkuZ2V0Q29tcHV0ZWRTdHlsZShlKX1mdW5jdGlvbiBBZShlLHQsbil7dmFyIGkscj17fTtmb3IoaSBpbiB0KXJbaV09ZS5zdHlsZVtpXSxlLnN0eWxlW2ldPXRbaV07Zm9yKGkgaW4gbj1uLmNhbGwoZSksdCllLnN0eWxlW2ldPXJbaV07cmV0dXJuIG59dmFyIHhlLE9lLEllLFdlLEhlLGplLEZlLEJlLFVlPW5ldyBSZWdFeHAoIl4oIitRKyIpKD8hcHgpW2EteiVdKyQiLCJpIiksTmU9bmV3IFJlZ0V4cCh0ZS5qb2luKCJ8IiksImkiKTtmdW5jdGlvbiB6ZSgpe3ZhciBlO0JlJiYoRmUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O21hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MCIsQmUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO21hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7d2lkdGg6NjAlO3RvcDoxJSIsbmUuYXBwZW5kQ2hpbGQoRmUpLmFwcGVuZENoaWxkKEJlKSxlPVMuZ2V0Q29tcHV0ZWRTdHlsZShCZSkseGU9IjElIiE9PWUudG9wLGplPTEyPT09VmUoZS5tYXJnaW5MZWZ0KSxCZS5zdHlsZS5yaWdodD0iNjAlIixXZT0zNj09PVZlKGUucmlnaHQpLE9lPTM2PT09VmUoZS53aWR0aCksQmUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixJZT0xMj09PVZlKEJlLm9mZnNldFdpZHRoLzMpLG5lLnJlbW92ZUNoaWxkKEZlKSxCZT1udWxsKX1mdW5jdGlvbiBWZShlKXtyZXR1cm4gTWF0aC5yb3VuZChwYXJzZUZsb2F0KGUpKX1mdW5jdGlvbiBHZShlLHQsbil7dmFyIGkscixhPWUuc3R5bGU7cmV0dXJuKG49bnx8UmUoZSkpJiYoIiIhPT0ocj1uLmdldFByb3BlcnR5VmFsdWUodCl8fG5bdF0pfHxpZShlKXx8KHI9Yi5zdHlsZShlLHQpKSwhZy5waXhlbEJveFN0eWxlcygpJiZVZS50ZXN0KHIpJiZOZS50ZXN0KHQpJiYoaT1hLndpZHRoLGU9YS5taW5XaWR0aCx0PWEubWF4V2lkdGgsYS5taW5XaWR0aD1hLm1heFdpZHRoPWEud2lkdGg9cixyPW4ud2lkdGgsYS53aWR0aD1pLGEubWluV2lkdGg9ZSxhLm1heFdpZHRoPXQpKSx2b2lkIDAhPT1yP3IrIiI6cn1mdW5jdGlvbiBKZShlLHQpe3JldHVybntnZXQ6ZnVuY3Rpb24oKXtpZighZSgpKXJldHVybih0aGlzLmdldD10KS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIHRoaXMuZ2V0fX19RmU9ay5jcmVhdGVFbGVtZW50KCJkaXYiKSwoQmU9ay5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc3R5bGUmJihCZS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcD0iY29udGVudC1ib3giLEJlLmNsb25lTm9kZSghMCkuc3R5bGUuYmFja2dyb3VuZENsaXA9IiIsZy5jbGVhckNsb25lU3R5bGU9ImNvbnRlbnQtYm94Ij09PUJlLnN0eWxlLmJhY2tncm91bmRDbGlwLGIuZXh0ZW5kKGcse2JveFNpemluZ1JlbGlhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHplKCksT2V9LHBpeGVsQm94U3R5bGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHplKCksV2V9LHBpeGVsUG9zaXRpb246ZnVuY3Rpb24oKXtyZXR1cm4gemUoKSx4ZX0scmVsaWFibGVNYXJnaW5MZWZ0OmZ1bmN0aW9uKCl7cmV0dXJuIHplKCksamV9LHNjcm9sbGJveFNpemU6ZnVuY3Rpb24oKXtyZXR1cm4gemUoKSxJZX0scmVsaWFibGVUckRpbWVuc2lvbnM6ZnVuY3Rpb24oKXt2YXIgZSx0LG47cmV0dXJuIG51bGw9PUhlJiYoZT1rLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdD1rLmNyZWF0ZUVsZW1lbnQoInRyIiksbj1rLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGUuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGUiLHQuc3R5bGUuY3NzVGV4dD0iYm9yZGVyOjFweCBzb2xpZCIsdC5zdHlsZS5oZWlnaHQ9IjFweCIsbi5zdHlsZS5oZWlnaHQ9IjlweCIsbi5zdHlsZS5kaXNwbGF5PSJibG9jayIsbmUuYXBwZW5kQ2hpbGQoZSkuYXBwZW5kQ2hpbGQodCkuYXBwZW5kQ2hpbGQobiksbj1TLmdldENvbXB1dGVkU3R5bGUodCksSGU9cGFyc2VJbnQobi5oZWlnaHQsMTApK3BhcnNlSW50KG4uYm9yZGVyVG9wV2lkdGgsMTApK3BhcnNlSW50KG4uYm9yZGVyQm90dG9tV2lkdGgsMTApPT09dC5vZmZzZXRIZWlnaHQsbmUucmVtb3ZlQ2hpbGQoZSkpLEhlfX0pKTt2YXIgcWU9WyJXZWJraXQiLCJNb3oiLCJtcyJdLEtlPWsuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsWGU9e307ZnVuY3Rpb24gWmUoZSl7dmFyIHQ9Yi5jc3NQcm9wc1tlXXx8WGVbZV07cmV0dXJuIHR8fChlIGluIEtlP2U6WGVbZV09ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpLG49cWUubGVuZ3RoO24tLTspaWYoKGU9cWVbbl0rdClpbiBLZSlyZXR1cm4gZX0oZSl8fGUpfXZhciAkZT0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sUWU9L14tLS8sZXQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LHR0PXtsZXR0ZXJTcGFjaW5nOiIwIixmb250V2VpZ2h0OiI0MDAifTtmdW5jdGlvbiBudChlLHQsbil7dmFyIGk9ZWUuZXhlYyh0KTtyZXR1cm4gaT9NYXRoLm1heCgwLGlbMl0tKG58fDApKSsoaVszXXx8InB4Iik6dH1mdW5jdGlvbiBpdChlLHQsbixpLHIsYSl7dmFyIHM9IndpZHRoIj09PXQ/MTowLG89MCx1PTA7aWYobj09PShpPyJib3JkZXIiOiJjb250ZW50IikpcmV0dXJuIDA7Zm9yKDtzPDQ7cys9MikibWFyZ2luIj09PW4mJih1Kz1iLmNzcyhlLG4rdGVbc10sITAscikpLGk/KCJjb250ZW50Ij09PW4mJih1LT1iLmNzcyhlLCJwYWRkaW5nIit0ZVtzXSwhMCxyKSksIm1hcmdpbiIhPT1uJiYodS09Yi5jc3MoZSwiYm9yZGVyIit0ZVtzXSsiV2lkdGgiLCEwLHIpKSk6KHUrPWIuY3NzKGUsInBhZGRpbmciK3RlW3NdLCEwLHIpLCJwYWRkaW5nIiE9PW4/dSs9Yi5jc3MoZSwiYm9yZGVyIit0ZVtzXSsiV2lkdGgiLCEwLHIpOm8rPWIuY3NzKGUsImJvcmRlciIrdGVbc10rIldpZHRoIiwhMCxyKSk7cmV0dXJuIWkmJjA8PWEmJih1Kz1NYXRoLm1heCgwLE1hdGguY2VpbChlWyJvZmZzZXQiK3RbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpXS1hLXUtby0uNSkpfHwwKSx1fWZ1bmN0aW9uIHJ0KGUsdCxuKXt2YXIgaT1SZShlKSxyPSghZy5ib3hTaXppbmdSZWxpYWJsZSgpfHxuKSYmImJvcmRlci1ib3giPT09Yi5jc3MoZSwiYm94U2l6aW5nIiwhMSxpKSxhPXIscz1HZShlLHQsaSksbz0ib2Zmc2V0Iit0WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtpZihVZS50ZXN0KHMpKXtpZighbilyZXR1cm4gcztzPSJhdXRvIn1yZXR1cm4oIWcuYm94U2l6aW5nUmVsaWFibGUoKSYmcnx8IWcucmVsaWFibGVUckRpbWVuc2lvbnMoKSYmRChlLCJ0ciIpfHwiYXV0byI9PT1zfHwhcGFyc2VGbG9hdChzKSYmImlubGluZSI9PT1iLmNzcyhlLCJkaXNwbGF5IiwhMSxpKSkmJmUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJihyPSJib3JkZXItYm94Ij09PWIuY3NzKGUsImJveFNpemluZyIsITEsaSksKGE9byBpbiBlKSYmKHM9ZVtvXSkpLChzPXBhcnNlRmxvYXQocyl8fDApK2l0KGUsdCxufHwocj8iYm9yZGVyIjoiY29udGVudCIpLGEsaSxzKSsicHgifWZ1bmN0aW9uIGF0KGUsdCxuLGkscil7cmV0dXJuIG5ldyBhdC5wcm90b3R5cGUuaW5pdChlLHQsbixpLHIpfWIuZXh0ZW5kKHtjc3NIb29rczp7b3BhY2l0eTp7Z2V0OmZ1bmN0aW9uKGUsdCl7aWYodCl7ZT1HZShlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1lPyIxIjplfX19fSxjc3NOdW1iZXI6e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGNvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZsZXhHcm93OiEwLGZsZXhTaHJpbms6ITAsZm9udFdlaWdodDohMCxncmlkQXJlYTohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3RhcnQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7fSxzdHlsZTpmdW5jdGlvbihlLHQsbixpKXtpZihlJiYzIT09ZS5ub2RlVHlwZSYmOCE9PWUubm9kZVR5cGUmJmUuc3R5bGUpe3ZhciByLGEscyxvPVYodCksdT1RZS50ZXN0KHQpLGQ9ZS5zdHlsZTtpZih1fHwodD1aZShvKSkscz1iLmNzc0hvb2tzW3RdfHxiLmNzc0hvb2tzW29dLHZvaWQgMD09PW4pcmV0dXJuIHMmJiJnZXQiaW4gcyYmdm9pZCAwIT09KHI9cy5nZXQoZSwhMSxpKSk/cjpkW3RdOyJzdHJpbmciPT09KGE9dHlwZW9mIG4pJiYocj1lZS5leGVjKG4pKSYmclsxXSYmKG49c2UoZSx0LHIpLGE9Im51bWJlciIpLG51bGwhPW4mJm49PW4mJigibnVtYmVyIiE9PWF8fHV8fChuKz1yJiZyWzNdfHwoYi5jc3NOdW1iZXJbb10/IiI6InB4IikpLGcuY2xlYXJDbG9uZVN0eWxlfHwiIiE9PW58fDAhPT10LmluZGV4T2YoImJhY2tncm91bmQiKXx8KGRbdF09ImluaGVyaXQiKSxzJiYic2V0ImluIHMmJnZvaWQgMD09PShuPXMuc2V0KGUsbixpKSl8fCh1P2Quc2V0UHJvcGVydHkodCxuKTpkW3RdPW4pKX19LGNzczpmdW5jdGlvbihlLHQsbixpKXt2YXIgcixhPVYodCk7cmV0dXJuIFFlLnRlc3QodCl8fCh0PVplKGEpKSwibm9ybWFsIj09PShyPXZvaWQgMD09PShyPShhPWIuY3NzSG9va3NbdF18fGIuY3NzSG9va3NbYV0pJiYiZ2V0ImluIGE/YS5nZXQoZSwhMCxuKTpyKT9HZShlLHQsaSk6cikmJnQgaW4gdHQmJihyPXR0W3RdKSwiIj09PW58fG4/KHQ9cGFyc2VGbG9hdChyKSwhMD09PW58fGlzRmluaXRlKHQpP3R8fDA6cik6cn19KSxiLmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsbyl7Yi5jc3NIb29rc1tvXT17Z2V0OmZ1bmN0aW9uKGUsdCxuKXtpZih0KXJldHVybiEkZS50ZXN0KGIuY3NzKGUsImRpc3BsYXkiKSl8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgmJmUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg/cnQoZSxvLG4pOkFlKGUsZXQsZnVuY3Rpb24oKXtyZXR1cm4gcnQoZSxvLG4pfSl9LHNldDpmdW5jdGlvbihlLHQsbil7dmFyIGkscj1SZShlKSxhPSFnLnNjcm9sbGJveFNpemUoKSYmImFic29sdXRlIj09PXIucG9zaXRpb24scz0oYXx8bikmJiJib3JkZXItYm94Ij09PWIuY3NzKGUsImJveFNpemluZyIsITEsciksbj1uP2l0KGUsbyxuLHMscik6MDtyZXR1cm4gcyYmYSYmKG4tPU1hdGguY2VpbChlWyJvZmZzZXQiK29bMF0udG9VcHBlckNhc2UoKStvLnNsaWNlKDEpXS1wYXJzZUZsb2F0KHJbb10pLWl0KGUsbywiYm9yZGVyIiwhMSxyKS0uNSkpLG4mJihpPWVlLmV4ZWModCkpJiYicHgiIT09KGlbM118fCJweCIpJiYoZS5zdHlsZVtvXT10LHQ9Yi5jc3MoZSxvKSksbnQoMCx0LG4pfX19KSxiLmNzc0hvb2tzLm1hcmdpbkxlZnQ9SmUoZy5yZWxpYWJsZU1hcmdpbkxlZnQsZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybihwYXJzZUZsb2F0KEdlKGUsIm1hcmdpbkxlZnQiKSl8fGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdC1BZShlLHttYXJnaW5MZWZ0OjB9LGZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdH0pKSsicHgifSksYi5lYWNoKHttYXJnaW46IiIscGFkZGluZzoiIixib3JkZXI6IldpZHRoIn0sZnVuY3Rpb24ocixhKXtiLmNzc0hvb2tzW3IrYV09e2V4cGFuZDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxuPXt9LGk9InN0cmluZyI9PXR5cGVvZiBlP2Uuc3BsaXQoIiAiKTpbZV07dDw0O3QrKyluW3IrdGVbdF0rYV09aVt0XXx8aVt0LTJdfHxpWzBdO3JldHVybiBufX0sIm1hcmdpbiIhPT1yJiYoYi5jc3NIb29rc1tyK2FdLnNldD1udCl9KSxiLmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIGkscixhPXt9LHM9MDtpZihBcnJheS5pc0FycmF5KHQpKXtmb3IoaT1SZShlKSxyPXQubGVuZ3RoO3M8cjtzKyspYVt0W3NdXT1iLmNzcyhlLHRbc10sITEsaSk7cmV0dXJuIGF9cmV0dXJuIHZvaWQgMCE9PW4/Yi5zdHlsZShlLHQsbik6Yi5jc3MoZSx0KX0sZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9fSksKChiLlR3ZWVuPWF0KS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmF0LGluaXQ6ZnVuY3Rpb24oZSx0LG4saSxyLGEpe3RoaXMuZWxlbT1lLHRoaXMucHJvcD1uLHRoaXMuZWFzaW5nPXJ8fGIuZWFzaW5nLl9kZWZhdWx0LHRoaXMub3B0aW9ucz10LHRoaXMuc3RhcnQ9dGhpcy5ub3c9dGhpcy5jdXIoKSx0aGlzLmVuZD1pLHRoaXMudW5pdD1hfHwoYi5jc3NOdW1iZXJbbl0/IiI6InB4Iil9LGN1cjpmdW5jdGlvbigpe3ZhciBlPWF0LnByb3BIb29rc1t0aGlzLnByb3BdO3JldHVybihlJiZlLmdldD9lOmF0LnByb3BIb29rcy5fZGVmYXVsdCkuZ2V0KHRoaXMpfSxydW46ZnVuY3Rpb24oZSl7dmFyIHQsbj1hdC5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gdGhpcy5vcHRpb25zLmR1cmF0aW9uP3RoaXMucG9zPXQ9Yi5lYXNpbmdbdGhpcy5lYXNpbmddKGUsdGhpcy5vcHRpb25zLmR1cmF0aW9uKmUsMCwxLHRoaXMub3B0aW9ucy5kdXJhdGlvbik6dGhpcy5wb3M9dD1lLHRoaXMubm93PSh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0K3RoaXMuc3RhcnQsdGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChuJiZuLnNldD9uOmF0LnByb3BIb29rcy5fZGVmYXVsdCkuc2V0KHRoaXMpLHRoaXN9fSkuaW5pdC5wcm90b3R5cGU9YXQucHJvdG90eXBlLChhdC5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIDEhPT1lLmVsZW0ubm9kZVR5cGV8fG51bGwhPWUuZWxlbVtlLnByb3BdJiZudWxsPT1lLmVsZW0uc3R5bGVbZS5wcm9wXT9lLmVsZW1bZS5wcm9wXTooZT1iLmNzcyhlLmVsZW0sZS5wcm9wLCIiKSkmJiJhdXRvIiE9PWU/ZTowfSxzZXQ6ZnVuY3Rpb24oZSl7Yi5meC5zdGVwW2UucHJvcF0/Yi5meC5zdGVwW2UucHJvcF0oZSk6MSE9PWUuZWxlbS5ub2RlVHlwZXx8IWIuY3NzSG9va3NbZS5wcm9wXSYmbnVsbD09ZS5lbGVtLnN0eWxlW1plKGUucHJvcCldP2UuZWxlbVtlLnByb3BdPWUubm93OmIuc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpfX19KS5zY3JvbGxUb3A9YXQucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0sYi5lYXNpbmc9e2xpbmVhcjpmdW5jdGlvbihlKXtyZXR1cm4gZX0sc3dpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuLjUtTWF0aC5jb3MoZSpNYXRoLlBJKS8yfSxfZGVmYXVsdDoic3dpbmcifSxiLmZ4PWF0LnByb3RvdHlwZS5pbml0LGIuZnguc3RlcD17fTt2YXIgc3Qsb3QsdXQ9L14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLGR0PS9xdWV1ZUhvb2tzJC87ZnVuY3Rpb24gbHQoKXtvdCYmKCExPT09ay5oaWRkZW4mJlMucmVxdWVzdEFuaW1hdGlvbkZyYW1lP1MucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGx0KTpTLnNldFRpbWVvdXQobHQsYi5meC5pbnRlcnZhbCksYi5meC50aWNrKCkpfWZ1bmN0aW9uIGh0KCl7cmV0dXJuIFMuc2V0VGltZW91dChmdW5jdGlvbigpe3N0PXZvaWQgMH0pLHN0PURhdGUubm93KCl9ZnVuY3Rpb24gY3QoZSx0KXt2YXIgbixpPTAscj17aGVpZ2h0OmV9O2Zvcih0PXQ/MTowO2k8NDtpKz0yLXQpclsibWFyZ2luIisobj10ZVtpXSldPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfWZ1bmN0aW9uIF90KGUsdCxuKXtmb3IodmFyIGkscj0oZnQudHdlZW5lcnNbdF18fFtdKS5jb25jYXQoZnQudHdlZW5lcnNbIioiXSksYT0wLHM9ci5sZW5ndGg7YTxzO2ErKylpZihpPXJbYV0uY2FsbChuLHQsZSkpcmV0dXJuIGl9ZnVuY3Rpb24gZnQocixlLHQpe3ZhciBuLGEsaT0wLHM9ZnQucHJlZmlsdGVycy5sZW5ndGgsbz1iLkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIHUuZWxlbX0pLHU9ZnVuY3Rpb24oKXtpZihhKXJldHVybiExO2Zvcih2YXIgZT1zdHx8aHQoKSxlPU1hdGgubWF4KDAsZC5zdGFydFRpbWUrZC5kdXJhdGlvbi1lKSx0PTEtKGUvZC5kdXJhdGlvbnx8MCksbj0wLGk9ZC50d2VlbnMubGVuZ3RoO248aTtuKyspZC50d2VlbnNbbl0ucnVuKHQpO3JldHVybiBvLm5vdGlmeVdpdGgocixbZCx0LGVdKSx0PDEmJmk/ZTooaXx8by5ub3RpZnlXaXRoKHIsW2QsMSwwXSksby5yZXNvbHZlV2l0aChyLFtkXSksITEpfSxkPW8ucHJvbWlzZSh7ZWxlbTpyLHByb3BzOmIuZXh0ZW5kKHt9LGUpLG9wdHM6Yi5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e30sZWFzaW5nOmIuZWFzaW5nLl9kZWZhdWx0fSx0KSxvcmlnaW5hbFByb3BlcnRpZXM6ZSxvcmlnaW5hbE9wdGlvbnM6dCxzdGFydFRpbWU6c3R8fGh0KCksZHVyYXRpb246dC5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24oZSx0KXtlPWIuVHdlZW4ocixkLm9wdHMsZSx0LGQub3B0cy5zcGVjaWFsRWFzaW5nW2VdfHxkLm9wdHMuZWFzaW5nKTtyZXR1cm4gZC50d2VlbnMucHVzaChlKSxlfSxzdG9wOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1lP2QudHdlZW5zLmxlbmd0aDowO2lmKGEpcmV0dXJuIHRoaXM7Zm9yKGE9ITA7dDxuO3QrKylkLnR3ZWVuc1t0XS5ydW4oMSk7cmV0dXJuIGU/KG8ubm90aWZ5V2l0aChyLFtkLDEsMF0pLG8ucmVzb2x2ZVdpdGgocixbZCxlXSkpOm8ucmVqZWN0V2l0aChyLFtkLGVdKSx0aGlzfX0pLGw9ZC5wcm9wcztmb3IoIWZ1bmN0aW9uKGUsdCl7dmFyIG4saSxyLGEscztmb3IobiBpbiBlKWlmKHI9dFtpPVYobildLGE9ZVtuXSxBcnJheS5pc0FycmF5KGEpJiYocj1hWzFdLGE9ZVtuXT1hWzBdKSxuIT09aSYmKGVbaV09YSxkZWxldGUgZVtuXSksKHM9Yi5jc3NIb29rc1tpXSkmJiJleHBhbmQiaW4gcylmb3IobiBpbiBhPXMuZXhwYW5kKGEpLGRlbGV0ZSBlW2ldLGEpbiBpbiBlfHwoZVtuXT1hW25dLHRbbl09cik7ZWxzZSB0W2ldPXJ9KGwsZC5vcHRzLnNwZWNpYWxFYXNpbmcpO2k8cztpKyspaWYobj1mdC5wcmVmaWx0ZXJzW2ldLmNhbGwoZCxyLGwsZC5vcHRzKSlyZXR1cm4gbShuLnN0b3ApJiYoYi5fcXVldWVIb29rcyhkLmVsZW0sZC5vcHRzLnF1ZXVlKS5zdG9wPW4uc3RvcC5iaW5kKG4pKSxuO3JldHVybiBiLm1hcChsLF90LGQpLG0oZC5vcHRzLnN0YXJ0KSYmZC5vcHRzLnN0YXJ0LmNhbGwocixkKSxkLnByb2dyZXNzKGQub3B0cy5wcm9ncmVzcykuZG9uZShkLm9wdHMuZG9uZSxkLm9wdHMuY29tcGxldGUpLmZhaWwoZC5vcHRzLmZhaWwpLmFsd2F5cyhkLm9wdHMuYWx3YXlzKSxiLmZ4LnRpbWVyKGIuZXh0ZW5kKHUse2VsZW06cixhbmltOmQscXVldWU6ZC5vcHRzLnF1ZXVlfSkpLGR9Yi5BbmltYXRpb249Yi5leHRlbmQoZnQse3R3ZWVuZXJzOnsiKiI6W2Z1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5jcmVhdGVUd2VlbihlLHQpO3JldHVybiBzZShuLmVsZW0sZSxlZS5leGVjKHQpLG4pLG59XX0sdHdlZW5lcjpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixpPTAscj0oZT1tKGUpPyh0PWUsWyIqIl0pOmUubWF0Y2goeCkpLmxlbmd0aDtpPHI7aSsrKW49ZVtpXSxmdC50d2VlbmVyc1tuXT1mdC50d2VlbmVyc1tuXXx8W10sZnQudHdlZW5lcnNbbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyczpbZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHIsYSxzLG8sdSxkLGw9IndpZHRoImluIHR8fCJoZWlnaHQiaW4gdCxoPXRoaXMsYz17fSxfPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZhZShlKSxtPXEuZ2V0KGUsImZ4c2hvdyIpO2ZvcihpIGluIG4ucXVldWV8fChudWxsPT0ocz1iLl9xdWV1ZUhvb2tzKGUsImZ4IikpLnVucXVldWVkJiYocy51bnF1ZXVlZD0wLG89cy5lbXB0eS5maXJlLHMuZW1wdHkuZmlyZT1mdW5jdGlvbigpe3MudW5xdWV1ZWR8fG8oKX0pLHMudW5xdWV1ZWQrKyxoLmFsd2F5cyhmdW5jdGlvbigpe2guYWx3YXlzKGZ1bmN0aW9uKCl7cy51bnF1ZXVlZC0tLGIucXVldWUoZSwiZngiKS5sZW5ndGh8fHMuZW1wdHkuZmlyZSgpfSl9KSksdClpZihyPXRbaV0sdXQudGVzdChyKSl7aWYoZGVsZXRlIHRbaV0sYT1hfHwidG9nZ2xlIj09PXIscj09PShmPyJoaWRlIjoic2hvdyIpKXtpZigic2hvdyIhPT1yfHwhbXx8dm9pZCAwPT09bVtpXSljb250aW51ZTtmPSEwfWNbaV09bSYmbVtpXXx8Yi5zdHlsZShlLGkpfWlmKCh1PSFiLmlzRW1wdHlPYmplY3QodCkpfHwhYi5pc0VtcHR5T2JqZWN0KGMpKWZvcihpIGluIGwmJjE9PT1lLm5vZGVUeXBlJiYobi5vdmVyZmxvdz1bXy5vdmVyZmxvdyxfLm92ZXJmbG93WCxfLm92ZXJmbG93WV0sbnVsbD09KGQ9bSYmbS5kaXNwbGF5KSYmKGQ9cS5nZXQoZSwiZGlzcGxheSIpKSwibm9uZSI9PT0obD1iLmNzcyhlLCJkaXNwbGF5IikpJiYoZD9sPWQ6KHVlKFtlXSwhMCksZD1lLnN0eWxlLmRpc3BsYXl8fGQsbD1iLmNzcyhlLCJkaXNwbGF5IiksdWUoW2VdKSkpLCgiaW5saW5lIj09PWx8fCJpbmxpbmUtYmxvY2siPT09bCYmbnVsbCE9ZCkmJiJub25lIj09PWIuY3NzKGUsImZsb2F0IikmJih1fHwoaC5kb25lKGZ1bmN0aW9uKCl7Xy5kaXNwbGF5PWR9KSxudWxsPT1kJiYobD1fLmRpc3BsYXksZD0ibm9uZSI9PT1sPyIiOmwpKSxfLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYoXy5vdmVyZmxvdz0iaGlkZGVuIixoLmFsd2F5cyhmdW5jdGlvbigpe18ub3ZlcmZsb3c9bi5vdmVyZmxvd1swXSxfLm92ZXJmbG93WD1uLm92ZXJmbG93WzFdLF8ub3ZlcmZsb3dZPW4ub3ZlcmZsb3dbMl19KSksdT0hMSxjKXV8fChtPyJoaWRkZW4iaW4gbSYmKGY9bS5oaWRkZW4pOm09cS5hY2Nlc3MoZSwiZnhzaG93Iix7ZGlzcGxheTpkfSksYSYmKG0uaGlkZGVuPSFmKSxmJiZ1ZShbZV0sITApLGguZG9uZShmdW5jdGlvbigpe2ZvcihpIGluIGZ8fHVlKFtlXSkscS5yZW1vdmUoZSwiZnhzaG93IiksYyliLnN0eWxlKGUsaSxjW2ldKX0pKSx1PV90KGY/bVtpXTowLGksaCksaSBpbiBtfHwobVtpXT11LnN0YXJ0LGYmJih1LmVuZD11LnN0YXJ0LHUuc3RhcnQ9MCkpfV0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9mdC5wcmVmaWx0ZXJzLnVuc2hpZnQoZSk6ZnQucHJlZmlsdGVycy5wdXNoKGUpfX0pLGIuc3BlZWQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUmJiJvYmplY3QiPT10eXBlb2YgZT9iLmV4dGVuZCh7fSxlKTp7Y29tcGxldGU6bnx8IW4mJnR8fG0oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIW0odCkmJnR9O3JldHVybiBiLmZ4Lm9mZj9pLmR1cmF0aW9uPTA6Im51bWJlciIhPXR5cGVvZiBpLmR1cmF0aW9uJiYoaS5kdXJhdGlvbiBpbiBiLmZ4LnNwZWVkcz9pLmR1cmF0aW9uPWIuZnguc3BlZWRzW2kuZHVyYXRpb25dOmkuZHVyYXRpb249Yi5meC5zcGVlZHMuX2RlZmF1bHQpLG51bGwhPWkucXVldWUmJiEwIT09aS5xdWV1ZXx8KGkucXVldWU9ImZ4IiksaS5vbGQ9aS5jb21wbGV0ZSxpLmNvbXBsZXRlPWZ1bmN0aW9uKCl7bShpLm9sZCkmJmkub2xkLmNhbGwodGhpcyksaS5xdWV1ZSYmYi5kZXF1ZXVlKHRoaXMsaS5xdWV1ZSl9LGl9LGIuZm4uZXh0ZW5kKHtmYWRlVG86ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIHRoaXMuZmlsdGVyKGFlKS5jc3MoIm9wYWNpdHkiLDApLnNob3coKS5lbmQoKS5hbmltYXRlKHtvcGFjaXR5OnR9LGUsbixpKX0sYW5pbWF0ZTpmdW5jdGlvbih0LGUsbixpKXt2YXIgcj1iLmlzRW1wdHlPYmplY3QodCksYT1iLnNwZWVkKGUsbixpKSxpPWZ1bmN0aW9uKCl7dmFyIGU9ZnQodGhpcyxiLmV4dGVuZCh7fSx0KSxhKTsocnx8cS5nZXQodGhpcywiZmluaXNoIikpJiZlLnN0b3AoITApfTtyZXR1cm4gaS5maW5pc2g9aSxyfHwhMT09PWEucXVldWU/dGhpcy5lYWNoKGkpOnRoaXMucXVldWUoYS5xdWV1ZSxpKX0sc3RvcDpmdW5jdGlvbihyLGUsYSl7ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLnN0b3A7ZGVsZXRlIGUuc3RvcCx0KGEpfXJldHVybiJzdHJpbmciIT10eXBlb2YgciYmKGE9ZSxlPXIscj12b2lkIDApLGUmJnRoaXMucXVldWUocnx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9ITAsdD1udWxsIT1yJiZyKyJxdWV1ZUhvb2tzIixuPWIudGltZXJzLGk9cS5nZXQodGhpcyk7aWYodClpW3RdJiZpW3RdLnN0b3AmJnMoaVt0XSk7ZWxzZSBmb3IodCBpbiBpKWlbdF0mJmlbdF0uc3RvcCYmZHQudGVzdCh0KSYmcyhpW3RdKTtmb3IodD1uLmxlbmd0aDt0LS07KW5bdF0uZWxlbSE9PXRoaXN8fG51bGwhPXImJm5bdF0ucXVldWUhPT1yfHwoblt0XS5hbmltLnN0b3AoYSksZT0hMSxuLnNwbGljZSh0LDEpKTshZSYmYXx8Yi5kZXF1ZXVlKHRoaXMscil9KX0sZmluaXNoOmZ1bmN0aW9uKHMpe3JldHVybiExIT09cyYmKHM9c3x8ImZ4IiksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGUsdD1xLmdldCh0aGlzKSxuPXRbcysicXVldWUiXSxpPXRbcysicXVldWVIb29rcyJdLHI9Yi50aW1lcnMsYT1uP24ubGVuZ3RoOjA7Zm9yKHQuZmluaXNoPSEwLGIucXVldWUodGhpcyxzLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLGU9ci5sZW5ndGg7ZS0tOylyW2VdLmVsZW09PT10aGlzJiZyW2VdLnF1ZXVlPT09cyYmKHJbZV0uYW5pbS5zdG9wKCEwKSxyLnNwbGljZShlLDEpKTtmb3IoZT0wO2U8YTtlKyspbltlXSYmbltlXS5maW5pc2gmJm5bZV0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIHQuZmluaXNofSl9fSksYi5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLGkpe3ZhciByPWIuZm5baV07Yi5mbltpXT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGN0KGksITApLGUsdCxuKX19KSxiLmVhY2goe3NsaWRlRG93bjpjdCgic2hvdyIpLHNsaWRlVXA6Y3QoImhpZGUiKSxzbGlkZVRvZ2dsZTpjdCgidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLGkpe2IuZm5bZV09ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmFuaW1hdGUoaSxlLHQsbil9fSksYi50aW1lcnM9W10sYi5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsdD0wLG49Yi50aW1lcnM7Zm9yKHN0PURhdGUubm93KCk7dDxuLmxlbmd0aDt0KyspKGU9blt0XSkoKXx8blt0XSE9PWV8fG4uc3BsaWNlKHQtLSwxKTtuLmxlbmd0aHx8Yi5meC5zdG9wKCksc3Q9dm9pZCAwfSxiLmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2IudGltZXJzLnB1c2goZSksYi5meC5zdGFydCgpfSxiLmZ4LmludGVydmFsPTEzLGIuZnguc3RhcnQ9ZnVuY3Rpb24oKXtvdHx8KG90PSEwLGx0KCkpfSxiLmZ4LnN0b3A9ZnVuY3Rpb24oKXtvdD1udWxsfSxiLmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxiLmZuLmRlbGF5PWZ1bmN0aW9uKGksZSl7cmV0dXJuIGk9Yi5meCYmYi5meC5zcGVlZHNbaV18fGksdGhpcy5xdWV1ZShlPWV8fCJmeCIsZnVuY3Rpb24oZSx0KXt2YXIgbj1TLnNldFRpbWVvdXQoZSxpKTt0LnN0b3A9ZnVuY3Rpb24oKXtTLmNsZWFyVGltZW91dChuKX19KX0sSnQ9ay5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLFE9ay5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKS5hcHBlbmRDaGlsZChrLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxKdC50eXBlPSJjaGVja2JveCIsZy5jaGVja09uPSIiIT09SnQudmFsdWUsZy5vcHRTZWxlY3RlZD1RLnNlbGVjdGVkLChKdD1rLmNyZWF0ZUVsZW1lbnQoImlucHV0IikpLnZhbHVlPSJ0IixKdC50eXBlPSJyYWRpbyIsZy5yYWRpb1ZhbHVlPSJ0Ij09PUp0LnZhbHVlO3ZhciBtdCxwdD1iLmV4cHIuYXR0ckhhbmRsZTtiLmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiBCKHRoaXMsYi5hdHRyLGUsdCwxPGFyZ3VtZW50cy5sZW5ndGgpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtiLnJlbW92ZUF0dHIodGhpcyxlKX0pfX0pLGIuZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyLGE9ZS5ub2RlVHlwZTtpZigzIT09YSYmOCE9PWEmJjIhPT1hKXJldHVybiB2b2lkIDA9PT1lLmdldEF0dHJpYnV0ZT9iLnByb3AoZSx0LG4pOigxPT09YSYmYi5pc1hNTERvYyhlKXx8KHI9Yi5hdHRySG9va3NbdC50b0xvd2VyQ2FzZSgpXXx8KGIuZXhwci5tYXRjaC5ib29sLnRlc3QodCk/bXQ6dm9pZCAwKSksdm9pZCAwIT09bj9udWxsPT09bj92b2lkIGIucmVtb3ZlQXR0cihlLHQpOnImJiJzZXQiaW4gciYmdm9pZCAwIT09KGk9ci5zZXQoZSxuLHQpKT9pOihlLnNldEF0dHJpYnV0ZSh0LG4rIiIpLG4pOiEociYmImdldCJpbiByJiZudWxsIT09KGk9ci5nZXQoZSx0KSkpJiZudWxsPT0oaT1iLmZpbmQuYXR0cihlLHQpKT92b2lkIDA6aSl9LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoIWcucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJkQoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPTAscj10JiZ0Lm1hdGNoKHgpO2lmKHImJjE9PT1lLm5vZGVUeXBlKWZvcig7bj1yW2krK107KWUucmVtb3ZlQXR0cmlidXRlKG4pfX0pLG10PXtzZXQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiExPT09dD9iLnJlbW92ZUF0dHIoZSxuKTplLnNldEF0dHJpYnV0ZShuLG4pLG59fSxiLmVhY2goYi5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKC9cdysvZyksZnVuY3Rpb24oZSx0KXt2YXIgcz1wdFt0XXx8Yi5maW5kLmF0dHI7cHRbdF09ZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHIsYT10LnRvTG93ZXJDYXNlKCk7cmV0dXJuIG58fChyPXB0W2FdLHB0W2FdPWksaT1udWxsIT1zKGUsdCxuKT9hOm51bGwscHRbYV09ciksaX19KTt2YXIgeXQ9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSx2dD0vXig/OmF8YXJlYSkkL2k7ZnVuY3Rpb24gZ3QoZSl7cmV0dXJuKGUubWF0Y2goeCl8fFtdKS5qb2luKCIgIil9ZnVuY3Rpb24gTXQoZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiJ9ZnVuY3Rpb24gTHQoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZToic3RyaW5nIj09dHlwZW9mIGUmJmUubWF0Y2goeCl8fFtdfWIuZm4uZXh0ZW5kKHtwcm9wOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIodGhpcyxiLnByb3AsZSx0LDE8YXJndW1lbnRzLmxlbmd0aCl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2RlbGV0ZSB0aGlzW2IucHJvcEZpeFtlXXx8ZV19KX19KSxiLmV4dGVuZCh7cHJvcDpmdW5jdGlvbihlLHQsbil7dmFyIGkscixhPWUubm9kZVR5cGU7aWYoMyE9PWEmJjghPT1hJiYyIT09YSlyZXR1cm4gMT09PWEmJmIuaXNYTUxEb2MoZSl8fCh0PWIucHJvcEZpeFt0XXx8dCxyPWIucHJvcEhvb2tzW3RdKSx2b2lkIDAhPT1uP3ImJiJzZXQiaW4gciYmdm9pZCAwIT09KGk9ci5zZXQoZSxuLHQpKT9pOmVbdF09bjpyJiYiZ2V0ImluIHImJm51bGwhPT0oaT1yLmdldChlLHQpKT9pOmVbdF19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgdD1iLmZpbmQuYXR0cihlLCJ0YWJpbmRleCIpO3JldHVybiB0P3BhcnNlSW50KHQsMTApOnl0LnRlc3QoZS5ub2RlTmFtZSl8fHZ0LnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19LHByb3BGaXg6e2ZvcjoiaHRtbEZvciIsY2xhc3M6ImNsYXNzTmFtZSJ9fSksZy5vcHRTZWxlY3RlZHx8KGIucHJvcEhvb2tzLnNlbGVjdGVkPXtnZXQ6ZnVuY3Rpb24oZSl7ZT1lLnBhcmVudE5vZGU7cmV0dXJuIGUmJmUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsbnVsbH0sc2V0OmZ1bmN0aW9uKGUpe2U9ZS5wYXJlbnROb2RlO2UmJihlLnNlbGVjdGVkSW5kZXgsZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCl9fSksYi5lYWNoKFsidGFiSW5kZXgiLCJyZWFkT25seSIsIm1heExlbmd0aCIsImNlbGxTcGFjaW5nIiwiY2VsbFBhZGRpbmciLCJyb3dTcGFuIiwiY29sU3BhbiIsInVzZU1hcCIsImZyYW1lQm9yZGVyIiwiY29udGVudEVkaXRhYmxlIl0sZnVuY3Rpb24oKXtiLnByb3BGaXhbdGhpcy50b0xvd2VyQ2FzZSgpXT10aGlzfSksYi5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKHQpe3ZhciBlLG4saSxyLGEscyxvPTA7aWYobSh0KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe2IodGhpcykuYWRkQ2xhc3ModC5jYWxsKHRoaXMsZSxNdCh0aGlzKSkpfSk7aWYoKGU9THQodCkpLmxlbmd0aClmb3IoO249dGhpc1tvKytdOylpZihzPU10KG4pLGk9MT09PW4ubm9kZVR5cGUmJiIgIitndChzKSsiICIpe2ZvcihhPTA7cj1lW2ErK107KWkuaW5kZXhPZigiICIrcisiICIpPDAmJihpKz1yKyIgIik7cyE9PShzPWd0KGkpKSYmbi5zZXRBdHRyaWJ1dGUoImNsYXNzIixzKX1yZXR1cm4gdGhpc30scmVtb3ZlQ2xhc3M6ZnVuY3Rpb24odCl7dmFyIGUsbixpLHIsYSxzLG89MDtpZihtKHQpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7Yih0aGlzKS5yZW1vdmVDbGFzcyh0LmNhbGwodGhpcyxlLE10KHRoaXMpKSl9KTtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5hdHRyKCJjbGFzcyIsIiIpO2lmKChlPUx0KHQpKS5sZW5ndGgpZm9yKDtuPXRoaXNbbysrXTspaWYocz1NdChuKSxpPTE9PT1uLm5vZGVUeXBlJiYiICIrZ3QocykrIiAiKXtmb3IoYT0wO3I9ZVthKytdOylmb3IoOy0xPGkuaW5kZXhPZigiICIrcisiICIpOylpPWkucmVwbGFjZSgiICIrcisiICIsIiAiKTtzIT09KHM9Z3QoaSkpJiZuLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHMpfXJldHVybiB0aGlzfSx0b2dnbGVDbGFzczpmdW5jdGlvbihyLHQpe3ZhciBhPXR5cGVvZiByLHM9InN0cmluZyI9PWF8fEFycmF5LmlzQXJyYXkocik7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgdCYmcz90P3RoaXMuYWRkQ2xhc3Mocik6dGhpcy5yZW1vdmVDbGFzcyhyKTptKHIpP3RoaXMuZWFjaChmdW5jdGlvbihlKXtiKHRoaXMpLnRvZ2dsZUNsYXNzKHIuY2FsbCh0aGlzLGUsTXQodGhpcyksdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZSx0LG4saTtpZihzKWZvcih0PTAsbj1iKHRoaXMpLGk9THQocik7ZT1pW3QrK107KW4uaGFzQ2xhc3MoZSk/bi5yZW1vdmVDbGFzcyhlKTpuLmFkZENsYXNzKGUpO2Vsc2Ugdm9pZCAwIT09ciYmImJvb2xlYW4iIT1hfHwoKGU9TXQodGhpcykpJiZxLnNldCh0aGlzLCJfX2NsYXNzTmFtZV9fIixlKSx0aGlzLnNldEF0dHJpYnV0ZSYmdGhpcy5zZXRBdHRyaWJ1dGUoImNsYXNzIiwhZSYmITEhPT1yJiZxLmdldCh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIiKSl9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MCxpPSIgIitlKyIgIjt0PXRoaXNbbisrXTspaWYoMT09PXQubm9kZVR5cGUmJi0xPCgiICIrZ3QoTXQodCkpKyIgIikuaW5kZXhPZihpKSlyZXR1cm4hMDtyZXR1cm4hMX19KTt2YXIgU3Q9L1xyL2c7Yi5mbi5leHRlbmQoe3ZhbDpmdW5jdGlvbih0KXt2YXIgbixlLGkscj10aGlzWzBdO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW0odCksdGhpcy5lYWNoKGZ1bmN0aW9uKGUpezE9PT10aGlzLm5vZGVUeXBlJiYobnVsbD09KGU9aT90LmNhbGwodGhpcyxlLGIodGhpcykudmFsKCkpOnQpP2U9IiI6Im51bWJlciI9PXR5cGVvZiBlP2UrPSIiOkFycmF5LmlzQXJyYXkoZSkmJihlPWIubWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6ZSsiIn0pKSwobj1iLnZhbEhvb2tzW3RoaXMudHlwZV18fGIudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJzZXQiaW4gbiYmdm9pZCAwIT09bi5zZXQodGhpcyxlLCJ2YWx1ZSIpfHwodGhpcy52YWx1ZT1lKSl9KSk6cj8obj1iLnZhbEhvb2tzW3IudHlwZV18fGIudmFsSG9va3Nbci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSkmJiJnZXQiaW4gbiYmdm9pZCAwIT09KGU9bi5nZXQociwidmFsdWUiKSk/ZToic3RyaW5nIj09dHlwZW9mKGU9ci52YWx1ZSk/ZS5yZXBsYWNlKFN0LCIiKTpudWxsPT1lPyIiOmU6dm9pZCAwfX0pLGIuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9Yi5maW5kLmF0dHIoZSwidmFsdWUiKTtyZXR1cm4gbnVsbCE9dD90Omd0KGIudGV4dChlKSl9fSxzZWxlY3Q6e2dldDpmdW5jdGlvbihlKXtmb3IodmFyIHQsbj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgscj0ic2VsZWN0LW9uZSI9PT1lLnR5cGUsYT1yP251bGw6W10scz1yP2krMTpuLmxlbmd0aCxvPWk8MD9zOnI/aTowO288cztvKyspaWYoKCh0PW5bb10pLnNlbGVjdGVkfHxvPT09aSkmJiF0LmRpc2FibGVkJiYoIXQucGFyZW50Tm9kZS5kaXNhYmxlZHx8IUQodC5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7aWYodD1iKHQpLnZhbCgpLHIpcmV0dXJuIHQ7YS5wdXNoKHQpfXJldHVybiBhfSxzZXQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4saSxyPWUub3B0aW9ucyxhPWIubWFrZUFycmF5KHQpLHM9ci5sZW5ndGg7cy0tOykoKGk9cltzXSkuc2VsZWN0ZWQ9LTE8Yi5pbkFycmF5KGIudmFsSG9va3Mub3B0aW9uLmdldChpKSxhKSkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksYX19fX0pLGIuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2IudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIGUuY2hlY2tlZD0tMTxiLmluQXJyYXkoYihlKS52YWwoKSx0KX19LGcuY2hlY2tPbnx8KGIudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KSxnLmZvY3VzaW49Im9uZm9jdXNpbiJpbiBTO2Z1bmN0aW9uIGt0KGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCl9dmFyIGJ0PS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLztiLmV4dGVuZChiLmV2ZW50LHt0cmlnZ2VyOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByLGEscyxvLHUsZCxsLGg9W258fGtdLGM9di5jYWxsKGUsInR5cGUiKT9lLnR5cGU6ZSxfPXYuY2FsbChlLCJuYW1lc3BhY2UiKT9lLm5hbWVzcGFjZS5zcGxpdCgiLiIpOltdLGY9bD1hPW49bnx8aztpZigzIT09bi5ub2RlVHlwZSYmOCE9PW4ubm9kZVR5cGUmJiFidC50ZXN0KGMrYi5ldmVudC50cmlnZ2VyZWQpJiYoLTE8Yy5pbmRleE9mKCIuIikmJihjPShfPWMuc3BsaXQoIi4iKSkuc2hpZnQoKSxfLnNvcnQoKSksbz1jLmluZGV4T2YoIjoiKTwwJiYib24iK2MsKGU9ZVtiLmV4cGFuZG9dP2U6bmV3IGIuRXZlbnQoYywib2JqZWN0Ij09dHlwZW9mIGUmJmUpKS5pc1RyaWdnZXI9aT8yOjMsZS5uYW1lc3BhY2U9Xy5qb2luKCIuIiksZS5ybmFtZXNwYWNlPWUubmFtZXNwYWNlP25ldyBSZWdFeHAoIihefFxcLikiK18uam9pbigiXFwuKD86LipcXC58KSIpKyIoXFwufCQpIik6bnVsbCxlLnJlc3VsdD12b2lkIDAsZS50YXJnZXR8fChlLnRhcmdldD1uKSx0PW51bGw9PXQ/W2VdOmIubWFrZUFycmF5KHQsW2VdKSxkPWIuZXZlbnQuc3BlY2lhbFtjXXx8e30saXx8IWQudHJpZ2dlcnx8ITEhPT1kLnRyaWdnZXIuYXBwbHkobix0KSkpe2lmKCFpJiYhZC5ub0J1YmJsZSYmIXAobikpe2ZvcihzPWQuZGVsZWdhdGVUeXBlfHxjLGJ0LnRlc3QocytjKXx8KGY9Zi5wYXJlbnROb2RlKTtmO2Y9Zi5wYXJlbnROb2RlKWgucHVzaChmKSxhPWY7YT09PShuLm93bmVyRG9jdW1lbnR8fGspJiZoLnB1c2goYS5kZWZhdWx0Vmlld3x8YS5wYXJlbnRXaW5kb3d8fFMpfWZvcihyPTA7KGY9aFtyKytdKSYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTspbD1mLGUudHlwZT0xPHI/czpkLmJpbmRUeXBlfHxjLCh1PShxLmdldChmLCJldmVudHMiKXx8T2JqZWN0LmNyZWF0ZShudWxsKSlbZS50eXBlXSYmcS5nZXQoZiwiaGFuZGxlIikpJiZ1LmFwcGx5KGYsdCksKHU9byYmZltvXSkmJnUuYXBwbHkmJkcoZikmJihlLnJlc3VsdD11LmFwcGx5KGYsdCksITE9PT1lLnJlc3VsdCYmZS5wcmV2ZW50RGVmYXVsdCgpKTtyZXR1cm4gZS50eXBlPWMsaXx8ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8ZC5fZGVmYXVsdCYmITEhPT1kLl9kZWZhdWx0LmFwcGx5KGgucG9wKCksdCl8fCFHKG4pfHxvJiZtKG5bY10pJiYhcChuKSYmKChhPW5bb10pJiYobltvXT1udWxsKSxiLmV2ZW50LnRyaWdnZXJlZD1jLGUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSYmbC5hZGRFdmVudExpc3RlbmVyKGMsa3QpLG5bY10oKSxlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkmJmwucmVtb3ZlRXZlbnRMaXN0ZW5lcihjLGt0KSxiLmV2ZW50LnRyaWdnZXJlZD12b2lkIDAsYSYmKG5bb109YSkpLGUucmVzdWx0fX0sc2ltdWxhdGU6ZnVuY3Rpb24oZSx0LG4pe2U9Yi5leHRlbmQobmV3IGIuRXZlbnQsbix7dHlwZTplLGlzU2ltdWxhdGVkOiEwfSk7Yi5ldmVudC50cmlnZ2VyKGUsbnVsbCx0KX19KSxiLmZuLmV4dGVuZCh7dHJpZ2dlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtiLmV2ZW50LnRyaWdnZXIoZSx0LHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpc1swXTtpZihuKXJldHVybiBiLmV2ZW50LnRyaWdnZXIoZSx0LG4sITApfX0pLGcuZm9jdXNpbnx8Yi5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihuLGkpe2Z1bmN0aW9uIHIoZSl7Yi5ldmVudC5zaW11bGF0ZShpLGUudGFyZ2V0LGIuZXZlbnQuZml4KGUpKX1iLmV2ZW50LnNwZWNpYWxbaV09e3NldHVwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vd25lckRvY3VtZW50fHx0aGlzLmRvY3VtZW50fHx0aGlzLHQ9cS5hY2Nlc3MoZSxpKTt0fHxlLmFkZEV2ZW50TGlzdGVuZXIobixyLCEwKSxxLmFjY2VzcyhlLGksKHR8fDApKzEpfSx0ZWFyZG93bjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3duZXJEb2N1bWVudHx8dGhpcy5kb2N1bWVudHx8dGhpcyx0PXEuYWNjZXNzKGUsaSktMTt0P3EuYWNjZXNzKGUsaSx0KTooZS5yZW1vdmVFdmVudExpc3RlbmVyKG4sciwhMCkscS5yZW1vdmUoZSxpKSl9fX0pO3ZhciB3dD1TLmxvY2F0aW9uLER0PXtndWlkOkRhdGUubm93KCl9LFR0PS9cPy87Yi5wYXJzZVhNTD1mdW5jdGlvbihlKXt2YXIgdCxuO2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e3Q9KG5ldyBTLkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIil9Y2F0Y2goZSl7fXJldHVybiBuPXQmJnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIilbMF0sdCYmIW58fGIuZXJyb3IoIkludmFsaWQgWE1MOiAiKyhuP2IubWFwKG4uY2hpbGROb2RlcyxmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudH0pLmpvaW4oIlxuIik6ZSkpLHR9O3ZhciBFdD0vXFtcXSQvLFl0PS9ccj9cbi9nLFB0PS9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxDdD0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7Yi5wYXJhbT1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4oZSx0KXt0PW0odCk/dCgpOnQscltyLmxlbmd0aF09ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQobnVsbD09dD8iIjp0KX12YXIgaSxyPVtdO2lmKG51bGw9PWUpcmV0dXJuIiI7aWYoQXJyYXkuaXNBcnJheShlKXx8ZS5qcXVlcnkmJiFiLmlzUGxhaW5PYmplY3QoZSkpYi5lYWNoKGUsZnVuY3Rpb24oKXtuKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKGkgaW4gZSkhZnVuY3Rpb24gbihpLGUscixhKXtpZihBcnJheS5pc0FycmF5KGUpKWIuZWFjaChlLGZ1bmN0aW9uKGUsdCl7cnx8RXQudGVzdChpKT9hKGksdCk6bihpKyJbIisoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10P2U6IiIpKyJdIix0LHIsYSl9KTtlbHNlIGlmKHJ8fCJvYmplY3QiIT09ZihlKSlhKGksZSk7ZWxzZSBmb3IodmFyIHQgaW4gZSluKGkrIlsiK3QrIl0iLGVbdF0scixhKX0oaSxlW2ldLHQsbik7cmV0dXJuIHIuam9pbigiJiIpfSxiLmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGIucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT1iLnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT9iLm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiFiKHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmQ3QudGVzdCh0aGlzLm5vZGVOYW1lKSYmIVB0LnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFkZS50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPWIodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDpBcnJheS5pc0FycmF5KG4pP2IubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShZdCwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2UoWXQsIlxyXG4iKX19KS5nZXQoKX19KTt2YXIgUnQ9LyUyMC9nLEF0PS8jLiokLyx4dD0vKFs/Jl0pXz1bXiZdKi8sT3Q9L14oLio/KTpbIFx0XSooW15cclxuXSopJC9nbSxJdD0vXig/OkdFVHxIRUFEKSQvLFd0PS9eXC9cLy8sSHQ9e30sanQ9e30sRnQ9IiovIi5jb25jYXQoIioiKSxCdD1rLmNyZWF0ZUVsZW1lbnQoImEiKTtmdW5jdGlvbiBVdChhKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXsic3RyaW5nIiE9dHlwZW9mIGUmJih0PWUsZT0iKiIpO3ZhciBuLGk9MCxyPWUudG9Mb3dlckNhc2UoKS5tYXRjaCh4KXx8W107aWYobSh0KSlmb3IoO249cltpKytdOykiKyI9PT1uWzBdPyhuPW4uc2xpY2UoMSl8fCIqIiwoYVtuXT1hW25dfHxbXSkudW5zaGlmdCh0KSk6KGFbbl09YVtuXXx8W10pLnB1c2godCl9fWZ1bmN0aW9uIE50KHQsaSxyLGEpe3ZhciBzPXt9LG89dD09PWp0O2Z1bmN0aW9uIHUoZSl7dmFyIG47cmV0dXJuIHNbZV09ITAsYi5lYWNoKHRbZV18fFtdLGZ1bmN0aW9uKGUsdCl7dD10KGkscixhKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHR8fG98fHNbdF0/bz8hKG49dCk6dm9pZCAwOihpLmRhdGFUeXBlcy51bnNoaWZ0KHQpLHUodCksITEpfSksbn1yZXR1cm4gdShpLmRhdGFUeXBlc1swXSl8fCFzWyIqIl0mJnUoIioiKX1mdW5jdGlvbiB6dChlLHQpe3ZhciBuLGkscj1iLmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKG4gaW4gdCl2b2lkIDAhPT10W25dJiYoKHJbbl0/ZTppPWl8fHt9KVtuXT10W25dKTtyZXR1cm4gaSYmYi5leHRlbmQoITAsZSxpKSxlfUJ0LmhyZWY9d3QuaHJlZixiLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e30sYWpheFNldHRpbmdzOnt1cmw6d3QuaHJlZix0eXBlOiJHRVQiLGlzTG9jYWw6L14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8udGVzdCh3dC5wcm90b2NvbCksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpGdCx0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDovXGJ4bWxcYi8saHRtbDovXGJodG1sLyxqc29uOi9cYmpzb25cYi99LHJlc3BvbnNlRmllbGRzOnt4bWw6InJlc3BvbnNlWE1MIix0ZXh0OiJyZXNwb25zZVRleHQiLGpzb246InJlc3BvbnNlSlNPTiJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOlN0cmluZywidGV4dCBodG1sIjohMCwidGV4dCBqc29uIjpKU09OLnBhcnNlLCJ0ZXh0IHhtbCI6Yi5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/enQoenQoZSxiLmFqYXhTZXR0aW5ncyksdCk6enQoYi5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6VXQoSHQpLGFqYXhUcmFuc3BvcnQ6VXQoanQpLGFqYXg6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIGUmJih0PWUsZT12b2lkIDApO3ZhciB1LGQsbCxuLGgsYyxfLGkscixmPWIuYWpheFNldHVwKHt9LHQ9dHx8e30pLG09Zi5jb250ZXh0fHxmLHA9Zi5jb250ZXh0JiYobS5ub2RlVHlwZXx8bS5qcXVlcnkpP2IobSk6Yi5ldmVudCx5PWIuRGVmZXJyZWQoKSx2PWIuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGc9Zi5zdGF0dXNDb2RlfHx7fSxhPXt9LHM9e30sbz0iY2FuY2VsZWQiLE09e3JlYWR5U3RhdGU6MCxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihlKXt2YXIgdDtpZihjKXtpZighbilmb3Iobj17fTt0PU90LmV4ZWMobCk7KW5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl09KG5bdFsxXS50b0xvd2VyQ2FzZSgpKyIgIl18fFtdKS5jb25jYXQodFsyXSk7dD1uW2UudG9Mb3dlckNhc2UoKSsiICJdfXJldHVybiBudWxsPT10P251bGw6dC5qb2luKCIsICIpfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gYz9sOm51bGx9LHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09YyYmKGU9c1tlLnRvTG93ZXJDYXNlKCldPXNbZS50b0xvd2VyQ2FzZSgpXXx8ZSxhW2VdPXQpLHRoaXN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWMmJihmLm1pbWVUeXBlPWUpLHRoaXN9LHN0YXR1c0NvZGU6ZnVuY3Rpb24oZSl7aWYoZSlpZihjKU0uYWx3YXlzKGVbTS5zdGF0dXNdKTtlbHNlIGZvcih2YXIgdCBpbiBlKWdbdF09W2dbdF0sZVt0XV07cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGUpe2U9ZXx8bztyZXR1cm4gdSYmdS5hYm9ydChlKSxMKDAsZSksdGhpc319O2lmKHkucHJvbWlzZShNKSxmLnVybD0oKGV8fGYudXJsfHx3dC5ocmVmKSsiIikucmVwbGFjZShXdCx3dC5wcm90b2NvbCsiLy8iKSxmLnR5cGU9dC5tZXRob2R8fHQudHlwZXx8Zi5tZXRob2R8fGYudHlwZSxmLmRhdGFUeXBlcz0oZi5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKHgpfHxbIiJdLG51bGw9PWYuY3Jvc3NEb21haW4pe3I9ay5jcmVhdGVFbGVtZW50KCJhIik7dHJ5e3IuaHJlZj1mLnVybCxyLmhyZWY9ci5ocmVmLGYuY3Jvc3NEb21haW49QnQucHJvdG9jb2wrIi8vIitCdC5ob3N0IT1yLnByb3RvY29sKyIvLyIrci5ob3N0fWNhdGNoKGUpe2YuY3Jvc3NEb21haW49ITB9fWlmKGYuZGF0YSYmZi5wcm9jZXNzRGF0YSYmInN0cmluZyIhPXR5cGVvZiBmLmRhdGEmJihmLmRhdGE9Yi5wYXJhbShmLmRhdGEsZi50cmFkaXRpb25hbCkpLE50KEh0LGYsdCxNKSxjKXJldHVybiBNO2ZvcihpIGluKF89Yi5ldmVudCYmZi5nbG9iYWwpJiYwPT1iLmFjdGl2ZSsrJiZiLmV2ZW50LnRyaWdnZXIoImFqYXhTdGFydCIpLGYudHlwZT1mLnR5cGUudG9VcHBlckNhc2UoKSxmLmhhc0NvbnRlbnQ9IUl0LnRlc3QoZi50eXBlKSxkPWYudXJsLnJlcGxhY2UoQXQsIiIpLGYuaGFzQ29udGVudD9mLmRhdGEmJmYucHJvY2Vzc0RhdGEmJjA9PT0oZi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiYoZi5kYXRhPWYuZGF0YS5yZXBsYWNlKFJ0LCIrIikpOihyPWYudXJsLnNsaWNlKGQubGVuZ3RoKSxmLmRhdGEmJihmLnByb2Nlc3NEYXRhfHwic3RyaW5nIj09dHlwZW9mIGYuZGF0YSkmJihkKz0oVHQudGVzdChkKT8iJiI6Ij8iKStmLmRhdGEsZGVsZXRlIGYuZGF0YSksITE9PT1mLmNhY2hlJiYoZD1kLnJlcGxhY2UoeHQsIiQxIikscj0oVHQudGVzdChkKT8iJiI6Ij8iKSsiXz0iK0R0Lmd1aWQrKytyKSxmLnVybD1kK3IpLGYuaWZNb2RpZmllZCYmKGIubGFzdE1vZGlmaWVkW2RdJiZNLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIixiLmxhc3RNb2RpZmllZFtkXSksYi5ldGFnW2RdJiZNLnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLGIuZXRhZ1tkXSkpLChmLmRhdGEmJmYuaGFzQ29udGVudCYmITEhPT1mLmNvbnRlbnRUeXBlfHx0LmNvbnRlbnRUeXBlKSYmTS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGYuY29udGVudFR5cGUpLE0uc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixmLmRhdGFUeXBlc1swXSYmZi5hY2NlcHRzW2YuZGF0YVR5cGVzWzBdXT9mLmFjY2VwdHNbZi5kYXRhVHlwZXNbMF1dKygiKiIhPT1mLmRhdGFUeXBlc1swXT8iLCAiK0Z0KyI7IHE9MC4wMSI6IiIpOmYuYWNjZXB0c1siKiJdKSxmLmhlYWRlcnMpTS5zZXRSZXF1ZXN0SGVhZGVyKGksZi5oZWFkZXJzW2ldKTtpZihmLmJlZm9yZVNlbmQmJighMT09PWYuYmVmb3JlU2VuZC5jYWxsKG0sTSxmKXx8YykpcmV0dXJuIE0uYWJvcnQoKTtpZihvPSJhYm9ydCIsdi5hZGQoZi5jb21wbGV0ZSksTS5kb25lKGYuc3VjY2VzcyksTS5mYWlsKGYuZXJyb3IpLHU9TnQoanQsZix0LE0pKXtpZihNLnJlYWR5U3RhdGU9MSxfJiZwLnRyaWdnZXIoImFqYXhTZW5kIixbTSxmXSksYylyZXR1cm4gTTtmLmFzeW5jJiYwPGYudGltZW91dCYmKGg9Uy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7TS5hYm9ydCgidGltZW91dCIpfSxmLnRpbWVvdXQpKTt0cnl7Yz0hMSx1LnNlbmQoYSxMKX1jYXRjaChlKXtpZihjKXRocm93IGU7TCgtMSxlKX19ZWxzZSBMKC0xLCJObyBUcmFuc3BvcnQiKTtmdW5jdGlvbiBMKGUsdCxuLGkpe3ZhciByLGEscyxvPXQ7Y3x8KGM9ITAsaCYmUy5jbGVhclRpbWVvdXQoaCksdT12b2lkIDAsbD1pfHwiIixNLnJlYWR5U3RhdGU9MDxlPzQ6MCxpPTIwMDw9ZSYmZTwzMDB8fDMwND09PWUsbiYmKHM9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaSxyLGEscyxvPWUuY29udGVudHMsdT1lLmRhdGFUeXBlczsiKiI9PT11WzBdOyl1LnNoaWZ0KCksdm9pZCAwPT09aSYmKGk9ZS5taW1lVHlwZXx8dC5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1UeXBlIikpO2lmKGkpZm9yKHIgaW4gbylpZihvW3JdJiZvW3JdLnRlc3QoaSkpe3UudW5zaGlmdChyKTticmVha31pZih1WzBdaW4gbilhPXVbMF07ZWxzZXtmb3IociBpbiBuKXtpZighdVswXXx8ZS5jb252ZXJ0ZXJzW3IrIiAiK3VbMF1dKXthPXI7YnJlYWt9cz1zfHxyfWE9YXx8c31pZihhKXJldHVybiBhIT09dVswXSYmdS51bnNoaWZ0KGEpLG5bYV19KGYsTSxuKSksIWkmJi0xPGIuaW5BcnJheSgic2NyaXB0IixmLmRhdGFUeXBlcykmJmIuaW5BcnJheSgianNvbiIsZi5kYXRhVHlwZXMpPDAmJihmLmNvbnZlcnRlcnNbInRleHQgc2NyaXB0Il09ZnVuY3Rpb24oKXt9KSxzPWZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByLGEscyxvLHUsZD17fSxsPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYobFsxXSlmb3IocyBpbiBlLmNvbnZlcnRlcnMpZFtzLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1tzXTtmb3IoYT1sLnNoaWZ0KCk7YTspaWYoZS5yZXNwb25zZUZpZWxkc1thXSYmKG5bZS5yZXNwb25zZUZpZWxkc1thXV09dCksIXUmJmkmJmUuZGF0YUZpbHRlciYmKHQ9ZS5kYXRhRmlsdGVyKHQsZS5kYXRhVHlwZSkpLHU9YSxhPWwuc2hpZnQoKSlpZigiKiI9PT1hKWE9dTtlbHNlIGlmKCIqIiE9PXUmJnUhPT1hKXtpZighKHM9ZFt1KyIgIithXXx8ZFsiKiAiK2FdKSlmb3IociBpbiBkKWlmKChvPXIuc3BsaXQoIiAiKSlbMV09PT1hJiYocz1kW3UrIiAiK29bMF1dfHxkWyIqICIrb1swXV0pKXshMD09PXM/cz1kW3JdOiEwIT09ZFtyXSYmKGE9b1swXSxsLnVuc2hpZnQob1sxXSkpO2JyZWFrfWlmKCEwIT09cylpZihzJiZlLnRocm93cyl0PXModCk7ZWxzZSB0cnl7dD1zKHQpfWNhdGNoKGUpe3JldHVybntzdGF0ZToicGFyc2VyZXJyb3IiLGVycm9yOnM/ZToiTm8gY29udmVyc2lvbiBmcm9tICIrdSsiIHRvICIrYX19fXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX0oZixzLE0saSksaT8oZi5pZk1vZGlmaWVkJiYoKG49TS5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpKSYmKGIubGFzdE1vZGlmaWVkW2RdPW4pLChuPU0uZ2V0UmVzcG9uc2VIZWFkZXIoImV0YWciKSkmJihiLmV0YWdbZF09bikpLDIwND09PWV8fCJIRUFEIj09PWYudHlwZT9vPSJub2NvbnRlbnQiOjMwND09PWU/bz0ibm90bW9kaWZpZWQiOihvPXMuc3RhdGUscj1zLmRhdGEsaT0hKGE9cy5lcnJvcikpKTooYT1vLCFlJiZvfHwobz0iZXJyb3IiLGU8MCYmKGU9MCkpKSxNLnN0YXR1cz1lLE0uc3RhdHVzVGV4dD0odHx8bykrIiIsaT95LnJlc29sdmVXaXRoKG0sW3IsbyxNXSk6eS5yZWplY3RXaXRoKG0sW00sbyxhXSksTS5zdGF0dXNDb2RlKGcpLGc9dm9pZCAwLF8mJnAudHJpZ2dlcihpPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW00sZixpP3I6YV0pLHYuZmlyZVdpdGgobSxbTSxvXSksXyYmKHAudHJpZ2dlcigiYWpheENvbXBsZXRlIixbTSxmXSksLS1iLmFjdGl2ZXx8Yi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIE19LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBiLmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYi5nZXQoZSx2b2lkIDAsdCwic2NyaXB0Iil9fSksYi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGUscil7YltyXT1mdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gbSh0KSYmKGk9aXx8bixuPXQsdD12b2lkIDApLGIuYWpheChiLmV4dGVuZCh7dXJsOmUsdHlwZTpyLGRhdGFUeXBlOmksZGF0YTp0LHN1Y2Nlc3M6bn0sYi5pc1BsYWluT2JqZWN0KGUpJiZlKSl9fSksYi5hamF4UHJlZmlsdGVyKGZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlLmhlYWRlcnMpImNvbnRlbnQtdHlwZSI9PT10LnRvTG93ZXJDYXNlKCkmJihlLmNvbnRlbnRUeXBlPWUuaGVhZGVyc1t0XXx8IiIpfSksYi5fZXZhbFVybD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGIuYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0IixjYWNoZTohMCxhc3luYzohMSxnbG9iYWw6ITEsY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbigpe319LGRhdGFGaWx0ZXI6ZnVuY3Rpb24oZSl7Yi5nbG9iYWxFdmFsKGUsdCxuKX19KX0sYi5mbi5leHRlbmQoe3dyYXBBbGw6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXNbMF0mJihtKGUpJiYoZT1lLmNhbGwodGhpc1swXSkpLGU9YihlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApLHRoaXNbMF0ucGFyZW50Tm9kZSYmZS5pbnNlcnRCZWZvcmUodGhpc1swXSksZS5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcztlLmZpcnN0RWxlbWVudENoaWxkOyllPWUuZmlyc3RFbGVtZW50Q2hpbGQ7cmV0dXJuIGV9KS5hcHBlbmQodGhpcykpLHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihuKXtyZXR1cm4gbShuKT90aGlzLmVhY2goZnVuY3Rpb24oZSl7Yih0aGlzKS53cmFwSW5uZXIobi5jYWxsKHRoaXMsZSkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9Yih0aGlzKSx0PWUuY29udGVudHMoKTt0Lmxlbmd0aD90LndyYXBBbGwobik6ZS5hcHBlbmQobil9KX0sd3JhcDpmdW5jdGlvbih0KXt2YXIgbj1tKHQpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZSl7Yih0aGlzKS53cmFwQWxsKG4/dC5jYWxsKHRoaXMsZSk6dCl9KX0sdW53cmFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnBhcmVudChlKS5ub3QoImJvZHkiKS5lYWNoKGZ1bmN0aW9uKCl7Yih0aGlzKS5yZXBsYWNlV2l0aCh0aGlzLmNoaWxkTm9kZXMpfSksdGhpc319KSxiLmV4cHIucHNldWRvcy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIWIuZXhwci5wc2V1ZG9zLnZpc2libGUoZSl9LGIuZXhwci5wc2V1ZG9zLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuISEoZS5vZmZzZXRXaWR0aHx8ZS5vZmZzZXRIZWlnaHR8fGUuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpfSxiLmFqYXhTZXR0aW5ncy54aHI9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBTLlhNTEh0dHBSZXF1ZXN0fWNhdGNoKGUpe319O3ZhciBWdD17MDoyMDAsMTIyMzoyMDR9LEd0PWIuYWpheFNldHRpbmdzLnhocigpO2cuY29ycz0hIUd0JiYid2l0aENyZWRlbnRpYWxzImluIEd0LGcuYWpheD1HdD0hIUd0LGIuYWpheFRyYW5zcG9ydChmdW5jdGlvbihyKXt2YXIgYSxzO2lmKGcuY29yc3x8R3QmJiFyLmNyb3NzRG9tYWluKXJldHVybntzZW5kOmZ1bmN0aW9uKGUsdCl7dmFyIG4saT1yLnhocigpO2lmKGkub3BlbihyLnR5cGUsci51cmwsci5hc3luYyxyLnVzZXJuYW1lLHIucGFzc3dvcmQpLHIueGhyRmllbGRzKWZvcihuIGluIHIueGhyRmllbGRzKWlbbl09ci54aHJGaWVsZHNbbl07Zm9yKG4gaW4gci5taW1lVHlwZSYmaS5vdmVycmlkZU1pbWVUeXBlJiZpLm92ZXJyaWRlTWltZVR5cGUoci5taW1lVHlwZSksci5jcm9zc0RvbWFpbnx8ZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdfHwoZVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpLGUpaS5zZXRSZXF1ZXN0SGVhZGVyKG4sZVtuXSk7YT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXthJiYoYT1zPWkub25sb2FkPWkub25lcnJvcj1pLm9uYWJvcnQ9aS5vbnRpbWVvdXQ9aS5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCwiYWJvcnQiPT09ZT9pLmFib3J0KCk6ImVycm9yIj09PWU/Im51bWJlciIhPXR5cGVvZiBpLnN0YXR1cz90KDAsImVycm9yIik6dChpLnN0YXR1cyxpLnN0YXR1c1RleHQpOnQoVnRbaS5zdGF0dXNdfHxpLnN0YXR1cyxpLnN0YXR1c1RleHQsInRleHQiIT09KGkucmVzcG9uc2VUeXBlfHwidGV4dCIpfHwic3RyaW5nIiE9dHlwZW9mIGkucmVzcG9uc2VUZXh0P3tiaW5hcnk6aS5yZXNwb25zZX06e3RleHQ6aS5yZXNwb25zZVRleHR9LGkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKX19LGkub25sb2FkPWEoKSxzPWkub25lcnJvcj1pLm9udGltZW91dD1hKCJlcnJvciIpLHZvaWQgMCE9PWkub25hYm9ydD9pLm9uYWJvcnQ9czppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PT1pLnJlYWR5U3RhdGUmJlMuc2V0VGltZW91dChmdW5jdGlvbigpe2EmJnMoKX0pfSxhPWEoImFib3J0Iik7dHJ5e2kuc2VuZChyLmhhc0NvbnRlbnQmJnIuZGF0YXx8bnVsbCl9Y2F0Y2goZSl7aWYoYSl0aHJvdyBlfX0sYWJvcnQ6ZnVuY3Rpb24oKXthJiZhKCl9fX0pLGIuYWpheFByZWZpbHRlcihmdW5jdGlvbihlKXtlLmNyb3NzRG9tYWluJiYoZS5jb250ZW50cy5zY3JpcHQ9ITEpfSksYi5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi9cYig/OmphdmF8ZWNtYSlzY3JpcHRcYi99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIGIuZ2xvYmFsRXZhbChlKSxlfX19KSxiLmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7dm9pZCAwPT09ZS5jYWNoZSYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIpfSksYi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKG4pe3ZhciBpLHI7aWYobi5jcm9zc0RvbWFpbnx8bi5zY3JpcHRBdHRycylyZXR1cm57c2VuZDpmdW5jdGlvbihlLHQpe2k9YigiPHNjcmlwdD4iKS5hdHRyKG4uc2NyaXB0QXR0cnN8fHt9KS5wcm9wKHtjaGFyc2V0Om4uc2NyaXB0Q2hhcnNldCxzcmM6bi51cmx9KS5vbigibG9hZCBlcnJvciIscj1mdW5jdGlvbihlKXtpLnJlbW92ZSgpLHI9bnVsbCxlJiZ0KCJlcnJvciI9PT1lLnR5cGU/NDA0OjIwMCxlLnR5cGUpfSksay5oZWFkLmFwcGVuZENoaWxkKGlbMF0pfSxhYm9ydDpmdW5jdGlvbigpe3ImJnIoKX19fSk7dmFyIEp0LHF0PVtdLEt0PS8oPSlcPyg/PSZ8JCl8XD9cPy87Yi5hamF4U2V0dXAoe2pzb25wOiJjYWxsYmFjayIsanNvbnBDYWxsYmFjazpmdW5jdGlvbigpe3ZhciBlPXF0LnBvcCgpfHxiLmV4cGFuZG8rIl8iK0R0Lmd1aWQrKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLGIuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHIsYSxzPSExIT09ZS5qc29ucCYmKEt0LnRlc3QoZS51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2YgZS5kYXRhJiYwPT09KGUuY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmS3QudGVzdChlLmRhdGEpJiYiZGF0YSIpO2lmKHN8fCJqc29ucCI9PT1lLmRhdGFUeXBlc1swXSlyZXR1cm4gaT1lLmpzb25wQ2FsbGJhY2s9bShlLmpzb25wQ2FsbGJhY2spP2UuanNvbnBDYWxsYmFjaygpOmUuanNvbnBDYWxsYmFjayxzP2Vbc109ZVtzXS5yZXBsYWNlKEt0LCIkMSIraSk6ITEhPT1lLmpzb25wJiYoZS51cmwrPShUdC50ZXN0KGUudXJsKT8iJiI6Ij8iKStlLmpzb25wKyI9IitpKSxlLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gYXx8Yi5lcnJvcihpKyIgd2FzIG5vdCBjYWxsZWQiKSxhWzBdfSxlLmRhdGFUeXBlc1swXT0ianNvbiIscj1TW2ldLFNbaV09ZnVuY3Rpb24oKXthPWFyZ3VtZW50c30sbi5hbHdheXMoZnVuY3Rpb24oKXt2b2lkIDA9PT1yP2IoUykucmVtb3ZlUHJvcChpKTpTW2ldPXIsZVtpXSYmKGUuanNvbnBDYWxsYmFjaz10Lmpzb25wQ2FsbGJhY2sscXQucHVzaChpKSksYSYmbShyKSYmcihhWzBdKSxhPXI9dm9pZCAwfSksInNjcmlwdCJ9KSxnLmNyZWF0ZUhUTUxEb2N1bWVudD0oKEp0PWsuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKS5ib2R5KS5pbm5lckhUTUw9Ijxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+IiwyPT09SnQuY2hpbGROb2Rlcy5sZW5ndGgpLGIucGFyc2VIVE1MPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/W106KCJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdHx8KGcuY3JlYXRlSFRNTERvY3VtZW50PygoaT0odD1rLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikpLmNyZWF0ZUVsZW1lbnQoImJhc2UiKSkuaHJlZj1rLmxvY2F0aW9uLmhyZWYsdC5oZWFkLmFwcGVuZENoaWxkKGkpKTp0PWspLGk9IW4mJltdLChuPVQuZXhlYyhlKSk/W3QuY3JlYXRlRWxlbWVudChuWzFdKV06KG49cGUoW2VdLHQsaSksaSYmaS5sZW5ndGgmJmIoaSkucmVtb3ZlKCksYi5tZXJnZShbXSxuLmNoaWxkTm9kZXMpKSk7dmFyIGl9LGIuZm4ubG9hZD1mdW5jdGlvbihlLHQsbil7dmFyIGkscixhLHM9dGhpcyxvPWUuaW5kZXhPZigiICIpO3JldHVybi0xPG8mJihpPWd0KGUuc2xpY2UobykpLGU9ZS5zbGljZSgwLG8pKSxtKHQpPyhuPXQsdD12b2lkIDApOnQmJiJvYmplY3QiPT10eXBlb2YgdCYmKHI9IlBPU1QiKSwwPHMubGVuZ3RoJiZiLmFqYXgoe3VybDplLHR5cGU6cnx8IkdFVCIsZGF0YVR5cGU6Imh0bWwiLGRhdGE6dH0pLmRvbmUoZnVuY3Rpb24oZSl7YT1hcmd1bWVudHMscy5odG1sKGk/YigiPGRpdj4iKS5hcHBlbmQoYi5wYXJzZUhUTUwoZSkpLmZpbmQoaSk6ZSl9KS5hbHdheXMobiYmZnVuY3Rpb24oZSx0KXtzLmVhY2goZnVuY3Rpb24oKXtuLmFwcGx5KHRoaXMsYXx8W2UucmVzcG9uc2VUZXh0LHQsZV0pfSl9KSx0aGlzfSxiLmV4cHIucHNldWRvcy5hbmltYXRlZD1mdW5jdGlvbih0KXtyZXR1cm4gYi5ncmVwKGIudGltZXJzLGZ1bmN0aW9uKGUpe3JldHVybiB0PT09ZS5lbGVtfSkubGVuZ3RofSxiLm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyLGEscyxvPWIuY3NzKGUsInBvc2l0aW9uIiksdT1iKGUpLGQ9e307InN0YXRpYyI9PT1vJiYoZS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSxhPXUub2Zmc2V0KCksaT1iLmNzcyhlLCJ0b3AiKSxzPWIuY3NzKGUsImxlZnQiKSxzPSgiYWJzb2x1dGUiPT09b3x8ImZpeGVkIj09PW8pJiYtMTwoaStzKS5pbmRleE9mKCJhdXRvIik/KHI9KG89dS5wb3NpdGlvbigpKS50b3Asby5sZWZ0KToocj1wYXJzZUZsb2F0KGkpfHwwLHBhcnNlRmxvYXQocyl8fDApLG51bGwhPSh0PW0odCk/dC5jYWxsKGUsbixiLmV4dGVuZCh7fSxhKSk6dCkudG9wJiYoZC50b3A9dC50b3AtYS50b3ArciksbnVsbCE9dC5sZWZ0JiYoZC5sZWZ0PXQubGVmdC1hLmxlZnQrcyksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZCk6dS5jc3MoZCl9fSxiLmZuLmV4dGVuZCh7b2Zmc2V0OmZ1bmN0aW9uKHQpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oZSl7Yi5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsdCxlKX0pO3ZhciBlLG49dGhpc1swXTtyZXR1cm4gbj9uLmdldENsaWVudFJlY3RzKCkubGVuZ3RoPyhlPW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksbj1uLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcse3RvcDplLnRvcCtuLnBhZ2VZT2Zmc2V0LGxlZnQ6ZS5sZWZ0K24ucGFnZVhPZmZzZXR9KTp7dG9wOjAsbGVmdDowfTp2b2lkIDB9LHBvc2l0aW9uOmZ1bmN0aW9uKCl7aWYodGhpc1swXSl7dmFyIGUsdCxuLGk9dGhpc1swXSxyPXt0b3A6MCxsZWZ0OjB9O2lmKCJmaXhlZCI9PT1iLmNzcyhpLCJwb3NpdGlvbiIpKXQ9aS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtlbHNle2Zvcih0PXRoaXMub2Zmc2V0KCksbj1pLm93bmVyRG9jdW1lbnQsZT1pLm9mZnNldFBhcmVudHx8bi5kb2N1bWVudEVsZW1lbnQ7ZSYmKGU9PT1uLmJvZHl8fGU9PT1uLmRvY3VtZW50RWxlbWVudCkmJiJzdGF0aWMiPT09Yi5jc3MoZSwicG9zaXRpb24iKTspZT1lLnBhcmVudE5vZGU7ZSYmZSE9PWkmJjE9PT1lLm5vZGVUeXBlJiYoKHI9YihlKS5vZmZzZXQoKSkudG9wKz1iLmNzcyhlLCJib3JkZXJUb3BXaWR0aCIsITApLHIubGVmdCs9Yi5jc3MoZSwiYm9yZGVyTGVmdFdpZHRoIiwhMCkpfXJldHVybnt0b3A6dC50b3Atci50b3AtYi5jc3MoaSwibWFyZ2luVG9wIiwhMCksbGVmdDp0LmxlZnQtci5sZWZ0LWIuY3NzKGksIm1hcmdpbkxlZnQiLCEwKX19fSxvZmZzZXRQYXJlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQ7ZSYmInN0YXRpYyI9PT1iLmNzcyhlLCJwb3NpdGlvbiIpOyllPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxuZX0pfX0pLGIuZWFjaCh7c2Nyb2xsTGVmdDoicGFnZVhPZmZzZXQiLHNjcm9sbFRvcDoicGFnZVlPZmZzZXQifSxmdW5jdGlvbih0LHIpe3ZhciBhPSJwYWdlWU9mZnNldCI9PT1yO2IuZm5bdF09ZnVuY3Rpb24oZSl7cmV0dXJuIEIodGhpcyxmdW5jdGlvbihlLHQsbil7dmFyIGk7cmV0dXJuIHAoZSk/aT1lOjk9PT1lLm5vZGVUeXBlJiYoaT1lLmRlZmF1bHRWaWV3KSx2b2lkIDA9PT1uP2k/aVtyXTplW3RdOnZvaWQoaT9pLnNjcm9sbFRvKGE/aS5wYWdlWE9mZnNldDpuLGE/bjppLnBhZ2VZT2Zmc2V0KTplW3RdPW4pfSx0LGUsYXJndW1lbnRzLmxlbmd0aCl9fSksYi5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsbil7Yi5jc3NIb29rc1tuXT1KZShnLnBpeGVsUG9zaXRpb24sZnVuY3Rpb24oZSx0KXtpZih0KXJldHVybiB0PUdlKGUsbiksVWUudGVzdCh0KT9iKGUpLnBvc2l0aW9uKClbbl0rInB4Ijp0fSl9KSxiLmVhY2goe0hlaWdodDoiaGVpZ2h0IixXaWR0aDoid2lkdGgifSxmdW5jdGlvbihzLG8pe2IuZWFjaCh7cGFkZGluZzoiaW5uZXIiK3MsY29udGVudDpvLCIiOiJvdXRlciIrc30sZnVuY3Rpb24oaSxhKXtiLmZuW2FdPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aCYmKGl8fCJib29sZWFuIiE9dHlwZW9mIGUpLHI9aXx8KCEwPT09ZXx8ITA9PT10PyJtYXJnaW4iOiJib3JkZXIiKTtyZXR1cm4gQih0aGlzLGZ1bmN0aW9uKGUsdCxuKXt2YXIgaTtyZXR1cm4gcChlKT8wPT09YS5pbmRleE9mKCJvdXRlciIpP2VbImlubmVyIitzXTplLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsiY2xpZW50IitzXTo5PT09ZS5ub2RlVHlwZT8oaT1lLmRvY3VtZW50RWxlbWVudCxNYXRoLm1heChlLmJvZHlbInNjcm9sbCIrc10saVsic2Nyb2xsIitzXSxlLmJvZHlbIm9mZnNldCIrc10saVsib2Zmc2V0IitzXSxpWyJjbGllbnQiK3NdKSk6dm9pZCAwPT09bj9iLmNzcyhlLHQscik6Yi5zdHlsZShlLHQsbixyKX0sbyxuP2U6dm9pZCAwLG4pfX0pfSksYi5lYWNoKFsiYWpheFN0YXJ0IiwiYWpheFN0b3AiLCJhamF4Q29tcGxldGUiLCJhamF4RXJyb3IiLCJhamF4U3VjY2VzcyIsImFqYXhTZW5kIl0sZnVuY3Rpb24oZSx0KXtiLmZuW3RdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9uKHQsZSl9fSksYi5mbi5leHRlbmQoe2JpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gdGhpcy5vbih0LGUsbixpKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfSxob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSxiLmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSxuKXtiLmZuW25dPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIDA8YXJndW1lbnRzLmxlbmd0aD90aGlzLm9uKG4sbnVsbCxlLHQpOnRoaXMudHJpZ2dlcihuKX19KTt2YXIgWHQ9L15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nO2IucHJveHk9ZnVuY3Rpb24oZSx0KXt2YXIgbixpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmKGk9ZVt0XSx0PWUsZT1pKSxtKGUpKXJldHVybiBuPW8uY2FsbChhcmd1bWVudHMsMiksKGk9ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0fHx0aGlzLG4uY29uY2F0KG8uY2FsbChhcmd1bWVudHMpKSl9KS5ndWlkPWUuZ3VpZD1lLmd1aWR8fGIuZ3VpZCsrLGl9LGIuaG9sZFJlYWR5PWZ1bmN0aW9uKGUpe2U/Yi5yZWFkeVdhaXQrKzpiLnJlYWR5KCEwKX0sYi5pc0FycmF5PUFycmF5LmlzQXJyYXksYi5wYXJzZUpTT049SlNPTi5wYXJzZSxiLm5vZGVOYW1lPUQsYi5pc0Z1bmN0aW9uPW0sYi5pc1dpbmRvdz1wLGIuY2FtZWxDYXNlPVYsYi50eXBlPWYsYi5ub3c9RGF0ZS5ub3csYi5pc051bWVyaWM9ZnVuY3Rpb24oZSl7dmFyIHQ9Yi50eXBlKGUpO3JldHVybigibnVtYmVyIj09PXR8fCJzdHJpbmciPT09dCkmJiFpc05hTihlLXBhcnNlRmxvYXQoZSkpfSxiLnRyaW09ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWU/IiI6KGUrIiIpLnJlcGxhY2UoWHQsIiIpfSx2b2lkIDA9PT0odG49ZnVuY3Rpb24oKXtyZXR1cm4gYn0uYXBwbHkoZW4sW10pKXx8KFF0LmV4cG9ydHM9dG4pO3ZhciBadD1TLmpRdWVyeSwkdD1TLiQ7cmV0dXJuIGIubm9Db25mbGljdD1mdW5jdGlvbihlKXtyZXR1cm4gUy4kPT09YiYmKFMuJD0kdCksZSYmUy5qUXVlcnk9PT1iJiYoUy5qUXVlcnk9WnQpLGJ9LHZvaWQgMD09PWUmJihTLmpRdWVyeT1TLiQ9YiksYn0pfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMjcyKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4pe3QuZj1uKDgpfSxmdW5jdGlvbihlLHQsbil7ZnVuY3Rpb24gaShlKXtvKGUscix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7fX19KX12YXIgcj1uKDQwKSgibWV0YSIpLGE9bigxMCkscz1uKDIwKSxvPW4oOSkuZix1PTAsZD1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSxsPSFuKDE5KShmdW5jdGlvbigpe3JldHVybiBkKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksaD1lLmV4cG9ydHM9e0tFWTpyLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihlLHQpe2lmKCFhKGUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOigic3RyaW5nIj09dHlwZW9mIGU/IlMiOiJQIikrZTtpZighcyhlLHIpKXtpZighZChlKSlyZXR1cm4iRiI7aWYoIXQpcmV0dXJuIkUiO2koZSl9cmV0dXJuIGVbcl0uaX0sZ2V0V2VhazpmdW5jdGlvbihlLHQpe2lmKCFzKGUscikpe2lmKCFkKGUpKXJldHVybiEwO2lmKCF0KXJldHVybiExO2koZSl9cmV0dXJuIGVbcl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwmJmguTkVFRCYmZChlKSYmIXMoZSxyKSYmaShlKSxlfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDUpLHI9bigzKSxhPW4oMjcpLHM9big2NSksbz1uKDkpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXIuU3ltYm9sfHwoci5TeW1ib2w9IWEmJmkuU3ltYm9sfHx7fSk7Il8iPT1lLmNoYXJBdCgwKXx8ZSBpbiB0fHxvKHQsZSx7dmFsdWU6cy5mKGUpfSl9fSxmdW5jdGlvbihlLHQpe3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big0MSkscj1uKDI5KSxhPW4oMjEpLHM9big1MCksbz1uKDIwKSx1PW4oNzYpLGQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9bigxMSk/ZDpmdW5jdGlvbihlLHQpe2lmKGU9YShlKSx0PXModCwhMCksdSl0cnl7cmV0dXJuIGQoZSx0KX1jYXRjaChlKXt9aWYobyhlLHQpKXJldHVybiByKCFpLmYuY2FsbChlLHQpLGVbdF0pfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9IjB4MTJmOSIscj1pKyIwIixyPSh0LkVSUl9DT01fUEFSQU09cisiMDAwMSIsdC5FUlJfQ09NX05PVF9QTEFZSU5HPXIrIjAwMDIiLHQuRVJSX0NPTV9OT1RfUExBWUJBQ0s9cisiMDAwMyIsdC5FUlJfQ09NX0lTX01TRT1yKyIwMDA0Iix0LkVSUl9DT01fSVNfSlNERUNPREVSPXIrIjAwMDUiLHQuRVJSX0NPTV9MT0FEX0pTREVDT0RFUl9FUlJPUj1yKyIwMDA2Iix0LkVSUl9DT01fVVJMX0VSUk9SPXIrIjAwMDgiLHQuRVJSX0NPTV9SRUNWX1NUUkVBTV9USU1FT1VUPXIrIjAwMDkiLHQuRVJSX0NPTV9TRVRPUkdFVF9WT0xVTUVfRVJST1I9cisiMDAxMCIsdC5FUlJfQ09NX1NFVFZPTFVNRV9FUlJPUj1yKyIwMDExIix0LkVSUl9DT01fT1BFTlNPVU5EX0VSUk9SPXIrIjAwMTIiLGkrIjEiKSxyPSh0LkVSUl9TVFJFQU1fV1NfRVJST1I9cisiMDAwMCIsdC5FUlJfU1RSRUFNX09QRU5fRkFJTEVEPXIrIjAwMTAiLHQuRVJSX1NUUkVBTV9JTlRFUlJVUFQ9cisiMDAxMSIsdC5FUlJfU1RSRUFNX0NNRF9GQUlMRUQ9cisiMDAxMiIsdC5FUlJfU1RSRUFNX1NPVU5EX05PVEhBUz1yKyIwMDE0Iix0LkVSUl9TVFJFQU1fV1NfVU5GSU5EPXIrIjAwMTUiLHQuRVJSX1NUUkVBTV9XU19VTkNPTk5FQ1Q9cisiMDAxNiIsdC5FUlJfU1RSRUFNX0lOVEVMX1VOU1VQUE9SVD1yKyIwMDE3Iix0LkVSUl9TVFJFQU1fVElNRU9VVD1yKyIwMDE4Iix0LkVSUl9TVFJFQU1fV1NTX0VSUk9SPXIrIjAwMTkiLHQuRVJSX1BMQVlCQUNLX0ZSQU1FRk9SV0FSRD1yKyIwMDIwIix0LkVSUl9QTEFZQkFDS19NQVhfUkFURT1yKyIwMDIxIix0LkVSUl9QTEFZQkFDS19NSU5fUkFURT1yKyIwMDIyIix0LkVSUl9TVFJFQU1fV1NfVElNRU9VVD1yKyIwMDIzIix0LkVSUl9TVFJFQU1fVFJBTlM9cisiMDAyNCIsdC5FUlJfU1RSRUFNX1BMQVlCQUNLX0VORD1yKyIwMDI1Iix0LkVSUl9TVFJFQU1fVklERU9fQ09ESU5HPXIrIjAwMjYiLHQuRVJSX1NUUkVBTV9DT05ORUNUX0NMT1NFRD1yKyIwMDI3Iix0LkVSUl9TVFJFQU1fQlVGRVJfRVJST1I9cisiMDAyOCIsdC5FUlJfU1RSRUFNX0RBVEFfRVJST1I9cisiMDAyOSIsdC5FUlJfU1RSRUFNX0xPQ0tfRVJST1I9cisiMDAzMCIsdC5FUlJfU1RSRUFNX01TRV9EQVRBX0ZVTEw9cisiMDAzMSIsdC5FUlJfU1RSRUFNX0NPREVDX1VOU1VQUE9SVEVEPXIrIjAwMzIiLHQuRVJSX1NUUkVBTV9KU0RFQ09ERVJfQ09ERUNfVU5TVVBQT1JURUQ9cisiMDAzMyIsaSsiMiIpLGk9KHQuRVJSX1BMQVlfRklMRVNZU19VTlNVUFBPUlQ9cisiMDAwMCIsdC5FUlJfUExBWV9GSUxFU1lTX1FVT1RBPXIrIjAwMTAiLHQuRVJSX1BMQVlfRklMRVNZU19SRVFVRVNUPXIrIjAwMTEiLHQuRVJSX1BMQVlfRklMRVNZU19HRVRGSUxFPXIrIjAwMTIiLHQuRVJSX1BMQVlfRklMRVNZU19DUkVBVEU9cisiMDAxMyIsdC5FUlJfUExBWV9GSUxFU1lTX1dSSVRFPXIrIjAwMTQiLHQuRVJSX1BMQVlfRklMRVNZU19BTFJFQURZX1dSSVRJTkc9cisiMDAxNSIsdC5FUlJfUExBWV9GSUxFU1lTX05PVF9XUklUSU5HPXIrIjAwMTYiLHQuRVJSX1BMQVlfRklMRVNZU19OT1RfU1VQUE9SVF9EU1RUWVBFPXIrIjAwMTciLHQuRVJSX1BMQVlfRklMRVNZU19GSUxFTkFNRV9JU05VTEw9cisiMDAxOCIsdC5FUlJfQ0FQVFVSRV9SQU09IjB4MTJmOTMwMDEwIix0LkVSUl9DQVBUVVJFX05PX1BSRVBBUkVEPSIweDEyZjkzMDAxMSIsdC5FUlJfSlNERUNPREVSPWkrIjQwMCIsdC5FUlJfVEFMSz1pKyI1MDAiKTt0LkVSUl9UQUxLX0dFVFVTRVJNRURJQV9VTkRFRklORT1pKyIwMCIsdC5FUlJfVEFMS19VTlNVUFBPUlRfQVVESU9UWVBFPWkrIjAxIix0LkVSUl9UQUxLX05PVF9UQUxLSU5HPWkrIjUwIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cihuKDEpKTtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxyKG4oMikpLmRlZmF1bHQpKGEsW3trZXk6InJlc2V0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2ZpcnN0Q2hlY2twb2ludD10aGlzLl9sYXN0Q2hlY2twb2ludD0wLHRoaXMuX3RvdGFsQnl0ZXM9dGhpcy5faW50ZXJ2YWxCeXRlcz0wLHRoaXMuX2xhc3RTZWNvbmRCeXRlcz0wfX0se2tleToiYWRkQnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpezA9PT10aGlzLl9maXJzdENoZWNrcG9pbnQ/KHRoaXMuX2ZpcnN0Q2hlY2twb2ludD10aGlzLl9ub3coKSx0aGlzLl9sYXN0Q2hlY2twb2ludD10aGlzLl9maXJzdENoZWNrcG9pbnQsdGhpcy5faW50ZXJ2YWxCeXRlcys9ZSx0aGlzLl90b3RhbEJ5dGVzKz1lKTp0aGlzLl9ub3coKS10aGlzLl9sYXN0Q2hlY2twb2ludDwxZTM/KHRoaXMuX2ludGVydmFsQnl0ZXMrPWUsdGhpcy5fdG90YWxCeXRlcys9ZSk6KHRoaXMuX2xhc3RTZWNvbmRCeXRlcz10aGlzLl9pbnRlcnZhbEJ5dGVzLHRoaXMuX2ludGVydmFsQnl0ZXM9ZSx0aGlzLl90b3RhbEJ5dGVzKz1lLHRoaXMuX2xhc3RDaGVja3BvaW50PXRoaXMuX25vdygpKX19LHtrZXk6ImN1cnJlbnRLQnBzIixnZXQ6ZnVuY3Rpb24oKXt0aGlzLmFkZEJ5dGVzKDApO3ZhciBlPSh0aGlzLl9ub3coKS10aGlzLl9sYXN0Q2hlY2twb2ludCkvMWUzO3JldHVybiB0aGlzLl9pbnRlcnZhbEJ5dGVzLyhlPTA9PWU/MTplKS8xMDI0fX0se2tleToibGFzdFNlY29uZEtCcHMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFkZEJ5dGVzKDApLDAhPT10aGlzLl9sYXN0U2Vjb25kQnl0ZXM/dGhpcy5fbGFzdFNlY29uZEJ5dGVzLzEwMjQ6NTAwPD10aGlzLl9ub3coKS10aGlzLl9sYXN0Q2hlY2twb2ludD90aGlzLmN1cnJlbnRLQnBzOjB9fSx7a2V5OiJhdmVyYWdlS0JwcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9KHRoaXMuX25vdygpLXRoaXMuX2ZpcnN0Q2hlY2twb2ludCkvMWUzO3JldHVybiB0aGlzLl90b3RhbEJ5dGVzL2UvMTAyNH19XSksbj1hO2Z1bmN0aW9uIGEoKXsoMCxpLmRlZmF1bHQpKHRoaXMsYSksdGhpcy5fZmlyc3RDaGVja3BvaW50PTAsdGhpcy5fbGFzdENoZWNrcG9pbnQ9MCx0aGlzLl9pbnRlcnZhbEJ5dGVzPTAsdGhpcy5fdG90YWxCeXRlcz0wLHRoaXMuX2xhc3RTZWNvbmRCeXRlcz0wLHNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2Uubm93P3RoaXMuX25vdz1zZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHNlbGYucGVyZm9ybWFuY2UpOnRoaXMuX25vdz1EYXRlLm5vd310LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0Q29uZmlnPXZvaWQgMDt2YXIgaSxyPW4oMjMpLGE9KGk9cikmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9O3QuY3JlYXRlRGVmYXVsdENvbmZpZz1mdW5jdGlvbigpe3JldHVybigwLGEuZGVmYXVsdCkoe30scyl9O3ZhciBzPXQuZGVmYXVsdENvbmZpZz17ZW5hYmxlV29ya2VyOiExLGVuYWJsZVN0YXNoQnVmZmVyOiExLHN0YXNoSW5pdGlhbFNpemU6dm9pZCAwLGlzTGl2ZTohMSxsYXp5TG9hZDohMCxsYXp5TG9hZE1heER1cmF0aW9uOjE4MCxsYXp5TG9hZFJlY292ZXJEdXJhdGlvbjozMCxkZWZlckxvYWRBZnRlclNvdXJjZU9wZW46ITAsYXV0b0NsZWFudXBNYXhCYWNrd2FyZER1cmF0aW9uOjE4MCxhdXRvQ2xlYW51cE1pbkJhY2t3YXJkRHVyYXRpb246MTIwLHN0YXRpc3RpY3NJbmZvUmVwb3J0SW50ZXJ2YWw6NjAwLGZpeEF1ZGlvVGltZXN0YW1wR2FwOiEwLGFjY3VyYXRlU2VlazohMSxzZWVrVHlwZToicmFuZ2UiLHNlZWtQYXJhbVN0YXJ0OiJic3RhcnQiLHNlZWtQYXJhbUVuZDoiYmVuZCIscmFuZ2VMb2FkWmVyb1N0YXJ0OiExLGN1c3RvbVNlZWtIYW5kbGVyOnZvaWQgMCxyZXVzZVJlZGlyZWN0ZWRVUkw6ITEsaGVhZGVyczp2b2lkIDAsY3VzdG9tTG9hZGVyOnZvaWQgMCx2aWRlb1N0YXRlTW9uaXRvckludGVydmFsOjFlMyxlbmFibGVEdXJhdGlvbk1vbml0b3I6ITEsbG93TGF0ZW5jeVRocmVzaG9sZDoxLjUsaGlnaExhdGVuY3lUaHJlc2hvbGQ6MTAsZGVjcmVhc2VEdXJhdGlvblN0ZXA6LjQsZW5hYmxlVmlkZW9Gcm96ZW5Nb25pdG9yOiExLGZyb3plblRpbWVzVGhyZXNob2xkOjUsZW5hYmxlQ29uc3RWaWRlb1ZpZXdTaXplOiExLGNvbnN0VmlkZW9WaWV3V2lkdGg6MTkyMCxjb25zdFZpZGVvVmlld0hlaWdodDoxMDgwLGxhdGVuY3lEZXRlY3RJbnRlcnZhbDo2ZTQsbGF0ZW5jeURldGVjdFRocmVzaG9sZDoyLGxhdGVuY3lEZXRlY3RBZGp1c3RTdGVwOi4xLGVuYWJsZUF1ZGlvR2FpbjohMCxhdWRpb0dhaW5MZXZlbDoyfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9byhuKDEpKSxyPW8obigyKSksYT1vKG4oMTMpKSxzPW8obig2KSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAsci5kZWZhdWx0KSh1LG51bGwsW3trZXk6ImdldENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm57Z2xvYmFsVGFnOnMuZGVmYXVsdC5HTE9CQUxfVEFHLGZvcmNlR2xvYmFsVGFnOnMuZGVmYXVsdC5GT1JDRV9HTE9CQUxfVEFHLGVuYWJsZVZlcmJvc2U6cy5kZWZhdWx0LkVOQUJMRV9WRVJCT1NFLGVuYWJsZURlYnVnOnMuZGVmYXVsdC5FTkFCTEVfREVCVUcsZW5hYmxlSW5mbzpzLmRlZmF1bHQuRU5BQkxFX0lORk8sZW5hYmxlV2FybjpzLmRlZmF1bHQuRU5BQkxFX1dBUk4sZW5hYmxlRXJyb3I6cy5kZWZhdWx0LkVOQUJMRV9FUlJPUixlbmFibGVDYWxsYmFjazpzLmRlZmF1bHQuRU5BQkxFX0NBTExCQUNLfX19LHtrZXk6ImFwcGx5Q29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtzLmRlZmF1bHQuR0xPQkFMX1RBRz1lLmdsb2JhbFRhZyxzLmRlZmF1bHQuRk9SQ0VfR0xPQkFMX1RBRz1lLmZvcmNlR2xvYmFsVGFnLHMuZGVmYXVsdC5FTkFCTEVfVkVSQk9TRT1lLmVuYWJsZVZlcmJvc2Uscy5kZWZhdWx0LkVOQUJMRV9ERUJVRz1lLmVuYWJsZURlYnVnLHMuZGVmYXVsdC5FTkFCTEVfSU5GTz1lLmVuYWJsZUluZm8scy5kZWZhdWx0LkVOQUJMRV9XQVJOPWUuZW5hYmxlV2FybixzLmRlZmF1bHQuRU5BQkxFX0VSUk9SPWUuZW5hYmxlRXJyb3Iscy5kZWZhdWx0LkVOQUJMRV9DQUxMQkFDSz1lLmVuYWJsZUNhbGxiYWNrfX0se2tleToiX25vdGlmeUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0PXUuZW1pdHRlcjswPHQubGlzdGVuZXJDb3VudCgiY2hhbmdlIikmJihlPXUuZ2V0Q29uZmlnKCksdC5lbWl0KCJjaGFuZ2UiLGUpKX19LHtrZXk6InJlZ2lzdGVyTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3UuZW1pdHRlci5hZGRMaXN0ZW5lcigiY2hhbmdlIixlKX19LHtrZXk6InJlbW92ZUxpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbihlKXt1LmVtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoImNoYW5nZSIsZSl9fSx7a2V5OiJhZGRMb2dMaXN0ZW5lciIsdmFsdWU6ZnVuY3Rpb24oZSl7cy5kZWZhdWx0LmVtaXR0ZXIuYWRkTGlzdGVuZXIoImxvZyIsZSksMDxzLmRlZmF1bHQuZW1pdHRlci5saXN0ZW5lckNvdW50KCJsb2ciKSYmKHMuZGVmYXVsdC5FTkFCTEVfQ0FMTEJBQ0s9ITAsdS5fbm90aWZ5Q2hhbmdlKCkpfX0se2tleToicmVtb3ZlTG9nTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3MuZGVmYXVsdC5lbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCJsb2ciLGUpLDA9PT1zLmRlZmF1bHQuZW1pdHRlci5saXN0ZW5lckNvdW50KCJsb2ciKSYmKHMuZGVmYXVsdC5FTkFCTEVfQ0FMTEJBQ0s9ITEsdS5fbm90aWZ5Q2hhbmdlKCkpfX0se2tleToiZm9yY2VHbG9iYWxUYWciLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHQuRk9SQ0VfR0xPQkFMX1RBR30sc2V0OmZ1bmN0aW9uKGUpe3MuZGVmYXVsdC5GT1JDRV9HTE9CQUxfVEFHPWUsdS5fbm90aWZ5Q2hhbmdlKCl9fSx7a2V5OiJnbG9iYWxUYWciLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHQuR0xPQkFMX1RBR30sc2V0OmZ1bmN0aW9uKGUpe3MuZGVmYXVsdC5HTE9CQUxfVEFHPWUsdS5fbm90aWZ5Q2hhbmdlKCl9fSx7a2V5OiJlbmFibGVBbGwiLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHQuRU5BQkxFX1ZFUkJPU0UmJnMuZGVmYXVsdC5FTkFCTEVfREVCVUcmJnMuZGVmYXVsdC5FTkFCTEVfSU5GTyYmcy5kZWZhdWx0LkVOQUJMRV9XQVJOJiZzLmRlZmF1bHQuRU5BQkxFX0VSUk9SfSxzZXQ6ZnVuY3Rpb24oZSl7cy5kZWZhdWx0LkVOQUJMRV9WRVJCT1NFPWUscy5kZWZhdWx0LkVOQUJMRV9ERUJVRz1lLHMuZGVmYXVsdC5FTkFCTEVfSU5GTz1lLHMuZGVmYXVsdC5FTkFCTEVfV0FSTj1lLHMuZGVmYXVsdC5FTkFCTEVfRVJST1I9ZSx1Ll9ub3RpZnlDaGFuZ2UoKX19LHtrZXk6ImVuYWJsZURlYnVnIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWZhdWx0LkVOQUJMRV9ERUJVR30sc2V0OmZ1bmN0aW9uKGUpe3MuZGVmYXVsdC5FTkFCTEVfREVCVUc9ZSx1Ll9ub3RpZnlDaGFuZ2UoKX19LHtrZXk6ImVuYWJsZVZlcmJvc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHQuRU5BQkxFX1ZFUkJPU0V9LHNldDpmdW5jdGlvbihlKXtzLmRlZmF1bHQuRU5BQkxFX1ZFUkJPU0U9ZSx1Ll9ub3RpZnlDaGFuZ2UoKX19LHtrZXk6ImVuYWJsZUluZm8iLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHQuRU5BQkxFX0lORk99LHNldDpmdW5jdGlvbihlKXtzLmRlZmF1bHQuRU5BQkxFX0lORk89ZSx1Ll9ub3RpZnlDaGFuZ2UoKX19LHtrZXk6ImVuYWJsZVdhcm4iLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHQuRU5BQkxFX1dBUk59LHNldDpmdW5jdGlvbihlKXtzLmRlZmF1bHQuRU5BQkxFX1dBUk49ZSx1Ll9ub3RpZnlDaGFuZ2UoKX19LHtrZXk6ImVuYWJsZUVycm9yIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcy5kZWZhdWx0LkVOQUJMRV9FUlJPUn0sc2V0OmZ1bmN0aW9uKGUpe3MuZGVmYXVsdC5FTkFCTEVfRVJST1I9ZSx1Ll9ub3RpZnlDaGFuZ2UoKX19XSkscj11O2Z1bmN0aW9uIHUoKXsoMCxpLmRlZmF1bHQpKHRoaXMsdSl9ci5lbWl0dGVyPW5ldyBhLmRlZmF1bHQsdC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPXIobigxKSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAscihuKDIpKS5kZWZhdWx0KShhLFt7a2V5OiJpc0NvbXBsZXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSExPT09dGhpcy5oYXNBdWRpb3x8ITA9PT10aGlzLmhhc0F1ZGlvJiZudWxsIT10aGlzLmF1ZGlvQ29kZWMmJm51bGwhPXRoaXMuYXVkaW9TYW1wbGVSYXRlJiZudWxsIT10aGlzLmF1ZGlvQ2hhbm5lbENvdW50LHQ9ITE9PT10aGlzLmhhc1ZpZGVvfHwhMD09PXRoaXMuaGFzVmlkZW8mJm51bGwhPXRoaXMudmlkZW9Db2RlYyYmbnVsbCE9dGhpcy53aWR0aCYmbnVsbCE9dGhpcy5oZWlnaHQmJm51bGwhPXRoaXMuZnBzJiZudWxsIT10aGlzLnByb2ZpbGUmJm51bGwhPXRoaXMubGV2ZWwmJm51bGwhPXRoaXMucmVmRnJhbWVzJiZudWxsIT10aGlzLmNocm9tYUZvcm1hdCYmbnVsbCE9dGhpcy5zYXJOdW0mJm51bGwhPXRoaXMuc2FyRGVuO3JldHVybiBudWxsIT10aGlzLm1pbWVUeXBlJiZudWxsIT10aGlzLmR1cmF0aW9uJiZudWxsIT10aGlzLm1ldGFkYXRhJiZudWxsIT10aGlzLmhhc0tleWZyYW1lc0luZGV4JiZlJiZ0fX0se2tleToiaXNTZWVrYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4hMD09PXRoaXMuaGFzS2V5ZnJhbWVzSW5kZXh9fSx7a2V5OiJnZXROZWFyZXN0S2V5ZnJhbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKG51bGw9PXRoaXMua2V5ZnJhbWVzSW5kZXgpcmV0dXJuIG51bGw7dmFyIHQ9dGhpcy5rZXlmcmFtZXNJbmRleCxlPXRoaXMuX3NlYXJjaCh0LnRpbWVzLGUpO3JldHVybntpbmRleDplLG1pbGxpc2Vjb25kczp0LnRpbWVzW2VdLGZpbGVwb3NpdGlvbjp0LmZpbGVwb3NpdGlvbnNbZV19fX0se2tleToiX3NlYXJjaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPTAscj1lLmxlbmd0aC0xLGE9MCxzPXI7Zm9yKHQ8ZVswXSYmKGk9MCxhPXMrMSk7YTw9czspe2lmKChuPWErTWF0aC5mbG9vcigocy1hKS8yKSk9PT1yfHx0Pj1lW25dJiZ0PGVbbisxXSl7aT1uO2JyZWFrfWVbbl08dD9hPW4rMTpzPW4tMX1yZXR1cm4gaX19XSksbj1hO2Z1bmN0aW9uIGEoKXsoMCxpLmRlZmF1bHQpKHRoaXMsYSksdGhpcy5taW1lVHlwZT1udWxsLHRoaXMuZHVyYXRpb249bnVsbCx0aGlzLmhhc0F1ZGlvPW51bGwsdGhpcy5oYXNWaWRlbz1udWxsLHRoaXMuYXVkaW9Db2RlYz1udWxsLHRoaXMudmlkZW9Db2RlYz1udWxsLHRoaXMuYXVkaW9EYXRhUmF0ZT1udWxsLHRoaXMudmlkZW9EYXRhUmF0ZT1udWxsLHRoaXMuYXVkaW9TYW1wbGVSYXRlPW51bGwsdGhpcy5hdWRpb0NoYW5uZWxDb3VudD1udWxsLHRoaXMud2lkdGg9bnVsbCx0aGlzLmhlaWdodD1udWxsLHRoaXMuZnBzPW51bGwsdGhpcy5wcm9maWxlPW51bGwsdGhpcy5sZXZlbD1udWxsLHRoaXMucmVmRnJhbWVzPW51bGwsdGhpcy5jaHJvbWFGb3JtYXQ9bnVsbCx0aGlzLnNhck51bT1udWxsLHRoaXMuc2FyRGVuPW51bGwsdGhpcy5tZXRhZGF0YT1udWxsLHRoaXMuc2VnbWVudHM9bnVsbCx0aGlzLnNlZ21lbnRDb3VudD1udWxsLHRoaXMuaGFzS2V5ZnJhbWVzSW5kZXg9bnVsbCx0aGlzLmtleWZyYW1lc0luZGV4PW51bGx9dC5kZWZhdWx0PW59LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZGVmYXVsdD17T0s6Ik9LIixGT1JNQVRfRVJST1I6IkZvcm1hdEVycm9yIixGT1JNQVRfVU5TVVBQT1JURUQ6IkZvcm1hdFVuc3VwcG9ydGVkIixDT0RFQ19VTlNVUFBPUlRFRDoiQ29kZWNVbnN1cHBvcnRlZCJ9fSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPSFuKDExKSYmIW4oMTkpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKDQ5KSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigxOCl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uKDIwKSxvPW4oMjEpLHU9bigyNTEpKCExKSxkPW4oNTIpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGk9byhlKSxyPTAsYT1bXTtmb3IobiBpbiBpKW4hPWQmJnMoaSxuKSYmYS5wdXNoKG4pO2Zvcig7dC5sZW5ndGg+cjspcyhpLG49dFtyKytdKSYmKH51KGEsbil8fGEucHVzaChuKSk7cmV0dXJuIGF9fSxmdW5jdGlvbihlLHQsbil7bj1uKDUpLmRvY3VtZW50O2UuZXhwb3J0cz1uJiZuLmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjApLHI9bigyMiksYT1uKDUyKSgiSUVfUFJPVE8iKSxzPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9cihlKSxpKGUsYSk/ZVthXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9zOm51bGx9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybnt2YWx1ZTp0LGRvbmU6ISFlfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDE2KTtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlLG4saSl7dHJ5e3JldHVybiBpP2UocihuKVswXSxuWzFdKTplKG4pfWNhdGNoKGUpe249dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09biYmcihuLmNhbGwodCkpLGV9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMzApLHI9big4KSgiaXRlcmF0b3IiKSxhPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihpLkFycmF5PT09ZXx8YVtyXT09PWUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNTYpLHI9big4KSgiaXRlcmF0b3IiKSxhPW4oMzApO2UuZXhwb3J0cz1uKDMpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGVbcl18fGVbIkBAaXRlcmF0b3IiXXx8YVtpKGUpXX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDE2KSxyPW4oMjgpLGE9big4KSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuLGU9aShlKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09ZXx8bnVsbD09KG49aShlKVthXSk/dDpyKG4pfX0sZnVuY3Rpb24oZSx0LG4pe2Z1bmN0aW9uIGkoKXt2YXIgZSx0PSt0aGlzO3kuaGFzT3duUHJvcGVydHkodCkmJihlPXlbdF0sZGVsZXRlIHlbdF0sZSgpKX1mdW5jdGlvbiByKGUpe2kuY2FsbChlLmRhdGEpfXZhciBhLHM9bigxNSksbz1uKDI1NiksdT1uKDc5KSxkPW4oNDkpLGw9big1KSxoPWwucHJvY2VzcyxjPWwuc2V0SW1tZWRpYXRlLF89bC5jbGVhckltbWVkaWF0ZSxmPWwuTWVzc2FnZUNoYW5uZWwsbT1sLkRpc3BhdGNoLHA9MCx5PXt9LHY9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7YyYmX3x8KGM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7KXQucHVzaChhcmd1bWVudHNbbisrXSk7cmV0dXJuIHlbKytwXT1mdW5jdGlvbigpe28oImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSx0KX0sYShwKSxwfSxfPWZ1bmN0aW9uKGUpe2RlbGV0ZSB5W2VdfSwicHJvY2VzcyI9PW4oMzIpKGgpP2E9ZnVuY3Rpb24oZSl7aC5uZXh0VGljayhzKGksZSwxKSl9Om0mJm0ubm93P2E9ZnVuY3Rpb24oZSl7bS5ub3cocyhpLGUsMSkpfTpmPyhmPShuPW5ldyBmKS5wb3J0MixuLnBvcnQxLm9ubWVzc2FnZT1yLGE9cyhmLnBvc3RNZXNzYWdlLGYsMSkpOmwuYWRkRXZlbnRMaXN0ZW5lciYmImZ1bmN0aW9uIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhbC5pbXBvcnRTY3JpcHRzPyhhPWZ1bmN0aW9uKGUpe2wucG9zdE1lc3NhZ2UoZSsiIiwiKiIpfSxsLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIsITEpKTphPXYgaW4gZCgic2NyaXB0Iik/ZnVuY3Rpb24oZSl7dS5hcHBlbmRDaGlsZChkKCJzY3JpcHQiKSlbdl09ZnVuY3Rpb24oKXt1LnJlbW92ZUNoaWxkKHRoaXMpLGkuY2FsbChlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQocyhpLGUsMSksMCl9KSxlLmV4cG9ydHM9e3NldDpjLGNsZWFyOl99fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJue2U6ITEsdjplKCl9fWNhdGNoKGUpe3JldHVybntlOiEwLHY6ZX19fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMTYpLHI9bigxMCksYT1uKDU4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihpKGUpLHIodCkmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O2U9YS5mKGUpO3JldHVybigwLGUucmVzb2x2ZSkodCksZS5wcm9taXNlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDUpLHI9bigzKSxhPW4oOSkscz1uKDExKSxvPW4oOCkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7ZT0oImZ1bmN0aW9uIj09dHlwZW9mIHJbZV0/cjppKVtlXTtzJiZlJiYhZVtvXSYmYS5mKGUsbyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzfX0pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBhPW4oOCkoIml0ZXJhdG9yIikscz0hMTt0cnl7dmFyIGk9WzddW2FdKCk7aS5yZXR1cm49ZnVuY3Rpb24oKXtzPSEwfSxBcnJheS5mcm9tKGksZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhcylyZXR1cm4hMTt2YXIgbj0hMTt0cnl7dmFyIGk9WzddLHI9aVthXSgpO3IubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOm49ITB9fSxpW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHJ9LGUoaSl9Y2F0Y2goZSl7fXJldHVybiBufX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDI2MSksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigyNjUpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lm9Ub29sPXZvaWQgMDt2YXIgaT1yKG4oMSkpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIobigyKSkuZGVmYXVsdCkoYSxbe2tleToiJCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9L14oPzpccyooPFtcd1xXXSs+KVtePl0qfCMoW1x3LV0qKSkkLyxuPS9eKD86XHMqKDxbXHdcV10rPilbXj5dKnwuKFtcdy1dKikpJC87aWYodC50ZXN0KGUpKXt0PXQuZXhlYyhlKTtyZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodFsyXSl9aWYobi50ZXN0KGUpKXtmb3IodmFyIGk9bi5leGVjKGUpLHI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxhPVtdLHM9MCxvPXIubGVuZ3RoO3M8bztzKyspcltzXS5jbGFzc05hbWUubWF0Y2gobmV3IFJlZ0V4cCgiKFxcc3xeKSIraVsyXSsiKFxcc3wkKSIpKSYmYS5wdXNoKHJbc10pO3JldHVybiBhfX19LHtrZXk6ImRhdGVGb3JtYXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4saT17Ik0rIjplLmdldE1vbnRoKCkrMSwiZCsiOmUuZ2V0RGF0ZSgpLCJoKyI6ZS5nZXRIb3VycygpLCJtKyI6ZS5nZXRNaW51dGVzKCksInMrIjplLmdldFNlY29uZHMoKSwicSsiOk1hdGguZmxvb3IoKGUuZ2V0TW9udGgoKSszKS8zKSxTOmUuZ2V0TWlsbGlzZWNvbmRzKCl9O2ZvcihuIGluLyh5KykvLnRlc3QodCkmJih0PXQucmVwbGFjZShSZWdFeHAuJDEsKGUuZ2V0RnVsbFllYXIoKSsiIikuc3Vic3RyKDQtUmVnRXhwLiQxLmxlbmd0aCkpKSxpKW5ldyBSZWdFeHAoIigiK24rIikiKS50ZXN0KHQpJiYodD10LnJlcGxhY2UoUmVnRXhwLiQxLDE9PT1SZWdFeHAuJDEubGVuZ3RoP2lbbl06KCIwMCIraVtuXSkuc3Vic3RyKCgiIitpW25dKS5sZW5ndGgpKSk7cmV0dXJuIHR9fSx7a2V5OiJkb3dubG9hZEZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZTtlIGluc3RhbmNlb2YgQmxvYnx8ZSBpbnN0YW5jZW9mIEZpbGV8fChuPW5ldyBCbG9iKFtlXSkpO2U9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobiksbj13aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO24uaHJlZj1lLG4uZG93bmxvYWQ9dDt0PWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpO3QuaW5pdEV2ZW50KCJjbGljayIsITAsITApLG4uZGlzcGF0Y2hFdmVudCh0KX19LHtrZXk6ImNyZWF0ZXhtbERvYyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT1bIk1TWE1MMi5ET01Eb2N1bWVudCIsIk1TWE1MMi5ET01Eb2N1bWVudC41LjAiLCJNU1hNTDIuRE9NRG9jdW1lbnQuNC4wIiwiTVNYTUwyLkRPTURvY3VtZW50LjMuMCIsIk1pY3Jvc29mdC5YbWxEb20iXSxuPTAsaT1lLmxlbmd0aDtuPGk7bisrKXRyeXt0PW5ldyBBY3RpdmVYT2JqZWN0KGVbbl0pO2JyZWFrfWNhdGNoKGUpe3Q9ZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoIiIsIiIsbnVsbCk7YnJlYWt9cmV0dXJuIHQuYXN5bmM9ImZhbHNlIix0fX0se2tleToicGFyc2VYbWxGcm9tU3RyIix2YWx1ZTpmdW5jdGlvbihlKXtpZihudWxsPT09ZXx8IiI9PT1lKXJldHVybiBudWxsO3ZhciB0PXRoaXMuY3JlYXRleG1sRG9jKCk7cmV0dXJuIk5ldHNjYXBlIj09PW5hdmlnYXRvci5hcHBOYW1lfHwiT3BlcmEiPT09bmF2aWdhdG9yLmFwcE5hbWU/dD0obmV3IERPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGUsInRleHQveG1sIik6dC5sb2FkWE1MKGUpLHR9fSx7a2V5OiJlbmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4saSxyLGEscyxvPSIiLHU9MDtmb3IoZT10aGlzLl91dGY4X2VuY29kZShlKTt1PGUubGVuZ3RoOylpPShzPWUuY2hhckNvZGVBdCh1KyspKT4+MixyPSgzJnMpPDw0fCh0PWUuY2hhckNvZGVBdCh1KyspKT4+NCxhPSgxNSZ0KTw8Mnwobj1lLmNoYXJDb2RlQXQodSsrKSk+PjYscz02MyZuLGlzTmFOKHQpP2E9cz02NDppc05hTihuKSYmKHM9NjQpLG89byt0aGlzLl9rZXlTdHIuY2hhckF0KGkpK3RoaXMuX2tleVN0ci5jaGFyQXQocikrdGhpcy5fa2V5U3RyLmNoYXJBdChhKSt0aGlzLl9rZXlTdHIuY2hhckF0KHMpO3JldHVybiBvfX0se2tleToiZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLGkscixhLHMsbz0iIix1PTA7Zm9yKGU9ZS5yZXBsYWNlKC9bXkEtWmEtejAtOSsvPV0vZywiIik7dTxlLmxlbmd0aDspaT10aGlzLl9rZXlTdHIuaW5kZXhPZihlLmNoYXJBdCh1KyspKSx0PSgxNSYocj10aGlzLl9rZXlTdHIuaW5kZXhPZihlLmNoYXJBdCh1KyspKSkpPDw0fChhPXRoaXMuX2tleVN0ci5pbmRleE9mKGUuY2hhckF0KHUrKykpKT4+MixuPSgzJmEpPDw2fChzPXRoaXMuX2tleVN0ci5pbmRleE9mKGUuY2hhckF0KHUrKykpKSxvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGk8PDJ8cj4+NCksNjQhPT1hJiYobys9U3RyaW5nLmZyb21DaGFyQ29kZSh0KSksNjQhPT1zJiYobys9U3RyaW5nLmZyb21DaGFyQ29kZShuKSk7cmV0dXJuIG89dGhpcy5fdXRmOF9kZWNvZGUobyl9fSx7a2V5OiJfdXRmOF9lbmNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC9cclxuL2csIlxuIik7Zm9yKHZhciB0PSIiLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZS5jaGFyQ29kZUF0KG4pO2k8MTI4P3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoaSk6KDEyNzxpJiZpPDIwNDg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShpPj42fDE5Mik6KHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaT4+MTJ8MjI0KSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGk+PjYmNjN8MTI4KSksdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg2MyZpfDEyOCkpfXJldHVybiB0fX0se2tleToiX3V0ZjhfZGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixpPTAscj0wLGE9MDtpPGUubGVuZ3RoOykocj1lLmNoYXJDb2RlQXQoaSkpPDEyOD8obis9U3RyaW5nLmZyb21DaGFyQ29kZShyKSxpKyspOjE5MTxyJiZyPDIyND8oYT1lLmNoYXJDb2RlQXQoaSsxKSxuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZyKTw8Nnw2MyZhKSxpKz0yKTooYT1lLmNoYXJDb2RlQXQoaSsxKSx0PWUuY2hhckNvZGVBdChpKzIpLG4rPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JnIpPDwxMnwoNjMmYSk8PDZ8NjMmdCksaSs9Myk7cmV0dXJuIG59fSx7a2V5OiJpc0ZpcmVmb3giLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9ITEsdD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksbj0iIjtyZXR1cm4gdC5tYXRjaCgvZmlyZWZveFwvKFtcZC5dKykvKSYmKG49dC5tYXRjaCgvZmlyZWZveFwvKFtcZC5dKykvKVsxXSwtMTxwYXJzZUludChuLnNwbGl0KCIuIilbMF0sMTApJiYoZT0hMCkpLGV9fSx7a2V5OiJpc1NhZmFyaSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0hMSx0PW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSxuPSIiO3JldHVybiB0Lm1hdGNoKC92ZXJzaW9uXC8oW1xkLl0rKS5zYWZhcmkuLykmJihuPXQubWF0Y2goL3ZlcnNpb25cLyhbXGQuXSspLnNhZmFyaS4vKVsxXSwtMTxwYXJzZUludChuLnNwbGl0KCIuIilbMF0sMTApJiYoZT0hMCkpLGV9fSx7a2V5OiJpc0VkZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuLTE8bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImVkZ2UiKX19LHtrZXk6ImRhdGFVUkx0b0Jsb2IiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KCIsIiksZT10WzBdLm1hdGNoKC86KC4qPyk7LylbMV0sbj1hdG9iKHRbMV0pLGk9bi5sZW5ndGgscj1uZXcgVWludDhBcnJheShpKTtpLS07KXJbaV09bi5jaGFyQ29kZUF0KGkpO3JldHVybiBuZXcgQmxvYihbcl0se3R5cGU6ZX0pfX0se2tleToiaW50VG9IZXhTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe2U9ZS50b1N0cmluZygxNik7cmV0dXJuIGU9MT09PWUubGVuZ3RoPyIwIitlOmV9fSx7a2V5OiJ0aHJvdHRsZSIsdmFsdWU6ZnVuY3Rpb24obil7ZnVuY3Rpb24gaSgpe2w9dS5ub1N0YXJ0PzA6K25ldyBEYXRlLGQ9bnVsbCxzPW4uYXBwbHkocixhKSxkfHwocj1hPW51bGwpfXZhciByLGEscyxvPTE8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxNix1PTI8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7bm9TdGFydDohMSxub0VuZDohMX0sZD1udWxsLGw9MDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT0rbmV3IERhdGU7IWwmJnUubm9TdGFydCYmKGw9ZSk7dmFyIHQ9by0oZS1sKTtyZXR1cm4gcj10aGlzLGE9YXJndW1lbnRzLHQ8PTB8fG88dD8oY2xlYXJUaW1lb3V0KGQpLGQ9bnVsbCxsPWUscz1uLmFwcGx5KHIsYSksZHx8KHI9YT1udWxsKSk6ZHx8dS5ub0VuZHx8KGQ9c2V0VGltZW91dChpLHQpKSxzfX19XSksbj1hO2Z1bmN0aW9uIGEoKXsoMCxpLmRlZmF1bHQpKHRoaXMsYSksdGhpcy5fa2V5U3RyPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSJ9dC5vVG9vbD1uZXcgbn0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjY4KSxyPW4oMjY5KSxuPXI7bi52MT1pLG4udjQ9cixlLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0KXt2YXIgbixpLHI9InVuZGVmaW5lZCIhPXR5cGVvZiBjcnlwdG8mJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMmJmNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pfHwidW5kZWZpbmVkIiE9dHlwZW9mIG1zQ3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pO3I/KG49bmV3IFVpbnQ4QXJyYXkoMTYpLGUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiByKG4pLG59KTooaT1uZXcgQXJyYXkoMTYpLGUuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgZSx0PTA7dDwxNjt0KyspMD09KDMmdCkmJihlPTQyOTQ5NjcyOTYqTWF0aC5yYW5kb20oKSksaVt0XT1lPj4+KCgzJnQpPDwzKSYyNTU7cmV0dXJuIGl9KX0sZnVuY3Rpb24oZSx0KXtmb3IodmFyIGk9W10sbj0wO248MjU2OysrbilpW25dPShuKzI1NikudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHwwO3JldHVyblsodD1pKVtlW24rK11dLHRbZVtuKytdXSx0W2VbbisrXV0sdFtlW24rK11dLCItIix0W2VbbisrXV0sdFtlW24rK11dLCItIix0W2VbbisrXV0sdFtlW24rK11dLCItIix0W2VbbisrXV0sdFtlW24rK11dLCItIix0W2VbbisrXV0sdFtlW24rK11dLHRbZVtuKytdXSx0W2VbbisrXV0sdFtlW24rK11dLHRbZVsrbl1dXS5qb2luKCIiKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDMyKTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09aShlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDc4KSxyPW4oNTQpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gaShlLHIpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cyhuKDEpKSxyPXMobigyKSksYT1zKG4oMCkpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIuZGVmYXVsdCkobyxbe2tleToiRCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLl9jb25maWcub3BlbkRlYnVnJiYoZT1jb25zb2xlKS5kZWJ1Zy5hcHBseShlLFsiWyIrdGhpcy5UQUcrIl0gJWMiKygwLGEuZGVmYXVsdCkoKS5mb3JtYXQoIllZWVktTU0tREQgSEg6bW06c3MuU1NTIikrIiVjIiwiY29sb3I6IGJsdWUiLCJjb2xvcjogYmxhY2siXS5jb25jYXQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpfX0se2tleToiSSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTsoZT1jb25zb2xlKS5pbmZvLmFwcGx5KGUsWyJbIit0aGlzLlRBRysiXSAlYyIrKDAsYS5kZWZhdWx0KSgpLmZvcm1hdCgiWVlZWS1NTS1ERCBISDptbTpzcy5TU1MiKSsiJWMiLCJjb2xvcjogYmx1ZSIsImNvbG9yOiBibGFjayJdLmNvbmNhdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSl9fSx7a2V5OiJXIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlOyhlPWNvbnNvbGUpLndhcm4uYXBwbHkoZSxbIlsiK3RoaXMuVEFHKyJdICVjIisoMCxhLmRlZmF1bHQpKCkuZm9ybWF0KCJZWVlZLU1NLUREIEhIOm1tOnNzLlNTUyIpKyIlYyIsImNvbG9yOiBibHVlIiwiY29sb3I6IGJsYWNrIl0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX19LHtrZXk6IkUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7KGU9Y29uc29sZSkuZXJyb3IuYXBwbHkoZSxbIlsiK3RoaXMuVEFHKyJdICVjIisoMCxhLmRlZmF1bHQpKCkuZm9ybWF0KCJZWVlZLU1NLUREIEhIOm1tOnNzLlNTUyIpKyIlYyIsImNvbG9yOiBibHVlIiwiY29sb3I6IGJsYWNrIl0uY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKX19XSkscj1vO2Z1bmN0aW9uIG8oZSl7KDAsaS5kZWZhdWx0KSh0aGlzLG8pLHRoaXMuX2J1cz1lLHRoaXMuVEFHPWUuVEFHfHwiRGVidWciLHRoaXMuX2NvbmZpZz1lLl9jb25maWd8fGUub3B0aW9uc3x8e319dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dvX0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1lcmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihlKXtyZXR1cm4vXm5tJC9pLnRlc3QoZSl9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDEyKXJldHVybiBuPyJ2bSI6IlZNIjtlbHNlIHJldHVybiBuPyJubSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVmFuZGFnIG9tXSBMVCIsbmV4dERheToiW03DtHJlIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW0dpc3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbTGFhc10gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvb3IgJXMiLHBhc3Q6IiVzIGdlbGVkZSIsczoiJ24gcGFhciBzZWtvbmRlcyIsc3M6IiVkIHNla29uZGVzIixtOiInbiBtaW51dXQiLG1tOiIlZCBtaW51dGUiLGg6IiduIHV1ciIsaGg6IiVkIHVyZSIsZDoiJ24gZGFnIixkZDoiJWQgZGFlIixNOiInbiBtYWFuZCIsTU06IiVkIG1hYW5kZSIseToiJ24gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU9PT0xfHxlPT09OHx8ZT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6ItmhIiwyOiLZoiIsMzoi2aMiLDQ6ItmkIiw1OiLZpSIsNjoi2aYiLDc6ItmnIiw4OiLZqCIsOToi2akiLDA6ItmgIn0sbj17ItmhIjoiMSIsItmiIjoiMiIsItmjIjoiMyIsItmkIjoiNCIsItmlIjoiNSIsItmmIjoiNiIsItmnIjoiNyIsItmoIjoiOCIsItmpIjoiOSIsItmgIjoiMCJ9LG89ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0wPzA6ZT09PTE/MTplPT09Mj8yOmUlMTAwPj0zJiZlJTEwMDw9MTA/MzplJTEwMD49MTE/NDo1fSx1PXtzOlsi2KPZgtmEINmF2YYg2KvYp9mG2YrYqSIsItir2KfZhtmK2Kkg2YjYp9it2K/YqSIsWyLYq9in2YbZitiq2KfZhiIsItir2KfZhtmK2KrZitmGIl0sIiVkINir2YjYp9mGIiwiJWQg2KvYp9mG2YrYqSIsIiVkINir2KfZhtmK2KkiXSxtOlsi2KPZgtmEINmF2YYg2K/ZgtmK2YLYqSIsItiv2YLZitmC2Kkg2YjYp9it2K/YqSIsWyLYr9mC2YrZgtiq2KfZhiIsItiv2YLZitmC2KrZitmGIl0sIiVkINiv2YLYp9im2YIiLCIlZCDYr9mC2YrZgtipIiwiJWQg2K/ZgtmK2YLYqSJdLGg6WyLYo9mC2YQg2YXZhiDYs9in2LnYqSIsItiz2KfYudipINmI2KfYrdiv2KkiLFsi2LPYp9i52KrYp9mGIiwi2LPYp9i52KrZitmGIl0sIiVkINiz2KfYudin2KoiLCIlZCDYs9in2LnYqSIsIiVkINiz2KfYudipIl0sZDpbItij2YLZhCDZhdmGINmK2YjZhSIsItmK2YjZhSDZiNin2K3YryIsWyLZitmI2YXYp9mGIiwi2YrZiNmF2YrZhiJdLCIlZCDYo9mK2KfZhSIsIiVkINmK2YjZhdmL2KciLCIlZCDZitmI2YUiXSxNOlsi2KPZgtmEINmF2YYg2LTZh9ixIiwi2LTZh9ixINmI2KfYrdivIixbIti02YfYsdin2YYiLCLYtNmH2LHZitmGIl0sIiVkINij2LTZh9ixIiwiJWQg2LTZh9ix2KciLCIlZCDYtNmH2LEiXSx5Olsi2KPZgtmEINmF2YYg2LnYp9mFIiwi2LnYp9mFINmI2KfYrdivIixbIti52KfZhdin2YYiLCLYudin2YXZitmGIl0sIiVkINij2LnZiNin2YUiLCIlZCDYudin2YXZi9inIiwiJWQg2LnYp9mFIl19LGk9ZnVuY3Rpb24ocyl7cmV0dXJuIGZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPW8oZSksYT11W3NdW28oZSldO2lmKHI9PT0yKWE9YVt0PzA6MV07cmV0dXJuIGEucmVwbGFjZSgvJWQvaSxlKX19LHI9WyLZitmG2KfZitixIiwi2YHYqNix2KfZitixIiwi2YXYp9ix2LMiLCLYo9io2LHZitmEIiwi2YXYp9mK2YgiLCLZitmI2YbZitmIIiwi2YrZiNmE2YrZiCIsItij2LrYs9i32LMiLCLYs9io2KrZhdio2LEiLCLYo9mD2KrZiNio2LEiLCLZhtmI2YHZhdio2LEiLCLYr9mK2LPZhdio2LEiXSxhO2UuZGVmaW5lTG9jYWxlKCJhciIse21vbnRoczpyLG1vbnRoc1Nob3J0OnIsd2Vla2RheXM6Itin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2K1f2YZf2Ktf2LFf2K5f2Kxf2LMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC/igI9NL+KAj1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9i1fNmFLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLZhSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwxMilyZXR1cm4i2LUiO2Vsc2UgcmV0dXJuItmFIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUIixuZXh0RGF5OiJb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQiLG5leHRXZWVrOiJkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbGFzdERheToiW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLYqNi52K8gJXMiLHBhc3Q6ItmF2YbYsCAlcyIsczppKCJzIiksc3M6aSgicyIpLG06aSgibSIpLG1tOmkoIm0iKSxoOmkoImgiKSxoaDppKCJoIiksZDppKCJkIiksZGQ6aSgiZCIpLE06aSgiTSIpLE1NOmkoIk0iKSx5OmkoInkiKSx5eTppKCJ5Iil9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkucmVwbGFjZSgvLC9nLCLYjCIpfSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgbz1mdW5jdGlvbihlKXtyZXR1cm4gZT09PTA/MDplPT09MT8xOmU9PT0yPzI6ZSUxMDA+PTMmJmUlMTAwPD0xMD8zOmUlMTAwPj0xMT80OjV9LHU9e3M6WyLYo9mC2YQg2YXZhiDYq9in2YbZitipIiwi2KvYp9mG2YrYqSDZiNin2K3Yr9ipIixbItir2KfZhtmK2KrYp9mGIiwi2KvYp9mG2YrYqtmK2YYiXSwiJWQg2KvZiNin2YYiLCIlZCDYq9in2YbZitipIiwiJWQg2KvYp9mG2YrYqSJdLG06WyLYo9mC2YQg2YXZhiDYr9mC2YrZgtipIiwi2K/ZgtmK2YLYqSDZiNin2K3Yr9ipIixbItiv2YLZitmC2KrYp9mGIiwi2K/ZgtmK2YLYqtmK2YYiXSwiJWQg2K/Zgtin2KbZgiIsIiVkINiv2YLZitmC2KkiLCIlZCDYr9mC2YrZgtipIl0saDpbItij2YLZhCDZhdmGINiz2KfYudipIiwi2LPYp9i52Kkg2YjYp9it2K/YqSIsWyLYs9in2LnYqtin2YYiLCLYs9in2LnYqtmK2YYiXSwiJWQg2LPYp9i52KfYqiIsIiVkINiz2KfYudipIiwiJWQg2LPYp9i52KkiXSxkOlsi2KPZgtmEINmF2YYg2YrZiNmFIiwi2YrZiNmFINmI2KfYrdivIixbItmK2YjZhdin2YYiLCLZitmI2YXZitmGIl0sIiVkINij2YrYp9mFIiwiJWQg2YrZiNmF2YvYpyIsIiVkINmK2YjZhSJdLE06WyLYo9mC2YQg2YXZhiDYtNmH2LEiLCLYtNmH2LEg2YjYp9it2K8iLFsi2LTZh9ix2KfZhiIsIti02YfYsdmK2YYiXSwiJWQg2KPYtNmH2LEiLCIlZCDYtNmH2LHYpyIsIiVkINi02YfYsSJdLHk6WyLYo9mC2YQg2YXZhiDYudin2YUiLCLYudin2YUg2YjYp9it2K8iLFsi2LnYp9mF2KfZhiIsIti52KfZhdmK2YYiXSwiJWQg2KPYudmI2KfZhSIsIiVkINi52KfZhdmL2KciLCIlZCDYudin2YUiXX0sdD1mdW5jdGlvbihzKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9byhlKSxhPXVbc11bbyhlKV07aWYocj09PTIpYT1hW3Q/MDoxXTtyZXR1cm4gYS5yZXBsYWNlKC8lZC9pLGUpfX0sbj1bItis2KfZhtmB2YoiLCLZgdmK2YHYsdmKIiwi2YXYp9ix2LMiLCLYo9mB2LHZitmEIiwi2YXYp9mKIiwi2KzZiNin2YYiLCLYrNmI2YrZhNmK2KkiLCLYo9mI2KoiLCLYs9io2KrZhdio2LEiLCLYo9mD2KrZiNio2LEiLCLZhtmI2YHZhdio2LEiLCLYr9mK2LPZhdio2LEiXSxpO2UuZGVmaW5lTG9jYWxlKCJhci1keiIse21vbnRoczpuLG1vbnRoc1Nob3J0Om4sd2Vla2RheXM6Itin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2K1f2YZf2Ktf2LFf2K5f2Kxf2LMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC/igI9NL+KAj1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9i1fNmFLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLZhSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwxMilyZXR1cm4i2LUiO2Vsc2UgcmV0dXJuItmFIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYp9mE2YrZiNmFINi52YbYryDYp9mE2LPYp9i52KldIExUIixuZXh0RGF5OiJb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQiLG5leHRXZWVrOiJkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbGFzdERheToiW9ij2YXYsyDYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLYqNi52K8gJXMiLHBhc3Q6ItmF2YbYsCAlcyIsczp0KCJzIiksc3M6dCgicyIpLG06dCgibSIpLG1tOnQoIm0iKSxoOnQoImgiKSxoaDp0KCJoIiksZDp0KCJkIiksZGQ6dCgiZCIpLE06dCgiTSIpLE1NOnQoIk0iKSx5OnQoInkiKSx5eTp0KCJ5Iil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvLC9nLCLYjCIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJhci1rdyIse21vbnRoczoi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi2KfZhNij2K3Yr1/Yp9mE2KXYqtmG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Itin2K3Yr1/Yp9iq2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLYrV/Zhl/Yq1/YsV/Yrl/YrF/YsyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLG5leHREYXk6IlvYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLG5leHRXZWVrOiJkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbGFzdERheToiW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLZgdmKICVzIixwYXN0OiLZhdmG2LAgJXMiLHM6Itir2YjYp9mGIixzczoiJWQg2KvYp9mG2YrYqSIsbToi2K/ZgtmK2YLYqSIsbW06IiVkINiv2YLYp9im2YIiLGg6Itiz2KfYudipIixoaDoiJWQg2LPYp9i52KfYqiIsZDoi2YrZiNmFIixkZDoiJWQg2KPZitin2YUiLE06Iti02YfYsSIsTU06IiVkINij2LTZh9ixIix5OiLYs9mG2KkiLHl5OiIlZCDYs9mG2YjYp9iqIn0sd2Vlazp7ZG93OjAsZG95OjEyfX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6IjEiLDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxvPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09MD8wOmU9PT0xPzE6ZT09PTI/MjplJTEwMD49MyYmZSUxMDA8PTEwPzM6ZSUxMDA+PTExPzQ6NX0sdT17czpbItij2YLZhCDZhdmGINir2KfZhtmK2KkiLCLYq9in2YbZitipINmI2KfYrdiv2KkiLFsi2KvYp9mG2YrYqtin2YYiLCLYq9in2YbZitiq2YrZhiJdLCIlZCDYq9mI2KfZhiIsIiVkINir2KfZhtmK2KkiLCIlZCDYq9in2YbZitipIl0sbTpbItij2YLZhCDZhdmGINiv2YLZitmC2KkiLCLYr9mC2YrZgtipINmI2KfYrdiv2KkiLFsi2K/ZgtmK2YLYqtin2YYiLCLYr9mC2YrZgtiq2YrZhiJdLCIlZCDYr9mC2KfYptmCIiwiJWQg2K/ZgtmK2YLYqSIsIiVkINiv2YLZitmC2KkiXSxoOlsi2KPZgtmEINmF2YYg2LPYp9i52KkiLCLYs9in2LnYqSDZiNin2K3Yr9ipIixbItiz2KfYudiq2KfZhiIsItiz2KfYudiq2YrZhiJdLCIlZCDYs9in2LnYp9iqIiwiJWQg2LPYp9i52KkiLCIlZCDYs9in2LnYqSJdLGQ6WyLYo9mC2YQg2YXZhiDZitmI2YUiLCLZitmI2YUg2YjYp9it2K8iLFsi2YrZiNmF2KfZhiIsItmK2YjZhdmK2YYiXSwiJWQg2KPZitin2YUiLCIlZCDZitmI2YXZi9inIiwiJWQg2YrZiNmFIl0sTTpbItij2YLZhCDZhdmGINi02YfYsSIsIti02YfYsSDZiNin2K3YryIsWyLYtNmH2LHYp9mGIiwi2LTZh9ix2YrZhiJdLCIlZCDYo9i02YfYsSIsIiVkINi02YfYsdinIiwiJWQg2LTZh9ixIl0seTpbItij2YLZhCDZhdmGINi52KfZhSIsIti52KfZhSDZiNin2K3YryIsWyLYudin2YXYp9mGIiwi2LnYp9mF2YrZhiJdLCIlZCDYo9i52YjYp9mFIiwiJWQg2LnYp9mF2YvYpyIsIiVkINi52KfZhSJdfSxuPWZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1vKGUpLGE9dVtzXVtvKGUpXTtpZihyPT09MilhPWFbdD8wOjFdO3JldHVybiBhLnJlcGxhY2UoLyVkL2ksZSl9fSxpPVsi2YrZhtin2YrYsSIsItmB2KjYsdin2YrYsSIsItmF2KfYsdizIiwi2KPYqNix2YrZhCIsItmF2KfZitmIIiwi2YrZiNmG2YrZiCIsItmK2YjZhNmK2YgiLCLYo9i62LPYt9izIiwi2LPYqNiq2YXYqNixIiwi2KPZg9iq2YjYqNixIiwi2YbZiNmB2YXYqNixIiwi2K/Zitiz2YXYqNixIl0scjtlLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250aHM6aSxtb250aHNTaG9ydDppLHdlZWtkYXlzOiLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItitX9mGX9irX9ixX9iuX9isX9izIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQv4oCPTS/igI9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/YtXzZhS8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4i2YUiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIti1IjtlbHNlIHJldHVybiLZhSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsbmV4dERheToiW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUIixuZXh0V2VlazoiZGRkZCBb2LnZhtivINin2YTYs9in2LnYqV0gTFQiLGxhc3REYXk6IlvYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQiLGxhc3RXZWVrOiJkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2KjYudivICVzIixwYXN0OiLZhdmG2LAgJXMiLHM6bigicyIpLHNzOm4oInMiKSxtOm4oIm0iKSxtbTpuKCJtIiksaDpuKCJoIiksaGg6bigiaCIpLGQ6bigiZCIpLGRkOm4oImQiKSxNOm4oIk0iKSxNTTpuKCJNIikseTpuKCJ5IikseXk6bigieSIpfSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC/YjC9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pLnJlcGxhY2UoLywvZywi2IwiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImFyLW1hIix7bW9udGhzOiLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZil/ZitmI2YbZitmIX9mK2YjZhNmK2YjYsl/Yuti02Kpf2LTYqtmG2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmG2KjYsV/Yr9is2YbYqNixIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2KfYrdivX9in2KvZhtmK2YZf2KvZhNin2KvYp9ihX9in2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItitX9mGX9irX9ixX9iuX9isX9izIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dERheToiW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0RGF5OiJb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItmB2YogJXMiLHBhc3Q6ItmF2YbYsCAlcyIsczoi2KvZiNin2YYiLHNzOiIlZCDYq9in2YbZitipIixtOiLYr9mC2YrZgtipIixtbToiJWQg2K/Zgtin2KbZgiIsaDoi2LPYp9i52KkiLGhoOiIlZCDYs9in2LnYp9iqIixkOiLZitmI2YUiLGRkOiIlZCDYo9mK2KfZhSIsTToi2LTZh9ixIixNTToiJWQg2KPYtNmH2LEiLHk6Itiz2YbYqSIseXk6IiVkINiz2YbZiNin2KoifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLZoSIsMjoi2aIiLDM6ItmjIiw0OiLZpCIsNToi2aUiLDY6ItmmIiw3OiLZpyIsODoi2agiLDk6ItmpIiwwOiLZoCJ9LG49eyLZoSI6IjEiLCLZoiI6IjIiLCLZoyI6IjMiLCLZpCI6IjQiLCLZpSI6IjUiLCLZpiI6IjYiLCLZpyI6IjciLCLZqCI6IjgiLCLZqSI6IjkiLCLZoCI6IjAifSxpO2UuZGVmaW5lTG9jYWxlKCJhci1wcyIse21vbnRoczoi2YPYp9mG2YjZhiDYp9mE2KvYp9mG2Ypf2LTYqNin2Ldf2KLYsNin2LFf2YbZitiz2KfZhl/Yo9mK2ZHYp9ixX9it2LLZitix2KfZhl/YqtmF2ZHZiNiyX9ii2Khf2KPZitmE2YjZhF/Yqti02LHZiiDYp9mE2KPZiNmR2YRf2KrYtNix2YrZhiDYp9mE2KvYp9mG2Ypf2YPYp9mG2YjZhiDYp9mE2KPZiNmR2YQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItmD2aJf2LTYqNin2Ldf2KLYsNin2LFf2YbZitiz2KfZhl/Yo9mK2ZHYp9ixX9it2LLZitix2KfZhl/YqtmF2ZHZiNiyX9ii2Khf2KPZitmE2YjZhF/YqtmhX9iq2aJf2YPZoSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Itij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLYrV/Zhl/Yq1/YsV/Yrl/YrF/YsyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/YtXzZhS8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4i2YUiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIti1IjtlbHNlIHJldHVybiLZhSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhNmK2YjZhSDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dERheToiW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0RGF5OiJb2KPZhdizINi52YTZiSDYp9mE2LPYp9i52KldIExUIixsYXN0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItmB2YogJXMiLHBhc3Q6ItmF2YbYsCAlcyIsczoi2KvZiNin2YYiLHNzOiIlZCDYq9in2YbZitipIixtOiLYr9mC2YrZgtipIixtbToiJWQg2K/Zgtin2KbZgiIsaDoi2LPYp9i52KkiLGhoOiIlZCDYs9in2LnYp9iqIixkOiLZitmI2YUiLGRkOiIlZCDYo9mK2KfZhSIsTToi2LTZh9ixIixNTToiJWQg2KPYtNmH2LEiLHk6Itiz2YbYqSIseXk6IiVkINiz2YbZiNin2KoifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b2aPZpNml2abZp9mo2anZoF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pLnNwbGl0KCIiKS5yZXZlcnNlKCkuam9pbigiIikucmVwbGFjZSgvW9mh2aJdKD8hW1x1MDYyYVx1MDY0M10pL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KS5zcGxpdCgiIikucmV2ZXJzZSgpLmpvaW4oIiIpLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkucmVwbGFjZSgvLC9nLCLYjCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLZoSIsMjoi2aIiLDM6ItmjIiw0OiLZpCIsNToi2aUiLDY6ItmmIiw3OiLZpyIsODoi2agiLDk6ItmpIiwwOiLZoCJ9LG49eyLZoSI6IjEiLCLZoiI6IjIiLCLZoyI6IjMiLCLZpCI6IjQiLCLZpSI6IjUiLCLZpiI6IjYiLCLZpyI6IjciLCLZqCI6IjgiLCLZqSI6IjkiLCLZoCI6IjAifSxpO2UuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoi2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2YrZiF/ZitmI2YbZitmIX9mK2YjZhNmK2Yhf2KPYutiz2LfYs1/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItmK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mK2Yhf2YrZiNmG2YrZiF/ZitmI2YTZitmIX9ij2LrYs9i32LNf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KoiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItitX9mGX9irX9ixX9iuX9isX9izIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9i1fNmFLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLZhSI9PT1lfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwxMilyZXR1cm4i2LUiO2Vsc2UgcmV0dXJuItmFIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUIixuZXh0RGF5OiJb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUIixuZXh0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLGxhc3REYXk6IlvYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLGxhc3RXZWVrOiJkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2YHZiiAlcyIscGFzdDoi2YXZhtiwICVzIixzOiLYq9mI2KfZhiIsc3M6IiVkINir2KfZhtmK2KkiLG06Itiv2YLZitmC2KkiLG1tOiIlZCDYr9mC2KfYptmCIixoOiLYs9in2LnYqSIsaGg6IiVkINiz2KfYudin2KoiLGQ6ItmK2YjZhSIsZGQ6IiVkINij2YrYp9mFIixNOiLYtNmH2LEiLE1NOiIlZCDYo9i02YfYsSIseToi2LPZhtipIix5eToiJWQg2LPZhtmI2KfYqiJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkucmVwbGFjZSgvLC9nLCLYjCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJhci10biIse21vbnRoczoi2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEiLnNwbGl0KCJfIiksd2Vla2RheXM6Itin2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi2K1f2YZf2Ktf2LFf2K5f2Kxf2LMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUIixuZXh0RGF5OiJb2LrYr9inINi52YTZiSDYp9mE2LPYp9i52KldIExUIixuZXh0V2VlazoiZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLGxhc3REYXk6IlvYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQiLGxhc3RXZWVrOiJkZGRkIFvYudmE2Ykg2KfZhNiz2KfYudipXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2YHZiiAlcyIscGFzdDoi2YXZhtiwICVzIixzOiLYq9mI2KfZhiIsc3M6IiVkINir2KfZhtmK2KkiLG06Itiv2YLZitmC2KkiLG1tOiIlZCDYr9mC2KfYptmCIixoOiLYs9in2LnYqSIsaGg6IiVkINiz2KfYudin2KoiLGQ6ItmK2YjZhSIsZGQ6IiVkINij2YrYp9mFIixNOiLYtNmH2LEiLE1NOiIlZCDYo9i02YfYsSIseToi2LPZhtipIix5eToiJWQg2LPZhtmI2KfYqiJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHI9ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoiLW5jaSIsNTA6Ii1uY2kiLDM6Ii3DvG5jw7wiLDQ6Ii3DvG5jw7wiLDEwMDoiLcO8bmPDvCIsNjoiLW5jxLEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii3EsW5jxLEiLDkwOiItxLFuY8SxIn0sdDtlLmRlZmluZUxvY2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lfZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnTJmXNpX8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLFfw4fJmXLFn8mZbmLJmV9Dw7xtyZkgYXjFn2FtxLFfQ8O8bcmZX8WeyZluYsmZIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkJhel9CekVfw4dBeF/Dh8mZcl9DQXhfQ8O8bV/FnsmZbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQnpfQkVfw4dBX8OHyZlfQ0FfQ8O8X8WeyZkiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnw7xuIHNhYXRdIExUIixuZXh0RGF5OiJbc2FiYWggc2FhdF0gTFQiLG5leHRXZWVrOiJbZ8mZbMmZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2TDvG7JmW5dIExUIixsYXN0V2VlazoiW2tlw6fJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyDJmXZ2yZlsIixzOiJiaXIgbmXDp8mZIHNhbml5yZkiLHNzOiIlZCBzYW5pecmZIixtOiJiaXIgZMmZcWlxyZkiLG1tOiIlZCBkyZlxaXHJmSIsaDoiYmlyIHNhYXQiLGhoOiIlZCBzYWF0IixkOiJiaXIgZ8O8biIsZGQ6IiVkIGfDvG4iLE06ImJpciBheSIsTU06IiVkIGF5Iix5OiJiaXIgaWwiLHl5OiIlZCBpbCJ9LG1lcmlkaWVtUGFyc2U6L2dlY8mZfHPJmWjJmXJ8Z8O8bmTDvHp8YXjFn2FtLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybi9eKGfDvG5kw7x6fGF4xZ9hbSkkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTw0KXJldHVybiJnZWPJmSI7ZWxzZSBpZihlPDEyKXJldHVybiJzyZloyZlyIjtlbHNlIGlmKGU8MTcpcmV0dXJuImfDvG5kw7x6IjtlbHNlIHJldHVybiJheMWfYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LSjEsW5jxLF8aW5jaXxuY2l8w7xuY8O8fG5jxLF8dW5jdSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7aWYoZT09PTApcmV0dXJuIGUrIi3EsW5jxLEiO3ZhciB0PWUlMTAsbj1lJTEwMC10LGk9ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyhyW3RdfHxyW25dfHxyW2ldKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiByKGUsdCl7dmFyIG49ZS5zcGxpdCgiXyIpO3JldHVybiB0JTEwPT09MSYmdCUxMDAhPT0xMT9uWzBdOnQlMTA+PTImJnQlMTA8PTQmJih0JTEwMDwxMHx8dCUxMDA+PTIwKT9uWzFdOm5bMl19ZnVuY3Rpb24gdChlLHQsbil7dmFyIGk9e3NzOnQ/ItGB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCI6ItGB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCIsbW06dD8i0YXQstGW0LvRltC90LBf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9Ijoi0YXQstGW0LvRltC90YNf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9IixoaDp0PyLQs9Cw0LTQt9GW0L3QsF/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0iOiLQs9Cw0LTQt9GW0L3Rg1/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0iLGRkOiLQtNC30LXQvdGMX9C00L3Rll/QtNC30ZHQvSIsTU06ItC80LXRgdGP0YZf0LzQtdGB0Y/RhtGLX9C80LXRgdGP0YbQsNGeIix5eToi0LPQvtC0X9Cz0LDQtNGLX9Cz0LDQtNC+0Z4ifTtpZihuPT09Im0iKXJldHVybiB0PyLRhdCy0ZbQu9GW0L3QsCI6ItGF0LLRltC70ZbQvdGDIjtlbHNlIGlmKG49PT0iaCIpcmV0dXJuIHQ/ItCz0LDQtNC30ZbQvdCwIjoi0LPQsNC00LfRltC90YMiO2Vsc2UgcmV0dXJuIGUrIiAiK3IoaVtuXSwrZSl9dmFyIG47ZS5kZWZpbmVMb2NhbGUoImJlIix7bW9udGhzOntmb3JtYXQ6ItGB0YLRg9C00LfQtdC90Y9f0LvRjtGC0LDQs9CwX9GB0LDQutCw0LLRltC60LBf0LrRgNCw0YHQsNCy0ZbQutCwX9GC0YDQsNGe0L3Rj1/Rh9GN0YDQstC10L3Rj1/Qu9GW0L/QtdC90Y9f0LbQvdGW0Z7QvdGPX9Cy0LXRgNCw0YHQvdGPX9C60LDRgdGC0YDRi9GH0L3RltC60LBf0LvRltGB0YLQsNC/0LDQtNCwX9GB0L3QtdC20L3RjyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLRgdGC0YPQtNC30LXQvdGMX9C70Y7RgtGLX9GB0LDQutCw0LLRltC6X9C60YDQsNGB0LDQstGW0Lpf0YLRgNCw0LLQtdC90Yxf0YfRjdGA0LLQtdC90Yxf0LvRltC/0LXQvdGMX9C20L3RltCy0LXQvdGMX9Cy0LXRgNCw0YHQtdC90Yxf0LrQsNGB0YLRgNGL0YfQvdGW0Lpf0LvRltGB0YLQsNC/0LDQtF/RgdC90LXQttCw0L3RjCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6ItGB0YLRg9C0X9C70Y7Rgl/RgdCw0Lpf0LrRgNCw0YFf0YLRgNCw0LJf0YfRjdGA0LJf0LvRltC/X9C20L3RltCyX9Cy0LXRgF/QutCw0YHRgl/Qu9GW0YHRgl/RgdC90LXQtiIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7Zm9ybWF0OiLQvdGP0LTQt9C10LvRjl/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00YNf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtGDX9GB0YPQsdC+0YLRgyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLQvdGP0LTQt9C10LvRj1/Qv9Cw0L3Rj9C00LfQtdC70LDQul/QsNGe0YLQvtGA0LDQul/RgdC10YDQsNC00LBf0YfQsNGG0LLQtdGAX9C/0Y/RgtC90ZbRhtCwX9GB0YPQsdC+0YLQsCIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1vQo9GD0Z5dID8oPzrQvNGW0L3Rg9C70YPRjnzQvdCw0YHRgtGD0L/QvdGD0Y4pPyA/XF0gP2RkZGQvfSx3ZWVrZGF5c1Nob3J0OiLQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQvdC0X9C/0L1f0LDRgl/RgdGAX9GH0YZf0L/Rgl/RgdCxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSDQsy4iLExMTDoiRCBNTU1NIFlZWVkg0LMuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0KHRkdC90L3RjyDRnl0gTFQiLG5leHREYXk6IlvQl9Cw0Z7RgtGA0LAg0Z5dIExUIixsYXN0RGF5OiJb0KPRh9C+0YDQsCDRnl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIlvQo10gZGRkZCBb0Z5dIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJb0KMg0LzRltC90YPQu9GD0Y5dIGRkZGQgW9GeXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIlvQoyDQvNGW0L3Rg9C70YtdIGRkZGQgW9GeXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLQv9GA0LDQtyAlcyIscGFzdDoiJXMg0YLQsNC80YMiLHM6ItC90LXQutCw0LvRjNC60ZYg0YHQtdC60YPQvdC0IixtOnQsbW06dCxoOnQsaGg6dCxkOiLQtNC30LXQvdGMIixkZDp0LE06ItC80LXRgdGP0YYiLE1NOnQseToi0LPQvtC0Iix5eTp0fSxtZXJpZGllbVBhcnNlOi/QvdC+0YfRi3zRgNCw0L3RltGG0Yt80LTQvdGPfNCy0LXRh9Cw0YDQsC8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4vXijQtNC90Y980LLQtdGH0LDRgNCwKSQvLnRlc3QoZSl9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuItC90L7Rh9GLIjtlbHNlIGlmKGU8MTIpcmV0dXJuItGA0LDQvdGW0YbRiyI7ZWxzZSBpZihlPDE3KXJldHVybiLQtNC90Y8iO2Vsc2UgcmV0dXJuItCy0LXRh9Cw0YDQsCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKNGWfNGLfNCz0LApLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybihlJTEwPT09Mnx8ZSUxMD09PTMpJiZlJTEwMCE9PTEyJiZlJTEwMCE9PTEzP2UrIi3RliI6ZSsiLdGLIjtjYXNlIkQiOnJldHVybiBlKyIt0LPQsCI7ZGVmYXVsdDpyZXR1cm4gZX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImJnIix7bW9udGhzOiLRj9C90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLRj9C90YNf0YTQtdCyX9C80LDRgF/QsNC/0YBf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCzX9GB0LXQv1/QvtC60YJf0L3QvtC1X9C00LXQuiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi0L3QtdC00LXQu9GPX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDRj9C00LBf0YfQtdGC0LLRitGA0YLRitC6X9C/0LXRgtGK0Lpf0YHRitCx0L7RgtCwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItC90LXQtF/Qv9C+0L1f0LLRgtC+X9GB0YDRj1/Rh9C10YJf0L/QtdGCX9GB0YrQsSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0JTQvdC10YEg0LJdIExUIixuZXh0RGF5OiJb0KPRgtGA0LUg0LJdIExUIixuZXh0V2VlazoiZGRkZCBb0LJdIExUIixsYXN0RGF5OiJb0JLRh9C10YDQsCDQsl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJb0JzQuNC90LDQu9Cw0YLQsF0gZGRkZCBb0LJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlvQnNC40L3QsNC70LjRj10gZGRkZCBb0LJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItGB0LvQtdC0ICVzIixwYXN0OiLQv9GA0LXQtNC4ICVzIixzOiLQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuCIsc3M6IiVkINGB0LXQutGD0L3QtNC4IixtOiLQvNC40L3Rg9GC0LAiLG1tOiIlZCDQvNC40L3Rg9GC0LgiLGg6ItGH0LDRgSIsaGg6IiVkINGH0LDRgdCwIixkOiLQtNC10L0iLGRkOiIlZCDQtNC10L3QsCIsdzoi0YHQtdC00LzQuNGG0LAiLHd3OiIlZCDRgdC10LTQvNC40YbQuCIsTToi0LzQtdGB0LXRhiIsTU06IiVkINC80LXRgdC10YbQsCIseToi0LPQvtC00LjQvdCwIix5eToiJWQg0LPQvtC00LjQvdC4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1lJTEwMDtpZihlPT09MClyZXR1cm4gZSsiLdC10LIiO2Vsc2UgaWYobj09PTApcmV0dXJuIGUrIi3QtdC9IjtlbHNlIGlmKG4+MTAmJm48MjApcmV0dXJuIGUrIi3RgtC4IjtlbHNlIGlmKHQ9PT0xKXJldHVybiBlKyIt0LLQuCI7ZWxzZSBpZih0PT09MilyZXR1cm4gZSsiLdGA0LgiO2Vsc2UgaWYodD09PTd8fHQ9PT04KXJldHVybiBlKyIt0LzQuCI7ZWxzZSByZXR1cm4gZSsiLdGC0LgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJibSIse21vbnRoczoiWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTcmba2Fsb19adXfJm25rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TyZt0YW5idXJ1a2Fsb1/JlGt1dMmUYnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9Bd2lfTcmbX1p1d19adWxfVXRpX1PJm3RfyZRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050yZtuyZtuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikthcl9OdMmbX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsyZtyyZtdIEhIOm1tIixMTExMOiJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQmkgbMmbcsmbXSBMVCIsbmV4dERheToiW1NpbmkgbMmbcsmbXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RvbiBsyZtyyZtdIExUIixsYXN0RGF5OiJbS3VudSBsyZtyyZtdIExUIixsYXN0V2VlazoiZGRkZCBbdMmbbcmbbmVuIGzJm3LJm10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGvJlG7JlCIscGFzdDoiYSBiyZsgJXMgYsmUIixzOiJzYW5nYSBkYW1hIGRhbWEiLHNzOiJzZWtvbmRpICVkIixtOiJtaW5pdGkga2VsZW4iLG1tOiJtaW5pdGkgJWQiLGg6ImzJm3LJmyBrZWxlbiIsaGg6ImzJm3LJmyAlZCIsZDoidGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4ga2VsZW4iLHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLgp6ciLDI6IuCnqCIsMzoi4KepIiw0OiLgp6oiLDU6IuCnqyIsNjoi4KesIiw3OiLgp60iLDg6IuCnriIsOToi4KevIiwwOiLgp6YifSxuPXsi4KenIjoiMSIsIuCnqCI6IjIiLCLgp6kiOiIzIiwi4KeqIjoiNCIsIuCnqyI6IjUiLCLgp6wiOiI2Iiwi4KetIjoiNyIsIuCnriI6IjgiLCLgp68iOiI5Iiwi4KemIjoiMCJ9LGk7ZS5kZWZpbmVMb2NhbGUoImJuIix7bW9udGhzOiLgppzgpr7gpqjgp4Hgp5/gpr7gprDgpr9f4Kar4KeH4Kas4KeN4Kaw4KeB4Kef4Ka+4Kaw4Ka/X+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn+Cnh+CmruCnjeCmrOCmsF/gpoXgppXgp43gpp/gp4vgpqzgprBf4Kao4Kat4KeH4Kau4KeN4Kas4KawX+CmoeCmv+CmuOCnh+CmruCnjeCmrOCmsCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4ciLnNwbGl0KCJfIiksd2Vla2RheXM6IuCmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgprDgpqzgpr9f4Ka44KeL4KauX+CmruCmmeCnjeCml+Cmsl/gpqzgp4Hgpqdf4Kas4KeD4Ka54Ka44KeN4Kaq4Kak4Ka/X+CmtuCngeCmleCnjeCmsF/gprbgpqjgpr8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSDgprjgpq7gp58iLExUUzoiQSBoOm1tOnNzIOCmuOCmruCnnyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4KaG4KacXSBMVCIsbmV4dERheToiW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW+Cml+CmpOCmleCmvuCmsl0gTFQiLGxhc3RXZWVrOiJb4KaX4KakXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg4Kaq4Kaw4KeHIixwYXN0OiIlcyDgpobgppfgp4ciLHM6IuCmleCnn+Cnh+CmlSDgprjgp4fgppXgp4fgpqjgp43gpqEiLHNzOiIlZCDgprjgp4fgppXgp4fgpqjgp43gpqEiLG06IuCmj+CmlSDgpq7gpr/gpqjgpr/gpp8iLG1tOiIlZCDgpq7gpr/gpqjgpr/gpp8iLGg6IuCmj+CmlSDgppjgpqjgp43gpp/gpr4iLGhoOiIlZCDgppjgpqjgp43gpp/gpr4iLGQ6IuCmj+CmlSDgpqbgpr/gpqgiLGRkOiIlZCDgpqbgpr/gpqgiLE06IuCmj+CmlSDgpq7gpr7gprgiLE1NOiIlZCDgpq7gpr7gprgiLHk6IuCmj+CmlSDgpqzgppvgprAiLHl5OiIlZCDgpqzgppvgprAifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4KemXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gprDgpr7gpqR84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Kaw4Ka+4KakLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i4Kaw4Ka+4KakIiYmZT49NHx8dD09PSLgpqbgp4Hgpqrgp4HgprAiJiZlPDV8fHQ9PT0i4Kas4Ka/4KaV4Ka+4KayIilyZXR1cm4gZSsxMjtlbHNlIHJldHVybiBlfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTw0KXJldHVybiLgprDgpr7gpqQiO2Vsc2UgaWYoZTwxMClyZXR1cm4i4Ka44KaV4Ka+4KayIjtlbHNlIGlmKGU8MTcpcmV0dXJuIuCmpuCngeCmquCngeCmsCI7ZWxzZSBpZihlPDIwKXJldHVybiLgpqzgpr/gppXgpr7gprIiO2Vsc2UgcmV0dXJuIuCmsOCmvuCmpCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6IuCnpyIsMjoi4KeoIiwzOiLgp6kiLDQ6IuCnqiIsNToi4KerIiw2OiLgp6wiLDc6IuCnrSIsODoi4KeuIiw5OiLgp68iLDA6IuCnpiJ9LG49eyLgp6ciOiIxIiwi4KeoIjoiMiIsIuCnqSI6IjMiLCLgp6oiOiI0Iiwi4KerIjoiNSIsIuCnrCI6IjYiLCLgp60iOiI3Iiwi4KeuIjoiOCIsIuCnryI6IjkiLCLgp6YiOiIwIn0saTtlLmRlZmluZUxvY2FsZSgiYm4tYmQiLHttb250aHM6IuCmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgppzgpr7gpqjgp4Ff4Kar4KeH4Kas4KeN4Kaw4KeBX+CmruCmvuCmsOCnjeCmml/gpo/gpqrgp43gprDgpr/gprJf4Kau4KeHX+CmnOCngeCmqF/gppzgp4HgprLgpr7gpodf4KaG4KaX4Ka44KeN4KafX+CmuOCnh+CmquCnjeCmn1/gpoXgppXgp43gpp/gp4tf4Kao4Kat4KeHX+CmoeCmv+CmuOCnhyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIOCmuOCmruCnnyIsTFRTOiJBIGg6bW06c3Mg4Ka44Kau4KefIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4Ka44Kau4KefIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgpobgppxdIExUIixuZXh0RGF5OiJb4KaG4KaX4Ka+4Kau4KeA4KaV4Ka+4KayXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4KaX4Kak4KaV4Ka+4KayXSBMVCIsbGFzdFdlZWs6IlvgppfgpqRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgpqrgprDgp4ciLHBhc3Q6IiVzIOCmhuCml+CnhyIsczoi4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoSIsc3M6IiVkIOCmuOCnh+CmleCnh+CmqOCnjeCmoSIsbToi4KaP4KaVIOCmruCmv+CmqOCmv+CmnyIsbW06IiVkIOCmruCmv+CmqOCmv+CmnyIsaDoi4KaP4KaVIOCmmOCmqOCnjeCmn+CmviIsaGg6IiVkIOCmmOCmqOCnjeCmn+CmviIsZDoi4KaP4KaVIOCmpuCmv+CmqCIsZGQ6IiVkIOCmpuCmv+CmqCIsTToi4KaP4KaVIOCmruCmvuCmuCIsTU06IiVkIOCmruCmvuCmuCIseToi4KaP4KaVIOCmrOCmm+CmsCIseXk6IiVkIOCmrOCmm+CmsCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+CmsOCmvuCmpHzgpq3gp4vgprB84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Ka44Kao4KeN4Kan4KeN4Kav4Ka+fOCmsOCmvuCmpC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09IuCmsOCmvuCmpCIpcmV0dXJuIGU8ND9lOmUrMTI7ZWxzZSBpZih0PT09IuCmreCni+CmsCIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuCmuOCmleCmvuCmsiIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuCmpuCngeCmquCngeCmsCIpcmV0dXJuIGU+PTM/ZTplKzEyO2Vsc2UgaWYodD09PSLgpqzgpr/gppXgpr7gprIiKXJldHVybiBlKzEyO2Vsc2UgaWYodD09PSLgprjgpqjgp43gpqfgp43gpq/gpr4iKXJldHVybiBlKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTw0KXJldHVybiLgprDgpr7gpqQiO2Vsc2UgaWYoZTw2KXJldHVybiLgpq3gp4vgprAiO2Vsc2UgaWYoZTwxMilyZXR1cm4i4Ka44KaV4Ka+4KayIjtlbHNlIGlmKGU8MTUpcmV0dXJuIuCmpuCngeCmquCngeCmsCI7ZWxzZSBpZihlPDE4KXJldHVybiLgpqzgpr/gppXgpr7gprIiO2Vsc2UgaWYoZTwyMClyZXR1cm4i4Ka44Kao4KeN4Kan4KeN4Kav4Ka+IjtlbHNlIHJldHVybiLgprDgpr7gpqQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLgvKEiLDI6IuC8oiIsMzoi4LyjIiw0OiLgvKQiLDU6IuC8pSIsNjoi4LymIiw3OiLgvKciLDg6IuC8qCIsOToi4LypIiwwOiLgvKAifSxuPXsi4LyhIjoiMSIsIuC8oiI6IjIiLCLgvKMiOiIzIiwi4LykIjoiNCIsIuC8pSI6IjUiLCLgvKYiOiI2Iiwi4LynIjoiNyIsIuC8qCI6IjgiLCLgvKkiOiI5Iiwi4LygIjoiMCJ9LGk7ZS5kZWZpbmVMb2NhbGUoImJvIix7bW9udGhzOiLgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4L2f4L6z4LyLMV/gvZ/gvrPgvIsyX+C9n+C+s+C8izNf4L2f4L6z4LyLNF/gvZ/gvrPgvIs1X+C9n+C+s+C8izZf4L2f4L6z4LyLN1/gvZ/gvrPgvIs4X+C9n+C+s+C8izlf4L2f4L6z4LyLMTBf4L2f4L6z4LyLMTFf4L2f4L6z4LyLMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnRSZWdleDovXijgvZ/gvrPgvItcZHsxLDJ9KS8sbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiLgvYLgvZ/gvaDgvIvgvYngvbLgvIvgvZjgvItf4L2C4L2f4L2g4LyL4L2f4L6z4LyL4L2W4LyLX+C9guC9n+C9oOC8i+C9mOC9suC9guC8i+C9keC9mOC9ouC8i1/gvYLgvZ/gvaDgvIvgvaPgvrfgvYLgvIvgvZTgvItf4L2C4L2f4L2g4LyL4L2V4L204L2i4LyL4L2W4L20X+C9guC9n+C9oOC8i+C9lOC8i+C9puC9hOC9puC8i1/gvYLgvZ/gvaDgvIvgvabgvqTgvbrgvZPgvIvgvZTgvIsiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLgvYngvbJf4L2f4L6zX+C9mOC9suC9gl/gvaPgvrfgvYJf4L2V4L204L2iX+C9puC9hOC9pl/gvabgvqTgvbrgvZMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4L2R4L2y4LyL4L2i4L2y4L2EXSBMVCIsbmV4dERheToiW+C9puC9hOC8i+C9ieC9suC9k10gTFQiLG5leHRXZWVrOiJb4L2W4L2R4L204L2T4LyL4L2V4L6y4L2C4LyL4L2i4L6X4L264L2m4LyL4L2YXSwgTFQiLGxhc3REYXk6IlvgvYHgvIvgvabgvYRdIExUIixsYXN0V2VlazoiW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIOC9o+C8iyIscGFzdDoiJXMg4L2m4L6U4L2T4LyL4L2jIixzOiLgvaPgvZjgvIvgvabgvYQiLHNzOiIlZCDgvabgvpDgvaLgvIvgvYbgvI0iLG06IuC9puC+kOC9ouC8i+C9mOC8i+C9guC9heC9suC9giIsbW06IiVkIOC9puC+kOC9ouC8i+C9mCIsaDoi4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2CIixoaDoiJWQg4L2G4L204LyL4L2a4L284L2RIixkOiLgvYngvbLgvZPgvIvgvYLgvYXgvbLgvYIiLGRkOiIlZCDgvYngvbLgvZPgvIsiLE06IuC9n+C+s+C8i+C9luC8i+C9guC9heC9suC9giIsTU06IiVkIOC9n+C+s+C8i+C9liIseToi4L2j4L284LyL4L2C4L2F4L2y4L2CIix5eToiJWQg4L2j4L28In0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW+C8oeC8ouC8o+C8pOC8peC8puC8p+C8qOC8qeC8oF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sbWVyaWRpZW1QYXJzZTov4L2Y4L2a4L2T4LyL4L2Y4L28fOC9nuC9vOC9guC9puC8i+C9gOC9pnzgvYngvbLgvZPgvIvgvYLgvbTgvYR84L2R4L2C4L284L2E4LyL4L2R4L2CfOC9mOC9muC9k+C8i+C9mOC9vC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09IuC9mOC9muC9k+C8i+C9mOC9vCImJmU+PTR8fHQ9PT0i4L2J4L2y4L2T4LyL4L2C4L204L2EIiYmZTw1fHx0PT09IuC9keC9guC9vOC9hOC8i+C9keC9giIpcmV0dXJuIGUrMTI7ZWxzZSByZXR1cm4gZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8NClyZXR1cm4i4L2Y4L2a4L2T4LyL4L2Y4L28IjtlbHNlIGlmKGU8MTApcmV0dXJuIuC9nuC9vOC9guC9puC8i+C9gOC9piI7ZWxzZSBpZihlPDE3KXJldHVybiLgvYngvbLgvZPgvIvgvYLgvbTgvYQiO2Vsc2UgaWYoZTwyMClyZXR1cm4i4L2R4L2C4L284L2E4LyL4L2R4L2CIjtlbHNlIHJldHVybiLgvZjgvZrgvZPgvIvgvZjgvbwifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCmZ1bmN0aW9uIHQoZSx0LG4pe3ZhciBpPXttbToibXVudXRlbm4iLE1NOiJtaXoiLGRkOiJkZXZlemgifTtyZXR1cm4gZSsiICIrcihpW25dLGUpfWZ1bmN0aW9uIG4oZSl7c3dpdGNoKGkoZSkpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIGUrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gZSsiIHZsb2F6In19ZnVuY3Rpb24gaShlKXtpZihlPjkpcmV0dXJuIGkoZSUxMCk7cmV0dXJuIGV9ZnVuY3Rpb24gcihlLHQpe2lmKHQ9PT0yKXJldHVybiBhKGUpO3JldHVybiBlfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9e206InYiLGI6InYiLGQ6InoifTtpZih0W2UuY2hhckF0KDApXT09PXVuZGVmaW5lZClyZXR1cm4gZTtyZXR1cm4gdFtlLmNoYXJBdCgwKV0rZS5zdWJzdHJpbmcoMSl9dmFyIHM9Wy9eZ2VuL2ksL15jW8q8XCddaHdlL2ksL15tZXUvaSwvXmVici9pLC9ebWFlL2ksL14obWV6fGV2ZSkvaSwvXmdvdS9pLC9eZW9zL2ksL15nd2UvaSwvXmhlci9pLC9eZHUvaSwvXmtlci9pXSxvPS9eKGdlbnZlcnxjW8q8XCddaHdldnJlcnxtZXVyemh8ZWJyZWx8bWFlfG1lemhldmVufGdvdWVyZXxlb3N0fGd3ZW5nb2xvfGhlcmV8ZHV8a2VyenV8Z2VufGNbyrxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksdT0vXihnZW52ZXJ8Y1vKvFwnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLGQ9L14oZ2VufGNbyrxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksbD1bL15zdWwvaSwvXmx1bi9pLC9ebWV1cnpoL2ksL15tZXJjW8q8XCddaGVyL2ksL155YW91L2ksL15nd2VuZXIvaSwvXnNhZG9ybi9pXSxoPVsvXlN1bC9pLC9eTHVuL2ksL15NZXUvaSwvXk1lci9pLC9eWWFvL2ksL15Hd2UvaSwvXlNhZC9pXSxjPVsvXlN1L2ksL15MdS9pLC9eTWUoW15yXXwkKS9pLC9eTWVyL2ksL15ZYS9pLC9eR3cvaSwvXlNhL2ldLF87ZS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJHZW52ZXJfQ8q8aHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVyZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9Dyrxod2VfTWV1X0Vicl9NYWVfRXZlX0dvdV9Fb3NfR3dlX0hlcl9EdV9LZXIiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bF9MdW5fTWV1cnpoX01lcmPKvGhlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZTpjLGZ1bGxXZWVrZGF5c1BhcnNlOmwsc2hvcnRXZWVrZGF5c1BhcnNlOmgsbWluV2Vla2RheXNQYXJzZTpjLG1vbnRoc1JlZ2V4Om8sbW9udGhzU2hvcnRSZWdleDpvLG1vbnRoc1N0cmljdFJlZ2V4OnUsbW9udGhzU2hvcnRTdHJpY3RSZWdleDpkLG1vbnRoc1BhcnNlOnMsbG9uZ01vbnRoc1BhcnNlOnMsc2hvcnRNb250aHNQYXJzZTpzLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmPKvGhvYXpoIGRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RhXSBMVCIsbGFzdERheToiW0RlY8q8aCBkYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNldCBkYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImEtYmVubiAlcyIscGFzdDoiJXMgyrx6byIsczoidW4gbmViZXVkIHNlZ29uZGVubm/DuSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOnQsaDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOnQsTToidXIgbWl6IixNTTp0LHk6InVyIGJsb2F6Iix5eTpufSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGHDsXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWU9PT0xPyJhw7EiOiJ2ZXQiO3JldHVybiBlK3R9LHdlZWs6e2RvdzoxLGRveTo0fSxtZXJpZGllbVBhcnNlOi9hLm0ufGcubS4vLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0iZy5tLiJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8iYS5tLiI6ImcubS4ifX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KZnVuY3Rpb24gdChlLHQsbixpKXtzd2l0Y2gobil7Y2FzZSJtIjpyZXR1cm4gdD8iamVkbmEgbWludXRhIjppPyJqZWRudSBtaW51dHUiOiJqZWRuZSBtaW51dGUifX1mdW5jdGlvbiBuKGUsdCxuKXt2YXIgaT1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzcyI6aWYoZT09PTEpaSs9InNla3VuZGEiO2Vsc2UgaWYoZT09PTJ8fGU9PT0zfHxlPT09NClpKz0ic2VrdW5kZSI7ZWxzZSBpKz0ic2VrdW5kaSI7cmV0dXJuIGk7Y2FzZSJtbSI6aWYoZT09PTEpaSs9Im1pbnV0YSI7ZWxzZSBpZihlPT09Mnx8ZT09PTN8fGU9PT00KWkrPSJtaW51dGUiO2Vsc2UgaSs9Im1pbnV0YSI7cmV0dXJuIGk7Y2FzZSJoIjpyZXR1cm4gdD8iamVkYW4gc2F0IjoiamVkYW4gc2F0IjtjYXNlImhoIjppZihlPT09MSlpKz0ic2F0IjtlbHNlIGlmKGU9PT0yfHxlPT09M3x8ZT09PTQpaSs9InNhdGEiO2Vsc2UgaSs9InNhdGkiO3JldHVybiBpO2Nhc2UiZGQiOmlmKGU9PT0xKWkrPSJkYW4iO2Vsc2UgaSs9ImRhbmEiO3JldHVybiBpO2Nhc2UiTU0iOmlmKGU9PT0xKWkrPSJtamVzZWMiO2Vsc2UgaWYoZT09PTJ8fGU9PT0zfHxlPT09NClpKz0ibWplc2VjYSI7ZWxzZSBpKz0ibWplc2VjaSI7cmV0dXJuIGk7Y2FzZSJ5eSI6aWYoZT09PTEpaSs9ImdvZGluYSI7ZWxzZSBpZihlPT09Mnx8ZT09PTN8fGU9PT00KWkrPSJnb2RpbmUiO2Vsc2UgaSs9ImdvZGluYSI7cmV0dXJuIGl9fXZhciBpO2UuZGVmaW5lTG9jYWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl/EjWVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanXEjWVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVybiJbcHJvxaFsdV0gZGRkZCBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvxaFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6bixtOnQsbW06bixoOm4saGg6bixkOiJkYW4iLGRkOm4sTToibWplc2VjIixNTTpuLHk6ImdvZGludSIseXk6bn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJfbWFyw6dfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hcsOnX2QnYWJyaWxfZGUgbWFpZ19kZSBqdW55X2RlIGp1bGlvbF9kJ2Fnb3N0X2RlIHNldGVtYnJlX2Qnb2N0dWJyZV9kZSBub3ZlbWJyZV9kZSBkZXNlbWJyZSIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxzKStNTU1NL30sbW9udGhzU2hvcnQ6Imdlbi5fZmVici5fbWFyw6dfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6ImRpdW1lbmdlX2RpbGx1bnNfZGltYXJ0c19kaW1lY3Jlc19kaWpvdXNfZGl2ZW5kcmVzX2Rpc3NhYnRlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRnLl9kbC5fZHQuX2RjLl9kai5fZHYuX2RzLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGdfZGxfZHRfZGNfZGpfZHZfZHMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthdnVpIGEgIisodGhpcy5ob3VycygpIT09MT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2RlbcOgIGEgIisodGhpcy5ob3VycygpIT09MT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgIisodGhpcy5ob3VycygpIT09MT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2FoaXIgYSAiKyh0aGlzLmhvdXJzKCkhPT0xPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNzYXQgYSAiKyh0aGlzLmhvdXJzKCkhPT0xPyJsZXMiOiJsYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZCdhcXXDrSAlcyIscGFzdDoiZmEgJXMiLHM6InVucyBzZWdvbnMiLHNzOiIlZCBzZWdvbnMiLG06InVuIG1pbnV0IixtbToiJWQgbWludXRzIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmVzIixkOiJ1biBkaWEiLGRkOiIlZCBkaWVzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNvcyIseToidW4gYW55Iix5eToiJWQgYW55cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8w6h8YSkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lPT09MT8iciI6ZT09PTI/Im4iOmU9PT0zPyJyIjplPT09ND8idCI6IsOoIjtpZih0PT09IncifHx0PT09IlciKW49ImEiO3JldHVybiBlK259LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9e3N0YW5kYWxvbmU6ImxlZGVuX8O6bm9yX2LFmWV6ZW5fZHViZW5fa3bEm3Rlbl/EjWVydmVuX8SNZXJ2ZW5lY19zcnBlbl96w6HFmcOtX8WZw61qZW5fbGlzdG9wYWRfcHJvc2luZWMiLnNwbGl0KCJfIiksZm9ybWF0OiJsZWRuYV/Dum5vcmFfYsWZZXpuYV9kdWJuYV9rdsSbdG5hX8SNZXJ2bmFfxI1lcnZlbmNlX3NycG5hX3rDocWZw61fxZnDrWpuYV9saXN0b3BhZHVfcHJvc2luY2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0REP1tvLl0/KFxbW15cW1xdXSpcXXxccykrTU1NTS99LG49ImxlZF/Dum5vX2LFmWVfZHViX2t2xJtfxI12bl/EjXZjX3NycF96w6HFmV/FmcOtal9saXNfcHJvIi5zcGxpdCgiXyIpLGk9Wy9ebGVkL2ksL17Dum5vL2ksL15ixZllL2ksL15kdWIvaSwvXmt2xJsvaSwvXijEjXZufMSNZXJ2ZW4kfMSNZXJ2bmEpL2ksL14oxI12Y3zEjWVydmVuZWN8xI1lcnZlbmNlKS9pLC9ec3JwL2ksL156w6HFmS9pLC9exZnDrWovaSwvXmxpcy9pLC9ecHJvL2ldLHI9L14obGVkZW58w7pub3J8YsWZZXplbnxkdWJlbnxrdsSbdGVufMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHrDocWZw618xZnDrWplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaSxhO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGU+MSYmZTw1JiZ+fihlLzEwKSE9PTF9ZnVuY3Rpb24gbyhlLHQsbixpKXt2YXIgcj1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzIjpyZXR1cm4gdHx8aT8icMOhciBzZWt1bmQiOiJww6FyIHNla3VuZGFtaSI7Y2FzZSJzcyI6aWYodHx8aSlyZXR1cm4gcisocyhlKT8ic2VrdW5keSI6InNla3VuZCIpO2Vsc2UgcmV0dXJuIHIrInNla3VuZGFtaSI7Y2FzZSJtIjpyZXR1cm4gdD8ibWludXRhIjppPyJtaW51dHUiOiJtaW51dG91IjtjYXNlIm1tIjppZih0fHxpKXJldHVybiByKyhzKGUpPyJtaW51dHkiOiJtaW51dCIpO2Vsc2UgcmV0dXJuIHIrIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiB0PyJob2RpbmEiOmk/ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOmlmKHR8fGkpcmV0dXJuIHIrKHMoZSk/ImhvZGlueSI6ImhvZGluIik7ZWxzZSByZXR1cm4gcisiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIHR8fGk/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOmlmKHR8fGkpcmV0dXJuIHIrKHMoZSk/ImRueSI6ImRuw60iKTtlbHNlIHJldHVybiByKyJkbnkiO2Nhc2UiTSI6cmV0dXJuIHR8fGk/Im3Em3PDrWMiOiJtxJtzw61jZW0iO2Nhc2UiTU0iOmlmKHR8fGkpcmV0dXJuIHIrKHMoZSk/Im3Em3PDrWNlIjoibcSbc8OtY8WvIik7ZWxzZSByZXR1cm4gcisibcSbc8OtY2kiO2Nhc2UieSI6cmV0dXJuIHR8fGk/InJvayI6InJva2VtIjtjYXNlInl5IjppZih0fHxpKXJldHVybiByKyhzKGUpPyJyb2t5IjoibGV0Iik7ZWxzZSByZXR1cm4gcisibGV0eSJ9fWUuZGVmaW5lTG9jYWxlKCJjcyIse21vbnRoczp0LG1vbnRoc1Nob3J0Om4sbW9udGhzUmVnZXg6cixtb250aHNTaG9ydFJlZ2V4OnIsbW9udGhzU3RyaWN0UmVnZXg6L14obGVkZW58bGVkbmF8w7pub3JhfMO6bm9yfGLFmWV6ZW58YsWZZXpuYXxkdWJlbnxkdWJuYXxrdsSbdGVufGt2xJt0bmF8xI1lcnZlbmVjfMSNZXJ2ZW5jZXzEjWVydmVufMSNZXJ2bmF8c3JwZW58c3JwbmF8esOhxZnDrXzFmcOtamVufMWZw61qbmF8bGlzdG9wYWR1fGxpc3RvcGFkfHByb3NpbmVjfHByb3NpbmNlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14obGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2ksbW9udGhzUGFyc2U6aSxsb25nTW9udGhzUGFyc2U6aSxzaG9ydE1vbnRoc1BhcnNlOmksd2Vla2RheXM6Im5lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lX3BvX8O6dF9zdF/EjXRfcMOhX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb1/DunRfc3RfxI10X3DDoV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSIsbDoiRC4gTS4gWVlZWSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyB2XSBMVCIsbmV4dERheToiW3rDrXRyYSB2XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWTEm2xpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZlIHN0xZllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZlIMSNdHZydGVrIHZdIExUIjtjYXNlIDU6cmV0dXJuIlt2IHDDoXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0sbGFzdERheToiW3bEjWVyYSB2XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxvdSBuZWTEm2xpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbbWludWzDqV0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW21pbnVsb3Ugc3TFmWVkdSB2XSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsw71dIGRkZGQgW3ZdIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bG91IHNvYm90dSB2XSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicMWZZWQgJXMiLHM6byxzczpvLG06byxtbTpvLGg6byxoaDpvLGQ6byxkZDpvLE06byxNTTpvLHk6byx5eTpvfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiY3YiLHttb250aHM6ItC605HRgNC70LDRh1/QvdCw0YDTkdGBX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgNGC0LzQtV/Rg9GC05Ff0qvRg9GA0LvQsF/QsNCy05HQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiNGC0LDQsiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0LrTkdGAX9C90LDRgF/Qv9GD0Yhf0LDQutCwX9C80LDQuV/Sq9OX0YBf0YPRgtORX9Kr0YPRgF/QsNCy0L1f0Y7Qv9CwX9GH07PQul/RgNCw0YgiLnNwbGl0KCJfIiksd2Vla2RheXM6ItCy0YvRgNGB0LDRgNC90LjQutGD0L1f0YLRg9C90YLQuNC60YPQvV/Ri9GC0LvQsNGA0LjQutGD0L1f0Y7QvdC60YPQvV/QutOX0qvQvdC10YDQvdC40LrRg9C9X9GN0YDQvdC10LrRg9C9X9GI05HQvNCw0YLQutGD0L0iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi0LLRi9GAX9GC0YPQvV/Ri9GC0Ltf0Y7QvV/QutOX0qtf0Y3RgNC9X9GI05HQvCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10iLExMTDoiWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9Cf0LDRj9C9XSBMVCBb0YHQtdGF0LXRgtGA0LVdIixuZXh0RGF5OiJb0KvRgNCw0L1dIExUIFvRgdC10YXQtdGC0YDQtV0iLGxhc3REYXk6IlvTltC90LXRgF0gTFQgW9GB0LXRhdC10YLRgNC1XSIsbmV4dFdlZWs6IlvSqtC40YLQtdGBXSBkZGRkIExUIFvRgdC10YXQtdGC0YDQtV0iLGxhc3RXZWVrOiJb0JjRgNGC0L3Tl10gZGRkZCBMVCBb0YHQtdGF0LXRgtGA0LVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKGUpe3ZhciB0PS/RgdC10YXQtdGCJC9pLmV4ZWMoZSk/ItGA0LXQvSI6L9Kr0YPQuyQvaS5leGVjKGUpPyLRgtCw0L0iOiLRgNCw0L0iO3JldHVybiBlK3R9LHBhc3Q6IiVzINC60LDRj9C70LvQsCIsczoi0L/Tl9GALdC40Log0qvQtdC60LrRg9C90YIiLHNzOiIlZCDSq9C10LrQutGD0L3RgiIsbToi0L/Tl9GAINC80LjQvdGD0YIiLG1tOiIlZCDQvNC40L3Rg9GCIixoOiLQv9OX0YAg0YHQtdGF0LXRgiIsaGg6IiVkINGB0LXRhdC10YIiLGQ6ItC/05fRgCDQutGD0L0iLGRkOiIlZCDQutGD0L0iLE06ItC/05fRgCDRg9C505HRhSIsTU06IiVkINGD0LnTkdGFIix5OiLQv9OX0YAg0qvRg9C7Iix5eToiJWQg0qvRg9C7In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS3QvNOX0YgvLG9yZGluYWw6IiVkLdC805fRiCIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdfTWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIZWRkaXcgYW1dIExUIixuZXh0RGF5OiJbWWZvcnkgYW1dIExUIixuZXh0V2VlazoiZGRkZCBbYW1dIExUIixsYXN0RGF5OiJbRGRvZSBhbV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkaXdldGhhZiBhbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im1ld24gJXMiLHBhc3Q6IiVzIHluIMO0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdyIixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lLG49IiIsaT1bIiIsImFmIiwiaWwiLCJ5ZGQiLCJ5ZGQiLCJlZCIsImVkIiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXTtpZih0PjIwKWlmKHQ9PT00MHx8dD09PTUwfHx0PT09NjB8fHQ9PT04MHx8dD09PTEwMCluPSJmZWQiO2Vsc2Ugbj0iYWluIjtlbHNlIGlmKHQ+MCluPWlbdF07cmV0dXJuIGUrbn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzw7huX21hbl90aXJfb25zX3Rvcl9mcmVfbMO4ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic8O4X21hX3RpX29uX3RvX2ZyX2zDuCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJww6UgZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ8OlciBrbC5dIExUIixsYXN0V2VlazoiW2ldIGRkZGRbcyBrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6ImbDpSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2UiLE06ImVuIG3DpW5lZCIsTU06IiVkIG3DpW5lZGVyIix5OiJldCDDpXIiLHl5OiIlZCDDpXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiB0KGUsdCxuLGkpe3ZhciByPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltlKyIgVGFnZSIsZSsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltlKyIgTW9uYXRlIixlKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbZSsiIEphaHJlIixlKyIgSmFocmVuIl19O3JldHVybiB0P3Jbbl1bMF06cltuXVsxXX12YXIgbjtlLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp0LG1tOiIlZCBNaW51dGVuIixoOnQsaGg6IiVkIFN0dW5kZW4iLGQ6dCxkZDp0LHc6dCx3dzoiJWQgV29jaGVuIixNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KZnVuY3Rpb24gdChlLHQsbixpKXt2YXIgcj17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbZSsiIFRhZ2UiLGUrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbZSsiIE1vbmF0ZSIsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2UrIiBKYWhyZSIsZSsiIEphaHJlbiJdfTtyZXR1cm4gdD9yW25dWzBdOnJbbl1bMV19dmFyIG47ZS5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkrDpG4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp0LG1tOiIlZCBNaW51dGVuIixoOnQsaGg6IiVkIFN0dW5kZW4iLGQ6dCxkZDp0LHc6dCx3dzoiJWQgV29jaGVuIixNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KZnVuY3Rpb24gdChlLHQsbixpKXt2YXIgcj17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbZSsiIFRhZ2UiLGUrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUiXSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbZSsiIE1vbmF0ZSIsZSsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W2UrIiBKYWhyZSIsZSsiIEphaHJlbiJdfTtyZXR1cm4gdD9yW25dWzBdOnJbbl1bMV19dmFyIG47ZS5kZWZpbmVMb2NhbGUoImRlLWNoIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6IltnZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp0LG1tOiIlZCBNaW51dGVuIixoOnQsaGg6IiVkIFN0dW5kZW4iLGQ6dCxkZDp0LHc6dCx3dzoiJWQgV29jaGVuIixNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9WyLelt6s3oLeqt6H3qbeg96pIiwi3orerN6E3rDeg96q3ofept6D3qkiLCLeid6n3oPeqN6X3qoiLCLeh96t3pXesN6D3qnejd6qIiwi3onerSIsIt6W3qvegt6wIiwi3pbeqt6N3qbeh96oIiwi3ofer96O3qbekN6w3pPeqiIsIt6Q3qzeld6w3pPerN6J3rDehN6m3oPeqiIsIt6H3q7eht6w3pPer96E3qbeg96qIiwi3oLert6I3qzeid6w3oTept6D3qoiLCLekd6o3pDerN6J3rDehN6m3oPeqiJdLG49WyLeh96n3oveqN6H3rDejN6mIiwi3oDer96J3qYiLCLeh96m3oLesN6O3qfeg96mIiwi3oTeqt6L3qYiLCLehN6q3oPep96Q3rDeit6m3ozeqCIsIt6A3qreht6q3oPeqiIsIt6A3q7egt6o3oDeqN6D3qoiXSxpO2UuZGVmaW5lTG9jYWxlKCJkdiIse21vbnRoczp0LG1vbnRoc1Nob3J0OnQsd2Vla2RheXM6bix3ZWVrZGF5c1Nob3J0Om4sd2Vla2RheXNNaW46It6H3qfei96oX96A3q/eid6mX96H3qbegt6wX96E3qrei96mX96E3qreg96nX96A3qreht6qX96A3q7egt6oIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/eid6GfN6J3oovLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuIt6J3ooiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIt6J3oYiO2Vsc2UgcmV0dXJuIt6J3ooifSxjYWxlbmRhcjp7c2FtZURheToiW96J3qjeh96m3oveql0gTFQiLG5leHREYXk6Ilveid6n3ovept6J3qddIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiW96H3qjeh96w3pTerF0gTFQiLGxhc3RXZWVrOiJb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi3ozerN6D3q3ejt6m3ofeqCAlcyIscGFzdDoi3obeqt6D3qjegt6wICVzIixzOiLekN6o3obeqt6C3rDejN6q3obert6F3qzeh96wIixzczoiZCUg3pDeqN6G3qregt6w3ozeqiIsbToi3oneqN6C3qjek96s3ofesCIsbW06It6J3qjegt6o3pPeqiAlZCIsaDoi3o7ept6R3qjeh96o3oPerN6H3rAiLGhoOiLejt6m3pHeqN6H3qjeg96qICVkIixkOiLei96q3ojept6A3qzeh96wIixkZDoi3oveqt6I3qbekN6wICVkIixNOiLeid6m3oDerN6H3rAiLE1NOiLeid6m3pDesCAlZCIseToi3ofept6A3qbeg96s3ofesCIseXk6It6H3qbegN6m3oPeqiAlZCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8sL2csItiMIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCmZ1bmN0aW9uIHIoZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbiE9PSJ1bmRlZmluZWQiJiZlIGluc3RhbmNlb2YgRnVuY3Rpb258fE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IEZ1bmN0aW9uXSJ9dmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiLOmc6xzr3Ov8+FzqzPgc65zr/Pgl/Ops61zrLPgc6/z4XOrM+BzrnOv8+CX86czqzPgc+EzrnOv8+CX86Rz4DPgc6vzrvOuc6/z4JfzpzOrM65zr/Pgl/Omc6/z43Ovc65zr/Pgl/Omc6/z43Ou865zr/Pgl/Okc+NzrPOv8+Fz4PPhM6/z4JfzqPOtc+Az4TOrc68zrLPgc65zr/Pgl/On866z4TPjs6yz4HOuc6/z4Jfzp3Ov86tzrzOss+BzrnOv8+CX86UzrXOus6tzrzOss+BzrnOv8+CIi5zcGxpdCgiXyIpLG1vbnRoc0dlbml0aXZlRWw6Is6ZzrHOvc6/z4XOsc+Bzq/Ov8+FX86mzrXOss+Bzr/Phc6xz4HOr86/z4VfzpzOsc+Bz4TOr86/z4VfzpHPgM+BzrnOu86vzr/PhV/OnM6xzpDOv8+FX86Zzr/Phc69zq/Ov8+FX86Zzr/Phc67zq/Ov8+FX86Rz4XOs86/z43Pg8+Ezr/PhV/Oo861z4DPhM61zrzOss+Bzq/Ov8+FX86fzrrPhM+JzrLPgc6vzr/PhV/Onc6/zrXOvM6yz4HOr86/z4VfzpTOtc66zrXOvM6yz4HOr86/z4UiLnNwbGl0KCJfIiksbW9udGhzOmZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIHRoaXMuX21vbnRoc05vbWluYXRpdmVFbDtlbHNlIGlmKHR5cGVvZiB0PT09InN0cmluZyImJi9ELy50ZXN0KHQuc3Vic3RyaW5nKDAsdC5pbmRleE9mKCJNTU1NIikpKSlyZXR1cm4gdGhpcy5fbW9udGhzR2VuaXRpdmVFbFtlLm1vbnRoKCldO2Vsc2UgcmV0dXJuIHRoaXMuX21vbnRoc05vbWluYXRpdmVFbFtlLm1vbnRoKCldfSxtb250aHNTaG9ydDoizpnOsc69X86mzrXOsl/OnM6xz4FfzpHPgM+BX86czrHPil/Omc6/z4XOvV/Omc6/z4XOu1/Okc+FzrNfzqPOtc+AX86fzrrPhF/Onc6/zrVfzpTOtc66Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLOms+Fz4HOuc6xzrrOrl/OlM61z4XPhM6tz4HOsV/OpM+Bzq/PhM63X86kzrXPhM6sz4HPhM63X86gzq3OvM+Az4TOt1/OoM6xz4HOsc+DzrrOtc+Fzq5fzqPOrM6yzrLOsc+Ezr8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoizprPhc+BX86UzrXPhV/OpM+BzrlfzqTOtc+EX86gzrXOvF/OoM6xz4FfzqPOsc6yIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLOms+FX86UzrVfzqTPgV/OpM61X86gzrVfzqDOsV/Oo86xIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPjExKXJldHVybiBuPyLOvM68IjoizpzOnCI7ZWxzZSByZXR1cm4gbj8iz4DOvCI6Is6gzpwifSxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybihlKyIiKS50b0xvd2VyQ2FzZSgpWzBdPT09Is68In0sbWVyaWRpZW1QYXJzZTovW86gzpxdXC4/zpw/XC4/L2ksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhckVsOntzYW1lRGF5OiJbzqPOrs68zrXPgc6xIHt9XSBMVCIsbmV4dERheToiW86Rz43Pgc65zr8ge31dIExUIixuZXh0V2VlazoiZGRkZCBbe31dIExUIixsYXN0RGF5OiJbzqfOuM61z4Ige31dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDY6cmV0dXJuIlvPhM6/IM+Az4HOv863zrPOv8+NzrzOtc69zr9dIGRkZGQgW3t9XSBMVCI7ZGVmYXVsdDpyZXR1cm4iW8+EzrfOvSDPgM+Bzr/Ot86zzr/Pjc68zrXOvc63XSBkZGRkIFt7fV0gTFQifX0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2NhbGVuZGFyRWxbZV0saT10JiZ0LmhvdXJzKCk7aWYocihuKSluPW4uYXBwbHkodCk7cmV0dXJuIG4ucmVwbGFjZSgie30iLGklMTI9PT0xPyLPg8+EzrciOiLPg8+EzrnPgiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiz4POtSAlcyIscGFzdDoiJXMgz4DPgc65zr0iLHM6Is67zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsSIsc3M6IiVkIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsSIsbToizq3Ovc6xIM67zrXPgM+Ez4wiLG1tOiIlZCDOu861z4DPhM6sIixoOiLOvM6vzrEgz47Pgc6xIixoaDoiJWQgz47Pgc61z4IiLGQ6Is68zq/OsSDOvM6tz4HOsSIsZGQ6IiVkIM68zq3Pgc61z4IiLE06Is6tzr3Osc+CIM68zq7Ovc6xz4IiLE1NOiIlZCDOvM6uzr3Otc+CIix5OiLOrc69zrHPgiDPh8+Bz4zOvc6/z4IiLHl5OiIlZCDPh8+Bz4zOvc65zrEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9zrcvLG9yZGluYWw6IiVkzrciLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImVuLWF1Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1+fihlJTEwMC8xMCk9PT0xPyJ0aCI6dD09PTE/InN0Ijp0PT09Mj8ibmQiOnQ9PT0zPyJyZCI6InRoIjtyZXR1cm4gZStufSx3ZWVrOntkb3c6MCxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwLG49fn4oZSUxMDAvMTApPT09MT8idGgiOnQ9PT0xPyJzdCI6dD09PTI/Im5kIjp0PT09Mz8icmQiOiJ0aCI7cmV0dXJuIGUrbn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJlbi1nYiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1+fihlJTEwMC8xMCk9PT0xPyJ0aCI6dD09PTE/InN0Ijp0PT09Mj8ibmQiOnQ9PT0zPyJyZCI6InRoIjtyZXR1cm4gZStufSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJlbi1pZSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMCxuPX5+KGUlMTAwLzEwKT09PTE/InRoIjp0PT09MT8ic3QiOnQ9PT0yPyJuZCI6dD09PTM/InJkIjoidGgiO3JldHVybiBlK259LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImVuLWlsIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMCxuPX5+KGUlMTAwLzEwKT09PTE/InRoIjp0PT09MT8ic3QiOnQ9PT0yPyJuZCI6dD09PTM/InJkIjoidGgiO3JldHVybiBlK259fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiZW4taW4iLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMCxuPX5+KGUlMTAwLzEwKT09PTE/InRoIjp0PT09MT8ic3QiOnQ9PT0yPyJuZCI6dD09PTM/InJkIjoidGgiO3JldHVybiBlK259LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImVuLW56Iix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1+fihlJTEwMC8xMCk9PT0xPyJ0aCI6dD09PTE/InN0Ijp0PT09Mj8ibmQiOnQ9PT0zPyJyZCI6InRoIjtyZXR1cm4gZStufSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJlbi1zZyIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1+fihlJTEwMC8xMCk9PT0xPyJ0aCI6dD09PTE/InN0Ijp0PT09Mj8ibmQiOnQ9PT0zPyJyZCI6InRoIjtyZXR1cm4gZStufSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJlbyIse21vbnRoczoiamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hxa1ndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hxa1nX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRpbWFuxIlvX2x1bmRvX21hcmRvX21lcmtyZWRvX8S1YcWtZG9fdmVuZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX8S1YcWtX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX8S1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFtsYV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpPT09InAifSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZT4xMSlyZXR1cm4gbj8icC50Lm0uIjoiUC5ULk0uIjtlbHNlIHJldHVybiBuPyJhLnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhxa0gamVdIExUIixuZXh0RGF5OiJbTW9yZ2HFrSBqZV0gTFQiLG5leHRXZWVrOiJkZGRkW24gamVdIExUIixsYXN0RGF5OiJbSGllcmHFrSBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGHFrSAlcyIsczoia2Vsa2FqIHNla3VuZG9qIixzczoiJWQgc2VrdW5kb2oiLG06InVudSBtaW51dG8iLG1tOiIlZCBtaW51dG9qIixoOiJ1bnUgaG9ybyIsaGg6IiVkIGhvcm9qIixkOiJ1bnUgdGFnbyIsZGQ6IiVkIHRhZ29qIixNOiJ1bnUgbW9uYXRvIixNTToiJWQgbW9uYXRvaiIseToidW51IGphcm8iLHl5OiIlZCBqYXJvaiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1hLyxvcmRpbmFsOiIlZGEiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIG49ImVuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuIi5zcGxpdCgiXyIpLGk9ImVuZV9mZWJfbWFyX2Ficl9tYXlfanVuX2p1bF9hZ29fc2VwX29jdF9ub3ZfZGljIi5zcGxpdCgiXyIpLHQ9Wy9eZW5lL2ksL15mZWIvaSwvXm1hci9pLC9eYWJyL2ksL15tYXkvaSwvXmp1bi9pLC9eanVsL2ksL15hZ28vaSwvXnNlcC9pLC9eb2N0L2ksL15ub3YvaSwvXmRpYy9pXSxyPS9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksYTtlLmRlZmluZUxvY2FsZSgiZXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gbjtlbHNlIGlmKC8tTU1NLS8udGVzdCh0KSlyZXR1cm4gaVtlLm1vbnRoKCldO2Vsc2UgcmV0dXJuIG5bZS5tb250aCgpXX0sbW9udGhzUmVnZXg6cixtb250aHNTaG9ydFJlZ2V4OnIsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOnQsbG9uZ01vbnRoc1BhcnNlOnQsc2hvcnRNb250aHNQYXJzZTp0LHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9taV9qdV92aV9zw6EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisodGhpcy5ob3VycygpIT09MT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWHDsWFuYSBhIGxhIisodGhpcy5ob3VycygpIT09MT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKyh0aGlzLmhvdXJzKCkhPT0xPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkw61hIixkZDoiJWQgZMOtYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYcOxbyIseXk6IiVkIGHDsW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludsOhbGlkYSJ9KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBuPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxpPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSx0PVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0scj0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLGE7ZS5kZWZpbmVMb2NhbGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG47ZWxzZSBpZigvLU1NTS0vLnRlc3QodCkpcmV0dXJuIGlbZS5tb250aCgpXTtlbHNlIHJldHVybiBuW2UubW9udGgoKV19LG1vbnRoc1JlZ2V4OnIsbW9udGhzU2hvcnRSZWdleDpyLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTp0LGxvbmdNb250aHNQYXJzZTp0LHNob3J0TW9udGhzUGFyc2U6dCx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc8OhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisodGhpcy5ob3VycygpIT09MT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWHDsWFuYSBhIGxhIisodGhpcy5ob3VycygpIT09MT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKyh0aGlzLmhvdXJzKCkhPT0xPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkw61hIixkZDoiJWQgZMOtYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYcOxbyIseXk6IiVkIGHDsW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBuPSJlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLiIuc3BsaXQoIl8iKSxpPSJlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYyIuc3BsaXQoIl8iKSx0PVsvXmVuZS9pLC9eZmViL2ksL15tYXIvaSwvXmFici9pLC9ebWF5L2ksL15qdW4vaSwvXmp1bC9pLC9eYWdvL2ksL15zZXAvaSwvXm9jdC9pLC9ebm92L2ksL15kaWMvaV0scj0vXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlfGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLGE7ZS5kZWZpbmVMb2NhbGUoImVzLW14Iix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG47ZWxzZSBpZigvLU1NTS0vLnRlc3QodCkpcmV0dXJuIGlbZS5tb250aCgpXTtlbHNlIHJldHVybiBuW2UubW9udGgoKV19LG1vbnRoc1JlZ2V4OnIsbW9udGhzU2hvcnRSZWdleDpyLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxtb250aHNQYXJzZTp0LGxvbmdNb250aHNQYXJzZTp0LHNob3J0TW9udGhzUGFyc2U6dCx3ZWVrZGF5czoiZG9taW5nb19sdW5lc19tYXJ0ZXNfbWnDqXJjb2xlc19qdWV2ZXNfdmllcm5lc19zw6FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc8OhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hw7FhbmEgYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKyh0aGlzLmhvdXJzKCkhPT0xPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKyh0aGlzLmhvdXJzKCkhPT0xPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisodGhpcy5ob3VycygpIT09MT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZMOtYSIsZGQ6IiVkIGTDrWFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGHDsW8iLHl5OiIlZCBhw7FvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Cui8sb3JkaW5hbDoiJWTCuiIsd2Vlazp7ZG93OjAsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnbDoWxpZGEifSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgbj0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksaT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksdD1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHI9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaSxhO2UuZGVmaW5lTG9jYWxlKCJlcy11cyIse21vbnRoczoiZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDpmdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBuO2Vsc2UgaWYoLy1NTU0tLy50ZXN0KHQpKXJldHVybiBpW2UubW9udGgoKV07ZWxzZSByZXR1cm4gbltlLm1vbnRoKCldfSxtb250aHNSZWdleDpyLG1vbnRoc1Nob3J0UmVnZXg6cixtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6dCxsb25nTW9udGhzUGFyc2U6dCxzaG9ydE1vbnRoc1BhcnNlOnQsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9tacOpLl9qdWUuX3ZpZS5fc8OhYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3PDoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hw7FhbmEgYSBsYSIrKHRoaXMuaG91cnMoKSE9PTE/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKyh0aGlzLmhvdXJzKCkhPT0xPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKyh0aGlzLmhvdXJzKCkhPT0xPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisodGhpcy5ob3VycygpIT09MT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZMOtYSIsZGQ6IiVkIGTDrWFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGHDsW8iLHl5OiIlZCBhw7FvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Cui8sb3JkaW5hbDoiJWTCuiIsd2Vlazp7ZG93OjAsZG95OjZ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiB0KGUsdCxuLGkpe3ZhciByPXtzOlsibcO1bmUgc2VrdW5kaSIsIm3DtW5pIHNla3VuZCIsInBhYXIgc2VrdW5kaXQiXSxzczpbZSsic2VrdW5kaSIsZSsic2VrdW5kaXQiXSxtOlsiw7xoZSBtaW51dGkiLCLDvGtzIG1pbnV0Il0sbW06W2UrIiBtaW51dGkiLGUrIiBtaW51dGl0Il0saDpbIsO8aGUgdHVubmkiLCJ0dW5kIGFlZ2EiLCLDvGtzIHR1bmQiXSxoaDpbZSsiIHR1bm5pIixlKyIgdHVuZGkiXSxkOlsiw7xoZSBww6RldmEiLCLDvGtzIHDDpGV2Il0sTTpbImt1dSBhamEiLCJrdXUgYWVnYSIsIsO8a3Mga3V1Il0sTU06W2UrIiBrdXUiLGUrIiBrdXVkIl0seTpbIsO8aGUgYWFzdGEiLCJhYXN0YSIsIsO8a3MgYWFzdGEiXSx5eTpbZSsiIGFhc3RhIixlKyIgYWFzdGF0Il19O2lmKHQpcmV0dXJuIHJbbl1bMl0/cltuXVsyXTpyW25dWzFdO3JldHVybiBpP3Jbbl1bMF06cltuXVsxXX12YXIgbjtlLmRlZmluZUxvY2FsZSgiZXQiLHttb250aHM6ImphYW51YXJfdmVlYnJ1YXJfbcOkcnRzX2FwcmlsbF9tYWlfanV1bmlfanV1bGlfYXVndXN0X3NlcHRlbWJlcl9va3Rvb2Jlcl9ub3ZlbWJlcl9kZXRzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJww7xoYXDDpGV2X2VzbWFzcMOkZXZfdGVpc2lww6Rldl9rb2xtYXDDpGV2X25lbGphcMOkZXZfcmVlZGVfbGF1cMOkZXYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiUF9FX1RfS19OX1JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1TDpG5hLF0gTFQiLG5leHREYXk6IltIb21tZSxdIExUIixuZXh0V2VlazoiW0rDpHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBww6RyYXN0IixwYXN0OiIlcyB0YWdhc2kiLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDoiJWQgcMOkZXZhIixNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJpZ2FuZGVhX2FzdGVsZWhlbmFfYXN0ZWFydGVhX2FzdGVhemtlbmFfb3N0ZWd1bmFfb3N0aXJhbGFfbGFydW5iYXRhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImlnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiaWdfYWxfYXJfYXpfb2dfb2xfbHIiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIixMTEw6IllZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbSIsbDoiWVlZWS1NLUQiLGxsOiJZWVlZW2tvXSBNTU0gRFthXSIsbGxsOiJZWVlZW2tvXSBNTU0gRFthXSBISDptbSIsbGxsbDoiZGRkLCBZWVlZW2tvXSBNTU0gRFthXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZ2F1cl0gTFRbZXRhbl0iLG5leHREYXk6IltiaWhhcl0gTFRbZXRhbl0iLG5leHRXZWVrOiJkZGRkIExUW2V0YW5dIixsYXN0RGF5OiJbYXR6b10gTFRbZXRhbl0iLGxhc3RXZWVrOiJbYXVycmVrb10gZGRkZCBMVFtldGFuXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgYmFycnUiLHBhc3Q6ImR1ZWxhICVzIixzOiJzZWd1bmRvIGJhdHp1ayIsc3M6IiVkIHNlZ3VuZG8iLG06Im1pbnV0dSBiYXQiLG1tOiIlZCBtaW51dHUiLGg6Im9yZHUgYmF0IixoaDoiJWQgb3JkdSIsZDoiZWd1biBiYXQiLGRkOiIlZCBlZ3VuIixNOiJoaWxhYmV0ZSBiYXQiLE1NOiIlZCBoaWxhYmV0ZSIseToidXJ0ZSBiYXQiLHl5OiIlZCB1cnRlIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6ItuxIiwyOiLbsiIsMzoi27MiLDQ6Itu0Iiw1OiLbtSIsNjoi27YiLDc6Itu3Iiw4OiLbuCIsOToi27kiLDA6ItuwIn0sbj17ItuxIjoiMSIsItuyIjoiMiIsItuzIjoiMyIsItu0IjoiNCIsItu1IjoiNSIsItu2IjoiNiIsItu3IjoiNyIsItu4IjoiOCIsItu5IjoiOSIsItuwIjoiMCJ9LGk7ZS5kZWZpbmVMb2NhbGUoImZhIix7bW9udGhzOiLamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLbjNqp4oCM2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YfigIzYtNmG2KjZh1/ahtmH2KfYsdi02YbYqNmHX9m+2YbYrOKAjNi02YbYqNmHX9is2YXYudmHX9i02YbYqNmHIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItuM2qnigIzYtNmG2KjZh1/Yr9mI2LTZhtio2Ydf2LPZh+KAjNi02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7Zhtis4oCM2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YciLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItuMX9ivX9izX9qGX9m+X9isX9i0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/Zgtio2YQg2KfYsiDYuNmH2LF82KjYudivINin2LIg2LjZh9ixLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybi/YqNi52K8g2KfYsiDYuNmH2LEvLnRlc3QoZSl9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDEyKXJldHVybiLZgtio2YQg2KfYsiDYuNmH2LEiO2Vsc2UgcmV0dXJuItio2LnYryDYp9iyINi42YfYsSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfZhdix2YjYsiDYs9in2LnYql0gTFQiLG5leHREYXk6IlvZgdix2K/YpyDYs9in2LnYql0gTFQiLG5leHRXZWVrOiJkZGRkIFvYs9in2LnYql0gTFQiLGxhc3REYXk6IlvYr9uM2LHZiNiyINiz2KfYudiqXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9m+24zYtF0gW9iz2KfYudiqXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2K/YsSAlcyIscGFzdDoiJXMg2b7bjNi0IixzOiLahtmG2K8g2KvYp9mG24zZhyIsc3M6IiVkINir2KfZhtuM2YciLG06ItuM2qkg2K/ZgtuM2YLZhyIsbW06IiVkINiv2YLbjNmC2YciLGg6ItuM2qkg2LPYp9i52KoiLGhoOiIlZCDYs9in2LnYqiIsZDoi24zaqSDYsdmI2LIiLGRkOiIlZCDYsdmI2LIiLE06ItuM2qkg2YXYp9mHIixNTToiJWQg2YXYp9mHIix5OiLbjNqpINiz2KfZhCIseXk6IiVkINiz2KfZhCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vbsC3buV0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkucmVwbGFjZSgvLC9nLCLYjCIpfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ92YUvLG9yZGluYWw6IiVk2YUiLHdlZWs6e2Rvdzo2LGRveToxMn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBuPSJub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4iLnNwbGl0KCIgIiksaT1bIm5vbGxhIiwieWhkZW4iLCJrYWhkZW4iLCJrb2xtZW4iLCJuZWxqw6RuIiwidmlpZGVuIiwia3V1ZGVuIixuWzddLG5bOF0sbls5XV0sdDtmdW5jdGlvbiByKGUsdCxuLGkpe3ZhciByPSIiO3N3aXRjaChuKXtjYXNlInMiOnJldHVybiBpPyJtdXV0YW1hbiBzZWt1bm5pbiI6Im11dXRhbWEgc2VrdW50aSI7Y2FzZSJzcyI6cj1pPyJzZWt1bm5pbiI6InNla3VudGlhIjticmVhaztjYXNlIm0iOnJldHVybiBpPyJtaW51dXRpbiI6Im1pbnV1dHRpIjtjYXNlIm1tIjpyPWk/Im1pbnV1dGluIjoibWludXV0dGlhIjticmVhaztjYXNlImgiOnJldHVybiBpPyJ0dW5uaW4iOiJ0dW50aSI7Y2FzZSJoaCI6cj1pPyJ0dW5uaW4iOiJ0dW50aWEiO2JyZWFrO2Nhc2UiZCI6cmV0dXJuIGk/InDDpGl2w6RuIjoicMOkaXbDpCI7Y2FzZSJkZCI6cj1pPyJww6RpdsOkbiI6InDDpGl2w6TDpCI7YnJlYWs7Y2FzZSJNIjpyZXR1cm4gaT8ia3V1a2F1ZGVuIjoia3V1a2F1c2kiO2Nhc2UiTU0iOnI9aT8ia3V1a2F1ZGVuIjoia3V1a2F1dHRhIjticmVhaztjYXNlInkiOnJldHVybiBpPyJ2dW9kZW4iOiJ2dW9zaSI7Y2FzZSJ5eSI6cj1pPyJ2dW9kZW4iOiJ2dW90dGEiO2JyZWFrfXI9YShlLGkpKyIgIityO3JldHVybiByfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZTwxMD90P2lbZV06bltlXTplfWUuZGVmaW5lTG9jYWxlKCJmaSIse21vbnRoczoidGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTVt0YV0gWVlZWSIsTExMOiJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIixsbGxsOiJkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdMOkbsOkw6RuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6IltlaWxlbl0gW2tsb10gTFQiLGxhc3RXZWVrOiJbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBww6TDpHN0w6QiLHBhc3Q6IiVzIHNpdHRlbiIsczpyLHNzOnIsbTpyLG1tOnIsaDpyLGhoOnIsZDpyLGRkOnIsTTpyLE1NOnIseTpyLHl5OnJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxhc3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRvIixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJmbyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHLDrWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX23DoW5hZGFndXJfdMO9c2RhZ3VyX21pa3VkYWd1cl9ow7NzZGFndXJfZnLDrWdnamFkYWd1cl9sZXlnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbcOhbl90w71zX21pa19ow7NzX2Zyw61fbGV5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tw6FfdMO9X21pX2jDs19mcl9sZSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbw40gZGFnIGtsLl0gTFQiLG5leHREYXk6IlvDjSBtb3JnaW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IlvDjSBnasOhciBrbC5dIExUIixsYXN0V2VlazoiW3PDrcOwc3R1XSBkZGRkIFtrbF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InVtICVzIixwYXN0OiIlcyBzw63DsGFuaSIsczoiZsOhIHNla3VuZCIsc3M6IiVkIHNla3VuZGlyIixtOiJlaW4gbWludXR0dXIiLG1tOiIlZCBtaW51dHRpciIsaDoiZWluIHTDrW1pIixoaDoiJWQgdMOtbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToiZWluIG3DoW5hw7B1ciIsTU06IiVkIG3DoW5hw7BpciIseToiZWl0dCDDoXIiLHl5OiIlZCDDoXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdD0vXihqYW52aWVyfGbDqXZyaWVyfG1hcnN8YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb8O7dHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkw6ljZW1icmUpL2ksbj0vKGphbnZcLj98ZsOpdnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb8O7dHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZMOpY1wuPykvaSxpPS8oamFudlwuP3xmw6l2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvw7t0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkw6ljXC4/fGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxyPVsvXmphbnYvaSwvXmbDqXZyL2ksL15tYXJzL2ksL15hdnIvaSwvXm1haS9pLC9eanVpbi9pLC9eanVpbC9pLC9eYW/Du3QvaSwvXnNlcHQvaSwvXm9jdC9pLC9ebm92L2ksL15kw6ljL2ldLGE7ZS5kZWZpbmVMb2NhbGUoImZyIix7bW9udGhzOiJqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4OmksbW9udGhzU2hvcnRSZWdleDppLG1vbnRoc1N0cmljdFJlZ2V4OnQsbW9udGhzU2hvcnRTdHJpY3RSZWdleDpuLG1vbnRoc1BhcnNlOnIsbG9uZ01vbnRoc1BhcnNlOnIsc2hvcnRNb250aHNQYXJzZTpyLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJk4oCZaHVpIMOgXSBMVCIsbmV4dERheToiW0RlbWFpbiDDoF0gTFQiLG5leHRXZWVrOiJkZGRkIFvDoF0gTFQiLGxhc3REYXk6IltIaWVyIMOgXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgw6BdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiRCI6cmV0dXJuIGUrKGU9PT0xPyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBlKyhlPT09MT8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyhlPT09MT8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJmci1jYSIse21vbnRoczoiamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmTigJlodWkgw6BdIExUIixuZXh0RGF5OiJbRGVtYWluIMOgXSBMVCIsbmV4dFdlZWs6ImRkZGQgW8OgXSBMVCIsbGFzdERheToiW0hpZXIgw6BdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciDDoF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIGUrKGU9PT0xPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrKGU9PT0xPyJyZSI6ImUiKX19fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiZnItY2giLHttb250aHM6ImphbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJk4oCZaHVpIMOgXSBMVCIsbmV4dERheToiW0RlbWFpbiDDoF0gTFQiLG5leHRXZWVrOiJkZGRkIFvDoF0gTFQiLGxhc3REYXk6IltIaWVyIMOgXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgw6BdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnxlKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkQiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBlKyhlPT09MT8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyhlPT09MT8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBuPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21haV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLGk9Imphbl9mZWJfbXJ0X2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHQ7ZS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG47ZWxzZSBpZigvLU1NTS0vLnRlc3QodCkpcmV0dXJuIGlbZS5tb250aCgpXTtlbHNlIHJldHVybiBuW2UubW9udGgoKV19LG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hqb2VkIG9tXSBMVCIsbmV4dERheToiW21vYXJuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2p1c3RlciBvbV0gTFQiLGxhc3RXZWVrOiJbw7RmcsO7bmVdIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib2VyICVzIixwYXN0OiIlcyBseW4iLHM6ImluIHBlYXIgc2Vrb25kZW4iLHNzOiIlZCBzZWtvbmRlbiIsbToiaWVuIG1pbsO6dCIsbW06IiVkIG1pbnV0ZW4iLGg6ImllbiBvZXJlIixoaDoiJWQgb2VyZW4iLGQ6ImllbiBkZWkiLGRkOiIlZCBkYWdlbiIsTToiaWVuIG1vYW5uZSIsTU06IiVkIG1vYW5uZW4iLHk6ImllbiBqaWVyIix5eToiJWQgamllcnJlbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZSsoZT09PTF8fGU9PT04fHxlPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdCxuLGkscixhLHM7ZS5kZWZpbmVMb2NhbGUoImdhIix7bW9udGhzOlsiRWFuw6FpciIsIkZlYWJocmEiLCJNw6FydGEiLCJBaWJyZcOhbiIsIkJlYWx0YWluZSIsIk1laXRoZWFtaCIsIknDumlsIiwiTMO6bmFzYSIsIk1lw6FuIEbDs21oYWlyIiwiRGVpcmVhZGggRsOzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNw6FydCIsIkFpYiIsIkJlYWwiLCJNZWl0aCIsIknDumlsIiwiTMO6biIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6WyJEw6kgRG9taG5haWdoIiwiRMOpIEx1YWluIiwiRMOpIE3DoWlydCIsIkTDqSBDw6lhZGFvaW4iLCJEw6lhcmRhb2luIiwiRMOpIGhBb2luZSIsIkTDqSBTYXRoYWlybiJdLHdlZWtkYXlzU2hvcnQ6WyJEb21oIiwiTHVhbiIsIk3DoWlydCIsIkPDqWFkIiwiRMOpYXIiLCJBb2luZSIsIlNhdGgiXSx3ZWVrZGF5c01pbjpbIkRvIiwiTHUiLCJNw6EiLCJDw6kiLCJEw6kiLCJBIiwiU2EiXSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbm5pdSBhZ10gTFQiLG5leHREYXk6IltBbcOhcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm7DqSBhZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImkgJXMiLHBhc3Q6IiVzIMOzIHNoaW4iLHM6ImPDunBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToibsOzaW3DqWFkIixtbToiJWQgbsOzaW3DqWFkIixoOiJ1YWlyIGFuIGNobG9pZyIsaGg6IiVkIHVhaXIgYW4gY2hsb2lnIixkOiJsw6EiLGRkOiIlZCBsw6EiLE06Im3DrSIsTU06IiVkIG3DrW9ubmEiLHk6ImJsaWFpbiIseXk6IiVkIGJsaWFpbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZT09PTE/ImQiOmUlMTA9PT0yPyJuYSI6Im1oIjtyZXR1cm4gZSt0fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0LG4saSxyLGEscztlLmRlZmluZUxvY2FsZSgiZ2QiLHttb250aHM6WyJBbSBGYW9pbGxlYWNoIiwiQW4gR2VhcnJhbiIsIkFtIE3DoHJ0IiwiQW4gR2libGVhbiIsIkFuIEPDqGl0ZWFuIiwiQW4gdC3DkmdtaGlvcyIsIkFuIHQtSXVjaGFyIiwiQW4gTMO5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRMOgbWhhaXIiLCJBbiB0LVNhbWhhaW4iLCJBbiBEw7liaGxhY2hkIl0sbW9udGhzU2hvcnQ6WyJGYW9pIiwiR2VhciIsIk3DoHJ0IiwiR2libCIsIkPDqGl0Iiwiw5JnbWgiLCJJdWNoIiwiTMO5biIsIlN1bHQiLCJEw6BtaCIsIlNhbWgiLCJEw7liaCJdLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czpbIkRpZMOybWhuYWljaCIsIkRpbHVhaW4iLCJEaW3DoGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEw7IiLCJMdSIsIk3DoCIsIkNpIiwiQXIiLCJIYSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQW4tZGl1Z2ggYWlnXSBMVCIsbmV4dERheToiW0EtbcOgaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZMOoIGFpZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtzZW8gY2hhaWRoXSBbYWlnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYW5uIGFuICVzIixwYXN0OiJiaG8gY2hpb25uICVzIixzOiJiZWFnYW4gZGlvZ2FuIixzczoiJWQgZGlvZ2FuIixtOiJtaW9uYWlkIixtbToiJWQgbWlvbmFpZGVhbiIsaDoidWFpciIsaGg6IiVkIHVhaXJlYW4iLGQ6ImxhdGhhIixkZDoiJWQgbGF0aGEiLE06Im3DrG9zIixNTToiJWQgbcOsb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZT09PTE/ImQiOmUlMTA9PT0yPyJuYSI6Im1oIjtyZXR1cm4gZSt0fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJnbCIse21vbnRoczoieGFuZWlyb19mZWJyZWlyb19tYXJ6b19hYnJpbF9tYWlvX3h1w7FvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHXDsS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb20uX2x1bi5fbWFyLl9tw6lyLl94b3YuX3Zlbi5fc8OhYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX23DqV94b192ZV9zw6EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveGUgIisodGhpcy5ob3VycygpIT09MT8iw6FzIjoiw6EiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hw7HDoSAiKyh0aGlzLmhvdXJzKCkhPT0xPyLDoXMiOiLDoSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbIisodGhpcy5ob3VycygpIT09MT8iw6FzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKyh0aGlzLmhvdXJzKCkhPT0xPyLDoSI6ImEiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltvXSBkZGRkIFtwYXNhZG8gIisodGhpcy5ob3VycygpIT09MT8iw6FzIjoiYSIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihlKXtpZihlLmluZGV4T2YoInVuIik9PT0wKXJldHVybiJuIitlO3JldHVybiJlbiAiK2V9LHBhc3Q6ImhhaSAlcyIsczoidW5zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuaGEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkw61hIixkZDoiJWQgZMOtYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCmZ1bmN0aW9uIHQoZSx0LG4saSl7dmFyIHI9e3M6WyLgpKXgpYvgpKHgpK/gpL4g4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAIiwi4KSl4KWL4KSh4KWHIOCkuOClheCkleCkguCkoSJdLHNzOltlKyIg4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAIixlKyIg4KS44KWF4KSV4KSC4KShIl0sbTpbIuCkj+CkleCkviDgpK7gpL/gpKPgpJ/gpL7gpKgiLCLgpI/gpJUg4KSu4KS/4KSo4KWC4KSfIl0sbW06W2UrIiDgpK7gpL/gpKPgpJ/gpL7gpILgpKjgpYAiLGUrIiDgpK7gpL/gpKPgpJ/gpL7gpIIiXSxoOlsi4KSP4KSV4KS+IOCkteCksOCkvuCkqCIsIuCkj+CklSDgpLXgpLAiXSxoaDpbZSsiIOCkteCksOCkvuCkguCkqOClgCIsZSsiIOCkteCksOCkvuCkgiJdLGQ6WyLgpI/gpJXgpL4g4KSm4KS/4KS44KS+4KSoIiwi4KSP4KSVIOCkpuClgOCkuCJdLGRkOltlKyIg4KSm4KS/4KS44KS+4KSC4KSo4KWAIixlKyIg4KSm4KWA4KS4Il0sTTpbIuCkj+CkleCkviDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKgiLCLgpI/gpJUg4KSu4KWN4KS54KSv4KSo4KWLIl0sTU06W2UrIiDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKjgpYAiLGUrIiDgpK7gpY3gpLngpK/gpKjgpYciXSx5Olsi4KSP4KSV4KS+IOCkteCksOCljeCkuOCkvuCkqCIsIuCkj+CklSDgpLXgpLDgpY3gpLgiXSx5eTpbZSsiIOCkteCksOCljeCkuOCkvuCkguCkqOClgCIsZSsiIOCkteCksOCljeCkuOCkvuCkgiJdfTtyZXR1cm4gaT9yW25dWzBdOnJbbl1bMV19dmFyIG47ZS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFsb25lOiLgpJzgpL7gpKjgpYfgpLXgpL7gpLDgpYBf4KSr4KWH4KSs4KWN4KSw4KWB4KS14KS+4KSw4KWAX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpYDgpLJf4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLLgpK9f4KSR4KSX4KS44KWN4KSfX+CkuOCkquCljeCkn+Clh+CkguCkrOCksF/gpJHgpJXgpY3gpJ/gpYvgpKzgpLBf4KSo4KWL4KS14KWN4KS54KWH4KSC4KSs4KSwX+CkoeCkv+CkuOClh+CkguCkrOCksCIuc3BsaXQoIl8iKSxmb3JtYXQ6IuCknOCkvuCkqOClh+CkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYDgpJrgpY3gpK/gpL5f4KSu4KS+4KSw4KWN4KSa4KS+4KSa4KWN4KSv4KS+X+Ckj+CkquCljeCksOClgOCksuCkvuCkmuCljeCkr+Ckvl/gpK7gpYfgpK/gpL7gpJrgpY3gpK/gpL5f4KSc4KWC4KSo4KS+4KSa4KWN4KSv4KS+X+CknOClgeCksuCkr+CkvuCkmuCljeCkr+Ckvl/gpJHgpJfgpLjgpY3gpJ/gpL7gpJrgpY3gpK/gpL5f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkkeCkleCljeCkn+Cli+CkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSh4KS/4KS44KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+Ii5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoi4KSc4KS+4KSo4KWHLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpI/gpKrgpY3gpLDgpYAuX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSyLl/gpJHgpJcuX+CkuOCkquCljeCkn+Clh+Ckgi5f4KSR4KSV4KWN4KSf4KWLLl/gpKjgpYvgpLXgpY3gpLngpYfgpIIuX+CkoeCkv+CkuOClh+Ckgi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiLgpIbgpK/gpKTgpL7gpLBf4KS44KWL4KSu4KS+4KSwX+CkruCkguCkl+Cks+CkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSs4KS/4KSw4KWH4KS44KWN4KSk4KS+4KSwX+CkuOClgeCkleCljeCksOCkvuCksF/gpLbgpYfgpKjgpLXgpL7gpLAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4KSG4KSv4KSkLl/gpLjgpYvgpK4uX+CkruCkguCkl+Cksy5f4KSs4KWB4KSnLl/gpKzgpY3gpLDgpYfgpLjgpY3gpKQuX+CkuOClgeCkleCljeCksC5f4KS24KWH4KSoLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4KSGX+CkuOCli1/gpK7gpIJf4KSs4KWBX+CkrOCljeCksOClh1/gpLjgpYFf4KS24KWHIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdIixMVFM6IkEgaDptbTpzcyBb4KS14KS+4KSc4KSk4KS+4KSCXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBb4KS14KS+4KSc4KSk4KS+4KSCXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4KSG4KSv4KScXSBMVCIsbmV4dERheToiW+Ckq+CkvuCksuCljeCkr+CkvuCkgl0gTFQiLG5leHRXZWVrOiJb4KSr4KWB4KSh4KSy4KWLXSBkZGRkWyxdIExUIixsYXN0RGF5OiJb4KSV4KS+4KSyXSBMVCIsbGFzdFdlZWs6IlvgpKvgpL7gpJ/gpLLgpYtdIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyDgpIbgpKbgpYDgpIIiLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOCkteClh+CksCkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJEIjpyZXR1cm4gZSsi4KS14KWH4KSwIjtkZWZhdWx0OmNhc2UiTSI6Y2FzZSJRIjpjYXNlIkRERCI6Y2FzZSJkIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIGV9fSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTov4KSw4KS+4KSk4KWAfOCkuOCkleCkvuCks+ClgOCkgnzgpKbgpKjgpKrgpL7gpLDgpL7gpIJ84KS44KS+4KSC4KSc4KWHLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i4KSw4KS+4KSk4KWAIilyZXR1cm4gZTw0P2U6ZSsxMjtlbHNlIGlmKHQ9PT0i4KS44KSV4KS+4KSz4KWA4KSCIilyZXR1cm4gZTtlbHNlIGlmKHQ9PT0i4KSm4KSo4KSq4KS+4KSw4KS+4KSCIilyZXR1cm4gZT4xMj9lOmUrMTI7ZWxzZSBpZih0PT09IuCkuOCkvuCkguCknOClhyIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuIuCksOCkvuCkpOClgCI7ZWxzZSBpZihlPDEyKXJldHVybiLgpLjgpJXgpL7gpLPgpYDgpIIiO2Vsc2UgaWYoZTwxNilyZXR1cm4i4KSm4KSo4KSq4KS+4KSw4KS+4KSCIjtlbHNlIGlmKGU8MjApcmV0dXJuIuCkuOCkvuCkguCknOClhyI7ZWxzZSByZXR1cm4i4KSw4KS+4KSk4KWAIn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCmZ1bmN0aW9uIHQoZSx0LG4saSl7dmFyIHI9e3M6WyJ0aG9kZGVhIHNla29uZGFtbmkiLCJ0aG9kZGUgc2Vrb25kIl0sc3M6W2UrIiBzZWtvbmRhbW5pIixlKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1tOltlKyIgbWludGFtbmkiLGUrIiBtaW50YW0iXSxoOlsiZWthIHZvcmFuIiwiZWsgdm9yIl0saGg6W2UrIiB2b3JhbW5pIixlKyIgdm9yYW0iXSxkOlsiZWthIGRpc2FuIiwiZWsgZGlzIl0sZGQ6W2UrIiBkaXNhbW5pIixlKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltlKyIgbWhvaW5lYW1uaSIsZSsiIG1ob2luZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3MiXSx5eTpbZSsiIHZvcnNhbW5pIixlKyIgdm9yc2FtIl19O3JldHVybiBpP3Jbbl1bMF06cltuXVsxXX12YXIgbjtlLmRlZmluZUxvY2FsZSgiZ29tLWxhdG4iLHttb250aHM6e3N0YW5kYWxvbmU6IkphbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnIiLnNwbGl0KCJfIiksZm9ybWF0OiJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNoZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJfQnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBbdmF6dGFdIixMVFM6IkEgaDptbTpzcyBbdmF6dGFdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFt2YXp0YV0iLExMTEw6ImRkZGQsIE1NTU0gRG8sIFlZWVksIEEgaDptbSBbdmF6dGFdIixsbGxsOiJkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBaXpdIExUIixuZXh0RGF5OiJbRmFsZWFtXSBMVCIsbmV4dFdlZWs6IltGdWRkbG9dIGRkZGRbLF0gTFQiLGxhc3REYXk6IltLYWxdIExUIixsYXN0V2VlazoiW0ZhdHRsb10gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIGFkaW0iLHM6dCxzczp0LG06dCxtbTp0LGg6dCxoaDp0LGQ6dCxkZDp0LE06dCxNTTp0LHk6dCx5eTp0fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkQiOnJldHVybiBlKyJlciI7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEREQiOmNhc2UiZCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlfX0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6L3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSJyYXRpIilyZXR1cm4gZTw0P2U6ZSsxMjtlbHNlIGlmKHQ9PT0ic29rYWxsaW0iKXJldHVybiBlO2Vsc2UgaWYodD09PSJkb25wYXJhbSIpcmV0dXJuIGU+MTI/ZTplKzEyO2Vsc2UgaWYodD09PSJzYW5qZSIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuInJhdGkiO2Vsc2UgaWYoZTwxMilyZXR1cm4ic29rYWxsaW0iO2Vsc2UgaWYoZTwxNilyZXR1cm4iZG9ucGFyYW0iO2Vsc2UgaWYoZTwyMClyZXR1cm4ic2FuamUiO2Vsc2UgcmV0dXJuInJhdGkifX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6IuCrpyIsMjoi4KuoIiwzOiLgq6kiLDQ6IuCrqiIsNToi4KurIiw2OiLgq6wiLDc6IuCrrSIsODoi4KuuIiw5OiLgq68iLDA6IuCrpiJ9LG49eyLgq6ciOiIxIiwi4KuoIjoiMiIsIuCrqSI6IjMiLCLgq6oiOiI0Iiwi4KurIjoiNSIsIuCrrCI6IjYiLCLgq60iOiI3Iiwi4KuuIjoiOCIsIuCrryI6IjkiLCLgq6YiOiIwIn0saTtlLmRlZmluZUxvY2FsZSgiZ3UiLHttb250aHM6IuCqnOCqvuCqqOCrjeCqr+CrgeCqhuCqsOCrgF/gqqvgq4fgqqzgq43gqrDgq4HgqobgqrDgq4Bf4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqv+Cqsl/gqq7gq4df4Kqc4KuC4KqoX+CqnOCrgeCqsuCqvuCqiF/gqpHgqpfgqrjgq43gqp9f4Kq44Kqq4KuN4Kqf4KuH4Kqu4KuN4Kqs4KqwX+CqkeCqleCrjeCqn+CrjeCqrOCqsF/gqqjgqrXgq4fgqq7gq43gqqzgqrBf4Kqh4Kq/4Kq44KuH4Kqu4KuN4Kqs4KqwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgqpzgqr7gqqjgq43gqq/gq4EuX+Cqq+Crh+CqrOCrjeCqsOCrgS5f4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqvy5f4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr4uX+CqkeCqly5f4Kq44Kqq4KuN4Kqf4KuHLl/gqpHgqpXgq43gqp/gq40uX+CqqOCqteCrhy5f4Kqh4Kq/4Kq44KuHLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IuCqsOCqteCqv+CqteCqvuCqsF/gqrjgq4vgqq7gqrXgqr7gqrBf4Kqu4KqC4KqX4Kqz4Kq14Kq+4KqwX+CqrOCrgeCqp+CrjeCqteCqvuCqsF/gqpfgq4HgqrDgq4HgqrXgqr7gqrBf4Kq24KuB4KqV4KuN4Kqw4Kq14Kq+4KqwX+CqtuCqqOCqv+CqteCqvuCqsCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgqrDgqrXgqr9f4Kq44KuL4KquX+CqruCqguCql+Cqs1/gqqzgq4Hgqqfgq41f4KqX4KuB4Kqw4KuBX+CqtuCrgeCqleCrjeCqsF/gqrbgqqjgqr8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCqsF/gqrjgq4tf4Kqu4KqCX+CqrOCrgV/gqpfgq4Ff4Kq24KuBX+CqtiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4ciLExUUzoiQSBoOm1tOnNzIOCqteCqvuCql+CrjeCqr+CrhyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0g4Kq14Kq+4KqX4KuN4Kqv4KuHIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCqteCqvuCql+CrjeCqr+CrhyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4KqG4KqcXSBMVCIsbmV4dERheToiW+CqleCqvuCqsuCrh10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW+Cql+Cqh+CqleCqvuCqsuCrh10gTFQiLGxhc3RXZWVrOiJb4Kqq4Kq+4Kqb4Kqy4Kq+XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg4Kqu4Kq+IixwYXN0OiIlcyDgqqrgqrngq4fgqrLgqr4iLHM6IuCqheCqruCrgeCqlSDgqqrgqrPgq4siLHNzOiIlZCDgqrjgq4fgqpXgqoLgqqEiLG06IuCqj+CqlSDgqq7gqr/gqqjgqr/gqp8iLG1tOiIlZCDgqq7gqr/gqqjgqr/gqp8iLGg6IuCqj+CqlSDgqpXgqrLgqr7gqpUiLGhoOiIlZCDgqpXgqrLgqr7gqpUiLGQ6IuCqj+CqlSDgqqbgqr/gqrXgqrgiLGRkOiIlZCDgqqbgqr/gqrXgqrgiLE06IuCqj+CqlSDgqq7gqrngqr/gqqjgq4siLE1NOiIlZCDgqq7gqrngqr/gqqjgq4siLHk6IuCqj+CqlSDgqrXgqrDgq43gqrciLHl5OiIlZCDgqrXgqrDgq43gqrcifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gqrDgqr7gqqR84Kqs4Kqq4KuL4KqwfOCquOCqteCqvuCqsHzgqrjgqr7gqoLgqpwvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSLgqrDgqr7gqqQiKXJldHVybiBlPDQ/ZTplKzEyO2Vsc2UgaWYodD09PSLgqrjgqrXgqr7gqrAiKXJldHVybiBlO2Vsc2UgaWYodD09PSLgqqzgqqrgq4vgqrAiKXJldHVybiBlPj0xMD9lOmUrMTI7ZWxzZSBpZih0PT09IuCquOCqvuCqguCqnCIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuIuCqsOCqvuCqpCI7ZWxzZSBpZihlPDEwKXJldHVybiLgqrjgqrXgqr7gqrAiO2Vsc2UgaWYoZTwxNylyZXR1cm4i4Kqs4Kqq4KuL4KqwIjtlbHNlIGlmKGU8MjApcmV0dXJuIuCquOCqvuCqguCqnCI7ZWxzZSByZXR1cm4i4Kqw4Kq+4KqkIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiaGUiLHttb250aHM6IteZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLXmdeg15XXs1/XpNeR16jXs1/Xnteo16Vf15DXpNeo17Nf157XkNeZX9eZ15XXoNeZX9eZ15XXnNeZX9eQ15XXktezX9eh16TXmNezX9eQ15XXp9ezX9eg15XXkdezX9eT16bXntezIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLXqNeQ16nXldefX9ep16DXmV/Xqdec15nXqdeZX9eo15HXmdei15lf15fXnteZ16nXmV/XqdeZ16nXmV/XqdeR16oiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi15DXs1/XkdezX9eS17Nf15PXs1/XlNezX9eV17Nf16nXsyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi15Bf15Ff15Jf15Nf15Rf15Vf16kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW9eRXU1NTU0gWVlZWSIsTExMOiJEIFvXkV1NTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW9eRXU1NTU0gWVlZWSBISDptbSIsbDoiRC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb15TXmdeV150g15HWvl1MVCIsbmV4dERheToiW9ee15fXqCDXkda+XUxUIixuZXh0V2VlazoiZGRkZCBb15HXqdei15RdIExUIixsYXN0RGF5OiJb15DXqtee15XXnCDXkda+XUxUIixsYXN0V2VlazoiW9eR15nXldedXSBkZGRkIFvXlNeQ15fXqNeV158g15HXqdei15RdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLXkdei15XXkyAlcyIscGFzdDoi15zXpNeg15kgJXMiLHM6Itee16HXpNeoINep16DXmdeV16oiLHNzOiIlZCDXqdeg15nXldeqIixtOiLXk9en15QiLG1tOiIlZCDXk9en15XXqiIsaDoi16nXoteUIixoaDpmdW5jdGlvbihlKXtpZihlPT09MilyZXR1cm4i16nXoteq15nXmdedIjtyZXR1cm4gZSsiINep16LXldeqIn0sZDoi15nXldedIixkZDpmdW5jdGlvbihlKXtpZihlPT09MilyZXR1cm4i15nXldee15nXmdedIjtyZXR1cm4gZSsiINeZ157XmdedIn0sTToi15fXldeT16kiLE1NOmZ1bmN0aW9uKGUpe2lmKGU9PT0yKXJldHVybiLXl9eV15PXqdeZ15nXnSI7cmV0dXJuIGUrIiDXl9eV15PXqdeZ150ifSx5OiLXqdeg15QiLHl5OmZ1bmN0aW9uKGUpe2lmKGU9PT0yKXJldHVybiLXqdeg16rXmdeZ150iO2Vsc2UgaWYoZSUxMD09PTAmJmUhPT0xMClyZXR1cm4gZSsiINep16DXlCI7cmV0dXJuIGUrIiDXqdeg15nXnSJ9fSxtZXJpZGllbVBhcnNlOi/XkNeX15Qi16Z815zXpNeg15Qi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815zXpNeg15kg15TXpteU16jXmdeZ151815zXpNeg15XXqiDXkdeV16fXqHzXkdeR15XXp9eofNeR16LXqNeRL2ksaXNQTTpmdW5jdGlvbihlKXtyZXR1cm4vXijXkNeX15Qi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815HXoteo15EpJC8udGVzdChlKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8NSlyZXR1cm4i15zXpNeg15XXqiDXkdeV16fXqCI7ZWxzZSBpZihlPDEwKXJldHVybiLXkdeR15XXp9eoIjtlbHNlIGlmKGU8MTIpcmV0dXJuIG4/J9ec16TXoNeUItemJzoi15zXpNeg15kg15TXpteU16jXmdeZ150iO2Vsc2UgaWYoZTwxOClyZXR1cm4gbj8n15DXl9eUItemJzoi15DXl9eo15kg15TXpteU16jXmdeZ150iO2Vsc2UgcmV0dXJuIteR16LXqNeRIn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLgpaciLDI6IuClqCIsMzoi4KWpIiw0OiLgpaoiLDU6IuClqyIsNjoi4KWsIiw3OiLgpa0iLDg6IuClriIsOToi4KWvIiwwOiLgpaYifSxuPXsi4KWnIjoiMSIsIuClqCI6IjIiLCLgpakiOiIzIiwi4KWqIjoiNCIsIuClqyI6IjUiLCLgpawiOiI2Iiwi4KWtIjoiNyIsIuClriI6IjgiLCLgpa8iOiI5Iiwi4KWmIjoiMCJ9LGk9Wy9e4KSc4KSoL2ksL17gpKvgpLzgpLB84KSr4KSwL2ksL17gpK7gpL7gpLDgpY3gpJovaSwvXuCkheCkquCljeCksOCliC9pLC9e4KSu4KSIL2ksL17gpJzgpYLgpKgvaSwvXuCknOClgeCksi9pLC9e4KSF4KSXL2ksL17gpLjgpL/gpKTgpIJ84KS44KS/4KSkL2ksL17gpIXgpJXgpY3gpJ/gpYIvaSwvXuCkqOCktXzgpKjgpLXgpIIvaSwvXuCkpuCkv+CkuOCkgnzgpKbgpL/gpLgvaV0scj1bL17gpJzgpKgvaSwvXuCkq+CkvOCksC9pLC9e4KSu4KS+4KSw4KWN4KSaL2ksL17gpIXgpKrgpY3gpLDgpYgvaSwvXuCkruCkiC9pLC9e4KSc4KWC4KSoL2ksL17gpJzgpYHgpLIvaSwvXuCkheCkly9pLC9e4KS44KS/4KSkL2ksL17gpIXgpJXgpY3gpJ/gpYIvaSwvXuCkqOCktS9pLC9e4KSm4KS/4KS4L2ldLGE7ZS5kZWZpbmVMb2NhbGUoImhpIix7bW9udGhzOntmb3JtYXQ6IuCknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6IuCknOCkqOCkteCksOClgF/gpKvgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSC4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpILgpKzgpLBf4KSm4KS/4KS44KSC4KSs4KSwIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoi4KSc4KSoLl/gpKvgpLzgpLAuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpYguX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSyLl/gpIXgpJcuX+CkuOCkv+CkpC5f4KSF4KSV4KWN4KSf4KWCLl/gpKjgpLUuX+CkpuCkv+CkuC4iLnNwbGl0KCJfIiksd2Vla2RheXM6IuCksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSy4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgpLDgpLXgpL9f4KS44KWL4KSuX+CkruCkguCkl+Cksl/gpKzgpYHgpKdf4KSX4KWB4KSw4KWCX+CktuClgeCkleCljeCksF/gpLbgpKjgpL8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+CktiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSDgpKzgpJzgpYciLExUUzoiQSBoOm1tOnNzIOCkrOCknOClhyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0g4KSs4KSc4KWHIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhyJ9LG1vbnRoc1BhcnNlOmksbG9uZ01vbnRoc1BhcnNlOmksc2hvcnRNb250aHNQYXJzZTpyLG1vbnRoc1JlZ2V4Oi9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFwuPykvaSxtb250aHNTaG9ydFJlZ2V4Oi9eKOCknOCkqOCkteCksOClgHzgpJzgpKhcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcLj984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLJ84KSF4KSq4KWN4KSw4KWIXC4/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIh84KSc4KWB4KSyXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcLj984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKRcLj984KSF4KSV4KWN4KSf4KWC4KSs4KSwfOCkheCkleCljeCkn+ClglwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVwuP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwfOCkpuCkv+CkuFwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXijgpJzgpKjgpLXgpLDgpYA/fOCkq+CkvOCksOCkteCksOClgHzgpKvgpLDgpLXgpLDgpYA/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSy4KS+4KSIP3zgpIXgpJfgpLjgpY3gpKQ/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkP1wuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXC4/fOCkqOCkteCkruCljeCkrOCksHzgpKjgpLXgpILgpKzgpLA/fOCkpuCkv+CkuOCkruCljeCkrOCksHzgpKbgpL/gpLjgpILgpKzgpLA/KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14o4KSc4KSoXC4/fOCkq+CkvOCksFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliFwuP3zgpK7gpIg/fOCknOClguCkqD984KSc4KWB4KSyXC4/fOCkheCkl1wuP3zgpLjgpL/gpKRcLj984KSF4KSV4KWN4KSf4KWCXC4/fOCkqOCktVwuP3zgpKbgpL/gpLhcLj8pL2ksY2FsZW5kYXI6e3NhbWVEYXk6IlvgpIbgpJxdIExUIixuZXh0RGF5OiJb4KSV4KSyXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4KSV4KSyXSBMVCIsbGFzdFdlZWs6IlvgpKrgpL/gpJvgpLLgpYddIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgpK7gpYfgpIIiLHBhc3Q6IiVzIOCkquCkueCksuClhyIsczoi4KSV4KWB4KSbIOCkueClgCDgpJXgpY3gpLfgpKMiLHNzOiIlZCDgpLjgpYfgpJXgpILgpKEiLG06IuCkj+CklSDgpK7gpL/gpKjgpJ8iLG1tOiIlZCDgpK7gpL/gpKjgpJ8iLGg6IuCkj+CklSDgpJjgpILgpJ/gpL4iLGhoOiIlZCDgpJjgpILgpJ/gpYciLGQ6IuCkj+CklSDgpKbgpL/gpKgiLGRkOiIlZCDgpKbgpL/gpKgiLE06IuCkj+CklSDgpK7gpLngpYDgpKjgpYciLE1NOiIlZCDgpK7gpLngpYDgpKjgpYciLHk6IuCkj+CklSDgpLXgpLDgpY3gpLciLHl5OiIlZCDgpLXgpLDgpY3gpLcifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gpLDgpL7gpKR84KS44KWB4KSs4KS5fOCkpuCli+CkquCkueCksHzgpLbgpL7gpK4vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSLgpLDgpL7gpKQiKXJldHVybiBlPDQ/ZTplKzEyO2Vsc2UgaWYodD09PSLgpLjgpYHgpKzgpLkiKXJldHVybiBlO2Vsc2UgaWYodD09PSLgpKbgpYvgpKrgpLngpLAiKXJldHVybiBlPj0xMD9lOmUrMTI7ZWxzZSBpZih0PT09IuCktuCkvuCkriIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuIuCksOCkvuCkpCI7ZWxzZSBpZihlPDEwKXJldHVybiLgpLjgpYHgpKzgpLkiO2Vsc2UgaWYoZTwxNylyZXR1cm4i4KSm4KWL4KSq4KS54KSwIjtlbHNlIGlmKGU8MjApcmV0dXJuIuCktuCkvuCkriI7ZWxzZSByZXR1cm4i4KSw4KS+4KSkIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiB0KGUsdCxuKXt2YXIgaT1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzcyI6aWYoZT09PTEpaSs9InNla3VuZGEiO2Vsc2UgaWYoZT09PTJ8fGU9PT0zfHxlPT09NClpKz0ic2VrdW5kZSI7ZWxzZSBpKz0ic2VrdW5kaSI7cmV0dXJuIGk7Y2FzZSJtIjpyZXR1cm4gdD8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjppZihlPT09MSlpKz0ibWludXRhIjtlbHNlIGlmKGU9PT0yfHxlPT09M3x8ZT09PTQpaSs9Im1pbnV0ZSI7ZWxzZSBpKz0ibWludXRhIjtyZXR1cm4gaTtjYXNlImgiOnJldHVybiB0PyJqZWRhbiBzYXQiOiJqZWRub2cgc2F0YSI7Y2FzZSJoaCI6aWYoZT09PTEpaSs9InNhdCI7ZWxzZSBpZihlPT09Mnx8ZT09PTN8fGU9PT00KWkrPSJzYXRhIjtlbHNlIGkrPSJzYXRpIjtyZXR1cm4gaTtjYXNlImRkIjppZihlPT09MSlpKz0iZGFuIjtlbHNlIGkrPSJkYW5hIjtyZXR1cm4gaTtjYXNlIk1NIjppZihlPT09MSlpKz0ibWplc2VjIjtlbHNlIGlmKGU9PT0yfHxlPT09M3x8ZT09PTQpaSs9Im1qZXNlY2EiO2Vsc2UgaSs9Im1qZXNlY2kiO3JldHVybiBpO2Nhc2UieXkiOmlmKGU9PT0xKWkrPSJnb2RpbmEiO2Vsc2UgaWYoZT09PTJ8fGU9PT0zfHxlPT09NClpKz0iZ29kaW5lIjtlbHNlIGkrPSJnb2RpbmEiO3JldHVybiBpfX12YXIgbjtlLmRlZmluZUxvY2FsZSgiaHIiLHttb250aHM6e2Zvcm1hdDoic2lqZcSNbmphX3ZlbGphxI1lX2/FvnVqa2FfdHJhdm5qYV9zdmlibmphX2xpcG5qYV9zcnBuamFfa29sb3ZvemFfcnVqbmFfbGlzdG9wYWRhX3N0dWRlbm9nYV9wcm9zaW5jYSIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJzaWouX3ZlbGouX2/FvnUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfxI1lX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRG8gTU1NTSBZWVlZIixMTEw6IkRvIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEbyBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3VdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1xI1lciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJvxaFsdV0gW25lZGplbGp1XSBbdV0gTFQiO2Nhc2UgMzpyZXR1cm4iW3Byb8WhbHVdIFtzcmlqZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvxaFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2VrdW5kaSIsc3M6dCxtOnQsbW06dCxoOnQsaGg6dCxkOiJkYW4iLGRkOnQsTToibWplc2VjIixNTTp0LHk6ImdvZGludSIseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9InZhc8Ohcm5hcCBow6l0ZsWRbiBrZWRkZW4gc3plcmTDoW4gY3PDvHTDtnJ0w7Zrw7ZuIHDDqW50ZWtlbiBzem9tYmF0b24iLnNwbGl0KCIgIiksbjtmdW5jdGlvbiBpKGUsdCxuLGkpe3ZhciByPWU7c3dpdGNoKG4pe2Nhc2UicyI6cmV0dXJuIGl8fHQ/Im7DqWjDoW55IG3DoXNvZHBlcmMiOiJuw6low6FueSBtw6Fzb2RwZXJjZSI7Y2FzZSJzcyI6cmV0dXJuIHIrKGl8fHQpPyIgbcOhc29kcGVyYyI6IiBtw6Fzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5IisoaXx8dD8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlIm1tIjpyZXR1cm4gcisoaXx8dD8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyhpfHx0PyIgw7NyYSI6IiDDs3LDoWphIik7Y2FzZSJoaCI6cmV0dXJuIHIrKGl8fHQ/IiDDs3JhIjoiIMOzcsOhamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyhpfHx0PyIgbmFwIjoiIG5hcGphIik7Y2FzZSJkZCI6cmV0dXJuIHIrKGl8fHQ/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyhpfHx0PyIgaMOzbmFwIjoiIGjDs25hcGphIik7Y2FzZSJNTSI6cmV0dXJuIHIrKGl8fHQ/IiBow7NuYXAiOiIgaMOzbmFwamEiKTtjYXNlInkiOnJldHVybiJlZ3kiKyhpfHx0PyIgw6l2IjoiIMOpdmUiKTtjYXNlInl5IjpyZXR1cm4gcisoaXx8dD8iIMOpdiI6IiDDqXZlIil9cmV0dXJuIiJ9ZnVuY3Rpb24gcihlKXtyZXR1cm4oZT8iIjoiW23Dumx0XSAiKSsiWyIrdFt0aGlzLmRheSgpXSsiXSBMVFsta29yXSJ9ZS5kZWZpbmVMb2NhbGUoImh1Iix7bW9udGhzOiJqYW51w6FyX2ZlYnJ1w6FyX23DoXJjaXVzX8OhcHJpbGlzX23DoWp1c19qw7puaXVzX2rDumxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0w7NiZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tw6FyYy5fw6Fwci5fbcOhai5fasO6bi5fasO6bC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJ2YXPDoXJuYXBfaMOpdGbFkV9rZWRkX3N6ZXJkYV9jc8O8dMO2cnTDtmtfcMOpbnRla19zem9tYmF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InZhc19ow6l0X2tlZGRfc3plX2Nzw7x0X3DDqW5fc3pvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ2X2hfa19zemVfY3NfcF9zem8iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWS4gTU1NTSBELiIsTExMOiJZWVlZLiBNTU1NIEQuIEg6bW0iLExMTEw6IllZWVkuIE1NTU0gRC4sIGRkZGQgSDptbSJ9LG1lcmlkaWVtUGFyc2U6L2RlfGR1L2ksaXNQTTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMSkudG9Mb3dlckNhc2UoKT09PSJ1In0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIG49PT10cnVlPyJkZSI6IkRFIjtlbHNlIHJldHVybiBuPT09dHJ1ZT8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gci5jYWxsKHRoaXMsdHJ1ZSl9LGxhc3REYXk6Ilt0ZWduYXBdIExUWy1rb3JdIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiByLmNhbGwodGhpcyxmYWxzZSl9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIG3Dumx2YSIscGFzdDoiJXMiLHM6aSxzczppLG06aSxtbTppLGg6aSxoaDppLGQ6aSxkZDppLE06aSxNTTppLHk6aSx5eTppfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiaHktYW0iLHttb250aHM6e2Zvcm1hdDoi1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLVsNW41oLVttW+1aHWgF/Wg9Wl1b/WgNW+1aHWgF/VtNWh1oDVv1/VodW61oDVq9WsX9W01aHVtdWr1b1f1bDVuNaC1bbVq9W9X9Ww1bjWgtWs1avVvV/WhdWj1bjVvdW/1bjVvV/VvdWl1brVv9Wl1bTVotWl1oBf1bDVuNWv1b/VpdW01aLVpdaAX9W21bjVtdWl1bTVotWl1oBf1aTVpdWv1b/VpdW01aLVpdaAIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoi1bDVttW+X9aD1b/WgF/VtNaA1b9f1aHVutaAX9W01bXVvV/VsNW21b1f1bDVrNW9X9aF1aPVvV/VvdW61b9f1bDVr9W/X9W21bTVol/VpNWv1b8iLnNwbGl0KCJfIiksd2Vla2RheXM6ItWv1avWgNWh1a/Vq1/VpdaA1a/VuNaC1bfVodWi1anVq1/VpdaA1aXWhNW31aHVotWp1atf1bnVuNaA1aXWhNW31aHVotWp1atf1bDVq9W21aPVt9Wh1aLVqdWrX9W41oLWgNWi1aHVqV/Vt9Wh1aLVodWpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItWv1oDVr1/VpdaA1a9f1aXWgNaEX9W51oDWhF/VsNW21aNf1bjWgtaA1aJf1bfVotWpIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkg1akuIixMTEw6IkQgTU1NTSBZWVlZINWpLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW9Wh1bXVvdaF1oBdIExUIixuZXh0RGF5OiJb1b7VodWy1ahdIExUIixsYXN0RGF5OiJb1aXWgNWl1a9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFvWhdaA1agg1arVodW01ahdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDVsNWl1b/VuCIscGFzdDoiJXMg1aHVvNWh1bsiLHM6ItW01asg1oTVodW21asg1b7VodW11oDVr9W11aHVtiIsc3M6IiVkINW+1aHVtdaA1a/VtdWh1bYiLG06ItaA1bjVutWlIixtbToiJWQg1oDVuNW61aUiLGg6ItWq1aHVtCIsaGg6IiVkINWq1aHVtCIsZDoi1oXWgCIsZGQ6IiVkINaF1oAiLE06ItWh1bTVq9W9IixNTToiJWQg1aHVtNWr1b0iLHk6ItW/1aHWgNWrIix5eToiJWQg1b/VodaA1asifSxtZXJpZGllbVBhcnNlOi/Vo9Wr1bfVpdaA1b7VoXzVodW81aHVvtW41b/VvtWhfNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL14o1oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVtikkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlKXtpZihlPDQpcmV0dXJuItWj1avVt9Wl1oDVvtWhIjtlbHNlIGlmKGU8MTIpcmV0dXJuItWh1bzVodW+1bjVv9W+1aEiO2Vsc2UgaWYoZTwxNylyZXR1cm4i1oHVpdaA1aXVr9W+1aEiO2Vsc2UgcmV0dXJuItWl1oDVpdWv1bjVtdWh1bYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9fFxkezEsMn0tKNWr1bZ81oDVpCkvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpjYXNlIkRERG8iOmlmKGU9PT0xKXJldHVybiBlKyIt1avVtiI7cmV0dXJuIGUrIi3WgNWkIjtkZWZhdWx0OnJldHVybiBlfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSJwYWdpIilyZXR1cm4gZTtlbHNlIGlmKHQ9PT0ic2lhbmciKXJldHVybiBlPj0xMT9lOmUrMTI7ZWxzZSBpZih0PT09InNvcmUifHx0PT09Im1hbGFtIilyZXR1cm4gZSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTEpcmV0dXJuInBhZ2kiO2Vsc2UgaWYoZTwxNSlyZXR1cm4ic2lhbmciO2Vsc2UgaWYoZTwxOSlyZXR1cm4ic29yZSI7ZWxzZSByZXR1cm4ibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Jlc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIsbGFzdERheToiW0tlbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGFsdSBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxhbHUiLHM6ImJlYmVyYXBhIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNlbWVuaXQiLG1tOiIlZCBtZW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiBhKGUpe2lmKGUlMTAwPT09MTEpcmV0dXJuIHRydWU7ZWxzZSBpZihlJTEwPT09MSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWV9ZnVuY3Rpb24gdChlLHQsbixpKXt2YXIgcj1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzIjpyZXR1cm4gdHx8aT8ibm9ra3JhciBzZWvDum5kdXIiOiJub2trcnVtIHNla8O6bmR1bSI7Y2FzZSJzcyI6aWYoYShlKSlyZXR1cm4gcisodHx8aT8ic2Vrw7puZHVyIjoic2Vrw7puZHVtIik7cmV0dXJuIHIrInNla8O6bmRhIjtjYXNlIm0iOnJldHVybiB0PyJtw61uw7p0YSI6Im3DrW7DunR1IjtjYXNlIm1tIjppZihhKGUpKXJldHVybiByKyh0fHxpPyJtw61uw7p0dXIiOiJtw61uw7p0dW0iKTtlbHNlIGlmKHQpcmV0dXJuIHIrIm3DrW7DunRhIjtyZXR1cm4gcisibcOtbsO6dHUiO2Nhc2UiaGgiOmlmKGEoZSkpcmV0dXJuIHIrKHR8fGk/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik7cmV0dXJuIHIrImtsdWtrdXN0dW5kIjtjYXNlImQiOmlmKHQpcmV0dXJuImRhZ3VyIjtyZXR1cm4gaT8iZGFnIjoiZGVnaSI7Y2FzZSJkZCI6aWYoYShlKSl7aWYodClyZXR1cm4gcisiZGFnYXIiO3JldHVybiByKyhpPyJkYWdhIjoiZMO2Z3VtIil9ZWxzZSBpZih0KXJldHVybiByKyJkYWd1ciI7cmV0dXJuIHIrKGk/ImRhZyI6ImRlZ2kiKTtjYXNlIk0iOmlmKHQpcmV0dXJuIm3DoW51w7B1ciI7cmV0dXJuIGk/Im3DoW51w7AiOiJtw6FudcOwaSI7Y2FzZSJNTSI6aWYoYShlKSl7aWYodClyZXR1cm4gcisibcOhbnXDsGlyIjtyZXR1cm4gcisoaT8ibcOhbnXDsGkiOiJtw6FudcOwdW0iKX1lbHNlIGlmKHQpcmV0dXJuIHIrIm3DoW51w7B1ciI7cmV0dXJuIHIrKGk/Im3DoW51w7AiOiJtw6FudcOwaSIpO2Nhc2UieSI6cmV0dXJuIHR8fGk/IsOhciI6IsOhcmkiO2Nhc2UieXkiOmlmKGEoZSkpcmV0dXJuIHIrKHR8fGk/IsOhciI6IsOhcnVtIik7cmV0dXJuIHIrKHR8fGk/IsOhciI6IsOhcmkiKX19dmFyIG47ZS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW7DumFyX2ZlYnLDumFyX21hcnNfYXByw61sX21hw61fasO6bsOtX2rDumzDrV/DoWfDunN0X3NlcHRlbWJlcl9va3TDs2Jlcl9uw7N2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYcOtX2rDum5fasO6bF/DoWfDul9zZXBfb2t0X27Ds3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX23DoW51ZGFndXJfw75yacOwanVkYWd1cl9tacOwdmlrdWRhZ3VyX2ZpbW10dWRhZ3VyX2bDtnN0dWRhZ3VyX2xhdWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X03DoV/DnnJfTWlfRmlfRsO2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbw60gZGFnIGtsLl0gTFQiLG5leHREYXk6IlvDoSBtb3JndW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IlvDrSBnw6ZyIGtsLl0gTFQiLGxhc3RXZWVrOiJbc8Otw7Bhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc8Otw7BhbiIsczp0LHNzOnQsbTp0LG1tOnQsaDoia2x1a2t1c3R1bmQiLGhoOnQsZDp0LGRkOnQsTTp0LE1NOnQseTp0LHl5OnR9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJpdCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiZG9tZW5pY2FfbHVuZWTDrF9tYXJ0ZWTDrF9tZXJjb2xlZMOsX2dpb3ZlZMOsX3ZlbmVyZMOsX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fbHVuX21hcl9tZXJfZ2lvX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21lX2dpX3ZlX3NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltPZ2dpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6dGhpcy5ob3VycygpPT09MD8iICI6ImxsJyIpKyJdTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltEb21hbmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjp0aGlzLmhvdXJzKCk9PT0wPyIgIjoibGwnIikrIl1MVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6dGhpcy5ob3VycygpPT09MD8iICI6ImxsJyIpKyJdTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltJZXJpIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6dGhpcy5ob3VycygpPT09MD8iICI6ImxsJyIpKyJdTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltMYSBzY29yc2FdIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6dGhpcy5ob3VycygpPT09MD8iICI6ImxsJyIpKyJdTFQiO2RlZmF1bHQ6cmV0dXJuIltMbyBzY29yc29dIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6dGhpcy5ob3VycygpPT09MD8iICI6ImxsJyIpKyJdTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidHJhICVzIixwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoiJWQgc2V0dGltYW5lIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoIml0LWNoIix7bW9udGhzOiJnZW5uYWlvX2ZlYmJyYWlvX21hcnpvX2FwcmlsZV9tYWdnaW9fZ2l1Z25vX2x1Z2xpb19hZ29zdG9fc2V0dGVtYnJlX290dG9icmVfbm92ZW1icmVfZGljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imdlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21lbmljYV9sdW5lZMOsX21hcnRlZMOsX21lcmNvbGVkw6xfZ2lvdmVkw6xfdmVuZXJkw6xfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixuZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBbYWxsZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltsYSBzY29yc2FdIGRkZGQgW2FsbGVdIExUIjtkZWZhdWx0OnJldHVybiJbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKGUpe3JldHVybigvXlswLTldLiskLy50ZXN0KGUpPyJ0cmEiOiJpbiIpKyIgIitlfSxwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNvbmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVkIGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiLku6TlkowiLG5hcnJvdzoi44u/IixhYmJyOiJSIn0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToi5bmz5oiQIixuYXJyb3c6IuONuyIsYWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6IuaYreWSjCIsbmFycm93OiLjjbwiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiLlpKfmraMiLG5hcnJvdzoi4429IixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0OjYsbmFtZToi5piO5rK7IixuYXJyb3c6IuONviIsYWJicjoiTSJ9LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Iuilv+aapiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi1JbmZpbml0eSxvZmZzZXQ6MSxuYW1lOiLntIDlhYPliY0iLG5hcnJvdzoiQkMiLGFiYnI6IkJDIn1dLGVyYVllYXJPcmRpbmFsUmVnZXg6LyjlhYN8XGQrKeW5tC8sZXJhWWVhck9yZGluYWxQYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiB0WzFdPT09IuWFgyI/MTpwYXJzZUludCh0WzFdfHxlLDEwKX0sbW9udGhzOiIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgiLnNwbGl0KCJfIiksd2Vla2RheXM6IuaXpeabnOaXpV/mnIjmm5zml6Vf54Gr5puc5pelX+awtOabnOaXpV/mnKjmm5zml6Vf6YeR5puc5pelX+Wcn+abnOaXpSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuaXpV/mnIhf54GrX+awtF/mnKhf6YeRX+WcnyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWeW5tE3mnIhE5pelIixMTEw6IllZWVnlubRN5pyIROaXpSBISDptbSIsTExMTDoiWVlZWeW5tE3mnIhE5pelIGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZ5bm0TeaciETml6UiLGxsbDoiWVlZWeW5tE3mnIhE5pelIEhIOm1tIixsbGxsOiJZWVlZ5bm0TeaciETml6UoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+WNiOWJjXzljYjlvowvaSxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IuWNiOW+jCJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDEyKXJldHVybiLljYjliY0iO2Vsc2UgcmV0dXJuIuWNiOW+jCJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb5LuK5pelXSBMVCIsbmV4dERheToiW+aYjuaXpV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKGUpe2lmKGUud2VlaygpIT09dGhpcy53ZWVrKCkpcmV0dXJuIlvmnaXpgLFdZGRkZCBMVCI7ZWxzZSByZXR1cm4iZGRkZCBMVCJ9LGxhc3REYXk6IlvmmKjml6VdIExUIixsYXN0V2VlazpmdW5jdGlvbihlKXtpZih0aGlzLndlZWsoKSE9PWUud2VlaygpKXJldHVybiJb5YWI6YCxXWRkZGQgTFQiO2Vsc2UgcmV0dXJuImRkZGQgTFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3ml6UvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJ5IjpyZXR1cm4gZT09PTE/IuWFg+W5tCI6ZSsi5bm0IjtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBlKyLml6UiO2RlZmF1bHQ6cmV0dXJuIGV9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPlvowiLHBhc3Q6IiVz5YmNIixzOiLmlbDnp5IiLHNzOiIlZOenkiIsbToiMeWIhiIsbW06IiVk5YiGIixoOiIx5pmC6ZaTIixoaDoiJWTmmYLplpMiLGQ6IjHml6UiLGRkOiIlZOaXpSIsTToiMeODtuaciCIsTU06IiVk44O25pyIIix5OiIx5bm0Iix5eToiJWTlubQifX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImp2Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3BlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01laV9KdW5fSnVsX0Fnc19TZXBfT2t0X05vcF9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ik1pbmdndV9TZW5lbl9TZWxvc29fUmVidV9LZW1pc19KZW11d2FoX1NlcHR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU3AiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9lbmppbmd8c2l5YW5nfHNvbnRlbnxuZGFsdS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09ImVuamluZyIpcmV0dXJuIGU7ZWxzZSBpZih0PT09InNpeWFuZyIpcmV0dXJuIGU+PTExP2U6ZSsxMjtlbHNlIGlmKHQ9PT0ic29udGVuInx8dD09PSJuZGFsdSIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDExKXJldHVybiJlbmppbmciO2Vsc2UgaWYoZTwxNSlyZXR1cm4ic2l5YW5nIjtlbHNlIGlmKGU8MTkpcmV0dXJuInNvbnRlbiI7ZWxzZSByZXR1cm4ibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgia2EiLHttb250aHM6IuGDmOGDkOGDnOGDleGDkOGDoOGDmF/hg5fhg5Thg5Hhg5Thg6Dhg5Xhg5Dhg5rhg5hf4YOb4YOQ4YOg4YOi4YOYX+GDkOGDnuGDoOGDmOGDmuGDmF/hg5vhg5Dhg5jhg6Hhg5hf4YOY4YOV4YOc4YOY4YOh4YOYX+GDmOGDleGDmuGDmOGDoeGDmF/hg5Dhg5Lhg5Xhg5jhg6Hhg6Lhg51f4YOh4YOU4YOl4YOi4YOU4YOb4YOR4YOU4YOg4YOYX+GDneGDpeGDouGDneGDm+GDkeGDlOGDoOGDmF/hg5zhg53hg5Thg5vhg5Hhg5Thg6Dhg5hf4YOT4YOU4YOZ4YOU4YOb4YOR4YOU4YOg4YOYIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLhg5jhg5Dhg5xf4YOX4YOU4YORX+GDm+GDkOGDoF/hg5Dhg57hg6Bf4YOb4YOQ4YOYX+GDmOGDleGDnF/hg5jhg5Xhg5pf4YOQ4YOS4YOVX+GDoeGDlOGDpV/hg53hg6Xhg6Jf4YOc4YOd4YOUX+GDk+GDlOGDmSIuc3BsaXQoIl8iKSx3ZWVrZGF5czp7c3RhbmRhbG9uZToi4YOZ4YOV4YOY4YOg4YOQX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDmF/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDmF/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg5hf4YOo4YOQ4YOR4YOQ4YOX4YOYIi5zcGxpdCgiXyIpLGZvcm1hdDoi4YOZ4YOV4YOY4YOg4YOQ4YOhX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDoV/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDoV/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg6Ff4YOo4YOQ4YOR4YOQ4YOX4YOhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi8o4YOs4YOY4YOc4YOQfOGDqOGDlOGDm+GDk+GDlOGDkikvfSx3ZWVrZGF5c1Nob3J0OiLhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuGDmeGDlV/hg53hg6Bf4YOh4YOQX+GDneGDl1/hg67hg6Nf4YOe4YOQX+GDqOGDkCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilvhg5Phg6bhg5Thg6FdIExUWy3hg5bhg5RdIixuZXh0RGF5OiJb4YOu4YOV4YOQ4YOaXSBMVFst4YOW4YOUXSIsbGFzdERheToiW+GDkuGDo+GDqOGDmOGDnF0gTFRbLeGDluGDlF0iLG5leHRXZWVrOiJb4YOo4YOU4YOb4YOT4YOU4YOSXSBkZGRkIExUWy3hg5bhg5RdIixsYXN0V2VlazoiW+GDrOGDmOGDnOGDkF0gZGRkZCBMVC3hg5bhg5QiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvKOGDrOGDkOGDm3zhg6zhg6Phg5d84YOh4YOQ4YOQ4YOXfOGDrOGDlOGDmnzhg5Phg6Z84YOX4YOVKSjhg5h84YOUKS8sZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuPT09IuGDmCI/dCsi4YOo4YOYIjp0K24rIuGDqOGDmCJ9KX0scGFzdDpmdW5jdGlvbihlKXtpZigvKOGDrOGDkOGDm+GDmHzhg6zhg6Phg5fhg5h84YOh4YOQ4YOQ4YOX4YOYfOGDk+GDpuGDlHzhg5fhg5Xhg5QpLy50ZXN0KGUpKXJldHVybiBlLnJlcGxhY2UoLyjhg5h84YOUKSQvLCLhg5jhg6Eg4YOs4YOY4YOcIik7aWYoL+GDrOGDlOGDmuGDmC8udGVzdChlKSlyZXR1cm4gZS5yZXBsYWNlKC/hg6zhg5Thg5rhg5gkLywi4YOs4YOa4YOY4YOhIOGDrOGDmOGDnCIpO3JldHVybiBlfSxzOiLhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYIixzczoiJWQg4YOs4YOQ4YOb4YOYIixtOiLhg6zhg6Phg5fhg5giLG1tOiIlZCDhg6zhg6Phg5fhg5giLGg6IuGDoeGDkOGDkOGDl+GDmCIsaGg6IiVkIOGDoeGDkOGDkOGDl+GDmCIsZDoi4YOT4YOm4YOUIixkZDoiJWQg4YOT4YOm4YOUIixNOiLhg5fhg5Xhg5QiLE1NOiIlZCDhg5fhg5Xhg5QiLHk6IuGDrOGDlOGDmuGDmCIseXk6IiVkIOGDrOGDlOGDmuGDmCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LzB8MS3hg5rhg5h84YOb4YOULVxkezEsMn18XGR7MSwyfS3hg5QvLG9yZGluYWw6ZnVuY3Rpb24oZSl7aWYoZT09PTApcmV0dXJuIGU7aWYoZT09PTEpcmV0dXJuIGUrIi3hg5rhg5giO2lmKGU8MjB8fGU8PTEwMCYmZSUyMD09PTB8fGUlMTAwPT09MClyZXR1cm4i4YOb4YOULSIrZTtyZXR1cm4gZSsiLeGDlCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIGk9ezA6Ii3RiNGWIiwxOiIt0YjRliIsMjoiLdGI0ZYiLDM6Ii3RiNGWIiw0OiIt0YjRliIsNToiLdGI0ZYiLDY6Ii3RiNGLIiw3OiIt0YjRliIsODoiLdGI0ZYiLDk6Ii3RiNGLIiwxMDoiLdGI0YsiLDIwOiIt0YjRiyIsMzA6Ii3RiNGLIiw0MDoiLdGI0YsiLDUwOiIt0YjRliIsNjA6Ii3RiNGLIiw3MDoiLdGI0ZYiLDgwOiIt0YjRliIsOTA6Ii3RiNGLIiwxMDA6Ii3RiNGWIn0sdDtlLmRlZmluZUxvY2FsZSgia2siLHttb250aHM6ItKb0LDSo9GC0LDRgF/QsNKb0L/QsNC9X9C90LDRg9GA0YvQt1/RgdOZ0YPRltGAX9C80LDQvNGL0YBf0LzQsNGD0YHRi9C8X9GI0ZbQu9C00LVf0YLQsNC80YvQt1/Sm9GL0YDQutKv0LnQtdC6X9Kb0LDQt9Cw0L1f0pvQsNGA0LDRiNCwX9C20LXQu9GC0L7Sm9GB0LDQvSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0pvQsNKjX9Cw0pvQv1/QvdCw0YNf0YHTmdGDX9C80LDQvF/QvNCw0YNf0YjRltC7X9GC0LDQvF/Sm9GL0YBf0pvQsNC3X9Kb0LDRgF/QttC10LsiLnNwbGl0KCJfIiksd2Vla2RheXM6ItC20LXQutGB0LXQvdCx0ZZf0LTSr9C50YHQtdC90LHRll/RgdC10LnRgdC10L3QsdGWX9GB05nRgNGB0LXQvdCx0ZZf0LHQtdC50YHQtdC90LHRll/QttKx0LzQsF/RgdC10L3QsdGWIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItC20LXQul/QtNKv0Llf0YHQtdC5X9GB05nRgF/QsdC10Llf0LbSsdC8X9GB0LXQvSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0LbQul/QtNC5X9GB0Llf0YHRgF/QsdC5X9C20Lxf0YHQvSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQkdKv0LPRltC9INGB0LDSk9Cw0YJdIExUIixuZXh0RGF5OiJb0JXRgNGC0LXSoyDRgdCw0pPQsNGCXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9GB0LDSk9Cw0YJdIExUIixsYXN0RGF5OiJb0JrQtdGI0LUg0YHQsNKT0LDRgl0gTFQiLGxhc3RXZWVrOiJb06jRgtC60LXQvSDQsNC/0YLQsNC90YvSo10gZGRkZCBb0YHQsNKT0LDRgl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzINGW0YjRltC90LTQtSIscGFzdDoiJXMg0LHSsdGA0YvQvSIsczoi0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0IixzczoiJWQg0YHQtdC60YPQvdC0IixtOiLQsdGW0YAg0LzQuNC90YPRgiIsbW06IiVkINC80LjQvdGD0YIiLGg6ItCx0ZbRgCDRgdCw0pPQsNGCIixoaDoiJWQg0YHQsNKT0LDRgiIsZDoi0LHRltGAINC60q/QvSIsZGQ6IiVkINC60q/QvSIsTToi0LHRltGAINCw0LkiLE1NOiIlZCDQsNC5Iix5OiLQsdGW0YAg0LbRi9C7Iix5eToiJWQg0LbRi9C7In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o0YjRlnzRiNGLKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwLG49ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyhpW2VdfHxpW3RdfHxpW25dKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdD17MToi4Z+hIiwyOiLhn6IiLDM6IuGfoyIsNDoi4Z+kIiw1OiLhn6UiLDY6IuGfpiIsNzoi4Z+nIiw4OiLhn6giLDk6IuGfqSIsMDoi4Z+gIn0sbj17IuGfoSI6IjEiLCLhn6IiOiIyIiwi4Z+jIjoiMyIsIuGfpCI6IjQiLCLhn6UiOiI1Iiwi4Z+mIjoiNiIsIuGfpyI6IjciLCLhn6giOiI4Iiwi4Z+pIjoiOSIsIuGfoCI6IjAifSxpO2UuZGVmaW5lTG9jYWxlKCJrbSIse21vbnRoczoi4Z6Y4Z6A4Z6a4Z62X+GegOGeu+GemOGfkuGel+GfiF/hnpjhnrjhnpPhnrZf4Z6Y4Z+B4Z6f4Z62X+Gep+Gen+Gel+Getl/hnpjhnrfhnpDhnrvhnpPhnrZf4Z6A4Z6A4Z+S4Z6A4Z6K4Z62X+Gen+GeuOGeoOGetl/hnoDhnonhn5LhnonhnrZf4Z6P4Z674Z6b4Z62X+GenOGet+GeheGfkuGehuGet+GegOGetl/hnpLhn5LhnpPhnrwiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuGemOGegOGemuGetl/hnoDhnrvhnpjhn5Lhnpfhn4hf4Z6Y4Z644Z6T4Z62X+GemOGfgeGen+Getl/hnqfhnp/hnpfhnrZf4Z6Y4Z634Z6Q4Z674Z6T4Z62X+GegOGegOGfkuGegOGeiuGetl/hnp/hnrjhnqDhnrZf4Z6A4Z6J4Z+S4Z6J4Z62X+Gej+Geu+Gem+Getl/hnpzhnrfhnoXhn5LhnobhnrfhnoDhnrZf4Z6S4Z+S4Z6T4Z68Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLhnqLhnrbhnpHhnrfhno/hn5Lhnplf4Z6F4Z+Q4Z6T4Z+S4Z6RX+GeouGehOGfkuGeguGetuGeml/hnpbhnrvhnpJf4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z634Z+NX+Gen+Geu+GegOGfkuGeml/hnp/hn4Xhnprhn40iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4Z6i4Z62X+GehV/hnqJf4Z6WX+GeluGfkuGeml/hnp/hnrtf4Z6fIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLhnqLhnrZf4Z6FX+Geol/hnpZf4Z6W4Z+S4Z6aX+Gen+Geu1/hnp8iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+GeluGfkuGemuGeueGegHzhnpvhn5LhnoThnrbhnoUvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0i4Z6b4Z+S4Z6E4Z624Z6FIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIuGeluGfkuGemuGeueGegCI7ZWxzZSByZXR1cm4i4Z6b4Z+S4Z6E4Z624Z6FIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvhnpDhn5LhnoThn4PhnpPhn4Hhn4cg4Z6Y4Z+J4Z+E4Z6EXSBMVCIsbmV4dERheToiW+Gen+GfkuGeouGfguGegCDhnpjhn4nhn4ThnoRdIExUIixuZXh0V2VlazoiZGRkZCBb4Z6Y4Z+J4Z+E4Z6EXSBMVCIsbGFzdERheToiW+GemOGfkuGen+Get+Gem+GemOGet+GeiSDhnpjhn4nhn4ThnoRdIExUIixsYXN0V2VlazoiZGRkZCBb4Z6f4Z6U4Z+S4Z6P4Z624Z6g4Z+N4Z6Y4Z674Z6TXSBb4Z6Y4Z+J4Z+E4Z6EXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPhnpHhn4Dhno8iLHBhc3Q6IiVz4Z6Y4Z674Z6TIixzOiLhnpThn4nhnrvhnpPhn5LhnpjhnrbhnpPhnpzhnrfhnpPhnrbhnpHhnrgiLHNzOiIlZCDhnpzhnrfhnpPhnrbhnpHhnrgiLG06IuGemOGeveGemeGek+GetuGekeGeuCIsbW06IiVkIOGek+GetuGekeGeuCIsaDoi4Z6Y4Z694Z6Z4Z6Y4Z+J4Z+E4Z6EIixoaDoiJWQg4Z6Y4Z+J4Z+E4Z6EIixkOiLhnpjhnr3hnpnhnpDhn5LhnoThn4MiLGRkOiIlZCDhnpDhn5LhnoThn4MiLE06IuGemOGeveGemeGegeGfgiIsTU06IiVkIOGegeGfgiIseToi4Z6Y4Z694Z6Z4Z6G4Z+S4Z6T4Z624Z+GIix5eToiJWQg4Z6G4Z+S4Z6T4Z624Z+GIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov4Z6R4Z64XGR7MSwyfS8sb3JkaW5hbDoi4Z6R4Z64JWQiLHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vhn6Hhn6Lhn6Phn6Thn6Xhn6bhn6fhn6jhn6nhn6BdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6IuCzpyIsMjoi4LOoIiwzOiLgs6kiLDQ6IuCzqiIsNToi4LOrIiw2OiLgs6wiLDc6IuCzrSIsODoi4LOuIiw5OiLgs68iLDA6IuCzpiJ9LG49eyLgs6ciOiIxIiwi4LOoIjoiMiIsIuCzqSI6IjMiLCLgs6oiOiI0Iiwi4LOrIjoiNSIsIuCzrCI6IjYiLCLgs60iOiI3Iiwi4LOuIjoiOCIsIuCzryI6IjkiLCLgs6YiOiIwIn0saTtlLmRlZmluZUxvY2FsZSgia24iLHttb250aHM6IuCynOCyqOCyteCysOCyv1/gsqvgs4bgsqzgs43gsrDgsrXgsrDgsr9f4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKC4LKs4LKw4LONX+CyheCyleCzjeCyn+CzhuCzguCzleCyrOCysOCzjV/gsqjgsrXgs4bgsoLgsqzgsrDgs41f4LKh4LK/4LK44LOG4LKC4LKs4LKw4LONIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLgspzgsqhf4LKr4LOG4LKs4LON4LKwX+CyruCyvuCysOCzjeCymuCzjV/gso/gsqrgs43gsrDgsr/gsrLgs41f4LKu4LOG4LOVX+CynOCzguCyqOCzjV/gspzgs4HgsrLgs4bgs5Zf4LKG4LKX4LK44LON4LKf4LONX+CyuOCzhuCyquCzjeCyn+CzhuCygl/gsoXgspXgs43gsp/gs4bgs4Lgs5Vf4LKo4LK14LOG4LKCX+CyoeCyv+CyuOCzhuCygiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IuCyreCyvuCyqOCzgeCyteCyvuCysF/gsrjgs4bgs4Lgs5Xgsq7gsrXgsr7gsrBf4LKu4LKC4LKX4LKz4LK14LK+4LKwX+CyrOCzgeCyp+CyteCyvuCysF/gspfgs4HgsrDgs4HgsrXgsr7gsrBf4LK24LOB4LKV4LON4LKw4LK14LK+4LKwX+CytuCyqOCyv+CyteCyvuCysCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgsq3gsr7gsqjgs4Ff4LK44LOG4LOC4LOV4LKuX+CyruCyguCyl+Cys1/gsqzgs4Hgsqdf4LKX4LOB4LKw4LOBX+CytuCzgeCyleCzjeCysF/gsrbgsqjgsr8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCyreCyvl/gsrjgs4bgs4Lgs5Vf4LKu4LKCX+CyrOCzgV/gspfgs4Ff4LK24LOBX+CytiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgsofgsoLgsqbgs4FdIExUIixuZXh0RGF5OiJb4LKo4LK+4LKz4LOGXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4LKo4LK/4LKo4LON4LKo4LOGXSBMVCIsbGFzdFdlZWs6IlvgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgsqjgsoLgsqTgsrAiLHBhc3Q6IiVzIOCyueCyv+CyguCypuCzhiIsczoi4LKV4LOG4LKy4LK14LOBIOCyleCzjeCyt+Cyo+Cyl+Cys+CzgSIsc3M6IiVkIOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CzgSIsbToi4LKS4LKC4LKm4LOBIOCyqOCyv+CyruCyv+CytyIsbW06IiVkIOCyqOCyv+CyruCyv+CytyIsaDoi4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhiIsaGg6IiVkIOCyl+CyguCyn+CzhiIsZDoi4LKS4LKC4LKm4LOBIOCypuCyv+CyqCIsZGQ6IiVkIOCypuCyv+CyqCIsTToi4LKS4LKC4LKm4LOBIOCypOCyv+CyguCyl+Cys+CzgSIsTU06IiVkIOCypOCyv+CyguCyl+Cys+CzgSIseToi4LKS4LKC4LKm4LOBIOCyteCysOCzjeCytyIseXk6IiVkIOCyteCysOCzjeCytyJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgs6fgs6jgs6ngs6rgs6vgs6zgs63gs67gs6/gs6ZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+CysOCyvuCypOCzjeCysOCyv3zgsqzgs4bgsrPgsr/gspfgs43gspfgs4Z84LKu4LKn4LON4LKv4LK+4LK54LON4LKofOCyuOCyguCynOCzhi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09IuCysOCyvuCypOCzjeCysOCyvyIpcmV0dXJuIGU8ND9lOmUrMTI7ZWxzZSBpZih0PT09IuCyrOCzhuCys+Cyv+Cyl+CzjeCyl+CzhiIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuCyruCyp+CzjeCyr+CyvuCyueCzjeCyqCIpcmV0dXJuIGU+PTEwP2U6ZSsxMjtlbHNlIGlmKHQ9PT0i4LK44LKC4LKc4LOGIilyZXR1cm4gZSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8NClyZXR1cm4i4LKw4LK+4LKk4LON4LKw4LK/IjtlbHNlIGlmKGU8MTApcmV0dXJuIuCyrOCzhuCys+Cyv+Cyl+CzjeCyl+CzhiI7ZWxzZSBpZihlPDE3KXJldHVybiLgsq7gsqfgs43gsq/gsr7gsrngs43gsqgiO2Vsc2UgaWYoZTwyMClyZXR1cm4i4LK44LKC4LKc4LOGIjtlbHNlIHJldHVybiLgsrDgsr7gsqTgs43gsrDgsr8ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOCyqOCzhuCzlSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIuCyqOCzhuCzlSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIx7JuUXzLsm5RfM+yblF807JuUXzXsm5RfNuyblF837JuUXzjsm5RfOeyblF8xMOyblF8xMeyblF8xMuyblCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QiLnNwbGl0KCJfIiksd2Vla2RheXM6IuydvOyalOydvF/sm5TsmpTsnbxf7ZmU7JqU7J28X+yImOyalOydvF/rqqnsmpTsnbxf6riI7JqU7J28X+2GoOyalOydvCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuydvF/sm5Rf7ZmUX+yImF/rqqlf6riIX+2GoCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZWeuFhCBNTU1NIETsnbwiLExMTDoiWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tIixMTExMOiJZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZ64WEIE1NTU0gROydvCIsbGxsOiJZWVlZ64WEIE1NTU0gROydvCBBIGg6bW0iLGxsbGw6IllZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IuyYpOuKmCBMVCIsbmV4dERheToi64K07J28IExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToi7Ja07KCcIExUIixsYXN0V2Vlazoi7KeA64Kc7KO8IGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIO2bhCIscGFzdDoiJXMg7KCEIixzOiLrqocg7LSIIixzczoiJWTstIgiLG06IjHrtoQiLG1tOiIlZOu2hCIsaDoi7ZWcIOyLnOqwhCIsaGg6IiVk7Iuc6rCEIixkOiLtlZjro6giLGRkOiIlZOydvCIsTToi7ZWcIOuLrCIsTU06IiVk64usIix5OiLsnbwg64WEIix5eToiJWTrhYQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOydvHzsm5R87KO8KS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBlKyLsnbwiO2Nhc2UiTSI6cmV0dXJuIGUrIuyblCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyLso7wiO2RlZmF1bHQ6cmV0dXJuIGV9fSxtZXJpZGllbVBhcnNlOi/smKTsoIR87Jik7ZuELyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IuyYpO2bhCJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8i7Jik7KCEIjoi7Jik7ZuEIn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLZoSIsMjoi2aIiLDM6ItmjIiw0OiLZpCIsNToi2aUiLDY6ItmmIiw3OiLZpyIsODoi2agiLDk6ItmpIiwwOiLZoCJ9LG49eyLZoSI6IjEiLCLZoiI6IjIiLCLZoyI6IjMiLCLZpCI6IjQiLCLZpSI6IjUiLCLZpiI6IjYiLCLZpyI6IjciLCLZqCI6IjgiLCLZqSI6IjkiLCLZoCI6IjAifSxpPVsi2qnYp9mG2YjZhtuMINiv2YjZiNuV2YUiLCLYtNmI2KjYp9iqIiwi2KbYp9iy2KfYsSIsItmG24zYs9in2YYiLCLYptin24zYp9ixIiwi2K3ZiNiy25XbjNix2KfZhiIsItiq25XZhdmF2YjYsiIsItim2KfYqCIsItim25XbjNmE2YjZiNmEIiwi2KrYtNix24zZhtuMINuM25XZg9uV2YUiLCLYqti02LHbjNmG24wg2K/ZiNmI25XZhSIsItmD2KfZhtmI2YbbjCDbjNuV2qnbldmFIl0scjtlLmRlZmluZUxvY2FsZSgia3UiLHttb250aHM6aSxtb250aHNTaG9ydDppLHdlZWtkYXlzOiLbjNmH4oCM2YPYtNmH4oCM2YXZhdmH4oCMX9iv2YjZiNi02YfigIzZhdmF2YfigIxf2LPbjti02YfigIzZhdmF2YfigIxf2obZiNin2LHYtNmH4oCM2YXZhdmH4oCMX9m+247Zhtis2LTZh+KAjNmF2YXZh+KAjF/Zh9mH4oCM24zZhtuMX9i02YfigIzZhdmF2YfigIwiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi24zZh+KAjNmD2LTZh+KAjNmFX9iv2YjZiNi02YfigIzZhV/Ys9uO2LTZh+KAjNmFX9qG2YjYp9ix2LTZh+KAjNmFX9m+247Zhtis2LTZh+KAjNmFX9mH2YfigIzbjNmG24xf2LTZh+KAjNmF2YXZh+KAjCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi24xf2K9f2LNf2oZf2b5f2Ydf2LQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L9im247ZiNin2LHZh+KAjHzYqNmH4oCM24zYp9mG24wvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL9im247ZiNin2LHZh+KAjC8udGVzdChlKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuItio2YfigIzbjNin2YbbjCI7ZWxzZSByZXR1cm4i2KbbjtmI2KfYsdmH4oCMIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvYptmH4oCM2YXYsduGINmD2KfYqtqY2YXbjtixXSBMVCIsbmV4dERheToiW9io2YfigIzbjNin2YbbjCDZg9in2KramNmF247YsV0gTFQiLG5leHRXZWVrOiJkZGRkIFvZg9in2KramNmF247YsV0gTFQiLGxhc3REYXk6IlvYr9mI247ZhtuOINmD2KfYqtqY2YXbjtixXSBMVCIsbGFzdFdlZWs6ImRkZGQgW9mD2KfYqtqY2YXbjtixXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi2YTZh+KAjCAlcyIscGFzdDoiJXMiLHM6ItqG2YfigIzZhtivINqG2LHZg9mH4oCM24zZh+KAjNmDIixzczoi2obYsdmD2YfigIwgJWQiLG06ItuM2YfigIzZgyDYrtmI2YTZh+KAjNmDIixtbToiJWQg2K7ZiNmE2YfigIzZgyIsaDoi24zZh+KAjNmDINmD2KfYqtqY2YXbjtixIixoaDoiJWQg2YPYp9iq2pjZhduO2LEiLGQ6ItuM2YfigIzZgyDalduG2pgiLGRkOiIlZCDalduG2pgiLE06ItuM2YfigIzZgyDZhdin2YbaryIsTU06IiVkINmF2KfZhtqvIix5OiLbjNmH4oCM2YMg2LPYp9q1Iix5eToiJWQg2LPYp9q1In0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSkucmVwbGFjZSgv2IwvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KS5yZXBsYWNlKC8sL2csItiMIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCmZ1bmN0aW9uIHQoZSx0LG4saSl7dmFyIHI9e3M6WyLDp2VuZCBzYW7DrnllIiwiw6dlbmQgc2Fuw655ZXlhbiJdLHNzOltlKyIgc2Fuw655ZSIsZSsiIHNhbsOueWV5YW4iXSxtOlsiZGVxw65xZXllayIsImRlccOucWV5ZWvDqiJdLG1tOltlKyIgZGVxw65xZSIsZSsiIGRlccOucWV5YW4iXSxoOlsic2FldGVrIiwic2FldGVrw6oiXSxoaDpbZSsiIHNhZXQiLGUrIiBzYWV0YW4iXSxkOlsicm9qZWsiLCJyb2pla8OqIl0sZGQ6W2UrIiByb2oiLGUrIiByb2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrw6oiXSx3dzpbZSsiIGhlZnRlIixlKyIgaGVmdGV5YW4iXSxNOlsibWVoZWsiLCJtZWhla8OqIl0sTU06W2UrIiBtZWgiLGUrIiBtZWhhbiJdLHk6WyJzYWxlayIsInNhbGVrw6oiXSx5eTpbZSsiIHNhbCIsZSsiIHNhbGFuIl19O3JldHVybiB0P3Jbbl1bMF06cltuXVsxXX1mdW5jdGlvbiBpKGUpe2U9IiIrZTt2YXIgdD1lLnN1YnN0cmluZyhlLmxlbmd0aC0xKSxuPWUubGVuZ3RoPjE/ZS5zdWJzdHJpbmcoZS5sZW5ndGgtMik6IiI7aWYoIShuPT0xMnx8bj09MTMpJiYodD09IjIifHx0PT0iMyJ8fG49PSI1MCJ8fHQ9PSI3MCJ8fHQ9PSI4MCIpKXJldHVybiJ5w6oiO3JldHVybiLDqiJ9dmFyIG47ZS5kZWZpbmVMb2NhbGUoImt1LWttciIse21vbnRoczoiUsOqYmVuZGFuX1NpYmF0X0FkYXJfTsOuc2FuX0d1bGFuX0hlesOucmFuX1TDrnJtZWhfVGViYXhfw45sb25fQ290bWVoX01pamRhcl9CZXJmYW5iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlLDqmJfU2liX0FkYV9Ow65zX0d1bF9IZXpfVMOucl9UZWJfw45sb19Db3RfTWlqX0JlciIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6Illla8WfZW1fRHXFn2VtX1PDqsWfZW1fw4dhcsWfZW1fUMOqbmPFn2VtX8OObl/FnmVtw64iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWVrX0R1X1PDql/Dh2FyX1DDqm5fw45uX8WeZW0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlllX0R1X1PDql/Dh2FfUMOqX8OObl/FnmUiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIG4/ImJuIjoiQk4iO2Vsc2UgcmV0dXJuIG4/InBuIjoiUE4ifSxtZXJpZGllbVBhcnNlOi9ibnxCTnxwbnxQTi8sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0iLExMTDoiRG8gTU1NTVthXSBZWVlZW2FuXSBISDptbSIsTExMTDoiZGRkZCwgRG8gTU1NTVthXSBZWVlZW2FuXSBISDptbSIsbGw6IkRvIE1NTVsuXSBZWVlZW2FuXSIsbGxsOiJEbyBNTU1bLl0gWVlZWVthbl0gSEg6bW0iLGxsbGw6ImRkZFsuXSwgRG8gTU1NWy5dIFlZWVlbYW5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvDjnJvIGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltTaWLDqiBkaSBzYWV0XSBMVCBbZGVdIixuZXh0V2VlazoiZGRkZCBbZGkgc2FldF0gTFQgW2RlXSIsbGFzdERheToiW0R1aCBkaSBzYWV0XSBMVCBbZGVdIixsYXN0V2VlazoiZGRkZFthIGJvcsOuIGRpIHNhZXRdIExUIFtkZV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRpICVzIGRlIixwYXN0OiJiZXLDriAlcyIsczp0LHNzOnQsbTp0LG1tOnQsaDp0LGhoOnQsZDp0LGRkOnQsdzp0LHd3OnQsTTp0LE1NOnQseTp0LHl5OnR9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oPzp5w6p8w6p8XC4pLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7dmFyIG49dC50b0xvd2VyQ2FzZSgpO2lmKG4uaW5jbHVkZXMoInciKXx8bi5pbmNsdWRlcygibSIpKXJldHVybiBlKyIuIjtyZXR1cm4gZStpKGUpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBpPXswOiIt0YfSryIsMToiLdGH0LgiLDI6Ii3Rh9C4IiwzOiIt0YfSryIsNDoiLdGH0q8iLDU6Ii3Rh9C4Iiw2OiIt0YfRiyIsNzoiLdGH0LgiLDg6Ii3Rh9C4Iiw5OiIt0YfRgyIsMTA6Ii3Rh9GDIiwyMDoiLdGH0YsiLDMwOiIt0YfRgyIsNDA6Ii3Rh9GLIiw1MDoiLdGH0q8iLDYwOiIt0YfRiyIsNzA6Ii3Rh9C4Iiw4MDoiLdGH0LgiLDkwOiIt0YfRgyIsMTAwOiIt0YfSryJ9LHQ7ZS5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiLRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ItGP0L3Qsl/RhNC10LJf0LzQsNGA0YJf0LDQv9GAX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiLQltC10LrRiNC10LzQsdC4X9CU0q/QudGI06nQvNCx0q9f0KjQtdC50YjQtdC80LHQuF/QqNCw0YDRiNC10LzQsdC4X9CR0LXQudGI0LXQvNCx0Lhf0JbRg9C80LBf0JjRiNC10LzQsdC4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItCW0LXQul/QlNKv0Llf0KjQtdC5X9Co0LDRgF/QkdC10Llf0JbRg9C8X9CY0YjQtSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0JbQul/QlNC5X9Co0Llf0KjRgF/QkdC5X9CW0Lxf0JjRiCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQkdKv0LPSr9C9INGB0LDQsNGCXSBMVCIsbmV4dERheToiW9Ct0YDRgtC10qMg0YHQsNCw0YJdIExUIixuZXh0V2VlazoiZGRkZCBb0YHQsNCw0YJdIExUIixsYXN0RGF5OiJb0JrQtdGH0Y3RjSDRgdCw0LDRgl0gTFQiLGxhc3RXZWVrOiJb06jRgtC606nQvSDQsNC/0YLQsNC90YvQvV0gZGRkZCBb0LrSr9C90q9dIFvRgdCw0LDRgl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzINC40YfQuNC90LTQtSIscGFzdDoiJXMg0LzRg9GA0YPQvSIsczoi0LHQuNGA0L3QtdGH0LUg0YHQtdC60YPQvdC0IixzczoiJWQg0YHQtdC60YPQvdC0IixtOiLQsdC40YAg0LzSr9C906nRgiIsbW06IiVkINC80q/QvdOp0YIiLGg6ItCx0LjRgCDRgdCw0LDRgiIsaGg6IiVkINGB0LDQsNGCIixkOiLQsdC40YAg0LrSr9C9IixkZDoiJWQg0LrSr9C9IixNOiLQsdC40YAg0LDQuSIsTU06IiVkINCw0LkiLHk6ItCx0LjRgCDQttGL0LsiLHl5OiIlZCDQttGL0LsifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LSjRh9C4fNGH0Yt80YfSr3zRh9GDKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwLG49ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyhpW2VdfHxpW3RdfHxpW25dKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiB0KGUsdCxuLGkpe3ZhciByPXttOlsiZW5nIE1pbnV0dCIsImVuZ2VyIE1pbnV0dCJdLGg6WyJlbmcgU3Rvbm4iLCJlbmdlciBTdG9ubiJdLGQ6WyJlZW4gRGFnIiwiZW5nZW0gRGFnIl0sTTpbImVlIE1vdW50IiwiZW5nZW0gTW91bnQiXSx5OlsiZWUgSm9lciIsImVuZ2VtIEpvZXIiXX07cmV0dXJuIHQ/cltuXVswXTpyW25dWzFdfWZ1bmN0aW9uIG4oZSl7dmFyIHQ9ZS5zdWJzdHIoMCxlLmluZGV4T2YoIiAiKSk7aWYocih0KSlyZXR1cm4iYSAiK2U7cmV0dXJuImFuICIrZX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUuc3Vic3RyKDAsZS5pbmRleE9mKCIgIikpO2lmKHIodCkpcmV0dXJuInZpcnUgIitlO3JldHVybiJ2aXJ1biAiK2V9ZnVuY3Rpb24gcihlKXtlPXBhcnNlSW50KGUsMTApO2lmKGlzTmFOKGUpKXJldHVybiBmYWxzZTtpZihlPDApcmV0dXJuIHRydWU7ZWxzZSBpZihlPDEwKXtpZig0PD1lJiZlPD03KXJldHVybiB0cnVlO3JldHVybiBmYWxzZX1lbHNlIGlmKGU8MTAwKXt2YXIgdD1lJTEwLG49ZS8xMDtpZih0PT09MClyZXR1cm4gcihuKTtyZXR1cm4gcih0KX1lbHNlIGlmKGU8MWU0KXt3aGlsZShlPj0xMCllPWUvMTA7cmV0dXJuIHIoZSl9ZWxzZXtlPWUvMWUzO3JldHVybiByKGUpfX12YXIgYTtlLmRlZmluZUxvY2FsZSgibGIiLHttb250aHM6IkphbnVhcl9GZWJydWFyX03DpGVyel9BYnLDq2xsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW4uX0ZlYnIuX01yei5fQWJyLl9NZWVfSnVuLl9KdWwuX0F1Zy5fU2VwdC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJTb25uZGVnX03DqWluZGVnX0TDq25zY2hkZWdfTcOrdHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nw6kuX0TDqy5fTcOrLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTcOpX0TDq19Nw6tfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIFtBdWVyXSIsTFRTOiJIOm1tOnNzIFtBdWVyXSIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGF1dCB1bV0gTFQiLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbTXVlciB1bV0gTFQiLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQiLGxhc3REYXk6IltHw6tzY2h0ZXIgdW1dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1lOntmdXR1cmU6bixwYXN0OmksczoiZSBwdWVyIFNla29ubmVuIixzczoiJWQgU2Vrb25uZW4iLG06dCxtbToiJWQgTWludXR0ZW4iLGg6dCxoaDoiJWQgU3Rvbm5lbiIsZDp0LGRkOiIlZCBEZWVnIixNOnQsTU06IiVkIE3DqWludCIseTp0LHl5OiIlZCBKb2VyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiLguqHgurHguofguoHguq3guplf4LqB4Lq44Lqh4Lqe4LqyX+C6oeC6teC6meC6sl/gu4DguqHguqrgurJf4Lqe4Lq24LqU4Lqq4Lqw4Lqe4LqyX+C6oeC6tOC6luC6uOC6meC6sl/guoHgu43guqXgurDguoHgurvgupRf4Lqq4Lq04LqH4Lqr4LqyX+C6geC6seC6meC6jeC6sl/gupXgurjguqXgurJf4Lqe4Lqw4LqI4Lq04LqBX+C6l+C6seC6meC6p+C6siIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4Lqh4Lqx4LqH4LqB4Lqt4LqZX+C6geC6uOC6oeC6nuC6sl/guqHgurXgupngurJf4LuA4Lqh4Lqq4LqyX+C6nuC6tuC6lOC6quC6sOC6nuC6sl/guqHgurTgupbgurjgupngurJf4LqB4LuN4Lql4Lqw4LqB4Lq74LqUX+C6quC6tOC6h+C6q+C6sl/guoHgurHgupnguo3gurJf4LqV4Lq44Lql4LqyX+C6nuC6sOC6iOC6tOC6gV/gupfgurHgupnguqfgurIiLnNwbGl0KCJfIiksd2Vla2RheXM6IuC6reC6suC6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6siIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgupfgurTgupRf4LqI4Lqx4LqZX+C6reC6seC6h+C6hOC6suC6mV/gup7gurjgupRf4Lqe4Lqw4Lqr4Lqx4LqUX+C6quC6uOC6gV/gu4DguqrgurvgurIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuC6l1/guohf4Lqt4LqEX+C6nl/gup7guqtf4Lqq4LqBX+C6qiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IuC6p+C6seC6mWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/gupXguq3gupngu4Dguorgurvgu4ngurJ84LqV4Lqt4LqZ4LuB4Lql4LqHLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IuC6leC6reC6meC7geC6peC6hyJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDEyKXJldHVybiLgupXguq3gupngu4Dguorgurvgu4ngurIiO2Vsc2UgcmV0dXJuIuC6leC6reC6meC7geC6peC6hyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4Lqh4Lq34LuJ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCIsbmV4dERheToiW+C6oeC6t+C7ieC6reC6t+C7iOC6meC7gOC6p+C6peC6sl0gTFQiLG5leHRXZWVrOiJb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCIsbGFzdERheToiW+C6oeC6t+C7ieC6p+C6suC6meC6meC6teC7ieC7gOC6p+C6peC6sl0gTFQiLGxhc3RXZWVrOiJb4Lqn4Lqx4LqZXWRkZGRb4LuB4Lql4LuJ4Lqn4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi4Lqt4Lq14LqBICVzIixwYXN0OiIlc+C6nOC7iOC6suC6meC6oeC6siIsczoi4Lqa4LuN4LuI4LuA4LqX4Lq74LuI4Lqy4LuD4LqU4Lqn4Lq04LqZ4Lqy4LqX4Lq1IixzczoiJWQg4Lqn4Lq04LqZ4Lqy4LqX4Lq1IixtOiIxIOC6meC6suC6l+C6tSIsbW06IiVkIOC6meC6suC6l+C6tSIsaDoiMSDguorgurvgu4jguqfgu4LguqHguociLGhoOiIlZCDguorgurvgu4jguqfgu4LguqHguociLGQ6IjEg4Lqh4Lq34LuJIixkZDoiJWQg4Lqh4Lq34LuJIixNOiIxIOC7gOC6lOC6t+C6reC6mSIsTU06IiVkIOC7gOC6lOC6t+C6reC6mSIseToiMSDgupvgurUiLHl5OiIlZCDgupvgurUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8o4LqX4Lq14LuIKVxkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIuC6l+C6teC7iCIrZX19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXtzczoic2VrdW5kxJdfc2VrdW5kxb5pxbNfc2VrdW5kZXMiLG06Im1pbnV0xJdfbWludXTEl3NfbWludXTEmSIsbW06Im1pbnV0xJdzX21pbnXEjWnFs19taW51dGVzIixoOiJ2YWxhbmRhX3ZhbGFuZG9zX3ZhbGFuZMSFIixoaDoidmFsYW5kb3NfdmFsYW5kxbNfdmFsYW5kYXMiLGQ6ImRpZW5hX2RpZW5vc19kaWVuxIUiLGRkOiJkaWVub3NfZGllbsWzX2RpZW5hcyIsTToibcSXbnVvX23El25lc2lvX23El25lc8SvIixNTToibcSXbmVzaWFpX23El25lc2nFs19txJduZXNpdXMiLHk6Im1ldGFpX21ldMWzX21ldHVzIix5eToibWV0YWlfbWV0xbNfbWV0dXMifSxuO2Z1bmN0aW9uIGkoZSx0LG4saSl7aWYodClyZXR1cm4ia2VsaW9zIHNla3VuZMSXcyI7ZWxzZSByZXR1cm4gaT8ia2VsacWzIHNla3VuZMW+acWzIjoia2VsaWFzIHNla3VuZGVzIn1mdW5jdGlvbiBhKGUsdCxuLGkpe3JldHVybiB0P28obilbMF06aT9vKG4pWzFdOm8obilbMl19ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSUxMD09PTB8fGU+MTAmJmU8MjB9ZnVuY3Rpb24gbyhlKXtyZXR1cm4gdFtlXS5zcGxpdCgiXyIpfWZ1bmN0aW9uIHIoZSx0LG4saSl7dmFyIHI9ZSsiICI7aWYoZT09PTEpcmV0dXJuIHIrYShlLHQsblswXSxpKTtlbHNlIGlmKHQpcmV0dXJuIHIrKHMoZSk/byhuKVsxXTpvKG4pWzBdKTtlbHNlIGlmKGkpcmV0dXJuIHIrbyhuKVsxXTtlbHNlIHJldHVybiByKyhzKGUpP28obilbMV06byhuKVsyXSl9ZS5kZWZpbmVMb2NhbGUoImx0Iix7bW9udGhzOntmb3JtYXQ6InNhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kxb5pb19nZWd1xb7El3NfYmlyxb5lbGlvX2xpZXBvc19ydWdwasWrxI1pb19ydWdzxJdqb19zcGFsaW9fbGFwa3JpxI1pb19ncnVvZMW+aW8iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2F1c2lzX3Zhc2FyaXNfa292YXNfYmFsYW5kaXNfZ2VndcW+xJdfYmlyxb5lbGlzX2xpZXBhX3J1Z3Bqxat0aXNfcnVnc8SXamlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2RpcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1NTT98TU1NTT8oXFtbXlxbXF1dKlxdfFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoic2F1X3Zhc19rb3ZfYmFsX2dlZ19iaXJfbGllX3JncF9yZ3Nfc3BhX2xhcF9ncmQiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoic2VrbWFkaWVuxK9fcGlybWFkaWVuxK9fYW50cmFkaWVuxK9fdHJlxI1pYWRpZW7Er19rZXR2aXJ0YWRpZW7Er19wZW5rdGFkaWVuxK9fxaFlxaF0YWRpZW7EryIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmXEjWlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc1/FoWXFoXRhZGllbmlzIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9kZGRkIEhIOm1tL30sd2Vla2RheXNTaG9ydDoiU2VrX1Bpcl9BbnRfVHJlX0tldF9QZW5fxaBlxaEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNfUF9BX1RfS19Qbl/FoCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2YWwuXSIsbGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbxaBpYW5kaWVuXSBMVCIsbmV4dERheToiW1J5dG9qXSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltWYWthcl0gTFQiLGxhc3RXZWVrOiJbUHJhxJdqdXPEr10gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG8gJXMiLHBhc3Q6InByaWXFoSAlcyIsczppLHNzOnIsbTphLG1tOnIsaDphLGhoOnIsZDphLGRkOnIsTTphLE1NOnIseTphLHl5OnJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlKyItb2ppIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgaT17c3M6InNla3VuZGVzX3Nla3VuZMSTbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzIi5zcGxpdCgiXyIpLG1tOiJtaW7Fq3Rlc19taW7Fq3TEk21fbWluxat0ZV9taW7Fq3RlcyIuc3BsaXQoIl8iKSxoOiJzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGhoOiJzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGQ6ImRpZW5hc19kaWVuxIFtX2RpZW5hX2RpZW5hcyIuc3BsaXQoIl8iKSxkZDoiZGllbmFzX2RpZW7EgW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLE06Im3Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWkiLnNwbGl0KCJfIiksTU06Im3Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWkiLnNwbGl0KCJfIikseToiZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpLHl5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0KCJfIil9LHQ7ZnVuY3Rpb24gcihlLHQsbil7aWYobilyZXR1cm4gdCUxMD09PTEmJnQlMTAwIT09MTE/ZVsyXTplWzNdO2Vsc2UgcmV0dXJuIHQlMTA9PT0xJiZ0JTEwMCE9PTExP2VbMF06ZVsxXX1mdW5jdGlvbiBuKGUsdCxuKXtyZXR1cm4gZSsiICIrcihpW25dLGUsdCl9ZnVuY3Rpb24gYShlLHQsbil7cmV0dXJuIHIoaVtuXSxlLHQpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4gdD8iZGHFvmFzIHNla3VuZGVzIjoiZGHFvsSBbSBzZWt1bmTEk20ifWUuZGVmaW5lTG9jYWxlKCJsdiIse21vbnRoczoiamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2rFq25fasWrbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdsSTdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmXFoWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkuIixMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0iLExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tIixMTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgZGRkZCwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW8Wgb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUsSrdCBwdWxrc3Rlbl0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWxrc3Rlbl0gTFQiLGxhc3REYXk6IltWYWthciBwdWxrc3Rlbl0gTFQiLGxhc3RXZWVrOiJbUGFnxIFqdcWhxIFdIGRkZGQgW3B1bGtzdGVuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicMSTYyAlcyIscGFzdDoicGlybXMgJXMiLHM6cyxzczpuLG06YSxtbTpuLGg6YSxoaDpuLGQ6YSxkZDpuLE06YSxNTTpuLHk6YSx5eTpufSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgcj17d29yZHM6e3NzOlsic2VrdW5kIiwic2VrdW5kYSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTU06WyJtamVzZWMiLCJtamVzZWNhIiwibWplc2VjaSJdLHl5OlsiZ29kaW5hIiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PTE/dFswXTplPj0yJiZlPD00P3RbMV06dFsyXX0sdHJhbnNsYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1yLndvcmRzW25dO2lmKG4ubGVuZ3RoPT09MSlyZXR1cm4gdD9pWzBdOmlbMV07ZWxzZSByZXR1cm4gZSsiICIrci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKGUsaSl9fSx0O2UuZGVmaW5lTG9jYWxlKCJtZSIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqX2p1bl9qdWxfYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRvLl9zcmkuX8SNZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfxI1lX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzanV0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdcSNZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXt2YXIgZT1bIltwcm/FoWxlXSBbbmVkamVsamVdIFt1XSBMVCIsIltwcm/FoWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQiLCJbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCIsIltwcm/FoWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQiLCJbcHJvxaFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCJdO3JldHVybiBlW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOnIudHJhbnNsYXRlLG06ci50cmFuc2xhdGUsbW06ci50cmFuc2xhdGUsaDpyLnRyYW5zbGF0ZSxoaDpyLnRyYW5zbGF0ZSxkOiJkYW4iLGRkOnIudHJhbnNsYXRlLE06Im1qZXNlYyIsTU06ci50cmFuc2xhdGUseToiZ29kaW51Iix5eTpyLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhzOiJLb2hpLXTEgXRlX0h1aS10YW5ndXJ1X1BvdXTFqy10ZS1yYW5naV9QYWVuZ2Etd2jEgXdoxIFfSGFyYXR1YV9QaXBpcmlfSMWNbmdvaW5nb2lfSGVyZS10dXJpLWvFjWvEgV9NYWh1cnVfV2hpcmluZ2EtxIEtbnVrdV9XaGlyaW5nYS3EgS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IxY1uZ29pX0hlcmVfTWFodV9XaGktbnVfV2hpLXJhX0hha2kiLnNwbGl0KCJfIiksbW9udGhzUmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDJ9L2ksd2Vla2RheXM6IlLEgXRhcHVfTWFuZV9UxatyZWlfV2VuZXJlaV9UxIFpdGVfUGFyYWlyZV9IxIF0YXJlaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJUYV9NYV9UxatfV2VfVMSBaV9QYV9IxIEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlRhX01hX1TFq19XZV9UxIFpX1BhX0jEgSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW2ldIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgdGVpZSBtYWhhbmEsIGldIExUIixuZXh0RGF5OiJbYXBvcG8gaV0gTFQiLG5leHRXZWVrOiJkZGRkIFtpXSBMVCIsbGFzdERheToiW2luYW5haGkgaV0gTFQiLGxhc3RXZWVrOiJkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Imkgcm90byBpICVzIixwYXN0OiIlcyBpIG11YSIsczoidGUgaMSTa29uYSBydWFydWEiLHNzOiIlZCBoxJNrb25hIixtOiJoZSBtZW5ldGkiLG1tOiIlZCBtZW5ldGkiLGg6InRlIGhhb3JhIixoaDoiJWQgaGFvcmEiLGQ6ImhlIHJhIixkZDoiJWQgcmEiLE06ImhlIG1hcmFtYSIsTU06IiVkIG1hcmFtYSIseToiaGUgdGF1Iix5eToiJWQgdGF1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJtayIse21vbnRoczoi0ZjQsNC90YPQsNGA0Lhf0YTQtdCy0YDRg9Cw0YDQuF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L3QuF/RmNGD0LvQuF/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LLRgNC4X9C+0LrRgtC+0LzQstGA0Lhf0L3QvtC10LzQstGA0Lhf0LTQtdC60LXQvNCy0YDQuCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0ZjQsNC9X9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LoiLnNwbGl0KCJfIiksd2Vla2RheXM6ItC90LXQtNC10LvQsF/Qv9C+0L3QtdC00LXQu9C90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtC+0Lpf0L/QtdGC0L7Qul/RgdCw0LHQvtGC0LAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi0L3QtdC0X9C/0L7QvV/QstGC0L5f0YHRgNC1X9GH0LXRgl/Qv9C10YJf0YHQsNCxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQvWVf0L9vX9Cy0YJf0YHRgF/Rh9C1X9C/0LVf0YFhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQlNC10L3QtdGBINCy0L5dIExUIixuZXh0RGF5OiJb0KPRgtGA0LUg0LLQvl0gTFQiLG5leHRXZWVrOiJb0JLQvl0gZGRkZCBb0LLQvl0gTFQiLGxhc3REYXk6IlvQktGH0LXRgNCwINCy0L5dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW9CY0LfQvNC40L3QsNGC0LDRgtCwXSBkZGRkIFvQstC+XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJb0JjQt9C80LjQvdCw0YLQuNC+0YJdIGRkZGQgW9Cy0L5dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItC30LAgJXMiLHBhc3Q6ItC/0YDQtdC0ICVzIixzOiLQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuCIsc3M6IiVkINGB0LXQutGD0L3QtNC4IixtOiLQtdC00L3QsCDQvNC40L3Rg9GC0LAiLG1tOiIlZCDQvNC40L3Rg9GC0LgiLGg6ItC10LTQtdC9INGH0LDRgSIsaGg6IiVkINGH0LDRgdCwIixkOiLQtdC00LXQvSDQtNC10L0iLGRkOiIlZCDQtNC10L3QsCIsTToi0LXQtNC10L0g0LzQtdGB0LXRhiIsTU06IiVkINC80LXRgdC10YbQuCIseToi0LXQtNC90LAg0LPQvtC00LjQvdCwIix5eToiJWQg0LPQvtC00LjQvdC4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o0LXQsnzQtdC9fNGC0Lh80LLQuHzRgNC4fNC80LgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1lJTEwMDtpZihlPT09MClyZXR1cm4gZSsiLdC10LIiO2Vsc2UgaWYobj09PTApcmV0dXJuIGUrIi3QtdC9IjtlbHNlIGlmKG4+MTAmJm48MjApcmV0dXJuIGUrIi3RgtC4IjtlbHNlIGlmKHQ9PT0xKXJldHVybiBlKyIt0LLQuCI7ZWxzZSBpZih0PT09MilyZXR1cm4gZSsiLdGA0LgiO2Vsc2UgaWYodD09PTd8fHQ9PT04KXJldHVybiBlKyIt0LzQuCI7ZWxzZSByZXR1cm4gZSsiLdGC0LgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJtbCIse21vbnRoczoi4LSc4LSo4LWB4LS14LSw4LS/X+C0q+C1huC0rOC1jeC0sOC1geC0teC0sOC0v1/gtK7gtL7gtbzgtJrgtY3gtJrgtY1f4LSP4LSq4LWN4LSw4LS/4LW9X+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWIX+C0k+C0l+C0uOC1jeC0seC1jeC0seC1jV/gtLjgtYbgtKrgtY3gtLHgtY3gtLHgtILgtKzgtbxf4LSS4LSV4LWN4LSf4LWL4LSs4LW8X+C0qOC0teC0guC0rOC1vF/gtKHgtL/gtLjgtILgtKzgtbwiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuC0nOC0qOC1gS5f4LSr4LWG4LSs4LWN4LSw4LWBLl/gtK7gtL7gtbwuX+C0j+C0quC1jeC0sOC0vy5f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYguX+C0k+C0ly5f4LS44LWG4LSq4LWN4LSx4LWN4LSxLl/gtJLgtJXgtY3gtJ/gtYsuX+C0qOC0teC0gi5f4LSh4LS/4LS44LSCLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IuC0nuC0vuC0r+C0seC0vuC0tOC1jeC0ml/gtKTgtL/gtJngtY3gtJXgtLPgtL7gtLTgtY3gtJpf4LSa4LWK4LS14LWN4LS14LS+4LS04LWN4LSaX+C0rOC1geC0p+C0qOC0vuC0tOC1jeC0ml/gtLXgtY3gtK/gtL7gtLTgtL7gtLTgtY3gtJpf4LS14LWG4LSz4LWN4LSz4LS/4LSv4LS+4LS04LWN4LSaX+C0tuC0qOC0v+C0r+C0vuC0tOC1jeC0miIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgtJ7gtL7gtK/gtbxf4LSk4LS/4LSZ4LWN4LSV4LW+X+C0muC1iuC0teC1jeC0tV/gtKzgtYHgtKfgtbtf4LS14LWN4LSv4LS+4LS04LSCX+C0teC1huC0s+C1jeC0s+C0v1/gtLbgtKjgtL8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuC0nuC0vl/gtKTgtL9f4LSa4LWKX+C0rOC1gV/gtLXgtY3gtK/gtL5f4LS14LWGX+C0tiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSAt4LSo4LWBIixMVFM6IkEgaDptbTpzcyAt4LSo4LWBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIC3gtKjgtYEifSxjYWxlbmRhcjp7c2FtZURheToiW+C0h+C0qOC1jeC0qOC1jV0gTFQiLG5leHREYXk6IlvgtKjgtL7gtLPgtYZdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IlvgtIfgtKjgtY3gtKjgtLLgtYZdIExUIixsYXN0V2VlazoiW+C0leC0tOC0v+C0nuC1jeC0nl0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIOC0leC0tOC0v+C0nuC1jeC0nuC1jSIscGFzdDoiJXMg4LSu4LWB4LW74LSq4LWNIixzOiLgtIXgtb3gtKog4LSo4LS/4LSu4LS/4LS34LSZ4LWN4LSZ4LW+IixzczoiJWQg4LS44LWG4LSV4LWN4LSV4LW74LSh4LWNIixtOiLgtJLgtLDgtYEg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNIixtbToiJWQg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNIixoOiLgtJLgtLDgtYEg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8IixoaDoiJWQg4LSu4LSj4LS/4LSV4LWN4LSV4LWC4LW8IixkOiLgtJLgtLDgtYEg4LSm4LS/4LS14LS44LSCIixkZDoiJWQg4LSm4LS/4LS14LS44LSCIixNOiLgtJLgtLDgtYEg4LSu4LS+4LS44LSCIixNTToiJWQg4LSu4LS+4LS44LSCIix5OiLgtJLgtLDgtYEg4LS14LW84LS34LSCIix5eToiJWQg4LS14LW84LS34LSCIn0sbWVyaWRpZW1QYXJzZTov4LSw4LS+4LSk4LWN4LSw4LS/fOC0sOC0vuC0teC0v+C0suC1hnzgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNfOC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gnzgtLDgtL7gtKTgtY3gtLDgtL8vaSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i4LSw4LS+4LSk4LWN4LSw4LS/IiYmZT49NHx8dD09PSLgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNInx8dD09PSLgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIIiKXJldHVybiBlKzEyO2Vsc2UgcmV0dXJuIGV9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuIuC0sOC0vuC0pOC1jeC0sOC0vyI7ZWxzZSBpZihlPDEyKXJldHVybiLgtLDgtL7gtLXgtL/gtLLgtYYiO2Vsc2UgaWYoZTwxNylyZXR1cm4i4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jSI7ZWxzZSBpZihlPDIwKXJldHVybiLgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIIiO2Vsc2UgcmV0dXJuIuC0sOC0vuC0pOC1jeC0sOC0vyJ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgpmdW5jdGlvbiB0KGUsdCxuLGkpe3N3aXRjaChuKXtjYXNlInMiOnJldHVybiB0PyLRhdGN0LTRhdGN0L0g0YHQtdC60YPQvdC0Ijoi0YXRjdC00YXRjdC9INGB0LXQutGD0L3QtNGL0L0iO2Nhc2Uic3MiOnJldHVybiBlKyh0PyIg0YHQtdC60YPQvdC0IjoiINGB0LXQutGD0L3QtNGL0L0iKTtjYXNlIm0iOmNhc2UibW0iOnJldHVybiBlKyh0PyIg0LzQuNC90YPRgiI6IiDQvNC40L3Rg9GC0YvQvSIpO2Nhc2UiaCI6Y2FzZSJoaCI6cmV0dXJuIGUrKHQ/IiDRhtCw0LMiOiIg0YbQsNCz0LjQudC9Iik7Y2FzZSJkIjpjYXNlImRkIjpyZXR1cm4gZSsodD8iINOp0LTTqdGAIjoiINOp0LTRgNC40LnQvSIpO2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIGUrKHQ/IiDRgdCw0YAiOiIg0YHQsNGA0YvQvSIpO2Nhc2UieSI6Y2FzZSJ5eSI6cmV0dXJuIGUrKHQ/IiDQttC40LsiOiIg0LbQuNC70LjQudC9Iik7ZGVmYXVsdDpyZXR1cm4gZX19dmFyIG47ZS5kZWZpbmVMb2NhbGUoIm1uIix7bW9udGhzOiLQndGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9Cl0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgF/Qk9GD0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNOp0YDTqdCy0LTSr9Cz0Y3RjdGAINGB0LDRgF/QotCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CX0YPRgNCz0LDQtNGD0LPQsNCw0YAg0YHQsNGAX9CU0L7Qu9C00YPQs9Cw0LDRgCDRgdCw0YBf0J3QsNC50LzQtNGD0LPQsNCw0YAg0YHQsNGAX9CV0YHQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QkNGA0LLQsNC9INC90Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCy0LDQvSDRhdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjEg0YHQsNGAXzIg0YHQsNGAXzMg0YHQsNGAXzQg0YHQsNGAXzUg0YHQsNGAXzYg0YHQsNGAXzcg0YHQsNGAXzgg0YHQsNGAXzkg0YHQsNGAXzEwINGB0LDRgF8xMSDRgdCw0YBfMTIg0YHQsNGAIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoi0J3Rj9C8X9CU0LDQstCw0LBf0JzRj9Cz0LzQsNGAX9Cb0YXQsNCz0LLQsF/Qn9Kv0YDRjdCyX9CR0LDQsNGB0LDQvV/QkdGP0LzQsdCwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItCd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0J3Rj1/QlNCwX9Cc0Y9f0JvRhV/Qn9KvX9CR0LBf0JHRjyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSDQvtC90YsgTU1NTdGL0L0gRCIsTExMOiJZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov0q7TqHzSrtClL2ksaXNQTTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSLSrtClIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuItKu06giO2Vsc2UgcmV0dXJuItKu0KUifSxjYWxlbmRhcjp7c2FtZURheToiW9Oo0L3TqdOp0LTTqdGAXSBMVCIsbmV4dERheToiW9Cc0LDRgNCz0LDQsNGIXSBMVCIsbmV4dFdlZWs6IlvQmNGA0Y3RhV0gZGRkZCBMVCIsbGFzdERheToiW9Oo0YfQuNCz0LTTqdGAXSBMVCIsbGFzdFdlZWs6IlvTqNC90LPTqdGA0YHTqdC9XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDQtNCw0YDQsNCwIixwYXN0OiIlcyDTqdC80L3TqSIsczp0LHNzOnQsbTp0LG1tOnQsaDp0LGhoOnQsZDp0LGRkOnQsTTp0LE1NOnQseTp0LHl5OnR9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0g06nQtNOp0YAvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZSsiINOp0LTTqdGAIjtkZWZhdWx0OnJldHVybiBlfX19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLgpaciLDI6IuClqCIsMzoi4KWpIiw0OiLgpaoiLDU6IuClqyIsNjoi4KWsIiw3OiLgpa0iLDg6IuClriIsOToi4KWvIiwwOiLgpaYifSxuPXsi4KWnIjoiMSIsIuClqCI6IjIiLCLgpakiOiIzIiwi4KWqIjoiNCIsIuClqyI6IjUiLCLgpawiOiI2Iiwi4KWtIjoiNyIsIuClriI6IjgiLCLgpa8iOiI5Iiwi4KWmIjoiMCJ9LGk7ZnVuY3Rpb24gcihlLHQsbixpKXt2YXIgcj0iIjtpZih0KXN3aXRjaChuKXtjYXNlInMiOnI9IuCkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKYiO2JyZWFrO2Nhc2Uic3MiOnI9IiVkIOCkuOClh+CkleCkguCkpiI7YnJlYWs7Y2FzZSJtIjpyPSLgpI/gpJUg4KSu4KS/4KSo4KS/4KSfIjticmVhaztjYXNlIm1tIjpyPSIlZCDgpK7gpL/gpKjgpL/gpJ/gpYciO2JyZWFrO2Nhc2UiaCI6cj0i4KSP4KSVIOCkpOCkvuCkuCI7YnJlYWs7Y2FzZSJoaCI6cj0iJWQg4KSk4KS+4KS4IjticmVhaztjYXNlImQiOnI9IuCkj+CklSDgpKbgpL/gpLXgpLgiO2JyZWFrO2Nhc2UiZGQiOnI9IiVkIOCkpuCkv+CkteCkuCI7YnJlYWs7Y2FzZSJNIjpyPSLgpI/gpJUg4KSu4KS54KS/4KSo4KS+IjticmVhaztjYXNlIk1NIjpyPSIlZCDgpK7gpLngpL/gpKjgpYciO2JyZWFrO2Nhc2UieSI6cj0i4KSP4KSVIOCkteCksOCljeCktyI7YnJlYWs7Y2FzZSJ5eSI6cj0iJWQg4KS14KSw4KWN4KS34KWHIjticmVha31lbHNlIHN3aXRjaChuKXtjYXNlInMiOnI9IuCkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKbgpL7gpIIiO2JyZWFrO2Nhc2Uic3MiOnI9IiVkIOCkuOClh+CkleCkguCkpuCkvuCkgiI7YnJlYWs7Y2FzZSJtIjpyPSLgpI/gpJXgpL4g4KSu4KS/4KSo4KS/4KSf4KS+IjticmVhaztjYXNlIm1tIjpyPSIlZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpIIiO2JyZWFrO2Nhc2UiaCI6cj0i4KSP4KSV4KS+IOCkpOCkvuCkuOCkviI7YnJlYWs7Y2FzZSJoaCI6cj0iJWQg4KSk4KS+4KS44KS+4KSCIjticmVhaztjYXNlImQiOnI9IuCkj+CkleCkviDgpKbgpL/gpLXgpLjgpL4iO2JyZWFrO2Nhc2UiZGQiOnI9IiVkIOCkpuCkv+CkteCkuOCkvuCkgiI7YnJlYWs7Y2FzZSJNIjpyPSLgpI/gpJXgpL4g4KSu4KS54KS/4KSo4KWN4KSv4KS+IjticmVhaztjYXNlIk1NIjpyPSIlZCDgpK7gpLngpL/gpKjgpY3gpK/gpL7gpIIiO2JyZWFrO2Nhc2UieSI6cj0i4KSP4KSV4KS+IOCkteCksOCljeCkt+CkviI7YnJlYWs7Y2FzZSJ5eSI6cj0iJWQg4KS14KSw4KWN4KS34KS+4KSCIjticmVha31yZXR1cm4gci5yZXBsYWNlKC8lZC9pLGUpfWUuZGVmaW5lTG9jYWxlKCJtciIse21vbnRoczoi4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KS/4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KWIX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuCknOCkvuCkqOClhy5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJouX+Ckj+CkquCljeCksOCkvy5f4KSu4KWHLl/gpJzgpYLgpKguX+CknOClgeCksuCliC5f4KSR4KSXLl/gpLjgpKrgpY3gpJ/gpYfgpIIuX+CkkeCkleCljeCkn+Cliy5f4KSo4KWL4KS14KWN4KS54KWH4KSCLl/gpKHgpL/gpLjgpYfgpIIuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoi4KSw4KS14KS/4KS14KS+4KSwX+CkuOCli+CkruCkteCkvuCksF/gpK7gpILgpJfgpLPgpLXgpL7gpLBf4KSs4KWB4KSn4KS14KS+4KSwX+Ckl+ClgeCksOClguCkteCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpLXgpL7gpLBf4KS24KSo4KS/4KS14KS+4KSwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSzX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIOCkteCkvuCknOCkpOCkviIsTFRTOiJBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0g4KS14KS+4KSc4KSk4KS+In0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgpIbgpJxdIExUIixuZXh0RGF5OiJb4KSJ4KSm4KWN4KSv4KS+XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4KSV4KS+4KSyXSBMVCIsbGFzdFdlZWs6IlvgpK7gpL7gpJfgpYDgpLJdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc+CkruCkp+CljeCkr+ClhyIscGFzdDoiJXPgpKrgpYLgpLDgpY3gpLXgpYAiLHM6cixzczpyLG06cixtbTpyLGg6cixoaDpyLGQ6cixkZDpyLE06cixNTTpyLHk6cix5eTpyfSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gpKrgpLngpL7gpJ/gpYd84KS44KSV4KS+4KSz4KWAfOCkpuClgeCkquCkvuCksOClgHzgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYB84KSw4KS+4KSk4KWN4KSw4KWALyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i4KSq4KS54KS+4KSf4KWHInx8dD09PSLgpLjgpJXgpL7gpLPgpYAiKXJldHVybiBlO2Vsc2UgaWYodD09PSLgpKbgpYHgpKrgpL7gpLDgpYAifHx0PT09IuCkuOCkvuCkr+CkguCkleCkvuCks+ClgCJ8fHQ9PT0i4KSw4KS+4KSk4KWN4KSw4KWAIilyZXR1cm4gZT49MTI/ZTplKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZT49MCYmZTw2KXJldHVybiLgpKrgpLngpL7gpJ/gpYciO2Vsc2UgaWYoZTwxMilyZXR1cm4i4KS44KSV4KS+4KSz4KWAIjtlbHNlIGlmKGU8MTcpcmV0dXJuIuCkpuClgeCkquCkvuCksOClgCI7ZWxzZSBpZihlPDIwKXJldHVybiLgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAiO2Vsc2UgcmV0dXJuIuCksOCkvuCkpOCljeCksOClgCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoIm1zIix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09InBhZ2kiKXJldHVybiBlO2Vsc2UgaWYodD09PSJ0ZW5nYWhhcmkiKXJldHVybiBlPj0xMT9lOmUrMTI7ZWxzZSBpZih0PT09InBldGFuZyJ8fHQ9PT0ibWFsYW0iKXJldHVybiBlKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwxMSlyZXR1cm4icGFnaSI7ZWxzZSBpZihlPDE1KXJldHVybiJ0ZW5nYWhhcmkiO2Vsc2UgaWYoZTwxOSlyZXR1cm4icGV0YW5nIjtlbHNlIHJldHVybiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJtcy1teSIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSJwYWdpIilyZXR1cm4gZTtlbHNlIGlmKHQ9PT0idGVuZ2FoYXJpIilyZXR1cm4gZT49MTE/ZTplKzEyO2Vsc2UgaWYodD09PSJwZXRhbmcifHx0PT09Im1hbGFtIilyZXR1cm4gZSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTEpcmV0dXJuInBhZ2kiO2Vsc2UgaWYoZTwxNSlyZXR1cm4idGVuZ2FoYXJpIjtlbHNlIGlmKGU8MTkpcmV0dXJuInBldGFuZyI7ZWxzZSByZXR1cm4ibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgibXQiLHttb250aHM6Ikphbm5hcl9GcmFyX01hcnp1X0FwcmlsX01lamp1X8SgdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpxItlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal/EoHVuX0x1bF9Bd3dfU2V0X090dF9Ob3ZfRGnEiyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiSWwtxKZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ8SnYV9JbC3EpmFtaXNfSWwtxKBpbWfEp2FfSXMtU2lidCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLEpmFkX1RuZV9UbGlfRXJiX8SmYW1fxKBpbV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IsSmYV9Ubl9UbF9Fcl/EpmFfxKBpX1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0lsbHVtIGZpbC1dTFQiLG5leHREYXk6IltHxKdhZGEgZmlsLV1MVCIsbmV4dFdlZWs6ImRkZGQgW2ZpbC1dTFQiLGxhc3REYXk6IltJbC1iaWVyYcSnIGZpbC1dTFQiLGxhc3RXZWVrOiJkZGRkIFtsaSBnxKdhZGRhXSBbZmlsLV1MVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZuKAmSAlcyIscGFzdDoiJXMgaWx1IixzOiJmdGl0IHNla29uZGkiLHNzOiIlZCBzZWtvbmRpIixtOiJtaW51dGEiLG1tOiIlZCBtaW51dGkiLGg6InNpZWfEp2EiLGhoOiIlZCBzaWVnxKdhdCIsZDoixKF1cm5hdGEiLGRkOiIlZCDEoXJhbmV0IixNOiJ4YWhhciIsTU06IiVkIHhodXIiLHk6InNlbmEiLHl5OiIlZCBzbmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9wrovLG9yZGluYWw6IiVkwroiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9ezE6IuGBgSIsMjoi4YGCIiwzOiLhgYMiLDQ6IuGBhCIsNToi4YGFIiw2OiLhgYYiLDc6IuGBhyIsODoi4YGIIiw5OiLhgYkiLDA6IuGBgCJ9LG49eyLhgYEiOiIxIiwi4YGCIjoiMiIsIuGBgyI6IjMiLCLhgYQiOiI0Iiwi4YGFIjoiNSIsIuGBhiI6IjYiLCLhgYciOiI3Iiwi4YGIIjoiOCIsIuGBiSI6IjkiLCLhgYAiOiIwIn0saTtlLmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6IuGAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLhgIfhgJThgLpf4YCW4YCxX+GAmeGAkOGAul/hgJXhgLzhgK5f4YCZ4YCxX+GAh+GAveGAlOGAul/hgJzhgK3hgK/hgIThgLpf4YCe4YC8X+GAheGAgOGAul/hgKHhgLHhgKzhgIDhgLpf4YCU4YCt4YCvX+GAkuGAriIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi4YCQ4YCU4YCE4YC64YC54YCC4YCU4YC94YCxX+GAkOGAlOGAhOGAuuGAueGAnOGArF/hgKHhgIThgLrhgLnhgILhgKtf4YCX4YCv4YCS4YC54YCT4YCf4YCw4YC4X+GAgOGAvOGArOGAnuGAleGAkOGAseGAuF/hgJ7hgLHhgKzhgIDhgLzhgKxf4YCF4YCU4YCxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuGAlOGAveGAsV/hgJzhgKxf4YCC4YCrX+GAn+GAsOGAuF/hgIDhgLzhgKxf4YCe4YCx4YCsX+GAlOGAsSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb4YCa4YCU4YCxLl0gTFQgW+GAmeGAvuGArF0iLG5leHREYXk6IlvhgJnhgJThgIDhgLrhgJbhgLzhgJThgLpdIExUIFvhgJnhgL7hgKxdIixuZXh0V2VlazoiZGRkZCBMVCBb4YCZ4YC+4YCsXSIsbGFzdERheToiW+GAmeGAlOGAsS7hgIBdIExUIFvhgJnhgL7hgKxdIixsYXN0V2VlazoiW+GAleGAvOGAruGAuOGAgeGAsuGAt+GAnuGAseGArF0gZGRkZCBMVCBb4YCZ4YC+4YCsXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCIscGFzdDoi4YCc4YC94YCU4YC64YCB4YCy4YC34YCe4YCx4YCsICVzIOGAgCIsczoi4YCF4YCA4YC54YCA4YCU4YC6LuGAoeGAlOGAiuGAuuGAuOGAhOGAmuGAuiIsc3M6IiVkIOGAheGAgOGAueGAgOGAlOGAt+GAuiIsbToi4YCQ4YCF4YC64YCZ4YCt4YCU4YCF4YC6IixtbToiJWQg4YCZ4YCt4YCU4YCF4YC6IixoOiLhgJDhgIXhgLrhgJThgKzhgJvhgK4iLGhoOiIlZCDhgJThgKzhgJvhgK4iLGQ6IuGAkOGAheGAuuGAm+GAgOGAuiIsZGQ6IiVkIOGAm+GAgOGAuiIsTToi4YCQ4YCF4YC64YCcIixNTToiJWQg4YCcIix5OiLhgJDhgIXhgLrhgJThgL7hgIXhgLoiLHl5OiIlZCDhgJThgL7hgIXhgLoifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4YGB4YGC4YGD4YGE4YGF4YGG4YGH4YGI4YGJ4YGAXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJuYiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6InPDuG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDuHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic8O4Ll9tYS5fdGkuX29uLl90by5fZnIuX2zDuC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InPDuF9tYV90aV9vbl90b19mcl9sw7giLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0iLExMTEw6ImRkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbaSBtb3JnZW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltpIGfDpXIga2wuXSBMVCIsbGFzdFdlZWs6Iltmb3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiLDqW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiLDqW4gZGFnIixkZDoiJWQgZGFnZXIiLHc6IsOpbiB1a2UiLHd3OiIlZCB1a2VyIixNOiLDqW4gbcOlbmVkIixNTToiJWQgbcOlbmVkZXIiLHk6ImV0dCDDpXIiLHl5OiIlZCDDpXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdD17MToi4KWnIiwyOiLgpagiLDM6IuClqSIsNDoi4KWqIiw1OiLgpasiLDY6IuClrCIsNzoi4KWtIiw4OiLgpa4iLDk6IuClryIsMDoi4KWmIn0sbj17IuClpyI6IjEiLCLgpagiOiIyIiwi4KWpIjoiMyIsIuClqiI6IjQiLCLgpasiOiI1Iiwi4KWsIjoiNiIsIuClrSI6IjciLCLgpa4iOiI4Iiwi4KWvIjoiOSIsIuClpiI6IjAifSxpO2UuZGVmaW5lTG9jYWxlKCJuZSIse21vbnRoczoi4KSc4KSo4KS14KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KS/4KSyX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+Ckt+CljeCkn1/gpLjgpYfgpKrgpY3gpJ/gpYfgpK7gpY3gpKzgpLBf4KSF4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkreClh+CkruCljeCkrOCksF/gpKHgpL/gpLjgpYfgpK7gpY3gpKzgpLAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuCknOCkqC5f4KSr4KWH4KSs4KWN4KSw4KWBLl/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KS/Ll/gpK7gpIhf4KSc4KWB4KSoX+CknOClgeCksuCkvuCkiC5f4KSF4KSXLl/gpLjgpYfgpKrgpY3gpJ8uX+CkheCkleCljeCkn+Cliy5f4KSo4KWL4KSt4KWHLl/gpKHgpL/gpLjgpYcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoi4KSG4KSH4KSk4KSs4KS+4KSwX+CkuOCli+CkruCkrOCkvuCksF/gpK7gpJngpY3gpJfgpLLgpKzgpL7gpLBf4KSs4KWB4KSn4KSs4KS+4KSwX+CkrOCkv+CkueCkv+CkrOCkvuCksF/gpLbgpYHgpJXgpY3gpLDgpKzgpL7gpLBf4KS24KSo4KS/4KSs4KS+4KSwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuCkhuCkh+CkpC5f4KS44KWL4KSuLl/gpK7gpJngpY3gpJfgpLIuX+CkrOClgeCkpy5f4KSs4KS/4KS54KS/Ll/gpLbgpYHgpJXgpY3gpLAuX+CktuCkqOCkvy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCkhi5f4KS44KWLLl/gpK7gpIIuX+CkrOClgS5f4KSs4KS/Ll/gpLbgpYEuX+Ckti4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJB4KSV4KWLIGg6bW0g4KSs4KSc4KWHIixMVFM6IkHgpJXgpYsgaDptbTpzcyDgpKzgpJzgpYciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQeCkleCliyBoOm1tIOCkrOCknOClhyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEHgpJXgpYsgaDptbSDgpKzgpJzgpYcifSxwcmVwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9b4KWn4KWo4KWp4KWq4KWr4KWs4KWt4KWu4KWv4KWmXS9nLGZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxtZXJpZGllbVBhcnNlOi/gpLDgpL7gpKTgpL984KSs4KS/4KS54KS+4KSofOCkpuCkv+CkieCkgeCkuOCli3zgpLjgpL7gpIHgpJ0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSLgpLDgpL7gpKTgpL8iKXJldHVybiBlPDQ/ZTplKzEyO2Vsc2UgaWYodD09PSLgpKzgpL/gpLngpL7gpKgiKXJldHVybiBlO2Vsc2UgaWYodD09PSLgpKbgpL/gpIngpIHgpLjgpYsiKXJldHVybiBlPj0xMD9lOmUrMTI7ZWxzZSBpZih0PT09IuCkuOCkvuCkgeCknSIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDMpcmV0dXJuIuCksOCkvuCkpOCkvyI7ZWxzZSBpZihlPDEyKXJldHVybiLgpKzgpL/gpLngpL7gpKgiO2Vsc2UgaWYoZTwxNilyZXR1cm4i4KSm4KS/4KSJ4KSB4KS44KWLIjtlbHNlIGlmKGU8MjApcmV0dXJuIuCkuOCkvuCkgeCknSI7ZWxzZSByZXR1cm4i4KSw4KS+4KSk4KS/In0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgpIbgpJxdIExUIixuZXh0RGF5OiJb4KSt4KWL4KSy4KS/XSBMVCIsbmV4dFdlZWs6IlvgpIbgpIngpIHgpKbgpYtdIGRkZGRbLF0gTFQiLGxhc3REYXk6IlvgpLngpL/gpJzgpYtdIExUIixsYXN0V2VlazoiW+Ckl+Ckj+CkleCli10gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPgpK7gpL4iLHBhc3Q6IiVzIOCkheCkl+CkvuCkoeCkvyIsczoi4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoyIsc3M6IiVkIOCkuOClh+CkleClh+Cko+CljeCkoSIsbToi4KSP4KSVIOCkruCkv+CkqOClh+CknyIsbW06IiVkIOCkruCkv+CkqOClh+CknyIsaDoi4KSP4KSVIOCkmOCko+CljeCkn+CkviIsaGg6IiVkIOCkmOCko+CljeCkn+CkviIsZDoi4KSP4KSVIOCkpuCkv+CkqCIsZGQ6IiVkIOCkpuCkv+CkqCIsTToi4KSP4KSVIOCkruCkueCkv+CkqOCkviIsTU06IiVkIOCkruCkueCkv+CkqOCkviIseToi4KSP4KSVIOCkrOCksOCljeCktyIseXk6IiVkIOCkrOCksOCljeCktyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIG49Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksaT0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksdD1bL15qYW4vaSwvXmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVsW2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSxyPS9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pLGE7ZS5kZWZpbmVMb2NhbGUoIm5sIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gbjtlbHNlIGlmKC8tTU1NLS8udGVzdCh0KSlyZXR1cm4gaVtlLm1vbnRoKCldO2Vsc2UgcmV0dXJuIG5bZS5tb250aCgpXX0sbW9udGhzUmVnZXg6cixtb250aHNTaG9ydFJlZ2V4OnIsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6dCxsb25nTW9udGhzUGFyc2U6dCxzaG9ydE1vbnRoc1BhcnNlOnQsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8uX21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiw6nDqW4gbWludXV0IixtbToiJWQgbWludXRlbiIsaDoiw6nDqW4gdXVyIixoaDoiJWQgdXVyIixkOiLDqcOpbiBkYWciLGRkOiIlZCBkYWdlbiIsdzoiw6nDqW4gd2VlayIsd3c6IiVkIHdla2VuIixNOiLDqcOpbiBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6IsOpw6luIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3JldHVybiBlKyhlPT09MXx8ZT09PTh8fGU+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBuPSJqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLGk9Imphbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHQ9Wy9eamFuL2ksL15mZWIvaSwvXihtYWFydHxtcnRcLj8pJC9pLC9eYXByL2ksL15tZWkkL2ksL15qdW5baS5dPyQvaSwvXmp1bFtpLl0/JC9pLC9eYXVnL2ksL15zZXAvaSwvXm9rdC9pLC9ebm92L2ksL15kZWMvaV0scj0vXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyfGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxhO2UuZGVmaW5lTG9jYWxlKCJubC1iZSIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpcmV0dXJuIG47ZWxzZSBpZigvLU1NTS0vLnRlc3QodCkpcmV0dXJuIGlbZS5tb250aCgpXTtlbHNlIHJldHVybiBuW2UubW9udGgoKV19LG1vbnRoc1JlZ2V4OnIsbW9udGhzU2hvcnRSZWdleDpyLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98bWVpfGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pLG1vbnRoc1BhcnNlOnQsbG9uZ01vbnRoc1BhcnNlOnQsc2hvcnRNb250aHNQYXJzZTp0LHdlZWtkYXlzOiJ6b25kYWdfbWFhbmRhZ19kaW5zZGFnX3dvZW5zZGFnX2RvbmRlcmRhZ192cmlqZGFnX3phdGVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InpvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiem9fbWFfZGlfd29fZG9fdnJfemEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltnaXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06IsOpw6luIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6IsOpw6luIHV1ciIsaGg6IiVkIHV1ciIsZDoiw6nDqW4gZGFnIixkZDoiJWQgZGFnZW4iLE06IsOpw6luIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiw6nDqW4gamFhciIseXk6IiVkIGphYXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrKGU9PT0xfHxlPT09OHx8ZT49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoIm5uIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoic3VuZGFnX23DpW5kYWdfdHlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sYXVyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1Ll9tw6UuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tw6VfdHlfb25fdG9fZnJfbGEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQiLG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFzdERheToiW0kgZ8OlciBrbG9ra2FdIExUIixsYXN0V2VlazoiW0bDuHJlZ8OlYW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQiLG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIsd3c6IiVkIHZla2VyIixNOiJlaW4gbcOlbmFkIixNTToiJWQgbcOlbmFkZXIiLHk6ImVpdCDDpXIiLHl5OiIlZCDDpXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgib2MtbG5jIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5pw6hyX2ZlYnJpw6hyX21hcsOnX2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3TDsmJyZV9ub3ZlbWJyZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmnDqHJfZGUgZmVicmnDqHJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdMOyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6ImRpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW3DqGNyZXNfZGlqw7J1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2FdIEg6bW0iLGxsbDoiRCBNTU0gWVlZWSwgSDptbSIsTExMTDoiZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdcOoaSBhXSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6Iltpw6hyIGFdIExUIixsYXN0V2VlazoiZGRkZCBbcGFzc2F0IGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdcOtICVzIixwYXN0OiJmYSAlcyIsczoidW5hcyBzZWdvbmRhcyIsc3M6IiVkIHNlZ29uZGFzIixtOiJ1bmEgbWludXRhIixtbToiJWQgbWludXRhcyIsaDoidW5hIG9yYSIsaGg6IiVkIG9yYXMiLGQ6InVuIGpvcm4iLGRkOiIlZCBqb3JucyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShyfG58dHzDqHxhKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3ZhciBuPWU9PT0xPyJyIjplPT09Mj8ibiI6ZT09PTM/InIiOmU9PT00PyJ0Ijoiw6giO2lmKHQ9PT0idyJ8fHQ9PT0iVyIpbj0iYSI7cmV0dXJuIGUrbn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdD17MToi4KmnIiwyOiLgqagiLDM6IuCpqSIsNDoi4KmqIiw1OiLgqasiLDY6IuCprCIsNzoi4KmtIiw4OiLgqa4iLDk6IuCpryIsMDoi4KmmIn0sbj17IuCppyI6IjEiLCLgqagiOiIyIiwi4KmpIjoiMyIsIuCpqiI6IjQiLCLgqasiOiI1Iiwi4KmsIjoiNiIsIuCprSI6IjciLCLgqa4iOiI4Iiwi4KmvIjoiOSIsIuCppiI6IjAifSxpO2UuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoi4Kic4Kio4Ki14Kiw4KmAX+Coq+CovOCosOCoteCosOCpgF/gqK7gqL7gqLDgqJpf4KiF4Kiq4KmN4Kiw4KmI4KiyX+CoruCoiF/gqJzgqYLgqKhf4Kic4KmB4Kiy4Ki+4KiIX+CoheCol+CouOCopF/gqLjgqKTgqbDgqKzgqLBf4KiF4KiV4Kik4KmC4Kis4KiwX+CoqOCoteCpsOCorOCosF/gqKbgqLjgqbDgqKzgqLAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLgqJDgqKTgqLXgqL7gqLBf4Ki44KmL4Kiu4Ki14Ki+4KiwX+CoruCpsOCol+CosuCoteCovuCosF/gqKzgqYHgqKfgqLXgqL7gqLBf4Ki14KmA4Kiw4Ki14Ki+4KiwX+CouOCovOCpgeCpseColeCosOCoteCovuCosF/gqLjgqLzgqKjgqYDgqJrgqLDgqLXgqL7gqLAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi4KiQ4KikX+CouOCpi+Corl/gqK7gqbDgqJfgqLJf4Kis4KmB4KinX+CoteCpgOCosF/gqLjgqLzgqYHgqJXgqLBf4Ki44Ki84Kio4KmAIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLgqJDgqKRf4Ki44KmL4KiuX+CoruCpsOCol+Cosl/gqKzgqYHgqKdf4Ki14KmA4KiwX+CouOCovOCpgeColeCosF/gqLjgqLzgqKjgqYAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0g4Ki14Kic4KmHIixMVFM6IkEgaDptbTpzcyDgqLXgqJzgqYciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIOCoteConOCphyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcifSxjYWxlbmRhcjp7c2FtZURheToiW+CoheConF0gTFQiLG5leHREYXk6IlvgqJXgqLJdIExUIixuZXh0V2VlazoiW+CoheCol+CosuCovl0gZGRkZCwgTFQiLGxhc3REYXk6IlvgqJXgqLJdIExUIixsYXN0V2VlazoiW+CoquCov+Com+CosuCph10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIOCoteCov+CpseComiIscGFzdDoiJXMg4Kiq4Ki/4Kib4Kiy4KmHIixzOiLgqJXgqYHgqJ0g4Ki44KiV4Ki/4Kmw4KifIixzczoiJWQg4Ki44KiV4Ki/4Kmw4KifIixtOiLgqIfgqJUg4Kiu4Ki/4Kmw4KifIixtbToiJWQg4Kiu4Ki/4Kmw4KifIixoOiLgqIfgqbHgqJUg4KiY4Kmw4Kif4Ki+IixoaDoiJWQg4KiY4Kmw4Kif4KmHIixkOiLgqIfgqbHgqJUg4Kim4Ki/4KioIixkZDoiJWQg4Kim4Ki/4KioIixNOiLgqIfgqbHgqJUg4Kiu4Ki54KmA4Kio4Ki+IixNTToiJWQg4Kiu4Ki54KmA4Kio4KmHIix5OiLgqIfgqbHgqJUg4Ki44Ki+4KiyIix5eToiJWQg4Ki44Ki+4KiyIn0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW+Cpp+CpqOCpqeCpquCpq+CprOCpreCpruCpr+Cppl0vZyxmdW5jdGlvbihlKXtyZXR1cm4gbltlXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0sbWVyaWRpZW1QYXJzZTov4Kiw4Ki+4KikfOCouOCoteCph+CosHzgqKbgqYHgqKrgqLngqL/gqLB84Ki44Ki84Ki+4KiuLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i4Kiw4Ki+4KikIilyZXR1cm4gZTw0P2U6ZSsxMjtlbHNlIGlmKHQ9PT0i4Ki44Ki14KmH4KiwIilyZXR1cm4gZTtlbHNlIGlmKHQ9PT0i4Kim4KmB4Kiq4Ki54Ki/4KiwIilyZXR1cm4gZT49MTA/ZTplKzEyO2Vsc2UgaWYodD09PSLgqLjgqLzgqL7gqK4iKXJldHVybiBlKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTw0KXJldHVybiLgqLDgqL7gqKQiO2Vsc2UgaWYoZTwxMClyZXR1cm4i4Ki44Ki14KmH4KiwIjtlbHNlIGlmKGU8MTcpcmV0dXJuIuCopuCpgeCoquCoueCov+CosCI7ZWxzZSBpZihlPDIwKXJldHVybiLgqLjgqLzgqL7gqK4iO2Vsc2UgcmV0dXJuIuCosOCovuCopCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIG49InN0eWN6ZcWEX2x1dHlfbWFyemVjX2t3aWVjaWXFhF9tYWpfY3plcndpZWNfbGlwaWVjX3NpZXJwaWXFhF93cnplc2llxYRfcGHFumR6aWVybmlrX2xpc3RvcGFkX2dydWR6aWXFhCIuc3BsaXQoIl8iKSxpPSJzdHljem5pYV9sdXRlZ29fbWFyY2Ffa3dpZXRuaWFfbWFqYV9jemVyd2NhX2xpcGNhX3NpZXJwbmlhX3dyemXFm25pYV9wYcW6ZHppZXJuaWthX2xpc3RvcGFkYV9ncnVkbmlhIi5zcGxpdCgiXyIpLHQ9Wy9ec3R5L2ksL15sdXQvaSwvXm1hci9pLC9ea3dpL2ksL15tYWovaSwvXmN6ZS9pLC9ebGlwL2ksL15zaWUvaSwvXndyei9pLC9ecGHFui9pLC9ebGlzL2ksL15ncnUvaV0scjtmdW5jdGlvbiBhKGUpe3JldHVybiBlJTEwPDUmJmUlMTA+MSYmfn4oZS8xMCklMTAhPT0xfWZ1bmN0aW9uIHMoZSx0LG4pe3ZhciBpPWUrIiAiO3N3aXRjaChuKXtjYXNlInNzIjpyZXR1cm4gaSsoYShlKT8ic2VrdW5keSI6InNla3VuZCIpO2Nhc2UibSI6cmV0dXJuIHQ/Im1pbnV0YSI6Im1pbnV0xJkiO2Nhc2UibW0iOnJldHVybiBpKyhhKGUpPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIHQ/ImdvZHppbmEiOiJnb2R6aW7EmSI7Y2FzZSJoaCI6cmV0dXJuIGkrKGEoZSk/ImdvZHppbnkiOiJnb2R6aW4iKTtjYXNlInd3IjpyZXR1cm4gaSsoYShlKT8idHlnb2RuaWUiOiJ0eWdvZG5pIik7Y2FzZSJNTSI6cmV0dXJuIGkrKGEoZSk/Im1pZXNpxIVjZSI6Im1pZXNpxJljeSIpO2Nhc2UieXkiOnJldHVybiBpKyhhKGUpPyJsYXRhIjoibGF0Iil9fWUuZGVmaW5lTG9jYWxlKCJwbCIse21vbnRoczpmdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBuO2Vsc2UgaWYoL0QgTU1NTS8udGVzdCh0KSlyZXR1cm4gaVtlLm1vbnRoKCldO2Vsc2UgcmV0dXJuIG5bZS5tb250aCgpXX0sbW9udGhzU2hvcnQ6InN0eV9sdXRfbWFyX2t3aV9tYWpfY3plX2xpcF9zaWVfd3J6X3BhxbpfbGlzX2dydSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTp0LGxvbmdNb250aHNQYXJzZTp0LHNob3J0TW9udGhzUGFyc2U6dCx3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYcWCZWtfd3RvcmVrX8Wbcm9kYV9jendhcnRla19wacSFdGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZHpfcG9uX3d0X8Wbcl9jendfcHRfc29iIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJOZF9Qbl9XdF/FmnJfQ3pfUHRfU28iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRHppxZsgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyBuaWVkemllbMSZIG9dIExUIjtjYXNlIDI6cmV0dXJuIltXZSB3dG9yZWsgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgxZtyb2TEmSBvXSBMVCI7Y2FzZSA2OnJldHVybiJbVyBzb2JvdMSZIG9dIExUIjtkZWZhdWx0OnJldHVybiJbV10gZGRkZCBbb10gTFQifX0sbGFzdERheToiW1djem9yYWogb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVCI7Y2FzZSAzOnJldHVybiJbVyB6ZXN6xYLEhSDFm3JvZMSZIG9dIExUIjtjYXNlIDY6cmV0dXJuIltXIHplc3rFgsSFIHNvYm90xJkgb10gTFQiO2RlZmF1bHQ6cmV0dXJuIltXIHplc3rFgnldIGRkZGQgW29dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiIlcyB0ZW11IixzOiJraWxrYSBzZWt1bmQiLHNzOnMsbTpzLG1tOnMsaDpzLGhoOnMsZDoiMSBkemllxYQiLGRkOiIlZCBkbmkiLHc6InR5ZHppZcWEIix3dzpzLE06Im1pZXNpxIVjIixNTTpzLHk6InJvayIseXk6c30sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInB0Iix7bW9udGhzOiJqYW5laXJvX2ZldmVyZWlyb19tYXLDp29fYWJyaWxfbWFpb19qdW5ob19qdWxob19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZXplbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2Zldl9tYXJfYWJyX21haV9qdW5fanVsX2Fnb19zZXRfb3V0X25vdl9kZXoiLnNwbGl0KCJfIiksd2Vla2RheXM6IkRvbWluZ29fU2VndW5kYS1mZWlyYV9UZXLDp2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9Tw6FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRvbV9TZWdfVGVyX1F1YV9RdWlfU2V4X1PDoWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvXzLCql8zwqpfNMKqXzXCql82wqpfU8OhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgw6BzXSBMVCIsbmV4dERheToiW0FtYW5ow6Mgw6BzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW8Ogc10gTFQiLGxhc3REYXk6IltPbnRlbSDDoHNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRheSgpPT09MHx8dGhpcy5kYXkoKT09PTY/IlvDmmx0aW1vXSBkZGRkIFvDoHNdIExUIjoiW8OabHRpbWFdIGRkZGQgW8Ogc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaMOhICVzIixzOiJzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIix3OiJ1bWEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW0gbcOqcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfcK6LyxvcmRpbmFsOiIlZMK6Iix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJwdC1iciIse21vbnRoczoiamFuZWlyb19mZXZlcmVpcm9fbWFyw6dvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyw6dhLWZlaXJhX3F1YXJ0YS1mZWlyYV9xdWludGEtZmVpcmFfc2V4dGEtZmVpcmFfc8OhYmFkbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkb21fc2VnX3Rlcl9xdWFfcXVpX3NleF9zw6FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb18ywqpfM8KqXzTCql81wqpfNsKqX3PDoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBbw6BzXSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIb2plIMOgc10gTFQiLG5leHREYXk6IltBbWFuaMOjIMOgc10gTFQiLG5leHRXZWVrOiJkZGRkIFvDoHNdIExUIixsYXN0RGF5OiJbT250ZW0gw6BzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXkoKT09PTB8fHRoaXMuZGF5KCk9PT02PyJbw5psdGltb10gZGRkZCBbw6BzXSBMVCI6IlvDmmx0aW1hXSBkZGRkIFvDoHNdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW0gJXMiLHBhc3Q6ImjDoSAlcyIsczoicG91Y29zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVtIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVtYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVtIGRpYSIsZGQ6IiVkIGRpYXMiLE06InVtIG3DqnMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3Cui8sb3JkaW5hbDoiJWTCuiIsaW52YWxpZERhdGU6IkRhdGEgaW52w6FsaWRhIn0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KZnVuY3Rpb24gdChlLHQsbil7dmFyIGk9e3NzOiJzZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InPEg3B0xINtw6JuaSIsTU06Imx1bmkiLHl5OiJhbmkifSxyPSIgIjtpZihlJTEwMD49MjB8fGU+PTEwMCYmZSUxMDA9PT0wKXI9IiBkZSAiO3JldHVybiBlK3IraVtuXX12YXIgbjtlLmRlZmluZUxvY2FsZSgicm8iLHttb250aHM6ImlhbnVhcmllX2ZlYnJ1YXJpZV9tYXJ0aWVfYXByaWxpZV9tYWlfaXVuaWVfaXVsaWVfYXVndXN0X3NlcHRlbWJyaWVfb2N0b21icmllX25vaWVtYnJpZV9kZWNlbWJyaWUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imlhbi5fZmViLl9tYXJ0Ll9hcHIuX21haV9pdW4uX2l1bC5fYXVnLl9zZXB0Ll9vY3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6ImR1bWluaWPEg19sdW5pX21hcsibaV9taWVyY3VyaV9qb2lfdmluZXJpX3PDom1ixIN0xIMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRHVtX0x1bl9NYXJfTWllX0pvaV9WaW5fU8OibSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiRHVfTHVfTWFfTWlfSm9fVmlfU8OiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW23DomluZSBsYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtsYV0gTFQiLGxhc3REYXk6IltpZXJpIGxhXSBMVCIsbGFzdFdlZWs6Iltmb3N0YV0gZGRkZCBbbGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwZXN0ZSAlcyIscGFzdDoiJXMgw65uIHVybcSDIixzOiJjw6J0ZXZhIHNlY3VuZGUiLHNzOnQsbToidW4gbWludXQiLG1tOnQsaDoibyBvcsSDIixoaDp0LGQ6Im8gemkiLGRkOnQsdzoibyBzxINwdMSDbcOibsSDIix3dzp0LE06Im8gbHVuxIMiLE1NOnQseToidW4gYW4iLHl5OnR9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuc3BsaXQoIl8iKTtyZXR1cm4gdCUxMD09PTEmJnQlMTAwIT09MTE/blswXTp0JTEwPj0yJiZ0JTEwPD00JiYodCUxMDA8MTB8fHQlMTAwPj0yMCk/blsxXTpuWzJdfWZ1bmN0aW9uIHQoZSx0LG4pe3ZhciBpPXtzczp0PyLRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQiOiLRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQiLG1tOnQ/ItC80LjQvdGD0YLQsF/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgiI6ItC80LjQvdGD0YLRg1/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgiIsaGg6ItGH0LDRgV/Rh9Cw0YHQsF/Rh9Cw0YHQvtCyIixkZDoi0LTQtdC90Yxf0LTQvdGPX9C00L3QtdC5Iix3dzoi0L3QtdC00LXQu9GPX9C90LXQtNC10LvQuF/QvdC10LTQtdC70YwiLE1NOiLQvNC10YHRj9GGX9C80LXRgdGP0YbQsF/QvNC10YHRj9GG0LXQsiIseXk6ItCz0L7QtF/Qs9C+0LTQsF/Qu9C10YIifTtpZihuPT09Im0iKXJldHVybiB0PyLQvNC40L3Rg9GC0LAiOiLQvNC40L3Rg9GC0YMiO2Vsc2UgcmV0dXJuIGUrIiAiK3IoaVtuXSwrZSl9dmFyIG49Wy9e0Y/QvdCyL2ksL17RhNC10LIvaSwvXtC80LDRgC9pLC9e0LDQv9GAL2ksL17QvNCwW9C50Y9dL2ksL17QuNGO0L0vaSwvXtC40Y7Quy9pLC9e0LDQstCzL2ksL17RgdC10L0vaSwvXtC+0LrRgi9pLC9e0L3QvtGPL2ksL17QtNC10LovaV0saTtlLmRlZmluZUxvY2FsZSgicnUiLHttb250aHM6e2Zvcm1hdDoi0Y/QvdCy0LDRgNGPX9GE0LXQstGA0LDQu9GPX9C80LDRgNGC0LBf0LDQv9GA0LXQu9GPX9C80LDRj1/QuNGO0L3Rj1/QuNGO0LvRj1/QsNCy0LPRg9GB0YLQsF/RgdC10L3RgtGP0LHRgNGPX9C+0LrRgtGP0LHRgNGPX9C90L7Rj9Cx0YDRj1/QtNC10LrQsNCx0YDRjyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0Ontmb3JtYXQ6ItGP0L3Qsi5f0YTQtdCy0YAuX9C80LDRgC5f0LDQv9GALl/QvNCw0Y9f0LjRjtC90Y9f0LjRjtC70Y9f0LDQstCzLl/RgdC10L3Rgi5f0L7QutGCLl/QvdC+0Y/QsS5f0LTQtdC6LiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiLRj9C90LIuX9GE0LXQstGALl/QvNCw0YDRgl/QsNC/0YAuX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LMuX9GB0LXQvdGCLl/QvtC60YIuX9C90L7Rj9CxLl/QtNC10LouIi5zcGxpdCgiXyIpfSx3ZWVrZGF5czp7c3RhbmRhbG9uZToi0LLQvtGB0LrRgNC10YHQtdC90YzQtV/Qv9C+0L3QtdC00LXQu9GM0L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLQtdGA0LNf0L/Rj9GC0L3QuNGG0LBf0YHRg9Cx0LHQvtGC0LAiLnNwbGl0KCJfIiksZm9ybWF0OiLQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTRg1/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbRg1/RgdGD0LHQsdC+0YLRgyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1vQktCyXSA/KD860L/RgNC+0YjQu9GD0Y580YHQu9C10LTRg9GO0YnRg9GOfNGN0YLRgyk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoi0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpuLGxvbmdNb250aHNQYXJzZTpuLHNob3J0TW9udGhzUGFyc2U6bixtb250aHNSZWdleDovXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XC4/fNC80LDRgNGC0LA/fNC80LDRgFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1wuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1wuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslwuP3zRhNC10LLRgNCw0Ltb0YzRj1180YTQtdCy0YA/XC4/fNC80LDRgNGC0LA/fNC80LDRgFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFwuP3zQvNCwW9C50Y9dfNC40Y7QvVvRjNGPXXzQuNGO0L1cLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1wuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXC4/fNGB0LXQvdGC0Y/QsdGAW9GM0Y9dfNGB0LXQvdGCP1wuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XC4/fNC00LXQutCw0LHRgFvRjNGPXXzQtNC10LpcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14o0Y/QvdCy0LDRgFvRj9GMXXzRhNC10LLRgNCw0Ltb0Y/RjF180LzQsNGA0YLQsD980LDQv9GA0LXQu1vRj9GMXXzQvNCwW9GP0LldfNC40Y7QvVvRj9GMXXzQuNGO0Ltb0Y/RjF180LDQstCz0YPRgdGC0LA/fNGB0LXQvdGC0Y/QsdGAW9GP0YxdfNC+0LrRgtGP0LHRgFvRj9GMXXzQvdC+0Y/QsdGAW9GP0YxdfNC00LXQutCw0LHRgFvRj9GMXSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKNGP0L3QslwufNGE0LXQstGAP1wufNC80LDRgFvRgi5dfNCw0L/RgFwufNC80LBb0Y/QuV180LjRjtC9W9GM0Y8uXXzQuNGO0Ltb0YzRjy5dfNCw0LLQs1wufNGB0LXQvdGCP1wufNC+0LrRglwufNC90L7Rj9CxP1wufNC00LXQulwuKS9pLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkg0LMuIixMTEw6IkQgTU1NTSBZWVlZINCzLiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQodC10LPQvtC00L3Rjywg0LJdIExUIixuZXh0RGF5OiJb0JfQsNCy0YLRgNCwLCDQsl0gTFQiLGxhc3REYXk6IlvQktGH0LXRgNCwLCDQsl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKGUpe2lmKGUud2VlaygpIT09dGhpcy53ZWVrKCkpc3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW9CSINGB0LvQtdC00YPRjtGJ0LXQtV0gZGRkZCwgW9CyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIlvQkiDRgdC70LXQtNGD0Y7RidC40LldIGRkZGQsIFvQsl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJb0JIg0YHQu9C10LTRg9GO0YnRg9GOXSBkZGRkLCBb0LJdIExUIn1lbHNlIGlmKHRoaXMuZGF5KCk9PT0yKXJldHVybiJb0JLQvl0gZGRkZCwgW9CyXSBMVCI7ZWxzZSByZXR1cm4iW9CSXSBkZGRkLCBb0LJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oZSl7aWYoZS53ZWVrKCkhPT10aGlzLndlZWsoKSlzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJb0JIg0L/RgNC+0YjQu9C+0LVdIGRkZGQsIFvQsl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OnJldHVybiJb0JIg0L/RgNC+0YjQu9GL0LldIGRkZGQsIFvQsl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJb0JIg0L/RgNC+0YjQu9GD0Y5dIGRkZGQsIFvQsl0gTFQifWVsc2UgaWYodGhpcy5kYXkoKT09PTIpcmV0dXJuIlvQktC+XSBkZGRkLCBb0LJdIExUIjtlbHNlIHJldHVybiJb0JJdIGRkZGQsIFvQsl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLRh9C10YDQtdC3ICVzIixwYXN0OiIlcyDQvdCw0LfQsNC0IixzOiLQvdC10YHQutC+0LvRjNC60L4g0YHQtdC60YPQvdC0Iixzczp0LG06dCxtbTp0LGg6ItGH0LDRgSIsaGg6dCxkOiLQtNC10L3RjCIsZGQ6dCx3OiLQvdC10LTQtdC70Y8iLHd3OnQsTToi0LzQtdGB0Y/RhiIsTU06dCx5OiLQs9C+0LQiLHl5OnR9LG1lcmlkaWVtUGFyc2U6L9C90L7Rh9C4fNGD0YLRgNCwfNC00L3Rj3zQstC10YfQtdGA0LAvaSxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybi9eKNC00L3Rj3zQstC10YfQtdGA0LApJC8udGVzdChlKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8NClyZXR1cm4i0L3QvtGH0LgiO2Vsc2UgaWYoZTwxMilyZXR1cm4i0YPRgtGA0LAiO2Vsc2UgaWYoZTwxNylyZXR1cm4i0LTQvdGPIjtlbHNlIHJldHVybiLQstC10YfQtdGA0LAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LSjQuXzQs9C+fNGPKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOnJldHVybiBlKyIt0LkiO2Nhc2UiRCI6cmV0dXJuIGUrIi3Qs9C+IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIi3RjyI7ZGVmYXVsdDpyZXR1cm4gZX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ9WyLYrNmG2YjYsdmKIiwi2YHZitio2LHZiNix2YoiLCLZhdin2LHahiIsItin2b7YsdmK2YQiLCLZhdim2YoiLCLYrNmI2YYiLCLYrNmI2YTYp9ih2ZAiLCLYotqv2LPZvSIsItiz2YrZvtm92YXYqNixIiwi2KLaqtm92YjYqNixIiwi2YbZiNmF2KjYsSIsItqK2LPZhdio2LEiXSxuPVsi2KLahtixIiwi2LPZiNmF2LEiLCLYp9qx2KfYsdmIIiwi2KfYsdio2LkiLCLYrtmF2YrYsyIsItis2YXYuSIsItqH2Ybah9ixIl0saTtlLmRlZmluZUxvY2FsZSgic2QiLHttb250aHM6dCxtb250aHNTaG9ydDp0LHdlZWtkYXlzOm4sd2Vla2RheXNTaG9ydDpuLHdlZWtkYXlzTWluOm4sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/Ytdio2K182LTYp9mFLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLYtNin2YUiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIti12KjYrSI7cmV0dXJuIti02KfZhSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KfahF0gTFQiLG5leHREYXk6IlvYs9qA2Kfau9mKXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9in2rPZitmGINmH2YHYqtmKINiq2YpdIExUIixsYXN0RGF5OiJb2qrYp9mE2YfZh10gTFQiLGxhc3RXZWVrOiJb2q/Ystix2YrZhCDZh9mB2KrZil0gZGRkZCBb2KrZil0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzINm+2YjYoSIscGFzdDoiJXMg2KfasyIsczoi2obZhtivINiz2YraqtmG2ooiLHNzOiIlZCDYs9mK2qrZhtqKIixtOiLZh9qqINmF2YbZvSIsbW06IiVkINmF2YbZvSIsaDoi2YfaqiDaqtmE2KfaqiIsaGg6IiVkINqq2YTYp9qqIixkOiLZh9qqINqP2YrZhtmH2YYiLGRkOiIlZCDaj9mK2YbZh9mGIixNOiLZh9qqINmF2YfZitmG2YgiLE1NOiIlZCDZhdmH2YrZhtinIix5OiLZh9qqINiz2KfZhCIseXk6IiVkINiz2KfZhCJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8sL2csItiMIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInNlIix7bW9udGhzOiJvxJHEkWFqYWdlbcOhbm51X2d1b3Z2YW3DoW5udV9uanVrxI1hbcOhbm51X2N1b8WLb23DoW5udV9taWVzc2Vtw6FubnVfZ2Vhc3NlbcOhbm51X3N1b2lkbmVtw6FubnVfYm9yZ2Vtw6FubnVfxI1ha8SNYW3DoW5udV9nb2xnZ290bcOhbm51X3Nrw6FibWFtw6FubnVfanVvdmxhbcOhbm51Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJvxJHEkWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9ib3JnX8SNYWvEjV9nb2xnX3Nrw6FiX2p1b3YiLnNwbGl0KCJfIiksd2Vla2RheXM6InNvdG5hYmVhaXZpX3Z1b3Nzw6FyZ2FfbWHFi8WLZWLDoXJnYV9nYXNrYXZhaGtrdV9kdW9yYXN0YXRfYmVhcmphZGF0X2zDoXZ2YXJkYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic290bl92dW9zX21hxYtfZ2Fza19kdW9yX2JlYXJfbMOhdiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRpXSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRXZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgZ2Vhxb5lcyIscGFzdDoibWHFi2l0ICVzIixzOiJtb2FkZGUgc2VrdW5kZGF0IixzczoiJWQgc2VrdW5kZGF0IixtOiJva3RhIG1pbnVodGEiLG1tOiIlZCBtaW51aHRhdCIsaDoib2t0YSBkaWltbXUiLGhoOiIlZCBkaWltbXV0IixkOiJva3RhIGJlYWl2aSIsZGQ6IiVkIGJlYWl2dml0IixNOiJva3RhIG3DoW5udSIsTU06IiVkIG3DoW51dCIseToib2t0YSBqYWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInNpIix7bW9udGhzOiLgtqLgtrHgt4Dgt4/gtrvgt5Jf4La04LeZ4La24La74LeA4LeP4La74LeSX+C2uOC3j+C2u+C3iuC2reC3lF/gtoXgtrTgt4rigI3gtrvgt5rgtr3gt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4Led4LeD4LeK4Lat4LeUX+C3g+C3kOC2tOC3iuC2reC3kOC2uOC3iuC2tuC2u+C3il/gtpTgtprgt4rgtq3gt53gtrbgtrvgt4pf4Lax4Lec4LeA4LeQ4La44LeK4La24La74LeKX+C2r+C3meC3g+C3kOC2uOC3iuC2tuC2u+C3iiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4Lai4LaxX+C2tOC3meC2tl/gtrjgt4/gtrvgt4pf4LaF4La04LeKX+C2uOC3kOC2uuC3kl/gtqLgt5bgtrHgt5Jf4Lai4LeW4La94LeSX+C2heC2nOC3nV/gt4Pgt5DgtrTgt4pf4LaU4Laa4LeKX+C2seC3nOC3gOC3kF/gtq/gt5ngt4Pgt5AiLnNwbGl0KCJfIiksd2Vla2RheXM6IuC2ieC2u+C3kuC2r+C3j1/gt4PgtrPgt5Tgtq/gt49f4LaF4Laf4LeE4La74LeU4LeA4LeP4Lav4LePX+C2tuC2r+C3j+C2r+C3j1/gtrbgt4rigI3gtrvgt4Tgt4Pgt4rgtrTgtq3gt5LgtrHgt4rgtq/gt49f4LeD4LeS4Laa4LeU4La74LeP4Lav4LePX+C3g+C3meC2seC3g+C3lOC2u+C3j+C2r+C3jyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgtongtrvgt5Jf4LeD4Laz4LeUX+C2heC2n1/gtrbgtq/gt49f4La24LeK4oCN4La74LeEX+C3g+C3kuC2muC3lF/gt4Pgt5ngtrEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuC2iV/gt4Nf4LaFX+C2tl/gtrbgt4rigI3gtrtf4LeD4LeSX+C3g+C3mSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBb4LeA4LeQ4Lax4LeSXSBkZGRkLCBhIGg6bW06c3MifSxjYWxlbmRhcjp7c2FtZURheToiW+C2heC2r10gTFRb4LanXSIsbmV4dERheToiW+C3hOC3meC2p10gTFRb4LanXSIsbmV4dFdlZWs6ImRkZGQgTFRb4LanXSIsbGFzdERheToiW+C2iuC2uuC3ml0gTFRb4LanXSIsbGFzdFdlZWs6IlvgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPgtprgt5LgtrHgt4oiLHBhc3Q6IiVz4Laa4LanIOC2tOC3meC2uyIsczoi4Lat4Lat4LeK4La04La7IOC2muC3kuC3hOC3kuC2tOC2uiIsc3M6IuC2reC2reC3iuC2tOC2uyAlZCIsbToi4La44LeS4Lax4LeS4Lat4LeK4Lat4LeU4LeAIixtbToi4La44LeS4Lax4LeS4Lat4LeK4Lat4LeUICVkIixoOiLgtrTgt5DgtroiLGhoOiLgtrTgt5DgtrogJWQiLGQ6IuC2r+C3kuC2seC2uiIsZGQ6IuC2r+C3kuC2sSAlZCIsTToi4La44LeP4LeD4La6IixNTToi4La44LeP4LeDICVkIix5OiLgt4Dgt4PgtrsiLHl5OiLgt4Dgt4PgtrsgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IOC3gOC3kOC2seC3ki8sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZSsiIOC3gOC3kOC2seC3kiJ9LG1lcmlkaWVtUGFyc2U6L+C2tOC3meC2uyDgt4Dgtrvgt5R84La04LeD4LeKIOC3gOC2u+C3lHzgtrTgt5ku4LeAfOC2tC7gt4AuLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IuC2tC7gt4AuInx8ZT09PSLgtrTgt4Pgt4og4LeA4La74LeUIn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU+MTEpcmV0dXJuIG4/IuC2tC7gt4AuIjoi4La04LeD4LeKIOC3gOC2u+C3lCI7ZWxzZSByZXR1cm4gbj8i4La04LeZLuC3gC4iOiLgtrTgt5ngtrsg4LeA4La74LeUIn19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PSJqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG49Imphbl9mZWJfbWFyX2Fwcl9tw6FqX2rDum5fasO6bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLGk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZT4xJiZlPDV9ZnVuY3Rpb24gcihlLHQsbixpKXt2YXIgcj1lKyIgIjtzd2l0Y2gobil7Y2FzZSJzIjpyZXR1cm4gdHx8aT8icMOhciBzZWvDum5kIjoicMOhciBzZWt1bmRhbWkiO2Nhc2Uic3MiOmlmKHR8fGkpcmV0dXJuIHIrKGEoZSk/InNla3VuZHkiOiJzZWvDum5kIik7ZWxzZSByZXR1cm4gcisic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiB0PyJtaW7DunRhIjppPyJtaW7DunR1IjoibWluw7p0b3UiO2Nhc2UibW0iOmlmKHR8fGkpcmV0dXJuIHIrKGEoZSk/Im1pbsO6dHkiOiJtaW7DunQiKTtlbHNlIHJldHVybiByKyJtaW7DunRhbWkiO2Nhc2UiaCI6cmV0dXJuIHQ/ImhvZGluYSI6aT8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6aWYodHx8aSlyZXR1cm4gcisoYShlKT8iaG9kaW55IjoiaG9kw61uIik7ZWxzZSByZXR1cm4gcisiaG9kaW5hbWkiO2Nhc2UiZCI6cmV0dXJuIHR8fGk/ImRlxYgiOiJkxYhvbSI7Y2FzZSJkZCI6aWYodHx8aSlyZXR1cm4gcisoYShlKT8iZG5pIjoiZG7DrSIpO2Vsc2UgcmV0dXJuIHIrImTFiGFtaSI7Y2FzZSJNIjpyZXR1cm4gdHx8aT8ibWVzaWFjIjoibWVzaWFjb20iO2Nhc2UiTU0iOmlmKHR8fGkpcmV0dXJuIHIrKGEoZSk/Im1lc2lhY2UiOiJtZXNpYWNvdiIpO2Vsc2UgcmV0dXJuIHIrIm1lc2lhY21pIjtjYXNlInkiOnJldHVybiB0fHxpPyJyb2siOiJyb2tvbSI7Y2FzZSJ5eSI6aWYodHx8aSlyZXR1cm4gcisoYShlKT8icm9reSI6InJva292Iik7ZWxzZSByZXR1cm4gcisicm9rbWkifX1lLmRlZmluZUxvY2FsZSgic2siLHttb250aHM6dCxtb250aHNTaG9ydDpuLHdlZWtkYXlzOiJuZWRlxL5hX3BvbmRlbG9rX3V0b3Jva19zdHJlZGFfxaF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF/FoXRfcGlfc28iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3N0X8WhdF9waV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyBvXSBMVCIsbmV4dERheToiW3phanRyYSBvXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdiBuZWRlxL51IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byDFoXR2cnRvayBvXSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwaWF0b2sgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IG9dIExUIn19LGxhc3REYXk6Ilt2xI1lcmEgb10gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsw7ogbmVkZcS+dSBvXSBMVCI7Y2FzZSAxOmNhc2UgMjpyZXR1cm4iW21pbnVsw71dIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bMO6IHN0cmVkdSBvXSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsw71dIGRkZGQgW29dIExUIjtjYXNlIDY6cmV0dXJuIlttaW51bMO6IHNvYm90dSBvXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlZCAlcyIsczpyLHNzOnIsbTpyLG1tOnIsaDpyLGhoOnIsZDpyLGRkOnIsTTpyLE1NOnIseTpyLHl5OnJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCmZ1bmN0aW9uIHQoZSx0LG4saSl7dmFyIHI9ZSsiICI7c3dpdGNoKG4pe2Nhc2UicyI6cmV0dXJuIHR8fGk/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7Y2FzZSJzcyI6aWYoZT09PTEpcis9dD8ic2VrdW5kbyI6InNla3VuZGkiO2Vsc2UgaWYoZT09PTIpcis9dHx8aT8ic2VrdW5kaSI6InNla3VuZGFoIjtlbHNlIGlmKGU8NSlyKz10fHxpPyJzZWt1bmRlIjoic2VrdW5kYWgiO2Vsc2Ugcis9InNla3VuZCI7cmV0dXJuIHI7Y2FzZSJtIjpyZXR1cm4gdD8iZW5hIG1pbnV0YSI6ImVubyBtaW51dG8iO2Nhc2UibW0iOmlmKGU9PT0xKXIrPXQ/Im1pbnV0YSI6Im1pbnV0byI7ZWxzZSBpZihlPT09MilyKz10fHxpPyJtaW51dGkiOiJtaW51dGFtYSI7ZWxzZSBpZihlPDUpcis9dHx8aT8ibWludXRlIjoibWludXRhbWkiO2Vsc2Ugcis9dHx8aT8ibWludXQiOiJtaW51dGFtaSI7cmV0dXJuIHI7Y2FzZSJoIjpyZXR1cm4gdD8iZW5hIHVyYSI6ImVubyB1cm8iO2Nhc2UiaGgiOmlmKGU9PT0xKXIrPXQ/InVyYSI6InVybyI7ZWxzZSBpZihlPT09MilyKz10fHxpPyJ1cmkiOiJ1cmFtYSI7ZWxzZSBpZihlPDUpcis9dHx8aT8idXJlIjoidXJhbWkiO2Vsc2Ugcis9dHx8aT8idXIiOiJ1cmFtaSI7cmV0dXJuIHI7Y2FzZSJkIjpyZXR1cm4gdHx8aT8iZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjppZihlPT09MSlyKz10fHxpPyJkYW4iOiJkbmVtIjtlbHNlIGlmKGU9PT0yKXIrPXR8fGk/ImRuaSI6ImRuZXZvbWEiO2Vsc2Ugcis9dHx8aT8iZG5pIjoiZG5ldmkiO3JldHVybiByO2Nhc2UiTSI6cmV0dXJuIHR8fGk/ImVuIG1lc2VjIjoiZW5pbSBtZXNlY2VtIjtjYXNlIk1NIjppZihlPT09MSlyKz10fHxpPyJtZXNlYyI6Im1lc2VjZW0iO2Vsc2UgaWYoZT09PTIpcis9dHx8aT8ibWVzZWNhIjoibWVzZWNlbWEiO2Vsc2UgaWYoZTw1KXIrPXR8fGk/Im1lc2VjZSI6Im1lc2VjaSI7ZWxzZSByKz10fHxpPyJtZXNlY2V2IjoibWVzZWNpIjtyZXR1cm4gcjtjYXNlInkiOnJldHVybiB0fHxpPyJlbm8gbGV0byI6ImVuaW0gbGV0b20iO2Nhc2UieXkiOmlmKGU9PT0xKXIrPXR8fGk/ImxldG8iOiJsZXRvbSI7ZWxzZSBpZihlPT09MilyKz10fHxpPyJsZXRpIjoibGV0b21hIjtlbHNlIGlmKGU8NSlyKz10fHxpPyJsZXRhIjoibGV0aSI7ZWxzZSByKz10fHxpPyJsZXQiOiJsZXRpIjtyZXR1cm4gcn19dmFyIG47ZS5kZWZpbmVMb2NhbGUoInNsIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJlY19hcHJpbF9tYWpfanVuaWpfanVsaWpfYXZndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV/EjWV0cnRla19wZXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3Rvci5fc3JlLl/EjWV0Ll9wZXQuX3NvYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3RvX3NyX8SNZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuIE1NLiBZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuZXMgb2JdIExUIixuZXh0RGF5OiJbanV0cmkgb2JdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2XSBbbmVkZWxqb10gW29iXSBMVCI7Y2FzZSAzOnJldHVybiJbdl0gW3NyZWRvXSBbb2JdIExUIjtjYXNlIDY6cmV0dXJuIlt2XSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt2XSBkZGRkIFtvYl0gTFQifX0sbGFzdERheToiW3bEjWVyYWogb2JdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltwcmVqxaFuam9dIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltwcmVqxaFuam9dIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbcHJlasWhbmpvXSBbc29ib3RvXSBbb2JdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcmVqxaFuamldIGRkZGQgW29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLEjWV6ICVzIixwYXN0OiJwcmVkICVzIixzOnQsc3M6dCxtOnQsbW06dCxoOnQsaGg6dCxkOnQsZGQ6dCxNOnQsTU06dCx5OnQseXk6dH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInNxIix7bW9udGhzOiJKYW5hcl9TaGt1cnRfTWFyc19QcmlsbF9NYWpfUWVyc2hvcl9Lb3JyaWtfR3VzaHRfU2h0YXRvcl9UZXRvcl9Ow6tudG9yX0RoamV0b3IiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tvcl9HdXNfU2h0X1RldF9Ow6tuX0RoaiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRSBEaWVsX0UgSMOrbsOrX0UgTWFydMOrX0UgTcOrcmt1csOrX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1bsOrIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkRpZV9Iw6tuX01hcl9Nw6tyX0Vual9QcmVfU2h0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEX0hfTWFfTcOrX0VfUF9TaCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxtZXJpZGllbVBhcnNlOi9QRHxNRC8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4gZS5jaGFyQXQoMCk9PT0iTSJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZTwxMj8iUEQiOiJNRCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1NvdCBuw6tdIExUIixuZXh0RGF5OiJbTmVzw6tyIG7Dq10gTFQiLG5leHRXZWVrOiJkZGRkIFtuw6tdIExUIixsYXN0RGF5OiJbRGplIG7Dq10gTFQiLGxhc3RXZWVrOiJkZGRkIFtlIGthbHVhciBuw6tdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuw6sgJXMiLHBhc3Q6IiVzIG3DqyBwYXLDqyIsczoiZGlzYSBzZWtvbmRhIixzczoiJWQgc2Vrb25kYSIsbToibmrDqyBtaW51dMOrIixtbToiJWQgbWludXRhIixoOiJuasOrIG9yw6siLGhoOiIlZCBvcsOrIixkOiJuasOrIGRpdMOrIixkZDoiJWQgZGl0w6siLE06Im5qw6sgbXVhaiIsTU06IiVkIG11YWoiLHk6Im5qw6sgdml0Iix5eToiJWQgdml0ZSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBzPXt3b3Jkczp7c3M6WyJzZWt1bmRhIiwic2VrdW5kZSIsInNla3VuZGkiXSxtOlsiamVkYW4gbWludXQiLCJqZWRub2cgbWludXRhIl0sbW06WyJtaW51dCIsIm1pbnV0YSIsIm1pbnV0YSJdLGg6WyJqZWRhbiBzYXQiLCJqZWRub2cgc2F0YSJdLGhoOlsic2F0Iiwic2F0YSIsInNhdGkiXSxkOlsiamVkYW4gZGFuIiwiamVkbm9nIGRhbmEiXSxkZDpbImRhbiIsImRhbmEiLCJkYW5hIl0sTTpbImplZGFuIG1lc2VjIiwiamVkbm9nIG1lc2VjYSJdLE1NOlsibWVzZWMiLCJtZXNlY2EiLCJtZXNlY2kiXSx5OlsiamVkbnUgZ29kaW51IiwiamVkbmUgZ29kaW5lIl0seXk6WyJnb2RpbnUiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihlLHQpe2lmKGUlMTA+PTEmJmUlMTA8PTQmJihlJTEwMDwxMHx8ZSUxMDA+PTIwKSlyZXR1cm4gZSUxMD09PTE/dFswXTp0WzFdO3JldHVybiB0WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9cy53b3Jkc1tuXSxhO2lmKG4ubGVuZ3RoPT09MSl7aWYobj09PSJ5IiYmdClyZXR1cm4iamVkbmEgZ29kaW5hIjtyZXR1cm4gaXx8dD9yWzBdOnJbMV19YT1zLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoZSxyKTtpZihuPT09Inl5IiYmdCYmYT09PSJnb2RpbnUiKXJldHVybiBlKyIgZ29kaW5hIjtyZXR1cm4gZSsiICIrYX19LHQ7ZS5kZWZpbmVMb2NhbGUoInNyIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JlLl/EjWV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX8SNZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JlZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanXEjWUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7dmFyIGU9WyJbcHJvxaFsZV0gW25lZGVsamVdIFt1XSBMVCIsIltwcm/FoWxvZ10gW3BvbmVkZWxqa2FdIFt1XSBMVCIsIltwcm/FoWxvZ10gW3V0b3JrYV0gW3VdIExUIiwiW3Byb8WhbGVdIFtzcmVkZV0gW3VdIExUIiwiW3Byb8WhbG9nXSBbxI1ldHZydGthXSBbdV0gTFQiLCJbcHJvxaFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb8WhbGVdIFtzdWJvdGVdIFt1XSBMVCJdO3JldHVybiBlW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJlICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczpzLnRyYW5zbGF0ZSxtOnMudHJhbnNsYXRlLG1tOnMudHJhbnNsYXRlLGg6cy50cmFuc2xhdGUsaGg6cy50cmFuc2xhdGUsZDpzLnRyYW5zbGF0ZSxkZDpzLnRyYW5zbGF0ZSxNOnMudHJhbnNsYXRlLE1NOnMudHJhbnNsYXRlLHk6cy50cmFuc2xhdGUseXk6cy50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBzPXt3b3Jkczp7c3M6WyLRgdC10LrRg9C90LTQsCIsItGB0LXQutGD0L3QtNC1Iiwi0YHQtdC60YPQvdC00LgiXSxtOlsi0ZjQtdC00LDQvSDQvNC40L3Rg9GCIiwi0ZjQtdC00L3QvtCzINC80LjQvdGD0YLQsCJdLG1tOlsi0LzQuNC90YPRgiIsItC80LjQvdGD0YLQsCIsItC80LjQvdGD0YLQsCJdLGg6WyLRmNC10LTQsNC9INGB0LDRgiIsItGY0LXQtNC90L7QsyDRgdCw0YLQsCJdLGhoOlsi0YHQsNGCIiwi0YHQsNGC0LAiLCLRgdCw0YLQuCJdLGQ6WyLRmNC10LTQsNC9INC00LDQvSIsItGY0LXQtNC90L7QsyDQtNCw0L3QsCJdLGRkOlsi0LTQsNC9Iiwi0LTQsNC90LAiLCLQtNCw0L3QsCJdLE06WyLRmNC10LTQsNC9INC80LXRgdC10YYiLCLRmNC10LTQvdC+0LMg0LzQtdGB0LXRhtCwIl0sTU06WyLQvNC10YHQtdGGIiwi0LzQtdGB0LXRhtCwIiwi0LzQtdGB0LXRhtC4Il0seTpbItGY0LXQtNC90YMg0LPQvtC00LjQvdGDIiwi0ZjQtdC00L3QtSDQs9C+0LTQuNC90LUiXSx5eTpbItCz0L7QtNC40L3RgyIsItCz0L7QtNC40L3QtSIsItCz0L7QtNC40L3QsCJdfSxjb3JyZWN0R3JhbW1hdGljYWxDYXNlOmZ1bmN0aW9uKGUsdCl7aWYoZSUxMD49MSYmZSUxMDw9NCYmKGUlMTAwPDEwfHxlJTEwMD49MjApKXJldHVybiBlJTEwPT09MT90WzBdOnRbMV07cmV0dXJuIHRbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihlLHQsbixpKXt2YXIgcj1zLndvcmRzW25dLGE7aWYobi5sZW5ndGg9PT0xKXtpZihuPT09InkiJiZ0KXJldHVybiLRmNC10LTQvdCwINCz0L7QtNC40L3QsCI7cmV0dXJuIGl8fHQ/clswXTpyWzFdfWE9cy5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKGUscik7aWYobj09PSJ5eSImJnQmJmE9PT0i0LPQvtC00LjQvdGDIilyZXR1cm4gZSsiINCz0L7QtNC40L3QsCI7cmV0dXJuIGUrIiAiK2F9fSx0O2UuZGVmaW5lTG9jYWxlKCJzci1jeXJsIix7bW9udGhzOiLRmNCw0L3Rg9Cw0YBf0YTQtdCx0YDRg9Cw0YBf0LzQsNGA0YJf0LDQv9GA0LjQu1/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LPRg9GB0YJf0YHQtdC/0YLQtdC80LHQsNGAX9C+0LrRgtC+0LHQsNGAX9C90L7QstC10LzQsdCw0YBf0LTQtdGG0LXQvNCx0LDRgCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0ZjQsNC9Ll/RhNC10LEuX9C80LDRgC5f0LDQv9GALl/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LMuX9GB0LXQvy5f0L7QutGCLl/QvdC+0LIuX9C00LXRhi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDp0cnVlLHdlZWtkYXlzOiLQvdC10LTQtdGZ0LBf0L/QvtC90LXQtNC10ZnQsNC6X9GD0YLQvtGA0LDQul/RgdGA0LXQtNCwX9GH0LXRgtCy0YDRgtCw0Lpf0L/QtdGC0LDQul/RgdGD0LHQvtGC0LAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi0L3QtdC0Ll/Qv9C+0L0uX9GD0YLQvi5f0YHRgNC1Ll/Rh9C10YIuX9C/0LXRgi5f0YHRg9CxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQtNCw0L3QsNGBINGDXSBMVCIsbmV4dERheToiW9GB0YPRgtGA0LAg0YNdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlvRg10gW9C90LXQtNC10ZnRg10gW9GDXSBMVCI7Y2FzZSAzOnJldHVybiJb0YNdIFvRgdGA0LXQtNGDXSBb0YNdIExUIjtjYXNlIDY6cmV0dXJuIlvRg10gW9GB0YPQsdC+0YLRg10gW9GDXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJb0YNdIGRkZGQgW9GDXSBMVCJ9fSxsYXN0RGF5OiJb0ZjRg9GH0LUg0YNdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3ZhciBlPVsiW9C/0YDQvtGI0LvQtV0gW9C90LXQtNC10ZnQtV0gW9GDXSBMVCIsIlvQv9GA0L7RiNC70L7Qs10gW9C/0L7QvdC10LTQtdGZ0LrQsF0gW9GDXSBMVCIsIlvQv9GA0L7RiNC70L7Qs10gW9GD0YLQvtGA0LrQsF0gW9GDXSBMVCIsIlvQv9GA0L7RiNC70LVdIFvRgdGA0LXQtNC1XSBb0YNdIExUIiwiW9C/0YDQvtGI0LvQvtCzXSBb0YfQtdGC0LLRgNGC0LrQsF0gW9GDXSBMVCIsIlvQv9GA0L7RiNC70L7Qs10gW9C/0LXRgtC60LBdIFvRg10gTFQiLCJb0L/RgNC+0YjQu9C1XSBb0YHRg9Cx0L7RgtC1XSBb0YNdIExUIl07cmV0dXJuIGVbdGhpcy5kYXkoKV19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItC30LAgJXMiLHBhc3Q6ItC/0YDQtSAlcyIsczoi0L3QtdC60L7Qu9C40LrQviDRgdC10LrRg9C90LTQuCIsc3M6cy50cmFuc2xhdGUsbTpzLnRyYW5zbGF0ZSxtbTpzLnRyYW5zbGF0ZSxoOnMudHJhbnNsYXRlLGhoOnMudHJhbnNsYXRlLGQ6cy50cmFuc2xhdGUsZGQ6cy50cmFuc2xhdGUsTTpzLnRyYW5zbGF0ZSxNTTpzLnRyYW5zbGF0ZSx5OnMudHJhbnNsYXRlLHl5OnMudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgic3MiLHttb250aHM6IkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmkiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkJoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaXNvbnRmb19VbXNvbWJ1bHVrb19MZXNpYmlsaV9MZXNpdHNhdGZ1X0xlc2luZV9MZXNpaGxhbnVfVW1nY2liZWxvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfVXNfTGJfTHRfTHNfTGhfVWciLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OnRydWUsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW05hbXVobGEgbmdhXSBMVCIsbmV4dERheToiW0t1c2FzYSBuZ2FdIExUIixuZXh0V2VlazoiZGRkZCBbbmdhXSBMVCIsbGFzdERheToiW0l0b2xvIG5nYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5nYSAlcyIscGFzdDoid2VudGVrYSBuZ2EgJXMiLHM6ImVtaXp1endhbmEgbG9tY2FuZSIsc3M6IiVkIG16dXp3YW5hIixtOiJ1bXp1enUiLG1tOiIlZCBlbWl6dXp1IixoOiJsaWhvcmEiLGhoOiIlZCBlbWFob3JhIixkOiJsaWxhbmdhIixkZDoiJWQgZW1hbGFuZ2EiLE06ImlueWFuZ2EiLE1NOiIlZCB0aW55YW5nYSIseToidW1ueWFrYSIseXk6IiVkIGltaW55YWthIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDExKXJldHVybiJla3VzZW5pIjtlbHNlIGlmKGU8MTUpcmV0dXJuImVtaW5pIjtlbHNlIGlmKGU8MTkpcmV0dXJuImVudHNhbWJhbWEiO2Vsc2UgcmV0dXJuImVidXN1a3UifSxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0iZWt1c2VuaSIpcmV0dXJuIGU7ZWxzZSBpZih0PT09ImVtaW5pIilyZXR1cm4gZT49MTE/ZTplKzEyO2Vsc2UgaWYodD09PSJlbnRzYW1iYW1hInx8dD09PSJlYnVzdWt1Iil7aWYoZT09PTApcmV0dXJuIDA7cmV0dXJuIGUrMTJ9fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOiIlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgic3YiLHttb250aHM6ImphbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InPDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic8O2X23DpV90aV9vbl90b19mcl9sw7YiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJZGFnXSBMVCIsbmV4dERheToiW0ltb3Jnb25dIExUIixsYXN0RGF5OiJbSWfDpXJdIExUIixuZXh0V2VlazoiW1DDpV0gZGRkZCBMVCIsbGFzdFdlZWs6IltJXSBkZGRkW3NdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiZsO2ciAlcyBzZWRhbiIsczoibsOlZ3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGhoOiIlZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixNOiJlbiBtw6VuYWQiLE1NOiIlZCBtw6VuYWRlciIseToiZXR0IMOlciIseXk6IiVkIMOlciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXDplfFw6YSkvLG9yZGluYWw6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSUxMCxuPX5+KGUlMTAwLzEwKT09PTE/IjplIjp0PT09MT8iOmEiOnQ9PT0yPyI6YSI6dD09PTM/IjplIjoiOmUiO3JldHVybiBlK259LHdlZWs6e2RvdzoxLGRveTo0fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInN3Iix7bW9udGhzOiJKYW51YXJpX0ZlYnJ1YXJpX01hY2hpX0FwcmlsaV9NZWlfSnVuaV9KdWxhaV9BZ29zdGlfU2VwdGVtYmFfT2t0b2JhX05vdmVtYmFfRGVzZW1iYSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX0Fnb19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikp1bWFwaWxpX0p1bWF0YXR1X0p1bWFubmVfSnVtYXRhbm9fQWxoYW1pc2lfSWp1bWFhX0p1bWFtb3NpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkpwbF9KdGF0X0pubmVfSnRhbl9BbGhfSWptX0ptb3MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkoyX0ozX0o0X0o1X0FsX0lqX0oxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDp0cnVlLGxvbmdEYXRlRm9ybWF0OntMVDoiaGg6bW0gQSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbGVvIHNhYV0gTFQiLG5leHREYXk6IltrZXNobyBzYWFdIExUIixuZXh0V2VlazoiW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbamFuYV0gTFQiLGxhc3RXZWVrOiJbd2lraSBpbGl5b3BpdGFdIGRkZGQgW3NhYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYWFkYXllIixwYXN0OiJ0b2tlYSAlcyIsczoiaGl2aSBwdW5kZSIsc3M6InNla3VuZGUgJWQiLG06ImRha2lrYSBtb2phIixtbToiZGFraWthICVkIixoOiJzYWEgbGltb2phIixoaDoibWFzYWEgJWQiLGQ6InNpa3UgbW9qYSIsZGQ6InNpa3UgJWQiLE06Im13ZXppIG1tb2phIixNTToibWllemkgJWQiLHk6Im13YWthIG1tb2phIix5eToibWlha2EgJWQifSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PXsxOiLgr6ciLDI6IuCvqCIsMzoi4K+pIiw0OiLgr6oiLDU6IuCvqyIsNjoi4K+sIiw3OiLgr60iLDg6IuCvriIsOToi4K+vIiwwOiLgr6YifSxuPXsi4K+nIjoiMSIsIuCvqCI6IjIiLCLgr6kiOiIzIiwi4K+qIjoiNCIsIuCvqyI6IjUiLCLgr6wiOiI2Iiwi4K+tIjoiNyIsIuCvriI6IjgiLCLgr68iOiI5Iiwi4K+mIjoiMCJ9LGk7ZS5kZWZpbmVMb2NhbGUoInRhIix7bW9udGhzOiLgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4K6c4K6p4K614K6w4K6/X+CuquCuv+CuquCvjeCusOCuteCusOCuv1/grq7grr7grrDgr43grprgr41f4K6P4K6q4K+N4K6w4K6y4K+NX+CuruCvh1/grpzgr4Lgrqngr41f4K6c4K+C4K6y4K+IX+CuhuCuleCuuOCvjeCun+CvjV/grprgr4bgrqrgr43grp/gr4bgrq7gr43grqrgrrDgr41f4K6F4K6V4K+N4K6f4K+H4K6+4K6q4K6w4K+NX+CuqOCuteCuruCvjeCuquCusOCvjV/grp/grr/grprgrq7gr43grqrgrrDgr40iLnNwbGl0KCJfIiksd2Vla2RheXM6IuCunuCuvuCur+Cuv+CuseCvjeCuseCvgeCuleCvjeCuleCuv+CutOCuruCviF/grqTgrr/grpngr43grpXgrp/gr43grpXgrr/grrTgrq7gr4hf4K6a4K+G4K614K+N4K614K6+4K6v4K+N4K6V4K6/4K604K6u4K+IX+CuquCvgeCupOCuqeCvjeCuleCuv+CutOCuruCviF/grrXgrr/grq/grr7grrTgrpXgr43grpXgrr/grrTgrq7gr4hf4K614K+G4K6z4K+N4K6z4K6/4K6V4K+N4K6V4K6/4K604K6u4K+IX+CumuCuqeCuv+CuleCvjeCuleCuv+CutOCuruCviCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgrp7grr7grq/grr/grrHgr4Ff4K6k4K6/4K6Z4K+N4K6V4K6z4K+NX+CumuCvhuCuteCvjeCuteCuvuCur+CvjV/grqrgr4HgrqTgrqngr41f4K614K6/4K6v4K6+4K604K6p4K+NX+CuteCvhuCus+CvjeCus+Cuv1/grprgrqngrr8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCunuCuvl/grqTgrr9f4K6a4K+GX+CuquCvgV/grrXgrr9f4K614K+GX+CumiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW+Cuh+CuqeCvjeCuseCvgV0gTFQiLG5leHREYXk6Ilvgrqjgrr7grrPgr4hdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6Ilvgrqjgr4fgrrHgr43grrHgr4FdIExUIixsYXN0V2VlazoiW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgrofgrrLgr40iLHBhc3Q6IiVzIOCuruCvgeCuqeCvjSIsczoi4K6S4K6w4K+BIOCumuCuv+CusiDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40iLHNzOiIlZCDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40iLG06IuCukuCusOCvgSDgrqjgrr/grq7grr/grp/grq7gr40iLG1tOiIlZCDgrqjgrr/grq7grr/grp/grpngr43grpXgrrPgr40iLGg6IuCukuCusOCvgSDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NIixoaDoiJWQg4K6u4K6j4K6/IOCuqOCvh+CusOCuruCvjSIsZDoi4K6S4K6w4K+BIOCuqOCuvuCus+CvjSIsZGQ6IiVkIOCuqOCuvuCun+CvjeCuleCus+CvjSIsTToi4K6S4K6w4K+BIOCuruCuvuCupOCuruCvjSIsTU06IiVkIOCuruCuvuCupOCumeCvjeCuleCus+CvjSIseToi4K6S4K6w4K+BIOCuteCusOCvgeCun+CuruCvjSIseXk6IiVkIOCuhuCuo+CvjeCun+CvgeCuleCus+CvjSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3grrXgrqTgr4EvLG9yZGluYWw6ZnVuY3Rpb24oZSl7cmV0dXJuIGUrIuCuteCupOCvgSJ9LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSl9LG1lcmlkaWVtUGFyc2U6L+Cur+CuvuCuruCuruCvjXzgrrXgr4jgrpXgrrHgr4h84K6V4K6+4K6y4K+IfOCuqOCuo+CvjeCuquCuleCusuCvjXzgro7grrHgr43grqrgrr7grp/gr4F84K6u4K6+4K6y4K+ILyxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwyKXJldHVybiIg4K6v4K6+4K6u4K6u4K+NIjtlbHNlIGlmKGU8NilyZXR1cm4iIOCuteCviOCuleCuseCviCI7ZWxzZSBpZihlPDEwKXJldHVybiIg4K6V4K6+4K6y4K+IIjtlbHNlIGlmKGU8MTQpcmV0dXJuIiDgrqjgrqPgr43grqrgrpXgrrLgr40iO2Vsc2UgaWYoZTwxOClyZXR1cm4iIOCujuCuseCvjeCuquCuvuCun+CvgSI7ZWxzZSBpZihlPDIyKXJldHVybiIg4K6u4K6+4K6y4K+IIjtlbHNlIHJldHVybiIg4K6v4K6+4K6u4K6u4K+NIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09IuCur+CuvuCuruCuruCvjSIpcmV0dXJuIGU8Mj9lOmUrMTI7ZWxzZSBpZih0PT09IuCuteCviOCuleCuseCviCJ8fHQ9PT0i4K6V4K6+4K6y4K+IIilyZXR1cm4gZTtlbHNlIGlmKHQ9PT0i4K6o4K6j4K+N4K6q4K6V4K6y4K+NIilyZXR1cm4gZT49MTA/ZTplKzEyO2Vsc2UgcmV0dXJuIGUrMTJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiLgsJzgsKjgsLXgsLDgsL9f4LCr4LC/4LCs4LGN4LCw4LC14LCw4LC/X+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL/gsLLgsY1f4LCu4LGHX+CwnOCxguCwqOCxjV/gsJzgsYHgsLLgsYhf4LCG4LCX4LC44LGN4LCf4LGBX+CwuOCxhuCwquCxjeCwn+CxhuCwguCwrOCwsOCxjV/gsIXgsJXgsY3gsJ/gsYvgsKzgsLDgsY1f4LCo4LC14LCC4LCs4LCw4LGNX+CwoeCwv+CwuOCxhuCwguCwrOCwsOCxjSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4LCc4LCoLl/gsKvgsL/gsKzgsY3gsLAuX+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL8uX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwly5f4LC44LGG4LCq4LGNLl/gsIXgsJXgsY3gsJ/gsYsuX+CwqOCwtS5f4LCh4LC/4LC44LGGLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IuCwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLgsIbgsKbgsL9f4LC44LGL4LCuX+CwruCwguCwl+Cws1/gsKzgsYHgsKdf4LCX4LGB4LCw4LGBX+CwtuCxgeCwleCxjeCwsF/gsLbgsKjgsL8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuCwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+CwtiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvgsKjgsYfgsKHgsYFdIExUIixuZXh0RGF5OiJb4LCw4LGH4LCq4LGBXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb4LCo4LC/4LCo4LGN4LCoXSBMVCIsbGFzdFdlZWs6IlvgsJfgsKRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyDgsLLgsYsiLHBhc3Q6IiVzIOCwleCxjeCwsOCwv+CwpOCwgiIsczoi4LCV4LGK4LCo4LGN4LCo4LC/IOCwleCxjeCwt+Cwo+CwvuCwsuCxgSIsc3M6IiVkIOCwuOCxhuCwleCwqOCxjeCwsuCxgSIsbToi4LCS4LCVIOCwqOCwv+CwruCwv+Cwt+CwgiIsbW06IiVkIOCwqOCwv+CwruCwv+Cwt+CwvuCwsuCxgSIsaDoi4LCS4LCVIOCwl+CwguCwnyIsaGg6IiVkIOCwl+CwguCwn+CwsuCxgSIsZDoi4LCS4LCVIOCwsOCxi+CwnOCxgSIsZGQ6IiVkIOCwsOCxi+CwnOCxgeCwsuCxgSIsTToi4LCS4LCVIOCwqOCxhuCwsiIsTU06IiVkIOCwqOCxhuCwsuCwsuCxgSIseToi4LCS4LCVIOCwuOCwguCwteCwpOCxjeCwuOCwsOCwgiIseXk6IiVkIOCwuOCwguCwteCwpOCxjeCwuOCwsOCwvuCwsuCxgSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn3gsLUvLG9yZGluYWw6IiVk4LC1IixtZXJpZGllbVBhcnNlOi/gsLDgsL7gsKTgsY3gsLDgsL984LCJ4LCm4LCv4LCCfOCwruCwp+CxjeCwr+CwvuCwueCxjeCwqOCwgnzgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIIvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSLgsLDgsL7gsKTgsY3gsLDgsL8iKXJldHVybiBlPDQ/ZTplKzEyO2Vsc2UgaWYodD09PSLgsIngsKbgsK/gsIIiKXJldHVybiBlO2Vsc2UgaWYodD09PSLgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIIiKXJldHVybiBlPj0xMD9lOmUrMTI7ZWxzZSBpZih0PT09IuCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgiIpcmV0dXJuIGUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXtpZihlPDQpcmV0dXJuIuCwsOCwvuCwpOCxjeCwsOCwvyI7ZWxzZSBpZihlPDEwKXJldHVybiLgsIngsKbgsK/gsIIiO2Vsc2UgaWYoZTwxNylyZXR1cm4i4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCIjtlbHNlIGlmKGU8MjApcmV0dXJuIuCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgiI7ZWxzZSByZXR1cm4i4LCw4LC+4LCk4LGN4LCw4LC/In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgidGV0Iix7bW9udGhzOiJKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1w7F1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmV2X01hcl9BYnJfTWFpX0p1bl9KdWxfQWdvX1NldF9PdXRfTm92X0RleiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJzX0t1YV9LaW50X1Nlc3RfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb19TZWdfVGVfS3VfS2lfU2VzX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW09oaW4gaWhhXSBMVCIsbmV4dERheToiW0FiYW4gaWhhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2loYV0gTFQiLGxhc3REYXk6IltIb3Jpc2VpayBpaGFdIExUIixsYXN0V2VlazoiZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaWhhICVzIixwYXN0OiIlcyBsaXViYSIsczoic2VndW5kdSBiYWx1biIsc3M6InNlZ3VuZHUgJWQiLG06Im1pbnV0dSBpZGEiLG1tOiJtaW51dHUgJWQiLGg6Im9yYXMgaWRhIixoaDoib3JhcyAlZCIsZDoibG9yb24gaWRhIixkZDoibG9yb24gJWQiLE06ImZ1bGFuIGlkYSIsTU06ImZ1bGFuICVkIix5OiJ0aW5hbiBpZGEiLHl5OiJ0aW5hbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1+fihlJTEwMC8xMCk9PT0xPyJ0aCI6dD09PTE/InN0Ijp0PT09Mj8ibmQiOnQ9PT0zPyJyZCI6InRoIjtyZXR1cm4gZStufSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciBpPXswOiIt0YPQvCIsMToiLdGD0LwiLDI6Ii3RjtC8IiwzOiIt0Y7QvCIsNDoiLdGD0LwiLDU6Ii3Rg9C8Iiw2OiIt0YPQvCIsNzoiLdGD0LwiLDg6Ii3Rg9C8Iiw5OiIt0YPQvCIsMTA6Ii3Rg9C8IiwxMjoiLdGD0LwiLDEzOiIt0YPQvCIsMjA6Ii3Rg9C8IiwzMDoiLdGO0LwiLDQwOiIt0YPQvCIsNTA6Ii3Rg9C8Iiw2MDoiLdGD0LwiLDcwOiIt0YPQvCIsODA6Ii3Rg9C8Iiw5MDoiLdGD0LwiLDEwMDoiLdGD0LwifSx0O2UuZGVmaW5lTG9jYWxlKCJ0ZyIse21vbnRoczp7Zm9ybWF0OiLRj9C90LLQsNGA0Lhf0YTQtdCy0YDQsNC70Lhf0LzQsNGA0YLQuF/QsNC/0YDQtdC70Lhf0LzQsNC50Lhf0LjRjtC90Lhf0LjRjtC70Lhf0LDQstCz0YPRgdGC0Lhf0YHQtdC90YLRj9Cx0YDQuF/QvtC60YLRj9Cx0YDQuF/QvdC+0Y/QsdGA0Lhf0LTQtdC60LDQsdGA0LgiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToi0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAIi5zcGxpdCgiXyIpfSxtb250aHNTaG9ydDoi0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LoiLnNwbGl0KCJfIiksd2Vla2RheXM6ItGP0LrRiNCw0L3QsdC1X9C00YPRiNCw0L3QsdC1X9GB0LXRiNCw0L3QsdC1X9GH0L7RgNGI0LDQvdCx0LVf0L/QsNC90rfRiNCw0L3QsdC1X9K30YPQvNGK0LBf0YjQsNC90LHQtSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLRj9GI0LFf0LTRiNCxX9GB0YjQsV/Rh9GI0LFf0L/RiNCxX9K30YPQvF/RiNC90LEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItGP0Yhf0LTRiF/RgdGIX9GH0Yhf0L/RiF/St9C8X9GI0LEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb0JjQvNGA06/QtyDRgdC+0LDRgtC4XSBMVCIsbmV4dERheToiW9Ck0LDRgNC00L4g0YHQvtCw0YLQuF0gTFQiLGxhc3REYXk6IlvQlNC40YDTr9C3INGB0L7QsNGC0LhdIExUIixuZXh0V2VlazoiZGRkZFvQuF0gW9Kz0LDRhNGC0LDQuCDQvtGP0L3QtNCwINGB0L7QsNGC0LhdIExUIixsYXN0V2VlazoiZGRkZFvQuF0gW9Kz0LDRhNGC0LDQuCDQs9GD0LfQsNGI0YLQsCDRgdC+0LDRgtC4XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi0LHQsNGK0LTQuCAlcyIscGFzdDoiJXMg0L/QtdGIIixzOiLRj9C60YfQsNC90LQg0YHQvtC90LjRjyIsbToi0Y/QuiDQtNCw0pvQuNKb0LAiLG1tOiIlZCDQtNCw0pvQuNKb0LAiLGg6ItGP0Log0YHQvtCw0YIiLGhoOiIlZCDRgdC+0LDRgiIsZDoi0Y/QuiDRgNOv0LciLGRkOiIlZCDRgNOv0LciLE06ItGP0Log0LzQvtKzIixNTToiJWQg0LzQvtKzIix5OiLRj9C6INGB0L7QuyIseXk6IiVkINGB0L7QuyJ9LG1lcmlkaWVtUGFyc2U6L9GI0LDQsXzRgdGD0LHSs3zRgNOv0Ld80LHQtdCz0L7Ssy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGUsdCl7aWYoZT09PTEyKWU9MDtpZih0PT09ItGI0LDQsSIpcmV0dXJuIGU8ND9lOmUrMTI7ZWxzZSBpZih0PT09ItGB0YPQsdKzIilyZXR1cm4gZTtlbHNlIGlmKHQ9PT0i0YDTr9C3IilyZXR1cm4gZT49MTE/ZTplKzEyO2Vsc2UgaWYodD09PSLQsdC10LPQvtKzIilyZXR1cm4gZSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8NClyZXR1cm4i0YjQsNCxIjtlbHNlIGlmKGU8MTEpcmV0dXJuItGB0YPQsdKzIjtlbHNlIGlmKGU8MTYpcmV0dXJuItGA06/QtyI7ZWxzZSBpZihlPDE5KXJldHVybiLQsdC10LPQvtKzIjtlbHNlIHJldHVybiLRiNCw0LEifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LSjRg9C8fNGO0LwpLyxvcmRpbmFsOmZ1bmN0aW9uKGUpe3ZhciB0PWUlMTAsbj1lPj0xMDA/MTAwOm51bGw7cmV0dXJuIGUrKGlbZV18fGlbdF18fGlbbl0pfSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJ0aCIse21vbnRoczoi4Lih4LiB4Lij4Liy4LiE4LihX+C4geC4uOC4oeC4oOC4suC4nuC4seC4meC4mOC5jF/guKHguLXguJnguLLguITguKFf4LmA4Lih4Lip4Liy4Lii4LiZX+C4nuC4pOC4qeC4oOC4suC4hOC4oV/guKHguLTguJbguLjguJnguLLguKLguJlf4LiB4Lij4LiB4LiO4Liy4LiE4LihX+C4quC4tOC4h+C4q+C4suC4hOC4oV/guIHguLHguJnguKLguLLguKLguJlf4LiV4Li44Lil4Liy4LiE4LihX+C4nuC4pOC4qOC4iOC4tOC4geC4suC4ouC4mV/guJjguLHguJnguKfguLLguITguKEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IuC4oS7guIQuX+C4gS7guJ4uX+C4oeC4tS7guIQuX+C5gOC4oS7guKIuX+C4ni7guIQuX+C4oeC4tC7guKIuX+C4gS7guIQuX+C4qi7guIQuX+C4gS7guKIuX+C4lS7guIQuX+C4ni7guKIuX+C4mC7guIQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoi4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4quC4muC4lOC4tV/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuC4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKpf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi4Lit4LiyLl/guIguX+C4rS5f4LieLl/guJ7guKQuX+C4qC5f4LiqLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tIixMTExMOiLguKfguLHguJlkZGRk4LiX4Li14LmIIEQgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tIn0sbWVyaWRpZW1QYXJzZTov4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHfOC4q+C4peC4seC4h+C5gOC4l+C4teC5iOC4ouC4hy8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSLguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcifSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwxMilyZXR1cm4i4LiB4LmI4Lit4LiZ4LmA4LiX4Li14LmI4Lii4LiHIjtlbHNlIHJldHVybiLguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcifSxjYWxlbmRhcjp7c2FtZURheToiW+C4p+C4seC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUIixuZXh0RGF5OiJb4Lie4Lij4Li44LmI4LiH4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQiLG5leHRXZWVrOiJkZGRkW+C4q+C4meC5ieC4siDguYDguKfguKXguLJdIExUIixsYXN0RGF5OiJb4LmA4Lih4Li34LmI4Lit4Lin4Liy4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQiLGxhc3RXZWVrOiJb4Lin4Lix4LiZXWRkZGRb4LiX4Li14LmI4LmB4Lil4LmJ4LinIOC5gOC4p+C4peC4sl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IuC4reC4teC4gSAlcyIscGFzdDoiJXPguJfguLXguYjguYHguKXguYnguKciLHM6IuC5hOC4oeC5iOC4geC4teC5iOC4p+C4tOC4meC4suC4l+C4tSIsc3M6IiVkIOC4p+C4tOC4meC4suC4l+C4tSIsbToiMSDguJnguLLguJfguLUiLG1tOiIlZCDguJnguLLguJfguLUiLGg6IjEg4LiK4Lix4LmI4Lin4LmC4Lih4LiHIixoaDoiJWQg4LiK4Lix4LmI4Lin4LmC4Lih4LiHIixkOiIxIOC4p+C4seC4mSIsZGQ6IiVkIOC4p+C4seC4mSIsdzoiMSDguKrguLHguJvguJTguLLguKvguYwiLHd3OiIlZCDguKrguLHguJvguJTguLLguKvguYwiLE06IjEg4LmA4LiU4Li34Lit4LiZIixNTToiJWQg4LmA4LiU4Li34Lit4LiZIix5OiIxIOC4m+C4tSIseXk6IiVkIOC4m+C4tSJ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgYT17MToiJ2luamkiLDU6IidpbmppIiw4OiInaW5qaSIsNzA6IidpbmppIiw4MDoiJ2luamkiLDI6IiduamkiLDc6IiduamkiLDIwOiInbmppIiw1MDoiJ25qaSIsMzoiJ8O8bmppIiw0OiInw7xuamkiLDEwMDoiJ8O8bmppIiw2OiInbmp5Iiw5OiIndW5qeSIsMTA6Iid1bmp5IiwzMDoiJ3VuankiLDYwOiIneW5qeSIsOTA6Iid5bmp5In0sdDtlLmRlZmluZUxvY2FsZSgidGsiLHttb250aHM6IsOdYW53YXJfRmV3cmFsX01hcnRfQXByZWxfTWHDvV9Jw711bl9Jw711bF9Bd2d1c3RfU2VudMO9YWJyX09rdMO9YWJyX05vw71hYnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLDnWFuX0Zld19NYXJfQXByX01hw71fScO9bl9Jw71sX0F3Z19TZW5fT2t0X05vw71fRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLDnWVrxZ9lbmJlX0R1xZ9lbmJlX1NpxZ9lbmJlX8OHYXLFn2VuYmVfUGVuxZ9lbmJlX0FubmFfxZ5lbmJlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IsOdZWtfRHXFn19TacWfX8OHYXJfUGVuX0Fubl/FnmVuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLDnWtfRMWfX1PFn1/Dh3JfUG5fQW5fxZ5uIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z8O8biBzYWdhdF0gTFQiLG5leHREYXk6IltlcnRpciBzYWdhdF0gTFQiLG5leHRXZWVrOiJbaW5kaWtpXSBkZGRkIFtzYWdhdF0gTFQiLGxhc3REYXk6Iltkw7zDvW5dIExUIixsYXN0V2VlazoiW2dlw6dlbl0gZGRkZCBbc2FnYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBzb8WIIixwYXN0OiIlcyDDtsWIIixzOiJiaXJuw6TDp2Ugc2VrdW50IixtOiJiaXIgbWludXQiLG1tOiIlZCBtaW51dCIsaDoiYmlyIHNhZ2F0IixoaDoiJWQgc2FnYXQiLGQ6ImJpciBnw7xuIixkZDoiJWQgZ8O8biIsTToiYmlyIGHDvSIsTU06IiVkIGHDvSIseToiYmlyIMO9eWwiLHl5OiIlZCDDvXlsIn0sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIGU7ZGVmYXVsdDppZihlPT09MClyZXR1cm4gZSsiJ3VuankiO3ZhciBuPWUlMTAsaT1lJTEwMC1uLHI9ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyhhW25dfHxhW2ldfHxhW3JdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZS5kZWZpbmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixoaDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgYT0icGFnaF93YeKAmV9jaGHigJlfd2VqX2xvU192YWdoX2phdl9Tb2NoX2Nob3JnaF9IdXQiLnNwbGl0KCJfIiksdDtmdW5jdGlvbiBuKGUpe3ZhciB0PWU7dD1lLmluZGV4T2YoImphaiIpIT09LTE/dC5zbGljZSgwLC0zKSsibGVTIjplLmluZGV4T2YoImphciIpIT09LTE/dC5zbGljZSgwLC0zKSsid2FRIjplLmluZGV4T2YoIkRJUyIpIT09LTE/dC5zbGljZSgwLC0zKSsibmVtIjp0KyIgcElxIjtyZXR1cm4gdH1mdW5jdGlvbiBpKGUpe3ZhciB0PWU7dD1lLmluZGV4T2YoImphaiIpIT09LTE/dC5zbGljZSgwLC0zKSsiSHXigJkiOmUuaW5kZXhPZigiamFyIikhPT0tMT90LnNsaWNlKDAsLTMpKyJ3ZW4iOmUuaW5kZXhPZigiRElTIikhPT0tMT90LnNsaWNlKDAsLTMpKyJiZW4iOnQrIiByZXQiO3JldHVybiB0fWZ1bmN0aW9uIHIoZSx0LG4saSl7dmFyIHI9cyhlKTtzd2l0Y2gobil7Y2FzZSJzcyI6cmV0dXJuIHIrIiBsdXAiO2Nhc2UibW0iOnJldHVybiByKyIgdHVwIjtjYXNlImhoIjpyZXR1cm4gcisiIHJlcCI7Y2FzZSJkZCI6cmV0dXJuIHIrIiBqYWoiO2Nhc2UiTU0iOnJldHVybiByKyIgamFyIjtjYXNlInl5IjpyZXR1cm4gcisiIERJUyJ9fWZ1bmN0aW9uIHMoZSl7dmFyIHQ9TWF0aC5mbG9vcihlJTFlMy8xMDApLG49TWF0aC5mbG9vcihlJTEwMC8xMCksaT1lJTEwLHI9IiI7aWYodD4wKXIrPWFbdF0rInZhdGxoIjtpZihuPjApcis9KHIhPT0iIj8iICI6IiIpK2Fbbl0rIm1hSCI7aWYoaT4wKXIrPShyIT09IiI/IiAiOiIiKSthW2ldO3JldHVybiByPT09IiI/InBhZ2giOnJ9ZS5kZWZpbmVMb2NhbGUoInRsaCIse21vbnRoczoidGVyYeKAmSBqYXIgd2HigJlfdGVyYeKAmSBqYXIgY2hh4oCZX3RlcmHigJkgamFyIHdlal90ZXJh4oCZIGphciBsb1NfdGVyYeKAmSBqYXIgdmFnaF90ZXJh4oCZIGphciBqYXZfdGVyYeKAmSBqYXIgU29jaF90ZXJh4oCZIGphciBjaG9yZ2hfdGVyYeKAmSBqYXIgSHV0X3RlcmHigJkgamFyIHdh4oCZbWFIX3RlcmHigJkgamFyIHdh4oCZbWFIIHdh4oCZX3RlcmHigJkgamFyIHdh4oCZbWFIIGNoYeKAmSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFyIHdh4oCZX2phciBjaGHigJlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YeKAmW1hSF9qYXIgd2HigJltYUggd2HigJlfamFyIHdh4oCZbWFIIGNoYeKAmSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Imxvam1JdGphal9EYVNqYWpfcG92amFqX2doSXRsaGphal9sb2doamFqX2J1cWphal9naEluamFqIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEYUhqYWpdIExUIixuZXh0RGF5OiJbd2HigJlsZVNdIExUIixuZXh0V2VlazoiTExMIixsYXN0RGF5OiJbd2HigJlIdeKAmV0gTFQiLGxhc3RXZWVrOiJMTEwiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6bixwYXN0OmksczoicHVTIGx1cCIsc3M6cixtOiJ3YeKAmSB0dXAiLG1tOnIsaDoid2HigJkgcmVwIixoaDpyLGQ6Indh4oCZIGphaiIsZGQ6cixNOiJ3YeKAmSBqYXIiLE1NOnIseToid2HigJkgRElTIix5eTpyfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgYT17MToiJ2luY2kiLDU6IidpbmNpIiw4OiInaW5jaSIsNzA6IidpbmNpIiw4MDoiJ2luY2kiLDI6IiduY2kiLDc6IiduY2kiLDIwOiInbmNpIiw1MDoiJ25jaSIsMzoiJ8O8bmPDvCIsNDoiJ8O8bmPDvCIsMTAwOiInw7xuY8O8Iiw2OiInbmPEsSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ8SxbmPEsSIsOTA6IifEsW5jxLEifSx0O2UuZGVmaW5lTG9jYWxlKCJ0ciIse21vbnRoczoiT2Nha1/FnnViYXRfTWFydF9OaXNhbl9NYXnEsXNfSGF6aXJhbl9UZW1tdXpfQcSfdXN0b3NfRXlsw7xsX0VraW1fS2FzxLFtX0FyYWzEsWsiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ik9jYV/FnnViX01hcl9OaXNfTWF5X0hhel9UZW1fQcSfdV9FeWxfRWtpX0thc19BcmEiLnNwbGl0KCJfIiksd2Vla2RheXM6IlBhemFyX1BhemFydGVzaV9TYWzEsV/Dh2FyxZ9hbWJhX1BlcsWfZW1iZV9DdW1hX0N1bWFydGVzaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQYXpfUHp0X1NhbF/Dh2FyX1Blcl9DdW1fQ210Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QiLnNwbGl0KCJfIiksbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIG4/IsO2w7YiOiLDlsOWIjtlbHNlIHJldHVybiBuPyLDtnMiOiLDllMifSxtZXJpZGllbVBhcnNlOi/DtsO2fMOWw5Z8w7ZzfMOWUy8saXNQTTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSLDtnMifHxlPT09IsOWUyJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2J1Z8O8biBzYWF0XSBMVCIsbmV4dERheToiW3lhcsSxbiBzYWF0XSBMVCIsbmV4dFdlZWs6IltnZWxlY2VrXSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2TDvG5dIExUIixsYXN0V2VlazoiW2dlw6dlbl0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyDDtm5jZSIsczoiYmlya2HDpyBzYW5peWUiLHNzOiIlZCBzYW5peWUiLG06ImJpciBkYWtpa2EiLG1tOiIlZCBkYWtpa2EiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGfDvG4iLGRkOiIlZCBnw7xuIix3OiJiaXIgaGFmdGEiLHd3OiIlZCBoYWZ0YSIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciB5xLFsIix5eToiJWQgecSxbCJ9LG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRG8iOmNhc2UiREQiOnJldHVybiBlO2RlZmF1bHQ6aWYoZT09PTApcmV0dXJuIGUrIifEsW5jxLEiO3ZhciBuPWUlMTAsaT1lJTEwMC1uLHI9ZT49MTAwPzEwMDpudWxsO3JldHVybiBlKyhhW25dfHxhW2ldfHxhW3JdKX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KdmFyIHQ7ZnVuY3Rpb24gbihlLHQsbixpKXt2YXIgcj17czpbInZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNzOltlKyIgc2VjdW5kcyIsIiIrZSsiIHNlY3VuZHMiXSxtOlsiJ24gbcOtdXQiLCInaWVucyBtw611dCJdLG1tOltlKyIgbcOtdXRzIiwiIitlKyIgbcOtdXRzIl0saDpbIiduIMO+b3JhIiwiJ2llbnNhIMO+b3JhIl0saGg6W2UrIiDDvm9yYXMiLCIiK2UrIiDDvm9yYXMiXSxkOlsiJ24geml1YSIsIidpZW5zYSB6aXVhIl0sZGQ6W2UrIiB6aXVhcyIsIiIrZSsiIHppdWFzIl0sTTpbIiduIG1lcyIsIidpZW5zIG1lcyJdLE1NOltlKyIgbWVzZW4iLCIiK2UrIiBtZXNlbiJdLHk6WyInbiBhciIsIidpZW5zIGFyIl0seXk6W2UrIiBhcnMiLCIiK2UrIiBhcnMiXX07cmV0dXJuIGk/cltuXVswXTp0P3Jbbl1bMF06cltuXVsxXX1lLmRlZmluZUxvY2FsZSgidHpsIix7bW9udGhzOiJKYW51YXJfRmV2cmFnbGhfTWFyw6dfQXZyw691X01haV9Hw7xuX0p1bGlhX0d1c2NodF9TZXRlbXZhcl9MaXN0b3DDpHRzX05vZW12YXJfWmVjZW12YXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0F2cl9NYWlfR8O8bl9KdWxfR3VzX1NldF9MaXNfTm9lX1plYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU8O6bGFkaV9Mw7puZcOnaV9NYWl0emlfTcOhcmN1cmlfWGjDumFkaV9WacOpbmVyw6dpX1PDoXR1cmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU8O6bF9Mw7puX01haV9Nw6FyX1how7pfVmnDqV9Tw6F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTw7pfTMO6X01hX03DoV9YaF9WaV9Tw6EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gW2RhbGxhc10gWVlZWSIsTExMOiJELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0iLExMTEw6ImRkZGQsIFtsaV0gRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZFwnb3xkXCdhL2ksaXNQTTpmdW5jdGlvbihlKXtyZXR1cm4iZCdvIj09PWUudG9Mb3dlckNhc2UoKX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU+MTEpcmV0dXJuIG4/ImQnbyI6IkQnTyI7ZWxzZSByZXR1cm4gbj8iZCdhIjoiRCdBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltveGhpIMOgXSBMVCIsbmV4dERheToiW2RlbcOgIMOgXSBMVCIsbmV4dFdlZWs6ImRkZGQgW8OgXSBMVCIsbGFzdERheToiW2llaXJpIMOgXSBMVCIsbGFzdFdlZWs6Iltzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvc3ByZWkgJXMiLHBhc3Q6ImphJXMiLHM6bixzczpuLG06bixtbTpuLGg6bixoaDpuLGQ6bixkZDpuLE06bixNTTpuLHk6bix5eTpufSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgidHptIix7bW9udGhzOiLitYnitY/itY/itLDitaLitZRf4rSx4rWV4rSw4rWi4rWVX+K1juK0sOK1leK1ml/itYnitLHitZTitYnitZRf4rWO4rSw4rWi4rWi4rWTX+K1ouK1k+K1j+K1ouK1k1/itaLitZPitY3itaLitZPitaNf4rWW4rWT4rWb4rWcX+K1m+K1k+K1nOK0sOK1j+K0seK1ieK1lF/itL3itZ/itZPitLHitZVf4rWP4rWT4rWh4rSw4rWP4rSx4rWJ4rWUX+K0t+K1k+K1iuK1j+K0seK1ieK1lCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQiLnNwbGl0KCJfIiksd2Vla2RheXM6IuK0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiLitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IuK0sOK1meK0sOK1juK0sOK1mV/itLDitaLitY/itLDitZlf4rSw4rWZ4rWJ4rWP4rSw4rWZX+K0sOK0veK1lOK0sOK1mV/itLDitL3itaHitLDitZlf4rSw4rWZ4rWJ4rWO4rWh4rSw4rWZX+K0sOK1meK1ieK0ueK1ouK0sOK1mSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW+K0sOK1meK0t+K1hSDitLRdIExUIixuZXh0RGF5OiJb4rSw4rWZ4rS94rSwIOK0tF0gTFQiLG5leHRXZWVrOiJkZGRkIFvitLRdIExUIixsYXN0RGF5OiJb4rSw4rWa4rSw4rWP4rWcIOK0tF0gTFQiLGxhc3RXZWVrOiJkZGRkIFvitLRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLitLfitLDitLfitYUg4rWZIOK1ouK0sOK1jyAlcyIscGFzdDoi4rWi4rSw4rWPICVzIixzOiLitYnitY7itYnitL0iLHNzOiIlZCDitYnitY7itYnitL0iLG06IuK1juK1ieK1j+K1k+K0uiIsbW06IiVkIOK1juK1ieK1j+K1k+K0uiIsaDoi4rWZ4rSw4rWE4rSwIixoaDoiJWQg4rWc4rSw4rWZ4rWZ4rSw4rWE4rWJ4rWPIixkOiLitLDitZnitZkiLGRkOiIlZCBv4rWZ4rWZ4rSw4rWPIixNOiLitLDitaJv4rWT4rWUIixNTToiJWQg4rWJ4rWi4rWi4rWJ4rWU4rWPIix5OiLitLDitZnitLPitLDitZkiLHl5OiIlZCDitYnitZnitLPitLDitZnitY8ifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgidHptLWxhdG4iLHttb250aHM6ImlubmF5cl9icsukYXlyy6RfbWFyy6Rzy6RfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X8mjd8WhdF/FoXd0YW5iaXJfa3TLpHdicsukX253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImlubmF5cl9icsukYXlyy6RfbWFyy6Rzy6RfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X8mjd8WhdF/FoXd0YW5iaXJfa3TLpHdicsukX253d2FuYmlyX2R3am5iaXIiLnNwbGl0KCJfIiksd2Vla2RheXM6ImFzYW1hc19heW5hc19hc2luYXNfYWtyYXNfYWt3YXNfYXNpbXdhc19hc2nhuI15YXMiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2FzZGtoIGddIExUIixuZXh0RGF5OiJbYXNrYSBnXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ddIExUIixsYXN0RGF5OiJbYXNzYW50IGddIExUIixsYXN0V2VlazoiZGRkZCBbZ10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhZGtoIHMgeWFuICVzIixwYXN0OiJ5YW4gJXMiLHM6ImltaWsiLHNzOiIlZCBpbWlrIixtOiJtaW514biNIixtbToiJWQgbWludeG4jSIsaDoic2HJm2EiLGhoOiIlZCB0YXNzYcmbaW4iLGQ6ImFzcyIsZGQ6IiVkIG9zc2FuIixNOiJheW93ciIsTU06IiVkIGl5eWlybiIseToiYXNnYXMiLHl5OiIlZCBpc2dhc24ifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgidWctY24iLHttb250aHM6ItmK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiLZitin2Ybbi9in2LFf2YHbkNuL2LHYp9mEX9mF2KfYsdiqX9im2KfZvtix25DZhF/Zhdin2Ypf2KbZidmK24fZhl/YptmJ2Yrbh9mEX9im2Kfbi9i624fYs9iqX9iz25DZhtiq25XYqNmJ2LFf2KbbhtmD2Krbldio2YnYsV/ZhtmI2YrYp9io2YnYsV/Yr9uQ2YPYp9io2YnYsSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi2YrbldmD2LTbldmG2KjblV/Yr9uI2LTbldmG2KjblV/Ys9uV2YrYtNuV2YbYqNuVX9qG2KfYsdi025XZhtio25Vf2b7bldmK2LTbldmG2KjblV/YrNuI2YXblV/YtNuV2YbYqNuVIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItmK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ItmK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVkt2YrZidmE2YlNLdim2KfZitmG2YnarUQt2YPbiNmG2YkiLExMTDoiWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tIixMTExMOiJkZGRk2IwgWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTov2YrbkNix2YnZhSDZg9uQ2obblXzYs9uV2r7bldixfNqG24jYtNiq2YnZhiDYqNuH2LHbh9mGfNqG24jYtHzahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhnzZg9uV2oYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihlLHQpe2lmKGU9PT0xMillPTA7aWYodD09PSLZituQ2LHZidmFINmD25DahtuVInx8dD09PSLYs9uV2r7bldixInx8dD09PSLahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhiIpcmV0dXJuIGU7ZWxzZSBpZih0PT09ItqG24jYtNiq2YnZhiDZg9uQ2YrZidmGInx8dD09PSLZg9uV2oYiKXJldHVybiBlKzEyO2Vsc2UgcmV0dXJuIGU+PTExP2U6ZSsxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUqMTAwK3Q7aWYoaTw2MDApcmV0dXJuItmK25DYsdmJ2YUg2YPbkNqG25UiO2Vsc2UgaWYoaTw5MDApcmV0dXJuItiz25XavtuV2LEiO2Vsc2UgaWYoaTwxMTMwKXJldHVybiLahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhiI7ZWxzZSBpZihpPDEyMzApcmV0dXJuItqG24jYtCI7ZWxzZSBpZihpPDE4MDApcmV0dXJuItqG24jYtNiq2YnZhiDZg9uQ2YrZidmGIjtlbHNlIHJldHVybiLZg9uV2oYifSxjYWxlbmRhcjp7c2FtZURheToiW9io24jar9uI2YYg2LPYp9im25XYql0gTFQiLG5leHREYXk6IlvYptuV2KrblSDYs9in2KbbldiqXSBMVCIsbmV4dFdlZWs6IlvZg9uQ2YTbldix2YPZiV0gZGRkZCBb2LPYp9im25XYql0gTFQiLGxhc3REYXk6IlvYqtuG2YbbiNqv24jZhl0gTFQiLGxhc3RXZWVrOiJb2KbYp9mE2K/ZidmG2YLZiV0gZGRkZCBb2LPYp9im25XYql0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzINmD25DZitmJ2YYiLHBhc3Q6IiVzINio24fYsduH2YYiLHM6ItmG25XahtqG25Ug2LPbkNmD2YjZhtiqIixzczoiJWQg2LPbkNmD2YjZhtiqIixtOiLYqNmJ2LEg2YXZidmG24fYqiIsbW06IiVkINmF2YnZhtuH2KoiLGg6Itio2YnYsSDYs9in2KbbldiqIixoaDoiJWQg2LPYp9im25XYqiIsZDoi2KjZidixINmD24jZhiIsZGQ6IiVkINmD24jZhiIsTToi2KjZidixINim2KfZiiIsTU06IiVkINim2KfZiiIseToi2KjZidixINmK2YnZhCIseXk6IiVkINmK2YnZhCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oLdmD24jZhtmJfC3Yptin2Yp8Ldq+25XZvtiq25UpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGUrIi3Zg9uI2YbZiSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyIt2r7bldm+2KrblSI7ZGVmYXVsdDpyZXR1cm4gZX19LHByZXBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL9iML2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC8sL2csItiMIil9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShuKDApKX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7Ci8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb24KZnVuY3Rpb24gcihlLHQpe3ZhciBuPWUuc3BsaXQoIl8iKTtyZXR1cm4gdCUxMD09PTEmJnQlMTAwIT09MTE/blswXTp0JTEwPj0yJiZ0JTEwPD00JiYodCUxMDA8MTB8fHQlMTAwPj0yMCk/blsxXTpuWzJdfWZ1bmN0aW9uIHQoZSx0LG4pe3ZhciBpPXtzczp0PyLRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQiOiLRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTQuF/RgdC10LrRg9C90LQiLG1tOnQ/ItGF0LLQuNC70LjQvdCwX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvSI6ItGF0LLQuNC70LjQvdGDX9GF0LLQuNC70LjQvdC4X9GF0LLQuNC70LjQvSIsaGg6dD8i0LPQvtC00LjQvdCwX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9Ijoi0LPQvtC00LjQvdGDX9Cz0L7QtNC40L3QuF/Qs9C+0LTQuNC9IixkZDoi0LTQtdC90Yxf0LTQvdGWX9C00L3RltCyIixNTToi0LzRltGB0Y/RhtGMX9C80ZbRgdGP0YbRll/QvNGW0YHRj9GG0ZbQsiIseXk6ItGA0ZbQul/RgNC+0LrQuF/RgNC+0LrRltCyIn07aWYobj09PSJtIilyZXR1cm4gdD8i0YXQstC40LvQuNC90LAiOiLRhdCy0LjQu9C40L3RgyI7ZWxzZSBpZihuPT09ImgiKXJldHVybiB0PyLQs9C+0LTQuNC90LAiOiLQs9C+0LTQuNC90YMiO2Vsc2UgcmV0dXJuIGUrIiAiK3IoaVtuXSwrZSl9ZnVuY3Rpb24gbihlLHQpe3ZhciBuPXtub21pbmF0aXZlOiLQvdC10LTRltC70Y9f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNCwX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRj1/RgdGD0LHQvtGC0LAiLnNwbGl0KCJfIiksYWNjdXNhdGl2ZToi0L3QtdC00ZbQu9GOX9C/0L7QvdC10LTRltC70L7Qul/QstGW0LLRgtC+0YDQvtC6X9GB0LXRgNC10LTRg1/Rh9C10YLQstC10YBf0L/igJnRj9GC0L3QuNGG0Y5f0YHRg9Cx0L7RgtGDIi5zcGxpdCgiXyIpLGdlbml0aXZlOiLQvdC10LTRltC70ZZf0L/QvtC90LXQtNGW0LvQutCwX9Cy0ZbQstGC0L7RgNC60LBf0YHQtdGA0LXQtNC4X9GH0LXRgtCy0LXRgNCz0LBf0L/igJnRj9GC0L3QuNGG0ZZf0YHRg9Cx0L7RgtC4Ii5zcGxpdCgiXyIpfSxpO2lmKGU9PT10cnVlKXJldHVybiBuWyJub21pbmF0aXZlIl0uc2xpY2UoMSw3KS5jb25jYXQoblsibm9taW5hdGl2ZSJdLnNsaWNlKDAsMSkpO2lmKCFlKXJldHVybiBuWyJub21pbmF0aXZlIl07aT0vKFxbW9CS0LLQo9GDXVxdKSA/ZGRkZC8udGVzdCh0KT8iYWNjdXNhdGl2ZSI6L1xbPyg/OtC80LjQvdGD0LvQvtGXfNC90LDRgdGC0YPQv9C90L7Rlyk/ID9cXSA/ZGRkZC8udGVzdCh0KT8iZ2VuaXRpdmUiOiJub21pbmF0aXZlIjtyZXR1cm4gbltpXVtlLmRheSgpXX1mdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKyLQviIrKHRoaXMuaG91cnMoKT09PTExPyLQsSI6IiIpKyJdIExUIn19dmFyIGE7ZS5kZWZpbmVMb2NhbGUoInVrIix7bW9udGhzOntmb3JtYXQ6ItGB0ZbRh9C90Y9f0LvRjtGC0L7Qs9C+X9Cx0LXRgNC10LfQvdGPX9C60LLRltGC0L3Rj1/RgtGA0LDQstC90Y9f0YfQtdGA0LLQvdGPX9C70LjQv9C90Y9f0YHQtdGA0L/QvdGPX9Cy0LXRgNC10YHQvdGPX9C20L7QstGC0L3Rj1/Qu9C40YHRgtC+0L/QsNC00LBf0LPRgNGD0LTQvdGPIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6ItGB0ZbRh9C10L3RjF/Qu9GO0YLQuNC5X9Cx0LXRgNC10LfQtdC90Yxf0LrQstGW0YLQtdC90Yxf0YLRgNCw0LLQtdC90Yxf0YfQtdGA0LLQtdC90Yxf0LvQuNC/0LXQvdGMX9GB0LXRgNC/0LXQvdGMX9Cy0LXRgNC10YHQtdC90Yxf0LbQvtCy0YLQtdC90Yxf0LvQuNGB0YLQvtC/0LDQtF/Qs9GA0YPQtNC10L3RjCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6ItGB0ZbRh1/Qu9GO0YJf0LHQtdGAX9C60LLRltGCX9GC0YDQsNCyX9GH0LXRgNCyX9C70LjQv1/RgdC10YDQv1/QstC10YBf0LbQvtCy0YJf0LvQuNGB0YJf0LPRgNGD0LQiLnNwbGl0KCJfIiksd2Vla2RheXM6bix3ZWVrZGF5c1Nob3J0OiLQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSDRgC4iLExMTDoiRCBNTU1NIFlZWVkg0YAuLCBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmkoIlvQodGM0L7Qs9C+0LTQvdGWICIpLG5leHREYXk6aSgiW9CX0LDQstGC0YDQsCAiKSxsYXN0RGF5OmkoIlvQktGH0L7RgNCwICIpLG5leHRXZWVrOmkoIlvQo10gZGRkZCBbIiksbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiBpKCJb0JzQuNC90YPQu9C+0ZddIGRkZGQgWyIpLmNhbGwodGhpcyk7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIGkoIlvQnNC40L3Rg9C70L7Qs9C+XSBkZGRkIFsiKS5jYWxsKHRoaXMpfX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi0LfQsCAlcyIscGFzdDoiJXMg0YLQvtC80YMiLHM6ItC00LXQutGW0LvRjNC60LAg0YHQtdC60YPQvdC0Iixzczp0LG06dCxtbTp0LGg6ItCz0L7QtNC40L3RgyIsaGg6dCxkOiLQtNC10L3RjCIsZGQ6dCxNOiLQvNGW0YHRj9GG0YwiLE1NOnQseToi0YDRltC6Iix5eTp0fSxtZXJpZGllbVBhcnNlOi/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL14o0LTQvdGPfNCy0LXRh9C+0YDQsCkkLy50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTw0KXJldHVybiLQvdC+0YfRliI7ZWxzZSBpZihlPDEyKXJldHVybiLRgNCw0L3QutGDIjtlbHNlIGlmKGU8MTcpcmV0dXJuItC00L3RjyI7ZWxzZSByZXR1cm4i0LLQtdGH0L7RgNCwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o0Ll80LPQvikvLG9yZGluYWw6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIi3QuSI7Y2FzZSJEIjpyZXR1cm4gZSsiLdCz0L4iO2RlZmF1bHQ6cmV0dXJuIGV9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0PVsi2KzZhtmI2LHbjCIsItmB2LHZiNix24wiLCLZhdin2LHahiIsItin2b7YsduM2YQiLCLZhdim24wiLCLYrNmI2YYiLCLYrNmI2YTYp9im24wiLCLYp9qv2LPYqiIsItiz2KrZhdio2LEiLCLYp9qp2KrZiNio2LEiLCLZhtmI2YXYqNixIiwi2K/Ys9mF2KjYsSJdLG49WyLYp9iq2YjYp9ixIiwi2b7bjNixIiwi2YXZhtqv2YQiLCLYqNiv2r4iLCLYrNmF2LnYsdin2KoiLCLYrNmF2LnbgSIsItuB2YHYqtuBIl0saTtlLmRlZmluZUxvY2FsZSgidXIiLHttb250aHM6dCxtb250aHNTaG9ydDp0LHdlZWtkYXlzOm4sd2Vla2RheXNTaG9ydDpuLHdlZWtkYXlzTWluOm4sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi/Ytdio2K182LTYp9mFLyxpc1BNOmZ1bmN0aW9uKGUpe3JldHVybiLYtNin2YUiPT09ZX0sbWVyaWRpZW06ZnVuY3Rpb24oZSx0LG4pe2lmKGU8MTIpcmV0dXJuIti12KjYrSI7cmV0dXJuIti02KfZhSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb2KLYrCDYqNmI2YLYql0gTFQiLG5leHREYXk6IlvaqdmEINio2YjZgtiqXSBMVCIsbmV4dFdlZWs6ImRkZGQgW9io2YjZgtiqXSBMVCIsbGFzdERheToiW9qv2LDYtNiq24Eg2LHZiNiyINio2YjZgtiqXSBMVCIsbGFzdFdlZWs6Ilvar9iw2LTYqtuBXSBkZGRkIFvYqNmI2YLYql0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzINio2LnYryIscGFzdDoiJXMg2YLYqNmEIixzOiLahtmG2K8g2LPbjNqp2YbaiCIsc3M6IiVkINiz24zaqdmG2ogiLG06Itin24zaqSDZhdmG2bkiLG1tOiIlZCDZhdmG2bkiLGg6Itin24zaqSDar9q+2YbZuduBIixoaDoiJWQg2q/avtmG2bnbkiIsZDoi2KfbjNqpINiv2YYiLGRkOiIlZCDYr9mGIixNOiLYp9uM2qkg2YXYp9uBIixNTToiJWQg2YXYp9uBIix5OiLYp9uM2qkg2LPYp9mEIix5eToiJWQg2LPYp9mEIn0scHJlcGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgv2IwvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoLywvZywi2IwiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgidXoiLHttb250aHM6ItGP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LoiLnNwbGl0KCJfIiksd2Vla2RheXM6ItCv0LrRiNCw0L3QsdCwX9CU0YPRiNCw0L3QsdCwX9Ch0LXRiNCw0L3QsdCwX9Cn0L7RgNGI0LDQvdCx0LBf0J/QsNC50YjQsNC90LHQsF/QltGD0LzQsF/QqNCw0L3QsdCwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ItCv0LrRiF/QlNGD0Yhf0KHQtdGIX9Cn0L7RgF/Qn9Cw0Llf0JbRg9C8X9Co0LDQvSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi0K/Qul/QlNGDX9Ch0LVf0KfQvl/Qn9CwX9CW0YNf0KjQsCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IlvQkdGD0LPRg9C9INGB0L7QsNGCXSBMVCBb0LTQsF0iLG5leHREYXk6IlvQrdGA0YLQsNCz0LBdIExUIFvQtNCwXSIsbmV4dFdlZWs6ImRkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0iLGxhc3REYXk6IlvQmtC10YfQsCDRgdC+0LDRgl0gTFQgW9C00LBdIixsYXN0V2VlazoiW9Cj0YLQs9Cw0L1dIGRkZGQgW9C60YPQvdC4INGB0L7QsNGCXSBMVCBb0LTQsF0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ItCv0LrQuNC9ICVzINC40YfQuNC00LAiLHBhc3Q6ItCR0LjRgCDQvdC10YfQsCAlcyDQvtC70LTQuNC9IixzOiLRhNGD0YDRgdCw0YIiLHNzOiIlZCDRhNGD0YDRgdCw0YIiLG06ItCx0LjRgCDQtNCw0LrQuNC60LAiLG1tOiIlZCDQtNCw0LrQuNC60LAiLGg6ItCx0LjRgCDRgdC+0LDRgiIsaGg6IiVkINGB0L7QsNGCIixkOiLQsdC40YAg0LrRg9C9IixkZDoiJWQg0LrRg9C9IixNOiLQsdC40YAg0L7QuSIsTU06IiVkINC+0LkiLHk6ItCx0LjRgCDQudC40LsiLHl5OiIlZCDQudC40LsifSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJ1ei1sYXRuIix7bW9udGhzOiJZYW52YXJfRmV2cmFsX01hcnRfQXByZWxfTWF5X0l5dW5fSXl1bF9Bdmd1c3RfU2VudGFicl9Pa3RhYnJfTm95YWJyX0Rla2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0RlayIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiWWFrc2hhbmJhX0R1c2hhbmJhX1Nlc2hhbmJhX0Nob3JzaGFuYmFfUGF5c2hhbmJhX0p1bWFfU2hhbmJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IllhX0R1X1NlX0Nob19QYV9KdV9TaGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJEIE1NTU0gWVlZWSwgZGRkZCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQnVndW4gc29hdF0gTFQgW2RhXSIsbmV4dERheToiW0VydGFnYV0gTFQgW2RhXSIsbmV4dFdlZWs6ImRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsbGFzdERheToiW0tlY2hhIHNvYXRdIExUIFtkYV0iLGxhc3RXZWVrOiJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IllhcWluICVzIGljaGlkYSIscGFzdDoiQmlyIG5lY2hhICVzIG9sZGluIixzOiJzb25peWEiLHNzOiIlZCBzb25peWEiLG06ImJpciBkYXFpcWEiLG1tOiIlZCBkYXFpcWEiLGg6ImJpciBzb2F0IixoaDoiJWQgc29hdCIsZDoiYmlyIGt1biIsZGQ6IiVkIGt1biIsTToiYmlyIG95IixNTToiJWQgb3kiLHk6ImJpciB5aWwiLHl5OiIlZCB5aWwifSx3ZWVrOntkb3c6MSxkb3k6N319KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJ2aSIse21vbnRoczoidGjDoW5nIDFfdGjDoW5nIDJfdGjDoW5nIDNfdGjDoW5nIDRfdGjDoW5nIDVfdGjDoW5nIDZfdGjDoW5nIDdfdGjDoW5nIDhfdGjDoW5nIDlfdGjDoW5nIDEwX3Row6FuZyAxMV90aMOhbmcgMTIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlRoZyAwMV9UaGcgMDJfVGhnIDAzX1RoZyAwNF9UaGcgMDVfVGhnIDA2X1RoZyAwN19UaGcgMDhfVGhnIDA5X1RoZyAxMF9UaGcgMTFfVGhnIDEyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6dHJ1ZSx3ZWVrZGF5czoiY2jhu6cgbmjhuq10X3Ro4bupIGhhaV90aOG7qSBiYV90aOG7qSB0xrBfdGjhu6kgbsSDbV90aOG7qSBzw6F1X3Ro4bupIGLhuqN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxtZXJpZGllbVBhcnNlOi9zYXxjaC9pLGlzUE06ZnVuY3Rpb24oZSl7cmV0dXJuL15jaCQvaS50ZXN0KGUpfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7aWYoZTwxMilyZXR1cm4gbj8ic2EiOiJTQSI7ZWxzZSByZXR1cm4gbj8iY2giOiJDSCJ9LGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW27Eg21dIFlZWVkiLExMTDoiRCBNTU1NIFtuxINtXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0iLGw6IkREL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIw7RtIG5heSBsw7pjXSBMVCIsbmV4dERheToiW05nw6B5IG1haSBsw7pjXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3R14bqnbiB04bubaSBsw7pjXSBMVCIsbGFzdERheToiW0jDtG0gcXVhIGzDumNdIExUIixsYXN0V2VlazoiZGRkZCBbdHXhuqduIHRyxrDhu5tjIGzDumNdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyB04bubaSIscGFzdDoiJXMgdHLGsOG7m2MiLHM6InbDoGkgZ2nDonkiLHNzOiIlZCBnacOieSIsbToibeG7mXQgcGjDunQiLG1tOiIlZCBwaMO6dCIsaDoibeG7mXQgZ2nhu50iLGhoOiIlZCBnaeG7nSIsZDoibeG7mXQgbmfDoHkiLGRkOiIlZCBuZ8OgeSIsdzoibeG7mXQgdHXhuqduIix3dzoiJWQgdHXhuqduIixNOiJt4buZdCB0aMOhbmciLE1NOiIlZCB0aMOhbmciLHk6Im3hu5l0IG7Eg20iLHl5OiIlZCBuxINtIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgieC1wc2V1ZG8iLHttb250aHM6Ikp+w6HDscO6w6F+csO9X0Z+w6licsO6fsOhcsO9X35Nw6FyY35oX8OBcH5yw61sX35Nw6HDvV9+SsO6w7HDqX5fSsO6bH7DvV/DgcO6fmfDunN0fl9Tw6lwfnTDqW1ifsOpcl/Dk35jdMOzYn7DqXJfw5F+w7N2w6ltfmLDqXJffkTDqWPDqX5tYsOpciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSn7DocOxX35Gw6liX35Nw6FyX37DgXByX35Nw6HDvV9+SsO6w7FffkrDumxffsOBw7pnX35Tw6lwX37Dk2N0X37DkcOzdl9+RMOpYyIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OnRydWUsd2Vla2RheXM6IlN+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU37DusOxX35Nw7PDsV9+VMO6w6lfflfDqWRfflRow7pffkZyw61fflPDoXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6dHJ1ZSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUfsOzZMOhfsO9IMOhdF0gTFQiLG5leHREYXk6IltUfsOzbcOzfnJyw7N+dyDDoXRdIExUIixuZXh0V2VlazoiZGRkZCBbw6F0XSBMVCIsbGFzdERheToiW8OdfsOpc3R+w6lyZMOhfsO9IMOhdF0gTFQiLGxhc3RXZWVrOiJbTH7DoXN0XSBkZGRkIFvDoXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiLDrX7DsSAlcyIscGFzdDoiJXMgw6F+Z8OzIixzOiLDoSB+ZsOpdyB+c8OpY8OzfsOxZHMiLHNzOiIlZCBzfsOpY8Ozw7F+ZHMiLG06IsOhIH5tw63DsX7DunTDqSIsbW06IiVkIG1+w63DscO6fnTDqXMiLGg6IsOhfsOxIGjDs37DunIiLGhoOiIlZCBofsOzw7pycyIsZDoiw6EgfmTDocO9IixkZDoiJWQgZH7DocO9cyIsTToiw6Egfm3Ds8OxfnRoIixNTToiJWQgbX7Ds8OxdH5ocyIseToiw6EgfsO9w6nDoXIiLHl5OiIlZCDDvX7DqcOhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHRofHN0fG5kfHJkKS8sb3JkaW5hbDpmdW5jdGlvbihlKXt2YXIgdD1lJTEwLG49fn4oZSUxMDAvMTApPT09MT8idGgiOnQ9PT0xPyJzdCI6dD09PTI/Im5kIjp0PT09Mz8icmQiOiJ0aCI7cmV0dXJuIGUrbn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgieW8iLHttb250aHM6IlPhurnMgXLhurnMgV9FzIByZcyAbGXMgF/hurhy4bq5zIBuYcyAX0nMgGdiZcyBX0XMgGJpYmlfT8yAa3XMgGR1X0Fn4bq5bW9fT8yAZ3XMgW5fT3dld2Vf4buMzIB3YcyAcmHMgF9CZcyBbHXMgV/hu4zMgHDhurnMgMyAIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJT4bq5zIFyX0XMgHJsX+G6uHJuX0nMgGdiX0XMgGJpX0/MgGt1zIBfQWfhurlfT8yAZ3XMgV9Pd2Vf4buMzIB3YcyAX0JlzIFsX+G7jMyAcOG6ucyAzIAiLnNwbGl0KCJfIiksd2Vla2RheXM6IkHMgGnMgGt1zIFfQWplzIFfScyAc+G6ucyBZ3VuX+G7jGrhu43MgXJ1zIFf4buMauG7jcyBYuG7jV/hurh0acyAX0HMgGJhzIFt4bq5zIF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkHMgGnMgF9Bal9JzIBzX+G7jHJf4buMYl/hurh0X0HMgGIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW0/MgG5pzIAgbmldIExUIixuZXh0RGF5OiJb4buMzIBsYSBuaV0gTFQiLG5leHRXZWVrOiJkZGRkIFvhu4xz4bq5zIAgdG/MgW4nYuG7jV0gW25pXSBMVCIsbGFzdERheToiW0HMgG5hIG5pXSBMVCIsbGFzdFdlZWs6ImRkZGQgW+G7jHPhurnMgCB0b8yBbOG7jcyBXSBbbmldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJuacyBICVzIixwYXN0OiIlcyBr4buNamHMgSIsczoiacyAc+G6uWp1zIEgYWF5YcyBIGRpZSIsc3M6ImFheWHMgSAlZCIsbToiacyAc+G6uWp1zIEga2FuIixtbToiacyAc+G6uWp1zIEgJWQiLGg6IndhzIFrYXRpIGthbiIsaGg6IndhzIFrYXRpICVkIixkOiLhu41q4buNzIEga2FuIixkZDoi4buNauG7jcyBICVkIixNOiJvc3XMgCBrYW4iLE1NOiJvc3XMgCAlZCIseToi4buNZHXMgW4ga2FuIix5eToi4buNZHXMgW4gJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi/hu41q4buNzIFcc1xkezEsMn0vLG9yZGluYWw6IuG7jWrhu43MgSAlZCIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KG4oMCkpfSxmdW5jdGlvbihlLHQsbil7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjsKLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvbgp2YXIgdDtlLmRlZmluZUxvY2FsZSgiemgtY24iLHttb250aHM6IuS4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoi5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IuWRqOaXpV/lkajkuIBf5ZGo5LqMX+WRqOS4iV/lkajlm5tf5ZGo5LqUX+WRqOWFrSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZ5bm0TeaciETml6UiLExMTDoiWVlZWeW5tE3mnIhE5pelQWjngrltbeWIhiIsTExMTDoiWVlZWeW5tE3mnIhE5pelZGRkZEFo54K5bW3liIYiLGw6IllZWVkvTS9EIixsbDoiWVlZWeW5tE3mnIhE5pelIixsbGw6IllZWVnlubRN5pyIROaXpSBISDptbSIsbGxsbDoiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i5YeM5pmoInx8dD09PSLml6nkuIoifHx0PT09IuS4iuWNiCIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuS4i+WNiCJ8fHQ9PT0i5pma5LiKIilyZXR1cm4gZSsxMjtlbHNlIHJldHVybiBlPj0xMT9lOmUrMTJ9LG1lcmlkaWVtOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1lKjEwMCt0O2lmKGk8NjAwKXJldHVybiLlh4zmmagiO2Vsc2UgaWYoaTw5MDApcmV0dXJuIuaXqeS4iiI7ZWxzZSBpZihpPDExMzApcmV0dXJuIuS4iuWNiCI7ZWxzZSBpZihpPDEyMzApcmV0dXJuIuS4reWNiCI7ZWxzZSBpZihpPDE4MDApcmV0dXJuIuS4i+WNiCI7ZWxzZSByZXR1cm4i5pma5LiKIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilvku4rlpKldTFQiLG5leHREYXk6IlvmmI7lpKldTFQiLG5leHRXZWVrOmZ1bmN0aW9uKGUpe2lmKGUud2VlaygpIT09dGhpcy53ZWVrKCkpcmV0dXJuIlvkuItdZGRkTFQiO2Vsc2UgcmV0dXJuIlvmnKxdZGRkTFQifSxsYXN0RGF5OiJb5pio5aSpXUxUIixsYXN0V2VlazpmdW5jdGlvbihlKXtpZih0aGlzLndlZWsoKSE9PWUud2VlaygpKXJldHVybiJb5LiKXWRkZExUIjtlbHNlIHJldHVybiJb5pysXWRkZExUIn0sc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KOaXpXzmnIh85ZGoKS8sb3JkaW5hbDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBlKyLml6UiO2Nhc2UiTSI6cmV0dXJuIGUrIuaciCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBlKyLlkagiO2RlZmF1bHQ6cmV0dXJuIGV9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXPlkI4iLHBhc3Q6IiVz5YmNIixzOiLlh6Dnp5IiLHNzOiIlZCDnp5IiLG06IjEg5YiG6ZKfIixtbToiJWQg5YiG6ZKfIixoOiIxIOWwj+aXtiIsaGg6IiVkIOWwj+aXtiIsZDoiMSDlpKkiLGRkOiIlZCDlpKkiLHc6IjEg5ZGoIix3dzoiJWQg5ZGoIixNOiIxIOS4quaciCIsTU06IiVkIOS4quaciCIseToiMSDlubQiLHl5OiIlZCDlubQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJ6aC1oayIse21vbnRoczoi5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVnlubRN5pyIROaXpSIsTExMOiJZWVlZ5bm0TeaciETml6UgSEg6bW0iLExMTEw6IllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWeW5tE3mnIhE5pelIixsbGw6IllZWVnlubRN5pyIROaXpSBISDptbSIsbGxsbDoiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i5YeM5pmoInx8dD09PSLml6nkuIoifHx0PT09IuS4iuWNiCIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuS4reWNiCIpcmV0dXJuIGU+PTExP2U6ZSsxMjtlbHNlIGlmKHQ9PT0i5LiL5Y2IInx8dD09PSLmmZrkuIoiKXJldHVybiBlKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSoxMDArdDtpZihpPDYwMClyZXR1cm4i5YeM5pmoIjtlbHNlIGlmKGk8OTAwKXJldHVybiLml6nkuIoiO2Vsc2UgaWYoaTwxMjAwKXJldHVybiLkuIrljYgiO2Vsc2UgaWYoaT09PTEyMDApcmV0dXJuIuS4reWNiCI7ZWxzZSBpZihpPDE4MDApcmV0dXJuIuS4i+WNiCI7ZWxzZSByZXR1cm4i5pma5LiKIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilvku4rlpKldTFQiLG5leHREYXk6IlvmmI7lpKldTFQiLG5leHRXZWVrOiJb5LiLXWRkZGRMVCIsbGFzdERheToiW+aYqOWkqV1MVCIsbGFzdFdlZWs6IlvkuIpdZGRkZExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0o5pelfOaciHzpgLEpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGUrIuaXpSI7Y2FzZSJNIjpyZXR1cm4gZSsi5pyIIjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIumAsSI7ZGVmYXVsdDpyZXR1cm4gZX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc+W+jCIscGFzdDoiJXPliY0iLHM6IuW5vuenkiIsc3M6IiVkIOenkiIsbToiMSDliIbpkJgiLG1tOiIlZCDliIbpkJgiLGg6IjEg5bCP5pmCIixoaDoiJWQg5bCP5pmCIixkOiIxIOWkqSIsZGQ6IiVkIOWkqSIsTToiMSDlgIvmnIgiLE1NOiIlZCDlgIvmnIgiLHk6IjEg5bm0Iix5eToiJWQg5bm0In19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJ6aC1tbyIse21vbnRoczoi5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IllZWVnlubRN5pyIROaXpSIsTExMOiJZWVlZ5bm0TeaciETml6UgSEg6bW0iLExMTEw6IllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0iLGw6IkQvTS9ZWVlZIixsbDoiWVlZWeW5tE3mnIhE5pelIixsbGw6IllZWVnlubRN5pyIROaXpSBISDptbSIsbGxsbDoiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i5YeM5pmoInx8dD09PSLml6nkuIoifHx0PT09IuS4iuWNiCIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuS4reWNiCIpcmV0dXJuIGU+PTExP2U6ZSsxMjtlbHNlIGlmKHQ9PT0i5LiL5Y2IInx8dD09PSLmmZrkuIoiKXJldHVybiBlKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSoxMDArdDtpZihpPDYwMClyZXR1cm4i5YeM5pmoIjtlbHNlIGlmKGk8OTAwKXJldHVybiLml6nkuIoiO2Vsc2UgaWYoaTwxMTMwKXJldHVybiLkuIrljYgiO2Vsc2UgaWYoaTwxMjMwKXJldHVybiLkuK3ljYgiO2Vsc2UgaWYoaTwxODAwKXJldHVybiLkuIvljYgiO2Vsc2UgcmV0dXJuIuaZmuS4iiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb5LuK5aSpXSBMVCIsbmV4dERheToiW+aYjuWkqV0gTFQiLG5leHRXZWVrOiJb5LiLXWRkZGQgTFQiLGxhc3REYXk6IlvmmKjlpKldIExUIixsYXN0V2VlazoiW+S4il1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0o5pelfOaciHzpgLEpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGUrIuaXpSI7Y2FzZSJNIjpyZXR1cm4gZSsi5pyIIjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIumAsSI7ZGVmYXVsdDpyZXR1cm4gZX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc+WFpyIscGFzdDoiJXPliY0iLHM6IuW5vuenkiIsc3M6IiVkIOenkiIsbToiMSDliIbpkJgiLG1tOiIlZCDliIbpkJgiLGg6IjEg5bCP5pmCIixoaDoiJWQg5bCP5pmCIixkOiIxIOWkqSIsZGQ6IiVkIOWkqSIsTToiMSDlgIvmnIgiLE1NOiIlZCDlgIvmnIgiLHk6IjEg5bm0Iix5eToiJWQg5bm0In19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXshZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiOwovLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uCnZhciB0O2UuZGVmaW5lTG9jYWxlKCJ6aC10dyIse21vbnRoczoi5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiLmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiLml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVnlubRN5pyIROaXpSIsTExMOiJZWVlZ5bm0TeaciETml6UgSEg6bW0iLExMTEw6IllZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWeW5tE3mnIhE5pelIixsbGw6IllZWVnlubRN5pyIROaXpSBISDptbSIsbGxsbDoiWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZSx0KXtpZihlPT09MTIpZT0wO2lmKHQ9PT0i5YeM5pmoInx8dD09PSLml6nkuIoifHx0PT09IuS4iuWNiCIpcmV0dXJuIGU7ZWxzZSBpZih0PT09IuS4reWNiCIpcmV0dXJuIGU+PTExP2U6ZSsxMjtlbHNlIGlmKHQ9PT0i5LiL5Y2IInx8dD09PSLmmZrkuIoiKXJldHVybiBlKzEyfSxtZXJpZGllbTpmdW5jdGlvbihlLHQsbil7dmFyIGk9ZSoxMDArdDtpZihpPDYwMClyZXR1cm4i5YeM5pmoIjtlbHNlIGlmKGk8OTAwKXJldHVybiLml6nkuIoiO2Vsc2UgaWYoaTwxMTMwKXJldHVybiLkuIrljYgiO2Vsc2UgaWYoaTwxMjMwKXJldHVybiLkuK3ljYgiO2Vsc2UgaWYoaTwxODAwKXJldHVybiLkuIvljYgiO2Vsc2UgcmV0dXJuIuaZmuS4iiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb5LuK5aSpXSBMVCIsbmV4dERheToiW+aYjuWkqV0gTFQiLG5leHRXZWVrOiJb5LiLXWRkZGQgTFQiLGxhc3REYXk6IlvmmKjlpKldIExUIixsYXN0V2VlazoiW+S4il1kZGRkIExUIixzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0o5pelfOaciHzpgLEpLyxvcmRpbmFsOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGUrIuaXpSI7Y2FzZSJNIjpyZXR1cm4gZSsi5pyIIjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGUrIumAsSI7ZGVmYXVsdDpyZXR1cm4gZX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc+W+jCIscGFzdDoiJXPliY0iLHM6IuW5vuenkiIsc3M6IiVkIOenkiIsbToiMSDliIbpkJgiLG1tOiIlZCDliIbpkJgiLGg6IjEg5bCP5pmCIixoaDoiJWQg5bCP5pmCIixkOiIxIOWkqSIsZGQ6IiVkIOWkqSIsTToiMSDlgIvmnIgiLE1NOiIlZCDlgIvmnIgiLHk6IjEg5bm0Iix5eToiJWQg5bm0In19KX0obigwKSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDEwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighaShlKXx8ZS5fdCE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cyhuKDIzKSkscj1zKG4oNDIpKSxhPXMobigxKSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIG89KCgwLHMobigyKSkuZGVmYXVsdCkodSxudWxsLFt7a2V5OiJpbnN0YWxsIix2YWx1ZTpmdW5jdGlvbigpe09iamVjdC5zZXRQcm90b3R5cGVPZj1yLmRlZmF1bHR8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0sT2JqZWN0LmFzc2lnbj1pLmRlZmF1bHR8fGZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgdW5kZWZpbmVkIG9yIG51bGwgdG8gb2JqZWN0Iik7Zm9yKHZhciB0PU9iamVjdChlKSxuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl7dmFyIGk9YXJndW1lbnRzW25dO2lmKG51bGwhPWkpZm9yKHZhciByIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShyKSYmKHRbcl09aVtyXSl9cmV0dXJuIHR9LCJmdW5jdGlvbiIhPXR5cGVvZiBzZWxmLlByb21pc2UmJm4oMzE4KS5wb2x5ZmlsbCgpfX1dKSx1KTtmdW5jdGlvbiB1KCl7KDAsYS5kZWZhdWx0KSh0aGlzLHUpfW8uaW5zdGFsbCgpLHQuZGVmYXVsdD1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1tKG4oMSkpLHI9bShuKDIpKSxhPW0obig2KSkscz1tKG4oNzEpKSxvPW4oMTcpLHU9bShuKDMyNykpLGQ9bShuKDMzMSkpLGw9KG0obigzMzIpKSxtKG4oMzMzKSkpLGg9bShuKDMzNCkpLGM9bShuKDMzNSkpLF89bShuKDMzNikpLGY9big3KTtmdW5jdGlvbiBtKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxyLmRlZmF1bHQpKHAsW3trZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbG9hZGVyLmlzV29ya2luZygpJiZ0aGlzLl9sb2FkZXIuYWJvcnQoKSx0aGlzLl9sb2FkZXIuZGVzdHJveSgpLHRoaXMuX2xvYWRlcj1udWxsLHRoaXMuX2xvYWRlckNsYXNzPW51bGwsdGhpcy5fZGF0YVNvdXJjZT1udWxsLHRoaXMuX3N0YXNoQnVmZmVyPW51bGwsdGhpcy5fc3Rhc2hVc2VkPXRoaXMuX3N0YXNoU2l6ZT10aGlzLl9idWZmZXJTaXplPXRoaXMuX3N0YXNoQnl0ZVN0YXJ0PTAsdGhpcy5fY3VycmVudFJhbmdlPW51bGwsdGhpcy5fc3BlZWRTYW1wbGVyPW51bGwsdGhpcy5faXNFYXJseUVvZlJlY29ubmVjdGluZz0hMSx0aGlzLl9vbkRhdGFBcnJpdmFsPW51bGwsdGhpcy5fb25TZWVrZWQ9bnVsbCx0aGlzLl9vbkVycm9yPW51bGwsdGhpcy5fb25Db21wbGV0ZT1udWxsLHRoaXMuX29uUmVkaXJlY3Q9bnVsbCx0aGlzLl9vblJlY292ZXJlZEVhcmx5RW9mPW51bGwsdGhpcy5fZXh0cmFEYXRhPW51bGx9fSx7a2V5OiJpc1dvcmtpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlciYmdGhpcy5fbG9hZGVyLmlzV29ya2luZygpJiYhdGhpcy5fcGF1c2VkfX0se2tleToiaXNQYXVzZWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhdXNlZH19LHtrZXk6Il9zZWxlY3RTZWVrSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9jb25maWc7aWYoInJhbmdlIj09PWUuc2Vla1R5cGUpdGhpcy5fc2Vla0hhbmRsZXI9bmV3IGMuZGVmYXVsdCh0aGlzLl9jb25maWcucmFuZ2VMb2FkWmVyb1N0YXJ0KTtlbHNlIGlmKCJwYXJhbSI9PT1lLnNlZWtUeXBlKXt2YXIgdD1lLnNlZWtQYXJhbVN0YXJ0fHwiYnN0YXJ0IixuPWUuc2Vla1BhcmFtRW5kfHwiYmVuZCI7dGhpcy5fc2Vla0hhbmRsZXI9bmV3IF8uZGVmYXVsdCh0LG4pfWVsc2V7aWYoImN1c3RvbSIhPT1lLnNlZWtUeXBlKXRocm93IG5ldyBmLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzZWVrVHlwZSBpbiBjb25maWc6ICIrZS5zZWVrVHlwZSk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUuY3VzdG9tU2Vla0hhbmRsZXIpdGhyb3cgbmV3IGYuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJDdXN0b20gc2Vla1R5cGUgc3BlY2lmaWVkIGluIGNvbmZpZyBidXQgaW52YWxpZCBjdXN0b21TZWVrSGFuZGxlciEiKTt0aGlzLl9zZWVrSGFuZGxlcj1uZXcgZS5jdXN0b21TZWVrSGFuZGxlcn19fSx7a2V5OiJfc2VsZWN0TG9hZGVyIix2YWx1ZTpmdW5jdGlvbigpe2lmKG51bGwhPXRoaXMuX2NvbmZpZy5jdXN0b21Mb2FkZXIpdGhpcy5fbG9hZGVyQ2xhc3M9dGhpcy5fY29uZmlnLmN1c3RvbUxvYWRlcjtlbHNlIGlmKHRoaXMuX2lzV2ViU29ja2V0VVJMKXRoaXMuX2xvYWRlckNsYXNzPWguZGVmYXVsdDtlbHNlIGlmKHUuZGVmYXVsdC5pc1N1cHBvcnRlZCgpKXRoaXMuX2xvYWRlckNsYXNzPXUuZGVmYXVsdDtlbHNlIGlmKGQuZGVmYXVsdC5pc1N1cHBvcnRlZCgpKXRoaXMuX2xvYWRlckNsYXNzPWQuZGVmYXVsdDtlbHNle2lmKCFsLmRlZmF1bHQuaXNTdXBwb3J0ZWQoKSl0aHJvdyBuZXcgZi5SdW50aW1lRXhjZXB0aW9uKCJZb3VyIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHhociB3aXRoIGFycmF5YnVmZmVyIHJlc3BvbnNlVHlwZSEiKTt0aGlzLl9sb2FkZXJDbGFzcz1sLmRlZmF1bHR9fX0se2tleToiX2NyZWF0ZUxvYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9sb2FkZXI9bmV3IHRoaXMuX2xvYWRlckNsYXNzKHRoaXMuX3NlZWtIYW5kbGVyLHRoaXMuX2NvbmZpZyksITE9PT10aGlzLl9sb2FkZXIubmVlZFN0YXNoQnVmZmVyJiYodGhpcy5fZW5hYmxlU3Rhc2g9ITEpLHRoaXMuX2xvYWRlci5vbkNvbnRlbnRMZW5ndGhLbm93bj10aGlzLl9vbkNvbnRlbnRMZW5ndGhLbm93bi5iaW5kKHRoaXMpLHRoaXMuX2xvYWRlci5vblVSTFJlZGlyZWN0PXRoaXMuX29uVVJMUmVkaXJlY3QuYmluZCh0aGlzKSx0aGlzLl9sb2FkZXIub25EYXRhQXJyaXZhbD10aGlzLl9vbkxvYWRlckNodW5rQXJyaXZhbC5iaW5kKHRoaXMpLHRoaXMuX2xvYWRlci5vbkNvbXBsZXRlPXRoaXMuX29uTG9hZGVyQ29tcGxldGUuYmluZCh0aGlzKSx0aGlzLl9sb2FkZXIub25FcnJvcj10aGlzLl9vbkxvYWRlckVycm9yLmJpbmQodGhpcyl9fSx7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJyZW50UmFuZ2U9e2Zyb206MCx0bzotMX0sZSYmKHRoaXMuX2N1cnJlbnRSYW5nZS5mcm9tPWUpLHRoaXMuX3NwZWVkU2FtcGxlci5yZXNldCgpLGV8fCh0aGlzLl9mdWxsUmVxdWVzdEZsYWc9ITApfX0se2tleToiYWJvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbG9hZGVyLmFib3J0KCksdGhpcy5fcGF1c2VkJiYodGhpcy5fcGF1c2VkPSExLHRoaXMuX3Jlc3VtZUZyb209MCl9fSx7a2V5OiJwYXVzZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmlzV29ya2luZygpJiYodGhpcy5fbG9hZGVyLmFib3J0KCksMCE9PXRoaXMuX3N0YXNoVXNlZD8odGhpcy5fcmVzdW1lRnJvbT10aGlzLl9zdGFzaEJ5dGVTdGFydCx0aGlzLl9jdXJyZW50UmFuZ2UudG89dGhpcy5fc3Rhc2hCeXRlU3RhcnQtMSk6dGhpcy5fcmVzdW1lRnJvbT10aGlzLl9jdXJyZW50UmFuZ2UudG8rMSx0aGlzLl9zdGFzaFVzZWQ9MCx0aGlzLl9zdGFzaEJ5dGVTdGFydD0wLHRoaXMuX3BhdXNlZD0hMCl9fSx7a2V5OiJyZXN1bWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5fcGF1c2VkJiYodGhpcy5fcGF1c2VkPSExLGU9dGhpcy5fcmVzdW1lRnJvbSx0aGlzLl9yZXN1bWVGcm9tPTAsdGhpcy5faW50ZXJuYWxTZWVrKGUsITApKX19LHtrZXk6InNlZWsiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3BhdXNlZD0hMSx0aGlzLl9zdGFzaFVzZWQ9MCx0aGlzLl9zdGFzaEJ5dGVTdGFydD0wLHRoaXMuX2ludGVybmFsU2VlayhlLCEwKX19LHtrZXk6Il9pbnRlcm5hbFNlZWsiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fbG9hZGVyLmlzV29ya2luZygpJiZ0aGlzLl9sb2FkZXIuYWJvcnQoKSx0aGlzLl9mbHVzaFN0YXNoQnVmZmVyKHQpLHRoaXMuX2xvYWRlci5kZXN0cm95KCksdGhpcy5fbG9hZGVyPW51bGw7ZT17ZnJvbTplLHRvOi0xfTt0aGlzLl9jdXJyZW50UmFuZ2U9e2Zyb206ZS5mcm9tLHRvOi0xfSx0aGlzLl9zcGVlZFNhbXBsZXIucmVzZXQoKSx0aGlzLl9zdGFzaFNpemU9dGhpcy5fc3Rhc2hJbml0aWFsU2l6ZSx0aGlzLl9jcmVhdGVMb2FkZXIoKSx0aGlzLl9sb2FkZXIub3Blbih0aGlzLl9kYXRhU291cmNlLGUpLHRoaXMuX29uU2Vla2VkJiZ0aGlzLl9vblNlZWtlZCgpfX0se2tleToidXBkYXRlVXJsIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IGYuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJVcmwgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmchIik7dGhpcy5fZGF0YVNvdXJjZS51cmw9ZX19LHtrZXk6Il9leHBhbmRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLGk9dGhpcy5fc3Rhc2hTaXplO2krMTA0ODU3NjxlOylpKj0yOyhpKz0xMDQ4NTc2KSE9PXRoaXMuX2J1ZmZlclNpemUmJih0PW5ldyBBcnJheUJ1ZmZlcihpKSwwPHRoaXMuX3N0YXNoVXNlZCYmKG49bmV3IFVpbnQ4QXJyYXkodGhpcy5fc3Rhc2hCdWZmZXIsMCx0aGlzLl9zdGFzaFVzZWQpLG5ldyBVaW50OEFycmF5KHQsMCxpKS5zZXQobiwwKSksdGhpcy5fc3Rhc2hCdWZmZXI9dCx0aGlzLl9idWZmZXJTaXplPWkpfX0se2tleToiX25vcm1hbGl6ZVNwZWVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuX3NwZWVkTm9ybWFsaXplTGlzdCxpPW4ubGVuZ3RoLTEscj0wLGE9aTtpZihlPG5bMF0pcmV0dXJuIG5bMF07Zm9yKDtyPD1hOyl7aWYoKHQ9citNYXRoLmZsb29yKChhLXIpLzIpKT09PWl8fGU+PW5bdF0mJmU8blt0KzFdKXJldHVybiBuW3RdO25bdF08ZT9yPXQrMTphPXQtMX19fSx7a2V5OiJfYWRqdXN0U3Rhc2hTaXplIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD0wLGU9MTAyNCoodD04MTkyPCh0PXRoaXMuX2NvbmZpZy5pc0xpdmV8fGU8NTEyP2U6NTEyPD1lJiZlPD0xMDI0P01hdGguZmxvb3IoMS41KmUpOjIqZSk/ODE5Mjp0KSsxMDQ4NTc2O3RoaXMuX2J1ZmZlclNpemU8ZSYmdGhpcy5fZXhwYW5kQnVmZmVyKGUpLHRoaXMuX3N0YXNoU2l6ZT0xMDI0KnR9fSx7a2V5OiJfZGlzcGF0Y2hDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRSYW5nZS50bz10K2UuYnl0ZUxlbmd0aC0xLHRoaXMuX29uRGF0YUFycml2YWwoZSx0KX19LHtrZXk6Il9vblVSTFJlZGlyZWN0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9yZWRpcmVjdGVkVVJMPWUsdGhpcy5fb25SZWRpcmVjdCYmdGhpcy5fb25SZWRpcmVjdChlKX19LHtrZXk6Il9vbkNvbnRlbnRMZW5ndGhLbm93biIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5fZnVsbFJlcXVlc3RGbGFnJiYodGhpcy5fdG90YWxMZW5ndGg9ZSx0aGlzLl9mdWxsUmVxdWVzdEZsYWc9ITEpfX0se2tleToiX29uTG9hZGVyQ2h1bmtBcnJpdmFsIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYoIXRoaXMuX29uRGF0YUFycml2YWwpdGhyb3cgbmV3IGYuSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJT0NvbnRyb2xsZXI6IE5vIGV4aXN0aW5nIGNvbnN1bWVyIChvbkRhdGFBcnJpdmFsKSBjYWxsYmFjayEiKTt2YXIgaSxyLGEscyxvO3RoaXMuX3BhdXNlZHx8KHRoaXMuX2lzRWFybHlFb2ZSZWNvbm5lY3RpbmcmJih0aGlzLl9pc0Vhcmx5RW9mUmVjb25uZWN0aW5nPSExLHRoaXMuX29uUmVjb3ZlcmVkRWFybHlFb2YmJnRoaXMuX29uUmVjb3ZlcmVkRWFybHlFb2YoKSksdGhpcy5fc3BlZWRTYW1wbGVyLmFkZEJ5dGVzKGUuYnl0ZUxlbmd0aCksMCE9PShpPXRoaXMuX3NwZWVkU2FtcGxlci5sYXN0U2Vjb25kS0JwcykmJihyPXRoaXMuX25vcm1hbGl6ZVNwZWVkKGkpLHRoaXMuX3NwZWVkTm9ybWFsaXplZCE9PXImJih0aGlzLl9zcGVlZE5vcm1hbGl6ZWQ9cix0aGlzLl9hZGp1c3RTdGFzaFNpemUocikpKSx0aGlzLl9lbmFibGVTdGFzaD8oMD09PXRoaXMuX3N0YXNoVXNlZCYmMD09PXRoaXMuX3N0YXNoQnl0ZVN0YXJ0JiYodGhpcy5fc3Rhc2hCeXRlU3RhcnQ9dCksdGhpcy5fc3Rhc2hVc2VkK2UuYnl0ZUxlbmd0aDw9dGhpcy5fc3Rhc2hTaXplPyhuZXcgVWludDhBcnJheSh0aGlzLl9zdGFzaEJ1ZmZlciwwLHRoaXMuX3N0YXNoU2l6ZSkuc2V0KG5ldyBVaW50OEFycmF5KGUpLHRoaXMuX3N0YXNoVXNlZCksdGhpcy5fc3Rhc2hVc2VkKz1lLmJ5dGVMZW5ndGgpOihpPW5ldyBVaW50OEFycmF5KHRoaXMuX3N0YXNoQnVmZmVyLDAsdGhpcy5fYnVmZmVyU2l6ZSksMDx0aGlzLl9zdGFzaFVzZWQ/KHI9dGhpcy5fc3Rhc2hCdWZmZXIuc2xpY2UoMCx0aGlzLl9zdGFzaFVzZWQpLChhPXRoaXMuX2Rpc3BhdGNoQ2h1bmtzKHIsdGhpcy5fc3Rhc2hCeXRlU3RhcnQpKTxyLmJ5dGVMZW5ndGg/MDxhJiYocj1uZXcgVWludDhBcnJheShyLGEpLGkuc2V0KHIsMCksdGhpcy5fc3Rhc2hVc2VkPXIuYnl0ZUxlbmd0aCx0aGlzLl9zdGFzaEJ5dGVTdGFydCs9YSk6KHRoaXMuX3N0YXNoVXNlZD0wLHRoaXMuX3N0YXNoQnl0ZVN0YXJ0Kz1hKSx0aGlzLl9zdGFzaFVzZWQrZS5ieXRlTGVuZ3RoPnRoaXMuX2J1ZmZlclNpemUmJih0aGlzLl9leHBhbmRCdWZmZXIodGhpcy5fc3Rhc2hVc2VkK2UuYnl0ZUxlbmd0aCksaT1uZXcgVWludDhBcnJheSh0aGlzLl9zdGFzaEJ1ZmZlciwwLHRoaXMuX2J1ZmZlclNpemUpKSxpLnNldChuZXcgVWludDhBcnJheShlKSx0aGlzLl9zdGFzaFVzZWQpLHRoaXMuX3N0YXNoVXNlZCs9ZS5ieXRlTGVuZ3RoKToocz10aGlzLl9kaXNwYXRjaENodW5rcyhlLHQpKTxlLmJ5dGVMZW5ndGgmJigoYT1lLmJ5dGVMZW5ndGgtcyk+dGhpcy5fYnVmZmVyU2l6ZSYmKHRoaXMuX2V4cGFuZEJ1ZmZlcihhKSxpPW5ldyBVaW50OEFycmF5KHRoaXMuX3N0YXNoQnVmZmVyLDAsdGhpcy5fYnVmZmVyU2l6ZSkpLGkuc2V0KG5ldyBVaW50OEFycmF5KGUscyksMCksdGhpcy5fc3Rhc2hVc2VkKz1hLHRoaXMuX3N0YXNoQnl0ZVN0YXJ0PXQrcykpKTowPT09dGhpcy5fc3Rhc2hVc2VkPyhvPXRoaXMuX2Rpc3BhdGNoQ2h1bmtzKGUsdCkpPGUuYnl0ZUxlbmd0aCYmKChzPWUuYnl0ZUxlbmd0aC1vKT50aGlzLl9idWZmZXJTaXplJiZ0aGlzLl9leHBhbmRCdWZmZXIocyksbmV3IFVpbnQ4QXJyYXkodGhpcy5fc3Rhc2hCdWZmZXIsMCx0aGlzLl9idWZmZXJTaXplKS5zZXQobmV3IFVpbnQ4QXJyYXkoZSxvKSwwKSx0aGlzLl9zdGFzaFVzZWQrPXMsdGhpcy5fc3Rhc2hCeXRlU3RhcnQ9dCtvKToodGhpcy5fc3Rhc2hVc2VkK2UuYnl0ZUxlbmd0aD50aGlzLl9idWZmZXJTaXplJiZ0aGlzLl9leHBhbmRCdWZmZXIodGhpcy5fc3Rhc2hVc2VkK2UuYnl0ZUxlbmd0aCksKHQ9bmV3IFVpbnQ4QXJyYXkodGhpcy5fc3Rhc2hCdWZmZXIsMCx0aGlzLl9idWZmZXJTaXplKSkuc2V0KG5ldyBVaW50OEFycmF5KGUpLHRoaXMuX3N0YXNoVXNlZCksdGhpcy5fc3Rhc2hVc2VkKz1lLmJ5dGVMZW5ndGgsKG89dGhpcy5fZGlzcGF0Y2hDaHVua3ModGhpcy5fc3Rhc2hCdWZmZXIuc2xpY2UoMCx0aGlzLl9zdGFzaFVzZWQpLHRoaXMuX3N0YXNoQnl0ZVN0YXJ0KSk8dGhpcy5fc3Rhc2hVc2VkJiYwPG8mJihlPW5ldyBVaW50OEFycmF5KHRoaXMuX3N0YXNoQnVmZmVyLG8pLHQuc2V0KGUsMCkpLHRoaXMuX3N0YXNoVXNlZC09byx0aGlzLl9zdGFzaEJ5dGVTdGFydCs9bykpfX0se2tleToiX2ZsdXNoU3Rhc2hCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDA8dGhpcy5fc3Rhc2hVc2VkKXt2YXIgdD10aGlzLl9zdGFzaEJ1ZmZlci5zbGljZSgwLHRoaXMuX3N0YXNoVXNlZCksbj10aGlzLl9kaXNwYXRjaENodW5rcyh0LHRoaXMuX3N0YXNoQnl0ZVN0YXJ0KSxpPXQuYnl0ZUxlbmd0aC1uO2lmKG48dC5ieXRlTGVuZ3RoKXtpZighZSlyZXR1cm4gMDxuJiYoZT1uZXcgVWludDhBcnJheSh0aGlzLl9zdGFzaEJ1ZmZlciwwLHRoaXMuX2J1ZmZlclNpemUpLHQ9bmV3IFVpbnQ4QXJyYXkodCxuKSxlLnNldCh0LDApLHRoaXMuX3N0YXNoVXNlZD10LmJ5dGVMZW5ndGgsdGhpcy5fc3Rhc2hCeXRlU3RhcnQrPW4pLDA7YS5kZWZhdWx0LncodGhpcy5UQUcsaSsiIGJ5dGVzIHVuY29uc3VtZWQgZGF0YSByZW1haW4gd2hlbiBmbHVzaCBidWZmZXIsIGRyb3BwZWQiKX1yZXR1cm4gdGhpcy5fc3Rhc2hVc2VkPTAsdGhpcy5fc3Rhc2hCeXRlU3RhcnQ9MCxpfXJldHVybiAwfX0se2tleToiX29uTG9hZGVyQ29tcGxldGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZmx1c2hTdGFzaEJ1ZmZlcighMCksdGhpcy5fb25Db21wbGV0ZSYmdGhpcy5fb25Db21wbGV0ZSh0aGlzLl9leHRyYURhdGEpfX0se2tleToiX29uTG9hZGVyRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKGEuZGVmYXVsdC5lKHRoaXMuVEFHLCJMb2FkZXIgZXJyb3IsIGNvZGUgPSAiK3QuY29kZSsiLCBtc2cgPSAiK3QubXNnKSx0aGlzLl9mbHVzaFN0YXNoQnVmZmVyKCExKSx0aGlzLl9pc0Vhcmx5RW9mUmVjb25uZWN0aW5nJiYodGhpcy5faXNFYXJseUVvZlJlY29ubmVjdGluZz0hMSxlPW8uTG9hZGVyRXJyb3JzLlVOUkVDT1ZFUkFCTEVfRUFSTFlfRU9GKSxlKXtjYXNlIG8uTG9hZGVyRXJyb3JzLkVBUkxZX0VPRjppZighdGhpcy5fY29uZmlnLmlzTGl2ZSYmdGhpcy5fdG90YWxMZW5ndGgpe3ZhciBuPXRoaXMuX2N1cnJlbnRSYW5nZS50bysxO3JldHVybiB2b2lkKG48dGhpcy5fdG90YWxMZW5ndGgmJihhLmRlZmF1bHQudyh0aGlzLlRBRywiQ29ubmVjdGlvbiBsb3N0LCB0cnlpbmcgcmVjb25uZWN0Li4uIiksdGhpcy5faXNFYXJseUVvZlJlY29ubmVjdGluZz0hMCx0aGlzLl9pbnRlcm5hbFNlZWsobiwhMSkpKX1lPW8uTG9hZGVyRXJyb3JzLlVOUkVDT1ZFUkFCTEVfRUFSTFlfRU9GO2JyZWFrO2Nhc2Ugby5Mb2FkZXJFcnJvcnMuVU5SRUNPVkVSQUJMRV9FQVJMWV9FT0Y6Y2FzZSBvLkxvYWRlckVycm9ycy5DT05ORUNUSU5HX1RJTUVPVVQ6Y2FzZSBvLkxvYWRlckVycm9ycy5IVFRQX1NUQVRVU19DT0RFX0lOVkFMSUQ6Y2FzZSBvLkxvYWRlckVycm9ycy5FWENFUFRJT046fWlmKCF0aGlzLl9vbkVycm9yKXRocm93IG5ldyBmLlJ1bnRpbWVFeGNlcHRpb24oIklPRXhjZXB0aW9uOiAiK3QubXNnKTt0aGlzLl9vbkVycm9yKGUsdCl9fSx7a2V5OiJzdGF0dXMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sb2FkZXIuc3RhdHVzfX0se2tleToiZXh0cmFEYXRhIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXh0cmFEYXRhfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZXh0cmFEYXRhPWV9fSx7a2V5OiJvbkRhdGFBcnJpdmFsIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25EYXRhQXJyaXZhbH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uRGF0YUFycml2YWw9ZX19LHtrZXk6Im9uU2Vla2VkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25TZWVrZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vblNlZWtlZD1lfX0se2tleToib25FcnJvciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uRXJyb3J9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vbkVycm9yPWV9fSx7a2V5OiJvbkNvbXBsZXRlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25Db21wbGV0ZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uQ29tcGxldGU9ZX19LHtrZXk6Im9uUmVkaXJlY3QiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblJlZGlyZWN0fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25SZWRpcmVjdD1lfX0se2tleToib25SZWNvdmVyZWRFYXJseUVvZiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29uUmVjb3ZlcmVkRWFybHlFb2Z9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vblJlY292ZXJlZEVhcmx5RW9mPWV9fSx7a2V5OiJjdXJyZW50VVJMIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZGF0YVNvdXJjZS51cmx9fSx7a2V5OiJoYXNSZWRpcmVjdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuX3JlZGlyZWN0ZWRVUkx8fG51bGwhPXRoaXMuX2RhdGFTb3VyY2UucmVkaXJlY3RlZFVSTH19LHtrZXk6ImN1cnJlbnRSZWRpcmVjdGVkVVJMIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVkaXJlY3RlZFVSTHx8dGhpcy5fZGF0YVNvdXJjZS5yZWRpcmVjdGVkVVJMfX0se2tleToiY3VycmVudFNwZWVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVyQ2xhc3M9PT1sLmRlZmF1bHQ/dGhpcy5fbG9hZGVyLmN1cnJlbnRTcGVlZDp0aGlzLl9zcGVlZFNhbXBsZXIubGFzdFNlY29uZEtCcHN9fSx7a2V5OiJsb2FkZXJUeXBlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbG9hZGVyLnR5cGV9fV0pLHI9cDtmdW5jdGlvbiBwKGUsdCxuKXsoMCxpLmRlZmF1bHQpKHRoaXMscCksdGhpcy5UQUc9IklPQ29udHJvbGxlciIsdGhpcy5fY29uZmlnPXQsdGhpcy5fZXh0cmFEYXRhPW4sdGhpcy5fc3Rhc2hJbml0aWFsU2l6ZT02NTUzNixudWxsIT10LnN0YXNoSW5pdGlhbFNpemUmJjA8dC5zdGFzaEluaXRpYWxTaXplJiYodGhpcy5fc3Rhc2hJbml0aWFsU2l6ZT10LnN0YXNoSW5pdGlhbFNpemUpLHRoaXMuX3N0YXNoVXNlZD0wLHRoaXMuX3N0YXNoU2l6ZT10aGlzLl9zdGFzaEluaXRpYWxTaXplLCh0aGlzLl9idWZmZXJTaXplPTMxNDU3MjgpPHQuc3Rhc2hJbml0aWFsU2l6ZSYmKHRoaXMuX2J1ZmZlclNpemU9dC5zdGFzaEluaXRpYWxTaXplKSx0aGlzLl9zdGFzaEJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodGhpcy5fYnVmZmVyU2l6ZSksdGhpcy5fc3Rhc2hCeXRlU3RhcnQ9MCwhKHRoaXMuX2VuYWJsZVN0YXNoPSEwKT09PXQuZW5hYmxlU3Rhc2hCdWZmZXImJih0aGlzLl9lbmFibGVTdGFzaD0hMSksdGhpcy5fbG9hZGVyPW51bGwsdGhpcy5fbG9hZGVyQ2xhc3M9bnVsbCx0aGlzLl9zZWVrSGFuZGxlcj1udWxsLHRoaXMuX2RhdGFTb3VyY2U9ZSx0aGlzLl9pc1dlYlNvY2tldFVSTD0vd3NzPzpcL1wvKC4rPykvLnRlc3QoZS51cmwpLHRoaXMuX3JlZlRvdGFsTGVuZ3RoPWUuZmlsZXNpemV8fG51bGwsdGhpcy5fdG90YWxMZW5ndGg9dGhpcy5fcmVmVG90YWxMZW5ndGgsdGhpcy5fZnVsbFJlcXVlc3RGbGFnPSExLHRoaXMuX2N1cnJlbnRSYW5nZT1udWxsLHRoaXMuX3JlZGlyZWN0ZWRVUkw9bnVsbCx0aGlzLl9zcGVlZE5vcm1hbGl6ZWQ9MCx0aGlzLl9zcGVlZFNhbXBsZXI9bmV3IHMuZGVmYXVsdCx0aGlzLl9zcGVlZE5vcm1hbGl6ZUxpc3Q9WzY0LDEyOCwyNTYsMzg0LDUxMiw3NjgsMTAyNCwxNTM2LDIwNDgsMzA3Miw0MDk2XSx0aGlzLl9pc0Vhcmx5RW9mUmVjb25uZWN0aW5nPSExLHRoaXMuX3BhdXNlZD0hMSx0aGlzLl9yZXN1bWVGcm9tPTAsdGhpcy5fb25EYXRhQXJyaXZhbD1udWxsLHRoaXMuX29uU2Vla2VkPW51bGwsdGhpcy5fb25FcnJvcj1udWxsLHRoaXMuX29uQ29tcGxldGU9bnVsbCx0aGlzLl9vblJlZGlyZWN0PW51bGwsdGhpcy5fb25SZWNvdmVyZWRFYXJseUVvZj1udWxsLHRoaXMuX3NlbGVjdFNlZWtIYW5kbGVyKCksdGhpcy5fc2VsZWN0TG9hZGVyKCksdGhpcy5fY3JlYXRlTG9hZGVyKCl9dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPXkobig0MikpLHI9eShuKDIzKSksYT15KG4oMTQpKSxzPXkobigxKSksbz15KG4oMikpLHU9eShuKDEzKSksZD15KG4oNikpLGw9eShuKDM2KSksaD15KG4oNzQpKSxjPXkobigzMzkpKSxfPXkobigzNDgpKSxmPXkobig3NSkpLG09eShuKDIzOSkpLHA9eShuKDQ0KSk7bigxNyk7ZnVuY3Rpb24geShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAsby5kZWZhdWx0KSh2LFt7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX21lZGlhSW5mbz1udWxsLHRoaXMuX21lZGlhRGF0YVNvdXJjZT1udWxsLHRoaXMuX3N0YXRpc3RpY3NSZXBvcnRlciYmdGhpcy5fZGlzYWJsZVN0YXRpc3RpY3NSZXBvcnRlcigpLHRoaXMuX2lvY3RsJiYodGhpcy5faW9jdGwuZGVzdHJveSgpLHRoaXMuX2lvY3RsPW51bGwpLHRoaXMuX2RlbXV4ZXImJih0aGlzLl9kZW11eGVyLmRlc3Ryb3koKSx0aGlzLl9kZW11eGVyPW51bGwpLHRoaXMuX3JlbXV4ZXImJih0aGlzLl9yZW11eGVyLmRlc3Ryb3koKSx0aGlzLl9yZW11eGVyPW51bGwpLHRoaXMuX2VtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksdGhpcy5fZW1pdHRlcj1udWxsfX0se2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZW1pdHRlci5hZGRMaXN0ZW5lcihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoZSx0KX19LHtrZXk6InN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xvYWRTZWdtZW50KDApLHRoaXMuX2VuYWJsZVN0YXRpc3RpY3NSZXBvcnRlcigpfX0se2tleToiX2xvYWRTZWdtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2N1cnJlbnRTZWdtZW50SW5kZXg9ZTt2YXIgbj10aGlzLl9tZWRpYURhdGFTb3VyY2Uuc2VnbWVudHNbZV0sZT10aGlzLl9pb2N0bD1uZXcgbS5kZWZhdWx0KG4sdGhpcy5fY29uZmlnLGUpO2Uub25FcnJvcj10aGlzLl9vbklPRXhjZXB0aW9uLmJpbmQodGhpcyksZS5vblNlZWtlZD10aGlzLl9vbklPU2Vla2VkLmJpbmQodGhpcyksZS5vbkNvbXBsZXRlPXRoaXMuX29uSU9Db21wbGV0ZS5iaW5kKHRoaXMpLGUub25SZWRpcmVjdD10aGlzLl9vbklPUmVkaXJlY3QuYmluZCh0aGlzKSxlLm9uUmVjb3ZlcmVkRWFybHlFb2Y9dGhpcy5fb25JT1JlY292ZXJlZEVhcmx5RW9mLmJpbmQodGhpcyksdD90aGlzLl9kZW11eGVyLmJpbmREYXRhU291cmNlKHRoaXMuX2lvY3RsKTplLm9uRGF0YUFycml2YWw9dGhpcy5fb25Jbml0Q2h1bmtBcnJpdmFsLmJpbmQodGhpcyksZS5vcGVuKHQpfX0se2tleToic3RvcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9pbnRlcm5hbEFib3J0KCksdGhpcy5fZGlzYWJsZVN0YXRpc3RpY3NSZXBvcnRlcigpfX0se2tleToiX2ludGVybmFsQWJvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faW9jdGwmJih0aGlzLl9pb2N0bC5kZXN0cm95KCksdGhpcy5faW9jdGw9bnVsbCl9fSx7a2V5OiJwYXVzZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9pb2N0bCYmdGhpcy5faW9jdGwuaXNXb3JraW5nKCkmJih0aGlzLl9pb2N0bC5wYXVzZSgpLHRoaXMuX2Rpc2FibGVTdGF0aXN0aWNzUmVwb3J0ZXIoKSl9fSx7a2V5OiJyZXN1bWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faW9jdGwmJnRoaXMuX2lvY3RsLmlzUGF1c2VkKCkmJih0aGlzLl9pb2N0bC5yZXN1bWUoKSx0aGlzLl9lbmFibGVTdGF0aXN0aWNzUmVwb3J0ZXIoKSl9fSx7a2V5OiJzZWVrIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLGk7bnVsbCE9dGhpcy5fbWVkaWFJbmZvJiZ0aGlzLl9tZWRpYUluZm8uaXNTZWVrYWJsZSgpJiYoKHQ9dGhpcy5fc2VhcmNoU2VnbWVudEluZGV4Q29udGFpbnMoZSkpPT09dGhpcy5fY3VycmVudFNlZ21lbnRJbmRleD9udWxsPT0obj10aGlzLl9tZWRpYUluZm8uc2VnbWVudHNbdF0pP3RoaXMuX3BlbmRpbmdTZWVrVGltZT1lOihpPW4uZ2V0TmVhcmVzdEtleWZyYW1lKGUpLHRoaXMuX3JlbXV4ZXIuc2VlayhpLm1pbGxpc2Vjb25kcyksdGhpcy5faW9jdGwuc2VlayhpLmZpbGVwb3NpdGlvbiksdGhpcy5fcGVuZGluZ1Jlc29sdmVTZWVrUG9pbnQ9aS5taWxsaXNlY29uZHMpOm51bGw9PShpPXRoaXMuX21lZGlhSW5mby5zZWdtZW50c1t0XSk/KHRoaXMuX3BlbmRpbmdTZWVrVGltZT1lLHRoaXMuX2ludGVybmFsQWJvcnQoKSx0aGlzLl9yZW11eGVyLnNlZWsoKSx0aGlzLl9yZW11eGVyLmluc2VydERpc2NvbnRpbnVpdHkoKSx0aGlzLl9sb2FkU2VnbWVudCh0KSk6KGk9aS5nZXROZWFyZXN0S2V5ZnJhbWUoZSksdGhpcy5faW50ZXJuYWxBYm9ydCgpLHRoaXMuX3JlbXV4ZXIuc2VlayhlKSx0aGlzLl9yZW11eGVyLmluc2VydERpc2NvbnRpbnVpdHkoKSx0aGlzLl9kZW11eGVyLnJlc2V0TWVkaWFJbmZvKCksdGhpcy5fZGVtdXhlci50aW1lc3RhbXBCYXNlPXRoaXMuX21lZGlhRGF0YVNvdXJjZS5zZWdtZW50c1t0XS50aW1lc3RhbXBCYXNlLHRoaXMuX2xvYWRTZWdtZW50KHQsaS5maWxlcG9zaXRpb24pLHRoaXMuX3BlbmRpbmdSZXNvbHZlU2Vla1BvaW50PWkubWlsbGlzZWNvbmRzLHRoaXMuX3JlcG9ydFNlZ21lbnRNZWRpYUluZm8odCkpLHRoaXMuX2VuYWJsZVN0YXRpc3RpY3NSZXBvcnRlcigpKX19LHtrZXk6Il9zZWFyY2hTZWdtZW50SW5kZXhDb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX21lZGlhRGF0YVNvdXJjZS5zZWdtZW50cyxuPXQubGVuZ3RoLTEsaT0wO2k8dC5sZW5ndGg7aSsrKWlmKGU8dFtpXS50aW1lc3RhbXBCYXNlKXtuPWktMTticmVha31yZXR1cm4gbn19LHtrZXk6Il9vbkluaXRDaHVua0Fycml2YWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG4saT10aGlzLHI9bnVsbDtyZXR1cm4gMDx0Pyh0aGlzLl9kZW11eGVyLmJpbmREYXRhU291cmNlKHRoaXMuX2lvY3RsKSx0aGlzLl9kZW11eGVyLnRpbWVzdGFtcEJhc2U9dGhpcy5fbWVkaWFEYXRhU291cmNlLnNlZ21lbnRzW3RoaXMuX2N1cnJlbnRTZWdtZW50SW5kZXhdLnRpbWVzdGFtcEJhc2UsdGhpcy5fZGVtdXhlci5wYXJzZUNodW5rcyhlLHQpKToocj1jLmRlZmF1bHQucHJvYmUoZSkpLm1hdGNoPyh0aGlzLl9kZW11eGVyPW5ldyBjLmRlZmF1bHQocix0aGlzLl9jb25maWcpLHRoaXMuX3JlbXV4ZXJ8fCh0aGlzLl9yZW11eGVyPW5ldyBfLmRlZmF1bHQodGhpcy5fY29uZmlnKSksbnVsbD09KG49dGhpcy5fbWVkaWFEYXRhU291cmNlKS5kdXJhdGlvbnx8aXNOYU4obi5kdXJhdGlvbil8fCh0aGlzLl9kZW11eGVyLm92ZXJyaWRlZER1cmF0aW9uPW4uZHVyYXRpb24pLCJib29sZWFuIj09dHlwZW9mIG4uaGFzQXVkaW8mJih0aGlzLl9kZW11eGVyLm92ZXJyaWRlZEhhc0F1ZGlvPW4uaGFzQXVkaW8pLCJib29sZWFuIj09dHlwZW9mIG4uaGFzVmlkZW8mJih0aGlzLl9kZW11eGVyLm92ZXJyaWRlZEhhc1ZpZGVvPW4uaGFzVmlkZW8pLHRoaXMuX2RlbXV4ZXIudGltZXN0YW1wQmFzZT1uLnNlZ21lbnRzW3RoaXMuX2N1cnJlbnRTZWdtZW50SW5kZXhdLnRpbWVzdGFtcEJhc2UsdGhpcy5fZGVtdXhlci5vbkVycm9yPXRoaXMuX29uRGVtdXhFeGNlcHRpb24uYmluZCh0aGlzKSx0aGlzLl9kZW11eGVyLm9uTWVkaWFJbmZvPXRoaXMuX29uTWVkaWFJbmZvLmJpbmQodGhpcyksdGhpcy5fZGVtdXhlci5vbk1ldGFEYXRhQXJyaXZlZD10aGlzLl9vbk1ldGFEYXRhQXJyaXZlZC5iaW5kKHRoaXMpLHRoaXMuX2RlbXV4ZXIub25TY3JpcHREYXRhQXJyaXZlZD10aGlzLl9vblNjcmlwdERhdGFBcnJpdmVkLmJpbmQodGhpcyksdGhpcy5fZGVtdXhlci5vblZpZGVvUmVzb2x1dGlvbkNoYW5nZWQ9dGhpcy5fb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VkLmJpbmQodGhpcyksdGhpcy5fZGVtdXhlci5vblBhcnNlZERhdGE9dGhpcy5fb25QYXJzZWREYXRhLmJpbmQodGhpcyksdGhpcy5fcmVtdXhlci5iaW5kRGF0YVNvdXJjZSh0aGlzLl9kZW11eGVyLmJpbmREYXRhU291cmNlKHRoaXMuX2lvY3RsKSksdGhpcy5fcmVtdXhlci5vbkluaXRTZWdtZW50PXRoaXMuX29uUmVtdXhlckluaXRTZWdtZW50QXJyaXZhbC5iaW5kKHRoaXMpLHRoaXMuX3JlbXV4ZXIub25NZWRpYVNlZ21lbnQ9dGhpcy5fb25SZW11eGVyTWVkaWFTZWdtZW50QXJyaXZhbC5iaW5kKHRoaXMpLHRoaXMuX2RlbXV4ZXIucGFyc2VDaHVua3MoZSx0KSk6KHI9bnVsbCxkLmRlZmF1bHQuZSh0aGlzLlRBRywiTm9uLUZMViwgVW5zdXBwb3J0ZWQgbWVkaWEgdHlwZSEiKSxhLmRlZmF1bHQucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtpLl9pbnRlcm5hbEFib3J0KCl9KSx0aGlzLl9lbWl0dGVyLmVtaXQocC5kZWZhdWx0LkRFTVVYX0VSUk9SLGYuZGVmYXVsdC5GT1JNQVRfVU5TVVBQT1JURUQsIk5vbi1GTFYsIFVuc3VwcG9ydGVkIG1lZGlhIHR5cGUiKSwwKX19LHtrZXk6Il9vbk1lZGlhSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztudWxsPT10aGlzLl9tZWRpYUluZm8mJih0aGlzLl9tZWRpYUluZm89KDAsci5kZWZhdWx0KSh7fSxlKSx0aGlzLl9tZWRpYUluZm8ua2V5ZnJhbWVzSW5kZXg9bnVsbCx0aGlzLl9tZWRpYUluZm8uc2VnbWVudHM9W10sdGhpcy5fbWVkaWFJbmZvLnNlZ21lbnRDb3VudD10aGlzLl9tZWRpYURhdGFTb3VyY2Uuc2VnbWVudHMubGVuZ3RoLCgwLGkuZGVmYXVsdCkodGhpcy5fbWVkaWFJbmZvLGguZGVmYXVsdC5wcm90b3R5cGUpKTtlPSgwLHIuZGVmYXVsdCkoe30sZSk7KDAsaS5kZWZhdWx0KShlLGguZGVmYXVsdC5wcm90b3R5cGUpLHRoaXMuX21lZGlhSW5mby5zZWdtZW50c1t0aGlzLl9jdXJyZW50U2VnbWVudEluZGV4XT1lLHRoaXMuX3JlcG9ydFNlZ21lbnRNZWRpYUluZm8odGhpcy5fY3VycmVudFNlZ21lbnRJbmRleCksbnVsbCE9dGhpcy5fcGVuZGluZ1NlZWtUaW1lJiZhLmRlZmF1bHQucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt2YXIgZT10Ll9wZW5kaW5nU2Vla1RpbWU7dC5fcGVuZGluZ1NlZWtUaW1lPW51bGwsdC5zZWVrKGUpfSl9fSx7a2V5OiJfb25NZXRhRGF0YUFycml2ZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2VtaXR0ZXIuZW1pdChwLmRlZmF1bHQuTUVUQURBVEFfQVJSSVZFRCxlKX19LHtrZXk6Il9vblNjcmlwdERhdGFBcnJpdmVkIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lbWl0dGVyLmVtaXQocC5kZWZhdWx0LlNDUklQVERBVEFfQVJSSVZFRCxlKX19LHtrZXk6Il9vbklPU2Vla2VkIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3JlbXV4ZXIuaW5zZXJ0RGlzY29udGludWl0eSgpfX0se2tleToiX29uSU9Db21wbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7ZSs9MTtlPHRoaXMuX21lZGlhRGF0YVNvdXJjZS5zZWdtZW50cy5sZW5ndGg/KHRoaXMuX2ludGVybmFsQWJvcnQoKSx0aGlzLl9yZW11eGVyLmZsdXNoU3Rhc2hlZFNhbXBsZXMoKSx0aGlzLl9sb2FkU2VnbWVudChlKSk6KHRoaXMuX3JlbXV4ZXIuZmx1c2hTdGFzaGVkU2FtcGxlcygpLHRoaXMuX2VtaXR0ZXIuZW1pdChwLmRlZmF1bHQuTE9BRElOR19DT01QTEVURSksdGhpcy5fZGlzYWJsZVN0YXRpc3RpY3NSZXBvcnRlcigpKX19LHtrZXk6Il9vbklPUmVkaXJlY3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2lvY3RsLmV4dHJhRGF0YTt0aGlzLl9tZWRpYURhdGFTb3VyY2Uuc2VnbWVudHNbdF0ucmVkaXJlY3RlZFVSTD1lfX0se2tleToiX29uSU9SZWNvdmVyZWRFYXJseUVvZiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9lbWl0dGVyLmVtaXQocC5kZWZhdWx0LlJFQ09WRVJFRF9FQVJMWV9FT0YpfX0se2tleToiX29uSU9FeGNlcHRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZC5kZWZhdWx0LmUodGhpcy5UQUcsIklPRXhjZXB0aW9uOiB0eXBlID0gIitlKyIsIGNvZGUgPSAiK3QuY29kZSsiLCBtc2cgPSAiK3QubXNnKSx0aGlzLl9lbWl0dGVyLmVtaXQocC5kZWZhdWx0LklPX0VSUk9SLGUsdCksdGhpcy5fZGlzYWJsZVN0YXRpc3RpY3NSZXBvcnRlcigpfX0se2tleToiX29uRGVtdXhFeGNlcHRpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZC5kZWZhdWx0LmUodGhpcy5UQUcsIkRlbXV4RXhjZXB0aW9uOiB0eXBlID0gIitlKyIsIGluZm8gPSAiK3QpLHRoaXMuX2VtaXR0ZXIuZW1pdChwLmRlZmF1bHQuREVNVVhfRVJST1IsZSx0KX19LHtrZXk6Il9vblJlbXV4ZXJJbml0U2VnbWVudEFycml2YWwiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZW1pdHRlci5lbWl0KHAuZGVmYXVsdC5JTklUX1NFR01FTlQsZSx0KX19LHtrZXk6Il9vblJlbXV4ZXJNZWRpYVNlZ21lbnRBcnJpdmFsIix2YWx1ZTpmdW5jdGlvbihlLHQpe251bGw9PXRoaXMuX3BlbmRpbmdTZWVrVGltZSYmKHRoaXMuX2VtaXR0ZXIuZW1pdChwLmRlZmF1bHQuTUVESUFfU0VHTUVOVCxlLHQpLG51bGwhPXRoaXMuX3BlbmRpbmdSZXNvbHZlU2Vla1BvaW50JiYidmlkZW8iPT09ZSYmKGU9dC5pbmZvLnN5bmNQb2ludHMsdD10aGlzLl9wZW5kaW5nUmVzb2x2ZVNlZWtQb2ludCx0aGlzLl9wZW5kaW5nUmVzb2x2ZVNlZWtQb2ludD1udWxsLGwuZGVmYXVsdC5zYWZhcmkmJjA8ZS5sZW5ndGgmJmVbMF0ub3JpZ2luYWxEdHM9PT10JiYodD1lWzBdLnB0cyksdGhpcy5fZW1pdHRlci5lbWl0KHAuZGVmYXVsdC5SRUNPTU1FTkRfU0VFS1BPSU5ULHQpKSl9fSx7a2V5OiJfZW5hYmxlU3RhdGlzdGljc1JlcG9ydGVyIix2YWx1ZTpmdW5jdGlvbigpe251bGw9PXRoaXMuX3N0YXRpc3RpY3NSZXBvcnRlciYmKHRoaXMuX3N0YXRpc3RpY3NSZXBvcnRlcj1zZWxmLnNldEludGVydmFsKHRoaXMuX3JlcG9ydFN0YXRpc3RpY3NJbmZvLmJpbmQodGhpcyksdGhpcy5fY29uZmlnLnN0YXRpc3RpY3NJbmZvUmVwb3J0SW50ZXJ2YWwpKX19LHtrZXk6Il9kaXNhYmxlU3RhdGlzdGljc1JlcG9ydGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3N0YXRpc3RpY3NSZXBvcnRlciYmKHNlbGYuY2xlYXJJbnRlcnZhbCh0aGlzLl9zdGF0aXN0aWNzUmVwb3J0ZXIpLHRoaXMuX3N0YXRpc3RpY3NSZXBvcnRlcj1udWxsKX19LHtrZXk6Il9yZXBvcnRTZWdtZW50TWVkaWFJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtlPXRoaXMuX21lZGlhSW5mby5zZWdtZW50c1tlXSxlPSgwLHIuZGVmYXVsdCkoe30sZSk7ZS5kdXJhdGlvbj10aGlzLl9tZWRpYUluZm8uZHVyYXRpb24sZS5zZWdtZW50Q291bnQ9dGhpcy5fbWVkaWFJbmZvLnNlZ21lbnRDb3VudCxkZWxldGUgZS5zZWdtZW50cyxkZWxldGUgZS5rZXlmcmFtZXNJbmRleCx0aGlzLl9lbWl0dGVyLmVtaXQocC5kZWZhdWx0Lk1FRElBX0lORk8sZSl9fSx7a2V5OiJfcmVwb3J0U3RhdGlzdGljc0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e307ZS51cmw9dGhpcy5faW9jdGwuY3VycmVudFVSTCxlLmhhc1JlZGlyZWN0PXRoaXMuX2lvY3RsLmhhc1JlZGlyZWN0LGUuaGFzUmVkaXJlY3QmJihlLnJlZGlyZWN0ZWRVUkw9dGhpcy5faW9jdGwuY3VycmVudFJlZGlyZWN0ZWRVUkwpLGUuc3BlZWQ9dGhpcy5faW9jdGwuY3VycmVudFNwZWVkLGUubG9hZGVyVHlwZT10aGlzLl9pb2N0bC5sb2FkZXJUeXBlLGUuY3VycmVudFNlZ21lbnRJbmRleD10aGlzLl9jdXJyZW50U2VnbWVudEluZGV4LGUudG90YWxTZWdtZW50Q291bnQ9dGhpcy5fbWVkaWFEYXRhU291cmNlLnNlZ21lbnRzLmxlbmd0aCxlLmJwc19hdWRpbz1lLmJwc192aWRlbz0wLHRoaXMuX2RlbXV4ZXImJnRoaXMuX2RlbXV4ZXIuX2Jwc0luZm8mJihlLmJwc192aWRlbz10aGlzLl9kZW11eGVyLl9icHNJbmZvLmJwc192aWRlbyxlLmJwc19hdWRpbz10aGlzLl9kZW11eGVyLl9icHNJbmZvLmJwc19hdWRpbyksdGhpcy5fZW1pdHRlci5lbWl0KHAuZGVmYXVsdC5TVEFUSVNUSUNTX0lORk8sZSl9fSx7a2V5OiJfb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VkIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lbWl0dGVyLmVtaXQocC5kZWZhdWx0LlZJREVPX1JFU09MVVRJT05fQ0hBTkdFRCxlKX19LHtrZXk6Il9vblBhcnNlZERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZW1pdHRlci5lbWl0KHAuZGVmYXVsdC5QQVJTRUREQVRBX0FSUklWRUQsZSx0KX19XSksbz12O2Z1bmN0aW9uIHYodCxuKXsoMCxzLmRlZmF1bHQpKHRoaXMsdiksdGhpcy5UQUc9IlRyYW5zbXV4aW5nQ29udHJvbGxlciIsdGhpcy5fZW1pdHRlcj1uZXcgdS5kZWZhdWx0LHRoaXMuX2NvbmZpZz1uLHQuc2VnbWVudHN8fCh0LnNlZ21lbnRzPVt7ZHVyYXRpb246dC5kdXJhdGlvbixmaWxlc2l6ZTp0LmZpbGVzaXplLHVybDp0LnVybH1dKSwiYm9vbGVhbiIhPXR5cGVvZiB0LmNvcnMmJih0LmNvcnM9ITApLCJib29sZWFuIiE9dHlwZW9mIHQud2l0aENyZWRlbnRpYWxzJiYodC53aXRoQ3JlZGVudGlhbHM9ITEpLHRoaXMuX21lZGlhRGF0YVNvdXJjZT10O3ZhciBpPXRoaXMuX2N1cnJlbnRTZWdtZW50SW5kZXg9MDt0aGlzLl9tZWRpYURhdGFTb3VyY2Uuc2VnbWVudHMuZm9yRWFjaChmdW5jdGlvbihlKXtlLnRpbWVzdGFtcEJhc2U9aSxpKz1lLmR1cmF0aW9uLGUuY29ycz10LmNvcnMsZS53aXRoQ3JlZGVudGlhbHM9dC53aXRoQ3JlZGVudGlhbHMsbi5yZWZlcnJlclBvbGljeSYmKGUucmVmZXJyZXJQb2xpY3k9bi5yZWZlcnJlclBvbGljeSl9KSxpc05hTihpKXx8dGhpcy5fbWVkaWFEYXRhU291cmNlLmR1cmF0aW9uPT09aXx8KHRoaXMuX21lZGlhRGF0YVNvdXJjZS5kdXJhdGlvbj1pKSx0aGlzLl9tZWRpYUluZm89bnVsbCx0aGlzLl9kZW11eGVyPW51bGwsdGhpcy5fcmVtdXhlcj1udWxsLHRoaXMuX2lvY3RsPW51bGwsdGhpcy5fcGVuZGluZ1NlZWtUaW1lPW51bGwsdGhpcy5fcGVuZGluZ1Jlc29sdmVTZWVrUG9pbnQ9bnVsbCx0aGlzLl9zdGF0aXN0aWNzUmVwb3J0ZXI9bnVsbH10LmRlZmF1bHQ9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NZWRpYVNlZ21lbnRJbmZvTGlzdD10LklEUlNhbXBsZUxpc3Q9dC5NZWRpYVNlZ21lbnRJbmZvPXQuU2FtcGxlSW5mbz12b2lkIDA7dmFyIGk9cihuKDIpKSxzPXIobigxKSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5TYW1wbGVJbmZvPWZ1bmN0aW9uIGUodCxuLGkscixhKXsoMCxzLmRlZmF1bHQpKHRoaXMsZSksdGhpcy5kdHM9dCx0aGlzLnB0cz1uLHRoaXMuZHVyYXRpb249aSx0aGlzLm9yaWdpbmFsRHRzPXIsdGhpcy5pc1N5bmNQb2ludD1hLHRoaXMuZmlsZXBvc2l0aW9uPW51bGx9LHQuTWVkaWFTZWdtZW50SW5mbz0oKDAsaS5kZWZhdWx0KShhLFt7a2V5OiJhcHBlbmRTeW5jUG9pbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2UuaXNTeW5jUG9pbnQ9ITAsdGhpcy5zeW5jUG9pbnRzLnB1c2goZSl9fV0pLGEpO2Z1bmN0aW9uIGEoKXsoMCxzLmRlZmF1bHQpKHRoaXMsYSksdGhpcy5iZWdpbkR0cz0wLHRoaXMuZW5kRHRzPTAsdGhpcy5iZWdpblB0cz0wLHRoaXMuZW5kUHRzPTAsdGhpcy5vcmlnaW5hbEJlZ2luRHRzPTAsdGhpcy5vcmlnaW5hbEVuZER0cz0wLHRoaXMuc3luY1BvaW50cz1bXSx0aGlzLmZpcnN0U2FtcGxlPW51bGwsdGhpcy5sYXN0U2FtcGxlPW51bGx9dC5JRFJTYW1wbGVMaXN0PSgoMCxpLmRlZmF1bHQpKG8sW3trZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xpc3Q9W119fSx7a2V5OiJhcHBlbmRBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbGlzdDswIT09ZS5sZW5ndGgmJigwPHQubGVuZ3RoJiZlWzBdLm9yaWdpbmFsRHRzPHRbdC5sZW5ndGgtMV0ub3JpZ2luYWxEdHMmJnRoaXMuY2xlYXIoKSxBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0LGUpKX19LHtrZXk6ImdldExhc3RTeW5jUG9pbnRCZWZvcmVEdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDA9PXRoaXMuX2xpc3QubGVuZ3RoKXJldHVybiBudWxsO3ZhciB0LG49dGhpcy5fbGlzdCxpPTAscj1uLmxlbmd0aC0xLGE9MCxzPXI7Zm9yKGU8blswXS5kdHMmJihpPTAsYT1zKzEpO2E8PXM7KXtpZigodD1hK01hdGguZmxvb3IoKHMtYSkvMikpPT09cnx8ZT49blt0XS5kdHMmJmU8blt0KzFdLmR0cyl7aT10O2JyZWFrfW5bdF0uZHRzPGU/YT10KzE6cz10LTF9cmV0dXJuIHRoaXMuX2xpc3RbaV19fV0pLG8pO2Z1bmN0aW9uIG8oKXsoMCxzLmRlZmF1bHQpKHRoaXMsbyksdGhpcy5fbGlzdD1bXX10Lk1lZGlhU2VnbWVudEluZm9MaXN0PSgoMCxpLmRlZmF1bHQpKHUsW3trZXk6ImlzRW1wdHkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLl9saXN0Lmxlbmd0aH19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xpc3Q9W10sdGhpcy5fbGFzdEFwcGVuZExvY2F0aW9uPS0xfX0se2tleToiX3NlYXJjaE5lYXJlc3RTZWdtZW50QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9saXN0O2lmKDA9PT10Lmxlbmd0aClyZXR1cm4tMjt2YXIgbixpPXQubGVuZ3RoLTEscj0wLGE9aSxzPTA7aWYoZTx0WzBdLm9yaWdpbmFsQmVnaW5EdHMpcmV0dXJuIHM9LTE7Zm9yKDtyPD1hOyl7aWYoKG49citNYXRoLmZsb29yKChhLXIpLzIpKT09PWl8fGU+dFtuXS5sYXN0U2FtcGxlLm9yaWdpbmFsRHRzJiZlPHRbbisxXS5vcmlnaW5hbEJlZ2luRHRzKXtzPW47YnJlYWt9dFtuXS5vcmlnaW5hbEJlZ2luRHRzPGU/cj1uKzE6YT1uLTF9cmV0dXJuIHN9fSx7a2V5OiJfc2VhcmNoTmVhcmVzdFNlZ21lbnRBZnRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3NlYXJjaE5lYXJlc3RTZWdtZW50QmVmb3JlKGUpKzF9fSx7a2V5OiJhcHBlbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2xpc3Qsbj1lLGk9dGhpcy5fbGFzdEFwcGVuZExvY2F0aW9uLGU9MDstMSE9PWkmJmk8dC5sZW5ndGgmJm4ub3JpZ2luYWxCZWdpbkR0cz49dFtpXS5sYXN0U2FtcGxlLm9yaWdpbmFsRHRzJiYoaT09PXQubGVuZ3RoLTF8fGk8dC5sZW5ndGgtMSYmbi5vcmlnaW5hbEJlZ2luRHRzPHRbaSsxXS5vcmlnaW5hbEJlZ2luRHRzKT9lPWkrMTowPHQubGVuZ3RoJiYoZT10aGlzLl9zZWFyY2hOZWFyZXN0U2VnbWVudEJlZm9yZShuLm9yaWdpbmFsQmVnaW5EdHMpKzEpLHRoaXMuX2xhc3RBcHBlbmRMb2NhdGlvbj1lLHRoaXMuX2xpc3Quc3BsaWNlKGUsMCxuKX19LHtrZXk6ImdldExhc3RTZWdtZW50QmVmb3JlIix2YWx1ZTpmdW5jdGlvbihlKXtlPXRoaXMuX3NlYXJjaE5lYXJlc3RTZWdtZW50QmVmb3JlKGUpO3JldHVybiAwPD1lP3RoaXMuX2xpc3RbZV06bnVsbH19LHtrZXk6ImdldExhc3RTYW1wbGVCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9dGhpcy5nZXRMYXN0U2VnbWVudEJlZm9yZShlKTtyZXR1cm4gbnVsbCE9ZT9lLmxhc3RTYW1wbGU6bnVsbH19LHtrZXk6ImdldExhc3RTeW5jUG9pbnRCZWZvcmUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLl9zZWFyY2hOZWFyZXN0U2VnbWVudEJlZm9yZShlKSxuPXRoaXMuX2xpc3RbdF0uc3luY1BvaW50czswPT09bi5sZW5ndGgmJjA8dDspbj10aGlzLl9saXN0Wy0tdF0uc3luY1BvaW50cztyZXR1cm4gMDxuLmxlbmd0aD9uW24ubGVuZ3RoLTFdOm51bGx9fSx7a2V5OiJ0eXBlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZX19LHtrZXk6Imxlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xpc3QubGVuZ3RofX1dKSx1KTtmdW5jdGlvbiB1KGUpeygwLHMuZGVmYXVsdCkodGhpcyx1KSx0aGlzLl90eXBlPWUsdGhpcy5fbGlzdD1bXSx0aGlzLl9sYXN0QXBwZW5kTG9jYXRpb249LTF9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTtyKG4oNikpO3ZhciBvPXIobig3MykpLGk9cihuKDIzOCkpLHU9cihuKDI0MCkpLGQ9cihuKDQ0KSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dC5kZWZhdWx0PWZ1bmN0aW9uKHIpe3ZhciBhPW51bGwscz1mdW5jdGlvbihlLHQpe3IucG9zdE1lc3NhZ2Uoe21zZzoibG9nY2F0X2NhbGxiYWNrIixkYXRhOnt0eXBlOmUsbG9nY2F0OnR9fSl9LmJpbmQodGhpcyk7aS5kZWZhdWx0Lmluc3RhbGwoKSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGUpe3N3aXRjaChlLmRhdGEuY21kKXtjYXNlImluaXQiOihhPW5ldyB1LmRlZmF1bHQoZS5kYXRhLnBhcmFtWzBdLGUuZGF0YS5wYXJhbVsxXSkpLm9uKGQuZGVmYXVsdC5JT19FUlJPUixmdW5jdGlvbihlLHQpe3IucG9zdE1lc3NhZ2Uoe21zZzpkLmRlZmF1bHQuSU9fRVJST1IsZGF0YTp7dHlwZTplLGluZm86dH19KX0uYmluZCh0aGlzKSksYS5vbihkLmRlZmF1bHQuREVNVVhfRVJST1IsZnVuY3Rpb24oZSx0KXtyLnBvc3RNZXNzYWdlKHttc2c6ZC5kZWZhdWx0LkRFTVVYX0VSUk9SLGRhdGE6e3R5cGU6ZSxpbmZvOnR9fSl9LmJpbmQodGhpcykpLGEub24oZC5kZWZhdWx0LklOSVRfU0VHTUVOVCxmdW5jdGlvbihlLHQpe2U9e21zZzpkLmRlZmF1bHQuSU5JVF9TRUdNRU5ULGRhdGE6e3R5cGU6ZSxkYXRhOnR9fTtyLnBvc3RNZXNzYWdlKGUsW3QuZGF0YV0pfS5iaW5kKHRoaXMpKSxhLm9uKGQuZGVmYXVsdC5NRURJQV9TRUdNRU5ULGZ1bmN0aW9uKGUsdCl7ZT17bXNnOmQuZGVmYXVsdC5NRURJQV9TRUdNRU5ULGRhdGE6e3R5cGU6ZSxkYXRhOnR9fTtyLnBvc3RNZXNzYWdlKGUsW3QuZGF0YV0pfS5iaW5kKHRoaXMpKSxhLm9uKGQuZGVmYXVsdC5MT0FESU5HX0NPTVBMRVRFLGZ1bmN0aW9uKCl7dmFyIGU9e21zZzpkLmRlZmF1bHQuTE9BRElOR19DT01QTEVURX07ci5wb3N0TWVzc2FnZShlKX0uYmluZCh0aGlzKSksYS5vbihkLmRlZmF1bHQuUkVDT1ZFUkVEX0VBUkxZX0VPRixmdW5jdGlvbigpe3ZhciBlPXttc2c6ZC5kZWZhdWx0LlJFQ09WRVJFRF9FQVJMWV9FT0Z9O3IucG9zdE1lc3NhZ2UoZSl9LmJpbmQodGhpcykpLGEub24oZC5kZWZhdWx0Lk1FRElBX0lORk8sZnVuY3Rpb24oZSl7ZT17bXNnOmQuZGVmYXVsdC5NRURJQV9JTkZPLGRhdGE6ZX07ci5wb3N0TWVzc2FnZShlKX0uYmluZCh0aGlzKSksYS5vbihkLmRlZmF1bHQuTUVUQURBVEFfQVJSSVZFRCxmdW5jdGlvbihlKXtlPXttc2c6ZC5kZWZhdWx0Lk1FVEFEQVRBX0FSUklWRUQsZGF0YTplfTtyLnBvc3RNZXNzYWdlKGUpfS5iaW5kKHRoaXMpKSxhLm9uKGQuZGVmYXVsdC5TQ1JJUFREQVRBX0FSUklWRUQsZnVuY3Rpb24oZSl7ZT17bXNnOmQuZGVmYXVsdC5TQ1JJUFREQVRBX0FSUklWRUQsZGF0YTplfTtyLnBvc3RNZXNzYWdlKGUpfS5iaW5kKHRoaXMpKSxhLm9uKGQuZGVmYXVsdC5TVEFUSVNUSUNTX0lORk8sZnVuY3Rpb24oZSl7ZT17bXNnOmQuZGVmYXVsdC5TVEFUSVNUSUNTX0lORk8sZGF0YTplfTtyLnBvc3RNZXNzYWdlKGUpfS5iaW5kKHRoaXMpKSxhLm9uKGQuZGVmYXVsdC5SRUNPTU1FTkRfU0VFS1BPSU5ULGZ1bmN0aW9uKGUpe3IucG9zdE1lc3NhZ2Uoe21zZzpkLmRlZmF1bHQuUkVDT01NRU5EX1NFRUtQT0lOVCxkYXRhOmV9KX0uYmluZCh0aGlzKSksYS5vbihkLmRlZmF1bHQuVklERU9fUkVTT0xVVElPTl9DSEFOR0VELGZ1bmN0aW9uKGUpe2U9e21zZzpkLmRlZmF1bHQuVklERU9fUkVTT0xVVElPTl9DSEFOR0VELGRhdGE6ZX07ci5wb3N0TWVzc2FnZShlKX0uYmluZCh0aGlzKSksYS5vbihkLmRlZmF1bHQuUEFSU0VEREFUQV9BUlJJVkVELGZ1bmN0aW9uKGUsdCl7dD17bXNnOmQuZGVmYXVsdC5QQVJTRUREQVRBX0FSUklWRUQsZGF0YTp7ZGF0YWJ1ZjplLGRhdGFUeXBlOnR9fTtyLnBvc3RNZXNzYWdlKHQpfS5iaW5kKHRoaXMpKTticmVhaztjYXNlImRlc3Ryb3kiOmEmJihhLmRlc3Ryb3koKSxhPW51bGwpLHIucG9zdE1lc3NhZ2Uoe21zZzoiZGVzdHJveWVkIn0pO2JyZWFrO2Nhc2Uic3RhcnQiOmEuc3RhcnQoKTticmVhaztjYXNlInN0b3AiOmEuc3RvcCgpO2JyZWFrO2Nhc2Uic2VlayI6YS5zZWVrKGUuZGF0YS5wYXJhbSk7YnJlYWs7Y2FzZSJwYXVzZSI6YS5wYXVzZSgpO2JyZWFrO2Nhc2UicmVzdW1lIjphLnJlc3VtZSgpO2JyZWFrO2Nhc2UibG9nZ2luZ19jb25maWciOnZhciB0PWUuZGF0YS5wYXJhbTtvLmRlZmF1bHQuYXBwbHlDb25maWcodCksITA9PT10LmVuYWJsZUNhbGxiYWNrP28uZGVmYXVsdC5hZGRMb2dMaXN0ZW5lcihzKTpvLmRlZmF1bHQucmVtb3ZlTG9nTGlzdGVuZXIocyk7YnJlYWs7Y2FzZSJmZWVkIjp2YXIgbj1lLmRhdGEuZmVlZERhdGEsaT1uLmRhdGEsdD1uLmJ5dGVTdGFydCxuPW4ucmVjZWl2ZWRMZW5ndGg7YS5faW9jdGwuX29uTG9hZGVyQ2h1bmtBcnJpdmFsKGksdCxuKTticmVhaztjYXNlInNldF9yZWNvcmRfZmxhZyI6YS5fZGVtdXhlci5yZWNvcmRGbGFnPWUuZGF0YS52YWx1ZTticmVhaztjYXNlImNsZWFuY2FjaGUiOmEuX2lvY3RsLl9mbHVzaFN0YXNoQnVmZmVyKCEwKX19KX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3QuZGVmYXVsdD17RVJST1I6ImVycm9yIixTT1VSQ0VfT1BFTjoic291cmNlX29wZW4iLFVQREFURV9FTkQ6InVwZGF0ZV9lbmQiLEJVRkZFUl9GVUxMOiJidWZmZXJfZnVsbCIsU09VUkNFX0VORDoic291cmNlX2VuZCIsU09VUkNFX0NMT1NFOiJzb3VyY2VfY2xvc2UiLFNPVVJDRV9BRERfRVJST1I6InNvdXJjZV9hZGRfZXJyb3IifX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9byhuKDEpKSxyPW8obigyKSksYT1vKG4oMTMpKSxzPWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKDcwKSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIHU9InN0YXNoYnVmZmVyX2NoYW5nZWQiLGQ9ImZpbGVXcml0ZV9lbmQiO3dpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbT13aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW18fHdpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbTsoMCxyLmRlZmF1bHQpKGwsW3trZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGFzaChlKX19LHtrZXk6ImRvd25sb2FkIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2ZpbGVFbnRyeSYmdGhpcy5fZmlsZVdyaXRlciYmKDEhPT10aGlzLl9maWxlV3JpdGVyLnJlYWR5U3RhdGU/dGhpcy5fZmlsZUVudHJ5LmZpbGUoZnVuY3Rpb24oZSl7dGhpcy5fZG93bmxvYWRGaWxlKGUpfS5iaW5kKHRoaXMpKTp0aGlzLl9lbWl0dGVyLm9uY2UoZCx0aGlzLmRvd25sb2FkLmFwcGx5KHRoaXMpKSl9fSx7a2V5OiJfcXVvdGEiLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LndlYmtpdFN0b3JhZ2VJbmZvLnJlcXVlc3RRdW90YSh3aW5kb3cuVEVNUE9SQVJZLHRoaXMuX3N0b3JhZ2VRdW90YSx0aGlzLl9xdW90YVN1Y2Nlc3MuYmluZCh0aGlzKSx0aGlzLl9lcnJvckhhbmRsZXJRdXRhKX19LHtrZXk6Il9lcnJvckhhbmRsZXJRdW90YSIsdmFsdWU6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihzLkVSUl9QTEFZX0ZJTEVTWVNfUVVPVEEsZSl9fSx7a2V5OiJfcXVvdGFTdWNjZXNzIix2YWx1ZTpmdW5jdGlvbihlKXt3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0od2luZG93LlRFTVBPUkFSWSxlLHRoaXMuX2luaXRGcy5iaW5kKHRoaXMpLHRoaXMuX2Vycm9ySGFuZGxlclJlcXVlc3RGaWxlU3lzdGVtKX19LHtrZXk6Il9lcnJvckhhbmRsZXJSZXF1ZXN0RmlsZVN5c3RlbSIsdmFsdWU6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihzLkVSUl9QTEFZX0ZJTEVTWVNfUkVRVUVTVCxlKX19LHtrZXk6Il9pbml0RnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2ZpbGVTeXN0ZW09ZSx0aGlzLl9maWxlU3lzdGVtLnJvb3QuZ2V0RmlsZSh0aGlzLl9maWxlTmFtZSx7Y3JlYXRlOiEwLGV4Y2x1c2l2ZTohMH0sdGhpcy5fZ2V0RmlsZVN1Y2Nlc3MuYmluZCh0aGlzKSx0aGlzLl9lcnJvckhhbmRsZXJHZXRGaWxlKX19LHtrZXk6Il9lcnJvckhhbmRsZXJHZXRGaWxlIix2YWx1ZTpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKHMuRVJSX1BMQVlfRklMRVNZU19HRVRGSUxFLGUpfX0se2tleToiX2dldEZpbGVTdWNjZXNzIix2YWx1ZTpmdW5jdGlvbihlKXtlLmlzRmlsZSYmKGUuY3JlYXRlV3JpdGVyKHRoaXMuX2luaXRGaWxlV3JpdGVyLmJpbmQodGhpcyksdGhpcy5fZXJyb3JIYW5kbGVyQ3JlYXRlV3JpdGVyKSx0aGlzLl9maWxlRW50cnk9ZSl9fSx7a2V5OiJfZXJyb3JIYW5kbGVyQ3JlYXRlV3JpdGVyIix2YWx1ZTpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKHMuRVJSX1BMQVlfRklMRVNZU19DUkVBVEUsZSl9fSx7a2V5OiJfaW5pdEZpbGVXcml0ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Uub253cml0ZWVuZD10aGlzLl9maWxlV3JpdGVFbmQuYmluZCh0aGlzKSxlLm9uZXJyb3I9dGhpcy5fZmlsZVdyaXRlRXJyb3IuYmluZCh0aGlzKSx0aGlzLl9maWxlV3JpdGVyPWUsdGhpcy5faXNTdGFydD0hMCx0aGlzLl9lbWl0dGVyLm9uKHUsdGhpcy5fc3Rhc2hCdWZmZXJDaGFuZ2VkLmJpbmQodGhpcykpfX0se2tleToiX3N0YXNoQnVmZmVyQ2hhbmdlZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZTsoMD09PXRoaXMuX2ZpbGVXcml0ZXIucmVhZHlTdGF0ZXx8Mj09PXRoaXMuX2ZpbGVXcml0ZXIucmVhZHlTdGF0ZSkmJjA8dGhpcy5fc3Rhc2hVc2VkJiYodGhpcy5fZmlsZVdyaXRlci5zZWVrKHRoaXMuX2ZpbGVXcml0ZXIubGVuZ3RoKSxlPXRoaXMuX3N0YXNoQnVmZmVyLnNsaWNlKDAsdGhpcy5fc3Rhc2hVc2VkKSx0aGlzLl9maWxlV3JpdGVyLndyaXRlKG5ldyBCbG9iKFtlXSkpLHRoaXMuX2J1ZmZlclNpemU9dGhpcy5fZGVmYXVsdEJ1ZmZlclNpemUsdGhpcy5fc3Rhc2hCdWZmZXI9bmV3IFVpbnQ4QXJyYXkodGhpcy5fYnVmZmVyU2l6ZSksdGhpcy5fc3Rhc2hVc2VkPTApfX0se2tleToiX2ZpbGVXcml0ZUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZW1pdHRlci5saXN0ZW5lcnMoZCkmJnRoaXMuX2VtaXR0ZXIuZW1pdChkKX19LHtrZXk6Il9maWxlV3JpdGVFcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7Y29uc29sZS5lcnJvcihzLkVSUl9QTEFZX0ZJTEVTWVNfV1JJVEUsZSl9fSx7a2V5OiJfZXJyb3JIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfX0se2tleToiX3N0YXNoIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGFzaFVzZWQrZS5ieXRlTGVuZ3RoPnRoaXMuX2J1ZmZlclNpemUmJnRoaXMuX2V4cGFuZEJ1ZmZlcih0aGlzLl9zdGFzaFVzZWQrZS5ieXRlTGVuZ3RoKSx0aGlzLl9zdGFzaEJ1ZmZlci5zZXQobmV3IFVpbnQ4QXJyYXkoZSksdGhpcy5fc3Rhc2hVc2VkKSx0aGlzLl9zdGFzaFVzZWQrPWUuYnl0ZUxlbmd0aCx0aGlzLl9lbWl0dGVyLmxpc3RlbmVycyh1KSYmdGhpcy5fZW1pdHRlci5lbWl0KHUpfX0se2tleToiX2V4cGFuZEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fYnVmZmVyU2l6ZT1lO2U9dGhpcy5fc3Rhc2hCdWZmZXIuc2xpY2UoMCx0aGlzLl9zdGFzaFVzZWQpO3RoaXMuX3N0YXNoQnVmZmVyPW5ldyBVaW50OEFycmF5KHRoaXMuX2J1ZmZlclNpemUpLHRoaXMuX3N0YXNoQnVmZmVyLnNldChlLDApfX0se2tleToiX2Rvd25sb2FkRmlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtlIGluc3RhbmNlb2YgQmxvYnx8ZSBpbnN0YW5jZW9mIEZpbGV8fCh0PW5ldyBCbG9iKFtlXSkpO2U9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwodCksdD13aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3QuaHJlZj1lLHQuZG93bmxvYWQ9dGhpcy5fZmlsZU5hbWU7ZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTtlLmluaXRFdmVudCgiY2xpY2siLCEwLCEwKSx0LmRpc3BhdGNoRXZlbnQoZSl9fSx7a2V5OiJvblJlYWR5IixzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fZmlsZVdyaXRlclJlYWR5PWV9fV0pLHI9bDtmdW5jdGlvbiBsKGUsdCl7KDAsaS5kZWZhdWx0KSh0aGlzLGwpLHRoaXMuX2ZpbGVOYW1lPWUsdGhpcy5fc3RvcmFnZVF1b3RhPTI2ODQzNTQ1Nix0aGlzLl9maWxlU3lzdGVtPW51bGwsdGhpcy5fZmlsZUVudHJ5PW51bGwsdGhpcy5fZmlsZVdyaXRlcj1udWxsLHRoaXMuX2lzU3RhcnQ9ITEsdGhpcy5fZW1pdHRlcj1uZXcgYS5kZWZhdWx0LHRoaXMuX2RlZmF1bHRCdWZmZXJTaXplPTEzNDIxNzcyOCx0aGlzLl9idWZmZXJTaXplPXRoaXMuX2RlZmF1bHRCdWZmZXJTaXplLHRoaXMuX3N0YXNoQnVmZmVyPW5ldyBVaW50OEFycmF5KHRoaXMuX2J1ZmZlclNpemUpLHRoaXMuX3N0YXNoVXNlZD0wLHRoaXMuX3N0YXNoKHQpLHRoaXMuX3F1b3RhKCl9dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRXJyb3JEZXRhaWxzPXQuRXJyb3JUeXBlcz12b2lkIDA7dmFyIGkscj1uKDE3KSxhPW4oNzUpLG49KGk9YSkmJmkuX19lc01vZHVsZT9pOntkZWZhdWx0Oml9O3QuRXJyb3JUeXBlcz17TkVUV09SS19FUlJPUjoiTmV0d29ya0Vycm9yIixNRURJQV9FUlJPUjoiTWVkaWFFcnJvciIsT1RIRVJfRVJST1I6Ik90aGVyRXJyb3IifSx0LkVycm9yRGV0YWlscz17TkVUV09SS19FWENFUFRJT046ci5Mb2FkZXJFcnJvcnMuRVhDRVBUSU9OLE5FVFdPUktfU1RBVFVTX0NPREVfSU5WQUxJRDpyLkxvYWRlckVycm9ycy5IVFRQX1NUQVRVU19DT0RFX0lOVkFMSUQsTkVUV09SS19USU1FT1VUOnIuTG9hZGVyRXJyb3JzLkNPTk5FQ1RJTkdfVElNRU9VVCxORVRXT1JLX1VOUkVDT1ZFUkFCTEVfRUFSTFlfRU9GOnIuTG9hZGVyRXJyb3JzLlVOUkVDT1ZFUkFCTEVfRUFSTFlfRU9GLE1FRElBX01TRV9FUlJPUjoiTWVkaWFNU0VFcnJvciIsTUVESUFfRk9STUFUX0VSUk9SOm4uZGVmYXVsdC5GT1JNQVRfRVJST1IsTUVESUFfRk9STUFUX1VOU1VQUE9SVEVEOm4uZGVmYXVsdC5GT1JNQVRfVU5TVVBQT1JURUQsTUVESUFfQ09ERUNfVU5TVVBQT1JURUQ6bi5kZWZhdWx0LkNPREVDX1VOU1VQUE9SVEVEfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KU1BsdWdpbj12b2lkIDA7dmFyIGY9cihuKDE0KSksbT1yKG4oOTEpKSxwPXIobig2MSkpLHk9cihuKDYyKSkscz1yKG4oMSkpLGk9cihuKDIpKSx2PXIobig2MykpLGc9big5Myksbz1uKDI2NyksZD1uKDI4OCksbD1uKDI4OSksdT1uKDMwNyksaD1uKDMwOCksYz1uKDMwOSksXz1yKG4oMzEwKSksTT1yKG4oMTMpKSxMPWZ1bmN0aW9uKGUpe3tpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHQ9e307aWYobnVsbCE9ZSlmb3IodmFyIG4gaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxuKSYmKHRbbl09ZVtuXSk7cmV0dXJuIHQuZGVmYXVsdD1lLHR9fShuKDcwKSksUz1yKG4oMzU0KSksaz1yKG4oOTkpKSxiPXIobig0MykpLHc9bigzNTUpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBEPTQxOTQzMDQsVD0hMSxFPW51bGwsWT1bXTt3aW5kb3cuSlNQbGF5TTRfQWRkaXRpb25EYXRhQ0JGdW49ZnVuY3Rpb24odCxlKXt2YXIgbixpLHIsYT1ZLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUucG9ydD09PXR9KS5iZWxvbmdXaW5kb3dwb2ludCxzPVkuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5wb3J0PT09dH0pLmJlbG9uZ1dpbmRvd0lkLG89YS5hV25kTGlzdFtzXTtvJiZvLkFkZGl0aW9uRGF0YUNCJiYobj1FLkhFQVAzMltlPj4yXSxpPUUuSEVBUDMyW2UrND4+Ml0scj1FLkhFQVAzMltlKzg+PjJdLGE9RS5IRUFQMzJbZSsxMj4+Ml0scz1FLkhFQVAzMltlKzE2Pj4yXSwoZT1uZXcgVWludDhBcnJheShhKSkuc2V0KEUuSEVBUFU4LnN1YmFycmF5KHMscythKSksby5BZGRpdGlvbkRhdGFDQihuLGkscixlKSl9O3ZhciBhLGk9KCgwLGkuZGVmYXVsdCkoUCxbe2tleToiX2dldE9TRFRpbWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkscixhLHMpe3ZhciBvPXZvaWQgMCxvPSJpb3MiPT09dGhpcy5fYnJvd3NlckluZm8uX3N5c3RlbXx8Zy5vVG9vbC5pc0VkZ2UoKT90KyIvIituKyIvIitpKyIgIityKyI6IithKyI6IitzOnQrIi0iK24rIi0iK2krIiAiK3IrIjoiK2ErIjoiK3M7dGhpcy5hV25kTGlzdFtlXS5pQ3VyZW50T1NEVGltZT1uZXcgRGF0ZShvKS5nZXRUaW1lKCl9fSx7a2V5OiJfZ2V0V25kSW5kZXhGcm9tUG9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuYVduZExpc3QubGVuZ3RoLG49LTEsaT0wO2k8dDtpKyspaWYodGhpcy5hV25kTGlzdFtpXS5vUGxheUN0cmwmJmU9PT10aGlzLmFXbmRMaXN0W2ldLm9QbGF5Q3RybC5pUG9ydCl7bj1pO2JyZWFrfXJldHVybiBufX0se2tleToiX2xpc3RlbkJyb3dzZXJWaXNpYmlsaXR5Iix2YWx1ZTpmdW5jdGlvbigpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuZS52aXNpYmlsaXR5Y2hhbmdlKX19LHtrZXk6Il9jcmVhdGVXaW5kb3dzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBpPXRoaXMsZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm9wdGlvbnMuc3pJZCksdD1lLmNsaWVudFdpZHRoLG49ZS5jbGllbnRIZWlnaHQ7dCYmbnx8KCgwLHYuZGVmYXVsdCkoZSkud2lkdGgodGhpcy5vcHRpb25zLmlXaWR0aCksKDAsdi5kZWZhdWx0KShlKS5oZWlnaHQodGhpcy5vcHRpb25zLmlIZWlnaHQpKSwyNWU0PHQqbiYmKHRoaXMuYmNsb3NlQW50aWFsaWFzPSEwKTt2YXIgbj10aGlzLm9wdGlvbnMub1N0eWxlLHI9bi5ib3JkZXJXaWR0aCxhPW4uYm9yZGVyLHM9bi5ib3JkZXJTZWxlY3Qsbz1uLmJhY2tncm91bmQsdT10aGlzLm9wdGlvbnMuaUN1cnJlbnRTcGxpdDtlLmlubmVySFRNTD0iIjt2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmNsYXNzTmFtZT0icGFyZW50LXduZCIsZC5zdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgcG9zaXRpb246IHJlbGF0aXZlOyBvdmVyZmxvdzogaGlkZGVuOyIsZS5hcHBlbmRDaGlsZChkKTtmb3IodmFyIG49ZC5jbGllbnRXaWR0aCxlPWQuY2xpZW50SGVpZ2h0LGw9TWF0aC5mbG9vcigobi0xKS91KSxoPU1hdGguZmxvb3IoKGUtMSkvdSksZT1wYXJzZUZsb2F0KCh3aW5kb3cuc2NyZWVuLndpZHRoL3dpbmRvdy5pbm5lcldpZHRoKS50b0ZpeGVkKDIpKSxjPU1hdGguZmxvb3IobC1yL2UqMiksXz1NYXRoLmZsb29yKGgtci9lKjIpLGY9MDtmPHRoaXMuaU1heFduZE51bTtmKyspIWZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3QuY2xhc3NOYW1lPSJzdWItd25kIix0LmlkPSJwbGF5ZXItY29udGFpbmVyLSIrZTt2YXIgbj17ImJveC1zaXppbmciOiJib3JkZXItYm94IixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDpsKyJweCIsaGVpZ2h0OmgrInB4Iixib3JkZXI6cisicHggc29saWQgIisoMD09PWU/czphKSwiYmFja2dyb3VuZC1jb2xvciI6byxwb3NpdGlvbjoicmVsYXRpdmUiLGZsb2F0OiJsZWZ0IixkaXNwbGF5OmU8TWF0aC5wb3codSwyKT8iaW5saW5lLWJsb2NrIjoibm9uZSJ9OygwLG0uZGVmYXVsdCkobikuZm9yRWFjaChmdW5jdGlvbihlKXt0LnN0eWxlLnNldFByb3BlcnR5KGUsbltlXSl9KSx0LmlubmVySFRNTD0nXG4gICAgICAgICAgICAgICAgPHZpZGVvIGF1dG9wbGF5IGlkPSInK2kub3B0aW9ucy5zeklkKyJfcGxheVZpZGVvIitlKyciIGNsYXNzPSJwbGF5LXdpbmRvdyIgd2lkPSInK2UrJyIgXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPSInK2MrJyIgaGVpZ2h0PSInK18rJyIgc3R5bGU9Im9iamVjdC1maXQ6IGZpbGw7Ij5cbiAgICAgICAgICAgICAgICA8L3ZpZGVvPlxuICAgICAgICAgICAgICAgIDxjYW52YXMgaWQ9IicraS5vcHRpb25zLnN6SWQrIl9wbGF5Q2FudmFzIitlKyciIGNsYXNzPSJwbGF5LXdpbmRvdyIgd2lkPSInK2UrJyIgXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPSInKyhpLmJjbG9zZUFudGlhbGlhcyYmMT09PXU/YzoyKmMpKyciIGhlaWdodD0iJysoaS5iY2xvc2VBbnRpYWxpYXMmJjE9PT11P186MipfKSsnIlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0iJysoaS5iY2xvc2VBbnRpYWxpYXMmJjE9PT11PyJ0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7IjoidHJhbnNmb3JtOiBzY2FsZSgwLjUpOyB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7IikrJyI+XG4gICAgICAgICAgICAgICAgPC9jYW52YXM+XG4gICAgICAgICAgICAgICAgPGNhbnZhcyBpZD0iJytpLm9wdGlvbnMuc3pJZCsiX2NhbnZhc19kcmF3IitlKyciIGNsYXNzPSJkcmF3LXdpbmRvdyIgd2lkPSInK2UrJyIgXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPSInK2MrJyIgaGVpZ2h0PSInK18rJyIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyI+XG4gICAgICAgICAgICAgICAgPC9jYW52YXM+XG4gICAgICAgICAgICAnLGQuYXBwZW5kQ2hpbGQodCksaS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShlKS5nZXQoMCkudm9sdW1lPTB9KGYpO3RoaXMub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuaGlkZSgpfX0se2tleToiX3VwZGF0ZVduZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9KU1BsdWdpbi5maW5kKCIucGFyZW50LXduZCIpLmdldCgwKSx0PWUuY2xpZW50V2lkdGgsbj1lLmNsaWVudEhlaWdodDt0JiZuJiYodGhpcy5vcHRpb25zLmlXaWR0aD10LHRoaXMub3B0aW9ucy5pSGVpZ2h0PW4pO2Zvcih2YXIgaT10aGlzLm9wdGlvbnMub1N0eWxlLmJvcmRlcldpZHRoLHI9dGhpcy5vcHRpb25zLmlDdXJyZW50U3BsaXQsYT1NYXRoLmZsb29yKCh0LTEpL3IpLHQ9TWF0aC5mbG9vcigobi0xKS9yKSxuPXBhcnNlRmxvYXQoKHdpbmRvdy5zY3JlZW4ud2lkdGgvd2luZG93LmlubmVyV2lkdGgpLnRvRml4ZWQoMikpLHM9TWF0aC5mbG9vcihhLWkvbioyKSxvPU1hdGguZmxvb3IodC1pL24qMiksdT0wO3U8dGhpcy5pTWF4V25kTnVtO3UrKyl7dmFyIGQ9KDAsdi5kZWZhdWx0KShlKS5maW5kKCIuc3ViLXduZCIpLmdldCh1KTsoMCx2LmRlZmF1bHQpKGQpLndpZHRoKHMpLmhlaWdodChvKS5jc3MoImRpc3BsYXkiLHU8TWF0aC5wb3cociwyKT8iaW5saW5lLWJsb2NrIjoibm9uZSIpLmNzcygiYm9yZGVyIixpKyJweCBzb2xpZCAiK3RoaXMub3B0aW9ucy5vU3R5bGUuYm9yZGVyKSx1PT09dGhpcy5jdXJyZW50V2luZG93SW5kZXgmJigwLHYuZGVmYXVsdCkoZCkuY3NzKCJib3JkZXIiLGkrInB4IHNvbGlkICIrdGhpcy5vcHRpb25zLm9TdHlsZS5ib3JkZXJTZWxlY3QpLCgwLHYuZGVmYXVsdCkoZCkuZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5hdHRyKCJ3aWR0aCIscykuYXR0cigiaGVpZ2h0IixvKTt2YXIgbD10aGlzLmJjbG9zZUFudGlhbGlhcyYmMT09PXI/czoyKnMsaD10aGlzLmJjbG9zZUFudGlhbGlhcyYmMT09PXI/bzoyKm8sYz10aGlzLmJjbG9zZUFudGlhbGlhcyYmMT09PXI/InNjYWxlKDEpIjoic2NhbGUoMC41KSI7KDAsdi5kZWZhdWx0KShkKS5maW5kKCJjYW52YXMucGxheS13aW5kb3ciKS5hdHRyKCJ3aWR0aCIsbCkuYXR0cigiaGVpZ2h0IixoKS5jc3MoInRyYW5zZm9ybSIsYyk7Yz10aGlzLmFXbmRMaXN0W3VdO2MuYlBsYXkmJjA9PT1jLmlNb2RlJiZjLm9QbGF5Q3RybCYmYy5vUGxheUN0cmwuUGxheU00X1NldENhbnZhc1NpemUmJmMub1BsYXlDdHJsLlBsYXlNNF9TZXRDYW52YXNTaXplKGwsaCksKDAsdi5kZWZhdWx0KShkKS5maW5kKCJjYW52YXMuZHJhdy13aW5kb3ciKS5hdHRyKCJ3aWR0aCIscykuYXR0cigiaGVpZ2h0IixvKSx0aGlzLm9EcmF3Q2FudmFzJiZ0aGlzLm9EcmF3Q2FudmFzLnJlc2l6ZUNhbnZhcygpfX19LHtrZXk6Il9kZWFsV25kU2VsZWN0Iix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3RoaXMuaUN1cnJlbnRXbmRJbmRleD10LCh0aGlzLmFXbmRMaXN0W3RdLmJFWm9vbXx8dGhpcy5hV25kTGlzdFt0XS5iM0Rab29tKSYmKHRoaXMub0pTUGx1Z2luLmZpbmQoIi5kcmF3LXdpbmRvdyIpLnVuYmluZCgpLHRoaXMub0RyYXdDYW52YXMuc2V0RHJhd1N0YXR1cyghMSksdGhpcy5vRHJhd0NhbnZhcz1udWxsLHRoaXMub0RyYXdDYW52YXM9bmV3IGMuRVNDYW52YXModGhpcy5vcHRpb25zLnN6SWQrIl9jYW52YXNfZHJhdyIrdCksdGhpcy5vRHJhd0NhbnZhcy5zZXRTaGFwZVR5cGUoIlJlY3QiKSx0aGlzLm9EcmF3Q2FudmFzLnNldERyYXdTdHlsZSgiI2ZmMDAwMCIsIiIsMCksdGhpcy5hV25kTGlzdFt0XS5iRVpvb20/dGhpcy5vRHJhd0NhbnZhcy5zZXREcmF3U3RhdHVzKCEwLGZ1bmN0aW9uKGUpe2Uuc3RhcnRQb3MmJmUuZW5kUG9zJiYoZS5zdGFydFBvc1swXT5lLmVuZFBvc1swXT9uLmFXbmRMaXN0W3RdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGlzcGxheVJlZ2lvbiYmbi5hV25kTGlzdFt0XS5vUGxheUN0cmwuUGxheU00X1NldERpc3BsYXlSZWdpb24obnVsbCwhMSk6bi5hV25kTGlzdFt0XS5vUGxheUN0cmwuUGxheU00X1NldERpc3BsYXlSZWdpb24mJm4uYVduZExpc3RbdF0ub1BsYXlDdHJsLlBsYXlNNF9TZXREaXNwbGF5UmVnaW9uKHtsZWZ0OmUuc3RhcnRQb3NbMF0sdG9wOmUuc3RhcnRQb3NbMV0scmlnaHQ6ZS5lbmRQb3NbMF0sYm90dG9tOmUuZW5kUG9zWzFdfSwhMCkpfSk6dGhpcy5hV25kTGlzdFt0XS5iM0Rab29tJiZ0aGlzLm9EcmF3Q2FudmFzLnNldERyYXdTdGF0dXMoITAsZnVuY3Rpb24oZSl7bi5mRHJhd0NhbGxiYWNrKGUpfSkpfX0se2tleToiX2luaXRDYWxsYmFja0V2ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub0V2ZW50Q2FsbGJhY2s9e2xvYWRFdmVudEhhbmRsZXI6ZnVuY3Rpb24oKXt3aW5kb3cubG9hZEV2ZW50SGFuZGxlciYmd2luZG93LmxvYWRFdmVudEhhbmRsZXIoKX0sd2luZG93RXZlbnRTZWxlY3Q6ZnVuY3Rpb24oZSl7d2luZG93LmdldFNlbGVjdFduZEluZm8mJndpbmRvdy5nZXRTZWxlY3RXbmRJbmZvKGUpfSxwbHVnaW5FcnJvckhhbmRsZXI6ZnVuY3Rpb24oZSx0LG4pe3dpbmRvdy5wbHVnaW5FdmVudEhhbmRsZXImJndpbmRvdy5wbHVnaW5FdmVudEhhbmRsZXIoZSx0LG4pfSx3aW5kb3dFdmVudE92ZXI6ZnVuY3Rpb24oZSl7d2luZG93LndpbmRvd0V2ZW50T3ZlciYmd2luZG93LndpbmRvd0V2ZW50T3ZlcihlKX0sd2luZG93RXZlbnRPdXQ6ZnVuY3Rpb24oZSl7d2luZG93LndpbmRvd0V2ZW50T3V0JiZ3aW5kb3cud2luZG93RXZlbnRPdXQoZSl9LHdpbmRvd0V2ZW50VXA6ZnVuY3Rpb24oZSl7d2luZG93LndpbmRvd0V2ZW50VXAmJndpbmRvdy53aW5kb3dFdmVudFVwKGUpfSx3aW5kb3dGdWxsQ2NyZWVuQ2hhbmdlOmZ1bmN0aW9uKGUpe3dpbmRvdy53aW5kb3dGdWxsQ2NyZWVuQ2hhbmdlJiZ3aW5kb3cud2luZG93RnVsbENjcmVlbkNoYW5nZShlKX0sZmlyc3RGcmFtZURpc3BsYXk6ZnVuY3Rpb24oZSx0LG4pe3dpbmRvdy5maXJzdEZyYW1lRGlzcGxheSYmd2luZG93LmZpcnN0RnJhbWVEaXNwbGF5KGUsdCxuKX0scGVyZm9ybWFuY2VMYWNrOmZ1bmN0aW9uKCl7d2luZG93LnBlcmZvcm1hbmNlTGFjayYmd2luZG93LnBlcmZvcm1hbmNlTGFjaygpfSxTdHJlYW1FbmQ6ZnVuY3Rpb24oZSl7d2luZG93LlN0cmVhbUVuZCYmd2luZG93LlN0cmVhbUVuZChlKX0sSW50ZXJydXB0U3RyZWFtOmZ1bmN0aW9uKGUsdCl7d2luZG93LkludGVycnVwdFN0cmVhbSYmd2luZG93LkludGVycnVwdFN0cmVhbShlLHQpfSx0YWxrUGx1Z2luRXJyb3JIYW5kbGVyOmZ1bmN0aW9uKGUsdCl7d2luZG93LnRhbGtQbHVnaW5FcnJvckhhbmRsZXImJndpbmRvdy50YWxrUGx1Z2luRXJyb3JIYW5kbGVyKGUsdCl9LG1vdXNlRXZlbnQ6ZnVuY3Rpb24oKXt9fX19LHtrZXk6Il9pbml0RXZlbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLl9pbml0Q2FsbGJhY2tFdmVudCgpLHRoaXMub0pTUGx1Z2luLmZpbmQoIi5wYXJlbnQtd25kIikuZXEoMCkuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKGkpe3ZhciByPSExOygwLHYuZGVmYXVsdCkodGhpcykudW5iaW5kKCkuYmluZCgiY2xpY2siLGZ1bmN0aW9uKGUpe3ZhciB0LG47MD09PWUuYnV0dG9uJiYodD0obj1hLm9wdGlvbnMub1N0eWxlKS5ib3JkZXJXaWR0aCxlPW4uYm9yZGVyLG49bi5ib3JkZXJTZWxlY3QsYS5vSlNQbHVnaW4uZmluZCgiLnBhcmVudC13bmQiKS5lcSgwKS5jaGlsZHJlbigpLmNzcygiYm9yZGVyIix0KyJweCBzb2xpZCAiK2UpLGEub0pTUGx1Z2luLmZpbmQoIi5wYXJlbnQtd25kIikuZXEoMCkuY2hpbGRyZW4oKS5lcShpKS5jc3MoImJvcmRlciIsdCsicHggc29saWQgIituKSxhLm9FdmVudENhbGxiYWNrLndpbmRvd0V2ZW50U2VsZWN0KHBhcnNlSW50KGEub0pTUGx1Z2luLmZpbmQoIi5wYXJlbnQtd25kIikuZXEoMCkuY2hpbGRyZW4oKS5lcShpKS5maW5kKCIucGxheS13aW5kb3ciKS5lcSgwKS5hdHRyKCJ3aWQiKSwxMCkpLGEuX2RlYWxXbmRTZWxlY3QocGFyc2VJbnQoYS5vSlNQbHVnaW4uZmluZCgiLnBhcmVudC13bmQiKS5lcSgwKS5jaGlsZHJlbigpLmVxKGkpLmZpbmQoIi5wbGF5LXdpbmRvdyIpLmVxKDApLmF0dHIoIndpZCIpLDEwKSkpfSksKDAsdi5kZWZhdWx0KSh0aGlzKS5iaW5kKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKGUpe2Eub0V2ZW50Q2FsbGJhY2sud2luZG93RXZlbnRPdmVyKGkpfSksKDAsdi5kZWZhdWx0KSh0aGlzKS5iaW5kKCJtb3VzZW91dCIsZnVuY3Rpb24oZSl7YS5vRXZlbnRDYWxsYmFjay53aW5kb3dFdmVudE91dChpKX0pLCgwLHYuZGVmYXVsdCkodGhpcykuYmluZCgibW91c2Vtb3ZlIixmdW5jdGlvbihlKXt2YXIgdD1lLm9mZnNldFgvYS5vRHJhd0NhbnZhcy5tX2lDYW52YXNXaWR0aCxlPWUub2Zmc2V0WS9hLm9EcmF3Q2FudmFzLm1faUNhbnZhc0hlaWdodDtyP2Eub0V2ZW50Q2FsbGJhY2subW91c2VFdmVudCg3LHQsZSk6YS5vRXZlbnRDYWxsYmFjay5tb3VzZUV2ZW50KDYsdCxlKX0pLCgwLHYuZGVmYXVsdCkodGhpcykuYmluZCgibW91c2V3aGVlbCIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vZmZzZXRYL2Eub0RyYXdDYW52YXMubV9pQ2FudmFzV2lkdGgsZT1lLm9mZnNldFkvYS5vRHJhd0NhbnZhcy5tX2lDYW52YXNIZWlnaHQ7YS5vRXZlbnRDYWxsYmFjay5tb3VzZUV2ZW50KDgsdCxlKX0pLCgwLHYuZGVmYXVsdCkodGhpcykuYmluZCgibW91c2V1cCIsZnVuY3Rpb24oZSl7cj0hMSxhLm9FdmVudENhbGxiYWNrLndpbmRvd0V2ZW50VXAoaSk7dmFyIHQ9ZS5vZmZzZXRYL2Eub0RyYXdDYW52YXMubV9pQ2FudmFzV2lkdGgsbj1lLm9mZnNldFkvYS5vRHJhd0NhbnZhcy5tX2lDYW52YXNIZWlnaHQ7Mj09PWUuYnV0dG9uP2Eub0V2ZW50Q2FsbGJhY2subW91c2VFdmVudCg1LHQsbik6MD09PWUuYnV0dG9uJiZhLm9FdmVudENhbGxiYWNrLm1vdXNlRXZlbnQoMyx0LG4pfSksKDAsdi5kZWZhdWx0KSh0aGlzKS5iaW5kKCJkYmxjbGljayIsZnVuY3Rpb24oZSl7dmFyIHQ7YS5vcHRpb25zLmJTdXBwb3JEb3VibGVDbGlja0Z1bGwmJigiZGVza3RvcCI9PT1hLl9icm93c2VySW5mby5wbGF0Zm9ybT9hLkpTX0Z1bGxTY3JlZW5TaW5nbGUoaSk6YS5mdWxsc2NyZWVuRWxlbWVudD9hLl90cmlnZ2VyRnVsbHNjcmVlbihhLmZ1bGxzY3JlZW5FbGVtZW50KTphLkpTX0Z1bGxTY3JlZW5TaW5nbGUoYS5jdXJyZW50V2luZG93SW5kZXgpLHQ9ZS5vZmZzZXRYL2Eub0RyYXdDYW52YXMubV9pQ2FudmFzV2lkdGgsZT1lLm9mZnNldFgvYS5vRHJhd0NhbnZhcy5tX2lDYW52YXNIZWlnaHQsYS5vRXZlbnRDYWxsYmFjay5tb3VzZUV2ZW50KDIsdCxlKSl9KX0pLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuZS5yZXNpemUpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImZ1bGxzY3JlZW5jaGFuZ2UiLHRoaXMuZS5mdWxsc2NyZWVuY2hhbmdlKX19LHtrZXk6Il9ldmVudEhhbmRsZXJSZXNpemUiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShkb2N1bWVudC5mdWxsc2NyZWVufHxkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW58fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW58fCExKSYmdGhpcy5mdWxsc2NyZWVuRWxlbWVudCl7dmFyIGU9dGhpcy5mdWxsc2NyZWVuRWxlbWVudDtkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWR8fGUud2Via2l0U3VwcG9ydHNGdWxsc2NyZWVuO2lmKCJkZXNrdG9wIiE9PXRoaXMuX2Jyb3dzZXJJbmZvLnBsYXRmb3JtKXJldHVybiB0aGlzLl90cmlnZ2VyRnVsbHNjcmVlbihlKTt0aGlzLmZ1bGxzY3JlZW5FbGVtZW50PW51bGwsdGhpcy5vRXZlbnRDYWxsYmFjay53aW5kb3dGdWxsQ2NyZWVuQ2hhbmdlKCExKX10aGlzLkpTX1Jlc2l6ZSgpfX0se2tleToiX2V2ZW50SGFuZGxlckZ1bGxzY3JlZW5jaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIShkb2N1bWVudC5mdWxsc2NyZWVufHxkb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW58fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW58fCExKSYmdGhpcy5mdWxsc2NyZWVuRWxlbWVudCl7dmFyIGU9dGhpcy5mdWxsc2NyZWVuRWxlbWVudDtkb2N1bWVudC5mdWxsc2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVuYWJsZWR8fGRvY3VtZW50Lm1zRnVsbHNjcmVlbkVuYWJsZWR8fGUud2Via2l0U3VwcG9ydHNGdWxsc2NyZWVuO2lmKCJkZXNrdG9wIiE9PXRoaXMuX2Jyb3dzZXJJbmZvLnBsYXRmb3JtKXJldHVybiB0aGlzLl90cmlnZ2VyRnVsbHNjcmVlbihlKTt0aGlzLmZ1bGxzY3JlZW5FbGVtZW50PW51bGwsdGhpcy5vRXZlbnRDYWxsYmFjay53aW5kb3dGdWxsQ2NyZWVuQ2hhbmdlKCExKX10aGlzLkpTX1Jlc2l6ZSgpfX0se2tleToiX2V2ZW50SGFuZGxlclZpc2liaWxpdHljaGFuZ2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc0Jyb3dzZXJWaXNpYmxlPSFkb2N1bWVudC5oaWRkZW59fSx7a2V5OiJyZW1vdmVBbGxMaXN0ZW5lcnMiLHZhbHVlOmZ1bmN0aW9uKCl7d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5lLnJlc2l6ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZnVsbHNjcmVlbmNoYW5nZSIsdGhpcy5lLmZ1bGxzY3JlZW5jaGFuZ2UpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHRoaXMuZS52aXNpYmlsaXR5Y2hhbmdlKX19LHtrZXk6Il9kZWJvdW5zZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3RoaXMuX2RlYm91bnNlVGltZXImJmNsZWFyVGltZW91dCh0aGlzLl9kZWJvdW5zZVRpbWVyKSx0aGlzLl9kZWJvdW5zZVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLmFwcGx5KG4pLGNsZWFyVGltZW91dChuLl9kZWJvdW5zZVRpbWVyKSxuLl9kZWJvdW5zZVRpbWVyPW51bGx9LHQpfX0se2tleToiX2luaXRQbGF5Q3RybE9ubHlBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0PW5ldyBVaW50OEFycmF5KHQpO3RbMTBdPTAsdFsxMV09MCx0aGlzLmFXbmRMaXN0W2VdLm9QbGF5Q3RybC5QbGF5TTRfT3BlblN0cmVhbSh0LDQwLDIwOTcxNTIpLCIiIT09dGhpcy5hV25kTGlzdFtlXS5zelNlY3JldEtleSYmKHRoaXMuYVduZExpc3RbZV0ub1BsYXlDdHJsLlBsYXlNNF9TZXRTZWNyZXRLZXkoMSx0aGlzLmFXbmRMaXN0W2VdLnN6U2VjcmV0S2V5LDEyOCksdGhpcy5hV25kTGlzdFtlXS5zelNlY3JldEtleT0iIiksdGhpcy5hV25kTGlzdFtlXS5vUGxheUN0cmwuUGxheU00X1NldFN0cmVhbU9wZW5Nb2RlKDApLHRoaXMuYVduZExpc3RbZV0ub1BsYXlDdHJsLlBsYXlNNF9QbGF5KG51bGwpfX0se2tleToiZmx2dG9oaWtIZWFkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgVWludDhBcnJheSg0MCk7dFswXT03Myx0WzFdPTc3LHRbMl09NzUsdFszXT03Mix0WzRdPTMsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0xMCx0WzldPTAsdFsxMF09MCx0WzExXT0xLHRbMTJdPTEsdFsxM109MzIsdFsxNF09MSx0WzE1XT0xMjtlPXRoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5hdWRpb1NhbXBsZVJhdGUudG9TdHJpbmcoMTYpO3JldHVybiB0WzE2XT1wYXJzZUludChlWzJdK2VbM10sMTYpLHRbMTddPXBhcnNlSW50KGVbMF0rZVsxXSwxNiksdH19LHtrZXk6Il9jaGFuZ2VIVkFHSGVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoNDApO3JldHVybiB0WzBdPTczLHRbMV09NzcsdFsyXT03NSx0WzNdPTcyLHRbNF09Myx0WzVdPTEsdFs2XT0wLHRbN109MCwxOTI9PT1lWzhdJiYwPT09ZVs5XT90WzhdPTQ6dFs4XT0yLHRbOV09MCwxMDA9PT1lWzI0XSYmOTc9PT1lWzI1XSYmMTA0PT09ZVsyNl0mJjExNz09PWVbMjddJiY5Nz09PWVbMjhdJiYodFs4XT0xLHRbOV09MTI4KSwwIT09ZVsxMV0mJjEhPT1lWzExXXx8MTkyIT09ZVsxMF0/Mj09PWVbMTFdJiYxOTI9PT1lWzEwXT90WzEwXT0zOjM9PT1lWzExXSYmMTkyPT09ZVsxMF0/dFsxMF09NTo0PT09ZVsxMV0mJjE5Mj09PWVbMTBdP3RbMTBdPTQ6NT09PWVbMTFdJiYxOTI9PT1lWzEwXT90WzEwXT0yOjY9PT1lWzExXSYmMTkyPT09ZVsxMF0/dFsxMF09Njp0WzEwXT0xOnRbMTBdPTEsdFsxMV09MCwxPT09ZVsxM10mJjE5Mj09PWVbMTJdPyh0WzEyXT0xNix0WzEzXT0xMTMpOjI9PT1lWzEzXSYmMTkyPT09ZVsxMl0/KHRbMTJdPTE3LHRbMTNdPTExMyk6Mz09PWVbMTNdJiYxOTI9PT1lWzEyXT8odFsxMl09MzMsdFsxM109MTE0KTo0PT09ZVsxM10mJjE5Mj09PWVbMTJdPyh0WzEyXT05Nix0WzEzXT0xMTQpOjU9PT1lWzEzXSYmMTkyPT09ZVsxMl0/KHRbMTJdPTEsdFsxM109MzIpOjY9PT1lWzEzXSYmMTkyPT09ZVsxMl0/KHRbMTJdPTAsdFsxM109MzIpOjc9PT1lWzEzXSYmMTkyPT09ZVsxMl0/KHRbMTJdPTAsdFsxM109MTEyKToodFsxMl09MTYsdFsxM109MTEzKSx0fX0se2tleToiX3BhcnNlSGVhZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsxPT09dFs4XSYmMD09PXRbOV0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLnN5c3RlbUZvcm10PSJISUsiOjI9PT10WzhdJiYwPT09dFs5XT90aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uc3lzdGVtRm9ybXQ9IlBTIjo0PT09dFs4XSYmMD09PXRbOV0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLnN5c3RlbUZvcm10PSJSVFAiOjg9PT10WzhdJiYwPT09dFs5XT90aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uc3lzdGVtRm9ybXQ9IkdCIjoxNj09PXRbOF0mJjA9PT10WzldP3RoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5zeXN0ZW1Gb3JtdD0iUkFXIjoxPT09dFs4XSYmMTI4PT09dFs5XT90aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uc3lzdGVtRm9ybXQ9IkRBSFVBIjp0aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uc3lzdGVtRm9ybXQ9InVua29udyIsMT09PXRbMTFdJiYwPT09dFsxMF18fDA9PT10WzExXSYmMT09PXRbMTBdPyh0aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uVmlkZVR5cGU9IkgyNjQiLDEyOT09PXRbMjRdJiYodGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLlZpZGVUeXBlPSJTbWFydDI2NCIpKTowPT09dFsxMV0mJjU9PT10WzEwXT8odGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLlZpZGVUeXBlPSJIMjY1IiwxMjk9PT10WzI0XSYmKHRoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5WaWRlVHlwZT0iU21hcnQyNjUiKSk6MD09PXRbMTFdJiY2PT09dFsxMF0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLlZpZGVUeXBlPSJTQUMiOjA9PT10WzExXSYmMj09PXRbMTBdP3RoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5WaWRlVHlwZT0iTVBFRzIiOjA9PT10WzExXSYmMz09PXRbMTBdP3RoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5WaWRlVHlwZT0iTVBFRzQiOnRoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5WaWRlVHlwZT0idW5rb253IiwxMTM9PT10WzEzXSYmMTY9PT10WzEyXT90aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uYXVkaW9UeXBlPSJHNzExX1UiOjExMz09PXRbMTNdJiYxNz09PXRbMTJdP3RoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5hdWRpb1R5cGU9Ikc3MTFfQSI6MTE0PT09dFsxM10mJjMzPT09dFsxMl0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0iRzcyMjEiOjExND09PXRbMTNdJiY5Nj09PXRbMTJdP3RoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5hdWRpb1R5cGU9Ikc3MjZfMzIiOjExND09PXRbMTNdJiY5OD09PXRbMTJdP3RoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5hdWRpb1R5cGU9Ikc3MjZfMTYiOjExND09PXRbMTNdJiYxNDQ9PT10WzEyXT90aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uYXVkaW9UeXBlPSJHNzI5IjozMj09PXRbMTNdJiYxPT09dFsxMl0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0iQUFDIjoxNj09PXRbMTNdJiYwPT09dFsxMl0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0iQURQQ00iOjMyPT09dFsxM10mJjA9PT10WzEyXT90aGlzLmFXbmRMaXN0W2VdLl92aWRlb0luZm8uYXVkaW9UeXBlPSJNUDJMMiI6MD09PXRbMTNdJiYwPT09dFsxMl0/dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0id2l0aG91dCI6dGhpcy5hV25kTGlzdFtlXS5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0idW5rbm93In19LHtrZXk6Il9zdHJpcFJ0cEhlYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OEFycmF5KGUpO2lmKGUuYnl0ZUxlbmd0aDw9MTJ8fDEyOCE9PXRbMF0pcmV0dXJuIGU7dmFyIG4saT0zMiZ0WzBdLHI9MTYmdFswXSxhPTE1JnRbMF0scz0wLGU9MDtyZXR1cm4gMzI9PWkmJihzPXRbdC5ieXRlTGVuZ3RoLTFdKSxuPTQqcGFyc2VJbnQoYSwxMCksMTY9PXImJihlPTQqbmV3IHdpbmRvdy5EYXRhVmlldyh0LmJ1ZmZlciwxMituLDQpLmdldFVpbnQxNigyKSs0KSx0Lmxlbmd0aDw9MTIrbitlPy0xOnQuc2xpY2UoMTIrbitlLHQubGVuZ3RoLXMpfX0se2tleToiX29wZW5TdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGksYSxzLG8sdSl7dmFyIGQ9dGhpcyxsPXRoaXMuYVduZExpc3Rbc10sZT1vO3JldHVybiBlJiYtMSE9PWUuc2VhcmNoKCJaIikmJihlPWUucmVwbGFjZSgiWiIsIiswODowMCIpKSx0aGlzLmFXbmRMaXN0W3NdLmlDdXJlbnRPU0RUaW1lPXRoaXMuYVduZExpc3Rbc10uaUdsb2JhbEJhc2VUaW1lPW5ldyBEYXRlKGUpLmdldFRpbWUoKSxuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUscil7dmFyIHQsbj1vJiZ1O2wuc3pQbGF5VHlwZT1uPyJwbGF5YmFjayI6InJlYWxwbGF5IiwzPT09YS5QbGF5QmFja01vZGUmJm4mJihsLnN6UGxheVR5cGU9InJldmVyc2UiKSxsLl9lbWl0ZXIub24oImZpcnN0ZnJhbWVsb2FkIixmdW5jdGlvbigpe2wuYXN5bmNMb2NrPSExLGUoKX0se29uY2U6ITB9KSxkLm9TdHJlYW1DbGllbnQub3BlblN0cmVhbShpLGEsKHQ9KDAseS5kZWZhdWx0KShwLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKHQpe3ZhciBuLGk7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0LmJIZWFkKXtlLm5leHQ9NTY7YnJlYWt9aWYobC5vU2RwSW5mbz10LG49bC5hSGVhZD1uZXcgVWludDhBcnJheSh0LmJ1ZiksZC5fbG9nLkkoImhlYWREYXRhIGFycml2ZSIsbiksbC5pc0dCPTA9PT1uWzddJiYxOTY9PT1uWzhdJiYxMDA9PT1uWzI0XSYmOTg9PT1uWzI1XSYmNTE9PT1uWzI2XSYmNTE9PT1uWzI3XSw3Mj09PW5bMF0mJjg2PT09blsxXSYmNjU9PT1uWzJdJiY3MT09PW5bM10/KGwuaXNIVkFHSGVhZD0hMCxsLmFIVkFHSGVhZD1uZXcgVWludDhBcnJheSh0LmJ1ZiksbC5hSGVhZD1kLl9jaGFuZ2VIVkFHSGVhZCh0LmJ1ZikpOmwuaXNIVkFHSGVhZD0hMSxkLmFXbmRMaXN0W3NdLl9icHNDYWxjdWxhdG9yfHwoZC5hV25kTGlzdFtzXS5fYnBzQ2FsY3VsYXRvcj13aW5kb3cuc2V0SW50ZXJ2YWwoZC5fY2FsY3VsYXRlUmVhbHRpbWVCaXRyYXRlLmJpbmQoZCksMWUzLHMpKSwhKDcwPT09blswXSYmNzY9PT1uWzFdJiY4Nj09PW5bMl0pKXtlLm5leHQ9MTQ7YnJlYWt9bC5pTW9kZT0xLGwuaXNGbHY9ITAsZC5fY3JlYXRlRmx2UGxheWVyKHMpLGUubmV4dD01NDticmVhaztjYXNlIDE0OmlmKCEoNT09PWwuYUhlYWRbMTBdJiYwPT09bC5hSGVhZFsxMV18fDE9PT1sLmFIZWFkWzEwXSYmMD09PWwuYUhlYWRbMTFdfHwwPT09bC5hSGVhZFsxMF0mJjE9PT1sLmFIZWFkWzExXSkpe2UubmV4dD0xNzticmVha31lLm5leHQ9MTk7YnJlYWs7Y2FzZSAxNzpyZXR1cm4gZC5fbG9nLkUoTC5FUlJfU1RSRUFNX0pTREVDT0RFUl9DT0RFQ19VTlNVUFBPUlRFRCsiOiAgdGhlIHN0cmVhbSBub3QgaDI2NCBoMjY1IHNtYXJ0LHVuc3VwcG9ydCAuIixsLmFIZWFkWzEwXSxsLmFIZWFkWzExXSksZS5hYnJ1cHQoInJldHVybiIscihMLkVSUl9TVFJFQU1fSlNERUNPREVSX0NPREVDX1VOU1VQUE9SVEVEKSk7Y2FzZSAxOTppZihkLl9wYXJzZUhlYWQocyxsLmFIZWFkKSxpPTEsZC5hV25kTGlzdFtzXS5hc3luY0xvY2smJiIyIj09PWQuX2RlY29kZXJWZXJzaW9uKXJldHVybiBkLl9sb2cuRShMLkVSUl9TVFJFQU1fTE9DS19FUlJPUisiOiAgTXVsdGlwbGUgY2FsbCBqc19wbGF5IEFQSSBpbiBhIHNob3J0IHRpbWUsIHBsZWFzZSB3YWl0IGxhc3R0aW1lIGNhbGwgb3Zlci4iKSxlLmFicnVwdCgicmV0dXJuIixyKEwuRVJSX1NUUkVBTV9MT0NLX0VSUk9SKSk7ZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjQ6aWYoZC5hV25kTGlzdFtzXS5hc3luY0xvY2s9ITAsbC5vUGxheUN0cmwpe2UubmV4dD01NDticmVha31pZihFfHwiMiIhPT1kLl9kZWNvZGVyVmVyc2lvbil7ZS5uZXh0PTM2O2JyZWFrfXJldHVybiBlLnByZXY9MjcsZS5uZXh0PTMwLGQuX2RlY29kZXIyTG9hZGVkKCk7Y2FzZSAzMDppPWUuc2VudCxlLm5leHQ9MzY7YnJlYWs7Y2FzZSAzMzplLnByZXY9MzMsZS50MD1lLmNhdGNoKDI3KSwxPT09ZS50MHx8RXx8KGwuYXN5bmNMb2NrPSExLGQub0V2ZW50Q2FsbGJhY2sucGx1Z2luRXJyb3JIYW5kbGVyKHMsTC5FUlJfQ09NX0xPQURfSlNERUNPREVSX0VSUk9SKSxkLl9jbG9zZVN0cmVhbUFuZERlc3RvcnkocyksZC5fbG9nLkUoTC5FUlJfQ09NX0xPQURfSlNERUNPREVSX0VSUk9SKyI6ICBsb2FkIGpzZGVjb2RlciBmYWlsZC4iKSxyKEwuRVJSX0NPTV9MT0FEX0pTREVDT0RFUl9FUlJPUikpO2Nhc2UgMzY6cmV0dXJuIGUucHJldj0zNixlLm5leHQ9MzksZC5fY3JlYXRlUGxheUN0cmwocyk7Y2FzZSAzOTplLm5leHQ9NDc7YnJlYWs7Y2FzZSA0MTpyZXR1cm4gZS5wcmV2PTQxLGUudDE9ZS5jYXRjaCgzNiksbC5hc3luY0xvY2s9ITEsZC5fbG9nLkUoTC5FUlJfQ09NX0xPQURfSlNERUNPREVSX0VSUk9SKyI6ICBsb2FkIGpzZGVjb2RlciBmYWlsZCBwYXRoOiIrZC5kZWNvZGVyMVBhdGgpLGQuX2Nsb3NlU3RyZWFtQW5kRGVzdG9yeShzKSxlLmFicnVwdCgicmV0dXJuIixyKGUudDEpKTtjYXNlIDQ3OmlmKDEhPT0oaT1kLl9wbGF5Q3RybExvYWQocykpKXJldHVybiBsLmFzeW5jTG9jaz0hMSxkLl9jbG9zZVN0cmVhbUFuZERlc3RvcnkocyksZC5vRXZlbnRDYWxsYmFjay5wbHVnaW5FcnJvckhhbmRsZXIocyxpKSxkLl9sb2cuRShpKyI6ICBqc2RlY29kZXIgb3BlbiBzdHJlYW0gZmFpbGQuIiksZS5hYnJ1cHQoInJldHVybiIscihpKSk7ZS5uZXh0PTU0O2JyZWFrO2Nhc2UgNTQ6ZS5uZXh0PTU3O2JyZWFrO2Nhc2UgNTY6dC5jbWQmJiJlbmQiPT09dC5jbWQ/KGQuX2xvZy5JKCJbaVduZE51bS0iK3MrIl0gcmVjdiBzdHJlYW0gZW5kIiksbC5hc3luY0xvY2s9ITEsZC5fc3RyZWFtRW5kU3RvcChzKS50aGVuKGZ1bmN0aW9uKCl7ZC5vRXZlbnRDYWxsYmFjay5TdHJlYW1FbmQocyl9LGZ1bmN0aW9uKGUpe2QuX2xvZy5FKCJbaVduZE51bS0iK3MrIl0gcmVjdiBzdHJlYW0gZW5kIHN0b3AgZXJyb3I6IixlKSxkLm9FdmVudENhbGxiYWNrLlN0cmVhbUVuZChzKX0pKTp0LmNtZCYmIlN0cmVhbVVVSUQiPT09dC5jbWQ/KGQuYVduZExpc3Rbc10uc3pTdHJlYW1VVUlEJiZkLmFXbmRMaXN0W3NdLnN6U3RyZWFtVVVJRCE9PXQudmFsdWUmJihkLm9TdHJlYW1DbGllbnQuc3RvcChkLmFXbmRMaXN0W3NdLnN6U3RyZWFtVVVJRCksZC5hV25kTGlzdFtzXS5zelN0cmVhbVVVSUQ9IiIpLGQuYVduZExpc3Rbc10uc3pTdHJlYW1VVUlEPXQudmFsdWUpOigiMSI9PT1kLl9kZWNvZGVyVmVyc2lvbnx8bC5iUGxheSkmJmwuYlNlZWtPayYmZC5fZmVlZERhdGEocyx0KTtjYXNlIDU3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxlLGQsW1syNywzM10sWzM2LDQxXV0pfSkpLGZ1bmN0aW9uKGUpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZ1bmN0aW9uKGUpe2wuYXN5bmNMb2NrPSExLGQuYVduZExpc3Rbc10uYlBsYXk/KDFlMz09PWUuY29kZXx8MTAwNT09PWUuY29kZT8oZC5fbG9nLkUoTC5FUlJfU1RSRUFNX0NPTk5FQ1RfQ0xPU0VEKyI6ICDpgIHmtYHlvILluLjvvIzooqvlkI7nq6/lhbPpl63ov57mjqUiLGkpLGQub0V2ZW50Q2FsbGJhY2sucGx1Z2luRXJyb3JIYW5kbGVyKHMsTC5FUlJfU1RSRUFNX0NPTk5FQ1RfQ0xPU0VELGUpKTooZC5fbG9nLkUoTC5FUlJfU1RSRUFNX0lOVEVSUlVQVCsiOiAg5rWB5Lit5patIixpKSxkLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihzLEwuRVJSX1NUUkVBTV9JTlRFUlJVUFQsZSkpLGwuc3pTdHJlYW1VVUlEPSIiLGQuX2Nsb3NlU3RyZWFtQW5kRGVzdG9yeShzKSk6KGQuYVduZExpc3Rbc10uc3pTdHJlYW1VVUlEPyhkLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihzLEwuRVJSX0NPTV9SRUNWX1NUUkVBTV9USU1FT1VULGUpLGwuc3pTdHJlYW1VVUlEPSIiLHIoTC5FUlJfQ09NX1JFQ1ZfU1RSRUFNX1RJTUVPVVQpKToxMDA2PT09ZS5jb2RlJiYtMSE9PWkuc2VhcmNoKCJ3c3M6Ly8iKT8oZC5vRXZlbnRDYWxsYmFjay5wbHVnaW5FcnJvckhhbmRsZXIocyxMLkVSUl9TVFJFQU1fV1NTX0VSUk9SLGUpLHIoTC5FUlJfU1RSRUFNX1dTU19FUlJPUikpOihkLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihzLEwuRVJSX1NUUkVBTV9XU19FUlJPUixlKSxyKEwuRVJSX1NUUkVBTV9XU19FUlJPUikpLGQub1N0cmVhbUNsaWVudCYmZC5vU3RyZWFtQ2xpZW50LmNsb3NlVGltZXIobC5zelN0cmVhbVVVSUQpKX0pLnRoZW4oZnVuY3Rpb24oZSl7ZC5hV25kTGlzdFtzXS5zelN0cmVhbVVVSUQmJmQuYVduZExpc3Rbc10uc3pTdHJlYW1VVUlEIT09ZSYmKGQub1N0cmVhbUNsaWVudC5zdG9wKGQuYVduZExpc3Rbc10uc3pTdHJlYW1VVUlEKSxkLmFXbmRMaXN0W3NdLnN6U3RyZWFtVVVJRD0iIiksZC5hV25kTGlzdFtzXS5zelN0cmVhbVVVSUQ9ZSxkLm9TdHJlYW1DbGllbnQmJmQub1N0cmVhbUNsaWVudC5zdGFydFBsYXkoZSxvLHUsbC5zelBsYXlUeXBlKS50aGVuKGZ1bmN0aW9uKCl7fSxmdW5jdGlvbihlKXtkLm9TdHJlYW1DbGllbnQuY2xvc2VUaW1lcihsLnN6U3RyZWFtVVVJRCksbC5zelN0cmVhbVVVSUQ9IiIsbC5hc3luY0xvY2s9ITE7dmFyIHQ9ZTtpZigic3RyaW5nIiE9dHlwZW9mIGUmJih0PSIweDAiK2UuZXJyb3JDb2RlLnRvU3RyaW5nKDE2KSksIWwuYlBsYXkpcmV0dXJuIGQuX2xvZy5FKHQrIjogIOWPlua1geWksei0pe+8jOivpuaDheagueaNrumUmeivr+eggeWcqOi/kOeuoeWQjuWPsOi/m+ihjOafpeivoi4iKSxkLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihzLHQsZSkscih0KTtyKEwuRVJSX1NUUkVBTV9PUEVOX0ZBSUxFRCl9KX0pLmNhdGNoKGZ1bmN0aW9uKGUpe2wuYXN5bmNMb2NrPSExLGQub0V2ZW50Q2FsbGJhY2sucGx1Z2luRXJyb3JIYW5kbGVyKHMsTC5FUlJfU1RSRUFNX1dTX1RJTUVPVVQsZSksZC5fY2xvc2VTdHJlYW1BbmREZXN0b3J5KHMpLHIoTC5FUlJfU1RSRUFNX1dTX1RJTUVPVVQpfSl9KX19LHtrZXk6IkpTX0dldFBsdWdpblZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlKXtlKHQuc3pQbHVnaW5WZXJzaW9uKX0pfX0se2tleToiSlNfU2V0V2luZG93Q29udHJvbENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUpe24ub0V2ZW50Q2FsbGJhY2s9di5kZWZhdWx0LmV4dGVuZChuLm9FdmVudENhbGxiYWNrLHQpLGUoKX0pfX0se2tleToiSlNfU2V0U2VjcmV0S2V5Iix2YWx1ZTpmdW5jdGlvbihuLGkpe3ZhciByPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXshKG48MCkmJiIiIT09aSYmdm9pZCAwIT09aT8oci5hV25kTGlzdFtuXS5zelNlY3JldEtleT1pLGUoKSk6dCgpfSl9fSx7a2V5OiJKU19BcnJhbmdlV2luZG93Iix2YWx1ZTpmdW5jdGlvbihpKXt2YXIgcj10aGlzO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7aWYoaTwxfHwibnVtYmVyIiE9dHlwZW9mIGkpcmV0dXJuIHQoTC5FUlJfQ09NX1BBUkFNKTtpZihpPHIub3B0aW9ucy5pTWF4U3BsaXQ/ci5vcHRpb25zLmlDdXJyZW50U3BsaXQ9aTpyLm9wdGlvbnMuaUN1cnJlbnRTcGxpdD1yLm9wdGlvbnMuaU1heFNwbGl0LGcub1Rvb2wuaXNGaXJlZm94KCkpZm9yKHZhciBuPTA7bjxyLm9wdGlvbnMuaU1heFNwbGl0KnIub3B0aW9ucy5pTWF4U3BsaXQ7bisrKXIuYVduZExpc3Rbbl0ub1BsYXlDdHJsJiZyLmFXbmRMaXN0W25dLm9QbGF5Q3RybC5QbGF5TTRfQ2xlYXJDYW52YXMmJnIuYVduZExpc3Rbbl0ub1BsYXlDdHJsLlBsYXlNNF9DbGVhckNhbnZhcygpO3IuaUN1cnJlbnRXbmRJbmRleD0wLHIub0V2ZW50Q2FsbGJhY2sud2luZG93RXZlbnRTZWxlY3QoMCksci5fdXBkYXRlV25kKCksci5fZGVhbFduZFNlbGVjdCgwKSxlKCl9KX19LHtrZXk6IkpTX1BsYXkiLHZhbHVlOmZ1bmN0aW9uKHIsYSl7dmFyIHM9Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOi0xLG89dGhpcyx1PWFyZ3VtZW50c1szXSxkPWFyZ3VtZW50c1s0XTtyZXR1cm4oczwwfHxzPnRoaXMuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIHMpJiYocz10aGlzLmlDdXJyZW50V25kSW5kZXgpLG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtpZigic3RyaW5nIiE9dHlwZW9mIHJ8fC0xPT09ci5zZWFyY2goIndzczovLyIpJiYtMT09PXIuc2VhcmNoKCJ3czovLyIpKXJldHVybiB0KEwuRVJSX0NPTV9VUkxfRVJST1IpO3ZhciBuPTA7YS5tb2RlJiYobj1hLm1vZGUpLG8uX2xvZy5JKCJbaWQtIitvLm9wdGlvbnMuc3pJZCsiIGlXbmROdW0tIitzKyJdIHN0YXJ0IEpTX1BsYXkgdXJsOiIrcisiIG1vZGU6IituKyIgc3pTdGFydFRpbWU6Iit1KyIgc3pTdG9wVGltZToiK2QpO3ZhciBpPW8uYVduZExpc3Rbc10uc3pPcmlnaW5Vcmw9cjsxIT09biYmby5fc3VwcG9ydEluZm8uTVNFJiYoaT0vXD8vZy50ZXN0KHIpP3IrIiZzdHJlYW1mb3JtPWZsdiI6cisiP3N0cmVhbWZvcm09Zmx2Iiksby5hV25kTGlzdFtzXS5ib3BlblRyYWNlSWQmJigtMSE9PWkuc2VhcmNoKCJ0cmFjZUlkPSIpJiYwPGkuc3BsaXQoInRyYWNlSWQ9IikucG9wKCkuc3BsaXQoIiYiKS5zaGlmdCgpLmxlbmd0aD9vLmFXbmRMaXN0W3NdLnN6VHJhY2VJZD1pLnNwbGl0KCJ0cmFjZUlkPSIpLnBvcCgpLnNwbGl0KCImIikuc2hpZnQoKTooby5hV25kTGlzdFtzXS5zelRyYWNlSWQ9by51dWlkMigxNiwxNiksaT0iIitpKygvXD8vZy50ZXN0KGkpPyImIjoiPyIpKyJ0cmFjZUlkPSIrby5hV25kTGlzdFtzXS5zelRyYWNlSWQpKSxyPWksYS5wbGF5VVJMJiYoYS5wbGF5VVJMPXIpLGEubW9kZT0ibWVkaWEiLC0xIT09aS5zZWFyY2goIndzczovLyIpJiYtMSE9PWkuc2VhcmNoKCIvcHJveHkvIikmJihhLnByb3h5PWkuc3BsaXQoIi9wcm94eS8iKS5wb3AoKS5zcGxpdCgiLyIpLnNoaWZ0KCksbj1pLnNwbGl0KCJ3c3M6Ly8iKS5wb3AoKS5zcGxpdCgiLyIpLnNoaWZ0KCksYS5wbGF5VVJMPWkucmVwbGFjZSgid3NzOiIsIndzOiIpLnJlcGxhY2UobiwiIikucmVwbGFjZSgiL3Byb3h5LyIsIiIpKSxvLmFXbmRMaXN0W3NdLnN6VXJsPXIsby5hV25kTGlzdFtzXS5vUGFyYW1zPWEsby5hV25kTGlzdFtzXS5zelN0YXJ0VGltZT11fHwiIixvLmFXbmRMaXN0W3NdLnN6U3RvcFRpbWU9ZHx8IiIsby5hV25kTGlzdFtzXS5wb2ludFNpZ25OdW1iZXI9ci5zcGxpdCgicmVhbHBsYXkvIikucG9wKCkuc3BsaXQoIi8iKS5zaGlmdCgpLG8uYVduZExpc3Rbc10uYlBsYXk/by5KU19TdG9wKHMpLnRoZW4oZnVuY3Rpb24oKXtvLl9vcGVuU3RyZWFtKHIsYSxzLHUsZCkudGhlbihmdW5jdGlvbigpe2UoKX0sZnVuY3Rpb24oZSl7dChlKX0pfSk6by5fb3BlblN0cmVhbShyLGEscyx1LGQpLnRoZW4oZnVuY3Rpb24oKXtlKCl9LGZ1bmN0aW9uKGUpe3QoZSl9KX0pfX0se2tleToiSlNfU2VlayIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcj0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTEsYT10aGlzLHM9YXJndW1lbnRzWzFdLG89YXJndW1lbnRzWzJdO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKHQsbil7aWYoKHI8MHx8cj5hLmlNYXhXbmROdW0tMXx8Im51bWJlciIhPXR5cGVvZiByKSYmKHI9YS5pQ3VycmVudFduZEluZGV4KSwic3RyaW5nIiE9dHlwZW9mIHN8fCJzdHJpbmciIT10eXBlb2YgbylyZXR1cm4gbihMLkVSUl9DT01fUEFSQU0pO3ZhciBlPXMsaT1vO2lmKC0xIT09cy5zZWFyY2goIloiKSYmKGU9ZS5yZXBsYWNlKCJaIiwiKzA4OjAwIikpLC0xIT09by5zZWFyY2goIloiKSYmKGk9aS5yZXBsYWNlKCJaIiwiKzA4OjAwIikpLGU9bmV3IERhdGUoZSkuZ2V0VGltZSgpLGk9bmV3IERhdGUoaSkuZ2V0VGltZSgpLCFlfHwhaXx8aTw9ZXx8LTE9PT1zLnNlYXJjaCgiVCIpfHwtMT09PXMuc2VhcmNoKCI6Iil8fC0xPT09cy5zZWFyY2goIi0iKXx8LTE9PT1vLnNlYXJjaCgiVCIpfHwtMT09PW8uc2VhcmNoKCI6Iil8fC0xPT09by5zZWFyY2goIi0iKSlyZXR1cm4gbihMLkVSUl9DT01fUEFSQU0pO2k9YS5fY2hlY2tQbGF5YmFjayhyKTswPT09aT8oYS5hV25kTGlzdFtyXS5iU2Vla09rPSExLGEuYVduZExpc3Rbcl0uaXNGbHYmJigoZT1zKSYmLTEhPT1lLnNlYXJjaCgiWiIpJiYoZT1lLnJlcGxhY2UoIloiLCIrMDg6MDAiKSksYS5hV25kTGlzdFtyXS5pQ3VyZW50T1NEVGltZT1uZXcgRGF0ZShlKS5nZXRUaW1lKCksYS5hV25kTGlzdFtyXS5pR2xvYmFsQmFzZVRpbWU9bmV3IERhdGUoZSkuZ2V0VGltZSgpLWEuYVduZExpc3Rbcl0uX29zZHRpbWVJbmZvLmZsdmR1cmF0aW9uLGEuYVduZExpc3Rbcl0ub01TRS5DbGVhbkNhY2hlKCksYS5hV25kTGlzdFtyXS5fcmVzZXRGbHZwbGF5ZXI9ITAsYS5hV25kTGlzdFtyXS5fcmVjZWl2ZWRMZW5ndGg9NCksMSE9PWEuYVduZExpc3Rbcl0uaU1vZGUmJmEuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9SZXNldEJ1ZmZlcigpLGEub1N0cmVhbUNsaWVudC5zZWVrKGEuYVduZExpc3Rbcl0uc3pTdHJlYW1VVUlELHMsbykudGhlbihmdW5jdGlvbigpe3ZhciBlOyEwPT09YS5hV25kTGlzdFtyXS5pc1BhdXNlJiYoMT09PWEuYVduZExpc3Rbcl0uaU1vZGU/KGU9YS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShyKSkuZ2V0KDApLnBsYXkmJmUuZ2V0KDApLnBsYXkoKTphLmFXbmRMaXN0W3JdLm9QbGF5Q3RybCYmYS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1BhdXNlKCExKSxhLmFXbmRMaXN0W3JdLmlzUGF1c2U9ITEpLGEuYVduZExpc3Rbcl0uYlNlZWtPaz0hMCx0KCl9LGZ1bmN0aW9uKGUpe2U9IjB4MCIrZS5lcnJvckNvZGUudG9TdHJpbmcoMTYpO2EuX2xvZy5FKGUrIjogIOWumuS9jeWksei0pe+8jOWPr+iDveaYr+WumuS9jeS8oOeahOaXtumXtOW8guW4uOWvvOiHtO+8jOivpuaDheagueaNrumUmeivr+eggeWcqOi/kOeuoeWQjuWPsOi/m+ihjOafpeivoi4iKSxuKGUpfSkpOm4oaSl9KX19LHtrZXk6IkpTX0dldFNka1ZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYVduZExpc3RbMF0ub1BsYXlDdHJsLlBsYXlNNF9HZXRTZGtWZXJzaW9uKCl9fSx7a2V5OiJKU19EZXN0cm95V29ya2VyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7dC5hV25kTGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2Uub1BsYXlDdHJsPW51bGx9KSxlKCl9KX19LHtrZXk6IkpTX0Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbih0KXtuLkpTX1N0b3BSZWFsUGxheUFsbCgpLnRoZW4oZnVuY3Rpb24oKXtuLm9TdHJlYW1DbGllbnQuc3RvcEFsbCgpLG4ub1N0cmVhbUNsaWVudD1udWxsLG4uX2xvZz1udWxsLG4ub1N0b3JhZ2VNYW5hZ2VyPW51bGw7Zm9yKHZhciBlPTA7ZTxuLmlNYXhXbmROdW07ZSsrKW4uYVduZExpc3RbZV0uX2VtaXRlcj1udWxsO24uX2Jyb3dzZXJJbmZvPW51bGwsbi5vRHJhd0NhbnZhcz1udWxsLHQoKX0pfSxmdW5jdGlvbihlKXtjb25zb2xlLmVycm9yKGUpfSl9fSx7a2V5OiJKU19TdG9wIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXMsaT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtpZigoaTwwfHxpPm4uaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIGkpJiYoaT1uLmlDdXJyZW50V25kSW5kZXgpLG4uYVduZExpc3RbaV0uYXN5bmNMb2NrJiYiMiI9PT1uLl9kZWNvZGVyVmVyc2lvbilyZXR1cm4gbi5fbG9nLkUoTC5FUlJfU1RSRUFNX0xPQ0tfRVJST1IrIjogIE11bHRpcGxlIGNhbGwganNfc3RvcCBBUEkgaW4gYSBzaG9ydCB0aW1lLCBwbGVhc2Ugd2FpdCBsYXN0dGltZSBjYWxsIG92ZXIuIiksdChMLkVSUl9TVFJFQU1fTE9DS19FUlJPUik7bi5hV25kTGlzdFtpXS5fYnBzQ2FsY3VsYXRvciYmKHNlbGYuY2xlYXJJbnRlcnZhbChuLmFXbmRMaXN0W2ldLl9icHNDYWxjdWxhdG9yKSxuLmFXbmRMaXN0W2ldLl9icHNDYWxjdWxhdG9yPW51bGwsbi5hV25kTGlzdFtpXS5fYnBzSW5mbz17bGFzdFZpZGVvQnl0ZXM6MCxicHNfdmlkZW86MCxkYXRhX3VwZGF0ZWRfdGltZTowLHRpbWVfZ2FwX2ZhY3RvcjoxfSksbi5hV25kTGlzdFtpXS5zelN0b3JhZ2VVVUlEJiZuLkpTX1N0b3BTYXZlKGkpLG4uYVduZExpc3RbaV0uYkVab29tJiZuLkpTX0Rpc2FibGVab29tKGkpLGk9PT1uLmlDdXJyZW50U291bmRXbmQmJihuLkpTX0Nsb3NlU291bmQoKSxuLmFXbmRMaXN0W2ldLk1TRVZvbHVtZT0uNSksY2xlYXJJbnRlcnZhbChuLmFXbmRMaXN0W2ldLnN0cmVhbUVuZGludGVyKSxuLmFXbmRMaXN0W2ldLmlzUGF1c2U9ITEsbi5hV25kTGlzdFtpXS5iRmlyc3RGcmFtZT0hMSxuLmFXbmRMaXN0W2ldLl9lbWl0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCksbi5hV25kTGlzdFtpXS5fcmVzZXRGbHZwbGF5ZXI9ITEsbi5fY2xvc2VTdHJlYW1BbmREZXN0b3J5KGkpLnRoZW4oZnVuY3Rpb24oKXtlKCl9LGZ1bmN0aW9uKGUpe3QoKX0pLG4uX2xvZy5JKCJpZDoiK24ub3B0aW9ucy5zeklkKyIgW2lXbmROdW0tIitpKyJdIGpzX3N0b3AgZW5kIil9KX19LHtrZXk6IkpTX1BhdXNlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBpPXRoaXMscj0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24odCxuKXsocjwwfHxyPmkuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIHIpJiYocj1pLmlDdXJyZW50V25kSW5kZXgpO3ZhciBlPWkuX2NoZWNrUGxheWJhY2socik7aWYoMD09PWUpcmV0dXJuIGkuYVduZExpc3Rbcl0uYkZyYW1lRm9yd2FyZD8oaS5fbG9nLkUoTC5FUlJfUExBWUJBQ0tfRlJBTUVGT1JXQVJEKyI6ICBzdGF0dXMgc2luZ2xlRnJhbWUgbm90IHN1cHBvcnQgdGhpcyBoYW5kbGUuIiksdm9pZCBuKEwuRVJSX1BMQVlCQUNLX0ZSQU1FRk9SV0FSRCkpOiEwPT09aS5hV25kTGlzdFtyXS5pc1BhdXNlP3QoKTp2b2lkIGkub1N0cmVhbUNsaWVudC5wYXVzZShpLmFXbmRMaXN0W3JdLnN6U3RyZWFtVVVJRCkudGhlbihmdW5jdGlvbigpe3ZhciBlOzE9PT1pLmFXbmRMaXN0W3JdLmlNb2RlPyhlPWkub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocikpLmdldCgwKS5wYXVzZSYmZS5nZXQoMCkucGF1c2UoKTppLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGF1c2UmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9QYXVzZSghMCksaS5hV25kTGlzdFtyXS5pc1BhdXNlPSEwLHQoKX0sZnVuY3Rpb24oZSl7bihlKX0pO24oZSl9KX19LHtrZXk6IkpTX1Jlc3VtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKHQsbil7KHI8MHx8cj5pLmlNYXhXbmROdW0tMXx8Im51bWJlciIhPXR5cGVvZiByKSYmKHI9aS5pQ3VycmVudFduZEluZGV4KTt2YXIgZT1pLl9jaGVja1BsYXkocik7cmV0dXJuIDAhPT1lP24oZSk6KGkuYVduZExpc3Rbcl0uYkZyYW1lRm9yd2FyZCYmKCIyIj09PWkuX2RlY29kZXJWZXJzaW9uP2kuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9PbmVCeU9uZV9QbGF5JiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfT25lQnlPbmVfUGxheSgpOmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9QbGF5KGkub3B0aW9ucy5zeklkKyJfcGxheUNhbnZhcyIrciksaS5hV25kTGlzdFtyXS5iRnJhbWVGb3J3YXJkPSExKSwhMT09PWkuYVduZExpc3Rbcl0uaXNQYXVzZT90KCk6dm9pZCBpLm9TdHJlYW1DbGllbnQucmVzdW1lKGkuYVduZExpc3Rbcl0uc3pTdHJlYW1VVUlEKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU7MT09PWkuYVduZExpc3Rbcl0uaU1vZGU/KGU9aS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShyKSkuZ2V0KDApLnBsYXkmJmUuZ2V0KDApLnBsYXkoKTooMSE9PWkuaUN1cnJlbnRQbGF5UmF0ZSYmKGkuYVduZExpc3Rbcl0uaVJhdGU9aS5pQ3VycmVudFBsYXlSYXRlLGkub1N0cmVhbUNsaWVudC5zZXRQbGF5UmF0ZShpLmFXbmRMaXN0W3JdLnN6U3RyZWFtVVVJRCxpLmFXbmRMaXN0W3JdLmlSYXRlKSxpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGxheVJhdGUmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9QbGF5UmF0ZShpLmFXbmRMaXN0W3JdLmlSYXRlKSwxPGkuaUN1cnJlbnRQbGF5UmF0ZT9pLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDEpOmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUoMCkpLGkuYVduZExpc3Rbcl0ub1BsYXlDdHJsJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGF1c2UoITEpKSxpLmFXbmRMaXN0W3JdLmlzUGF1c2U9ITEsdCgpfSxmdW5jdGlvbihlKXtuKGUpfSkpfSl9fSx7a2V5OiJKU19TbG93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBpPXRoaXMscj0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24odCxuKXsocjwwfHxyPmkuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIHIpJiYocj1pLmlDdXJyZW50V25kSW5kZXgpO3ZhciBlPWkuX2NoZWNrUGxheWJhY2socik7cmV0dXJuIDAhPT1lP24oZSk6aS5hV25kTGlzdFtyXS5iRnJhbWVGb3J3YXJkPyhpLl9sb2cuRShMLkVSUl9QTEFZQkFDS19GUkFNRUZPUldBUkQrIjogIHN0YXR1cyBzaW5nbGVGcmFtZSBub3Qgc3VwcG9ydCB0aGlzIGhhbmRsZS4iKSxuKEwuRVJSX1BMQVlCQUNLX0ZSQU1FRk9SV0FSRCkpOi04PT09aS5hV25kTGlzdFtyXS5pUmF0ZT8oaS5fbG9nLkUoTC5FUlJfUExBWUJBQ0tfTUlOX1JBVEUrIjogIGN1cnJlbnQgcmF0ZSBpcyB0aGUgbWluLiIpLHZvaWQgbihMLkVSUl9QTEFZQkFDS19NSU5fUkFURSkpOihpLmFXbmRMaXN0W3JdLmlSYXRlPDAmJi04PGkuYVduZExpc3Rbcl0uaVJhdGUmJihpLmFXbmRMaXN0W3JdLmlSYXRlKj0yKSwxPT09aS5hV25kTGlzdFtyXS5pUmF0ZSYmKGkuYVduZExpc3Rbcl0uaVJhdGUqPS0yKSwxPGkuYVduZExpc3Rbcl0uaVJhdGUmJihpLmFXbmRMaXN0W3JdLmlSYXRlLz0yKSx2b2lkIGkub1N0cmVhbUNsaWVudC5zZXRQbGF5UmF0ZShpLmFXbmRMaXN0W3JdLnN6U3RyZWFtVVVJRCxpLmFXbmRMaXN0W3JdLmlSYXRlKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGU7MT09PWkuYVduZExpc3Rbcl0uaU1vZGU/KGU9aS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShyKS5nZXQoMCksaS5hV25kTGlzdFtyXS5pUmF0ZTwwP2UucGxheWJhY2tSYXRlPTEvTWF0aC5hYnMoaS5hV25kTGlzdFtyXS5pUmF0ZSk6ZS5wbGF5YmFja1JhdGU9aS5hV25kTGlzdFtyXS5pUmF0ZSwxPT09aS5hV25kTGlzdFtyXS5pUmF0ZSYmaS5hV25kTGlzdFtyXS5iT3BlblNvdW5kP2kub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocilbMF0udm9sdW1lPWkuYVduZExpc3Rbcl0uTVNFVm9sdW1lOmkub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocilbMF0udm9sdW1lPTApOihpLmFXbmRMaXN0W3JdLmlSYXRlPD0yJiYiMiI9PT1pLl9kZWNvZGVyVmVyc2lvbnx8aS5hV25kTGlzdFtyXS5pUmF0ZTwyJiYiMiIhPT1pLl9kZWNvZGVyVmVyc2lvbj9pLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDApOmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUoMSksaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1BsYXlSYXRlJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGxheVJhdGUoaS5hV25kTGlzdFtyXS5pUmF0ZSksaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1Nsb3cmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TbG93KGkuYVduZExpc3Rbcl0uaVJhdGUpKSx0KGkuYVduZExpc3Rbcl0uaVJhdGUpfSxmdW5jdGlvbihlKXtuKGUpfSkpfSl9fSx7a2V5OiJKU19GYXN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBpPXRoaXMscj0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuKHI8MHx8cj50aGlzLmlNYXhXbmROdW0tMXx8Im51bWJlciIhPXR5cGVvZiByKSYmKHI9dGhpcy5pQ3VycmVudFduZEluZGV4KSxuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKHQsbil7dmFyIGU9aS5fY2hlY2tQbGF5YmFjayhyKTtyZXR1cm4gMCE9PWU/bihlKTppLmFXbmRMaXN0W3JdLmJGcmFtZUZvcndhcmQ/KGkuX2xvZy5FKEwuRVJSX1BMQVlCQUNLX0ZSQU1FRk9SV0FSRCsiOiAgc3RhdHVzIHNpbmdsZUZyYW1lIG5vdCBzdXBwb3J0IHRoaXMgaGFuZGxlLiIpLG4oTC5FUlJfUExBWUJBQ0tfRlJBTUVGT1JXQVJEKSk6OD09PWkuYVduZExpc3Rbcl0uaVJhdGU/KGkuX2xvZy5FKEwuRVJSX1BMQVlCQUNLX01BWF9SQVRFKyI6ICBjdXJyZW50IHJhdGUgaXMgdGhlIG1heC4iKSxuKEwuRVJSX1BMQVlCQUNLX01BWF9SQVRFKSk6KC0yPT09aS5hV25kTGlzdFtyXS5pUmF0ZT9pLmFXbmRMaXN0W3JdLmlSYXRlPTE6aS5hV25kTGlzdFtyXS5pUmF0ZTwtMj9pLmFXbmRMaXN0W3JdLmlSYXRlLz0yOjA8aS5hV25kTGlzdFtyXS5pUmF0ZSYmaS5hV25kTGlzdFtyXS5pUmF0ZTw4JiYoaS5hV25kTGlzdFtyXS5pUmF0ZSo9Miksdm9pZCBpLm9TdHJlYW1DbGllbnQuc2V0UGxheVJhdGUoaS5hV25kTGlzdFtyXS5zelN0cmVhbVVVSUQsaS5hV25kTGlzdFtyXS5pUmF0ZSkudGhlbihmdW5jdGlvbigpe3ZhciBlOzE9PT1pLmFXbmRMaXN0W3JdLmlNb2RlPyhpLmFXbmRMaXN0W3JdLm9NU0UuY2xvc2VMYXRlbmN5TW9uaXRvcigpLGU9aS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShyKS5nZXQoMCksaS5hV25kTGlzdFtyXS5pUmF0ZTwwP2UucGxheWJhY2tSYXRlPTEvTWF0aC5hYnMoaS5hV25kTGlzdFtyXS5pUmF0ZSk6ZS5wbGF5YmFja1JhdGU9aS5hV25kTGlzdFtyXS5pUmF0ZSwxPT09aS5hV25kTGlzdFtyXS5pUmF0ZSYmaS5hV25kTGlzdFtyXS5iT3BlblNvdW5kP2kub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocilbMF0udm9sdW1lPWkuYVduZExpc3Rbcl0uTVNFVm9sdW1lOmkub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocilbMF0udm9sdW1lPTApOihpLmFXbmRMaXN0W3JdLmlSYXRlPD0yJiYiMiI9PT1pLl9kZWNvZGVyVmVyc2lvbnx8aS5hV25kTGlzdFtyXS5pUmF0ZTwyJiYiMiIhPT1pLl9kZWNvZGVyVmVyc2lvbj9pLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDApOmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUoMSksaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1BsYXlSYXRlJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGxheVJhdGUoaS5hV25kTGlzdFtyXS5pUmF0ZSksaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X0Zhc3QmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9GYXN0KGkuYVduZExpc3Rbcl0uaVJhdGUpKSx0KGkuYVduZExpc3Rbcl0uaVJhdGUpfSxmdW5jdGlvbihlKXtuKGUpfSkpfSl9fSx7a2V5OiJKU19UcmFuc21pc3Npb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMSxyPWFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbih0LG4peyhpPDB8fGk+ZS5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgaSkmJihpPWUuaUN1cnJlbnRXbmRJbmRleCksZS5hV25kTGlzdFtpXS5zelN0cmVhbVVVSUQ/ZS5vU3RyZWFtQ2xpZW50LnRyYW5zbWlzc2lvbihlLmFXbmRMaXN0W2ldLnN6U3RyZWFtVVVJRCxyKS50aGVuKGZ1bmN0aW9uKGUpe3QoZSl9LGZ1bmN0aW9uKGUpe24oZSl9KTpuKCl9KX19LHtrZXk6IkpTX0ZyYW1lRm9yd2FyZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xLGE9MTxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXsocjwwfHxyPmkuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIHIpJiYocj1pLmlDdXJyZW50V25kSW5kZXgpO3ZhciBuPWkuX2NoZWNrUGxheWJhY2socik7cmV0dXJuIDAhPT1uP3Qobik6MT09PWkuYVduZExpc3Rbcl0uaU1vZGU/KGkuX2xvZy5FKEwuRVJSX0NPTV9JU19NU0UrIjogTVNFIHVuc3VwcG9ydCB0aGlzIGZ1bmN0aW9uLiIpLHQoTC5FUlJfQ09NX0lTX01TRSkpOigxIT09aS5hV25kTGlzdFtyXS5pUmF0ZT8oaS5hV25kTGlzdFtyXS5pUmF0ZT0xLGkuaUN1cnJlbnRQbGF5UmF0ZT1pLmFXbmRMaXN0W3JdLmlSYXRlLGkub1N0cmVhbUNsaWVudC5zZXRQbGF5UmF0ZShpLmFXbmRMaXN0W3JdLnN6U3RyZWFtVVVJRCxpLmFXbmRMaXN0W3JdLmlSYXRlKS50aGVuKGZ1bmN0aW9uKCl7aS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1BsYXlSYXRlJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGxheVJhdGUoaS5hV25kTGlzdFtyXS5pUmF0ZSksaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1NldERlY29kZUZyYW1lVHlwZSYmaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1NldERlY29kZUZyYW1lVHlwZSgwKSxpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfT25lQnlPbmUmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9PbmVCeU9uZShhKSxpLmFXbmRMaXN0W3JdLmJGcmFtZUZvcndhcmQ9ITB9LGZ1bmN0aW9uKGUpe3QoZSl9KSk6KGkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUmJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUoMCksaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X09uZUJ5T25lJiZpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfT25lQnlPbmUoYSksaS5hV25kTGlzdFtyXS5iRnJhbWVGb3J3YXJkPSEwKSx2b2lkIGUoKSl9KX19LHtrZXk6IkpTX0dldE9TRFRpbWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcyxyPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihuLGUpeyhyPDB8fHI+aS5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgcikmJihyPWkuaUN1cnJlbnRXbmRJbmRleCk7dmFyIHQ9aS5fY2hlY2tQbGF5KHIpOzA9PT10PzE9PT1pLmFXbmRMaXN0W3JdLmlNb2RlPyhpLm9KU1BsdWdpbi5maW5kKCJ2aWRlby5wbGF5LXdpbmRvdyIpLmVxKHIpLmdldCgwKSxuKGkuYVduZExpc3Rbcl0uaUN1cmVudE9TRFRpbWUpKToiMSI9PT1pLl9kZWNvZGVyVmVyc2lvbj9pLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfR2V0T1NEVGltZSYmaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X0dldE9TRFRpbWUoZnVuY3Rpb24oZSl7dmFyIHQ7ZT8odD0iaW9zIj09PWkuX2Jyb3dzZXJJbmZvLl9zeXN0ZW18fGcub1Rvb2wuaXNFZGdlKCk/Ii8iOiIgIix0PURhdGUucGFyc2UoZS5yZXBsYWNlKC8tL2csdCkpLG4odCkpOm4oZSl9KTooaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X0dldEZyYW1lSW5mbyYmaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X0dldEZyYW1lSW5mbyhmdW5jdGlvbihlKXtpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5pWVVWV2lkdGg9ZS53aWR0aCxpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5pWVVWSGVpZ2h0PWUuaGVpZ2h0LGkuX2dldE9TRFRpbWUocixlLnllYXIsZS5tb250aCxlLmRheSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQpLGkuYVduZExpc3Rbcl0uX3ZpZGVvSW5mby5oZWlnaHQ9ZS5oZWlnaHQsaS5hV25kTGlzdFtyXS5fdmlkZW9JbmZvLndpZHRoPWUud2lkdGgsaS5hV25kTGlzdFtyXS5fdmlkZW9JbmZvLmZyYW1lUmF0ZT1lLmZyYW1lUmF0ZX0pLG4oaS5hV25kTGlzdFtyXS5pQ3VyZW50T1NEVGltZSkpOmUodCl9KX19LHtrZXk6IkpTX1NldE5vcm1hbERlY29kZXJBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xLGk9YXJndW1lbnRzWzFdO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUpeyhuPDB8fG4+dC5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgbikmJihuPXQuaUN1cnJlbnRXbmRJbmRleCksdC5hV25kTGlzdFtuXS5tc2VEZWNvZGVyQXVkaW89aSxlKCl9KX19LHtrZXk6IkpTX09wZW5Tb3VuZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xO3JldHVybihyPDB8fHI+dGhpcy5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgcikmJihyPXRoaXMuaUN1cnJlbnRXbmRJbmRleCksbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe3ZhciBuPWkuX2NoZWNrUGxheShyKTtpZigwIT09bilyZXR1cm4gdChuKTtpZighaS5hV25kTGlzdFtyXS5iRmlyc3RGcmFtZSlyZXR1cm4gdChMLkVSUl9DT01fT1BFTlNPVU5EX0VSUk9SKTtuPWkuaUN1cnJlbnRTb3VuZFduZDtpZihuIT09cil7aWYoLTEhPT1uJiYoMT09PWkuYVduZExpc3Rbbl0uaU1vZGU/aS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShuKVswXS52b2x1bWU9MDppLmFXbmRMaXN0W25dLm9QbGF5Q3RybC5QbGF5TTRfU3RvcFNvdW5kJiZpLmFXbmRMaXN0W25dLm9QbGF5Q3RybC5QbGF5TTRfU3RvcFNvdW5kKCkpLDE9PT1pLmFXbmRMaXN0W3JdLmlNb2RlKXtpZigiQUFDIiE9PWkuYVduZExpc3Rbcl0uX3ZpZGVvSW5mby5hdWRpb1R5cGUpcmV0dXJuIHQoTC5FUlJfU1RSRUFNX1NPVU5EX05PVEhBUyk7aS5hV25kTGlzdFtyXS5tc2VEZWNvZGVyQXVkaW98fChpLmFXbmRMaXN0W3JdLmJPcGVuU291bmQ9ITAsaS5fc3RyZWFtUmVzZXQocikpO249aS5vSlNQbHVnaW4uZmluZCgidmlkZW8ucGxheS13aW5kb3ciKS5lcShyKVswXTtuLnZvbHVtZT1pLmFXbmRMaXN0W3JdLk1TRVZvbHVtZSxuLnBhdXNlZCYmbi5wbGF5KCl9ZWxzZSBpZihpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfUGxheVNvdW5kJiYxIT09aS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1BsYXlTb3VuZChyKSlyZXR1cm4gdm9pZCB0KEwuRVJSX0pTREVDT0RFUitpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfR2V0TGFzdEVycm9yKCkudG9TdHJpbmcoKSk7aS5pQ3VycmVudFNvdW5kV25kPXIsaS5hV25kTGlzdFtyXS5iT3BlblNvdW5kPSEwLGUoKX1lbHNlIGUoKX0pfX0se2tleToiSlNfR2V0Vm9sdW1lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0LGk9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihuLGUpe2lmKC0xPT09aS5pQ3VycmVudFNvdW5kV25kKXJldHVybiBlKEwuRVJSX0NPTV9TRVRPUkdFVF9WT0xVTUVfRVJST1IpO3Q9aS5pQ3VycmVudFNvdW5kV25kLDE9PT1pLmFXbmRMaXN0W3RdLmlNb2RlPyhlPTEwMCppLm9KU1BsdWdpbi5maW5kKCJ2aWRlby5wbGF5LXdpbmRvdyIpLmVxKHQpLmdldCgwKS52b2x1bWUsbihlKSk6aS5hV25kTGlzdFt0XS5vUGxheUN0cmwuUGxheU00X0dldFZvbHVtZSYmaS5hV25kTGlzdFt0XS5vUGxheUN0cmwuUGxheU00X0dldFZvbHVtZShmdW5jdGlvbihlKXt2YXIgdD1lOyIyIj09PWkuX2RlY29kZXJWZXJzaW9uJiYodD1NYXRoLmNlaWwoZS82NTUpKSxuKHQpfSl9KX19LHtrZXk6IkpTX1NldFZvbHVtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaSxyPXRoaXMsYT1hcmd1bWVudHNbMV07cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtpZigtMT09PXIuaUN1cnJlbnRTb3VuZFduZClyZXR1cm4gdChMLkVSUl9DT01fU0VUT1JHRVRfVk9MVU1FX0VSUk9SKTtpZihpPXIuaUN1cnJlbnRTb3VuZFduZCxhPDF8fDEwMDxhfHwibnVtYmVyIiE9dHlwZW9mIGEpcmV0dXJuIHQoTC5FUlJfQ09NX1NFVFZPTFVNRV9FUlJPUik7aWYoMT09PXIuYVduZExpc3RbaV0uaU1vZGUpe3RyeXt2YXIgbj1yLm9KU1BsdWdpbi5maW5kKCJ2aWRlby5wbGF5LXdpbmRvdyIpLmVxKGkpLmdldCgwKTtuLnZvbHVtZT1hLzEwMCxyLmFXbmRMaXN0W2ldLk1TRVZvbHVtZT1uLnZvbHVtZX1jYXRjaChlKXt0KGUpfWUoKX1lbHNle3IuYVduZExpc3RbaV0ub1BsYXlDdHJsLlBsYXlNNF9TZXRWb2x1bWV8fHQoKTtuPWE7IjIiPT09ci5fZGVjb2RlclZlcnNpb24mJihuPU1hdGguY2VpbCg2NTUqYSkpLDA9PT1yLmFXbmRMaXN0W2ldLm9QbGF5Q3RybC5QbGF5TTRfU2V0Vm9sdW1lKG4pP3QoTC5FUlJfSlNERUNPREVSK3IuYVduZExpc3RbaV0ub1BsYXlDdHJsLlBsYXlNNF9HZXRMYXN0RXJyb3IoKS50b1N0cmluZygpKTplKCl9fSl9fSx7a2V5OiJKU19DbG9zZVNvdW5kIix2YWx1ZTpmdW5jdGlvbigpe3ZhciByPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXt2YXIgbixpPXIuaUN1cnJlbnRTb3VuZFduZDtpPDB8fGk+ci5pTWF4V25kTnVtLTE/ZSgpOjA9PT0obj1yLl9jaGVja1BsYXkoaSkpPygxPT09ci5hV25kTGlzdFtpXS5pTW9kZT9yLm9KU1BsdWdpbi5maW5kKCJ2aWRlby5wbGF5LXdpbmRvdyIpLmVxKGkpWzBdLnZvbHVtZT0wOnIuYVduZExpc3RbaV0ub1BsYXlDdHJsLlBsYXlNNF9TdG9wU291bmQmJjEhPT1yLmFXbmRMaXN0W2ldLm9QbGF5Q3RybC5QbGF5TTRfU3RvcFNvdW5kKCkmJnQoTC5FUlJfSlNERUNPREVSK3IuYVduZExpc3RbaV0ub1BsYXlDdHJsLlBsYXlNNF9HZXRMYXN0RXJyb3IoKS50b1N0cmluZygpKSxyLmlDdXJyZW50U291bmRXbmQ9LTEsci5hV25kTGlzdFtpXS5iT3BlblNvdW5kPSExLGUoKSk6dChuKX0pfX0se2tleToiSlNfRW5hYmxlWm9vbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xO3JldHVybihyPDB8fHI+dGhpcy5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgcikmJihyPXRoaXMuaUN1cnJlbnRXbmRJbmRleCksbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe3ZhciBuPWkuX2NoZWNrUGxheShyKTtyZXR1cm4gMCE9PW4/dChuKToxPT09aS5hV25kTGlzdFtyXS5pTW9kZT8oaS5fbG9nLkUoTC5FUlJfQ09NX0lTX01TRSsiOiBNU0UgdW5zdXBwb3J0IHRoaXMgZnVuY3Rpb24uIiksdChMLkVSUl9DT01fSVNfTVNFKSk6KGkub0pTUGx1Z2luLmZpbmQoIi5kcmF3LXdpbmRvdyIpLnVuYmluZCgpLGkub0RyYXdDYW52YXM9bmV3IGMuRVNDYW52YXMoaS5vcHRpb25zLnN6SWQrIl9jYW52YXNfZHJhdyIrciksaS5vRHJhd0NhbnZhcy5zZXRTaGFwZVR5cGUoIlJlY3QiKSxpLm9EcmF3Q2FudmFzLnNldERyYXdTdHlsZSgiI2ZmMDAwMCIsIiIsMCksaS5vRHJhd0NhbnZhcy5zZXREcmF3U3RhdHVzKCEwLGZ1bmN0aW9uKGUpe2Uuc3RhcnRQb3MmJmUuZW5kUG9zJiYoZS5zdGFydFBvc1swXT5lLmVuZFBvc1swXT9pLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGlzcGxheVJlZ2lvbiYmaS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1NldERpc3BsYXlSZWdpb24obnVsbCwhMSk6aS5hV25kTGlzdFtyXS5vUGxheUN0cmwuUGxheU00X1NldERpc3BsYXlSZWdpb24mJmkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREaXNwbGF5UmVnaW9uKHtsZWZ0OmUuc3RhcnRQb3NbMF0sdG9wOmUuc3RhcnRQb3NbMV0scmlnaHQ6ZS5lbmRQb3NbMF0sYm90dG9tOmUuZW5kUG9zWzFdfSwhMCkpfSksaS5hV25kTGlzdFtyXS5iRVpvb209ITAsdm9pZCBlKCkpfSl9fSx7a2V5OiJKU19EaXNhYmxlWm9vbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaT10aGlzLHI9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xO3JldHVybihyPDB8fHI+dGhpcy5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgcikmJihyPXRoaXMuaUN1cnJlbnRXbmRJbmRleCksbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe3ZhciBuPWkuX2NoZWNrUGxheShyKTtyZXR1cm4gMCE9PW4/dChuKToxPT09aS5hV25kTGlzdFtyXS5pTW9kZT8oaS5fbG9nLkUoTC5FUlJfQ09NX0lTX01TRSsiOiBNU0UgdW5zdXBwb3J0IHRoaXMgZnVuY3Rpb24uIiksdChMLkVSUl9DT01fSVNfTVNFKSk6KGkub0RyYXdDYW52YXMuc2V0RHJhd1N0YXR1cyghMSksaS5vRHJhd0NhbnZhcy5jbGVhckFsbFNoYXBlKCksdm9pZChpLmFXbmRMaXN0W3JdLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGlzcGxheVJlZ2lvbiYmMSE9PWkuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9TZXREaXNwbGF5UmVnaW9uKG51bGwsITEpP3QoTC5FUlJfSlNERUNPREVSK2kuYVduZExpc3Rbcl0ub1BsYXlDdHJsLlBsYXlNNF9HZXRMYXN0RXJyb3IoKS50b1N0cmluZygpKTooaS5hV25kTGlzdFtyXS5iRVpvb209ITEsZSgpKSkpfSl9fSx7a2V5OiJKU19FbmFibGUzRFpvb20iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMSxyPWFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpeyhpPDB8fGk+bi5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgaSkmJihpPW4uaUN1cnJlbnRXbmRJbmRleCksbi5hV25kTGlzdFtpXS5iUGxheT8obi5vSlNQbHVnaW4uZmluZCgiLmRyYXctd2luZG93IikudW5iaW5kKCksbi5mRHJhd0NhbGxiYWNrPXIsbi5vRHJhd0NhbnZhcz1uZXcgYy5FU0NhbnZhcygiY2FudmFzX2RyYXciK2kpLG4ub0RyYXdDYW52YXMuc2V0U2hhcGVUeXBlKCJSZWN0Iiksbi5vRHJhd0NhbnZhcy5zZXREcmF3U3R5bGUoIiNmZjAwMDAiLCIiLDApLG4ub0RyYXdDYW52YXMuc2V0RHJhd1N0YXR1cyghMCxmdW5jdGlvbihlKXtyKGUpfSksbi5hV25kTGlzdFtpXS5iM0Rab29tPSEwLGUoKSk6dCgpfSl9fSx7a2V5OiJKU19EaXNhYmxlM0Rab29tIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXMsaT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXsoaTwwfHxpPm4uaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIGkpJiYoaT1uLmlDdXJyZW50V25kSW5kZXgpLG4uYVduZExpc3RbaV0uYlBsYXk/KG4ub0RyYXdDYW52YXMuc2V0RHJhd1N0YXR1cyghMSksbi5hV25kTGlzdFtpXS5iM0Rab29tPSExLGUoKSk6dCgpfSl9fSx7a2V5OiJKU19DYXB0dXJlUGljdHVyZSIsdmFsdWU6KGE9KDAseS5kZWZhdWx0KShwLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKCl7dmFyIGQ9MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xLGw9YXJndW1lbnRzWzFdLGg9dGhpcyxjPWFyZ3VtZW50c1syXSxfPWFyZ3VtZW50c1szXTtyZXR1cm4gcC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oKXt2YXIgbj0oMCx5LmRlZmF1bHQpKHAuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIGUodCxuKXt2YXIgaSxyLGEscyxvLHU7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKChkPDB8fGQ+aC5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgZCkmJihkPWguaUN1cnJlbnRXbmRJbmRleCksMCE9PShhPWguX2NoZWNrUGxheShkKSkpcmV0dXJuIG4oYSksZS5hYnJ1cHQoInJldHVybiIpO2UubmV4dD01O2JyZWFrO2Nhc2UgNTppZihoLmFXbmRMaXN0W2RdLmJGaXJzdEZyYW1lKXtlLm5leHQ9NzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbihMLkVSUl9DQVBUVVJFX05PX1BSRVBBUkVEKSk7Y2FzZSA3OmlmKGM9IkpQRUciLGk9bnVsbCwxIT09KHI9aC5hV25kTGlzdFtkXSkuaU1vZGUpe2UubmV4dD0yMTticmVha31hPWgub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEoZCkuZ2V0KDApLHM9YS52aWRlb1dpZHRoLG89YS52aWRlb0hlaWdodCwodT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSkud2lkdGg9cyx1LmhlaWdodD1vLHUuZ2V0Q29udGV4dCgiMmQiKS5kcmF3SW1hZ2UoYSwwLDAscyxvKSxpPXUudG9EYXRhVVJMKCJpbWFnZS8iK2MpLGUubmV4dD0yNDticmVhaztjYXNlIDIxOnJldHVybiBlLm5leHQ9MjMsaC5fanNkZWNvZGVyQ2FwdHVyZShyLGMpO2Nhc2UgMjM6aT1lLnNlbnQ7Y2FzZSAyNDppZihfKXJldHVybiBfKGkpLHQoKSxlLmFicnVwdCgicmV0dXJuIik7ZS5uZXh0PTI4O2JyZWFrO2Nhc2UgMjg6KHM9aS5zcGxpdCgiOyIpLnNoaWZ0KCkuc3BsaXQoIi8iKS5wb3AoKSkhPT1jLnRvTG93ZXJDYXNlKCkmJmguX2xvZy5XKCJDdXJyZW50IEJyb3dzZXIgaXMgbm90IHN1cHBvcnQgdG8gY2FwdHVyZSAnIitjKyInIGltYWdlIHR5cGUsIGF1dG8gY2FwdHVyZSAnIitzLnRvVXBwZXJDYXNlKCkrIicgaW1hZ2UuIiksKG89ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIikpLmluaXRFdmVudCgiY2xpY2siLCExLCExKSwodT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikpLmhyZWY9QmxvYj9VUkwuY3JlYXRlT2JqZWN0VVJMKGcub1Rvb2wuZGF0YVVSTHRvQmxvYihpKSk6aSx1LmRvd25sb2FkPWwrIi4iK3MsdS5kaXNwYXRjaEV2ZW50KG8pLHQoKTtjYXNlIDM3OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxlLGgpfSkpO3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGUsdGhpcyl9KSksZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiX2pzZGVjb2RlckNhcHR1cmUiLHZhbHVlOmZ1bmN0aW9uKHQsbyl7dmFyIHU9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihhLHMpe2Z1bmN0aW9uIGUoZSl7aWYoNj09PWUpcmV0dXJuIHUuX2xvZy5FKEwuRVJSX0NBUFRVUkVfUkFNKyI6IGNhcHR1cmUgZmFpbGVkLCBtZW1vcnkgbm90IGVub3VnaC4iKSxzKEwuRVJSX0NBUFRVUkVfUkFNKTtmb3IodmFyIHQ9IiIsbj1lLmJ5dGVMZW5ndGgsaT0wO2k8bjtpKyspdCs9U3RyaW5nLmZyb21DaGFyQ29kZShlW2ldKTt2YXIgcj1idG9hKHQpLHI9ImRhdGE6aW1hZ2UvIitvLnRvTG93ZXJDYXNlKCkrIjtiYXNlNjQsIityO2Eocil9IkpQRUciPT09bz90Lm9QbGF5Q3RybC5QbGF5TTRfR2V0SlBFRyhlKToiQk1QIj09PW8mJnQub1BsYXlDdHJsLlBsYXlNNF9HZXRCTVAoZSl9KX19LHtrZXk6IkpTX1N0b3BSZWFsUGxheUFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUpe24uYVduZExpc3QuZm9yRWFjaChmdW5jdGlvbihlLHQpe24uSlNfU3RvcCh0KX0pLG4ub1N0cmVhbUNsaWVudC5zdG9wQWxsKCksbi5pQ3VycmVudFNvdW5kV25kPS0xLGUoKX0pfX0se2tleToiSlNfU3RhcnRTYXZlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMSxpPXRoaXMscj1hcmd1bWVudHNbMV0sYT1hcmd1bWVudHNbMl07cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXsobjwwfHxuPmkuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIG4pJiYobj1pLmlDdXJyZW50V25kSW5kZXgpLGkuSlNfU3RhcnRTYXZlRXgobixyLDIsYSkudGhlbihmdW5jdGlvbigpe2UoKX0sZnVuY3Rpb24oZSl7dChlKX0pfSl9fSx7a2V5OiJKU19TdGFydFNhdmVFeCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbz0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTEsdT1hcmd1bWVudHNbMV0sZD10aGlzLGw9YXJndW1lbnRzWzJdLGg9YXJndW1lbnRzWzNdO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKHQsZSl7dmFyIG4saSxyLGEsczsobzwwfHxvPmQuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIG8pJiYobz1kLmlDdXJyZW50V25kSW5kZXgpLDI9PT1sfHw1PT09bD9udWxsIT09dT8obj0xLGk9bnVsbCxoJiYobj1oLmlyZWNvcmRUeXBlLGk9aC5jYlN0cmVhbUNCKSwwPT09KHI9ZC5fY2hlY2tQbGF5KG8pKT9kLmFXbmRMaXN0W29dLnN6U3RvcmFnZVVVSUQ/ZShMLkVSUl9QTEFZX0ZJTEVTWVNfQUxSRUFEWV9XUklUSU5HKToodS5pbmRleE9mKCIubXA0Iik8MCYmKHUrPSIubXA0IiksYT1kLmFXbmRMaXN0W29dLmFIZWFkLHM9MCwicmVhbHBsYXkiIT09ZC5hV25kTGlzdFtvXS5zelBsYXlUeXBlJiYocz0xKSxkLmFXbmRMaXN0W29dLmlzRmx2JiYoYT1kLmZsdnRvaGlrSGVhZChvKSksKDU9PT1sJiYzMz09PWFbMTJdJiYxMTQ9PT1hWzEzXXx8OTg9PT1hWzEyXSYmMTE0PT09YVsxM118fDA9PT1hWzEyXSYmMzI9PT1hWzEzXSkmJihhWzEyXT0wLGFbMTNdPTApLDEyOT09PWFbMjRdJiYobD0xKSxkLm9TdG9yYWdlTWFuYWdlci5zdGFydFJlY29yZCh1LGEsbCxzLHtjYkV2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXtkLl9jbG9zZVN0cmVhbUFuZERlc3RvcnkobyksZC5vRXZlbnRDYWxsYmFjay5wbHVnaW5FcnJvckhhbmRsZXIobyxlKX0saXJlY29yZFR5cGU6bixjYlN0cmVhbUNCOml9KS50aGVuKGZ1bmN0aW9uKGUpe2QuYVduZExpc3Rbb10uc3pTdG9yYWdlVVVJRD1lLGQuYVduZExpc3Rbb10uaXNGbHYmJmQuYVduZExpc3Rbb10ub01TRS5zZXRSZWNvcmRGbGFnKCEwKSx0KCl9LGZ1bmN0aW9uKCl7ZSgpfSkpOmUocikpOmUoTC5FUlJfUExBWV9GSUxFU1lTX0ZJTEVOQU1FX0lTTlVMTCk6ZShMLkVSUl9QTEFZX0ZJTEVTWVNfTk9UX1NVUFBPUlRfRFNUVFlQRSl9KX19LHtrZXk6IkpTX1N0b3BTYXZlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXMsaT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXsoaTwwfHxpPm4uaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIGkpJiYoaT1uLmlDdXJyZW50V25kSW5kZXgpLG4uYVduZExpc3RbaV0uc3pTdG9yYWdlVVVJRD8obi5hV25kTGlzdFtpXS5pc0ZsdiYmbi5hV25kTGlzdFtpXS5vTVNFLnNldFJlY29yZEZsYWcoITEpLG4ub1N0b3JhZ2VNYW5hZ2VyLnN0b3BSZWNvcmQobi5hV25kTGlzdFtpXS5zelN0b3JhZ2VVVUlEKS50aGVuKGZ1bmN0aW9uKCl7bi5hV25kTGlzdFtpXS5zelN0b3JhZ2VVVUlEPSIiLGUoKX0sZnVuY3Rpb24oZSl7dChlKX0pKTp0KEwuRVJSX1BMQVlfRklMRVNZU19OT1RfV1JJVElORyl9KX19LHtrZXk6IkpTX1NldERyYXdTdGF0dXMiLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciBpPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtpLm9EcmF3Q2FudmFzPyhpLm9EcmF3Q2FudmFzLnNldERyYXdTdGF0dXMobiksZSgpKTp0KCl9KX19LHtrZXk6IkpTX0NsZWFyUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtuLm9EcmF3Q2FudmFzPyhuLm9EcmF3Q2FudmFzLmNsZWFyQWxsU2hhcGUoKSxlKCkpOnQoKX0pfX0se2tleToiSlNfU2V0R3JpZEluZm8iLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciBpPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7aWYobnVsbD09bilyZXR1cm4tMTt2YXIgdD0iI2ZmMDAwMCI7bi5kcmF3Q29sb3ImJih0PW4uZHJhd0NvbG9yKSxpLm9EcmF3Q2FudmFzLnNldERyYXdTdHlsZSh0KSxpLm9EcmF3Q2FudmFzLnNldFNoYXBlc0luZm9CeVR5cGUoIkdyaWQiLFt7c3pHcmlkTWFwOm4uZ3JpZE1hcCxpR3JpZENvbE51bTpuLmdyaWRDb2xOdW0saUdyaWRSb3dOdW06bi5ncmlkUm93TnVtfV0pLGUoKX0pfX0se2tleToiSlNfR2V0R3JpZEluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD1udWxsO3JldHVybiB0PXRoaXMub0RyYXdDYW52YXM/KGU9dGhpcy5vRHJhd0NhbnZhcy5nZXRTaGFwZXNJbmZvQnlUeXBlKCJHcmlkIilbMF0pP3tncmlkQ29sTnVtOmUuaUdyaWRDb2xOdW0sZ3JpZFJvd051bTplLmlHcmlkUm93TnVtLGdyaWRNYXA6ZS5zekdyaWRNYXB9OntpR3JpZFJvd051bToxOCxpR3JpZENvbE51bToyMixzekdyaWRNYXA6IiJ9Ont9LGYuZGVmYXVsdC5yZXNvbHZlKHQpfX0se2tleToiSlNfU2V0RHJhd1NoYXBlSW5mbyIsdmFsdWU6ZnVuY3Rpb24obixpKXt2YXIgcj10aGlzO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7dm9pZCAwIT09biYmIiIhPT1uPyhyLm9EcmF3Q2FudmFzLnNldFNoYXBlVHlwZShuKSxyLm9EcmF3Q2FudmFzLnNldERyYXdTdHlsZShpLnN6RHJhd0NvbG9yfHwiIixpLnN6RmlsbENvbG9yfHwiIixpLmlUcmFuc2x1Y2VudHx8MCksaS5pTWF4U2hhcGVTdXBwb3J0JiYwPGkuaU1heFNoYXBlU3VwcG9ydCYmci5vRHJhd0NhbnZhcy5zZXRNYXhTaGFwZVN1cHBvcnQoaS5pTWF4U2hhcGVTdXBwb3J0KSxpLmlNYXhQb2ludFN1cHBvcnQmJjA8aS5pTWF4UG9pbnRTdXBwb3J0JiZyLm9EcmF3Q2FudmFzLnNldEN1cnJlbnRTaGFwZUluZm8oe3N6SWQ6IiIsc3pUaXBzOiIiLGlNaW5DbG9zZWQ6MyxpTWF4UG9pbnROdW06aS5pTWF4UG9pbnRTdXBwb3J0LGlQb2x5Z29uVHlwZToxLHN6RHJhd0NvbG9yOmkuc3pEcmF3Q29sb3J8fCIiLHN6RmlsbENvbG9yOmkuc3pGaWxsQ29sb3J8fCIiLGlUcmFuc2x1Y2VudDppLmlUcmFuc2x1Y2VudHx8MH0pLGUoKSk6dCgpfSl9fSx7a2V5OiJKU19TZXRQb2x5Z29uSW5mbyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PWEmJmEubGVuZ3RoKXt2YXIgbj1bXTtpZigwPGEubGVuZ3RoKWZvcih2YXIgaT0wLHI9YS5sZW5ndGg7aTxyO2krKykwPGFbaV0uYVBvaW50Lmxlbmd0aCYmbi5wdXNoKGFbaV0pOzA8bi5sZW5ndGg/KHMub0RyYXdDYW52YXMuc2V0U2hhcGVzSW5mb0J5VHlwZSgiUG9seWdvbiIsbiksZSgpKTp0KCl9ZWxzZSB0KCl9KX19LHtrZXk6IkpTX0dldFBvbHlnb25JbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBzPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49cy5vRHJhd0NhbnZhcy5nZXRTaGFwZXNJbmZvQnlUeXBlKCJQb2x5Z29uIiksaT0wLHI9bi5sZW5ndGg7aTxyO2krKyl7dmFyIGE9bltpXSxhPXthUG9pbnQ6YS5hUG9pbnQsYkNsb3NlZDphLmJDbG9zZWQsc3pUaXBzOmEuc3pUaXBzfTt0LnB1c2goYSl9ZSh0KX0pfX0se2tleToiSlNfU2V0TGluZUluZm8iLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtpZih2b2lkIDAhPT1hJiZhLmxlbmd0aCl7dmFyIG49W107aWYoMDxhLmxlbmd0aClmb3IodmFyIGk9MCxyPWEubGVuZ3RoO2k8cjtpKyspMDxhW2ldLmFQb2ludC5sZW5ndGgmJm4ucHVzaChhW2ldKTswPG4ubGVuZ3RoPyhzLm9EcmF3Q2FudmFzLnNldFNoYXBlc0luZm9CeVR5cGUoIkxpbmUiLG4pLGUoKSk6dCgpfWVsc2UgdCgpfSl9fSx7a2V5OiJKU19HZXRMaW5lSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgcz10aGlzO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPXMub0RyYXdDYW52YXMuZ2V0U2hhcGVzSW5mb0J5VHlwZSgiTGluZSIpLGk9MCxyPW4ubGVuZ3RoO2k8cjtpKyspe3ZhciBhPW5baV0sYT17aUxpbmVUeXBlOmEuaUxpbmVUeXBlLGFQb2ludDphLmFQb2ludCxzelRpcHM6YS5zelRpcHN9O3QucHVzaChhKX1lKHQpfSl9fSx7a2V5OiJKU19TZXRSZWN0SW5mbyIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe2lmKHZvaWQgMCE9PWEmJmEubGVuZ3RoKXt2YXIgbj1bXTtpZigwPGEubGVuZ3RoKWZvcih2YXIgaT0wLHI9YS5sZW5ndGg7aTxyO2krKykwPGFbaV0uYVBvaW50Lmxlbmd0aCYmbi5wdXNoKGFbaV0pOzA8bi5sZW5ndGg/KHMub0RyYXdDYW52YXMuc2V0U2hhcGVzSW5mb0J5VHlwZSgiUmVjdCIsbiksZSgpKTp0KCl9ZWxzZSB0KCl9KX19LHtrZXk6IkpTX0dldFJlY3RJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBzPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49cy5vRHJhd0NhbnZhcy5nZXRTaGFwZXNJbmZvQnlUeXBlKCJSZWN0IiksaT0wLHI9bi5sZW5ndGg7aTxyO2krKyl7dmFyIGE9bltpXSxhPXthUG9pbnQ6YS5hUG9pbnQsc3pUaXBzOmEuc3pUaXBzfTt0LnB1c2goYSl9ZSh0KX0pfX0se2tleToiSlNfRnVsbFNjcmVlbkRpc3BsYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMub3B0aW9ucy5zeklkKS5jaGlsZHJlblswXTtyZXR1cm4gdGhpcy5fdHJpZ2dlckZ1bGxzY3JlZW4odCl9fSx7a2V5OiJKU19GdWxsU2NyZWVuU2luZ2xlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMTtpZigoZTwwfHxlPnRoaXMuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIGUpJiYoZT10aGlzLmlDdXJyZW50V25kSW5kZXgpLCF0aGlzLmFXbmRMaXN0W2VdLmJQbGF5KXJldHVybiBmLmRlZmF1bHQucmVqZWN0KCJ3aW5kb3cgIitlKyIgaXMgbm90IHBsYXlpbmcuIik7dmFyIHQ9dGhpcy5vSlNQbHVnaW4uZmluZCgiLnN1Yi13bmQiKS5nZXQoZSk7cmV0dXJuIHRoaXMuX3RyaWdnZXJGdWxsc2NyZWVuKHQpfX0se2tleToiX3RyaWdnZXJGdWxsc2NyZWVuIix2YWx1ZTpmdW5jdGlvbihhLGUpe3ZhciBuLHM9dGhpcyxvPWRvY3VtZW50LmZ1bGxzY3JlZW5FbmFibGVkfHxkb2N1bWVudC5tb3pGdWxsU2NyZWVuRW5hYmxlZHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRW5hYmxlZHx8YS53ZWJraXRTdXBwb3J0c0Z1bGxzY3JlZW58fCExLHU9ZG9jdW1lbnQuZnVsbHNjcmVlbnx8ZG9jdW1lbnQud2Via2l0SXNGdWxsU2NyZWVufHxkb2N1bWVudC5tb3pGdWxsU2NyZWVufHxhLndlYmtpdERpc3BsYXlpbmdGdWxsc2NyZWVufHwhMTtyZXR1cm4gYS5yZXF1ZXN0RnVsbHNjcmVlbj1hLnJlcXVlc3RGdWxsc2NyZWVufHxhLndlYmtpdFJlcXVlc3RGdWxsU2NyZWVufHxhLm1velJlcXVlc3RGdWxsU2NyZWVufHxhLm1zUmVxdWVzdEZ1bGxzY3JlZW58fGEud2Via2l0RW50ZXJGdWxsU2NyZWVufHxudWxsLGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuPWRvY3VtZW50LmV4aXRGdWxsc2NyZWVufHxkb2N1bWVudC5tb3pDYW5jZWxGdWxsU2NyZWVufHxkb2N1bWVudC5tc0V4aXRGdWxsc2NyZWVufHxudWxsLG5ldyBmLmRlZmF1bHQoKG49KDAseS5kZWZhdWx0KShwLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKHQsbil7dmFyIGkscjtyZXR1cm4gcC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIW98fCJkZXNrdG9wIiE9PXMuX2Jyb3dzZXJJbmZvLnBsYXRmb3JtKXtlLm5leHQ9MTM7YnJlYWt9aWYodSYmcy5mdWxsc2NyZWVuRWxlbWVudD09PWEpcmV0dXJuIGRvY3VtZW50LmV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk6YS53ZWJraXRFeGl0RnVsbFNjcmVlbigpLHMuZnVsbHNjcmVlbkVsZW1lbnQ9bnVsbCxzLkpTX1Jlc2l6ZSgpLHMub0V2ZW50Q2FsbGJhY2sud2luZG93RnVsbENjcmVlbkNoYW5nZSghMSksZS5hYnJ1cHQoInJldHVybiIsdCgpKTtlLm5leHQ9NzticmVhaztjYXNlIDc6cmV0dXJuIGUubmV4dD05LGEucmVxdWVzdEZ1bGxzY3JlZW4oKTtjYXNlIDk6cmV0dXJuIHMuZnVsbHNjcmVlbkVsZW1lbnQ9YSxzLkpTX1Jlc2l6ZSgpLHMub0V2ZW50Q2FsbGJhY2sud2luZG93RnVsbENjcmVlbkNoYW5nZSghMCksZS5hYnJ1cHQoInJldHVybiIsdCgpKTtjYXNlIDEzOnJldHVybiBzLmZ1bGxzY3JlZW5FbGVtZW50Pyhkb2N1bWVudC5ib2R5LnN0eWxlLnNldFByb3BlcnR5KCJvdmVyZmxvdyIsInVuc2V0IiksaT1zLm9KU1BsdWdpbi53aWR0aCgpLHI9cy5vSlNQbHVnaW4uaGVpZ2h0KCksKDAsdi5kZWZhdWx0KShhKS5jc3MoInotaW5kZXgiLCIiKS5jc3MoInBvc2l0aW9uIiwicmVsYXRpdmUiKS5jc3MoInRyYW5zZm9ybSIsIiIpLmNzcygidHJhbnNmb3JtLW9yaWdpbiIsIiIpLmNzcygidG9wIiwiIikuY3NzKCJsZWZ0IiwiIiksYS5jbGFzc05hbWUuaW5jbHVkZXMoInBhcmVudC13bmQiKT8oMCx2LmRlZmF1bHQpKGEpLmNzcygid2lkdGgiLCIxMDAlIikuY3NzKCJoZWlnaHQiLCIxMDAlIik6KDAsdi5kZWZhdWx0KShhKS5jc3MoIndpZHRoIixpKS5jc3MoImhlaWdodCIscikscy5mdWxsc2NyZWVuRWxlbWVudD1udWxsLHMuSlNfUmVzaXplKCkscy5vRXZlbnRDYWxsYmFjay53aW5kb3dGdWxsQ2NyZWVuQ2hhbmdlKCExKSk6KGk9d2luZG93LmlubmVyV2lkdGh8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aHx8ZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCxyPXdpbmRvdy5pbm5lckhlaWdodHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodHx8ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQscy5fbG9nLkkoInRyYW5zZm9ybSBmdWxsc2NyZWVuOiBib2R5LCB3aW5kb3ciLGkscix3aW5kb3cuc2NyZWVuLndpZHRoLHdpbmRvdy5zY3JlZW4uaGVpZ2h0KSxpPHI/KGRvY3VtZW50LmJvZHkuc3R5bGUuc2V0UHJvcGVydHkoIm92ZXJmbG93IiwiaGlkZGVuIiksKDAsdi5kZWZhdWx0KShhKS5jc3MoIndpZHRoIixyKS5jc3MoImhlaWdodCIsaSkuY3NzKCJ6LWluZGV4IiwiMTAwMSIpLmNzcygicG9zaXRpb24iLCJmaXhlZCIpLmNzcygidHJhbnNmb3JtIiwicm90YXRlKDkwZGVnKSIpLmNzcygidHJhbnNmb3JtLW9yaWdpbiIsIjBweCAwcHgiKS5jc3MoInRvcCIsIjBweCIpLmNzcygibGVmdCIsaSsicHgiKSwoMCx2LmRlZmF1bHQpKGEpLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuYXR0cigid2lkdGgiLHIpLmF0dHIoImhlaWdodCIsaSksKDAsdi5kZWZhdWx0KShhKS5maW5kKCJjYW52YXMucGxheS13aW5kb3ciKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixpKS5jc3MoInRyYW5zZm9ybSIsInNjYWxlKDEpIiksKDAsdi5kZWZhdWx0KShhKS5maW5kKCJjYW52YXMuZHJhdy13aW5kb3ciKS5hdHRyKCJ3aWR0aCIscikuYXR0cigiaGVpZ2h0IixpKSk6KDAsdi5kZWZhdWx0KShhKS5jc3MoIndpZHRoIixpKS5jc3MoImhlaWdodCIscikuY3NzKCJ6LWluZGV4IiwiMTAwMSIpLmNzcygicG9zaXRpb24iLCJmaXhlZCIpLHMuZnVsbHNjcmVlbkVsZW1lbnQ9YSxzLkpTX1Jlc2l6ZSgpLHMub0V2ZW50Q2FsbGJhY2sud2luZG93RnVsbENjcmVlbkNoYW5nZSghMCkpLGUuYWJydXB0KCJyZXR1cm4iLGYuZGVmYXVsdC5yZXNvbHZlKCkpO2Nhc2UgMTU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGUscyl9KSksZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSl9fSx7a2V5OiJKU19SZXNpemUiLHZhbHVlOmZ1bmN0aW9uKHMsbyl7dmFyIHU9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihhKXt1Ll9kZWJvdW5zZShmdW5jdGlvbigpe3ZhciBlLHQsbixpLHI7cyYmbyYmIm51bWJlciI9PXR5cGVvZiBzJiYibnVtYmVyIj09dHlwZW9mIG8mJih1Lm9wdGlvbnMuaVdpZHRoPXMsdS5vcHRpb25zLmlIZWlnaHQ9byx1Lm9KU1BsdWdpbi53aWR0aChzKSx1Lm9KU1BsdWdpbi5oZWlnaHQobykpLHUuZnVsbHNjcmVlbkVsZW1lbnQmJnUuZnVsbHNjcmVlbkVsZW1lbnQuY2xhc3NOYW1lLmluY2x1ZGVzKCJzdWItd25kIik/KHQ9KGU9KDAsdi5kZWZhdWx0KSh1LmZ1bGxzY3JlZW5FbGVtZW50KSkud2lkdGgoKSxuPWUuaGVpZ2h0KCksaT13aW5kb3cuc2NyZWVuLndpZHRoLHI9d2luZG93LnNjcmVlbi5oZWlnaHQsdS5vcHRpb25zLm9wZW5EZWJ1ZyYmdS5fbG9nLkkoInNpbmdsZUZ1bGxzY3JlZW4gSlNfUmVzaXplOiAiLGkscix0LG4pLGUuY3NzKCJib3JkZXIiLCIxcHggc29saWQgIit1Lm9wdGlvbnMub1N0eWxlLmJvcmRlciksZS5maW5kKCJ2aWRlby5wbGF5LXdpbmRvdyIpLmF0dHIoIndpZHRoIix0KS5hdHRyKCJoZWlnaHQiLG4pLGUuZmluZCgiY2FudmFzLnBsYXktd2luZG93IikuY3NzKCJ0cmFuc2Zvcm0iLCJ1bnNldCIpLmF0dHIoIndpZHRoIix0KS5hdHRyKCJoZWlnaHQiLG4pLChyPXUuYVduZExpc3RbdS5jdXJyZW50V2luZG93SW5kZXhdKS5iUGxheSYmMD09PXIuaU1vZGUmJnIub1BsYXlDdHJsJiZyLm9QbGF5Q3RybC5QbGF5TTRfU2V0Q2FudmFzU2l6ZSYmci5vUGxheUN0cmwuUGxheU00X1NldENhbnZhc1NpemUodCxuKSxlLmZpbmQoImNhbnZhcy5kcmF3LXdpbmRvdyIpLmF0dHIoIndpZHRoIix0KS5hdHRyKCJoZWlnaHQiLG4pKToodS5vcHRpb25zLmlXaWR0aD11Lm9KU1BsdWdpbi53aWR0aCgpLHUub3B0aW9ucy5pSGVpZ2h0PXUub0pTUGx1Z2luLmhlaWdodCgpLHUuX3VwZGF0ZVduZCgpKSx1Lm9EcmF3Q2FudmFzLnJlc2l6ZUNhbnZhcygpLHUub0RyYXdDYW52YXMuY2FudmFzUmVkcmF3KCksYSgpfSw1MCl9KX19LHtrZXk6IkpTX1NlbGVjdFduZCIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIGk9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe2lmKG48MHx8bj5pLmlNYXhXbmROdW0tMXx8Im51bWJlciIhPXR5cGVvZiBuKXJldHVybiB0KEwuRVJSX0NPTV9QQVJBTSk7aS5vSlNQbHVnaW4uZmluZCgiLnN1Yi13bmQiKS5nZXQobikuY2xpY2soKSxlKCl9KX19LHtrZXk6IkpTX1NldE9wdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7ITE9PT10LmJTdXBwb3J0U291bmQmJihuLm9wdGlvbnMuYlN1cHBvcnRTb3VuZD10LmJTdXBwb3J0U291bmQpLCExPT09dC5iU3VwcG9yRG91YmxlQ2xpY2tGdWxsJiYobi5vcHRpb25zLmJTdXBwb3JEb3VibGVDbGlja0Z1bGw9dC5iU3VwcG9yRG91YmxlQ2xpY2tGdWxsKSwhMD09PXQuYk9ubHlTdXBwb3J0TVNFJiYobi5vcHRpb25zLmJPbmx5U3VwcG9ydE1TRT10LmJPbmx5U3VwcG9ydE1TRSksITA9PT10LmJPbmx5U3VwcG9ydEpTRGVjb2RlciYmKG4ub3B0aW9ucy5iT25seVN1cHBvcnRKU0RlY29kZXI9dC5iT25seVN1cHBvcnRKU0RlY29kZXIpLGUoKX0pfX0se2tleToiSlNfU2V0TG9nRmxhZyIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIGk9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGkuaU1heFduZE51bTt0KyspaS5hV25kTGlzdFt0XS5vUGxheUN0cmwmJmkuYVduZExpc3RbdF0ub1BsYXlDdHJsLlBsYXlNNF9PcGVuUGxheWVyU0RLUHJpbnRMb2cobik7ZSgpfSl9fSx7a2V5OiJKU19TZXREZWNvZGVUaHJlYWROdW0iLHZhbHVlOmZ1bmN0aW9uKG4pe3ZhciBpPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxpLmlNYXhXbmROdW07dCsrKWkuYVduZExpc3RbdF0ub1BsYXlDdHJsJiZpLmFXbmRMaXN0W3RdLm9QbGF5Q3RybC5TZXREZWNvZGVUaHJlYWROdW0obik7ZSgpfSl9fSx7a2V5OiJKU19SZW5kZXJQcml2YXRlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmlDdXJyZW50V25kSW5kZXgsaT10aGlzLmFXbmRMaXN0W25dLHI9dGhpcy5fY2hlY2tQbGF5KG4pO3JldHVybiAwIT09cnx8KDE9PT10aGlzLmFXbmRMaXN0W25dLmlNb2RlPyhyPUwuRVJSX0NPTV9JU19NU0UsdGhpcy5fbG9nLkUoTC5FUlJfQ09NX0lTX01TRSsiOiBNU0UgdW5zdXBwb3J0IHRoaXMgZnVuY3Rpb24uIikpOjEhPT1pLm9QbGF5Q3RybC5QbGF5TTRfUmVuZGVyUHJpdmF0ZURhdGEoZSx0KSYmKHI9TC5FUlJfSlNERUNPREVSK2kub1BsYXlDdHJsLlBsYXlNNF9HZXRMYXN0RXJyb3IoKS50b1N0cmluZygpLHRoaXMuX2xvZy5FKHIrIjog5pKt5pS+5bqT5pm66IO95L+h5oGv5o6l5Y+j5oql6ZSZ77yaIikpKSxyfX0se2tleToiSlNfUmVuZGVyUHJpdmF0ZURhdGFFeCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPXRoaXMuaUN1cnJlbnRXbmRJbmRleCxyPXRoaXMuYVduZExpc3RbaV0sYT10aGlzLl9jaGVja1BsYXkoaSk7cmV0dXJuIDAhPT1hfHwoMT09PXRoaXMuYVduZExpc3RbaV0uaU1vZGUmJihhPUwuRVJSX0NPTV9JU19NU0UsdGhpcy5fbG9nLkUoTC5FUlJfQ09NX0lTX01TRSsiOiBNU0UgdW5zdXBwb3J0IHRoaXMgZnVuY3Rpb24uIikpLDEhPT1yLm9QbGF5Q3RybC5QbGF5TTRfUmVuZGVyUHJpdmF0ZURhdGFFeChlLHQsbikmJihhPUwuRVJSX0pTREVDT0RFUityLm9QbGF5Q3RybC5QbGF5TTRfR2V0TGFzdEVycm9yKCkudG9TdHJpbmcoKSx0aGlzLl9sb2cuRShhKyI6IOaSreaUvuW6k+aZuuiDveS/oeaBr+aOpeWPo+aKpemUme+8miIsYSkpKSxhfX0se2tleToiSlNfUmVuZGVyQUxMUHJpdmF0ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHI9dGhpcyxhPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMSxzPWFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe2lmKChhPDB8fGE+ci5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgYSkmJihhPXIuaUN1cnJlbnRXbmRJbmRleCksImJvb2xlYW4iIT10eXBlb2YgcylyZXR1cm4gdChMLkVSUl9DT01fUEFSQU0pO3ZhciBuPXIuYVduZExpc3RbYV0saT1yLl9jaGVja1BsYXkoYSk7aWYoMCE9PWkpcmV0dXJuIHQoaSk7aWYoMCE9PW4uaU1vZGV8fCIyIiE9PXIuX2RlY29kZXJWZXJzaW9uKXJldHVybiB0KEwuRVJSX1NUUkVBTV9JTlRFTF9VTlNVUFBPUlQpO1t7dHlwZUNvZGU6IjB4MDAwMDAwMDEiLGRlc2M6IuaZuuiDveWIhuaekO+8iOm7mOiupOW8gO+8iSIsY2hpbGRyZW46W119LHt0eXBlQ29kZToiMHgwMDAwMDAwMiIsZGVzYzoi56e75Yqo5L6m5rWL77yI6buY6K6k5byA77yJIixjaGlsZHJlbjpbXX0se3R5cGVDb2RlOiIweDAwMDAwMDA0IixkZXNjOiJwb3Mg5L+h5oGv5Y+g5Yqg77yI6buY6K6k5YWz77yJIixjaGlsZHJlbjpbXX0se3R5cGVDb2RlOiIweDAwMDAwMDA4IixkZXNjOiLlm77niYflj6DliqDvvIjpu5jorqTlhbPvvIkiLGNoaWxkcmVuOltdfSx7dHlwZUNvZGU6IjB4MDAwMDAwMTAiLGRlc2M6IueBq+eCueS/oeaBr++8iOm7mOiupOW8gO+8iSIsY2hpbGRyZW46W3t0eXBlQ29kZToiMHgwMDAwMDAwMSIsZGVzYzoi54Gr54K55qGG5pi+56S6In0se3R5cGVDb2RlOiIweDAwMDAwMDAyIixkZXNjOiLngavngrnmnIDpq5jmuKnmmL7npLoifSx7dHlwZUNvZGU6IjB4MDAwMDAwMDQiLGRlc2M6IuacgOmrmOa4qeS9jee9ruaYvuekuiJ9LHt0eXBlQ29kZToiMHgwMDAwMDAwOCIsZGVzYzoi5pyA6auY5rip5bqm6Led56a7In1dfSx7dHlwZUNvZGU6IjB4MDAwMDAwMjAiLGRlc2M6Iua4qeW6puS/oeaBr++8iOm7mOiupOWFs++8iSIsY2hpbGRyZW46W3t0eXBlQ29kZToiMHgwMDAwMDAwMSIsZGVzYzoi5qGG5rWL5ripIn0se3R5cGVDb2RlOiIweDAwMDAwMDAyIixkZXNjOiLnur/mtYvmuKkifSx7dHlwZUNvZGU6IjB4MDAwMDAwMDQiLGRlc2M6IueCuea1i+a4qSJ9XX0se3R5cGVDb2RlOiIweDAwMDAwMDQwIixkZXNjOiLovajov7nkv6Hmga/vvIjpu5jorqTlhbPvvIkiLGNoaWxkcmVuOlt7dHlwZUNvZGU6IjB4MDAwMDAwMDEiLGRlc2M6IuS6uueahOi9qOi/ueS/oeaBryJ9LHt0eXBlQ29kZToiMHgwMDAwMDAwMiIsZGVzYzoi6L2m55qE6L2o6L+55L+h5oGvIn1dfSx7dHlwZUNvZGU6IjB4MDAwMDAwODAiLGRlc2M6IueDn+eBq+Wxj+iUveWSjOW6n+awlOebkea1i++8iOm7mOiupOWFs++8iSIsY2hpbGRyZW46W3t0eXBlQ29kZToiMHgwMDAwMDAwMSIsZGVzYzoi54Of54Gr5bGP6JS9In0se3R5cGVDb2RlOiIweDAwMDAwMDAyIixkZXNjOiLop4TliJnlup/msJTmo4DmtYsifSx7dHlwZUNvZGU6IjB4MDAwMDAwMDQiLGRlc2M6Iuebruagh+W6n+awlOajgOa1iyJ9XX1dLmZvckVhY2goZnVuY3Rpb24odCl7MT09PW4ub1BsYXlDdHJsLlBsYXlNNF9SZW5kZXJQcml2YXRlRGF0YSh0LnR5cGVDb2RlLHMpP3MmJnQuY2hpbGRyZW4mJjA8dC5jaGlsZHJlbi5sZW5ndGgmJnQuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihlKXsxPT09bi5vUGxheUN0cmwuUGxheU00X1JlbmRlclByaXZhdGVEYXRhRXgodC50eXBlQ29kZSxlLnR5cGVDb2RlLHMpfHwoci5fbG9nLlcoInRyaWdnZXIgaW50ZWxsaWdlbmNlIHN1YiAiK2UudHlwZUNvZGUrIiAiKyhzPyJvcGVuIjoiY2xvc2UiKSsiIGZhaWxlZCIpLGk9MSl9KTooci5fbG9nLlcoInRyaWdnZXIgaW50ZWxsaWdlbmNlIG1haW4gIit0LnR5cGVDb2RlKyIgIisocz8ib3BlbiI6ImNsb3NlIikrIiBmYWlsZWQiKSxpPTEpfSksZSgpfSl9fSx7a2V5OiJfY2hlY2tQbGF5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZTwwfHxlPnRoaXMuaU1heFduZE51bS0xPyh0aGlzLl9sb2cuRShMLkVSUl9DT01fUEFSQU0rIjogdW5leHBlY3RlZCB3aW5kb3cgaW5kZXguIiksTC5FUlJfQ09NX1BBUkFNKTp0aGlzLmFXbmRMaXN0W2VdLmJQbGF5PzA6KHRoaXMuX2xvZy5FKEwuRVJSX0NPTV9OT1RfUExBWUlORysiOiB0aGlzIHdpbmRvdyBpcyBub3QgcGxheWluZy4iKSxMLkVSUl9DT01fTk9UX1BMQVlJTkcpfX0se2tleToiX2NoZWNrUGxheWJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2NoZWNrUGxheShlKTtyZXR1cm4gMD09PXQmJiJyZWFscGxheSI9PT10aGlzLmFXbmRMaXN0W2VdLnN6UGxheVR5cGUmJih0aGlzLl9sb2cuRShMLkVSUl9DT01fTk9UX1BMQVlCQUNLKyI6IHRoaXMgZnVuY3Rpb24gd2FzIG9ubHkgc3VwcG9ydGVkIGJ5IHBsYXliYWNrLiIpLHQ9TC5FUlJfQ09NX05PVF9QTEFZQkFDSyksdH19LHtrZXk6Il9jcmVhdGVGbHZQbGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKGkpe3ZhciByPXRoaXMsYT10aGlzLmFXbmRMaXN0W2ldO2Eub01TRSYmKGEuYlBsYXk9ITEsYS5vTVNFLmRldGFjaE1lZGlhRWxlbWVudCgpLGEub01TRS5kZXN0cm95KCksYS5vTVNFPW51bGwpO3ZhciBlPXRoaXMub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEoaSksdD10aGlzLm9KU1BsdWdpbi5maW5kKCJjYW52YXMucGxheS13aW5kb3ciKS5lcShpKTtlLnNob3coKSx0LmhpZGUoKTt2YXIgbj17aXNMaXZlOiEwLHR5cGU6ImZsdiJ9O3RoaXMuYVduZExpc3RbaV0ubXNlRGVjb2RlckF1ZGlvfHwobj17aGFzQXVkaW86ITEsaXNMaXZlOiEwLHR5cGU6ImZsdiJ9KTt2YXIgcz0hMSxvPTMsdD0yOzA8YS5zekJ1ZmZlclNpemUmJihzPSEwLG89NSx0PTIpO3Q9YS5vTVNFPV8uZGVmYXVsdC5jcmVhdGVQbGF5ZXIobix7ZW5hYmxlV29ya2VyOnRoaXMub3B0aW9ucy5tc2VXb3JrZXJFbmFibGUsbGF6eUxvYWRNYXhEdXJhdGlvbjoxODAsc2Vla1R5cGU6InJhbmdlIixpc0xpdmU6ITAsZW5hYmxlU3Rhc2hCdWZmZXI6cyxhdXRvQ2xlYW51cE1heEJhY2t3YXJkRHVyYXRpb246NjAsYXV0b0NsZWFudXBNaW5CYWNrd2FyZER1cmF0aW9uOjMwLHN0YXRpc3RpY3NJbmZvUmVwb3J0SW50ZXJ2YWw6MWUzLGVuYWJsZUR1cmF0aW9uTW9uaXRvcjohMCxsb3dMYXRlbmN5VGhyZXNob2xkOm8sZGVjcmVhc2VEdXJhdGlvblN0ZXA6dCxlbmFibGVBdWRpb0dhaW46ITEsc3Rhc2hJbml0aWFsU2l6ZTphLnN6QnVmZmVyU2l6ZSxXREluZm86e2luZGV4OmkscG9pbnRTaWduTnVtYmVyOmEucG9pbnRTaWduTnVtYmVyfX0pO3Qub24oYi5kZWZhdWx0LkVSUk9SLGZ1bmN0aW9uKGUsdCxuKXthLmJGaXJzdEZyYW1lPyhyLl9zdHJlYW1SZXNldChpKSxyLl9sb2cuVygiW2lXbmROdW0tIitpKyJdIFBsYXllckV2ZW50cy5FUlJPUiBtZWRpYUVsZW1lbnQgZXJyb3IscmVzZXQgZGVjb2RlcjoiLGUsdCxuLmNvZGUsbi5tZXNzYWdlKSk6KHIuX2xvZy5XKCJbaVduZE51bS0iK2krIl0gUGxheWVyRXZlbnRzLkVSUk9SIG1lZGlhRWxlbWVudCBlcnJvcixjaGFuZ2UgcGxheW1vZGU6IixlLHQsbi5jb2RlLG4ubWVzc2FnZSksYS5iUmVvcGVufHwoYS5iUmVvcGVuPSEwLGEuX2VtaXRlci5lbWl0KCJmaXJzdGZyYW1lbG9hZCIpLHIuSlNfU3RvcChpKSxyLkpTX1BsYXkoYS5zek9yaWdpblVybCx7cGxheVVSTDphLnN6T3JpZ2luVXJsLG1vZGU6MX0saSxhLnN6U3RhcnRUaW1lLGEuc3pTdG9wVGltZSkudGhlbihmdW5jdGlvbigpe30sZnVuY3Rpb24oZSl7ci5fbG9nLkUoIltpV25kTnVtLSIraSsiXSAgbWVkaWFFbGVtZW50IHVuc3VwcG9ydCBoMjY1LCBzdG9wIGRlY29kZXI6IixlKSxyLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihpLEwuRVJSX1NUUkVBTV9DT0RFQ19VTlNVUFBPUlRFRCksci5KU19TdG9wKGkpfSkpKX0pLHQub24oYi5kZWZhdWx0Lk1FRElBX1NPVVJDRV9BRERfRVJST1IsZnVuY3Rpb24oKXtyLl9zdHJlYW1SZXNldChpLCEwKSxyLl9sb2cuVygiW2lXbmROdW0tIitpKyJdIE1FRElBX1NPVVJDRV9BRERfRVJST1IscmVzZXQgZGVjb2RlcjoiKX0pLHQub24oYi5kZWZhdWx0Lk1TX0JVRkZFUl9GVUxMLGZ1bmN0aW9uKCl7YS5iRmlyc3RGcmFtZT8oci5fc3RyZWFtUmVzZXQoaSksci5fbG9nLlcoIltpV25kTnVtLSIraSsiXSBtZWRpYV9zb3VyY2VfYnVmZmVyX2Z1bGwscmVzZXQgZGVjb2RlcjoiKSk6KHIub0V2ZW50Q2FsbGJhY2sucGx1Z2luRXJyb3JIYW5kbGVyKGksTC5FUlJfU1RSRUFNX01TRV9EQVRBX0ZVTEwpLGEuYlJlb3Blbj0hMCxyLkpTX1N0b3AoaSksci5KU19QbGF5KGEuc3pPcmlnaW5Vcmwse3BsYXlVUkw6YS5zek9yaWdpblVybCxtb2RlOjF9LGksYS5zelN0YXJ0VGltZSxhLnN6U3RvcFRpbWUpLnRoZW4oZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKGUpe3IuX2xvZy5FKCJbaVduZE51bS0iK2krIl0gIG1lZGlhX3NvdXJjZV9idWZmZXJfZnVsbCwgc3RvcCBkZWNvZGVyOiIsZSksci5vRXZlbnRDYWxsYmFjay5wbHVnaW5FcnJvckhhbmRsZXIoaSxMLkVSUl9TVFJFQU1fQ09ERUNfVU5TVVBQT1JURUQpLHIuSlNfU3RvcChpKX0pKX0pO3ZhciB1PWUuZ2V0KDApLGQ9dGhpcyxlPWZ1bmN0aW9uIGUodCl7ZC5fbG9nLkkoIltpV25kTnVtLSIraSsiXSDnoazop6PpppbluKflt7Lnu4/liqDovb0s57yW56CBOiIrYS5fdmlkZW9JbmZvLlZpZGVUeXBlKyIs5YiG6L6o546HOiIrYS5fdmlkZW9JbmZvLndpZHRoKyIqIithLl92aWRlb0luZm8uaGVpZ2h0KSx1LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZGRhdGEiLGUpLGEuX2VtaXRlci5lbWl0KCJmaXJzdGZyYW1lbG9hZCIpLHUucG9zdGVyPSIiLGEuYkZpcnN0RnJhbWU9ITA7ZnVuY3Rpb24gbihlKXtkLl9sb2cuVygiW2lXbmROdW0tIitpKyJdIG1lZGlhRWxlbWVudCBlcnJvcixyZXNldCBkZWNvZGVyOiIsZS50YXJnZXQuZXJyb3IpLHUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG4pLGQuX3N0cmVhbVJlc2V0KGkpfXUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLG4pLGQub0V2ZW50Q2FsbGJhY2suZmlyc3RGcmFtZURpc3BsYXkoaSxhLl92aWRlb0luZm8ud2lkdGgsYS5fdmlkZW9JbmZvLmhlaWdodCl9O3UuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkZGF0YSIsZSksYS5fcmVjZWl2ZWRMZW5ndGg9MCx0LmF0dGFjaE1lZGlhRWxlbWVudCh1KSx0LmxvYWQoKSxhLmJQbGF5PSEwLGEuYXN5bmNMb2NrPSExLHQub25QYXJzZWREYXRhPXRoaXMuX29uUGFyc2VkRGF0YS5iaW5kKHRoaXMpfX0se2tleToiX3N0cmVhbVJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFXbmRMaXN0W2VdOyh0LmJGaXJzdEZyYW1lfHwxPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKSYmKHQuX3Jlc2V0Rmx2cGxheWVyPSExLHQuYkZpcnN0RnJhbWU9ITEsdGhpcy5fY2FwdHVyZVBvc3RlcihlKSx0LmlzRmx2JiYodGhpcy5fY3JlYXRlRmx2UGxheWVyKGUpLHQub01TRS5vbkxvYWRlckNodW5rQXJyaXZhbCh0LnN6Rmx2aGVhZC5idWZmZXIsdC5fcmVjZWl2ZWRMZW5ndGgpLHQuX3JlY2VpdmVkTGVuZ3RoKz10LnN6Rmx2aGVhZC5sZW5ndGgsdC5fcmVzZXRGbHZwbGF5ZXI9ITApKX19LHtrZXk6Il9jYXB0dXJlUG9zdGVyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9KU1BsdWdpbi5maW5kKCJ2aWRlby5wbGF5LXdpbmRvdyIpLmVxKGUpLmdldCgwKSxuPXQudmlkZW9XaWR0aCxpPXQudmlkZW9IZWlnaHQsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtlLndpZHRoPW4sZS5oZWlnaHQ9aSxlLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKHQsMCwwLG4saSk7ZT1lLnRvRGF0YVVSTCgiaW1hZ2UvSlBFRyIpO3QucG9zdGVyPWV9fSx7a2V5OiJfY3JlYXRlUGxheUN0cmwiLHZhbHVlOmZ1bmN0aW9uKHMpe3ZhciBvPXRoaXMsdT10aGlzLmFXbmRMaXN0W3NdO3RoaXMuX2xvZy5JKCIgX2NyZWF0ZVBsYXlDdHJsIGxvYWQgc3RhcnQgY29kZSIsImNvbG9yOiBibHVlIik7dGhpcy5fcGxheUN0cmxMb2FkLmJpbmQodGhpcyk7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24ocixhKXt2YXIgZSx0O28ub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocykuaGlkZSgpLG8ub0pTUGx1Z2luLmZpbmQoImNhbnZhcy5wbGF5LXdpbmRvdyIpLmVxKHMpLnNob3coKSwiMiI9PT1vLl9kZWNvZGVyVmVyc2lvbj9FJiYodS5vUGxheUN0cmw9bmV3IGQuSlNQbGF5Q3RybChvLm9wdGlvbnMuc3pJZCsiX3BsYXlDYW52YXMiK3MsRSxmdW5jdGlvbihlKXtlLmluc3RhbmNlO3ZhciB0PWUuY21kLGU9KGUuZGF0YSxlLmVycm9yQ29kZSxlLnN0YXR1cyk7Ik9uZWJ5T25lIj09PXQmJihlJiZ1LmlzUGF1c2UmJihvLm9TdHJlYW1DbGllbnQucmVzdW1lKHUuc3pTdHJlYW1VVUlEKSx1LmlzUGF1c2U9ITEpLGV8fHUuaXNQYXVzZXx8KG8ub1N0cmVhbUNsaWVudC5wYXVzZSh1LnN6U3RyZWFtVVVJRCksdS5pc1BhdXNlPSEwKSl9LHMpLHUuYkxvYWQ9ITAsZT11Lm9QbGF5Q3RybC5QbGF5TTRfR2V0QnVpbGREYXRlKCksdD11Lm9QbGF5Q3RybC5QbGF5TTRfR2V0U2RrVmVyc2lvbigpLG8uX2xvZy5JKCJfY3JlYXRlUGxheUN0cmwgQnVpbGREYXRlOiIrZS50b1N0cmluZygxNikrIiBTZGtWZXJzaW9uOiIrdC50b1N0cmluZygxNikrIiBsb2FkIGVuZCBjb2RlIikscigpKToodS5vUGxheUN0cmw9bmV3IGwuSlNQbGF5Q3RybChvLmRlY29kZXIxUGF0aCxmdW5jdGlvbihlKXtlLmluc3RhbmNlO3ZhciB0PWUuY21kLG49ZS5lcnJvckNvZGUsaT1lLnN0YXR1cztzd2l0Y2godCl7Y2FzZSJsb2FkZWQiOm8uX2xvZy5JKCJbaVduZE51bS0iK3MrIl0gbmV3IEpTRGVjb2RlcjEuMSBwYXRoIitvLmRlY29kZXIxUGF0aCsiIHJlY2VpdmVkIGxvYWRlZCBtZXNzYWdlIiksCi8vIWNzdy5iTG9hZCAmJiBwbGF5Q3RybExvYWQoaVduZE51bSk7CnUuYkxvYWQ9ITAscigpO2JyZWFrO2Nhc2UibG9hZGZhaWxlZCI6dS5iTG9hZD0hMSxhKEwuRVJSX0NPTV9MT0FEX0pTREVDT0RFUl9FUlJPUik7YnJlYWs7Y2FzZSJPbmVieU9uZSI6aSYmdS5pc1BhdXNlJiYoby5vU3RyZWFtQ2xpZW50LnJlc3VtZSh1LnN6U3RyZWFtVVVJRCksdS5pc1BhdXNlPSExKSxpfHx1LmlzUGF1c2V8fChvLm9TdHJlYW1DbGllbnQucGF1c2UodS5zelN0cmVhbVVVSUQpLHUuaXNQYXVzZT0hMCk7YnJlYWs7Y2FzZSJHZXRGcmFtZURhdGEiOnJldHVybiB2b2lkKDE2PT09biYmKG8uX2Nsb3NlU3RyZWFtQW5kRGVzdG9yeShzKSxvLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihzLEwuRVJSX1NUUkVBTV9WSURFT19DT0RJTkcpKSl9fSxzKSx0PTQ9PT11LmFIZWFkWzhdPzA6MSx1Lm9QbGF5Q3RybC5QbGF5TTRfU2V0U3RyZWFtT3Blbk1vZGUodCksby5fbG9nLkkoIl9jcmVhdGVQbGF5Q3RybCBCdWlsZERhdGU6Iit1Lm9QbGF5Q3RybC5QbGF5TTRfR2V0QnVpbGREYXRlKCkrIiBTZGtWZXJzaW9uOiIrdS5vUGxheUN0cmwuUGxheU00X0dldFNka1ZlcnNpb24oKSsiIGxvYWQgZW5kIGNvZGUiKSl9KX19LHtrZXk6Il9wbGF5Q3RybExvYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYVduZExpc3RbZV0sbj10LmlzSFZBR0hlYWQ/dC5hSFZBR0hlYWQ6dC5hSGVhZDtpZigiMiI9PT10aGlzLl9kZWNvZGVyVmVyc2lvbil7dGhpcy5fbG9nLkkoIlt0aGlzLm9wdGlvbnMuc3pJZC0iK3RoaXMub3B0aW9ucy5zeklkKyIgaVduZE51bS0iK2UrIl0gX3BsYXlDdHJsTG9hZCBzdGFydCIpO3ZhciBpPSJyZWFscGxheSI9PT10LnN6UGxheVR5cGU/MDoxO2lmKHQub1BsYXlDdHJsJiZ0Lm9QbGF5Q3RybC5QbGF5TTRfU2V0U3RyZWFtT3Blbk1vZGUoaSksdC5vUGxheUN0cmwmJnQub1BsYXlDdHJsLlBsYXlNNF9PcGVuU3RyZWFtKG4sNDAsNDE5NDMwNCt0LnN6QnVmZmVyU2l6ZSksInJlYWxwbGF5IiE9PXQuc3pQbGF5VHlwZSYmdC5vUGxheUN0cmwuUGxheU00X1NldEdsb2JhbEJhc2VUaW1lKG5ldyBEYXRlKHRoaXMuYVduZExpc3RbZV0uaUdsb2JhbEJhc2VUaW1lKSksMSE9PXQub1BsYXlDdHJsLlBsYXlNNF9QbGF5KCkpcmV0dXJuIEwuRVJSX0pTREVDT0RFUit0Lm9QbGF5Q3RybC5QbGF5TTRfR2V0TGFzdEVycm9yKCkudG9TdHJpbmcoKTtpZigicmV2ZXJzZSI9PT10LnN6UGxheVR5cGUmJjEhPT10Lm9QbGF5Q3RybC5QbGF5TTRfUmV2ZXJzZVBsYXkoKSlyZXR1cm4gTC5FUlJfSlNERUNPREVSK3Qub1BsYXlDdHJsLlBsYXlNNF9HZXRMYXN0RXJyb3IoKS50b1N0cmluZygpO3QuYlBsYXk9ITAsdC5vUGxheUN0cmwuaUJ1ZmZlclZhbHVlPXQub1BsYXlDdHJsLlBsYXlNNF9HZXRCdWZmZXJWYWx1ZSgxKSx0aGlzLl9zdXBwb3J0SW5mby53ZWJHTDImJnQub1BsYXlDdHJsLlBsYXlNNF9TZXRBbnRpYWxpYXMoMSksdGhpcy5fbG9nLkkoIlt0aGlzLm9wdGlvbnMuc3pJZC0iK3RoaXMub3B0aW9ucy5zeklkKyIgaVduZE51bS0iK2UrIl0gX3BsYXlDdHJsTG9hZCBlbmQiKX1lbHNle2lmKHQub1BsYXlDdHJsJiZ0Lm9QbGF5Q3RybC5QbGF5TTRfT3BlblN0cmVhbShuLDQwLDIwOTcxNTIpLHQub1BsYXlDdHJsJiZ0Lm9QbGF5Q3RybC5QbGF5TTRfU2V0SW5wdXRCdWZTaXplKEQpLCJyZWFscGxheSIhPT10LnN6UGxheVR5cGUmJnQub1BsYXlDdHJsLlBsYXlNNF9TZXRHbG9iYWxCYXNlVGltZShuZXcgRGF0ZSh0aGlzLmFXbmRMaXN0W2VdLmlHbG9iYWxCYXNlVGltZSkpLDEhPT10Lm9QbGF5Q3RybC5QbGF5TTRfUGxheSh0aGlzLm9wdGlvbnMuc3pJZCsiX3BsYXlDYW52YXMiK2UpKXJldHVybiBMLkVSUl9KU0RFQ09ERVIrdC5vUGxheUN0cmwuUGxheU00X0dldExhc3RFcnJvcigpLnRvU3RyaW5nKCk7dC5iUGxheT0hMH1yZXR1cm4gWS5wdXNoKHtwb3J0OnQub1BsYXlDdHJsLmlQb3J0LGJlbG9uZ1dpbmRvd3BvaW50OnRoaXMsYmVsb25nV2luZG93SWQ6ZX0pLHRoaXMuX2xvZy5JKCIgY2FsbCBQbGF5TTRfUGxheSBzdWNlc3NlZCIpLDF9fSx7a2V5OiJzbGVlcCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PShuZXcgRGF0ZSkuZ2V0VGltZSgpOyhuZXcgRGF0ZSkuZ2V0VGltZSgpLXQ8ZTspO319LHtrZXk6Il9mZWVkRGF0YSIsdmFsdWU6ZnVuY3Rpb24obixlKXt2YXIgdCxpLHIsYSxzPXRoaXMsbz1lLnR5cGUsdT1lLnN0YXR1c1N0cmluZyxkPWUuYnVmLGw9dGhpcy5hV25kTGlzdFtuXSxoPXRoaXMub0V2ZW50Q2FsbGJhY2sucGx1Z2luRXJyb3JIYW5kbGVyLmJpbmQodGhpcyksZD1sLmlzR0I/dGhpcy5fc3RyaXBSdHBIZWFkKGQpOmQ7bC5pc0Zsdj9sLl9yZXNldEZsdnBsYXllcj85PT09bmV3IFVpbnQ4QXJyYXkoZClbNF0mJihsLm9NU0Uub25Mb2FkZXJDaHVua0Fycml2YWwoZCxsLl9yZWNlaXZlZExlbmd0aCksbC5fcmVjZWl2ZWRMZW5ndGgrPWQuYnl0ZUxlbmd0aCxsLl9yZXNldEZsdnBsYXllcj0hMSk6KGwub01TRS5vbkxvYWRlckNodW5rQXJyaXZhbChkLGwuX3JlY2VpdmVkTGVuZ3RoKSxsLl9yZWNlaXZlZExlbmd0aCs9ZC5ieXRlTGVuZ3RoKToiMiI9PT10aGlzLl9kZWNvZGVyVmVyc2lvbj8ocj1uZXcgVWludDhBcnJheShkKSwxPT09KGE9bC5vUGxheUN0cmwuUGxheU00X0lucHV0RGF0YShyLHIuYnl0ZUxlbmd0aCkpPzAhPT1sLmlEZWNvZGVUeXBlJiZsLm9QbGF5Q3RybC5QbGF5TTRfR2V0U291cmNlQnVmZmVyUmVtYWluKCk8bC5vUGxheUN0cmwuaUJ1ZmZlclZhbHVlLzImJihsLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDApLGwuaURlY29kZVR5cGU9MCk6MTE9PT1hPzE9PT1sLmlEZWNvZGVUeXBlfHxsLmJGcmFtZUZvcndhcmR8fChsLm9QbGF5Q3RybC5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDEpLGwuaURlY29kZVR5cGU9MSx0aGlzLm9FdmVudENhbGxiYWNrLnBlcmZvcm1hbmNlTGFjaygpKTp0aGlzLm9FdmVudENhbGxiYWNrLnBsdWdpbkVycm9ySGFuZGxlcihuLEwuRVJSX0pTREVDT0RFUitsLm9QbGF5Q3RybC5QbGF5TTRfR2V0TGFzdEVycm9yKCkudG9TdHJpbmcoKSwiUGxheU00X0lucHV0RGF0YSBvRXJyb3IiKSxsLmJGaXJzdEZyYW1lfHxsLm9QbGF5Q3RybCYmbC5vUGxheUN0cmwuUGxheU00X0dldEZyYW1lSW5mbyhmdW5jdGlvbihlKXt2YXIgdD1zLl9nZXRXbmRJbmRleEZyb21Qb3J0KGUucG9ydCk7ZS53aWR0aCYmZS5oZWlnaHQmJnQ9PT1uJiYobC5iRmlyc3RGcmFtZT0hMCxsLm9QbGF5Q3RybC5pWVVWV2lkdGg9ZS53aWR0aCxsLm9QbGF5Q3RybC5pWVVWSGVpZ2h0PWUuaGVpZ2h0LHMuX2dldE9TRFRpbWUobixlLnllYXIsZS5tb250aCxlLmRheSxlLmhvdXIsZS5taW51dGUsZS5zZWNvbmQpLGwuX3ZpZGVvSW5mby5oZWlnaHQ9ZS5oZWlnaHQsbC5fdmlkZW9JbmZvLndpZHRoPWUud2lkdGgsbC5fdmlkZW9JbmZvLmZyYW1lUmF0ZT1lLmZyYW1lUmF0ZSxsLl9lbWl0ZXIuZW1pdCgiZmlyc3RmcmFtZWxvYWQiKSxzLm9FdmVudENhbGxiYWNrLmZpcnN0RnJhbWVEaXNwbGF5KG4sbC5vUGxheUN0cmwuaVlVVldpZHRoLGwub1BsYXlDdHJsLmlZVVZIZWlnaHQpLGU9ImNocm9tZSI9PT1zLl9icm93c2VySW5mby5zdXBwb3J0ZXImJjkwPHBhcnNlSW50KHMuX2Jyb3dzZXJJbmZvLnN1cHBvcnRlclZlcnNpb24uc3BsaXQoIi4iKS5zaGlmdCgpKT8iMyI6IjIiLHMuX2xvZy5JKCJbaVduZE51bS0iK24rIl0ganNkZWNvZGVyIitlKyIuMOi9r+ino+mmluW4p+W3sue7j+WKoOi9vSznvJbnoIE6IitsLl92aWRlb0luZm8uVmlkZVR5cGUrIizliIbovqjnjoc6IitsLl92aWRlb0luZm8ud2lkdGgrIioiK2wuX3ZpZGVvSW5mby5oZWlnaHQpLHMuSlNfUmVuZGVyQUxMUHJpdmF0ZURhdGEobiwhMSkpfSkpOih0PW5ldyBVaW50OEFycmF5KGQpLGk9bC5vUGxheUN0cmwsZT1sLm9QbGF5Q3RybCYmaS5QbGF5TTRfR2V0WVVWQnVmU2l6ZSgpLGwuYkZpcnN0RnJhbWV8fGwub1BsYXlDdHJsJiZpLlBsYXlNNF9HZXRGcmFtZVJlc29sdXRpb24oZnVuY3Rpb24oZSx0KXtsLmJGaXJzdEZyYW1lPSEwLGwuX3ZpZGVvSW5mby5oZWlnaHQ9dCxsLl92aWRlb0luZm8ud2lkdGg9ZSxsLl9lbWl0ZXIuZW1pdCgiZmlyc3RmcmFtZWxvYWQiKSxzLm9FdmVudENhbGxiYWNrLmZpcnN0RnJhbWVEaXNwbGF5KG4sZSx0KSxzLl9sb2cuSSgiW2lXbmROdW0tIituKyJdIGpzZGVjb2RlcjEuMOi9r+ino+mmluW4p+W3sue7j+WKoOi9vSznvJbnoIE6IitsLl92aWRlb0luZm8uVmlkZVR5cGUrIizliIbovqjnjoc6IitlKyIqIit0KX0pLHI9bC5vUGxheUN0cmwmJmkuUGxheU00X0dldElucHV0QnVmU2l6ZSgpLGE9bC5vUGxheUN0cmwmJmkuUGxheU00X0dldERlY29kZUZyYW1lVHlwZSgpLC41KkQ8ciYmcjwuOCpEJiYxPT09bC5pUmF0ZSYmKDE9PT1hfHxsLmJGcmFtZUZvcndhcmR8fChsLm9QbGF5Q3RybCYmaS5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDEpLHRoaXMub0V2ZW50Q2FsbGJhY2sucGVyZm9ybWFuY2VMYWNrKCkpKSwxMDxlJiZlPDE1JiYoMT09PWF8fGwuYkZyYW1lRm9yd2FyZHx8KGwub1BsYXlDdHJsJiZpLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUoMSksdGhpcy5vRXZlbnRDYWxsYmFjay5wZXJmb3JtYW5jZUxhY2soKSkpLGU8MTAmJnI8LjUqRCYmMCE9PWEmJjE9PT1sLmlSYXRlJiZsLm9QbGF5Q3RybCYmaS5QbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKDApLHU/KHRoaXMuX2Nsb3NlU3RyZWFtQW5kRGVzdG9yeShuKSxoKG4sTC5FUlJfU1RSRUFNX1RSQU5TLHUpKTpvJiYiZXhjZXB0aW9uIj09PW8/KHRoaXMuX2Nsb3NlU3RyZWFtQW5kRGVzdG9yeShuKSxoKG4sTC5FUlJfU1RSRUFNX1BMQVlCQUNLX0VORCxvKSk6bC5vUGxheUN0cmwmJmwub1BsYXlDdHJsLlBsYXlNNF9JbnB1dERhdGEodCx0LmJ5dGVMZW5ndGgpKSxsLnN6U3RvcmFnZVVVSUQmJjA9PT1sLmlNb2RlJiZ0aGlzLm9TdG9yYWdlTWFuYWdlci5pbnB1dERhdGEobC5zelN0b3JhZ2VVVUlELGQpLHRoaXMuYVduZExpc3Rbbl0uX2Jwc0NhbGN1bGF0b3ImJnRoaXMuYVduZExpc3Rbbl0uX2Jwc0luZm8mJih0aGlzLmFXbmRMaXN0W25dLl9icHNJbmZvLmxhc3RWaWRlb0J5dGVzKz1kLmJ5dGVMZW5ndGgsdGhpcy5hV25kTGlzdFtuXS5fYnBzSW5mby5kYXRhX3VwZGF0ZWRfdGltZT1EYXRlLm5vdygpKX19LHtrZXk6Il9jbG9zZVN0cmVhbUFuZERlc3RvcnkiLHZhbHVlOmZ1bmN0aW9uKHIpe3ZhciBhPXRoaXM7dGhpcy5fbG9nLkkoIlt0aGlzLm9wdGlvbnMuc3pJZC0iK3RoaXMub3B0aW9ucy5zeklkKyIgaVduZE51bS0iK3IrIl0gX2Nsb3NlRkxWQW5kSlNkZWNvZGVyIHN0YXJ0Iik7dmFyIG4scz10aGlzLmFXbmRMaXN0W3JdO3JldHVybiB0aGlzLmFXbmRMaXN0W3JdLl9icHNDYWxjdWxhdG9yJiYoc2VsZi5jbGVhckludGVydmFsKHRoaXMuYVduZExpc3Rbcl0uX2Jwc0NhbGN1bGF0b3IpLHRoaXMuYVduZExpc3Rbcl0uX2Jwc0NhbGN1bGF0b3I9bnVsbCx0aGlzLmFXbmRMaXN0W3JdLl9icHNJbmZvPXtsYXN0VmlkZW9CeXRlczowLGJwc192aWRlbzowLGRhdGFfdXBkYXRlZF90aW1lOjAsdGltZV9nYXBfZmFjdG9yOjF9KSxuZXcgZi5kZWZhdWx0KChuPSgwLHkuZGVmYXVsdCkocC5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gZSh0LG4pe3ZhciBpO3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihzLnN6U3RyZWFtVVVJRClyZXR1cm4gZS5wcmV2PTEsZS5uZXh0PTQsYS5vU3RyZWFtQ2xpZW50O2UubmV4dD0xNjticmVhaztjYXNlIDQ6aWYoZS50MD1lLnNlbnQsIWUudDApe2UubmV4dD03O2JyZWFrfWUudDA9YS5vU3RyZWFtQ2xpZW50LnN0b3A7Y2FzZSA3OmlmKGUudDE9ZS50MCwhZS50MSl7ZS5uZXh0PTEwO2JyZWFrfWEub1N0cmVhbUNsaWVudC5zdG9wKHMuc3pTdHJlYW1VVUlEKTtjYXNlIDEwOmUubmV4dD0xNTticmVhaztjYXNlIDEyOmUucHJldj0xMixlLnQyPWUuY2F0Y2goMSksY29uc29sZS53YXJuKGUudDIpO2Nhc2UgMTU6cy5zelN0cmVhbVVVSUQ9IiI7Y2FzZSAxNjpzLmJQbGF5PSExLHMuaVJhdGU9MSxzLmlzR0I9ITEscy5iRnJhbWVGb3J3YXJkPSExLHMuaUdsb2JhbEJhc2VUaW1lPTAsYS5hV25kTGlzdFtyXS5pSW50ZXJydXB0VGltZUNudD0xLGEuYVduZExpc3Rbcl0uaUN1cmVudE9TRFRpbWU9LTEsYS5hV25kTGlzdFtyXS5iRmlyc3RGcmFtZT0hMSxhLmFXbmRMaXN0W3JdLmJSZW9wZW49ITEscy5pc0ZsdiYmcy5vTVNFPyhzLm9NU0UuZGVzdHJveSYmcy5vTVNFLmRlc3Ryb3koKSxzLm9NU0U9bnVsbCxzLmlzRmx2PSExLHMuaU1vZGU9MCxzLl9yZWNlaXZlZExlbmd0aD0wLGEub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEocikuZ2V0KDApLnBvc3Rlcj0iIik6cy5vUGxheUN0cmwmJigiMSI9PT1hLl9kZWNvZGVyVmVyc2lvbj9zLm9QbGF5Q3RybC5QbGF5TTRfRGVzdHJveSgpOihhLl9zdXBwb3J0SW5mby53ZWJHTDImJnMub1BsYXlDdHJsLlBsYXlNNF9TZXRBbnRpYWxpYXMoMCkscy5vUGxheUN0cmwuUGxheU00X1N0b3AoKSxpPVkuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLnBvcnQ9PT1zLm9QbGF5Q3RybC5pUG9ydH0pLFkuc3BsaWNlKGksMSkscy5BZGRpdGlvbkRhdGFDQj1udWxsKSxzLm9QbGF5Q3RybD1udWxsLHMuYkxvYWQ9ITEpLGEuX2xvZy5JKCJbdGhpcy5vcHRpb25zLnN6SWQtIithLm9wdGlvbnMuc3pJZCsiIGlXbmROdW0tIityKyJdIF9jbG9zZUZMVkFuZEpTZGVjb2RlciBlbmQiKSx0KCk7Y2FzZSAyODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sZSxhLFtbMSwxMl1dKX0pKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKX19LHtrZXk6Il9vblBhcnNlZERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtzd2l0Y2godCl7Y2FzZSAxOnRoaXMuYVduZExpc3Rbbl0uc3pTdG9yYWdlVVVJRCYmdGhpcy5vU3RvcmFnZU1hbmFnZXIuaW5wdXREYXRhKHRoaXMuYVduZExpc3Rbbl0uc3pTdG9yYWdlVVVJRCxlKTticmVhaztjYXNlIDI6dGhpcy5hV25kTGlzdFtuXS5fb3NkdGltZUluZm89ZSwwPT09dGhpcy5hV25kTGlzdFtuXS5fb3NkdGltZUluZm8uZ2xvYmFsVGltZT90aGlzLmFXbmRMaXN0W25dLmlDdXJlbnRPU0RUaW1lPXRoaXMuYVduZExpc3Rbbl0uX29zZHRpbWVJbmZvLmZsdmR1cmF0aW9uK3RoaXMuYVduZExpc3Rbbl0uaUdsb2JhbEJhc2VUaW1lOnRoaXMuYVduZExpc3Rbbl0uaUN1cmVudE9TRFRpbWU9dGhpcy5hV25kTGlzdFtuXS5fb3NkdGltZUluZm8uZ2xvYmFsVGltZTticmVhaztjYXNlIDM6dGhpcy5hV25kTGlzdFtuXS5fdmlkZW9JbmZvPWU7YnJlYWs7Y2FzZSA0OmJyZWFrO2Nhc2UgNTp0aGlzLmFXbmRMaXN0W25dLnN6Rmx2aGVhZD1lLnNsaWNlKDAsZS5ieXRlTGVuZ3RoLTQpO2JyZWFrO2Nhc2UgMTE6dGhpcy5hV25kTGlzdFtuXS5iUGxheSYmdGhpcy5hV25kTGlzdFtuXS5iRmlyc3RGcmFtZSYmdGhpcy5fc3RyZWFtUmVzZXQobil9fX0se2tleToiX2NhcHR1cmVBdWRpbyIsdmFsdWU6ZnVuY3Rpb24oZSx0LGIsdyxEKXt2YXIgbixUPXRoaXMscj13aW5kb3cubmF2aWdhdG9yLEU9bmV3KHdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQpO3JldHVybiBuZXcgZi5kZWZhdWx0KChuPSgwLHkuZGVmYXVsdCkocC5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gZSh0LG4pe3ZhciBpO3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDp2b2lkIDA9PT1yLm1lZGlhRGV2aWNlcyYmKHIubWVkaWFEZXZpY2VzPXt9KSxpPXthdWRpbzp7bm9pc2VTdXBwcmVzc2lvbjohMCxlY2hvQ2FuY2VsbGF0aW9uOiEwfSx2aWRlbzohMX0sdm9pZCAwPT09ci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhJiYoci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhPWZ1bmN0aW9uKGUpe2lmKCEoci5nZXRVc2VyTWVkaWF8fHIud2Via2l0R2V0VXNlck1lZGlhfHxyLm1vekdldFVzZXJNZWRpYXx8ci5tc0dldFVzZXJNZWRpYSkpcmV0dXJuIGYuZGVmYXVsdC5yZWplY3QobmV3IEVycm9yKCJnZXRVc2VyTWVkaWEgaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgYnJvd3NlciIpKX0pLHIubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYShpKS50aGVuKGZ1bmN0aW9uKE0pe1QuYlRhbGtMb2FkZWR8fE0uZ2V0VHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0b3AoKX0pO3ZhciBMPUUuY3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTSksZT1MLmNvbnRleHQsUz1lLmNyZWF0ZVNjcmlwdFByb2Nlc3Nvcig1MTIsMSwxKSxrPVtdO1Mub25hdWRpb3Byb2Nlc3M9ZnVuY3Rpb24oZSl7VC5iVGFsa0xvYWRlZHx8VC5fYXVkaW9ub2RlQ2xvc2V8fChULl9hdWRpb25vZGVDbG9zZT0hMCxMLmRpc2Nvbm5lY3QoUyksUy5kaXNjb25uZWN0KEUuZGVzdGluYXRpb24pLE0uZ2V0VHJhY2tzKCkuZm9yRWFjaChmdW5jdGlvbihlKXtlLnN0b3AoKX0pKTtmb3IodmFyIHQ9ZS5pbnB1dEJ1ZmZlci5nZXRDaGFubmVsRGF0YSgwKSxuPTQ4ZTMvYixpPXQubGVuZ3RoL24scj1uZXcgd2luZG93LkZsb2F0MzJBcnJheShpKSxhPTAscz0wO2E8aTspclthXT10W3NdLHMrPW4sYSsrO3ZhciBvPXIubGVuZ3RoLHU9bnVsbDtpZigxNj09PXcpZm9yKHZhciBlPW5ldyB3aW5kb3cuQXJyYXlCdWZmZXIoMipvKSx1PW5ldyB3aW5kb3cuRGF0YVZpZXcoZSksZD0wLGw9MDtsPHIubGVuZ3RoO2wrKyxkKz0yKXt2YXIgaD1NYXRoLm1heCgtMSxNYXRoLm1pbigxLHJbbF0pKTt1LnNldEludDE2KGQsaDwwPzMyNzY4Kmg6MzI3NjcqaCwhMCl9ZWxzZSBpZig4PT09dyl7bz1uZXcgd2luZG93LkFycmF5QnVmZmVyKG8pO3U9bmV3IHdpbmRvdy5EYXRhVmlldyhvKTtmb3IodmFyIGM9MCxfPTA7XzxyLmxlbmd0aDtfKyssYysrKXt2YXIgZj1NYXRoLm1heCgtMSxNYXRoLm1pbigxLHJbX10pKSxmPWY8MD8zMjc2OCpmOjMyNzY3KmYsZj1wYXJzZUludCgyNTUvKDY1NTM1LygzMjc2OCtmKSksMTApO3Uuc2V0SW50OChjLGYsITApfX1pZihULmJUYWxrTG9hZGVkJiZudWxsIT09dS5idWZmZXIpZm9yKHZhciBtLHA9bmV3IFVpbnQ4QXJyYXkodS5idWZmZXIpLHk9ay5sZW5ndGgsdj0wLGc9cC5ieXRlTGVuZ3RoO3Y8Zzt2Kyspa1t5KytdPXBbdl0sNjQwPT09ay5sZW5ndGgmJihULl9zYXZlQXVkaW9GbGFncyYmKG09VC5taXhUb1dhdmUobmV3IFVpbnQ4QXJyYXkoayksYix3LEQpLFQuc3pBdWRpb1N0b3JhZ2VVVUlEJiZULm9TdG9yYWdlTWFuYWdlci5pbnB1dERhdGEoVC5zekF1ZGlvU3RvcmFnZVVVSUQsbmV3IFVpbnQ4QXJyYXkobSkpKSxULmJUYWxrTG9hZGVkJiZULm9UYWxrUGxheUN0cmwuVGFsa19JbnB1dEF1ZEVuY29kZURhdGEobmV3IFVpbnQ4QXJyYXkoayksNjQwKSx5PWsubGVuZ3RoPTApfSxMLmNvbm5lY3QoUyksUy5jb25uZWN0KGUuZGVzdGluYXRpb24pLHQoKX0sZnVuY3Rpb24oZSl7cmV0dXJuIFQuX2xvZy5FKEwuRVJSX1RBTEtfR0VUVVNFUk1FRElBX1VOREVGSU5FKyI6ICDph4fpm4bpn7PpopHmjqXlj6PlpLHotKUiLGUpLFQuSlNfU3RvcFRhbGsoKSxuKEwuRVJSX1RBTEtfR0VUVVNFUk1FRElBX1VOREVGSU5FKX0pO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sZSxUKX0pKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKX19LHtrZXk6Il9sb2FkVGFsayIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIHMsbyx1LGQsbCxoPXRoaXMsYz0iIixfPSIiO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGkscil7dmFyIGUsdCxuO2M9LTEhPT1hLnNlYXJjaCgid3NzOi8vIik/KGU9YS5pbmRleE9mKCIvcHJveHkvIikrNyx0PWEuaW5kZXhPZigiLyIsZSksXz1hLnN1YnN0cmluZyhlLHQpLGEucmVwbGFjZSgid3NzOiIsIndzOiIpLnJlcGxhY2UoXywiIikucmVwbGFjZSgiL3Byb3h5LyIsIiIpKTphLGgub1N0cmVhbUNsaWVudC5vcGVuU3RyZWFtKGEse3BsYXlVUkw6Yyxwcm94eTpfLG1vZGU6Im1lZGlhIn0sKG49KDAseS5kZWZhdWx0KShwLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKHQpe3ZhciBuO3JldHVybiBwLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighdC5iSGVhZCl7ZS5uZXh0PTE4O2JyZWFrfXM9dC5vUGFyYW1zLmlBdWRpb1R5cGUsbz10Lm9QYXJhbXMuaUF1ZGlvQml0UmF0ZSx1PXQub1BhcmFtcy5pQXVkaW9TYW1wbGluZ1JhdGUsZD10Lm9QYXJhbXMuaUF1ZGlvQml0V2lkdGgsbD10Lm9QYXJhbXMuaUNoYW5uZWwsNjxzJiYoaC5fbG9nLkUoTC5FUlJfVEFMS19VTlNVUFBPUlRfQVVESU9UWVBFKyI6ICDkuI3mlK/mjIHor6Xpn7PpopHmoLzlvI8iKSxoLkpTX1N0b3BUYWxrKCkscihMLkVSUl9UQUxLX1VOU1VQUE9SVF9BVURJT1RZUEUpKSxoLm9UYWxrUGxheUN0cmwuVGFsa19DcmVhdGVBdWRFbmNvZGUocyksaC5vVGFsa1BsYXlDdHJsLlRhbGtfU2V0QXVkRW5jb2RlUGFyYW0odSxsLG8sZCksaC5vVGFsa1BsYXlDdHJsLlRhbGtfUmVnaXN0ZXJBdWRFbmNvZGVDQihmdW5jdGlvbihlKXtoLm9TdHJlYW1DbGllbnQudHJhbnNtaXNzaW9uKGguc3pUYWxrU3RyZWFtSWQsZSl9KSxoLm9UYWxrUGxheUN0cmwuVGFsa19DcmVhdGVBdURlY29kZSgpLGgub1RhbGtQbGF5Q3RybC5UYWxrX1NldEF1ZERlY29kZVBhcmFtKHUsbCxvLGQscyksaC5vVGFsa1BsYXlDdHJsLlRhbGtfT3BlblN0cmVhbURlY29kZURhdGEoKSwxIT09aC5vVGFsa1BsYXlDdHJsLlRhbGtfR2V0TGFzdEVycm9yKCkmJihuPUwuRVJSX1RBTEsraC5vVGFsa1BsYXlDdHJsLlRhbGtfR2V0TGFzdEVycm9yKCkudG9TdHJpbmcoKSxoLl9sb2cuRShuKyI6ICDlr7norrLlupPliJ3lp4vljJblpLHotKUiLG4pLGguSlNfU3RvcFRhbGsoKSxyKG4pKSxoLmJUYWxrTG9hZGVkPSEwLGguX2NhcHR1cmVBdWRpbyhzLG8sdSxkLGwpLnRoZW4oZnVuY3Rpb24oKXtpKCl9LGZ1bmN0aW9uKGUpe3IoZSl9KSxlLm5leHQ9MjQ7YnJlYWs7Y2FzZSAxODppZighdC5jbWR8fCJTdHJlYW1VVUlEIiE9PXQuY21kKXtlLm5leHQ9MjE7YnJlYWt9ZS5uZXh0PTI0O2JyZWFrO2Nhc2UgMjE6aWYodC5idWYuYnl0ZUxlbmd0aDwxMClyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2UubmV4dD0yMzticmVhaztjYXNlIDIzOmgub1RhbGtQbGF5Q3RybCYmaC5vVGFsa1BsYXlDdHJsLlRhbGtfSW5wdXRBdWREZWNvZGVEYXRhKHQuYnVmLHQuYnVmLmJ5dGVMZW5ndGgpO2Nhc2UgMjQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19LGUsaCl9KSksZnVuY3Rpb24oZSl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oZSl7aWYoaC5iVGFsa0xvYWRlZCkxZTM9PT1lLmNvZGV8fDEwMDU9PT1lLmNvZGU/KGguX2xvZy5FKEwuRVJSX1NUUkVBTV9DT05ORUNUX0NMT1NFRCsiOiAg6YCB5rWB5byC5bi477yM6KKr5ZCO56uv5YWz6Zet6L+e5o6lIiksaC5vRXZlbnRDYWxsYmFjay50YWxrUGx1Z2luRXJyb3JIYW5kbGVyKEwuRVJSX1NUUkVBTV9DT05ORUNUX0NMT1NFRCxlKSk6KGguX2xvZy5FKEwuRVJSX1NUUkVBTV9JTlRFUlJVUFQrIjogIOa1geS4reaWrSIpLGgub0V2ZW50Q2FsbGJhY2sudGFsa1BsdWdpbkVycm9ySGFuZGxlcihMLkVSUl9TVFJFQU1fSU5URVJSVVBULGUpKSxoLnN6VGFsa1N0cmVhbUlkPSIiLGguSlNfU3RvcFRhbGsoKTtlbHNle2lmKDFlMz09PWUuY29kZXx8MTAwNT09PWUuY29kZSlyZXR1cm4gcigpO2guc3pUYWxrU3RyZWFtSWQ/KGguc3pUYWxrU3RyZWFtSWQ9IiIscihMLkVSUl9DT01fUkVDVl9TVFJFQU1fVElNRU9VVCkpOjEwMDY9PT1lLmNvZGUmJi0xIT09YS5zZWFyY2goIndzczovLyIpP3IoTC5FUlJfU1RSRUFNX1dTU19FUlJPUik6cihMLkVSUl9TVFJFQU1fV1NfRVJST1IpfX0pLnRoZW4oZnVuY3Rpb24oZSl7aC5zelRhbGtTdHJlYW1JZD1lLGgub1N0cmVhbUNsaWVudC5zdGFydFBsYXkoZSwiIiwiIiwic3RhcnRUYWxrIikudGhlbihmdW5jdGlvbigpe2gub1N0cmVhbUNsaWVudC5jbG9zZVRpbWVyKGUpfSxmdW5jdGlvbihlKXt2YXIgdD1lOyJzdHJpbmciIT10eXBlb2YgZSYmKHQ9IjB4MCIrZS5lcnJvckNvZGUudG9TdHJpbmcoMTYpKSxoLl9sb2cuRSh0KyI6ICDlj5bmtYHlpLHotKXvvIzor6bmg4XmoLnmja7plJnor6/noIHlnKjov5DnrqHlkI7lj7Dov5vooYzmn6Xor6IuIikscih0KX0pfSxmdW5jdGlvbihlKXtoLl9sb2cuRShMLkVSUl9TVFJFQU1fSU5URVJSVVBUKyI6ICDlr7norrLpgJrpgZPlvILluLjkuK3mlq06IixlKSxoLkpTX1N0b3BUYWxrKCl9KX0pfX0se2tleToiSlNfU3RhcnRUYWxrIix2YWx1ZTpmdW5jdGlvbihyKXt2YXIgbixhPXRoaXM7cmV0dXJuIHRoaXMuX2F1ZGlvbm9kZUNsb3NlPSExLG5ldyBmLmRlZmF1bHQoKG49KDAseS5kZWZhdWx0KShwLmRlZmF1bHQubWFyayhmdW5jdGlvbiBlKG4saSl7dmFyIHQ7cmV0dXJuIHAuZGVmYXVsdC53cmFwKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCJzdHJpbmciIT10eXBlb2Ygcnx8LTE9PT1yLnNlYXJjaCgid3NzOi8vIikmJi0xPT09ci5zZWFyY2goIndzOi8vIikpcmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGkoTC5FUlJfQ09NX1VSTF9FUlJPUikpO2UubmV4dD0yO2JyZWFrO2Nhc2UgMjp0PSIiLHQ9IjIiPT09YS5fZGVjb2RlclZlcnNpb24/YS5vcHRpb25zLnN6QmFzZVBhdGgrInRhbGtXL0F1ZGlvSW50ZXJDb20uanMiOmEub3B0aW9ucy5zekJhc2VQYXRoKyJ0YWxrL0F1ZGlvSW50ZXJDb20uanMiLG51bGw9PT1hLm9UYWxrUGxheUN0cmw/YS5vVGFsa1BsYXlDdHJsPW5ldyB1LkpTVGFsa0N0cmwodCxmdW5jdGlvbihlKXt2YXIgdD1lLmNtZDtlLnN0YXR1cyxlLmVycm9yQ29kZTsibG9hZGVkIj09PXQmJmEuX2xvYWRUYWxrKHIpLnRoZW4oZnVuY3Rpb24oKXthLl9sb2cuSSgiIG9UYWxrUGxheUN0cmwgbG9hZCBlbmQgY29kZSIpLG4oKX0sZnVuY3Rpb24oZSl7aShlKX0pfSk6YS5KU19TdG9wVGFsaygpLnRoZW4oZnVuY3Rpb24oKXthLm9UYWxrUGxheUN0cmw9bmV3IHUuSlNUYWxrQ3RybCh0LGZ1bmN0aW9uKGUpe3ZhciB0PWUuY21kO2Uuc3RhdHVzLGUuZXJyb3JDb2RlOyJsb2FkZWQiPT09dCYmYS5fbG9hZFRhbGsocikudGhlbihmdW5jdGlvbigpe2EuX2xvZy5JKCIgb1RhbGtQbGF5Q3RybCBsb2FkIGVuZCBjb2RlIiksbigpfSxmdW5jdGlvbihlKXtpKGUpfSl9KX0pO2Nhc2UgNTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sZSxhKX0pKSxmdW5jdGlvbihlLHQpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pKX19LHtrZXk6IkpTX1N0b3BUYWxrIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtuLkpTX1N0b3BTYXZlVGFsaygpLG4uYlRhbGtMb2FkZWQ9ITEsbi5zelRhbGtTdHJlYW1JZCYmKG4ub1N0cmVhbUNsaWVudC5zdG9wKG4uc3pUYWxrU3RyZWFtSWQpLG4uc3pUYWxrU3RyZWFtSWQ9IiIpLG4ub1RhbGtQbGF5Q3RybCYmKG4ub1RhbGtQbGF5Q3RybC5UYWxrX0Rlc3Ryb3lBdWRFbmNvZGUoKSxuLm9UYWxrUGxheUN0cmwuVGFsa19EZXN0cm95QXVkRGVjb2RlKCksbi5vVGFsa1BsYXlDdHJsPW51bGwpLGUoKX0pfX0se2tleToiSlNfVGFsa1NldFZvbHVtZSIsdmFsdWU6ZnVuY3Rpb24obil7dmFyIGk9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe2kub1RhbGtQbGF5Q3RybCYmMD09PWkub1RhbGtQbGF5Q3RybC5UYWxrX1NldFZvbHVtZShuLzEwMCk/dChpLm9UYWxrUGxheUN0cmwuVGFsa19HZXRMYXN0RXJyb3IoKStMLkVSUl9UQUxLKTplKCl9KX19LHtrZXk6IkpTX1RhbGtHZXRWb2x1bWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbih0KXtlLm9UYWxrUGxheUN0cmwmJmUub1RhbGtQbGF5Q3RybC5UYWxrX0dldFZvbHVtZShmdW5jdGlvbihlKXtlPU1hdGgucm91bmQoMTAwKmUpO3QoZSl9KX0pfX0se2tleToiSlNfU2V0VGFsa0xvZ0ZsYWciLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7bi5vVGFsa1BsYXlDdHJsJiZuLm9UYWxrUGxheUN0cmwuVGFsa19TZXRUYWxrTG9nRmxhZyh0KSxlKCl9KX19LHtrZXk6ImFkZFdhdkhlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9ZS5ieXRlTGVuZ3RoLGE9bmV3IEFycmF5QnVmZmVyKDQ0K3IpLHM9bmV3IERhdGFWaWV3KGEpO3JldHVybiBDKHMsMCwiUklGRiIpLHMuc2V0VWludDMyKDQsMzYrciwhMCksQyhzLDgsIldBVkUiKSxDKHMsMTIsImZtdCAiKSxzLnNldFVpbnQzMigxNiwxNiwhMCkscy5zZXRVaW50MTYoMjAsMSwhMCkscy5zZXRVaW50MTYoMjIsaSwhMCkscy5zZXRVaW50MzIoMjQsdCwhMCkscy5zZXRVaW50MzIoMjgsdCppKihuLzgpLCEwKSxzLnNldFVpbnQxNigzMixpKihuLzgpLCEwKSxzLnNldFVpbnQxNigzNCxuLCEwKSxDKHMsMzYsImRhdGEiKSxzLnNldFVpbnQzMig0MCw1MjQyODgwLCEwKSxzLnNldFVpbnQxNig0NCxlLCEwKSxzLmJ1ZmZlcn19LHtrZXk6Im1peFRvV2F2ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9dm9pZCAwO2lmKDA9PT10aGlzLl9zYXZlQXVkaW9UeXBlKXtpZih0aGlzLl9zdGFzaFVzZWQ8PTApcmV0dXJuO3I9dGhpcy5fc3Rhc2hCdWZmZXIuc2xpY2UoMCx0aGlzLl9zdGFzaFVzZWQpLHRoaXMuX3N0YXNoVXNlZD0wfWVsc2UgaWYoMT09PXRoaXMuX3NhdmVBdWRpb1R5cGUpcj1lO2Vsc2UgaWYodGhpcy5fc3Rhc2hVc2VkPj1lLmJ5dGVMZW5ndGgpe3ZhciBhPW5ldyBVaW50OEFycmF5KHRoaXMuX3N0YXNoQnVmZmVyLDAsdGhpcy5fYnVmZmVyU2l6ZSkscz1uZXcgVWludDhBcnJheSh0aGlzLl9zdGFzaEJ1ZmZlci5zbGljZSgwLGUuYnl0ZUxlbmd0aCkpO3RoaXMuX3N0YXNoVXNlZC09ZS5ieXRlTGVuZ3RoO2Zvcih2YXIgcj1uZXcgVWludDhBcnJheShlLmJ5dGVMZW5ndGgpLG89MDtvPGUuYnl0ZUxlbmd0aDtvKyspcltvXT0uNSpzW29dKy41KmVbb107dmFyIHU9bmV3IFVpbnQ4QXJyYXkodGhpcy5fc3Rhc2hCdWZmZXIsZS5ieXRlTGVuZ3RoKTthLnNldCh1LDApfWVsc2Ugcj1lO3JldHVybiB0aGlzLl9maXJzdGFkZHdhdmU/KHRoaXMuX2ZpcnN0YWRkd2F2ZT0hMSx0aGlzLmFkZFdhdkhlYWRlcihyLHQsbixpKSk6cn19LHtrZXk6IkpTX1N0YXJ0U2F2ZVRhbGsiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscj0xPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MjtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbih0LG4pe2kuYlRhbGtMb2FkZWQ/KGkuX3NhdmVBdWRpb0ZsYWdzPSExLGkuX3N0YXNoQnVmZmVyPW5ldyBBcnJheUJ1ZmZlcihpLl9idWZmZXJTaXplKSxpLl9zdGFzaFVzZWQ9MCxpLl9maXJzdGFkZHdhdmU9ITAsaS5zekF1ZGlvU3RvcmFnZVVVSUQ/bihMLkVSUl9QTEFZX0ZJTEVTWVNfQUxSRUFEWV9XUklUSU5HKTppLm9TdG9yYWdlTWFuYWdlci5zdGFydFJlY29yZChlLCJhdWRpbyIsMCwwLHtjYkV2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXtuKGUpfSxpUGFja2FnZTowfSkudGhlbihmdW5jdGlvbihlKXtpLnN6QXVkaW9TdG9yYWdlVVVJRD1lLGkuX3NhdmVBdWRpb0ZsYWdzPSEwLGkuX3NhdmVBdWRpb1R5cGU9cixpLm9UYWxrUGxheUN0cmwmJmkub1RhbGtQbGF5Q3RybC5UYWxrX1JlZ2lzdGVyQXVkRGVjb2RlQ0IoZnVuY3Rpb24oZSl7aS5fc2F2ZUF1ZGlvRmxhZ3MmJihuZXcgVWludDhBcnJheShpLl9zdGFzaEJ1ZmZlciwwLGkuX2J1ZmZlclNpemUpLnNldChlLGkuX3N0YXNoVXNlZCksaS5fc3Rhc2hVc2VkKz1lLmJ5dGVMZW5ndGgpfSksdCgpfSxmdW5jdGlvbigpe24oKX0pKTpuKEwuRVJSX1RBTEtfTk9UX1RBTEtJTkcpfSl9fSx7a2V5OiJKU19TdG9wU2F2ZVRhbGsiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpe24uX3NhdmVBdWRpb0ZsYWdzPSExLG4uX3N0YXNoQnVmZmVyPW51bGwsbi5fc3Rhc2hVc2VkPTAsbi5zekF1ZGlvU3RvcmFnZVVVSUQmJm4ub1N0b3JhZ2VNYW5hZ2VyLnN0b3BSZWNvcmQobi5zekF1ZGlvU3RvcmFnZVVVSUQpLnRoZW4oZnVuY3Rpb24oKXtuLnN6QXVkaW9TdG9yYWdlVVVJRD0iIixlKCl9LGZ1bmN0aW9uKGUpe3QoZSl9KX0pfX0se2tleToiSlNfR2V0VmlkZW9JbmZvIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBpPXRoaXMscj0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTE7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXsocjwwfHxyPmkuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIHIpJiYocj1pLmlDdXJyZW50V25kSW5kZXgpO3ZhciBuPWkuX2NoZWNrUGxheShyKTswIT09biYmdChuKSxlKGkuYVduZExpc3Rbcl0uX3ZpZGVvSW5mbyl9KX19LHtrZXk6IkpTX1NldENvbm5lY3RUaW1lT3V0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXMsaT0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTEscj1hcmd1bWVudHNbMV07cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXsoaTwwfHxpPm4uaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIGkpJiYoaT1uLmlDdXJyZW50V25kSW5kZXgpLG4ub1N0cmVhbUNsaWVudC5zZXRUaW1lT3V0KHIpLnRoZW4oZnVuY3Rpb24oKXtlKCl9LGZ1bmN0aW9uKGUpe3QoZSl9KX0pfX0se2tleToiSlNfU2V0QWRkaXRpb25EYXRhQ0IiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xLGk9dGhpcyxyPWFyZ3VtZW50c1sxXSxhPWFyZ3VtZW50c1syXTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpeyhuPDB8fG4+aS5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgbikmJihuPWkuaUN1cnJlbnRXbmRJbmRleCksaS5hV25kTGlzdFtuXS5vUGxheUN0cmwuUGxheU00X1NldEFkZGl0aW9uRGF0YUNhbGxCYWNrKHIsMSksaS5hV25kTGlzdFtuXS5BZGRpdGlvbkRhdGFDQj1hLGUoKX0pfX0se2tleToiSlNfU2V0U3RyZWFtQ2FjaGVCdWYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcyxpPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMSxyPWFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlLHQpeyhpPDB8fGk+bi5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgaSkmJihpPW4uaUN1cnJlbnRXbmRJbmRleCksKHI8MHx8NTI0Mjg4MDxyKSYmKHI9NTI0Mjg4MCxuLl9sb2cuRShMLkVSUl9TVFJFQU1fQlVGRVJfRVJST1IrIjogIEpTX1NldFN0cmVhbUNhY2hlQnVmIHNpemUgaW52YWlsZO+8jHBsZWFzZSBzZXQgMC01KjEwMjQqMTAyNC4iKSx0KEwuRVJSX1NUUkVBTV9CVUZFUl9FUlJPUikpLG4uYVduZExpc3RbaV0uc3pCdWZmZXJTaXplPXIsZSgpfSl9fSx7a2V5OiJKU19TZXRUcmFjZUlkIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj0wPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06LTEsaT1hcmd1bWVudHNbMV07cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7KG48MHx8bj50LmlNYXhXbmROdW0tMXx8Im51bWJlciIhPXR5cGVvZiBuKSYmKG49dC5pQ3VycmVudFduZEluZGV4KSx0LmFXbmRMaXN0W25dLmJvcGVuVHJhY2VJZD1pLGUoKX0pfX0se2tleToiSlNfR2V0VHJhY2VJZCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49MDxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOi0xO3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUpeyhuPDB8fG4+dC5pTWF4V25kTnVtLTF8fCJudW1iZXIiIT10eXBlb2YgbikmJihuPXQuaUN1cnJlbnRXbmRJbmRleCksZSh0LmFXbmRMaXN0W25dLnN6VHJhY2VJZCl9KX19LHtrZXk6IkpTX1NldEludGVycnVwdFRpbWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTotMSxpPWFyZ3VtZW50c1sxXTtyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihlKXsobjwwfHxuPnQuaU1heFduZE51bS0xfHwibnVtYmVyIiE9dHlwZW9mIG4pJiYobj10LmlDdXJyZW50V25kSW5kZXgpLHQuYVduZExpc3Rbbl0uaUludGVycnVwdFRpbWU9MWUzKmksZSgpfSl9fSx7a2V5OiJfc3VwcG9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0hIXdpbmRvdy5NZWRpYVNvdXJjZSx0PSEhd2luZG93LldlYkdMUmVuZGVyaW5nQ29udGV4dCxuPSEhd2luZG93LldlYkdMMlJlbmRlcmluZ0NvbnRleHQsaT0hIXdpbmRvdy5TaGFyZWRBcnJheUJ1ZmZlcixyPSEhd2luZG93Lk9mZnNjcmVlbkNhbnZhcyxhPSEoIndpbmRvd3MiPT09dGhpcy5fYnJvd3NlckluZm8uc3lzdGVtJiYiY2hyb21lIj09PXRoaXMuX2Jyb3dzZXJJbmZvLnN1cHBvcnRlciYmcGFyc2VJbnQodGhpcy5fYnJvd3NlckluZm8uc3VwcG9ydGVyVmVyc2lvbi5zcGxpdCgiLiIpLnNoaWZ0KCkpPDgwKSxzPSJhbmRyb2lkIiE9PXRoaXMuX2Jyb3dzZXJJbmZvLnN5c3RlbSYmImlvcyIhPT10aGlzLl9icm93c2VySW5mby5zeXN0ZW07cmV0dXJue01TRTplLHdlYkdMMTp0LHdlYkdMMjpuLFNoYXJlZEFycmF5QnVmZmVyOmksT2Zmc2NyZWVuQ2FudmFzOnIsImRlY29kZXIxLjAiOnQsImRlY29kZXIyLjAiOnQmJmkmJnImJmEmJnN9fX0se2tleToiX2RlY29kZXIyTG9hZGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBuZXcgZi5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxpPXdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpezRlMzw9biYmKGNsZWFySW50ZXJ2YWwoaSksdChMLkVSUl9DT01fTE9BRF9KU0RFQ09ERVJfRVJST1IpKSxFJiYoY2xlYXJJbnRlcnZhbChpKSxlKDEpKSxuKz0xMDB9LDEwMCl9KX19LHtrZXk6Il9jYWxjdWxhdGVSZWFsdGltZUJpdHJhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuYVduZExpc3RbZV0uX2Jwc0luZm8mJjAhPT10aGlzLmFXbmRMaXN0W2VdLl9icHNJbmZvLmRhdGFfdXBkYXRlZF90aW1lJiYoMCE9PXRoaXMuYVduZExpc3RbZV0uX2Jwc0luZm8ubGFzdFZpZGVvQnl0ZXMmJih0aGlzLmFXbmRMaXN0W2VdLl9icHNJbmZvLmJwc192aWRlbz04KnRoaXMuYVduZExpc3RbZV0uX2Jwc0luZm8ubGFzdFZpZGVvQnl0ZXMvMTAyNCx0aGlzLmFXbmRMaXN0W2VdLl9icHNJbmZvLmxhc3RWaWRlb0J5dGVzPTApLHRoaXMuYVduZExpc3RbZV0uX3ZpZGVvSW5mby5iaXRSYXRlPXRoaXMuYVduZExpc3RbZV0uX2Jwc0luZm8uYnBzX3ZpZGVvLHRoaXMuYVduZExpc3RbZV0uX2Jwc0luZm8udGltZV9nYXBfZmFjdG9yPURhdGUubm93KCksKHQ9RGF0ZS5ub3coKS10aGlzLmFXbmRMaXN0W2VdLl9icHNJbmZvLmRhdGFfdXBkYXRlZF90aW1lKT49dGhpcy5hV25kTGlzdFtlXS5pSW50ZXJydXB0VGltZSp0aGlzLmFXbmRMaXN0W2VdLmlJbnRlcnJ1cHRUaW1lQ250JiYhdGhpcy5hV25kTGlzdFtlXS5pc1BhdXNlJiYodGhpcy5hV25kTGlzdFtlXS5pSW50ZXJydXB0VGltZUNudCsrLHRoaXMub0V2ZW50Q2FsbGJhY2suSW50ZXJydXB0U3RyZWFtKGUsdC8xZTMpLHRoaXMuX2xvZy5XKCIgc3RyZWFtIEludGVycnVwdCB3aW5kb3dzSWQ6IitlKyIsIHRpbWU6Iit0KyJtcyIpKSl9fSx7a2V5OiJfbG9hZFNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBmLmRlZmF1bHQoZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7dC50eXBlPSJ0ZXh0L2phdmFzY3JpcHQiLHQuc3JjPW4sdC5vbmxvYWQ9ZnVuY3Rpb24oKXtlKCl9LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCl9KX19LHtrZXk6InV1aWQyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuLGkscj0iMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLnNwbGl0KCIiKSxhPVtdO2lmKHQ9dHx8ci5sZW5ndGgsZSlmb3Iobj0wO248ZTtuKyspYVtuXT1yWzB8TWF0aC5yYW5kb20oKSp0XTtlbHNlIGZvcihhWzhdPWFbMTNdPWFbMThdPWFbMjNdPSItIixhWzE0XT0iNCIsbj0wO248MzY7bisrKWFbbl18fChpPTB8MTYqTWF0aC5yYW5kb20oKSxhW25dPXJbMTk9PT1uPzMmaXw4OmldKTtyZXR1cm4gYS5qb2luKCIiKX19LHtrZXk6Il9zdHJlYW1FbmRTdG9wIix2YWx1ZTpmdW5jdGlvbihpKXt2YXIgcj10aGlzLmFXbmRMaXN0W2ldLGE9dGhpcztyZXR1cm4gbmV3IGYuZGVmYXVsdChmdW5jdGlvbihuKXthLmFXbmRMaXN0W2ldLnN0cmVhbUVuZGludGVyPXdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpe2lmKHIuaXNGbHYpe3ZhciBlPWEub0pTUGx1Z2luLmZpbmQoInZpZGVvLnBsYXktd2luZG93IikuZXEoaSkuZ2V0KDApO2lmKGUuc2Vla2FibGUuZW5kKDApLWUuY3VycmVudFRpbWU8MSlyZXR1cm4gY2xlYXJJbnRlcnZhbChyLnN0cmVhbUVuZGludGVyKSxhLkpTX1N0b3AoaSksbigpfWVsc2UgaWYoci5vUGxheUN0cmwpaWYoIjEiPT09YS5fZGVjb2RlclZlcnNpb24pe3ZhciB0PXIub1BsYXlDdHJsJiZyLm9QbGF5Q3RybC5QbGF5TTRfR2V0WVVWQnVmU2l6ZSgpLGU9ci5vUGxheUN0cmwmJnIub1BsYXlDdHJsLlBsYXlNNF9HZXRJbnB1dEJ1ZlNpemUoKTtpZigwPT09dCYmMD09PWUpcmV0dXJuIGNsZWFySW50ZXJ2YWwoci5zdHJlYW1FbmRpbnRlciksYS5KU19TdG9wKGkpLG4oKX1lbHNlIGlmKDA9PT1yLm9QbGF5Q3RybC5QbGF5TTRfR2V0U291cmNlQnVmZmVyUmVtYWluKCkpcmV0dXJuIGNsZWFySW50ZXJ2YWwoci5zdHJlYW1FbmRpbnRlciksYS5KU19TdG9wKGkpLG4oKTswfSw1MDApfSl9fSx7a2V5OiJjdXJyZW50V2luZG93SW5kZXgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlDdXJyZW50V25kSW5kZXh9fSx7a2V5OiJmaWxlU3lzU3dpdGNoIixzZXQ6ZnVuY3Rpb24oZSl7aWYoImJvb2xlYW4iIT10eXBlb2YgZSlyZXR1cm4gY29uc29sZS5lcnJvcigiZmlsZVN5c1N3aXRjaCBzZXQgc2hvdWxkIGdldCBhIEJvb2xlYW4iKTt0aGlzLl9maWxlU3lzU3dpdGNoPWV9fV0pLFApO2Z1bmN0aW9uIFAoZSl7dmFyIHQ9dGhpczsoMCxzLmRlZmF1bHQpKHRoaXMsUCksdGhpcy5UQUc9Ikg1cGxheWVyIjt0aGlzLm9wdGlvbnM9di5kZWZhdWx0LmV4dGVuZCh7c3pJZDoicGxheVduZCIsaVdpZHRoOjQwMCxpSGVpZ2h0OjMwMCxpTWF4U3BsaXQ6MSxpQ3VycmVudFNwbGl0OjEsc3pCYXNlUGF0aDoiLi8iLGJTdXBwb3JEb3VibGVDbGlja0Z1bGw6ITAsb3BlbkRlYnVnOiEwLG1zZVdvcmtlckVuYWJsZTohMX0sZSk7dmFyIG49di5kZWZhdWx0LmV4dGVuZChuPXtib3JkZXJXaWR0aDoxLGJvcmRlcjoiIzM0MzQzNCIsYm9yZGVyU2VsZWN0OiIjRkZDQzAwIixiYWNrZ3JvdW5kOiIjMDAwIn0sZS5vU3R5bGUpO3RoaXMub3B0aW9ucy5vU3R5bGU9bix0aGlzLl9sb2c9bmV3IGsuZGVmYXVsdCh0aGlzKSx0aGlzLmU9e3Jlc2l6ZTp0aGlzLl9ldmVudEhhbmRsZXJSZXNpemUuYmluZCh0aGlzKSxmdWxsc2NyZWVuY2hhbmdlOnRoaXMuX2V2ZW50SGFuZGxlckZ1bGxzY3JlZW5jaGFuZ2UuYmluZCh0aGlzKSx2aXNpYmlsaXR5Y2hhbmdlOnRoaXMuX2V2ZW50SGFuZGxlclZpc2liaWxpdHljaGFuZ2UuYmluZCh0aGlzKX0sdGhpcy5vcHRpb25zLmlDdXJyZW50U3BsaXQ+dGhpcy5vcHRpb25zLmlNYXhTcGxpdCYmKHRoaXMub3B0aW9ucy5pQ3VycmVudFNwbGl0PXRoaXMub3B0aW9ucy5pTWF4U3BsaXQpLHRoaXMuaUN1cnJlbnRQbGF5UmF0ZT0xLHRoaXMuaUN1cnJlbnRTb3VuZFduZD0tMSx0aGlzLmlNYXhXbmROdW09dGhpcy5vcHRpb25zLmlNYXhTcGxpdCp0aGlzLm9wdGlvbnMuaU1heFNwbGl0LHRoaXMuYlBsdWdpbkZ1bGw9ITEsdGhpcy5vVmlkZW9XaW5kb3c9bnVsbCx0aGlzLmZ1bGxzY3JlZW5FbGVtZW50PW51bGwsdGhpcy5pQ3VycmVudFduZEluZGV4PS0xLHRoaXMuZkRyYXdDYWxsYmFjaz1udWxsLHRoaXMuc3pQbHVnaW5WZXJzaW9uPXcudmVyc2lvbix0aGlzLmlzQnJvd3NlclZpc2libGU9ITAsdGhpcy5fZGVjb2RlclZlcnNpb249IjEiLCIvIiE9PXRoaXMub3B0aW9ucy5zekJhc2VQYXRoLmNoYXJBdCh0aGlzLm9wdGlvbnMuc3pCYXNlUGF0aC5sZW5ndGgtMSkmJih0aGlzLm9wdGlvbnMuc3pCYXNlUGF0aD10aGlzLm9wdGlvbnMuc3pCYXNlUGF0aCsiLyIpLHRoaXMub1N0b3JhZ2VNYW5hZ2VyPW5ldyBoLlN0b3JhZ2VNYW5hZ2VyKHRoaXMub3B0aW9ucy5zekJhc2VQYXRoKyJ0cmFuc2Zvcm0vIiksdGhpcy5vU3RyZWFtQ2xpZW50PW5ldyBvLlN0cmVhbUNsaWVudCh0aGlzLm9wdGlvbnMpLHRoaXMub0pTUGx1Z2luPSgwLHYuZGVmYXVsdCkoIiMiK3RoaXMub3B0aW9ucy5zeklkKSx0aGlzLmJjbG9zZUFudGlhbGlhcz0hMSx0aGlzLl9saXN0ZW5Ccm93c2VyVmlzaWJpbGl0eSgpLHRoaXMuX2NyZWF0ZVdpbmRvd3MoKSx0aGlzLmFXbmRMaXN0PVtdO2Zvcih2YXIgaSxyPTA7cjx0aGlzLmlNYXhXbmROdW07cisrKXRoaXMuYVduZExpc3Rbcl09e30sdGhpcy5hV25kTGlzdFtyXS5iUGxheT0hMSx0aGlzLmFXbmRMaXN0W3JdLmJMb2FkPSExLHRoaXMuYVduZExpc3Rbcl0uc3Rhc2hBcnJheT1bXSx0aGlzLmFXbmRMaXN0W3JdLnN0YXNoRmVlZGluZz0hMSx0aGlzLmFXbmRMaXN0W3JdLnN6UGxheVR5cGU9IiIsdGhpcy5hV25kTGlzdFtyXS5zelN0b3JhZ2VVVUlEPSIiLHRoaXMuYVduZExpc3Rbcl0uc3pTdHJlYW1VVUlEPSIiLHRoaXMuYVduZExpc3Rbcl0uYUhlYWQ9W10sdGhpcy5hV25kTGlzdFtyXS5pc0dCPSExLHRoaXMuYVduZExpc3Rbcl0uaXNIVkFHSGVhZD0hMSx0aGlzLmFXbmRMaXN0W3JdLmFIVkFHSGVhZD1bXSx0aGlzLmFXbmRMaXN0W3JdLmlSYXRlPTEsdGhpcy5hV25kTGlzdFtyXS5iRVpvb209ITEsdGhpcy5hV25kTGlzdFtyXS5iM0Rab29tPSExLHRoaXMuYVduZExpc3Rbcl0uc3pTZWNyZXRLZXk9IiIsdGhpcy5hV25kTGlzdFtyXS5iRnJhbWVGb3J3YXJkPSExLHRoaXMuYVduZExpc3Rbcl0uYVNhbXBsZXM9W10sdGhpcy5hV25kTGlzdFtyXS5pUmV2QnVmZmVyVGltZXM9MCx0aGlzLmFXbmRMaXN0W3JdLm5hbFBhY2thZ2U9WzAsMCwwLDEsOTddLHRoaXMuYVduZExpc3Rbcl0uaU1vZGU9MCx0aGlzLmFXbmRMaXN0W3JdLmlDdXJlbnRPU0RUaW1lPS0xLHRoaXMuYVduZExpc3Rbcl0ub1NkcEluZm89e30sdGhpcy5hV25kTGlzdFtyXS5pTGFzdER1YXJhdGlvbj0tMSx0aGlzLmFXbmRMaXN0W3JdLmlDdXJEdWFyYXRpb249LTEsdGhpcy5hV25kTGlzdFtyXS5pVGltZUludGVydmFsPS0xLHRoaXMuYVduZExpc3Rbcl0uaXNQYXVzZT0hMSx0aGlzLmFXbmRMaXN0W3JdLk1TRVZvbHVtZT0uNSx0aGlzLmFXbmRMaXN0W3JdLmlCdWZmZXJWYWx1ZT0wLHRoaXMuYVduZExpc3Rbcl0uX3ZpZGVvSW5mbz17VmlkZVR5cGU6IkgyNjQiLGF1ZGlvVHlwZToid2l0aG91dCIsd2lkdGg6MCxoZWlnaHQ6MCxmcmFtZVJhdGU6MjUsYml0UmF0ZTowLHN5c3RlbUZvcm10OiJwcyIsYXVkaW9TYW1wbGVSYXRlOjB9LHRoaXMuYVduZExpc3Rbcl0uYXN5bmNMb2NrPSExLHRoaXMuYVduZExpc3Rbcl0uQWRkaXRpb25EYXRhQ0I9bnVsbCx0aGlzLmFXbmRMaXN0W3JdLmJGaXJzdEZyYW1lPSExLHRoaXMuYVduZExpc3Rbcl0uaURlY29kZVR5cGU9MCx0aGlzLmFXbmRMaXN0W3JdLl9icHNDYWxjdWxhdG9yPW51bGwsdGhpcy5hV25kTGlzdFtyXS5fYnBzSW5mbz17bGFzdFZpZGVvQnl0ZXM6MCxicHNfdmlkZW86MCxkYXRhX3VwZGF0ZWRfdGltZTowLHRpbWVfZ2FwX2ZhY3RvcjoxfSx0aGlzLmFXbmRMaXN0W3JdLl9lbWl0ZXI9bmV3IE0uZGVmYXVsdCx0aGlzLmFXbmRMaXN0W3JdLmJPcGVuU291bmQ9ITEsdGhpcy5hV25kTGlzdFtyXS5zekZsdmhlYWQ9IiIsdGhpcy5hV25kTGlzdFtyXS5fcmVzZXRGbHZwbGF5ZXI9ITEsdGhpcy5hV25kTGlzdFtyXS5fb3NkdGltZUluZm89e2ZsdnN0YXJ0VGltZTowLGdsb2JhbFRpbWU6MCxmbHZkdXJhdGlvbjowfSx0aGlzLmFXbmRMaXN0W3JdLnN6QnVmZmVyU2l6ZT0wLHRoaXMuYVduZExpc3Rbcl0uaUdsb2JhbEJhc2VUaW1lPTAsdGhpcy5hV25kTGlzdFtyXS5tc2VEZWNvZGVyQXVkaW89ITAsdGhpcy5hV25kTGlzdFtyXS5zelRyYWNlSWQ9IiIsdGhpcy5hV25kTGlzdFtyXS5ib3BlblRyYWNlSWQ9ITEsdGhpcy5hV25kTGlzdFtyXS5pSW50ZXJydXB0VGltZT01ZTMsdGhpcy5hV25kTGlzdFtyXS5pSW50ZXJydXB0VGltZUNudD0xLHRoaXMuYVduZExpc3Rbcl0uc3RyZWFtRW5kaW50ZXI9bnVsbCx0aGlzLmFXbmRMaXN0W3JdLmJTZWVrT2s9ITAsdGhpcy5hV25kTGlzdFtyXS5iUmVvcGVuPSExO3RoaXMub1RhbGtQbGF5Q3RybD1udWxsLHRoaXMuYlRhbGtMb2FkZWQ9ITEsdGhpcy5zekF1ZGlvU3RvcmFnZVVVSUQ9IiIsdGhpcy5zekVuY29kZUF1ZGlvU3RvcmFnZVVVSUQ9IiIsdGhpcy5zekF1ZGlvcmVjdlN0b3JhZ2VVVUlEPSIiLHRoaXMuX2F1ZGlvbm9kZUNsb3NlPSExLHRoaXMuX3NhdmVBdWRpb1R5cGU9Mix0aGlzLl9zYXZlQXVkaW9GbGFncz0hMSx0aGlzLl9idWZmZXJTaXplPTY1NTM2MCx0aGlzLl9zdGFzaEJ1ZmZlcj1udWxsLHRoaXMuX3N0YXNoVXNlZD0wLHRoaXMuX2Jyb3dzZXJJbmZvPW5ldyBTLmRlZmF1bHQsdGhpcy5fc3VwcG9ydEluZm89dGhpcy5fc3VwcG9ydCgpLHRoaXMuX2xvZy5JKCJINXBsYXllciIrdy52ZXJzaW9uKyIgU3VwcG9ydDogIix0aGlzLl9zdXBwb3J0SW5mbyx0aGlzLl9icm93c2VySW5mbyksdGhpcy5fZGVjb2RlclZlcnNpb249dGhpcy5fc3VwcG9ydEluZm9bImRlY29kZXIyLjAiXT8iMiI6IjEiLCIyIiE9PXRoaXMuX2RlY29kZXJWZXJzaW9ufHxFfHxUfHwoaT0iY2hyb21lIj09PXRoaXMuX2Jyb3dzZXJJbmZvLnN1cHBvcnRlciYmOTA8cGFyc2VJbnQodGhpcy5fYnJvd3NlckluZm8uc3VwcG9ydGVyVmVyc2lvbi5zcGxpdCgiLiIpLnNoaWZ0KCkpPyIzIjoiMiIsYT10aGlzLm9wdGlvbnMuc3pCYXNlUGF0aCsicGxheWN0cmwiK2krIi9EZWNvZGVyLmpzIixUPSEwLHRoaXMuX2xvYWRTY3JpcHQoYSkudGhlbigoMCx5LmRlZmF1bHQpKHAuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIGUoKXtyZXR1cm4gcC5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIFQ9ITEsZS5uZXh0PTMsd2luZG93LkpTUGxheWVyTW9kdWxlKCk7Y2FzZSAzOkU9ZS5zZW50LHQuX2xvZy5JKCIgSlNEZWNvZGVyIitpKyIgbG9hZCBlbmQgIik7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSxlLHQpfSkpKSk7dmFyIGE9ImNocm9tZSI9PT10aGlzLl9icm93c2VySW5mby5zdXBwb3J0ZXImJjkwPHBhcnNlSW50KHRoaXMuX2Jyb3dzZXJJbmZvLnN1cHBvcnRlclZlcnNpb24uc3BsaXQoIi4iKS5zaGlmdCgpKT8iMXNpbWQiOiIxIjt0aGlzLmRlY29kZXIxUGF0aD10aGlzLm9wdGlvbnMuc3pCYXNlUGF0aCsicGxheWN0cmwiK2ErIi8iLHRoaXMub0RyYXdDYW52YXM9bmV3IGMuRVNDYW52YXModGhpcy5vcHRpb25zLnN6SWQrIl9jYW52YXNfZHJhdzAiKSx0aGlzLl9pbml0RXZlbnQoKSx0aGlzLm9FdmVudENhbGxiYWNrLndpbmRvd0V2ZW50U2VsZWN0KDApLHRoaXMuX2RlYWxXbmRTZWxlY3QoMCl9ZnVuY3Rpb24gQyhlLHQsbil7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyspZS5zZXRVaW50OCh0K2ksbi5jaGFyQ29kZUF0KGkpKX1pLnZlcnNpb249dy52ZXJzaW9uLHQuSlNQbHVnaW49aX0sZnVuY3Rpb24oZSx0LG4pe24oNDUpLG4oMzcpLG4oNTUpLG4oMjU1KSxuKDI1OSksbigyNjApLGUuZXhwb3J0cz1uKDMpLlByb21pc2V9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uKDQ2KSxvPW4oNDcpO2UuZXhwb3J0cz1mdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXt2YXIgbixpPVN0cmluZyhvKGUpKSxyPXModCksZT1pLmxlbmd0aDtyZXR1cm4gcjwwfHxlPD1yP2E/IiI6dm9pZCAwOih0PWkuY2hhckNvZGVBdChyKSk8NTUyOTZ8fDU2MzE5PHR8fHIrMT09PWV8fChuPWkuY2hhckNvZGVBdChyKzEpKTw1NjMyMHx8NTczNDM8bj9hP2kuY2hhckF0KHIpOnQ6YT9pLnNsaWNlKHIscisyKTpuLTU2MzIwKyh0LTU1Mjk2PDwxMCkrNjU1MzZ9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDM4KSxyPW4oMjkpLGE9bigzMykscz17fTtuKDE4KShzLG4oOCkoIml0ZXJhdG9yIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7ZS5wcm90b3R5cGU9aShzLHtuZXh0OnIoMSxuKX0pLGEoZSx0KyIgSXRlcmF0b3IiKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uKDkpLG89bigxNiksdT1uKDMxKTtlLmV4cG9ydHM9bigxMSk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIgbixpPXUodCkscj1pLmxlbmd0aCxhPTA7YTxyOylzLmYoZSxuPWlbYSsrXSx0W25dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgdT1uKDIxKSxkPW4oMzkpLGw9bigyNTIpO2UuZXhwb3J0cz1mdW5jdGlvbihvKXtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe3ZhciBpLHI9dShlKSxhPWQoci5sZW5ndGgpLHM9bChuLGEpO2lmKG8mJnQhPXQpe2Zvcig7czxhOylpZigoaT1yW3MrK10pIT1pKXJldHVybiEwfWVsc2UgZm9yKDtzPGE7cysrKWlmKChvfHxzIGluIHIpJiZyW3NdPT09dClyZXR1cm4gb3x8c3x8MDtyZXR1cm4hbyYmLTF9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNDYpLHI9TWF0aC5tYXgsYT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZT1pKGUpKTwwP3IoZSt0LDApOmEoZSx0KX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9bigyNTQpLHI9big4MSksYT1uKDMwKSxzPW4oMjEpO2UuZXhwb3J0cz1uKDQ4KShBcnJheSwiQXJyYXkiLGZ1bmN0aW9uKGUsdCl7dGhpcy5fdD1zKGUpLHRoaXMuX2k9MCx0aGlzLl9rPXR9LGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdCx0PXRoaXMuX2ssbj10aGlzLl9pKys7cmV0dXJuIWV8fG4+PWUubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxyKDEpKTpyKDAsImtleXMiPT10P246InZhbHVlcyI9PXQ/ZVtuXTpbbixlW25dXSl9LCJ2YWx1ZXMiKSxhLkFyZ3VtZW50cz1hLkFycmF5LGkoImtleXMiKSxpKCJ2YWx1ZXMiKSxpKCJlbnRyaWVzIil9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKCl7fXZhciByLGEscyxvLHU9bigyNyksYz1uKDUpLGQ9bigxNSksbD1uKDU2KSxoPW4oNCksXz1uKDEwKSxmPW4oMjgpLG09big1NykscD1uKDM0KSx5PW4oODUpLHY9big4Nikuc2V0LGc9bigyNTcpKCksTT1uKDU4KSxMPW4oODcpLFM9bigyNTgpLGs9big4OCksYj0iUHJvbWlzZSIsdz1jLlR5cGVFcnJvcixEPWMucHJvY2VzcyxUPUQmJkQudmVyc2lvbnMsRT1UJiZULnY4fHwiIixZPWNbYl0sUD0icHJvY2VzcyI9PWwoRCksQz1hPU0uZixsPSEhZnVuY3Rpb24oKXt0cnl7dmFyIGU9WS5yZXNvbHZlKDEpLHQ9KGUuY29uc3RydWN0b3I9e30pW24oOCkoInNwZWNpZXMiKV09ZnVuY3Rpb24oZSl7ZShpLGkpfTtyZXR1cm4oUHx8ImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJmUudGhlbihpKWluc3RhbmNlb2YgdCYmMCE9PUUuaW5kZXhPZigiNi42IikmJi0xPT09Uy5pbmRleE9mKCJDaHJvbWUvNjYiKX1jYXRjaChlKXt9fSgpLFI9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuISghXyhlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS50aGVuKSkmJnR9LEE9ZnVuY3Rpb24oaCxuKXt2YXIgaTtoLl9ufHwoaC5fbj0hMCxpPWguX2MsZyhmdW5jdGlvbigpe2Zvcih2YXIgcixkPWguX3YsbD0xPT1oLl9zLGU9MCx0PWZ1bmN0aW9uKGUpe3ZhciB0LG4saSxyLGE9bD9lLm9rOmUuZmFpbCxzPWUucmVzb2x2ZSxvPWUucmVqZWN0LHU9ZS5kb21haW47dHJ5e2E/KGx8fCgyPT1oLl9oJiYocj1oLHYuY2FsbChjLGZ1bmN0aW9uKCl7dmFyIGU7UD9ELmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLHIpOihlPWMub25yZWplY3Rpb25oYW5kbGVkKSYmZSh7cHJvbWlzZTpyLHJlYXNvbjpyLl92fSl9KSksaC5faD0xKSwhMD09PWE/dD1kOih1JiZ1LmVudGVyKCksdD1hKGQpLHUmJih1LmV4aXQoKSxpPSEwKSksdD09PWUucHJvbWlzZT9vKHcoIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KG49Uih0KSk/bi5jYWxsKHQscyxvKTpzKHQpKTpvKGQpfWNhdGNoKGUpe3UmJiFpJiZ1LmV4aXQoKSxvKGUpfX07aS5sZW5ndGg+ZTspdChpW2UrK10pO2guX2M9W10saC5fbj0hMSxuJiYhaC5faCYmKHI9aCx2LmNhbGwoYyxmdW5jdGlvbigpe3ZhciBlLHQsbj1yLl92LGk9eChyKTtpZihpJiYoZT1MKGZ1bmN0aW9uKCl7UD9ELmVtaXQoInVuaGFuZGxlZFJlamVjdGlvbiIsbixyKToodD1jLm9udW5oYW5kbGVkcmVqZWN0aW9uKT90KHtwcm9taXNlOnIscmVhc29uOm59KToodD1jLmNvbnNvbGUpJiZ0LmVycm9yJiZ0LmVycm9yKCJVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24iLG4pfSksci5faD1QfHx4KHIpPzI6MSksci5fYT12b2lkIDAsaSYmZS5lKXRocm93IGUudn0pKX0pKX0seD1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWUuX2gmJjA9PT0oZS5fYXx8ZS5fYykubGVuZ3RofSxPPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5fZHx8KHQuX2Q9ITAsKHQ9dC5fd3x8dCkuX3Y9ZSx0Ll9zPTIsdC5fYXx8KHQuX2E9dC5fYy5zbGljZSgpKSxBKHQsITApKX0sST1mdW5jdGlvbihlKXt2YXIgbixpPXRoaXM7aWYoIWkuX2Qpe2kuX2Q9ITAsaT1pLl93fHxpO3RyeXtpZihpPT09ZSl0aHJvdyB3KCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZiIpOyhuPVIoZSkpP2coZnVuY3Rpb24oKXt2YXIgdD17X3c6aSxfZDohMX07dHJ5e24uY2FsbChlLGQoSSx0LDEpLGQoTyx0LDEpKX1jYXRjaChlKXtPLmNhbGwodCxlKX19KTooaS5fdj1lLGkuX3M9MSxBKGksITEpKX1jYXRjaChlKXtPLmNhbGwoe193OmksX2Q6ITF9LGUpfX19O2x8fChZPWZ1bmN0aW9uKGUpe20odGhpcyxZLGIsIl9oIiksZihlKSxyLmNhbGwodGhpcyk7dHJ5e2UoZChJLHRoaXMsMSksZChPLHRoaXMsMSkpfWNhdGNoKGUpe08uY2FsbCh0aGlzLGUpfX0sKHI9ZnVuY3Rpb24oZSl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0pLnByb3RvdHlwZT1uKDU5KShZLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbihlLHQpe3ZhciBuPUMoeSh0aGlzLFkpKTtyZXR1cm4gbi5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxuLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsbi5kb21haW49UD9ELmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKG4pLHRoaXMuX2EmJnRoaXMuX2EucHVzaChuKSx0aGlzLl9zJiZBKHRoaXMsITEpLG4ucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSkscz1mdW5jdGlvbigpe3ZhciBlPW5ldyByO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1kKEksZSwxKSx0aGlzLnJlamVjdD1kKE8sZSwxKX0sTS5mPUM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1ZfHxlPT09bz9uZXcgczphKGUpfSksaChoLkcraC5XK2guRiohbCx7UHJvbWlzZTpZfSksbigzMykoWSxiKSxuKDg5KShiKSxvPW4oMylbYl0saChoLlMraC5GKiFsLGIse3JlamVjdDpmdW5jdGlvbihlKXt2YXIgdD1DKHRoaXMpO3JldHVybigwLHQucmVqZWN0KShlKSx0LnByb21pc2V9fSksaChoLlMraC5GKih1fHwhbCksYix7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gayh1JiZ0aGlzPT09bz9ZOnRoaXMsZSl9fSksaChoLlMraC5GKiEobCYmbig5MCkoZnVuY3Rpb24oZSl7WS5hbGwoZSkuY2F0Y2goaSl9KSksYix7YWxsOmZ1bmN0aW9uKGUpe3ZhciBzPXRoaXMsdD1DKHMpLG89dC5yZXNvbHZlLHU9dC5yZWplY3Qsbj1MKGZ1bmN0aW9uKCl7dmFyIGk9W10scj0wLGE9MTtwKGUsITEsZnVuY3Rpb24oZSl7dmFyIHQ9cisrLG49ITE7aS5wdXNoKHZvaWQgMCksYSsrLHMucmVzb2x2ZShlKS50aGVuKGZ1bmN0aW9uKGUpe258fChuPSEwLGlbdF09ZSwtLWF8fG8oaSkpfSx1KX0pLC0tYXx8byhpKX0pO3JldHVybiBuLmUmJnUobi52KSx0LnByb21pc2V9LHJhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPUModCksaT1uLnJlamVjdCxyPUwoZnVuY3Rpb24oKXtwKGUsITEsZnVuY3Rpb24oZSl7dC5yZXNvbHZlKGUpLnRoZW4obi5yZXNvbHZlLGkpfSl9KTtyZXR1cm4gci5lJiZpKHIudiksbi5wcm9taXNlfX0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGk9dm9pZCAwPT09bjtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gaT9lKCk6ZS5jYWxsKG4pO2Nhc2UgMTpyZXR1cm4gaT9lKHRbMF0pOmUuY2FsbChuLHRbMF0pO2Nhc2UgMjpyZXR1cm4gaT9lKHRbMF0sdFsxXSk6ZS5jYWxsKG4sdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIGk/ZSh0WzBdLHRbMV0sdFsyXSk6ZS5jYWxsKG4sdFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gaT9lKHRbMF0sdFsxXSx0WzJdLHRbM10pOmUuY2FsbChuLHRbMF0sdFsxXSx0WzJdLHRbM10pfXJldHVybiBlLmFwcGx5KG4sdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIG89big1KSx1PW4oODYpLnNldCxkPW8uTXV0YXRpb25PYnNlcnZlcnx8by5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGw9by5wcm9jZXNzLGg9by5Qcm9taXNlLGM9InByb2Nlc3MiPT1uKDMyKShsKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGUsdDtmb3IoYyYmKGU9bC5kb21haW4pJiZlLmV4aXQoKTtuOyl7dD1uLmZuLG49bi5uZXh0O3RyeXt0KCl9Y2F0Y2goZSl7dGhyb3cgbj9yKCk6aT12b2lkIDAsZX19aT12b2lkIDAsZSYmZS5lbnRlcigpfXZhciBuLGksdCxyLGEscztyZXR1cm4gcj1jP2Z1bmN0aW9uKCl7bC5uZXh0VGljayhlKX06IWR8fG8ubmF2aWdhdG9yJiZvLm5hdmlnYXRvci5zdGFuZGFsb25lP2gmJmgucmVzb2x2ZT8odD1oLnJlc29sdmUodm9pZCAwKSxmdW5jdGlvbigpe3QudGhlbihlKX0pOmZ1bmN0aW9uKCl7dS5jYWxsKG8sZSl9OihhPSEwLHM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyBkKGUpLm9ic2VydmUocyx7Y2hhcmFjdGVyRGF0YTohMH0pLGZ1bmN0aW9uKCl7cy5kYXRhPWE9IWF9KSxmdW5jdGlvbihlKXtlPXtmbjplLG5leHQ6dm9pZCAwfTtpJiYoaS5uZXh0PWUpLG58fChuPWUscigpKSxpPWV9fX0sZnVuY3Rpb24oZSx0LG4pe249big1KS5uYXZpZ2F0b3I7ZS5leHBvcnRzPW4mJm4udXNlckFnZW50fHwiIn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDQpLHI9bigzKSxhPW4oNSkscz1uKDg1KSxvPW4oODgpO2koaS5QK2kuUiwiUHJvbWlzZSIse2ZpbmFsbHk6ZnVuY3Rpb24odCl7dmFyIG49cyh0aGlzLHIuUHJvbWlzZXx8YS5Qcm9taXNlKSxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0O3JldHVybiB0aGlzLnRoZW4oZT9mdW5jdGlvbihlKXtyZXR1cm4gbyhuLHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSl9OnQsZT9mdW5jdGlvbihlKXtyZXR1cm4gbyhuLHQoKSkudGhlbihmdW5jdGlvbigpe3Rocm93IGV9KX06dCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9big0KSxyPW4oNTgpLGE9big4Nyk7aShpLlMsIlByb21pc2UiLHt0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5mKHRoaXMpLGU9YShlKTtyZXR1cm4oZS5lP3QucmVqZWN0OnQucmVzb2x2ZSkoZS52KSx0LnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDI2MiksZS5leHBvcnRzPW4oMykuT2JqZWN0LmtleXN9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDIyKSxyPW4oMzEpO24oNjApKCJrZXlzIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gcihpKGUpKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkscj1pLnJlZ2VuZXJhdG9yUnVudGltZSYmMDw9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaSkuaW5kZXhPZigicmVnZW5lcmF0b3JSdW50aW1lIiksYT1yJiZpLnJlZ2VuZXJhdG9yUnVudGltZTtpZihpLnJlZ2VuZXJhdG9yUnVudGltZT12b2lkIDAsZS5leHBvcnRzPW4oMjY0KSxyKWkucmVnZW5lcmF0b3JSdW50aW1lPWE7ZWxzZSB0cnl7ZGVsZXRlIGkucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKGUpe2kucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19LGZ1bmN0aW9uKFQsZSl7IWZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdSxkLGwsaCxjLF8sdCxuPU9iamVjdC5wcm90b3R5cGUsZj1uLmhhc093blByb3BlcnR5LGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30scj1pLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsYT1pLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLHM9aS50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciLGk9Im9iamVjdCI9PXR5cGVvZiBULG89ZS5yZWdlbmVyYXRvclJ1bnRpbWU7ZnVuY3Rpb24gbShlLHQsbixpKXt2YXIgcixhLHMsbyx0PXQmJnQucHJvdG90eXBlIGluc3RhbmNlb2YgeT90OnksdD1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxpPW5ldyBiKGl8fFtdKTtyZXR1cm4gdC5faW52b2tlPShyPWUsYT1uLHM9aSxvPWQsZnVuY3Rpb24oZSx0KXtpZihvPT09aCl0aHJvdyBuZXcgRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmciKTtpZihvPT09Yyl7aWYoInRocm93Ij09PWUpdGhyb3cgdDtyZXR1cm4gRCgpfWZvcihzLm1ldGhvZD1lLHMuYXJnPXQ7Oyl7dmFyIG49cy5kZWxlZ2F0ZTtpZihuKXt2YXIgaT1mdW5jdGlvbiBlKHQsbil7dmFyIGk9dC5pdGVyYXRvcltuLm1ldGhvZF07aWYoaT09PXUpe2lmKG4uZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09bi5tZXRob2Qpe2lmKHQuaXRlcmF0b3IucmV0dXJuJiYobi5tZXRob2Q9InJldHVybiIsbi5hcmc9dSxlKHQsbiksInRocm93Ij09PW4ubWV0aG9kKSlyZXR1cm4gXztuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2QiKX1yZXR1cm4gX312YXIgaT1wKGksdC5pdGVyYXRvcixuLmFyZyk7aWYoInRocm93Ij09PWkudHlwZSlyZXR1cm4gbi5tZXRob2Q9InRocm93IixuLmFyZz1pLmFyZyxuLmRlbGVnYXRlPW51bGwsXztpPWkuYXJnO2lmKCFpKXJldHVybiBuLm1ldGhvZD0idGhyb3ciLG4uYXJnPW5ldyBUeXBlRXJyb3IoIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0Iiksbi5kZWxlZ2F0ZT1udWxsLF87e2lmKCFpLmRvbmUpcmV0dXJuIGk7blt0LnJlc3VsdE5hbWVdPWkudmFsdWUsbi5uZXh0PXQubmV4dExvYywicmV0dXJuIiE9PW4ubWV0aG9kJiYobi5tZXRob2Q9Im5leHQiLG4uYXJnPXUpfW4uZGVsZWdhdGU9bnVsbDtyZXR1cm4gX30obixzKTtpZihpKXtpZihpPT09Xyljb250aW51ZTtyZXR1cm4gaX19aWYoIm5leHQiPT09cy5tZXRob2Qpcy5zZW50PXMuX3NlbnQ9cy5hcmc7ZWxzZSBpZigidGhyb3ciPT09cy5tZXRob2Qpe2lmKG89PT1kKXRocm93IG89YyxzLmFyZztzLmRpc3BhdGNoRXhjZXB0aW9uKHMuYXJnKX1lbHNlInJldHVybiI9PT1zLm1ldGhvZCYmcy5hYnJ1cHQoInJldHVybiIscy5hcmcpO289aDtpPXAocixhLHMpO2lmKCJub3JtYWwiPT09aS50eXBlKXtpZihvPXMuZG9uZT9jOmwsaS5hcmchPT1fKXJldHVybnt2YWx1ZTppLmFyZyxkb25lOnMuZG9uZX19ZWxzZSJ0aHJvdyI9PT1pLnR5cGUmJihvPWMscy5tZXRob2Q9InRocm93IixzLmFyZz1pLmFyZyl9fSksdH1mdW5jdGlvbiBwKGUsdCxuKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LG4pfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZnVuY3Rpb24geSgpe31mdW5jdGlvbiB2KCl7fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gTShlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9fSl9ZnVuY3Rpb24gTChzKXt2YXIgdDt0aGlzLl9pbnZva2U9ZnVuY3Rpb24obixpKXtmdW5jdGlvbiBlKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsdCl7IWZ1bmN0aW9uIHQoZSxuLGkscil7ZT1wKHNbZV0scyxuKTtpZigidGhyb3ciIT09ZS50eXBlKXt2YXIgYT1lLmFyZztyZXR1cm4obj1hLnZhbHVlKSYmIm9iamVjdCI9PXR5cGVvZiBuJiZmLmNhbGwobiwiX19hd2FpdCIpP1Byb21pc2UucmVzb2x2ZShuLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24oZSl7dCgibmV4dCIsZSxpLHIpfSxmdW5jdGlvbihlKXt0KCJ0aHJvdyIsZSxpLHIpfSk6UHJvbWlzZS5yZXNvbHZlKG4pLnRoZW4oZnVuY3Rpb24oZSl7YS52YWx1ZT1lLGkoYSl9LHIpfXIoZS5hcmcpfShuLGksZSx0KX0pfXJldHVybiB0PXQ/dC50aGVuKGUsZSk6ZSgpfX1mdW5jdGlvbiBTKGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIGsoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIGIoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaChTLHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIHcodCl7aWYodCl7dmFyIGU9dFtyXTtpZihlKXJldHVybiBlLmNhbGwodCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgbj0tMSxlPWZ1bmN0aW9uIGUoKXtmb3IoOysrbjx0Lmxlbmd0aDspaWYoZi5jYWxsKHQsbikpcmV0dXJuIGUudmFsdWU9dFtuXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT11LGUuZG9uZT0hMCxlfTtyZXR1cm4gZS5uZXh0PWV9fXJldHVybntuZXh0OkR9fWZ1bmN0aW9uIEQoKXtyZXR1cm57dmFsdWU6dSxkb25lOiEwfX1vP2kmJihULmV4cG9ydHM9byk6KChvPWUucmVnZW5lcmF0b3JSdW50aW1lPWk/VC5leHBvcnRzOnt9KS53cmFwPW0sZD0ic3VzcGVuZGVkU3RhcnQiLGw9InN1c3BlbmRlZFlpZWxkIixoPSJleGVjdXRpbmciLGM9ImNvbXBsZXRlZCIsXz17fSwoZT17fSlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sKGk9KGk9T2JqZWN0LmdldFByb3RvdHlwZU9mKSYmaShpKHcoW10pKSkpJiZpIT09biYmZi5jYWxsKGkscikmJihlPWkpLHQ9Zy5wcm90b3R5cGU9eS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlKSwodi5wcm90b3R5cGU9dC5jb25zdHJ1Y3Rvcj1nKS5jb25zdHJ1Y3Rvcj12LGdbc109di5kaXNwbGF5TmFtZT0iR2VuZXJhdG9yRnVuY3Rpb24iLG8uaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXtlPSJmdW5jdGlvbiI9PXR5cGVvZiBlJiZlLmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT12fHwiR2VuZXJhdG9yRnVuY3Rpb24iPT09KGUuZGlzcGxheU5hbWV8fGUubmFtZSkpfSxvLm1hcms9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSxnKTooZS5fX3Byb3RvX189ZyxzIGluIGV8fChlW3NdPSJHZW5lcmF0b3JGdW5jdGlvbiIpKSxlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQpLGV9LG8uYXdyYXA9ZnVuY3Rpb24oZSl7cmV0dXJue19fYXdhaXQ6ZX19LE0oTC5wcm90b3R5cGUpLEwucHJvdG90eXBlW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG8uQXN5bmNJdGVyYXRvcj1MLG8uYXN5bmM9ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9bmV3IEwobShlLHQsbixpKSk7cmV0dXJuIG8uaXNHZW5lcmF0b3JGdW5jdGlvbih0KT9yOnIubmV4dCgpLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOnIubmV4dCgpfSl9LE0odCksdFtzXT0iR2VuZXJhdG9yIix0W3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0sby5rZXlzPWZ1bmN0aW9uKG4pe3ZhciBlLGk9W107Zm9yKGUgaW4gbilpLnB1c2goZSk7cmV0dXJuIGkucmV2ZXJzZSgpLGZ1bmN0aW9uIGUoKXtmb3IoO2kubGVuZ3RoOyl7dmFyIHQ9aS5wb3AoKTtpZih0IGluIG4pcmV0dXJuIGUudmFsdWU9dCxlLmRvbmU9ITEsZX1yZXR1cm4gZS5kb25lPSEwLGV9fSxvLnZhbHVlcz13LGIucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpiLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXUsdGhpcy5kb25lPSExLHRoaXMuZGVsZWdhdGU9bnVsbCx0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5hcmc9dSx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChrKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmZi5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXUpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24obil7aWYodGhpcy5kb25lKXRocm93IG47dmFyIGk9dGhpcztmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIGEudHlwZT0idGhyb3ciLGEuYXJnPW4saS5uZXh0PWUsdCYmKGkubWV0aG9kPSJuZXh0IixpLmFyZz11KSwhIXR9Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdLGE9ci5jb21wbGV0aW9uO2lmKCJyb290Ij09PXIudHJ5TG9jKXJldHVybiBlKCJlbmQiKTtpZihyLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgcz1mLmNhbGwociwiY2F0Y2hMb2MiKSxvPWYuY2FsbChyLCJmaW5hbGx5TG9jIik7aWYocyYmbyl7aWYodGhpcy5wcmV2PHIuY2F0Y2hMb2MpcmV0dXJuIGUoci5jYXRjaExvYywhMCk7aWYodGhpcy5wcmV2PHIuZmluYWxseUxvYylyZXR1cm4gZShyLmZpbmFsbHlMb2MpfWVsc2UgaWYocyl7aWYodGhpcy5wcmV2PHIuY2F0Y2hMb2MpcmV0dXJuIGUoci5jYXRjaExvYywhMCl9ZWxzZXtpZighbyl0aHJvdyBuZXcgRXJyb3IoInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5Iik7aWYodGhpcy5wcmV2PHIuZmluYWxseUxvYylyZXR1cm4gZShyLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xOzA8PW47LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl07aWYoaS50cnlMb2M8PXRoaXMucHJldiYmZi5jYWxsKGksImZpbmFsbHlMb2MiKSYmdGhpcy5wcmV2PGkuZmluYWxseUxvYyl7dmFyIHI9aTticmVha319dmFyIGE9KHI9ciYmKCJicmVhayI9PT1lfHwiY29udGludWUiPT09ZSkmJnIudHJ5TG9jPD10JiZ0PD1yLmZpbmFsbHlMb2M/bnVsbDpyKT9yLmNvbXBsZXRpb246e307cmV0dXJuIGEudHlwZT1lLGEuYXJnPXQscj8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1yLmZpbmFsbHlMb2MsXyk6dGhpcy5jb21wbGV0ZShhKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxffSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTswPD10Oy0tdCl7dmFyIG49dGhpcy50cnlFbnRyaWVzW3RdO2lmKG4uZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUobi5jb21wbGV0aW9uLG4uYWZ0ZXJMb2MpLGsobiksX319LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7MDw9dDstLXQpe3ZhciBuPXRoaXMudHJ5RW50cmllc1t0XTtpZihuLnRyeUxvYz09PWUpe3ZhciBpLHI9bi5jb21wbGV0aW9uO3JldHVybiJ0aHJvdyI9PT1yLnR5cGUmJihpPXIuYXJnLGsobikpLGl9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjp3KGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOm59LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dSksX319KX0oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDI2Nik7dmFyIGk9bigzKS5PYmplY3Q7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gaS5kZWZpbmVQcm9wZXJ0eShlLHQsbil9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big0KTtpKGkuUytpLkYqIW4oMTEpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0eTpuKDkpLmZ9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TdHJlYW1DbGllbnQ9dm9pZCAwO3ZhciBkPV8obigxNCkpLGk9XyhuKDEpKSxyPV8obigyKSkscz1fKG4oOTQpKSxhPW4oMjcwKSxvPW4oMjcxKSx1PW4oMjczKSxsPW4oMjg1KSxoPV8obigxMykpLGs9ZnVuY3Rpb24oZSl7e2lmKGUmJmUuX19lc01vZHVsZSlyZXR1cm4gZTt2YXIgdD17fTtpZihudWxsIT1lKWZvcih2YXIgbiBpbiBlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLG4pJiYodFtuXT1lW25dKTtyZXR1cm4gdC5kZWZhdWx0PWUsdH19KG4oNzApKSxjPV8obig5OSkpO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBmLGIsdyxELFQsRSxyPShmPW5ldyBhLkRpcmVjdERldmljZUN1c3RvbSxiPW5ldyBvLkRpcmVjdERldmljZSx3PW5ldyB1LkxpdmVNZWRpYSxEPW5ldyBsLkxvY2FsU2VydmljZSxUPTEyZTMsRT17fSwoMCxyLmRlZmF1bHQpKG0sW3trZXk6Im9wZW5TdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKGUsYyxfLG4pe3ZhciBmPXRoaXMsbT0hMSx0PWUuc3BsaXQoIjovLyIpLGk9dFswXSxyPSExOygtMTxlLmluZGV4T2YoIndzOi8vWyIpJiYid3MiPT09aXx8LTE8ZS5pbmRleE9mKCJ3c3M6Ly9bIikmJiJ3c3MiPT09aSkmJihyPSEwKTt2YXIgcD0iIix5PTc2ODEsdj0xLGc9MCxNPSExLGE9ITEsZz1yPyhwPXRbMV0uc3BsaXQoIl06IilbMF0rIl0iLHk9TWF0aC5mbG9vcih0WzFdLnNwbGl0KCJdOiIpWzFdLnNwbGl0KCIvIilbMF0pLHY9TWF0aC5mbG9vcih0WzFdLnNwbGl0KCJdOiIpWzFdLnNwbGl0KCIvIilbMV0vMTAwKSxNYXRoLmZsb29yKHRbMV0uc3BsaXQoIl06IilbMV0uc3BsaXQoIi8iKVsxXSUxMDApLTEpOihwPXRbMV0uc3BsaXQoIjoiKVswXSx5PU1hdGguZmxvb3IodFsxXS5zcGxpdCgiOiIpWzFdLnNwbGl0KCIvIilbMF0pLHY9TWF0aC5mbG9vcih0WzFdLnNwbGl0KCI6IilbMV0uc3BsaXQoIi8iKVsxXS8xMDApLE1hdGguZmxvb3IodFsxXS5zcGxpdCgiOiIpWzFdLnNwbGl0KCIvIilbMV0lMTAwKS0xKTswPT09diYmKGc9MCk7cj0iJnNlc3Npb25JRD0iOyhjPWN8fHt9KS50b2tlbiYmIWMucGxheVVSTCYmKHI9IiZ0b2tlbj0iKTt2YXIgdD1jLnNlc3Npb25JRHx8Yy5zZXNzaW9ufHwoYy5wbGF5VVJMPyIiOmMudG9rZW4pfHwiIixMPW5ldyB3aW5kb3cuV2ViU29ja2V0KGkrIjovLyIrcCsiOiIreSsoYy5tb2RlPyIvIitjLm1vZGU6IiIpKyI/dmVyc2lvbj0iK3RoaXMuc3pQcm90b2NvbFZlcnNpb24rIiZjaXBoZXJTdWl0ZXM9Iit0aGlzLmlDaXBoZXJzdWl0ZXMrcit0KyhjLnByb3h5PyImcHJveHk9IitjLnByb3h5OiIiKSk7TC5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciI7dmFyIFM9cy5kZWZhdWx0LnY0KCk7cmV0dXJuIF8oe2NtZDoiU3RyZWFtVVVJRCIsdmFsdWU6U30pLHRoaXMuYVdlYnNvY2tldC5wdXNoKHcuY3JlYXRlQ2xpZW50T2JqZWN0KEwsUywiIiwiIixjKSksbmV3IGQuZGVmYXVsdChmdW5jdGlvbihsLGgpe0wub25vcGVuPWZ1bmN0aW9uKCl7Zi5fbG9nLkkoIndlYnNvY2tldCBvbm9wZW4iKSxFW1NdPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgZTtNfHxhfHwhTHx8KGNsZWFyVGltZW91dChFW1NdKSxmLl9sb2cuVygicmVjdiBzdHJlYW0gdGltZW91dCIpLEwub25vcGVuPW51bGwsTC5vbm1lc3NhZ2U9bnVsbCxMLmNsb3NlKDFlMywiQ0xPU0UiKSxMLmNsb3NlPW51bGwsZT1mLmFXZWJzb2NrZXQuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09U30pLGYuYVdlYnNvY2tldC5zcGxpY2UoZSwxKSxoKCkpfSxUKX0sTC5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlLmRhdGEpe3ZhciB0PWYuZ2V0SW5kZXgoUyksbj1KU09OLnBhcnNlKGUuZGF0YSk7aWYobiYmbi5oYXNPd25Qcm9wZXJ0eSgic3RhdHVzQ29kZSIpJiYoZi5hV2Vic29ja2V0W3RdLnN0YXR1c0NvZGU9bi5zdGF0dXNDb2RlLDA9PT1uLnN0YXR1c0NvZGU/LTE9PT10P2woKTpmLmFXZWJzb2NrZXRbdF0ucmVzb2x2ZSYmZi5hV2Vic29ja2V0W3RdLnJlc29sdmUoKTotMT09PXQ/aChuKTpmLmFXZWJzb2NrZXRbdF0ucmVqZWN0JiZmLmFXZWJzb2NrZXRbdF0ucmVqZWN0KG4pKSwhbSYmbi5jbWQmJiJlbmQiPT09bi5jbWQpcmV0dXJuIG09ITAsZi5fbG9nLkkoIuWbnuaUvue7k+adn++8jOWqkuS9k+a1geWFs+mXrSIpLHZvaWQgXyh7Y21kOiJlbmQifSk7aWYobiYmbi52ZXJzaW9uJiZuLmNpcGhlclN1aXRlKXtpZihmLl9sb2cuRCgid2Vic29ja2V0IG9ubWVzc2FnZTogUEtEIixuKSxmLnN6UHJvdG9jb2xWZXJzaW9uPW4udmVyc2lvbixmLmlDaXBoZXJzdWl0ZXM9cGFyc2VJbnQobi5jaXBoZXJTdWl0ZSwxMCksbiYmbi5QS0QmJm4ucmFuZCl7dD1mLmdldEluZGV4KFMpO2lmKHQ8MClyZXR1cm4gaCgpO2YuYVdlYnNvY2tldFt0XS5QS0Q9bi5QS0QsZi5hV2Vic29ja2V0W3RdLnJhbmQ9bi5yYW5kLGYuYVdlYnNvY2tldFt0XS5zdGF0dXNDb2RlPS0xfWVsc2V7dmFyIGk9ImxpdmU6Ly8iK3ArIjoiK3krIi8iK3YrIi8iK2c7LTE9PT1mLmlDaXBoZXJzdWl0ZXM/Zi5hV2Vic29ja2V0LnB1c2goRC5jcmVhdGVDbGllbnRPYmplY3QoTCxTLGksYykpOmYuYVdlYnNvY2tldC5wdXNoKGIuY3JlYXRlQ2xpZW50T2JqZWN0KEwsUyxpKSk7dmFyIHI9Zi5nZXRJbmRleChTKTtmLmFXZWJzb2NrZXRbcl0uc3RhdHVzQ29kZT0tMX1sKFMpfWVsc2UgbiYmbi5zZHAmJihmLl9sb2cuSSgid2Vic29ja2V0IG9ubWVzc2FnZTogc2RwIixuKSxpPWIuZ2V0TWVkaWFGcm9tU2RwKG4uc2RwKSxyPWIuZ2V0U2RwUGFyYW1zKG4uc2RwKSxhPWIuZ2V0U0RQSW5mbyhuLnNkcCksXyh7YkhlYWQ6ITAsb1BhcmFtczpyLGJ1ZjppLGlDbG9ja0ZyZXF1ZW5jeTphLmlDbG9ja0ZyZXF1ZW5jeSxpQ3VycmVudFRpbWU6YS5pQ3VycmVudFRpbWV9KSwtMSE9PShhPWYuYVdlYnNvY2tldC5maW5kSW5kZXgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQ9PT1TfSkpJiZmLmFXZWJzb2NrZXRbYV0ucmVzb2x2ZSYmZi5hV2Vic29ja2V0W2FdLnJlc29sdmUoKSl9ZWxzZXt2YXIgYT17fSxzPWUuZGF0YTtpZig2ND09PXMuYnl0ZUxlbmd0aHx8NDA9PT1zLmJ5dGVMZW5ndGgpe2Zvcih2YXIgbz0tMSx1PXMuYnl0ZUxlbmd0aCxkPTA7ZDx1O2QrKylpZig3Mz09PXNbZF0mJjc3PT09c1tkKzFdJiY3NT09PXNbZCsyXSYmNzI9PT1zW2QrM10pe289ZDticmVha31hPS0xIT09bz97YkhlYWQ6ITAsYnVmOnMuc2xpY2UobyxvKzQwKX06e2JIZWFkOiExLGJ1ZjpzfX1lbHNlIGE9e2JIZWFkOiExLGJ1ZjpzfTtfKGEpLE09IShlPWE9cz1udWxsKX19LEwub25jbG9zZT1mdW5jdGlvbihlKXt2YXIgdDsoMWUzPT09ZS5jb2RlfHwxMDA1PT09ZS5jb2RlKSYmLTEhPT0odD1mLmFXZWJzb2NrZXQuZmluZEluZGV4KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09U30pKT8oZi5fbG9nLkkoIlN0cmVhbSBjbG9zZWQiLGUpLDAhPT1mLmFXZWJzb2NrZXRbdF0uc3RhdHVzQ29kZT9mLmFXZWJzb2NrZXRbdF0ucmVqZWN0JiZmLmFXZWJzb2NrZXRbdF0ucmVqZWN0KGsuRVJSX1NUUkVBTV9DTURfRkFJTEVEKToobiYmbihlKSxmLmFXZWJzb2NrZXRbdF0ucmVzb2x2ZSYmZi5hV2Vic29ja2V0W3RdLnJlc29sdmUoKSkpOm4mJm4oZSksYT0hMH19KX19LHtrZXk6InN0YXJ0UGxheSIsdmFsdWU6ZnVuY3Rpb24oZSxpLHIsYSl7dmFyIHM9dGhpcyxvPXRoaXMuZ2V0SW5kZXgoZSk7cmV0dXJuIGkmJnImJiIwLjEiPT09dGhpcy5zelByb3RvY29sVmVyc2lvbiYmKGk9aS5yZXBsYWNlKCItIiwiIikucmVwbGFjZSgiOiIsIiIpLHI9ci5yZXBsYWNlKCItIiwiIikucmVwbGFjZSgiOiIsIiIpKSxuZXcgZC5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7aWYoLTE8byl7cy5hV2Vic29ja2V0W29dLnJlc29sdmU9ZSxzLmFXZWJzb2NrZXRbb10ucmVqZWN0PXQ7dmFyIG49bnVsbDtpJiZyPyIwLjEiIT09cy5zelByb3RvY29sVmVyc2lvbj8wPT09cy5pQ2lwaGVyc3VpdGVzP249dy5wbGF5YmFja0NtZChzLmFXZWJzb2NrZXRbb10saSxyLGEpOjE9PT1zLmlDaXBoZXJzdWl0ZXM/bj1iLnBsYXliYWNrQ21kKGkscixzLmFXZWJzb2NrZXRbb10ucGxheVVSTCk6LTE9PT1zLmlDaXBoZXJzdWl0ZXMmJihuPUQucGxheWJhY2tDbWQocy5hV2Vic29ja2V0W29dLGkscikpOm49Zi5wbGF5YmFja0NtZChpLHIscy5hV2Vic29ja2V0W29dLmlDdXJDaGFubmVsLHMuYVdlYnNvY2tldFtvXS5pQ3VyU3RyZWFtKTowPT09cy5hV2Vic29ja2V0W29dLmlDdXJDaGFubmVsJiYiMC4xIj09PXMuc3pQcm90b2NvbFZlcnNpb24/bj1mLnplcm9QbGF5Q21kKHMuYVdlYnNvY2tldFtvXS5pQ3VyQ2hhbm5lbCxzLmFXZWJzb2NrZXRbb10uaUN1clN0cmVhbSk6IjAuMSIhPT1zLnN6UHJvdG9jb2xWZXJzaW9uPzA9PT1zLmlDaXBoZXJzdWl0ZXM/bj13LnBsYXlDbWQocy5hV2Vic29ja2V0W29dLGEpOjE9PT1zLmlDaXBoZXJzdWl0ZXM/bj1iLnBsYXlDbWQocy5hV2Vic29ja2V0W29dLnBsYXlVUkwpOi0xPT09cy5pQ2lwaGVyc3VpdGVzJiYobj1ELnBsYXlDbWQocy5hV2Vic29ja2V0W29dKSk6bj1mLnBsYXlDbWQocy5hV2Vic29ja2V0W29dLmlDdXJDaGFubmVsLHMuYVdlYnNvY2tldFtvXS5pQ3VyU3RyZWFtKTt0cnl7cy5hV2Vic29ja2V0W29dLnNvY2tldC5zZW5kKG4pfWNhdGNoKGUpe3MuX2xvZy5FKGsuRVJSX1NUUkVBTV9DTURfRkFJTEVEKSx0KGUpfSIwLjEiPT09cy5zelByb3RvY29sVmVyc2lvbiYmZSgpfWVsc2UiMC4xIj09PXMuc3pQcm90b2NvbFZlcnNpb24mJnQoKX0pfX0se2tleToic2luZ2xlRnJhbWUiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToic2V0UGxheVJhdGUiLHZhbHVlOmZ1bmN0aW9uKGEscyl7dmFyIG89dGhpcztyZXR1cm4gbmV3IGQuZGVmYXVsdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9by5hV2Vic29ja2V0Lmxlbmd0aDtuPGk7bisrKWlmKG8uYVdlYnNvY2tldFtuXS5pZD09PWEpe2lmKCIwLjEiPT09by5zelByb3RvY29sVmVyc2lvbil7dmFyIHI9Zi5wbGF5UmF0ZUNtZChzKTtvLmFXZWJzb2NrZXRbbl0uc29ja2V0LnNlbmQociksZSgpO2JyZWFrfW8uYVdlYnNvY2tldFtuXS5yZXNvbHZlPWUsby5hV2Vic29ja2V0W25dLnJlamVjdD10O3I9Yi5wbGF5UmF0ZUNtZChzKTtvLmFXZWJzb2NrZXRbbl0uc29ja2V0LnNlbmQocil9fSl9fSx7a2V5OiJzZWVrIix2YWx1ZTpmdW5jdGlvbihhLHMsbyl7dmFyIHU9dGhpcztyZXR1cm4gbmV3IGQuZGVmYXVsdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixpPTAscj11LmFXZWJzb2NrZXQubGVuZ3RoO2k8cjtpKyspdS5hV2Vic29ja2V0W2ldLmlkPT09YSYmKHUuYVdlYnNvY2tldFtpXS5yZXNvbHZlPWUsdS5hV2Vic29ja2V0W2ldLnJlamVjdD10LG49dy5zZWVrQ21kKHMsbyksdS5hV2Vic29ja2V0W2ldLnNvY2tldC5zZW5kKG4pKX0pfX0se2tleToicGF1c2UiLHZhbHVlOmZ1bmN0aW9uKGEpe3ZhciBzPXRoaXM7cmV0dXJuIG5ldyBkLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxpPXMuYVdlYnNvY2tldC5sZW5ndGg7bjxpO24rKylpZihzLmFXZWJzb2NrZXRbbl0uaWQ9PT1hKXtpZigiMC4xIj09PXMuc3pQcm90b2NvbFZlcnNpb24pe3ZhciByPWYucGF1c2VDbWQoKTtzLmFXZWJzb2NrZXRbbl0uc29ja2V0LnNlbmQociksZSgpO2JyZWFrfXMuYVdlYnNvY2tldFtuXS5yZXNvbHZlPWUscy5hV2Vic29ja2V0W25dLnJlamVjdD10O3I9Yi5wYXVzZUNtZCgpO3MuYVdlYnNvY2tldFtuXS5zb2NrZXQuc2VuZChyKX19KX19LHtrZXk6InRyYW5zbWlzc2lvbiIsdmFsdWU6ZnVuY3Rpb24ocixhKXt2YXIgcz10aGlzO3JldHVybiBuZXcgZC5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTAsaT1zLmFXZWJzb2NrZXQubGVuZ3RoO248aTtuKyspcy5hV2Vic29ja2V0W25dLmlkPT09ciYmKHMuYVdlYnNvY2tldFtuXS5yZXNvbHZlPWUscy5hV2Vic29ja2V0W25dLnJlamVjdD10LHMuYVdlYnNvY2tldFtuXS5zb2NrZXQuc2VuZChhKSl9KX19LHtrZXk6InJlc3VtZSIsdmFsdWU6ZnVuY3Rpb24oYSl7dmFyIHM9dGhpcztyZXR1cm4gbmV3IGQuZGVmYXVsdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9cy5hV2Vic29ja2V0Lmxlbmd0aDtuPGk7bisrKWlmKHMuYVdlYnNvY2tldFtuXS5pZD09PWEpe2lmKCIwLjEiPT09cy5zelByb3RvY29sVmVyc2lvbil7dmFyIHI9Zi5yZXN1bWVDbWQoKTtzLmFXZWJzb2NrZXRbbl0uc29ja2V0LnNlbmQociksZSgpO2JyZWFrfXMuYVdlYnNvY2tldFtuXS5yZXNvbHZlPWUscy5hV2Vic29ja2V0W25dLnJlamVjdD10O3I9Yi5yZXN1bWVDbWQoKTtzLmFXZWJzb2NrZXRbbl0uc29ja2V0LnNlbmQocil9fSl9fSx7a2V5OiJzdG9wIix2YWx1ZTpmdW5jdGlvbihyKXt2YXIgYT10aGlzO3JldHVybiBuZXcgZC5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7dmFyIG49YS5hV2Vic29ja2V0LmZpbmRJbmRleChmdW5jdGlvbihlKXtyZXR1cm4gZS5pZD09PXJ9KSxpPWEuYVdlYnNvY2tldC5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlkPT09cn0pO2lmKGNsZWFyVGltZW91dChFW3JdKSwhaSlyZXR1cm4gYS5fbG9nLlcoay5FUlJfU1RSRUFNX1dTX1VORklORCsiOiBjYW4ndCBmaW5kIHJlbGF0ZWQgd2Vic29ja2V0LCBjaGVjayB0aGUgaW5kZXguIiksZSgpO2lmKDA9PT1pLnNvY2tldC5yZWFkeVN0YXRlKXJldHVybiBpLnNvY2tldCYmaS5zb2NrZXQuY2xvc2UoMWUzLCJDTE9TRSIpLGkuc3RvcGluZz0hMCxpLnNvY2tldC5vbm9wZW49bnVsbCxpLnNvY2tldC5vbm1lc3NhZ2U9bnVsbCxpLnNvY2tldC5vbmNsb3NlPW51bGwsaS5zb2NrZXQ9bnVsbCxhLmFXZWJzb2NrZXQuc3BsaWNlKG4sMSksYS5fbG9nLkUoay5FUlJfU1RSRUFNX1dTX1VOQ09OTkVDVCsiOiB3ZWJzb2NrZXQgaXMgbm90IGNvbm5lY3QsIGNoZWNrIHRoZSBpbmRleC4iKSx0KGsuRVJSX1NUUkVBTV9XU19VTkNPTk5FQ1QpO3RyeXtpLnJlc29sdmU9ZSxpLnNvY2tldCYmaS5zb2NrZXQuY2xvc2UoMWUzLCJDTE9TRSIpLGkuc3RvcGluZz0hMCxpLnNvY2tldC5vbm9wZW49bnVsbCxpLnNvY2tldC5vbm1lc3NhZ2U9bnVsbCxpLnNvY2tldC5vbmNsb3NlPW51bGwsaS5zb2NrZXQ9bnVsbCxhLmFXZWJzb2NrZXQuc3BsaWNlKG4sMSksZSgpfWNhdGNoKGUpe2EuX2xvZy5FKGsuRVJSX1NUUkVBTV9DTURfRkFJTEVEKyI6IHNlbmQgc2lnbmFsQ21kIHRvIHdlYnNvY2tldCBmYWlsZWQuIiksdChrLkVSUl9TVFJFQU1fQ01EX0ZBSUxFRCl9fSl9fSx7a2V5OiJzdG9wQWxsIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7MDx0aGlzLmFXZWJzb2NrZXQubGVuZ3RoOyl7dmFyIGU9dGhpcy5hV2Vic29ja2V0LnNoaWZ0KCk7Y2xlYXJUaW1lb3V0KEVbZS5pZF0pLGUuc29ja2V0JiZlLnNvY2tldC5jbG9zZSgxZTMsIkNMT1NFIiksZS5zdG9waW5nPSEwLGUuc29ja2V0Lm9ub3Blbj1udWxsLGUuc29ja2V0Lm9ubWVzc2FnZT1udWxsLGUuc29ja2V0Lm9uY2xvc2U9bnVsbCxlLnNvY2tldD1udWxsfX19LHtrZXk6InNldFRpbWVPdXQiLHZhbHVlOmZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZC5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7VD0xZTMqbixlKCl9KX19LHtrZXk6ImNsb3NlVGltZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dChFW2VdKX19XSksbSk7ZnVuY3Rpb24gbShlKXt2YXIgcj10aGlzOygwLGkuZGVmYXVsdCkodGhpcyxtKSx0aGlzLlRBRz0iU3RyZWFtQ2xpZW50Iix0aGlzLl9jb25maWc9ZSx0aGlzLl9sb2c9bmV3IGMuZGVmYXVsdCh0aGlzKSx0aGlzLl9lbWl0ZXI9bmV3IGguZGVmYXVsdCx0aGlzLnN6UHJvdG9jb2xWZXJzaW9uPSIwLjEiLHRoaXMuaUNpcGhlcnN1aXRlcz0wLHRoaXMuYVdlYnNvY2tldD1bXSx0aGlzLmdldEluZGV4PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0tMSxuPTAsaT1yLmFXZWJzb2NrZXQubGVuZ3RoO248aTtuKyspaWYoci5hV2Vic29ja2V0W25dLmlkPT09ZSl7dD1uO2JyZWFrfXJldHVybiB0fSx0aGlzLmF1dG9DbG9zZVRpbWU9MWU0LHRoaXMuaGVhcnRiZWF0VGltZT0yZTN9dC5TdHJlYW1DbGllbnQ9cn0sZnVuY3Rpb24oZSx0LG4pe3ZhciBsLGgsYz1uKDk1KSxfPW4oOTYpLGY9MCxtPTA7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10JiZufHwwLHI9dHx8W10sYT0oZT1lfHx7fSkubm9kZXx8bCxzPXZvaWQgMCE9PWUuY2xvY2tzZXE/ZS5jbG9ja3NlcTpoO251bGwhPWEmJm51bGwhPXN8fCh1PWMoKSxudWxsPT1hJiYoYT1sPVsxfHVbMF0sdVsxXSx1WzJdLHVbM10sdVs0XSx1WzVdXSksbnVsbD09cyYmKHM9aD0xNjM4MyYodVs2XTw8OHx1WzddKSkpO3ZhciBvPXZvaWQgMCE9PWUubXNlY3M/ZS5tc2VjczoobmV3IERhdGUpLmdldFRpbWUoKSxuPXZvaWQgMCE9PWUubnNlY3M/ZS5uc2VjczptKzEsdT1vLWYrKG4tbSkvMWU0O2lmKHU8MCYmdm9pZCAwPT09ZS5jbG9ja3NlcSYmKHM9cysxJjE2MzgzKSwxZTQ8PShuPSh1PDB8fGY8bykmJnZvaWQgMD09PWUubnNlY3M/MDpuKSl0aHJvdyBuZXcgRXJyb3IoInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjIik7Zj1vLGg9cyxuPSgxZTQqKDI2ODQzNTQ1NSYobys9MTIyMTkyOTI4ZTUpKSsobT1uKSklNDI5NDk2NzI5NixyW2krK109bj4+PjI0JjI1NSxyW2krK109bj4+PjE2JjI1NSxyW2krK109bj4+PjgmMjU1LHJbaSsrXT0yNTUmbixvPW8vNDI5NDk2NzI5NioxZTQmMjY4NDM1NDU1LHJbaSsrXT1vPj4+OCYyNTUscltpKytdPTI1NSZvLHJbaSsrXT1vPj4+MjQmMTV8MTYscltpKytdPW8+Pj4xNiYyNTUscltpKytdPXM+Pj44fDEyOCxyW2krK109MjU1JnM7Zm9yKHZhciBkPTA7ZDw2OysrZClyW2krZF09YVtkXTtyZXR1cm4gdHx8XyhyKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcz1uKDk1KSxvPW4oOTYpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGk9dCYmbnx8MDsic3RyaW5nIj09dHlwZW9mIGUmJih0PSJiaW5hcnkiPT09ZT9uZXcgQXJyYXkoMTYpOm51bGwsZT1udWxsKTt2YXIgcj0oZT1lfHx7fSkucmFuZG9tfHwoZS5ybmd8fHMpKCk7aWYocls2XT0xNSZyWzZdfDY0LHJbOF09NjMmcls4XXwxMjgsdClmb3IodmFyIGE9MDthPDE2OysrYSl0W2krYV09clthXTtyZXR1cm4gdHx8byhyKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGlyZWN0RGV2aWNlQ3VzdG9tPXZvaWQgMDt2YXIgaT1yKG4oMSkpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIobigyKSkuZGVmYXVsdCkoYSxbe2tleToiY3JlYXRlQ2xpZW50T2JqZWN0Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm57c29ja2V0OmUsaWQ6dCxpQ3VyQ2hhbm5lbDpuLGlDdXJTdHJlYW06aSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwsc3RvcGluZzohMX19fSx7a2V5OiJ6ZXJvUGxheUNtZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDQ0LDAsMCwwLDAsMCwwLDAsMCwwLDE5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLGUrMSwwLDAsMCx0LDAsMCw0LDBdKX19LHtrZXk6InBsYXlDbWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDAsMCw0NCwwLDAsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLGUsMCwwLDAsdCwwLDAsNCwwXSl9fSx7a2V5OiJwbGF5YmFja0NtZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIHI9ZS5zcGxpdCgiVCIpWzBdLGE9ZS5zcGxpdCgiVCIpWzFdLHM9IjAiK3BhcnNlSW50KHIuc3Vic3RyaW5nKDAsNCksMTApLnRvU3RyaW5nKDE2KSxvPXBhcnNlSW50KHIuc3Vic3RyaW5nKDQsNiksMTApLHU9cGFyc2VJbnQoci5zdWJzdHJpbmcoNiksMTApLGQ9cGFyc2VJbnQoYS5zdWJzdHJpbmcoMCwyKSwxMCksbD1wYXJzZUludChhLnN1YnN0cmluZygyLDQpLDEwKSxoPXBhcnNlSW50KGEuc3Vic3RyaW5nKDQsNiksMTApLGM9dC5zcGxpdCgiVCIpWzBdLGU9dC5zcGxpdCgiVCIpWzFdLHI9IjAiK3BhcnNlSW50KGMuc3Vic3RyaW5nKDAsNCksMTApLnRvU3RyaW5nKDE2KSxhPXBhcnNlSW50KGMuc3Vic3RyaW5nKDQsNiksMTApLHQ9cGFyc2VJbnQoZS5zdWJzdHJpbmcoMCwyKSwxMCksYz1wYXJzZUludChlLnN1YnN0cmluZygyLDQpLDEwKSxlPXBhcnNlSW50KGUuc3Vic3RyaW5nKDQsNiksMTApLGk9WzAsMCwwLDk2LDAsMCwwLDAsMCwwLDAsMCwwLDMsMSwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsbiwwLDAscGFyc2VJbnQocy5zdWJzdHJpbmcoMCwyKSwxNikscGFyc2VJbnQocy5zdWJzdHJpbmcoMiw0KSwxNiksMCwwLDAsbywwLDAsMCx1LDAsMCwwLGQsMCwwLDAsbCwwLDAsMCxoLDAsMCxwYXJzZUludChyLnN1YnN0cmluZygwLDIpLDE2KSxwYXJzZUludChyLnN1YnN0cmluZygyLDQpLDE2KSwwLDAsMCxhLDAsMCwwLHUsMCwwLDAsdCwwLDAsMCxjLDAsMCwwLGUsMCwwLDAsMCwwLDAsMCwwLGksMCwwLDBdO3JldHVybiBuZXcgVWludDhBcnJheShpKX19LHtrZXk6InBsYXlSYXRlQ21kIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9KHBhcnNlSW50KGUsMTApPj4+MCkudG9TdHJpbmcoMTYpLnRvTG9jYWxlVXBwZXJDYXNlKCkudG9TdHJpbmcoMTYpLG49dC5sZW5ndGg7bjw4O24rKyl0PSIwIit0O2Zvcih2YXIgaT1bMCwwLDAsMF0scj0wLGE9dC5sZW5ndGg7cjxhO3IrPTIpaVtNYXRoLmZsb29yKHIvMildPXBhcnNlSW50KHQuc3Vic3RyaW5nKHIscisyKSwxNik7ZT1bMCwwLDAsMzYsMCwwLDAsMCwwLDAsMCwwLDAsMywxLDQ3LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsaVswXSxpWzFdLGlbMl0saVszXV07cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpfX0se2tleToicGF1c2VDbWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDAsMCwzMiwwLDAsMCwwLDAsMCwwLDAsMCwzLDEsNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSl9fSx7a2V5OiJyZXN1bWVDbWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDAsMCwzMiwwLDAsMCwwLDAsMCwwLDAsMCwzLDEsOCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXSl9fV0pLG49YTtmdW5jdGlvbiBhKCl7KDAsaS5kZWZhdWx0KSh0aGlzLGEpfXQuRGlyZWN0RGV2aWNlQ3VzdG9tPW59LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGlyZWN0RGV2aWNlPXZvaWQgMDt2YXIgaT1hKG4oNjQpKSxyPWEobigxKSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAsYShuKDIpKS5kZWZhdWx0KShzLFt7a2V5OiJjcmVhdGVDbGllbnRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57c29ja2V0OmUsaWQ6dCxwbGF5VVJMOm4scmVzb2x2ZTpudWxsLHJlamVjdDpudWxsLHN0b3Bpbmc6ITF9fX0se2tleToiZ2V0TWVkaWFGcm9tU2RwIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5pbmRleE9mKCJNRURJQUlORk89IikrMTAsbj1lLnNsaWNlKHQsdCs4MCksaT1bXSxyPTAsYT1uLmxlbmd0aC8yO3I8YTtyKyspaVtyXT1wYXJzZUludChuLnNsaWNlKDIqciwyKnIrMiksMTYpO3JldHVybiBuZXcgVWludDhBcnJheShpKX19LHtrZXk6InNkcFBhcmFtc1JldmVyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTAsaT1lLmxlbmd0aC8yO248aTtuKyspdFtuXT1lLnNsaWNlKDIqbiwyKm4rMik7cmV0dXJuIHQ9cGFyc2VJbnQodC5yZXZlcnNlKCkuam9pbigiIiksMTYpfX0se2tleToiZ2V0U2RwUGFyYW1zIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoIk1FRElBSU5GTz0iKSsxMCx0PWUuc2xpY2UodCx0KzgwKSxuPXRoaXMuc2RwUGFyYW1zUmV2ZXJzZSh0LnNsaWNlKDI0LDI4KSksaT10aGlzLnNkcFBhcmFtc1JldmVyc2UodC5zbGljZSg0MCw0OCkpLHI9dGhpcy5zZHBQYXJhbXNSZXZlcnNlKHQuc2xpY2UoMzIsNDApKSxhPXBhcnNlSW50KHQuc2xpY2UoMzAsMzIpLDE2KSxzPXBhcnNlSW50KHQuc2xpY2UoMjksMzApLDE2KTtzd2l0Y2goY29uc29sZS5sb2coInBhcnNlIGhlYWQgaUF1ZGlvVHlwZToiK24rIixpQXVkaW9TYW1wbGluZ1JhdGU6IityKyIsIGlBdWRpb0JpdFJhdGU6IitpKyIsIGlBdWRpb0JpdFdpZHRoOiIrYSsiLCBpQ2hhbm5lbDoiK3MpLG4pe2Nhc2UgMTk4NDoobj0wKT09PWkmJihpPTMyZTMpLDA9PT1yJiYocj04ZTMpLDA9PT1hJiYoYT0xNiksMD09PXMmJihzPTEpO2JyZWFrO2Nhc2UgMjg5NDU6Y2FzZSA0OTE1NDppPTY0ZTMscj04ZTMsYT0xNixzPW49MTticmVhaztjYXNlIDI4OTQ0OmNhc2UgNDkxNTM6bj0yLGk9NjRlMyxyPThlMyxhPTE2LHM9MTticmVhaztjYXNlIDI5MjE3OmNhc2UgNDkxNTU6bj0zLHI9aT0xNmUzLGE9MTYscz0xO2JyZWFrO2Nhc2UgMjkyODA6Y2FzZSAyOTI4MjpjYXNlIDQ5MTU2Om49NCxpPTE2ZTMscj04ZTMsYT0xNixzPTE7YnJlYWs7Y2FzZSA4MTkzOmNhc2UgNDkxNTc6bj02LDA9PT1pJiYoaT0zMmUzKSwwPT09ciYmKHI9MTZlMyksMD09PWEmJihhPTE2KSwwPT09cyYmKHM9MSl9cmV0dXJue2lBdWRpb1R5cGU6bixpQXVkaW9CaXRSYXRlOmksaUF1ZGlvU2FtcGxpbmdSYXRlOnIsaUF1ZGlvQml0V2lkdGg6YSxpQ2hhbm5lbDpzfX19LHtrZXk6ImdldFNEUEluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXhPZigicnRwbWFwOjk2IEgyNjQvIikrMTUsbj1lLnNsaWNlKHQsdCs1KSxpPXBhcnNlSW50KG4sMTApLG49ZS5pbmRleE9mKCJvPS0gIikrNCxuPWUuc2xpY2UobixuKzE2KSx0PXBhcnNlSW50KG4sMTApLzFlMyxuPTYwKihuZXcgRGF0ZSkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTM7cmV0dXJue2lDbG9ja0ZyZXF1ZW5jeTppLGlDdXJyZW50VGltZTpNYXRoLmZsb29yKHQrbil9fX0se2tleToicGxheUNtZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKDAsaS5kZWZhdWx0KSh7c2VxdWVuY2U6MCxjbWQ6InJlYWxwbGF5Iix1cmw6ZX0pfX0se2tleToicGxheWJhY2tDbWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oMCxpLmRlZmF1bHQpKHtzZXF1ZW5jZTowLGNtZDoicGxheWJhY2siLHVybDpuLHN0YXJ0VGltZTplLGVuZFRpbWU6dH0pfX0se2tleToicGxheVJhdGVDbWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybigwLGkuZGVmYXVsdCkoe3NlcXVlbmNlOjAsY21kOiJzcGVlZCIscmF0ZTplfSl9fSx7a2V5OiJwYXVzZUNtZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLmRlZmF1bHQpKHtzZXF1ZW5jZTowLGNtZDoicGF1c2UifSl9fSx7a2V5OiJyZXN1bWVDbWQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5kZWZhdWx0KSh7c2VxdWVuY2U6MCxjbWQ6InJlc3VtZSJ9KX19XSksbj1zO2Z1bmN0aW9uIHMoKXsoMCxyLmRlZmF1bHQpKHRoaXMscyl9dC5EaXJlY3REZXZpY2U9bn0sZnVuY3Rpb24oZSx0LG4pe3ZhciBuPW4oMyksaT1uLkpTT058fChuLkpTT049e3N0cmluZ2lmeTpKU09OLnN0cmluZ2lmeX0pO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaS5zdHJpbmdpZnkuYXBwbHkoaSxhcmd1bWVudHMpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5MaXZlTWVkaWE9dm9pZCAwO3ZhciByPXUobig2NCkpLGk9dShuKDEpKSxhPXUobigyKSkscz11KG4oMjc0KSksbz11KG4oMjg0KSk7ZnVuY3Rpb24gdShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAsYS5kZWZhdWx0KShkLFt7a2V5OiJjcmVhdGVDbGllbnRPYmplY3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGE9by5kZWZhdWx0LkFFUy5lbmNyeXB0KChuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksby5kZWZhdWx0LmVuYy5IZXgucGFyc2UoIjEyMzQ1Njc4OTEyMzQ1NjcxMjM0NTY3ODkxMjM0NTY3MTIzNDU2Nzg5MTIzNDU2NzEyMzQ1Njc4OTEyMzQ1NjciKSx7bW9kZTpvLmRlZmF1bHQubW9kZS5DQkMsaXY6by5kZWZhdWx0LmVuYy5IZXgucGFyc2UoIjEyMzQ1Njc4OTEyMzQ1NjcxMjM0NTY3ODkxMjM0NTY3IikscGFkZGluZzpvLmRlZmF1bHQucGFkLlBrY3M3fSkuY2lwaGVydGV4dC50b1N0cmluZygpO2EubGVuZ3RoPDY0JiYoYSs9YSk7dmFyIHM9by5kZWZhdWx0LkFFUy5lbmNyeXB0KChuZXcgRGF0ZSkuZ2V0VGltZSgpLnRvU3RyaW5nKCksby5kZWZhdWx0LmVuYy5IZXgucGFyc2UoIjEyMzQ1Njc4OTEyMzQ1NjcxMjM0NTY3ODkxMjM0NTY3Iikse21vZGU6by5kZWZhdWx0Lm1vZGUuQ0JDLGl2Om8uZGVmYXVsdC5lbmMuSGV4LnBhcnNlKCIxMjM0NTY3ODkxMjM0NTY3MTIzNDU2Nzg5MTIzNDU2NyIpLHBhZGRpbmc6by5kZWZhdWx0LnBhZC5Qa2NzN30pLmNpcGhlcnRleHQudG9TdHJpbmcoKTtyZXR1cm57c29ja2V0OmUsaWQ6dCxQS0Q6bixyYW5kOmkscGxheVVSTDpyLnBsYXlVUkx8fCIiLGF1dGg6ci5hdXRofHwiIix0b2tlbjpyLnRva2VufHwiIixrZXk6YSxpdjpzLHJlc29sdmU6bnVsbCxyZWplY3Q6bnVsbCxzdG9waW5nOiExfX19LHtrZXk6InBsYXlDbWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZT17c2VxdWVuY2U6MCxjbWQ6dHx8InJlYWxwbGF5Iix1cmw6ZS5wbGF5VVJMLGtleTpzLmRlZmF1bHQuZW5jcnlwdChlLml2KyI6IitlLmtleSxlLlBLRCkuY2lwaGVyLnNwbGl0KCI/IilbMF0sYXV0aG9yaXphdGlvbjpvLmRlZmF1bHQuQUVTLmVuY3J5cHQoZS5yYW5kKyI6IitlLmF1dGgsby5kZWZhdWx0LmVuYy5IZXgucGFyc2UoZS5rZXkpLHttb2RlOm8uZGVmYXVsdC5tb2RlLkNCQyxpdjpvLmRlZmF1bHQuZW5jLkhleC5wYXJzZShlLml2KSxwYWRkaW5nOm8uZGVmYXVsdC5wYWQuUGtjczd9KS5jaXBoZXJ0ZXh0LnRvU3RyaW5nKCksdG9rZW46by5kZWZhdWx0LkFFUy5lbmNyeXB0KGUudG9rZW4sby5kZWZhdWx0LmVuYy5IZXgucGFyc2UoZS5rZXkpLHttb2RlOm8uZGVmYXVsdC5tb2RlLkNCQyxpdjpvLmRlZmF1bHQuZW5jLkhleC5wYXJzZShlLml2KSxwYWRkaW5nOm8uZGVmYXVsdC5wYWQuUGtjczd9KS5jaXBoZXJ0ZXh0LnRvU3RyaW5nKCl9O3JldHVybigwLHIuZGVmYXVsdCkoZSl9fSx7a2V5OiJwbGF5YmFja0NtZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7bj17c2VxdWVuY2U6MCxjbWQ6aXx8InBsYXliYWNrIix1cmw6ZS5wbGF5VVJMLGtleTpzLmRlZmF1bHQuZW5jcnlwdChlLml2KyI6IitlLmtleSxlLlBLRCkuY2lwaGVyLnNwbGl0KCI/IilbMF0sYXV0aG9yaXphdGlvbjpvLmRlZmF1bHQuQUVTLmVuY3J5cHQoZS5yYW5kKyI6IitlLmF1dGgsby5kZWZhdWx0LmVuYy5IZXgucGFyc2UoZS5rZXkpLHttb2RlOm8uZGVmYXVsdC5tb2RlLkNCQyxpdjpvLmRlZmF1bHQuZW5jLkhleC5wYXJzZShlLml2KSxwYWRkaW5nOm8uZGVmYXVsdC5wYWQuUGtjczd9KS5jaXBoZXJ0ZXh0LnRvU3RyaW5nKCksdG9rZW46by5kZWZhdWx0LkFFUy5lbmNyeXB0KGUudG9rZW4sby5kZWZhdWx0LmVuYy5IZXgucGFyc2UoZS5rZXkpLHttb2RlOm8uZGVmYXVsdC5tb2RlLkNCQyxpdjpvLmRlZmF1bHQuZW5jLkhleC5wYXJzZShlLml2KSxwYWRkaW5nOm8uZGVmYXVsdC5wYWQuUGtjczd9KS5jaXBoZXJ0ZXh0LnRvU3RyaW5nKCksc3RhcnRUaW1lOnQsZW5kVGltZTpufTtyZXR1cm4oMCxyLmRlZmF1bHQpKG4pfX0se2tleToic2Vla0NtZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4oMCxyLmRlZmF1bHQpKHtzZXF1ZW5jZTowLGNtZDoic2VlayIsc3RhcnRUaW1lOmUsZW5kVGltZTp0fSl9fSx7a2V5OiJzdG9wQ21kIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybigwLHIuZGVmYXVsdCkoe3NlcXVlbmNlOjAsY21kOiJzdG9wIn0pfX1dKSxhPWQ7ZnVuY3Rpb24gZCgpeygwLGkuZGVmYXVsdCkodGhpcyxkKX10LkxpdmVNZWRpYT1hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLGE9bigxMikscz0ocj1hKSYmci5fX2VzTW9kdWxlP3I6e2RlZmF1bHQ6cn07dmFyIG89Ik5ldHNjYXBlIix1PTQwO2Z1bmN0aW9uIG0oZSx0LG4pe251bGwhPWUmJigibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5mcm9tTnVtYmVyKGUsdCxuKTpudWxsPT10JiYic3RyaW5nIiE9dHlwZW9mIGU/dGhpcy5mcm9tU3RyaW5nKGUsMjU2KTp0aGlzLmZyb21TdHJpbmcoZSx0KSl9ZnVuY3Rpb24gcCgpe3JldHVybiBuZXcgbShudWxsKX1uPSJNaWNyb3NvZnQgSW50ZXJuZXQgRXhwbG9yZXIiPT1vPyhtLnByb3RvdHlwZS5hbT1mdW5jdGlvbihlLHQsbixpLHIsYSl7dmFyIHM9MzI3NjcmdDtmb3IodD4+PTE1OzA8PS0tYTspe3ZhciBvPTMyNzY3JnRoaXNbZV0sdT10aGlzW2UrK10+PjE1LGQ9dCpvK3UqcyxyPSgobz1zKm8rKCgzMjc2NyZkKTw8MTUpK25baV0rKDEwNzM3NDE4MjMmcikpPj4+MzApKyhkPj4+MTUpK3QqdSsocj4+PjMwKTtuW2krK109MTA3Mzc0MTgyMyZvfXJldHVybiByfSwzMCk6Ik5ldHNjYXBlIiE9bz8obS5wcm90b3R5cGUuYW09ZnVuY3Rpb24oZSx0LG4saSxyLGEpe2Zvcig7MDw9LS1hOyl7dmFyIHM9dCp0aGlzW2UrK10rbltpXStyLHI9TWF0aC5mbG9vcihzLzY3MTA4ODY0KTtuW2krK109NjcxMDg4NjMmc31yZXR1cm4gcn0sMjYpOihtLnByb3RvdHlwZS5hbT1mdW5jdGlvbihlLHQsbixpLHIsYSl7dmFyIHM9MTYzODMmdDtmb3IodD4+PTE0OzA8PS0tYTspe3ZhciBvPTE2MzgzJnRoaXNbZV0sdT10aGlzW2UrK10+PjE0LGQ9dCpvK3UqcyxyPSgobz1zKm8rKCgxNjM4MyZkKTw8MTQpK25baV0rcik+PjI4KSsoZD4+MTQpK3QqdTtuW2krK109MjY4NDM1NDU1Jm99cmV0dXJuIHJ9LDI4KSxtLnByb3RvdHlwZS5EQj1uLG0ucHJvdG90eXBlLkRNPSgxPDxuKS0xLG0ucHJvdG90eXBlLkRWPTE8PG47bS5wcm90b3R5cGUuRlY9TWF0aC5wb3coMiw1MiksbS5wcm90b3R5cGUuRjE9NTItbixtLnByb3RvdHlwZS5GMj0yKm4tNTI7Zm9yKHZhciBkPSIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLGw9W10saD0iMCIuY2hhckNvZGVBdCgwKSxjPTA7Yzw9OTsrK2MpbFtoKytdPWM7Zm9yKGg9ImEiLmNoYXJDb2RlQXQoMCksYz0xMDtjPDM2OysrYylsW2grK109Yztmb3IoaD0iQSIuY2hhckNvZGVBdCgwKSxjPTEwO2M8MzY7KytjKWxbaCsrXT1jO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGQuY2hhckF0KGUpfWZ1bmN0aW9uIGYoZSx0KXt0PWxbZS5jaGFyQ29kZUF0KHQpXTtyZXR1cm4gbnVsbD09dD8tMTp0fWZ1bmN0aW9uIHkoZSl7dmFyIHQ9cCgpO3JldHVybiB0LmZyb21JbnQoZSksdH1mdW5jdGlvbiBnKGUpe3ZhciB0LG49MTtyZXR1cm4gMCE9KHQ9ZT4+PjE2KSYmKGU9dCxuKz0xNiksMCE9KHQ9ZT4+OCkmJihlPXQsbis9OCksMCE9KHQ9ZT4+NCkmJihlPXQsbis9NCksMCE9KHQ9ZT4+MikmJihlPXQsbis9MiksZT4+MSE9MCYmKG4rPTEpLG59ZnVuY3Rpb24gTShlKXt0aGlzLm09ZX1mdW5jdGlvbiBMKGUpe3RoaXMubT1lLHRoaXMubXA9ZS5pbnZEaWdpdCgpLHRoaXMubXBsPTMyNzY3JnRoaXMubXAsdGhpcy5tcGg9dGhpcy5tcD4+MTUsdGhpcy51bT0oMTw8ZS5EQi0xNSktMSx0aGlzLm10Mj0yKmUudH1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIGUmdH1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIGV8dH1mdW5jdGlvbiBiKGUsdCl7cmV0dXJuIGVedH1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGUmfnR9ZnVuY3Rpb24gRCgpe31mdW5jdGlvbiBUKGUpe3JldHVybiBlfWZ1bmN0aW9uIEUoZSl7dGhpcy5yMj1wKCksdGhpcy5xMz1wKCksbS5PTkUuZGxTaGlmdFRvKDIqZS50LHRoaXMucjIpLHRoaXMubXU9dGhpcy5yMi5kaXZpZGUoZSksdGhpcy5tPWV9TS5wcm90b3R5cGUuY29udmVydD1mdW5jdGlvbihlKXtyZXR1cm4gZS5zPDB8fDA8PWUuY29tcGFyZVRvKHRoaXMubSk/ZS5tb2QodGhpcy5tKTplfSxNLnByb3RvdHlwZS5yZXZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LE0ucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbihlKXtlLmRpdlJlbVRvKHRoaXMubSxudWxsLGUpfSxNLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihlLHQsbil7ZS5tdWx0aXBseVRvKHQsbiksdGhpcy5yZWR1Y2Uobil9LE0ucHJvdG90eXBlLnNxclRvPWZ1bmN0aW9uKGUsdCl7ZS5zcXVhcmVUbyh0KSx0aGlzLnJlZHVjZSh0KX0sTC5wcm90b3R5cGUuY29udmVydD1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIGUuYWJzKCkuZGxTaGlmdFRvKHRoaXMubS50LHQpLHQuZGl2UmVtVG8odGhpcy5tLG51bGwsdCksZS5zPDAmJjA8dC5jb21wYXJlVG8obS5aRVJPKSYmdGhpcy5tLnN1YlRvKHQsdCksdH0sTC5wcm90b3R5cGUucmV2ZXJ0PWZ1bmN0aW9uKGUpe3ZhciB0PXAoKTtyZXR1cm4gZS5jb3B5VG8odCksdGhpcy5yZWR1Y2UodCksdH0sTC5wcm90b3R5cGUucmVkdWNlPWZ1bmN0aW9uKGUpe2Zvcig7ZS50PD10aGlzLm10MjspZVtlLnQrK109MDtmb3IodmFyIHQ9MDt0PHRoaXMubS50OysrdCl7dmFyIG49MzI3NjcmZVt0XSxpPW4qdGhpcy5tcGwrKChuKnRoaXMubXBoKyhlW3RdPj4xNSkqdGhpcy5tcGwmdGhpcy51bSk8PDE1KSZlLkRNO2ZvcihlW249dCt0aGlzLm0udF0rPXRoaXMubS5hbSgwLGksZSx0LDAsdGhpcy5tLnQpO2Vbbl0+PWUuRFY7KWVbbl0tPWUuRFYsZVsrK25dKyt9ZS5jbGFtcCgpLGUuZHJTaGlmdFRvKHRoaXMubS50LGUpLDA8PWUuY29tcGFyZVRvKHRoaXMubSkmJmUuc3ViVG8odGhpcy5tLGUpfSxMLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihlLHQsbil7ZS5tdWx0aXBseVRvKHQsbiksdGhpcy5yZWR1Y2Uobil9LEwucHJvdG90eXBlLnNxclRvPWZ1bmN0aW9uKGUsdCl7ZS5zcXVhcmVUbyh0KSx0aGlzLnJlZHVjZSh0KX0sbS5wcm90b3R5cGUuY29weVRvPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnQtMTswPD10Oy0tdCllW3RdPXRoaXNbdF07ZS50PXRoaXMudCxlLnM9dGhpcy5zfSxtLnByb3RvdHlwZS5mcm9tSW50PWZ1bmN0aW9uKGUpe3RoaXMudD0xLHRoaXMucz1lPDA/LTE6MCwwPGU/dGhpc1swXT1lOmU8LTE/dGhpc1swXT1lK0RWOnRoaXMudD0wfSxtLnByb3RvdHlwZS5mcm9tU3RyaW5nPWZ1bmN0aW9uKGUsdCl7dmFyIG47aWYoMTY9PXQpbj00O2Vsc2UgaWYoOD09dCluPTM7ZWxzZSBpZigyNTY9PXQpbj04O2Vsc2UgaWYoMj09dCluPTE7ZWxzZSBpZigzMj09dCluPTU7ZWxzZXtpZig0IT10KXJldHVybiB2b2lkIHRoaXMuZnJvbVJhZGl4KGUsdCk7bj0yfXRoaXMucz10aGlzLnQ9MDtmb3IodmFyIGk9ZS5sZW5ndGgscj0hMSxhPTA7MDw9LS1pOyl7dmFyIHM9OD09bj8yNTUmZVtpXTpmKGUsaSk7czwwPyItIj09ZS5jaGFyQXQoaSkmJihyPSEwKToocj0hMSwwPT1hP3RoaXNbdGhpcy50KytdPXM6YStuPnRoaXMuREI/KHRoaXNbdGhpcy50LTFdfD0ocyYoMTw8dGhpcy5EQi1hKS0xKTw8YSx0aGlzW3RoaXMudCsrXT1zPj50aGlzLkRCLWEpOnRoaXNbdGhpcy50LTFdfD1zPDxhLChhKz1uKT49dGhpcy5EQiYmKGEtPXRoaXMuREIpKX04PT1uJiYwIT0oMTI4JmVbMF0pJiYodGhpcy5zPS0xLDA8YSYmKHRoaXNbdGhpcy50LTFdfD0oMTw8dGhpcy5EQi1hKS0xPDxhKSksdGhpcy5jbGFtcCgpLHImJm0uWkVSTy5zdWJUbyh0aGlzLHRoaXMpfSxtLnByb3RvdHlwZS5jbGFtcD1mdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnMmdGhpcy5ETTswPHRoaXMudCYmdGhpc1t0aGlzLnQtMV09PWU7KS0tdGhpcy50fSxtLnByb3RvdHlwZS5kbFNoaWZ0VG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49dGhpcy50LTE7MDw9bjstLW4pdFtuK2VdPXRoaXNbbl07Zm9yKG49ZS0xOzA8PW47LS1uKXRbbl09MDt0LnQ9dGhpcy50K2UsdC5zPXRoaXMuc30sbS5wcm90b3R5cGUuZHJTaGlmdFRvPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWU7bjx0aGlzLnQ7KytuKXRbbi1lXT10aGlzW25dO3QudD1NYXRoLm1heCh0aGlzLnQtZSwwKSx0LnM9dGhpcy5zfSxtLnByb3RvdHlwZS5sU2hpZnRUbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lJXRoaXMuREIsaT10aGlzLkRCLW4scj0oMTw8aSktMSxhPU1hdGguZmxvb3IoZS90aGlzLkRCKSxzPXRoaXMuczw8biZ0aGlzLkRNLG89dGhpcy50LTE7MDw9bzstLW8pdFtvK2ErMV09dGhpc1tvXT4+aXxzLHM9KHRoaXNbb10mcik8PG47Zm9yKG89YS0xOzA8PW87LS1vKXRbb109MDt0W2FdPXMsdC50PXRoaXMudCthKzEsdC5zPXRoaXMucyx0LmNsYW1wKCl9LG0ucHJvdG90eXBlLnJTaGlmdFRvPWZ1bmN0aW9uKGUsdCl7dC5zPXRoaXMuczt2YXIgbj1NYXRoLmZsb29yKGUvdGhpcy5EQik7aWYobj49dGhpcy50KXQudD0wO2Vsc2V7dmFyIGk9ZSV0aGlzLkRCLHI9dGhpcy5EQi1pLGE9KDE8PGkpLTE7dFswXT10aGlzW25dPj5pO2Zvcih2YXIgcz1uKzE7czx0aGlzLnQ7KytzKXRbcy1uLTFdfD0odGhpc1tzXSZhKTw8cix0W3Mtbl09dGhpc1tzXT4+aTswPGkmJih0W3RoaXMudC1uLTFdfD0odGhpcy5zJmEpPDxyKSx0LnQ9dGhpcy50LW4sdC5jbGFtcCgpfX0sbS5wcm90b3R5cGUuc3ViVG89ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxpPTAscj1NYXRoLm1pbihlLnQsdGhpcy50KTtuPHI7KWkrPXRoaXNbbl0tZVtuXSx0W24rK109aSZ0aGlzLkRNLGk+Pj10aGlzLkRCO2lmKGUudDx0aGlzLnQpe2ZvcihpLT1lLnM7bjx0aGlzLnQ7KWkrPXRoaXNbbl0sdFtuKytdPWkmdGhpcy5ETSxpPj49dGhpcy5EQjtpKz10aGlzLnN9ZWxzZXtmb3IoaSs9dGhpcy5zO248ZS50OylpLT1lW25dLHRbbisrXT1pJnRoaXMuRE0saT4+PXRoaXMuREI7aS09ZS5zfXQucz1pPDA/LTE6MCxpPC0xP3RbbisrXT10aGlzLkRWK2k6MDxpJiYodFtuKytdPWkpLHQudD1uLHQuY2xhbXAoKX0sbS5wcm90b3R5cGUubXVsdGlwbHlUbz1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYWJzKCksaT1lLmFicygpLHI9bi50O2Zvcih0LnQ9citpLnQ7MDw9LS1yOyl0W3JdPTA7Zm9yKHI9MDtyPGkudDsrK3IpdFtyK24udF09bi5hbSgwLGlbcl0sdCxyLDAsbi50KTt0LnM9MCx0LmNsYW1wKCksdGhpcy5zIT1lLnMmJm0uWkVSTy5zdWJUbyh0LHQpfSxtLnByb3RvdHlwZS5zcXVhcmVUbz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5hYnMoKSxuPWUudD0yKnQudDswPD0tLW47KWVbbl09MDtmb3Iobj0wO248dC50LTE7KytuKXt2YXIgaT10LmFtKG4sdFtuXSxlLDIqbiwwLDEpOyhlW24rdC50XSs9dC5hbShuKzEsMip0W25dLGUsMipuKzEsaSx0LnQtbi0xKSk+PXQuRFYmJihlW24rdC50XS09dC5EVixlW24rdC50KzFdPTEpfTA8ZS50JiYoZVtlLnQtMV0rPXQuYW0obix0W25dLGUsMipuLDAsMSkpLGUucz0wLGUuY2xhbXAoKX0sbS5wcm90b3R5cGUuZGl2UmVtVG89ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPWUuYWJzKCk7aWYoIShpLnQ8PTApKXt2YXIgcj10aGlzLmFicygpO2lmKHIudDxpLnQpbnVsbCE9dCYmdC5mcm9tSW50KDApLG51bGwhPW4mJnRoaXMuY29weVRvKG4pO2Vsc2V7bnVsbD09biYmKG49cCgpKTt2YXIgYT1wKCkscz10aGlzLnMsZT1lLnMsbz10aGlzLkRCLWcoaVtpLnQtMV0pO2lmKDA8bz8oaS5sU2hpZnRUbyhvLGEpLHIubFNoaWZ0VG8obyxuKSk6KGkuY29weVRvKGEpLHIuY29weVRvKG4pKSwwIT0ocj1hWyhpPWEudCktMV0pKXt2YXIgdT1yKigxPDx0aGlzLkYxKSsoMTxpP2FbaS0yXT4+dGhpcy5GMjowKSxkPXRoaXMuRlYvdSx1PSgxPDx0aGlzLkYxKS91LGw9MTw8dGhpcy5GMixoPW4udCxjPWgtaSxfPW51bGw9PXQ/cCgpOnQ7Zm9yKGEuZGxTaGlmdFRvKGMsXyksMDw9bi5jb21wYXJlVG8oXykmJihuW24udCsrXT0xLG4uc3ViVG8oXyxuKSksbS5PTkUuZGxTaGlmdFRvKGksXyksXy5zdWJUbyhhLGEpO2EudDxpOylhW2EudCsrXT0wO2Zvcig7MDw9LS1jOyl7dmFyIGY9blstLWhdPT1yP3RoaXMuRE06TWF0aC5mbG9vcihuW2hdKmQrKG5baC0xXStsKSp1KTtpZigobltoXSs9YS5hbSgwLGYsbixjLDAsaSkpPGYpZm9yKGEuZGxTaGlmdFRvKGMsXyksbi5zdWJUbyhfLG4pO25baF08LS1mOyluLnN1YlRvKF8sbil9bnVsbCE9dCYmKG4uZHJTaGlmdFRvKGksdCkscyE9ZSYmbS5aRVJPLnN1YlRvKHQsdCkpLG4udD1pLG4uY2xhbXAoKSwwPG8mJm4uclNoaWZ0VG8obyxuKSxzPDAmJm0uWkVSTy5zdWJUbyhuLG4pfX19fSxtLnByb3RvdHlwZS5pbnZEaWdpdD1mdW5jdGlvbigpe2lmKHRoaXMudDwxKXJldHVybiAwO3ZhciBlPXRoaXNbMF07aWYoMD09KDEmZSkpcmV0dXJuIDA7dmFyIHQ9MyZlO3JldHVybiAwPCh0PSh0PSh0PSh0PXQqKDItKDE1JmUpKnQpJjE1KSooMi0oMjU1JmUpKnQpJjI1NSkqKDItKCg2NTUzNSZlKSp0JjY1NTM1KSkmNjU1MzUpKigyLWUqdCV0aGlzLkRWKSV0aGlzLkRWKT90aGlzLkRWLXQ6LXR9LG0ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT0oMDx0aGlzLnQ/MSZ0aGlzWzBdOnRoaXMucyl9LG0ucHJvdG90eXBlLmV4cD1mdW5jdGlvbihlLHQpe2lmKDQyOTQ5NjcyOTU8ZXx8ZTwxKXJldHVybiBtLk9ORTt2YXIgbixpPXAoKSxyPXAoKSxhPXQuY29udmVydCh0aGlzKSxzPWcoZSktMTtmb3IoYS5jb3B5VG8oaSk7MDw9LS1zOyl0LnNxclRvKGksciksMDwoZSYxPDxzKT90Lm11bFRvKHIsYSxpKToobj1pLGk9cixyPW4pO3JldHVybiB0LnJldmVydChpKX0sbS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7aWYodGhpcy5zPDApcmV0dXJuIi0iK3RoaXMubmVnYXRlKCkudG9TdHJpbmcoZSk7aWYoMTY9PWUpZT00O2Vsc2UgaWYoOD09ZSllPTM7ZWxzZSBpZigyPT1lKWU9MTtlbHNlIGlmKDMyPT1lKWU9NTtlbHNlIGlmKDY0PT1lKWU9NjtlbHNle2lmKDQhPWUpcmV0dXJuIHRoaXMudG9SYWRpeChlKTtlPTJ9dmFyIHQsbj0oMTw8ZSktMSxpPSExLHI9IiIsYT10aGlzLnQscz10aGlzLkRCLWEqdGhpcy5EQiVlO2lmKDA8YS0tKWZvcihzPHRoaXMuREImJjA8KHQ9dGhpc1thXT4+cykmJihpPSEwLHI9Xyh0KSk7MDw9YTspczxlPyh0PSh0aGlzW2FdJigxPDxzKS0xKTw8ZS1zLHR8PXRoaXNbLS1hXT4+KHMrPXRoaXMuREItZSkpOih0PXRoaXNbYV0+PihzLT1lKSZuLHM8PTAmJihzKz10aGlzLkRCLC0tYSkpLChpPTA8dD8hMDppKSYmKHIrPV8odCkpO3JldHVybiBpP3I6IjAifSxtLnByb3RvdHlwZS5uZWdhdGU9ZnVuY3Rpb24oKXt2YXIgZT1wKCk7cmV0dXJuIG0uWkVSTy5zdWJUbyh0aGlzLGUpLGV9LG0ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnM8MD90aGlzLm5lZ2F0ZSgpOnRoaXN9LG0ucHJvdG90eXBlLmNvbXBhcmVUbz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLnMtZS5zO2lmKDAhPXQpcmV0dXJuIHQ7dmFyIG49dGhpcy50O2lmKDAhPSh0PW4tZS50KSlyZXR1cm4gdDtmb3IoOzA8PS0tbjspaWYoMCE9KHQ9dGhpc1tuXS1lW25dKSlyZXR1cm4gdDtyZXR1cm4gMH0sbS5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudDw9MD8wOnRoaXMuREIqKHRoaXMudC0xKStnKHRoaXNbdGhpcy50LTFdXnRoaXMucyZ0aGlzLkRNKX0sbS5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGUpe3ZhciB0PXAoKTtyZXR1cm4gdGhpcy5hYnMoKS5kaXZSZW1UbyhlLG51bGwsdCksdGhpcy5zPDAmJjA8dC5jb21wYXJlVG8obS5aRVJPKSYmZS5zdWJUbyh0LHQpLHR9LG0ucHJvdG90eXBlLm1vZFBvd0ludD1mdW5jdGlvbihlLHQpe3JldHVybiB0PW5ldyhlPDI1Nnx8dC5pc0V2ZW4oKT9NOkwpKHQpLHRoaXMuZXhwKGUsdCl9LG0uWkVSTz15KDApLG0uT05FPXkoMSksRC5wcm90b3R5cGUuY29udmVydD1ULEQucHJvdG90eXBlLnJldmVydD1ULEQucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGUsdCxuKXtlLm11bHRpcGx5VG8odCxuKX0sRC5wcm90b3R5cGUuc3FyVG89ZnVuY3Rpb24oZSx0KXtlLnNxdWFyZVRvKHQpfSxFLnByb3RvdHlwZS5jb252ZXJ0PWZ1bmN0aW9uKGUpe2lmKGUuczwwfHxlLnQ+Mip0aGlzLm0udClyZXR1cm4gZS5tb2QodGhpcy5tKTtpZihlLmNvbXBhcmVUbyh0aGlzLm0pPDApcmV0dXJuIGU7dmFyIHQ9cCgpO3JldHVybiBlLmNvcHlUbyh0KSx0aGlzLnJlZHVjZSh0KSx0fSxFLnByb3RvdHlwZS5yZXZlcnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LEUucHJvdG90eXBlLnJlZHVjZT1mdW5jdGlvbihlKXtmb3IoZS5kclNoaWZ0VG8odGhpcy5tLnQtMSx0aGlzLnIyKSxlLnQ+dGhpcy5tLnQrMSYmKGUudD10aGlzLm0udCsxLGUuY2xhbXAoKSksdGhpcy5tdS5tdWx0aXBseVVwcGVyVG8odGhpcy5yMix0aGlzLm0udCsxLHRoaXMucTMpLHRoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO2UuY29tcGFyZVRvKHRoaXMucjIpPDA7KWUuZEFkZE9mZnNldCgxLHRoaXMubS50KzEpO2ZvcihlLnN1YlRvKHRoaXMucjIsZSk7MDw9ZS5jb21wYXJlVG8odGhpcy5tKTspZS5zdWJUbyh0aGlzLm0sZSl9LEUucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGUsdCxuKXtlLm11bHRpcGx5VG8odCxuKSx0aGlzLnJlZHVjZShuKX0sRS5wcm90b3R5cGUuc3FyVG89ZnVuY3Rpb24oZSx0KXtlLnNxdWFyZVRvKHQpLHRoaXMucmVkdWNlKHQpfTt2YXIgWSxQLEMsUixBLHg9WzIsMyw1LDcsMTEsMTMsMTcsMTksMjMsMjksMzEsMzcsNDEsNDMsNDcsNTMsNTksNjEsNjcsNzEsNzMsNzksODMsODksOTcsMTAxLDEwMywxMDcsMTA5LDExMywxMjcsMTMxLDEzNywxMzksMTQ5LDE1MSwxNTcsMTYzLDE2NywxNzMsMTc5LDE4MSwxOTEsMTkzLDE5NywxOTksMjExLDIyMywyMjcsMjI5LDIzMywyMzksMjQxLDI1MSwyNTcsMjYzLDI2OSwyNzEsMjc3LDI4MSwyODMsMjkzLDMwNywzMTEsMzEzLDMxNywzMzEsMzM3LDM0NywzNDksMzUzLDM1OSwzNjcsMzczLDM3OSwzODMsMzg5LDM5Nyw0MDEsNDA5LDQxOSw0MjEsNDMxLDQzMyw0MzksNDQzLDQ0OSw0NTcsNDYxLDQ2Myw0NjcsNDc5LDQ4Nyw0OTEsNDk5LDUwMyw1MDksNTIxLDUyMyw1NDEsNTQ3LDU1Nyw1NjMsNTY5LDU3MSw1NzcsNTg3LDU5Myw1OTksNjAxLDYwNyw2MTMsNjE3LDYxOSw2MzEsNjQxLDY0Myw2NDcsNjUzLDY1OSw2NjEsNjczLDY3Nyw2ODMsNjkxLDcwMSw3MDksNzE5LDcyNyw3MzMsNzM5LDc0Myw3NTEsNzU3LDc2MSw3NjksNzczLDc4Nyw3OTcsODA5LDgxMSw4MjEsODIzLDgyNyw4MjksODM5LDg1Myw4NTcsODU5LDg2Myw4NzcsODgxLDg4Myw4ODcsOTA3LDkxMSw5MTksOTI5LDkzNyw5NDEsOTQ3LDk1Myw5NjcsOTcxLDk3Nyw5ODMsOTkxLDk5N10sTz02NzEwODg2NC94W3gubGVuZ3RoLTFdO2Z1bmN0aW9uIEkoZSl7dmFyIHQsbixvPXRoaXMsaT1lLmxlbmd0aCxyPTAsYT1vLmk9by5qPW8ubT0wO2ZvcihvLlM9W10sby5jPVtdLGl8fChlPVtpKytdKTtyPDI1Njspby5TW3JdPXIrKztmb3Iocj0wO3I8MjU2O3IrKylhPWErKHQ9by5TW3JdKStlW3IlaV0mMjU1LG49by5TW2FdLG8uU1tyXT1uLG8uU1thXT10O28uZz1mdW5jdGlvbihlKXt2YXIgdD1vLlMsbj1vLmkrMSYyNTUsaT10W25dLHI9by5qK2kmMjU1LGE9dFtyXTt0W25dPWEsdFtyXT1pO2Zvcih2YXIgcz10W2krYSYyNTVdOy0tZTspYT10W3I9cisoaT10W249bisxJjI1NV0pJjI1NV0sdFtuXT1hLHRbcl09aSxzPTI1NipzK3RbaSthJjI1NV07cmV0dXJuIG8uaT1uLG8uaj1yLHN9LG8uZygyNTYpfWZ1bmN0aW9uIFcoZSx0LG4saSl7Zm9yKGUrPSIiLGk9bj0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgcj10LGE9MjU1Jmkscz0obl49MTkqdFsyNTUmaV0pK2UuY2hhckNvZGVBdChpKTtyW2FdPTI1NSZzfWZvcihpIGluIGU9IiIsdCllKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbaV0pO3JldHVybiBlfWZ1bmN0aW9uIEgoKXt9ZnVuY3Rpb24gaigpe3RoaXMuaj10aGlzLmk9MCx0aGlzLlM9W119bS5wcm90b3R5cGUuY2h1bmtTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2coZSkpfSxtLnByb3RvdHlwZS50b1JhZGl4PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUmJihlPTEwKSwwPT10aGlzLnNpZ251bSgpfHxlPDJ8fDM2PGUpcmV0dXJuIjAiO3ZhciB0PXRoaXMuY2h1bmtTaXplKGUpLG49eSh0PU1hdGgucG93KGUsdCkpLGk9cCgpLHI9cCgpLGE9IiI7Zm9yKHRoaXMuZGl2UmVtVG8obixpLHIpOzA8aS5zaWdudW0oKTspYT0odCtyLmludFZhbHVlKCkpLnRvU3RyaW5nKGUpLnN1YnN0cigxKSthLGkuZGl2UmVtVG8obixpLHIpO3JldHVybiByLmludFZhbHVlKCkudG9TdHJpbmcoZSkrYX0sbS5wcm90b3R5cGUuZnJvbVJhZGl4PWZ1bmN0aW9uKGUsdCl7dGhpcy5mcm9tSW50KDApO2Zvcih2YXIgbj10aGlzLmNodW5rU2l6ZSh0PW51bGw9PXQ/MTA6dCksaT1NYXRoLnBvdyh0LG4pLHI9ITEsYT0wLHM9MCxvPTA7bzxlLmxlbmd0aDsrK28pe3ZhciB1PWYoZSxvKTt1PDA/Ii0iPT1lLmNoYXJBdChvKSYmMD09dGhpcy5zaWdudW0oKSYmKHI9ITApOihzPXQqcyt1LCsrYT49biYmKHRoaXMuZE11bHRpcGx5KGkpLHRoaXMuZEFkZE9mZnNldChzLDApLHM9YT0wKSl9MDxhJiYodGhpcy5kTXVsdGlwbHkoTWF0aC5wb3codCxhKSksdGhpcy5kQWRkT2Zmc2V0KHMsMCkpLHImJm0uWkVSTy5zdWJUbyh0aGlzLHRoaXMpfSxtLnByb3RvdHlwZS5mcm9tTnVtYmVyPWZ1bmN0aW9uKGUsdCxuKXtpZigibnVtYmVyIj09dHlwZW9mIHQpaWYoZTwyKXRoaXMuZnJvbUludCgxKTtlbHNlIGZvcih0aGlzLmZyb21OdW1iZXIoZSxuKSx0aGlzLnRlc3RCaXQoZS0xKXx8dGhpcy5iaXR3aXNlVG8obS5PTkUuc2hpZnRMZWZ0KGUtMSksayx0aGlzKSx0aGlzLmlzRXZlbigpJiZ0aGlzLmRBZGRPZmZzZXQoMSwwKTshdGhpcy5pc1Byb2JhYmxlUHJpbWUodCk7KXRoaXMuZEFkZE9mZnNldCgyLDApLHRoaXMuYml0TGVuZ3RoKCk+ZSYmdGhpcy5zdWJUbyhtLk9ORS5zaGlmdExlZnQoZS0xKSx0aGlzKTtlbHNle3ZhciBpPTcmZTsobj1bXSkubGVuZ3RoPTErKGU+PjMpLHQubmV4dEJ5dGVzKG4pLDA8aT9uWzBdJj0oMTw8aSktMTpuWzBdPTAsdGhpcy5mcm9tU3RyaW5nKG4sMjU2KX19LG0ucHJvdG90eXBlLmJpdHdpc2VUbz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpLHI9TWF0aC5taW4oZS50LHRoaXMudCksYT0wO2E8cjsrK2EpblthXT10KHRoaXNbYV0sZVthXSk7aWYoZS50PHRoaXMudCl7Zm9yKGk9ZS5zJnRoaXMuRE0sYT1yO2E8dGhpcy50OysrYSluW2FdPXQodGhpc1thXSxpKTtuLnQ9dGhpcy50fWVsc2V7Zm9yKGk9dGhpcy5zJnRoaXMuRE0sYT1yO2E8ZS50OysrYSluW2FdPXQoaSxlW2FdKTtuLnQ9ZS50fW4ucz10KHRoaXMucyxlLnMpLG4uY2xhbXAoKX0sbS5wcm90b3R5cGUuY2hhbmdlQml0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bS5PTkUuc2hpZnRMZWZ0KGUpLHRoaXMuYml0d2lzZVRvKGUsdCxlKSxlfSxtLnByb3RvdHlwZS5hZGRUbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLGk9MCxyPU1hdGgubWluKGUudCx0aGlzLnQpO248cjspaSs9dGhpc1tuXStlW25dLHRbbisrXT1pJnRoaXMuRE0saT4+PXRoaXMuREI7aWYoZS50PHRoaXMudCl7Zm9yKGkrPWUucztuPHRoaXMudDspaSs9dGhpc1tuXSx0W24rK109aSZ0aGlzLkRNLGk+Pj10aGlzLkRCO2krPXRoaXMuc31lbHNle2ZvcihpKz10aGlzLnM7bjxlLnQ7KWkrPWVbbl0sdFtuKytdPWkmdGhpcy5ETSxpPj49dGhpcy5EQjtpKz1lLnN9dC5zPWk8MD8tMTowLDA8aT90W24rK109aTppPC0xJiYodFtuKytdPXRoaXMuRFYraSksdC50PW4sdC5jbGFtcCgpfSxtLnByb3RvdHlwZS5kTXVsdGlwbHk9ZnVuY3Rpb24oZSl7dGhpc1t0aGlzLnRdPXRoaXMuYW0oMCxlLTEsdGhpcywwLDAsdGhpcy50KSwrK3RoaXMudCx0aGlzLmNsYW1wKCl9LG0ucHJvdG90eXBlLmRBZGRPZmZzZXQ9ZnVuY3Rpb24oZSx0KXtpZigwIT1lKXtmb3IoO3RoaXMudDw9dDspdGhpc1t0aGlzLnQrK109MDtmb3IodGhpc1t0XSs9ZTt0aGlzW3RdPj10aGlzLkRWOyl0aGlzW3RdLT10aGlzLkRWLCsrdD49dGhpcy50JiYodGhpc1t0aGlzLnQrK109MCksKyt0aGlzW3RdfX0sbS5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyPU1hdGgubWluKHRoaXMudCtlLnQsdCk7Zm9yKG4ucz0wLG4udD1yOzA8cjspblstLXJdPTA7Zm9yKGk9bi50LXRoaXMudDtyPGk7KytyKW5bcit0aGlzLnRdPXRoaXMuYW0oMCxlW3JdLG4sciwwLHRoaXMudCk7Zm9yKGk9TWF0aC5taW4oZS50LHQpO3I8aTsrK3IpdGhpcy5hbSgwLGVbcl0sbixyLDAsdC1yKTtuLmNsYW1wKCl9LG0ucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbz1mdW5jdGlvbihlLHQsbil7dmFyIGk9bi50PXRoaXMudCtlLnQtIC0tdDtmb3Iobi5zPTA7MDw9LS1pOyluW2ldPTA7Zm9yKGk9TWF0aC5tYXgodC10aGlzLnQsMCk7aTxlLnQ7KytpKW5bdGhpcy50K2ktdF09dGhpcy5hbSh0LWksZVtpXSxuLDAsMCx0aGlzLnQraS10KTtuLmNsYW1wKCksbi5kclNoaWZ0VG8oMSxuKX0sbS5wcm90b3R5cGUubW9kSW50PWZ1bmN0aW9uKGUpe2lmKGU8PTApcmV0dXJuIDA7dmFyIHQ9dGhpcy5EViVlLG49dGhpcy5zPDA/ZS0xOjA7aWYoMDx0aGlzLnQpaWYoMD09dCluPXRoaXNbMF0lZTtlbHNlIGZvcih2YXIgaT10aGlzLnQtMTswPD1pOy0taSluPSh0Km4rdGhpc1tpXSklZTtyZXR1cm4gbn0sbS5wcm90b3R5cGUubWlsbGVyUmFiaW49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdWJ0cmFjdChtLk9ORSksbj10LmdldExvd2VzdFNldEJpdCgpO2lmKG48PTApcmV0dXJuITE7dmFyIGk9dC5zaGlmdFJpZ2h0KG4pLGU9ZSsxPj4xO3gubGVuZ3RoPGUmJihlPXgubGVuZ3RoKTtmb3IodmFyIHI9cCgpLGE9MDthPGU7KythKXtyLmZyb21JbnQoeFtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqeC5sZW5ndGgpXSk7dmFyIHM9ci5tb2RQb3coaSx0aGlzKTtpZigwIT1zLmNvbXBhcmVUbyhtLk9ORSkmJjAhPXMuY29tcGFyZVRvKHQpKXtmb3IodmFyIG89MTtvKys8biYmMCE9cy5jb21wYXJlVG8odCk7KWlmKDA9PShzPXMubW9kUG93SW50KDIsdGhpcykpLmNvbXBhcmVUbyhtLk9ORSkpcmV0dXJuITE7aWYoMCE9cy5jb21wYXJlVG8odCkpcmV0dXJuITF9fXJldHVybiEwfSxtLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBlPXAoKTtyZXR1cm4gdGhpcy5jb3B5VG8oZSksZX0sbS5wcm90b3R5cGUuaW50VmFsdWU9ZnVuY3Rpb24oKXtpZih0aGlzLnM8MCl7aWYoMT09dGhpcy50KXJldHVybiB0aGlzWzBdLXRoaXMuRFY7aWYoMD09dGhpcy50KXJldHVybi0xfWVsc2V7aWYoMT09dGhpcy50KXJldHVybiB0aGlzWzBdO2lmKDA9PXRoaXMudClyZXR1cm4gMH1yZXR1cm4odGhpc1sxXSYoMTw8MzItdGhpcy5EQiktMSk8PHRoaXMuREJ8dGhpc1swXX0sbS5wcm90b3R5cGUuYnl0ZVZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMudD90aGlzLnM6dGhpc1swXTw8MjQ+PjI0fSxtLnByb3RvdHlwZS5zaG9ydFZhbHVlPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PXRoaXMudD90aGlzLnM6dGhpc1swXTw8MTY+PjE2fSxtLnByb3RvdHlwZS5zaWdudW09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zPDA/LTE6dGhpcy50PD0wfHwxPT10aGlzLnQmJnRoaXNbMF08PTA/MDoxfSxtLnByb3RvdHlwZS50b0J5dGVBcnJheT1mdW5jdGlvbigpe3ZhciBlPXRoaXMudCx0PVtdO3RbMF09dGhpcy5zO3ZhciBuLGk9dGhpcy5EQi1lKnRoaXMuREIlOCxyPTA7aWYoMDxlLS0pZm9yKGk8dGhpcy5EQiYmKG49dGhpc1tlXT4+aSkhPSh0aGlzLnMmdGhpcy5ETSk+PmkmJih0W3IrK109bnx0aGlzLnM8PHRoaXMuREItaSk7MDw9ZTspaTw4PyhuPSh0aGlzW2VdJigxPDxpKS0xKTw8OC1pLG58PXRoaXNbLS1lXT4+KGkrPXRoaXMuREItOCkpOihuPXRoaXNbZV0+PihpLT04KSYyNTUsaTw9MCYmKGkrPXRoaXMuREIsLS1lKSksMCE9KDEyOCZuKSYmKG58PS0yNTYpLDA9PXImJigxMjgmdGhpcy5zKSE9KDEyOCZuKSYmKytyLCgwPHJ8fG4hPXRoaXMucykmJih0W3IrK109bik7cmV0dXJuIHR9LG0ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtyZXR1cm4gMD09dGhpcy5jb21wYXJlVG8oZSl9LG0ucHJvdG90eXBlLm1pbj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21wYXJlVG8oZSk8MD90aGlzOmV9LG0ucHJvdG90eXBlLm1heD1mdW5jdGlvbihlKXtyZXR1cm4gMDx0aGlzLmNvbXBhcmVUbyhlKT90aGlzOmV9LG0ucHJvdG90eXBlLmFuZD1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMuYml0d2lzZVRvKGUsUyx0KSx0fSxtLnByb3RvdHlwZS5vcj1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMuYml0d2lzZVRvKGUsayx0KSx0fSxtLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZSl7dmFyIHQ9cCgpO3JldHVybiB0aGlzLmJpdHdpc2VUbyhlLGIsdCksdH0sbS5wcm90b3R5cGUuYW5kTm90PWZ1bmN0aW9uKGUpe3ZhciB0PXAoKTtyZXR1cm4gdGhpcy5iaXR3aXNlVG8oZSx3LHQpLHR9LG0ucHJvdG90eXBlLm5vdD1mdW5jdGlvbigpe2Zvcih2YXIgZT1wKCksdD0wO3Q8dGhpcy50OysrdCllW3RdPXRoaXMuRE0mfnRoaXNbdF07cmV0dXJuIGUudD10aGlzLnQsZS5zPX50aGlzLnMsZX0sbS5wcm90b3R5cGUuc2hpZnRMZWZ0PWZ1bmN0aW9uKGUpe3ZhciB0PXAoKTtyZXR1cm4gZTwwP3RoaXMuclNoaWZ0VG8oLWUsdCk6dGhpcy5sU2hpZnRUbyhlLHQpLHR9LG0ucHJvdG90eXBlLnNoaWZ0UmlnaHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9cCgpO3JldHVybiBlPDA/dGhpcy5sU2hpZnRUbygtZSx0KTp0aGlzLnJTaGlmdFRvKGUsdCksdH0sbS5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTA7ZTx0aGlzLnQ7KytlKWlmKDAhPXRoaXNbZV0pcmV0dXJuIGUqdGhpcy5EQitmdW5jdGlvbihlKXtpZigwPT1lKXJldHVybi0xO3ZhciB0PTA7cmV0dXJuIDA9PSg2NTUzNSZlKSYmKGU+Pj0xNix0Kz0xNiksMD09KDI1NSZlKSYmKGU+Pj04LHQrPTgpLDA9PSgxNSZlKSYmKGU+Pj00LHQrPTQpLDA9PSgzJmUpJiYoZT4+PTIsdCs9MiksMD09KDEmZSkmJisrdCx0fSh0aGlzW2VdKTtyZXR1cm4gdGhpcy5zPDA/dGhpcy50KnRoaXMuREI6LTF9LG0ucHJvdG90eXBlLmJpdENvdW50PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD10aGlzLnMmdGhpcy5ETSxuPTA7bjx0aGlzLnQ7KytuKWUrPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wOzAhPWU7KWUmPWUtMSwrK3Q7cmV0dXJuIHR9KHRoaXNbbl1edCk7cmV0dXJuIGV9LG0ucHJvdG90eXBlLnRlc3RCaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5mbG9vcihlL3RoaXMuREIpO3JldHVybiB0Pj10aGlzLnQ/MCE9dGhpcy5zOjAhPSh0aGlzW3RdJjE8PGUldGhpcy5EQil9LG0ucHJvdG90eXBlLnNldEJpdD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jaGFuZ2VCaXQoZSxrKX0sbS5wcm90b3R5cGUuY2xlYXJCaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2hhbmdlQml0KGUsdyl9LG0ucHJvdG90eXBlLmZsaXBCaXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY2hhbmdlQml0KGUsYil9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMuYWRkVG8oZSx0KSx0fSxtLnByb3RvdHlwZS5zdWJ0cmFjdD1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMuc3ViVG8oZSx0KSx0fSxtLnByb3RvdHlwZS5tdWx0aXBseT1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMubXVsdGlwbHlUbyhlLHQpLHR9LG0ucHJvdG90eXBlLmRpdmlkZT1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMuZGl2UmVtVG8oZSx0LG51bGwpLHR9LG0ucHJvdG90eXBlLnJlbWFpbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1wKCk7cmV0dXJuIHRoaXMuZGl2UmVtVG8oZSxudWxsLHQpLHR9LG0ucHJvdG90eXBlLmRpdmlkZUFuZFJlbWFpbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1wKCksbj1wKCk7cmV0dXJuIHRoaXMuZGl2UmVtVG8oZSx0LG4pLFt0LG5dfSxtLnByb3RvdHlwZS5tb2RQb3c9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmJpdExlbmd0aCgpLGk9eSgxKTtpZihuPD0wKXJldHVybiBpO3ZhciByPW48MTg/MTpuPDQ4PzM6bjwxNDQ/NDpuPDc2OD81OjYsYT1uZXcobjw4P006dC5pc0V2ZW4oKT9FOkwpKHQpLHM9W10sbz0zLHU9ci0xLGQ9KDE8PHIpLTE7aWYoc1sxXT1hLmNvbnZlcnQodGhpcyksMTxyKWZvcihuPXAoKSxhLnNxclRvKHNbMV0sbik7bzw9ZDspc1tvXT1wKCksYS5tdWxUbyhuLHNbby0yXSxzW29dKSxvKz0yO2Zvcih2YXIgbCxoPWUudC0xLGM9ITAsXz1wKCksbj1nKGVbaF0pLTE7MDw9aDspe2Zvcih1PD1uP2w9ZVtoXT4+bi11JmQ6KGw9KGVbaF0mKDE8PG4rMSktMSk8PHUtbiwwPGgmJihsfD1lW2gtMV0+PnRoaXMuREIrbi11KSksbz1yOzA9PSgxJmwpOylsPj49MSwtLW87aWYoKG4tPW8pPDAmJihuKz10aGlzLkRCLC0taCksYylzW2xdLmNvcHlUbyhpKSxjPSExO2Vsc2V7Zm9yKDsxPG87KWEuc3FyVG8oaSxfKSxhLnNxclRvKF8saSksby09MjswPG8/YS5zcXJUbyhpLF8pOihvPWksaT1fLF89byksYS5tdWxUbyhfLHNbbF0saSl9Zm9yKDswPD1oJiYwPT0oZVtoXSYxPDxuKTspYS5zcXJUbyhpLF8pLG89aSxpPV8sXz1vLC0tbjwwJiYobj10aGlzLkRCLTEsLS1oKX1yZXR1cm4gYS5yZXZlcnQoaSl9LG0ucHJvdG90eXBlLm1vZEludmVyc2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5pc0V2ZW4oKTtpZih0aGlzLmlzRXZlbigpJiZ0fHwwPT1lLnNpZ251bSgpKXJldHVybiBtLlpFUk87Zm9yKHZhciBuPWUuY2xvbmUoKSxpPXRoaXMuY2xvbmUoKSxyPXkoMSksYT15KDApLHM9eSgwKSxvPXkoMSk7MCE9bi5zaWdudW0oKTspe2Zvcig7bi5pc0V2ZW4oKTspbi5yU2hpZnRUbygxLG4pLHQ/KHIuaXNFdmVuKCkmJmEuaXNFdmVuKCl8fChyLmFkZFRvKHRoaXMsciksYS5zdWJUbyhlLGEpKSxyLnJTaGlmdFRvKDEscikpOmEuaXNFdmVuKCl8fGEuc3ViVG8oZSxhKSxhLnJTaGlmdFRvKDEsYSk7Zm9yKDtpLmlzRXZlbigpOylpLnJTaGlmdFRvKDEsaSksdD8ocy5pc0V2ZW4oKSYmby5pc0V2ZW4oKXx8KHMuYWRkVG8odGhpcyxzKSxvLnN1YlRvKGUsbykpLHMuclNoaWZ0VG8oMSxzKSk6by5pc0V2ZW4oKXx8by5zdWJUbyhlLG8pLG8uclNoaWZ0VG8oMSxvKTswPD1uLmNvbXBhcmVUbyhpKT8obi5zdWJUbyhpLG4pLHQmJnIuc3ViVG8ocyxyKSxhLnN1YlRvKG8sYSkpOihpLnN1YlRvKG4saSksdCYmcy5zdWJUbyhyLHMpLG8uc3ViVG8oYSxvKSl9cmV0dXJuIDAhPWkuY29tcGFyZVRvKG0uT05FKT9tLlpFUk86MDw9by5jb21wYXJlVG8oZSk/by5zdWJ0cmFjdChlKTpvLnNpZ251bSgpPDA/KG8uYWRkVG8oZSxvKSxvLnNpZ251bSgpPDA/by5hZGQoZSk6byk6b30sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmV4cChlLG5ldyBEKX0sbS5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuczwwP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpLGU9ZS5zPDA/ZS5uZWdhdGUoKTplLmNsb25lKCk7dC5jb21wYXJlVG8oZSk8MCYmKG49dCx0PWUsZT1uKTt2YXIgbj10LmdldExvd2VzdFNldEJpdCgpLGk9ZS5nZXRMb3dlc3RTZXRCaXQoKTtpZihpPDApcmV0dXJuIHQ7Zm9yKDA8KGk9bjxpP246aSkmJih0LnJTaGlmdFRvKGksdCksZS5yU2hpZnRUbyhpLGUpKTswPHQuc2lnbnVtKCk7KTA8KG49dC5nZXRMb3dlc3RTZXRCaXQoKSkmJnQuclNoaWZ0VG8obix0KSwwPChuPWUuZ2V0TG93ZXN0U2V0Qml0KCkpJiZlLnJTaGlmdFRvKG4sZSksMDw9dC5jb21wYXJlVG8oZSk/KHQuc3ViVG8oZSx0KSx0LnJTaGlmdFRvKDEsdCkpOihlLnN1YlRvKHQsZSksZS5yU2hpZnRUbygxLGUpKTtyZXR1cm4gMDxpJiZlLmxTaGlmdFRvKGksZSksZX0sbS5wcm90b3R5cGUuaXNQcm9iYWJsZVByaW1lPWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5hYnMoKTtpZigxPT1uLnQmJm5bMF08PXhbeC5sZW5ndGgtMV0pe2Zvcih0PTA7dDx4Lmxlbmd0aDsrK3QpaWYoblswXT09eFt0XSlyZXR1cm4hMDtyZXR1cm4hMX1pZihuLmlzRXZlbigpKXJldHVybiExO2Zvcih0PTE7dDx4Lmxlbmd0aDspe2Zvcih2YXIgaT14W3RdLHI9dCsxO3I8eC5sZW5ndGgmJmk8TzspaSo9eFtyKytdO2ZvcihpPW4ubW9kSW50KGkpO3Q8cjspaWYoaSV4W3QrK109PTApcmV0dXJuITF9cmV0dXJuIG4ubWlsbGVyUmFiaW4oZSl9LG0ucHJvdG90eXBlLnNxdWFyZT1mdW5jdGlvbigpe3ZhciBlPXAoKTtyZXR1cm4gdGhpcy5zcXVhcmVUbyhlKSxlfSxZPVtdLFA9TWF0aCxDPTUyLFAuc2VlZHJhbmRvbT1mdW5jdGlvbihlLHQpe3ZhciBuPVtdLGU9VyhmdW5jdGlvbiBlKHQsbixpLHIsYSl7aWYoaT1bXSxhPXZvaWQgMD09PXQ/InVuZGVmaW5lZCI6KDAscy5kZWZhdWx0KSh0KSxuJiYib2JqZWN0Ij09YSlmb3IociBpbiB0KWlmKHIuaW5kZXhPZigiUyIpPDUpdHJ5e2kucHVzaChlKHRbcl0sbi0xKSl9Y2F0Y2goZSl7fXJldHVybiBpLmxlbmd0aD9pOnQrKCJzdHJpbmciIT1hPyJcMCI6IiIpfSh0P1tlLFldOmFyZ3VtZW50cy5sZW5ndGg/ZTpbKG5ldyBEYXRlKS5nZXRUaW1lKCksWSx3aW5kb3ddLDMpLG4pLGk9bmV3IEkobik7cmV0dXJuIFcoaS5TLFkpLFAucmFuZG9tPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWkuZyg2KSx0PUEsbj0wO2U8QzspZT0yNTYqKGUrbiksdCo9MjU2LG49aS5nKDEpO2Zvcig7Ujw9ZTspZS89Mix0Lz0yLG4+Pj49MTtyZXR1cm4oZStuKS90fSxlfSxBPVAucG93KDI1Niw2KSxDPVAucG93KDIsQyksUj0yKkMsVyhQLnJhbmRvbSgpLFkpLEgucHJvdG90eXBlLm5leHRCeXRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKyllW3RdPU1hdGguZmxvb3IoMjU2Kk1hdGgucmFuZG9tKCkpfSxqLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLGk9MDtpPDI1NjsrK2kpdGhpcy5TW2ldPWk7Zm9yKGk9dD0wO2k8MjU2OysraSl0PXQrdGhpcy5TW2ldK2VbaSVlLmxlbmd0aF0mMjU1LG49dGhpcy5TW2ldLHRoaXMuU1tpXT10aGlzLlNbdF0sdGhpcy5TW3RdPW47dGhpcy5qPXRoaXMuaT0wfSxqLnByb3RvdHlwZS5uZXh0PWZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIHRoaXMuaT10aGlzLmkrMSYyNTUsdGhpcy5qPXRoaXMuait0aGlzLlNbdGhpcy5pXSYyNTUsZT10aGlzLlNbdGhpcy5pXSx0aGlzLlNbdGhpcy5pXT10aGlzLlNbdGhpcy5qXSx0aGlzLlNbdGhpcy5qXT1lLHRoaXMuU1tlK3RoaXMuU1t0aGlzLmldJjI1NV19O3ZhciBGLEI9MjU2O2Z1bmN0aW9uIFUoKXt2YXIgZTtlPShuZXcgRGF0ZSkuZ2V0VGltZSgpLE5beisrXV49MjU1JmUsTlt6KytdXj1lPj44JjI1NSxOW3orK11ePWU+PjE2JjI1NSxOW3orK11ePWU+PjI0JjI1NSxCPD16JiYoei09Qil9aWYobnVsbD09Til7dmFyIE49W10sej0wO2lmKCJOZXRzY2FwZSI9PW8mJnU8IjUiJiZ3aW5kb3cuY3J5cHRvKWZvcih2YXIgVj13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMiksRz0wO0c8Vi5sZW5ndGg7KytHKU5beisrXT0yNTUmVi5jaGFyQ29kZUF0KEcpO2Zvcig7ejxCOylHPU1hdGguZmxvb3IoNjU1MzYqTWF0aC5yYW5kb20oKSksTlt6KytdPUc+Pj44LE5beisrXT0yNTUmRzt6PTAsVSgpfWZ1bmN0aW9uIEooKXtpZihudWxsPT1GKXtmb3IoVSgpLChGPW5ldyBqKS5pbml0KE4pLHo9MDt6PE4ubGVuZ3RoOysreilOW3pdPTA7ej0wfXJldHVybiBGLm5leHQoKX1mdW5jdGlvbiBxKCl7fXEucHJvdG90eXBlLm5leHRCeXRlcz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCllW3RdPUooKX07dmFyIEs9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7bjw0KmUubGVuZ3RoO24rKyl0Kz0iMDEyMzQ1Njc4OWFiY2RlZiIuY2hhckF0KGVbbj4+Ml0+PjgqKDMtbiU0KSs0JjE1KSsiMDEyMzQ1Njc4OWFiY2RlZiIuY2hhckF0KGVbbj4+Ml0+PjgqKDMtbiU0KSYxNSk7cmV0dXJuIHR9KGZ1bmN0aW9uKGUsdCl7dmFyIG4saSxyLGEscyxvLHUsZCxsLGgsYyxfLGY9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sbT1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHA9QXJyYXkoNjQpO2ZvcihlW3Q+PjVdfD0xMjg8PDI0LXQlMzIsZVsxNSsoNjQrdD4+OTw8NCldPXQsbD0wO2w8ZS5sZW5ndGg7bCs9MTYpe2ZvcihuPW1bMF0saT1tWzFdLHI9bVsyXSxhPW1bM10scz1tWzRdLG89bVs1XSx1PW1bNl0sZD1tWzddLGg9MDtoPDY0O2grKylwW2hdPWg8MTY/ZVtoK2xdOnkoeSh5KHYocFtoLTJdLDE3KV52KHBbaC0yXSwxOSlecFtoLTJdPj4+MTAscFtoLTddKSx2KHBbaC0xNV0sNyledihwW2gtMTVdLDE4KV5wW2gtMTVdPj4+MykscFtoLTE2XSksYz15KHkoeSh5KGQsdihzLDYpXnYocywxMSledihzLDI1KSkscyZvXn5zJnUpLGZbaF0pLHBbaF0pLF89eSh2KG4sMiledihuLDEzKV52KG4sMjIpLG4maV5uJnJeaSZyKSxkPXUsdT1vLG89cyxzPXkoYSxjKSxhPXIscj1pLGk9bixuPXkoYyxfKTttWzBdPXkobixtWzBdKSxtWzFdPXkoaSxtWzFdKSxtWzJdPXkocixtWzJdKSxtWzNdPXkoYSxtWzNdKSxtWzRdPXkocyxtWzRdKSxtWzVdPXkobyxtWzVdKSxtWzZdPXkodSxtWzZdKSxtWzddPXkoZCxtWzddKX1yZXR1cm4gbX0oZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPDgqZS5sZW5ndGg7bis9OCl0W24+PjVdfD0oMjU1JmUuY2hhckNvZGVBdChuLzgpKTw8MjQtbiUzMjtyZXR1cm4gdH0oZT1mdW5jdGlvbihlKXtmb3IodmFyIGU9ZS5yZXBsYWNlKC9cclxuL2csIlxuIiksdD0iIixuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWUuY2hhckNvZGVBdChuKTtpPDEyOD90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpOigxMjc8aSYmaTwyMDQ4P3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoaT4+NnwxOTIpOih0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGk+PjEyfDIyNCksdCs9U3RyaW5nLmZyb21DaGFyQ29kZShpPj42JjYzfDEyOCkpLHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNjMmaXwxMjgpKX1yZXR1cm4gdH0oZT1lKSksOCplLmxlbmd0aCkpO2Z1bmN0aW9uIHkoZSx0KXt2YXIgbj0oNjU1MzUmZSkrKDY1NTM1JnQpO3JldHVybihlPj4xNikrKHQ+PjE2KSsobj4+MTYpPDwxNnw2NTUzNSZufWZ1bmN0aW9uIHYoZSx0KXtyZXR1cm4gZT4+PnR8ZTw8MzItdH19O3U9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3JldHVybiBlPDx0fGU+Pj4zMi10fWZ1bmN0aW9uIG4oZSl7Zm9yKHZhciB0PSIiLG49NzswPD1uO24tLSl0Kz0oZT4+PjQqbiYxNSkudG9TdHJpbmcoMTYpO3JldHVybiB0fWZvcih2YXIgaSxyLGEscyxvLHU9QXJyYXkoODApLGQ9MTczMjU4NDE5MyxsPTQwMjMyMzM0MTcsaD0yNTYyMzgzMTAyLGM9MjcxNzMzODc4LF89MzI4NTM3NzUyMCxmPShlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgZT1lLnJlcGxhY2UoL1xyXG4vZywiXG4iKSx0PSIiLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZS5jaGFyQ29kZUF0KG4pO2k8MTI4P3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoaSk6KDEyNzxpJiZpPDIwNDg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShpPj42fDE5Mik6KHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaT4+MTJ8MjI0KSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGk+PjYmNjN8MTI4KSksdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg2MyZpfDEyOCkpfXJldHVybiB0fShlKSkubGVuZ3RoLG09W10scD0wO3A8Zi0zO3ArPTQpaT1lLmNoYXJDb2RlQXQocCk8PDI0fGUuY2hhckNvZGVBdChwKzEpPDwxNnxlLmNoYXJDb2RlQXQocCsyKTw8OHxlLmNoYXJDb2RlQXQocCszKSxtLnB1c2goaSk7c3dpdGNoKGYlNCl7Y2FzZSAwOnA9MjE0NzQ4MzY0ODticmVhaztjYXNlIDE6cD1lLmNoYXJDb2RlQXQoZi0xKTw8MjR8ODM4ODYwODticmVhaztjYXNlIDI6cD1lLmNoYXJDb2RlQXQoZi0yKTw8MjR8ZS5jaGFyQ29kZUF0KGYtMSk8PDE2fDMyNzY4O2JyZWFrO2Nhc2UgMzpwPWUuY2hhckNvZGVBdChmLTMpPDwyNHxlLmNoYXJDb2RlQXQoZi0yKTw8MTZ8ZS5jaGFyQ29kZUF0KGYtMSk8PDh8MTI4fWZvcihtLnB1c2gocCk7bS5sZW5ndGglMTYhPTE0OyltLnB1c2goMCk7Zm9yKG0ucHVzaChmPj4+MjkpLG0ucHVzaChmPDwzJjQyOTQ5NjcyOTUpLGU9MDtlPG0ubGVuZ3RoO2UrPTE2KXtmb3IocD0wO3A8MTY7cCsrKXVbcF09bVtlK3BdO2ZvcihwPTE2O3A8PTc5O3ArKyl1W3BdPXQodVtwLTNdXnVbcC04XV51W3AtMTRdXnVbcC0xNl0sMSk7Zm9yKGk9ZCxmPWwscj1oLGE9YyxzPV8scD0wO3A8PTE5O3ArKylvPXQoaSw1KSsoZiZyfH5mJmEpK3MrdVtwXSsxNTE4NTAwMjQ5JjQyOTQ5NjcyOTUscz1hLGE9cixyPXQoZiwzMCksZj1pLGk9bztmb3IocD0yMDtwPD0zOTtwKyspbz10KGksNSkrKGZecl5hKStzK3VbcF0rMTg1OTc3NTM5MyY0Mjk0OTY3Mjk1LHM9YSxhPXIscj10KGYsMzApLGY9aSxpPW87Zm9yKHA9NDA7cDw9NTk7cCsrKW89dChpLDUpKyhmJnJ8ZiZhfHImYSkrcyt1W3BdKzI0MDA5NTk3MDgmNDI5NDk2NzI5NSxzPWEsYT1yLHI9dChmLDMwKSxmPWksaT1vO2ZvcihwPTYwO3A8PTc5O3ArKylvPXQoaSw1KSsoZl5yXmEpK3MrdVtwXSszMzk1NDY5NzgyJjQyOTQ5NjcyOTUscz1hLGE9cixyPXQoZiwzMCksZj1pLGk9bztkPWQraSY0Mjk0OTY3Mjk1LGw9bCtmJjQyOTQ5NjcyOTUsaD1oK3ImNDI5NDk2NzI5NSxjPWMrYSY0Mjk0OTY3Mjk1LF89XytzJjQyOTQ5NjcyOTV9cmV0dXJuKG89bihkKStuKGwpK24oaCkrbihjKStuKF8pKS50b0xvd2VyQ2FzZSgpfTtmdW5jdGlvbiBYKGUsdCl7cmV0dXJuIG5ldyBtKGUsdCl9ZnVuY3Rpb24gWigpe3RoaXMubj1udWxsLHRoaXMuZT0wLHRoaXMuY29lZmY9dGhpcy5kbXExPXRoaXMuZG1wMT10aGlzLnE9dGhpcy5wPXRoaXMuZD1udWxsfVoucHJvdG90eXBlLmRvUHVibGljPWZ1bmN0aW9uKGUpe3JldHVybiBlLm1vZFBvd0ludCh0aGlzLmUsdGhpcy5uKX0sWi5wcm90b3R5cGUuc2V0UHVibGljPWZ1bmN0aW9uKGUsdCl7bnVsbCE9ZSYmbnVsbCE9dCYmMDxlLmxlbmd0aCYmMDx0Lmxlbmd0aD8odGhpcy5uPVgoZSwxNiksdGhpcy5lPXBhcnNlSW50KHQsMTYpKTphbGVydCgiSW52YWxpZCBSU0EgcHVibGljIGtleSIpfSxaLnByb3RvdHlwZS5lbmNyeXB0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT0oZT1mdW5jdGlvbihlLHQpe2lmKHQ8ZS5sZW5ndGgrMTEpdGhyb3ciTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBIChuPSIrdCsiLCBsPSIrZS5sZW5ndGgrIikiO2Zvcih2YXIgbj1bXSxpPWUubGVuZ3RoLTE7MDw9aSYmMDx0Oyl7dmFyIHI9ZS5jaGFyQ29kZUF0KGktLSk7cjwxMjg/blstLXRdPXI6MTI3PHImJnI8MjA0OD8oblstLXRdPTYzJnJ8MTI4LG5bLS10XT1yPj42fDE5Mik6KG5bLS10XT02MyZyfDEyOCxuWy0tdF09cj4+NiY2M3wxMjgsblstLXRdPXI+PjEyfDIyNCl9Zm9yKG5bLS10XT0wLGk9bmV3IHEscj1bXTsyPHQ7KXtmb3IoclswXT0wOzA9PXJbMF07KWkubmV4dEJ5dGVzKHIpO25bLS10XT1yWzBdfXJldHVybiBuWy0tdF09MixuWy0tdF09MCxuZXcgbShuKX0oZSx0aGlzLm4uYml0TGVuZ3RoKCkrNz4+MykpfHxudWxsPT0oZT10aGlzLmRvUHVibGljKGUpKT9udWxsOjA9PSgxJihlPWUudG9TdHJpbmcoMTYpKS5sZW5ndGgpP2U6IjAiK2V9LFoucHJvdG90eXBlLmRvUHJpdmF0ZT1mdW5jdGlvbihlKXtpZihudWxsPT10aGlzLnB8fG51bGw9PXRoaXMucSlyZXR1cm4gZS5tb2RQb3codGhpcy5kLHRoaXMubik7Zm9yKHZhciB0PWUubW9kKHRoaXMucCkubW9kUG93KHRoaXMuZG1wMSx0aGlzLnApLGU9ZS5tb2QodGhpcy5xKS5tb2RQb3codGhpcy5kbXExLHRoaXMucSk7dC5jb21wYXJlVG8oZSk8MDspdD10LmFkZCh0aGlzLnApO3JldHVybiB0LnN1YnRyYWN0KGUpLm11bHRpcGx5KHRoaXMuY29lZmYpLm1vZCh0aGlzLnApLm11bHRpcGx5KHRoaXMucSkuYWRkKGUpfSxaLnByb3RvdHlwZS5zZXRQcml2YXRlPWZ1bmN0aW9uKGUsdCxuKXtudWxsIT1lJiZudWxsIT10JiYwPGUubGVuZ3RoJiYwPHQubGVuZ3RoPyh0aGlzLm49WChlLDE2KSx0aGlzLmU9cGFyc2VJbnQodCwxNiksdGhpcy5kPVgobiwxNikpOmFsZXJ0KCJJbnZhbGlkIFJTQSBwcml2YXRlIGtleSIpfSxaLnByb3RvdHlwZS5zZXRQcml2YXRlRXg9ZnVuY3Rpb24oZSx0LG4saSxyLGEscyxvKXtudWxsIT1lJiZudWxsIT10JiYwPGUubGVuZ3RoJiYwPHQubGVuZ3RoPyh0aGlzLm49WChlLDE2KSx0aGlzLmU9cGFyc2VJbnQodCwxNiksdGhpcy5kPVgobiwxNiksdGhpcy5wPVgoaSwxNiksdGhpcy5xPVgociwxNiksdGhpcy5kbXAxPVgoYSwxNiksdGhpcy5kbXExPVgocywxNiksdGhpcy5jb2VmZj1YKG8sMTYpKTphbGVydCgiSW52YWxpZCBSU0EgcHJpdmF0ZSBrZXkiKX0sWi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgSCxpPWU+PjE7dGhpcy5lPXBhcnNlSW50KHQsMTYpO2Zvcih2YXIgcj1uZXcgbSh0LDE2KTs7KXtmb3IoO3RoaXMucD1uZXcgbShlLWksMSxuKSwwIT10aGlzLnAuc3VidHJhY3QobS5PTkUpLmdjZChyKS5jb21wYXJlVG8obS5PTkUpfHwhdGhpcy5wLmlzUHJvYmFibGVQcmltZSgxMCk7KTtmb3IoO3RoaXMucT1uZXcgbShpLDEsbiksMCE9dGhpcy5xLnN1YnRyYWN0KG0uT05FKS5nY2QocikuY29tcGFyZVRvKG0uT05FKXx8IXRoaXMucS5pc1Byb2JhYmxlUHJpbWUoMTApOyk7dGhpcy5wLmNvbXBhcmVUbyh0aGlzLnEpPD0wJiYoYT10aGlzLnAsdGhpcy5wPXRoaXMucSx0aGlzLnE9YSk7dmFyIGE9dGhpcy5wLnN1YnRyYWN0KG0uT05FKSxzPXRoaXMucS5zdWJ0cmFjdChtLk9ORSksbz1hLm11bHRpcGx5KHMpO2lmKDA9PW8uZ2NkKHIpLmNvbXBhcmVUbyhtLk9ORSkpe3RoaXMubj10aGlzLnAubXVsdGlwbHkodGhpcy5xKSx0aGlzLmQ9ci5tb2RJbnZlcnNlKG8pLHRoaXMuZG1wMT10aGlzLmQubW9kKGEpLHRoaXMuZG1xMT10aGlzLmQubW9kKHMpLHRoaXMuY29lZmY9dGhpcy5xLm1vZEludmVyc2UodGhpcy5wKTticmVha319fSxaLnByb3RvdHlwZS5kZWNyeXB0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT0oZT10aGlzLmRvUHJpdmF0ZShYKGUsMTYpKSk/bnVsbDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1lLnRvQnl0ZUFycmF5KCksaT0wO2k8bi5sZW5ndGgmJjA9PW5baV07KSsraTtpZihuLmxlbmd0aC1pIT10LTF8fDIhPW5baV0pcmV0dXJuIG51bGw7Zm9yKCsraTswIT1uW2ldOylpZigrK2k+PW4ubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgcj0iIjsrK2k8bi5sZW5ndGg7KXt2YXIgYT0yNTUmbltpXTthPDEyOD9yKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpOjE5MTxhJiZhPDIyND8ocis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmYSk8PDZ8NjMmbltpKzFdKSwrK2kpOihyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZhKTw8MTJ8KDYzJm5baSsxXSk8PDZ8NjMmbltpKzJdKSxpKz0yKX1yZXR1cm4gcn0oZSx0aGlzLm4uYml0TGVuZ3RoKCkrNz4+Myl9O3ZhciAkPVtdOyQuc2hhMT0iMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0IiwkLnNoYTI1Nj0iMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAiO3ZhciBRPVtdO2Z1bmN0aW9uIGVlKGUsdCxuKXt0Lz00O2Zvcih2YXIgZT0oMCxRW25dKShlKSxuPSIwMCIrJFtuXStlLGU9IiIsdD10LTQtbi5sZW5ndGgsaT0wO2k8dDtpKz0yKWUrPSJmZiI7cmV0dXJuIHNQYWRkZWRNZXNzYWdlSGV4PSIwMDAxIitlK259ZnVuY3Rpb24gdGUoZSx0LG4pe3JldHVybiBpPWUsZT10LHQ9biwobj1uZXcgWikuc2V0UHVibGljKGUsdCksbi5kb1B1YmxpYyhpKS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLywiIik7dmFyIGl9ZnVuY3Rpb24gbmUoZSl7Zm9yKHZhciB0IGluICQpe3ZhciBuPSRbdF0saT1uLmxlbmd0aDtpZihlLnN1YnN0cmluZygwLGkpPT1uKXJldHVyblt0LGUuc3Vic3RyaW5nKGkpXX1yZXR1cm5bXX1RLnNoYTE9dSxRLnNoYTI1Nj1LLFoucHJvdG90eXBlLnNpZ25TdHJpbmc9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD1lZShlLHRoaXMubi5iaXRMZW5ndGgoKSx0KSx0aGlzLmRvUHJpdmF0ZShYKHQsMTYpKS50b1N0cmluZygxNil9LFoucHJvdG90eXBlLnNpZ25TdHJpbmdXaXRoU0hBMT1mdW5jdGlvbihlKXtyZXR1cm4gZT1lZShlLHRoaXMubi5iaXRMZW5ndGgoKSwic2hhMSIpLHRoaXMuZG9Qcml2YXRlKFgoZSwxNikpLnRvU3RyaW5nKDE2KX0sWi5wcm90b3R5cGUuc2lnblN0cmluZ1dpdGhTSEEyNTY9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZWUoZSx0aGlzLm4uYml0TGVuZ3RoKCksInNoYTI1NiIpLHRoaXMuZG9Qcml2YXRlKFgoZSwxNikpLnRvU3RyaW5nKDE2KX0sWi5wcm90b3R5cGUudmVyaWZ5U3RyaW5nPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dC5yZXBsYWNlKC9bIFxuXSsvZywiIiksMCE9KHQ9bmUodGhpcy5kb1B1YmxpYyhYKHQsMTYpKS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLywiIikpKS5sZW5ndGgmJnRbMV09PSh0PSgwLFFbdFswXV0pKGUpKX0sWi5wcm90b3R5cGUudmVyaWZ5SGV4U2lnbmF0dXJlRm9yTWVzc2FnZT1mdW5jdGlvbihlLHQpe3ZhciBuLGk9WChlLDE2KTtyZXR1cm4gbj10LGU9aSx0PXRoaXMubi50b1N0cmluZygxNiksaT10aGlzLmUudG9TdHJpbmcoMTYpLDAhPSh0PW5lKGU9dGUoZSx0LGkpKSkubGVuZ3RoJiYoZT10WzFdKT09KG49KDAsUVt0WzBdXSkobikpfTt2YXIgaWUscmUsYWU9cmU9e1Nib3g6Wzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdLFNoaWZ0Um93VGFiOlswLDUsMTAsMTUsNCw5LDE0LDMsOCwxMywyLDcsMTIsMSw2LDExXSxJbml0OmZ1bmN0aW9uKCl7cmUuU2JveF9JbnY9QXJyYXkoMjU2KTtmb3IodmFyIGU9MDtlPDI1NjtlKyspcmUuU2JveF9JbnZbcmUuU2JveFtlXV09ZTtmb3IocmUuU2hpZnRSb3dUYWJfSW52PUFycmF5KDE2KSxlPTA7ZTwxNjtlKyspcmUuU2hpZnRSb3dUYWJfSW52W3JlLlNoaWZ0Um93VGFiW2VdXT1lO2ZvcihyZS54dGltZT1BcnJheSgyNTYpLGU9MDtlPDEyODtlKyspcmUueHRpbWVbZV09ZTw8MSxyZS54dGltZVsxMjgrZV09ZTw8MV4yN30sRG9uZTpmdW5jdGlvbigpe2RlbGV0ZSByZS5TYm94X0ludixkZWxldGUgcmUuU2hpZnRSb3dUYWJfSW52LGRlbGV0ZSByZS54dGltZX0sRXhwYW5kS2V5OmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS5sZW5ndGgsaT0xO3N3aXRjaChuKXtjYXNlIDE2OnQ9MTc2O2JyZWFrO2Nhc2UgMjQ6dD0yMDg7YnJlYWs7Y2FzZSAzMjp0PTI0MDticmVhaztkZWZhdWx0OmFsZXJ0KCJteS5FeHBhbmRLZXk6IE9ubHkga2V5IGxlbmd0aHMgb2YgMTYsIDI0IG9yIDMyIGJ5dGVzIGFsbG93ZWQhIil9Zm9yKHZhciByPW47cjx0O3IrPTQpe3ZhciBhPWUuc2xpY2Uoci00LHIpO3Ilbj09MD8oYT1bcmUuU2JveFthWzFdXV5pLHJlLlNib3hbYVsyXV0scmUuU2JveFthWzNdXSxyZS5TYm94W2FbMF1dXSwyNTY8PShpPDw9MSkmJihpXj0yODMpKToyNDxuJiZyJW49PTE2JiYoYT1bcmUuU2JveFthWzBdXSxyZS5TYm94W2FbMV1dLHJlLlNib3hbYVsyXV0scmUuU2JveFthWzNdXV0pO2Zvcih2YXIgcz0wO3M8NDtzKyspZVtyK3NdPWVbcitzLW5dXmFbc119fSxFbmNyeXB0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5sZW5ndGg7cmUuQWRkUm91bmRLZXkoZSx0LnNsaWNlKDAsMTYpKTtmb3IodmFyIGk9MTY7aTxuLTE2O2krPTE2KXJlLlN1YkJ5dGVzKGUscmUuU2JveCkscmUuU2hpZnRSb3dzKGUscmUuU2hpZnRSb3dUYWIpLHJlLk1peENvbHVtbnMoZSkscmUuQWRkUm91bmRLZXkoZSx0LnNsaWNlKGksaSsxNikpO3JlLlN1YkJ5dGVzKGUscmUuU2JveCkscmUuU2hpZnRSb3dzKGUscmUuU2hpZnRSb3dUYWIpLHJlLkFkZFJvdW5kS2V5KGUsdC5zbGljZShpLG4pKX0sRGVjcnlwdDpmdW5jdGlvbihlLHQpe3ZhciBuPXQubGVuZ3RoO2ZvcihyZS5BZGRSb3VuZEtleShlLHQuc2xpY2Uobi0xNixuKSkscmUuU2hpZnRSb3dzKGUscmUuU2hpZnRSb3dUYWJfSW52KSxyZS5TdWJCeXRlcyhlLHJlLlNib3hfSW52KSxuLT0zMjsxNjw9bjtuLT0xNilyZS5BZGRSb3VuZEtleShlLHQuc2xpY2UobixuKzE2KSkscmUuTWl4Q29sdW1uc19JbnYoZSkscmUuU2hpZnRSb3dzKGUscmUuU2hpZnRSb3dUYWJfSW52KSxyZS5TdWJCeXRlcyhlLHJlLlNib3hfSW52KTtyZS5BZGRSb3VuZEtleShlLHQuc2xpY2UoMCwxNikpfSxTdWJCeXRlczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248MTY7bisrKWVbbl09dFtlW25dXX0sQWRkUm91bmRLZXk6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPDE2O24rKyllW25dXj10W25dfSxTaGlmdFJvd3M6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49W10uY29uY2F0KGUpLGk9MDtpPDE2O2krKyllW2ldPW5bdFtpXV19LE1peENvbHVtbnM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDwxNjt0Kz00KXt2YXIgbj1lW3QrMF0saT1lW3QrMV0scj1lW3QrMl0sYT1lW3QrM10scz1uXmlecl5hO2VbdCswXV49c15yZS54dGltZVtuXmldLGVbdCsxXV49c15yZS54dGltZVtpXnJdLGVbdCsyXV49c15yZS54dGltZVtyXmFdLGVbdCszXV49c15yZS54dGltZVthXm5dfX0sTWl4Q29sdW1uc19JbnY6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDwxNjt0Kz00KXt2YXIgbj1lW3QrMF0saT1lW3QrMV0scj1lW3QrMl0sYT1lW3QrM10scz1uXmlecl5hLG89cmUueHRpbWVbc10sdT1yZS54dGltZVtyZS54dGltZVtvXm5ecl1dXnM7c149cmUueHRpbWVbcmUueHRpbWVbb15pXmFdXSxlW3QrMF1ePXVecmUueHRpbWVbbl5pXSxlW3QrMV1ePXNecmUueHRpbWVbaV5yXSxlW3QrMl1ePXVecmUueHRpbWVbcl5hXSxlW3QrM11ePXNecmUueHRpbWVbYV5uXX19fSx1PShpZT17fSxhZS5Jbml0KCksaWUuYjI1NnRvNjQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4saT0iIixyPTAsYT1lLmxlbmd0aCxzPTA7czxhO3MrKyluPWUuY2hhckNvZGVBdChzKSwwPT1yPyhpKz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuY2hhckF0KG4+PjImNjMpLHQ9KDMmbik8PDQpOjE9PXI/KGkrPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQXQodHxuPj40JjE1KSx0PSgxNSZuKTw8Mik6Mj09ciYmKGkrPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQXQodHxuPj42JjMpLGkrPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQXQoNjMmbikpLDM9PShyKz0xKSYmKHI9MCk7cmV0dXJuIDA8ciYmKGkrPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQXQodCksaSs9Ij0iKSwxPT1yJiYoaSs9Ij0iKSxpfSxpZS5iNjR0bzI1Nj1mdW5jdGlvbihlKXtmb3IodmFyIHQsbj0iIixpPTAscj0wLGE9ZS5sZW5ndGgscz0wO3M8YTtzKyspMDw9KHQ9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLmluZGV4T2YoZS5jaGFyQXQocykpKSYmKGkmJihuKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJ8dD4+Ni1pJjI1NSkpLHI9dDw8KGk9aSsyJjcpJjI1NSk7cmV0dXJuIG59LGllLmIxNnRvNjQ9ZnVuY3Rpb24oZSl7dmFyIHQsbixpPSIiO2ZvcihlLmxlbmd0aCUyPT0xJiYoZT0iMCIrZSksdD0wO3QrMzw9ZS5sZW5ndGg7dCs9MyluPXBhcnNlSW50KGUuc3Vic3RyaW5nKHQsdCszKSwxNiksaSs9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLmNoYXJBdChuPj42KSsiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuY2hhckF0KDYzJm4pO2Zvcih0KzE9PWUubGVuZ3RoPyhuPXBhcnNlSW50KGUuc3Vic3RyaW5nKHQsdCsxKSwxNiksaSs9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLmNoYXJBdChuPDwyKSk6dCsyPT1lLmxlbmd0aCYmKG49cGFyc2VJbnQoZS5zdWJzdHJpbmcodCx0KzIpLDE2KSxpKz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuY2hhckF0KG4+PjIpKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIi5jaGFyQXQoKDMmbik8PDQpKTswPCgzJmkubGVuZ3RoKTspaSs9Ij0iO3JldHVybiBpfSxpZS5iNjR0bzE2PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPSIiLGk9MCxyPTA7cjxlLmxlbmd0aCYmIj0iIT1lLmNoYXJBdChyKTsrK3Ipdj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIuaW5kZXhPZihlLmNoYXJBdChyKSksdjwwfHwoaT0wPT1pPyhuKz1fKHY+PjIpLHQ9MyZ2LDEpOjE9PWk/KG4rPV8odDw8Mnx2Pj40KSx0PTE1JnYsMik6Mj09aT8obis9Xyh0KSxuKz1fKHY+PjIpLHQ9MyZ2LDMpOihuKz1fKHQ8PDJ8dj4+NCksbis9XygxNSZ2KSwwKSk7cmV0dXJuIDE9PWkmJihuKz1fKHQ8PDIpKSxufSxpZS5zdHJpbmcyYnl0ZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49MDtuPGUubGVuZ3RoO24rKyl0LnB1c2goZS5jaGFyQ29kZUF0KG4pKTtyZXR1cm4gdH0saWUuYnl0ZXMyc3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0iIixuPTA7bjxlLmxlbmd0aDtuKyspdCs9U3RyaW5nLmZyb21DaGFyQ29kZShlW25dKTtyZXR1cm4gdH0saWUuYmxvY2tYT1I9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49QXJyYXkoMTYpLGk9MDtpPDE2O2krKyluW2ldPWVbaV1edFtpXTtyZXR1cm4gbn0saWUuYmxvY2tJVj1mdW5jdGlvbigpe3ZhciBlPW5ldyBxLHQ9QXJyYXkoMTYpO3JldHVybiBlLm5leHRCeXRlcyh0KSx0fSxpZS5wYWQxNj1mdW5jdGlvbihlKXt2YXIgdD1lLnNsaWNlKDApLG49KDE2LWUubGVuZ3RoJTE2KSUxNjtmb3IoaT1lLmxlbmd0aDtpPGUubGVuZ3RoK247aSsrKXQucHVzaCgwKTtyZXR1cm4gdH0saWUuZGVwYWQ9ZnVuY3Rpb24oZSl7Zm9yKGU9ZS5zbGljZSgwKTswPT1lW2UubGVuZ3RoLTFdOyllPWUuc2xpY2UoMCxlLmxlbmd0aC0xKTtyZXR1cm4gZX0saWUuZW5jcnlwdEFFU0NCQz1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc2xpY2UoMCk7YWUuRXhwYW5kS2V5KG4pO2Zvcih2YXIgaT1pZS5zdHJpbmcyYnl0ZXMoZSksaT1pZS5wYWQxNihpKSxyPWllLmJsb2NrSVYoKSxhPTA7YTxpLmxlbmd0aC8xNjthKyspe3ZhciBzPWkuc2xpY2UoMTYqYSwxNiphKzE2KSxvPXIuc2xpY2UoMTYqYSwxNiphKzE2KSxzPWllLmJsb2NrWE9SKG8scyk7YWUuRW5jcnlwdChzLG4pLHI9ci5jb25jYXQocyl9cmV0dXJuIG49aWUuYnl0ZXMyc3RyaW5nKHIpLGllLmIyNTZ0bzY0KG4pfSxpZS5kZWNyeXB0QUVTQ0JDPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zbGljZSgwKTthZS5FeHBhbmRLZXkobik7Zm9yKHZhciBlPWllLmI2NHRvMjU2KGUpLGk9aWUuc3RyaW5nMmJ5dGVzKGUpLHI9W10sYT0xO2E8aS5sZW5ndGgvMTY7YSsrKXt2YXIgcz1pLnNsaWNlKDE2KmEsMTYqYSsxNiksbz1pLnNsaWNlKDE2KihhLTEpLDE2KihhLTEpKzE2KTthZS5EZWNyeXB0KHMsbikscz1pZS5ibG9ja1hPUihvLHMpLHI9ci5jb25jYXQocyl9cmV0dXJuIHI9aWUuZGVwYWQociksaWUuYnl0ZXMyc3RyaW5nKHIpfSxpZS53cmFwNjA9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSIiLG49MDtuPGUubGVuZ3RoO24rKyluJTYwPT0wJiYwIT1uJiYodCs9IlxuIiksdCs9ZVtuXTtyZXR1cm4gdH0saWUuZ2VuZXJhdGVBRVNLZXk9ZnVuY3Rpb24oKXt2YXIgZT1BcnJheSgxNik7cmV0dXJuKG5ldyBxKS5uZXh0Qnl0ZXMoZSksZX0saWUuZ2VuZXJhdGVSU0FLZXk9ZnVuY3Rpb24oZSx0KXtNYXRoLnNlZWRyYW5kb20oSyhlKSk7ZT1uZXcgWjtyZXR1cm4gZS5nZW5lcmF0ZSh0LCIxMDAwMSIpLGV9LGllLnB1YmxpY0tleVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gcHVia2V5PWUubi50b1N0cmluZygxNil9LGllLnB1YmxpY0tleUlEPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG8oZSx0KXt2YXIgbj0yMTQ3NDgzNjQ4JmUsaT0yMTQ3NDgzNjQ4JnQscj0xMDczNzQxODI0JmUsYT0xMDczNzQxODI0JnQsdD0oMTA3Mzc0MTgyMyZlKSsoMTA3Mzc0MTgyMyZ0KTtyZXR1cm4gciZhPzIxNDc0ODM2NDhedF5uXmk6cnxhPzEwNzM3NDE4MjQmdD8zMjIxMjI1NDcyXnRebl5pOjEwNzM3NDE4MjRedF5uXmk6dF5uXml9ZnVuY3Rpb24gdChlLHQsbixpLHIsYSxzKXtyZXR1cm4gZT1vKGUsbyhvKHQmbnx+dCZpLHIpLHMpKSxvKGU8PGF8ZT4+PjMyLWEsdCl9ZnVuY3Rpb24gbihlLHQsbixpLHIsYSxzKXtyZXR1cm4gZT1vKGUsbyhvKHQmaXxuJn5pLHIpLHMpKSxvKGU8PGF8ZT4+PjMyLWEsdCl9ZnVuY3Rpb24gaShlLHQsbixpLHIsYSxzKXtyZXR1cm4gZT1vKGUsbyhvKHRebl5pLHIpLHMpKSxvKGU8PGF8ZT4+PjMyLWEsdCl9ZnVuY3Rpb24gcihlLHQsbixpLHIsYSxzKXtyZXR1cm4gZT1vKGUsbyhvKG5eKHR8fmkpLHIpLHMpKSxvKGU8PGF8ZT4+PjMyLWEsdCl9ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9IiIsbj0iIixpPTA7aTw9MztpKyspdCs9KG49IjAiKyhuPWU+Pj44KmkmMjU1KS50b1N0cmluZygxNikpLnN1YnN0cihuLmxlbmd0aC0yLDIpO3JldHVybiB0fXZhciBzLHUsZCxsLGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49ZS5sZW5ndGgsaT1uKzgscj0xNiooKGktaSU2NCkvNjQrMSksYT1BcnJheShyLTEpLHM9MDtzPG47KXQ9cyU0KjgsYVsocy1zJTQpLzRdfD1lLmNoYXJDb2RlQXQocyk8PHQscysrO3JldHVybiBhWyhzLXMlNCkvNF18PTEyODw8cyU0KjgsYVtyLTJdPW48PDMsYVtyLTFdPW4+Pj4yOSxhfShlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgZT1lLnJlcGxhY2UoL1xyXG4vZywiXG4iKSx0PSIiLG49MDtuPGUubGVuZ3RoO24rKyl7dmFyIGk9ZS5jaGFyQ29kZUF0KG4pO2k8MTI4P3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoaSk6KDEyNzxpJiZpPDIwNDg/dCs9U3RyaW5nLmZyb21DaGFyQ29kZShpPj42fDE5Mik6KHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoaT4+MTJ8MjI0KSx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKGk+PjYmNjN8MTI4KSksdCs9U3RyaW5nLmZyb21DaGFyQ29kZSg2MyZpfDEyOCkpfXJldHVybiB0fShlKSksYz0xNzMyNTg0MTkzLF89NDAyMzIzMzQxNyxmPTI1NjIzODMxMDIsbT0yNzE3MzM4Nzg7Zm9yKGU9MDtlPGgubGVuZ3RoO2UrPTE2KWM9dChzPWMsdT1fLGQ9ZixsPW0saFtlKzBdLDcsMzYxNDA5MDM2MCksbT10KG0sYyxfLGYsaFtlKzFdLDEyLDM5MDU0MDI3MTApLGY9dChmLG0sYyxfLGhbZSsyXSwxNyw2MDYxMDU4MTkpLF89dChfLGYsbSxjLGhbZSszXSwyMiwzMjUwNDQxOTY2KSxjPXQoYyxfLGYsbSxoW2UrNF0sNyw0MTE4NTQ4Mzk5KSxtPXQobSxjLF8sZixoW2UrNV0sMTIsMTIwMDA4MDQyNiksZj10KGYsbSxjLF8saFtlKzZdLDE3LDI4MjE3MzU5NTUpLF89dChfLGYsbSxjLGhbZSs3XSwyMiw0MjQ5MjYxMzEzKSxjPXQoYyxfLGYsbSxoW2UrOF0sNywxNzcwMDM1NDE2KSxtPXQobSxjLF8sZixoW2UrOV0sMTIsMjMzNjU1Mjg3OSksZj10KGYsbSxjLF8saFtlKzEwXSwxNyw0Mjk0OTI1MjMzKSxfPXQoXyxmLG0sYyxoW2UrMTFdLDIyLDIzMDQ1NjMxMzQpLGM9dChjLF8sZixtLGhbZSsxMl0sNywxODA0NjAzNjgyKSxtPXQobSxjLF8sZixoW2UrMTNdLDEyLDQyNTQ2MjYxOTUpLGY9dChmLG0sYyxfLGhbZSsxNF0sMTcsMjc5Mjk2NTAwNiksYz1uKGMsXz10KF8sZixtLGMsaFtlKzE1XSwyMiwxMjM2NTM1MzI5KSxmLG0saFtlKzFdLDUsNDEyOTE3MDc4NiksbT1uKG0sYyxfLGYsaFtlKzZdLDksMzIyNTQ2NTY2NCksZj1uKGYsbSxjLF8saFtlKzExXSwxNCw2NDM3MTc3MTMpLF89bihfLGYsbSxjLGhbZSswXSwyMCwzOTIxMDY5OTk0KSxjPW4oYyxfLGYsbSxoW2UrNV0sNSwzNTkzNDA4NjA1KSxtPW4obSxjLF8sZixoW2UrMTBdLDksMzgwMTYwODMpLGY9bihmLG0sYyxfLGhbZSsxNV0sMTQsMzYzNDQ4ODk2MSksXz1uKF8sZixtLGMsaFtlKzRdLDIwLDM4ODk0Mjk0NDgpLGM9bihjLF8sZixtLGhbZSs5XSw1LDU2ODQ0NjQzOCksbT1uKG0sYyxfLGYsaFtlKzE0XSw5LDMyNzUxNjM2MDYpLGY9bihmLG0sYyxfLGhbZSszXSwxNCw0MTA3NjAzMzM1KSxfPW4oXyxmLG0sYyxoW2UrOF0sMjAsMTE2MzUzMTUwMSksYz1uKGMsXyxmLG0saFtlKzEzXSw1LDI4NTAyODU4MjkpLG09bihtLGMsXyxmLGhbZSsyXSw5LDQyNDM1NjM1MTIpLGY9bihmLG0sYyxfLGhbZSs3XSwxNCwxNzM1MzI4NDczKSxjPWkoYyxfPW4oXyxmLG0sYyxoW2UrMTJdLDIwLDIzNjgzNTk1NjIpLGYsbSxoW2UrNV0sNCw0Mjk0NTg4NzM4KSxtPWkobSxjLF8sZixoW2UrOF0sMTEsMjI3MjM5MjgzMyksZj1pKGYsbSxjLF8saFtlKzExXSwxNiwxODM5MDMwNTYyKSxfPWkoXyxmLG0sYyxoW2UrMTRdLDIzLDQyNTk2NTc3NDApLGM9aShjLF8sZixtLGhbZSsxXSw0LDI3NjM5NzUyMzYpLG09aShtLGMsXyxmLGhbZSs0XSwxMSwxMjcyODkzMzUzKSxmPWkoZixtLGMsXyxoW2UrN10sMTYsNDEzOTQ2OTY2NCksXz1pKF8sZixtLGMsaFtlKzEwXSwyMywzMjAwMjM2NjU2KSxjPWkoYyxfLGYsbSxoW2UrMTNdLDQsNjgxMjc5MTc0KSxtPWkobSxjLF8sZixoW2UrMF0sMTEsMzkzNjQzMDA3NCksZj1pKGYsbSxjLF8saFtlKzNdLDE2LDM1NzI0NDUzMTcpLF89aShfLGYsbSxjLGhbZSs2XSwyMyw3NjAyOTE4OSksYz1pKGMsXyxmLG0saFtlKzldLDQsMzY1NDYwMjgwOSksbT1pKG0sYyxfLGYsaFtlKzEyXSwxMSwzODczMTUxNDYxKSxmPWkoZixtLGMsXyxoW2UrMTVdLDE2LDUzMDc0MjUyMCksYz1yKGMsXz1pKF8sZixtLGMsaFtlKzJdLDIzLDMyOTk2Mjg2NDUpLGYsbSxoW2UrMF0sNiw0MDk2MzM2NDUyKSxtPXIobSxjLF8sZixoW2UrN10sMTAsMTEyNjg5MTQxNSksZj1yKGYsbSxjLF8saFtlKzE0XSwxNSwyODc4NjEyMzkxKSxfPXIoXyxmLG0sYyxoW2UrNV0sMjEsNDIzNzUzMzI0MSksYz1yKGMsXyxmLG0saFtlKzEyXSw2LDE3MDA0ODU1NzEpLG09cihtLGMsXyxmLGhbZSszXSwxMCwyMzk5OTgwNjkwKSxmPXIoZixtLGMsXyxoW2UrMTBdLDE1LDQyOTM5MTU3NzMpLF89cihfLGYsbSxjLGhbZSsxXSwyMSwyMjQwMDQ0NDk3KSxjPXIoYyxfLGYsbSxoW2UrOF0sNiwxODczMzEzMzU5KSxtPXIobSxjLF8sZixoW2UrMTVdLDEwLDQyNjQzNTU1NTIpLGY9cihmLG0sYyxfLGhbZSs2XSwxNSwyNzM0NzY4OTE2KSxfPXIoXyxmLG0sYyxoW2UrMTNdLDIxLDEzMDkxNTE2NDkpLGM9cihjLF8sZixtLGhbZSs0XSw2LDQxNDk0NDQyMjYpLG09cihtLGMsXyxmLGhbZSsxMV0sMTAsMzE3NDc1NjkxNyksZj1yKGYsbSxjLF8saFtlKzJdLDE1LDcxODc4NzI1OSksXz1yKF8sZixtLGMsaFtlKzldLDIxLDM5NTE0ODE3NDUpLGM9byhjLHMpLF89byhfLHUpLGY9byhmLGQpLG09byhtLGwpO3JldHVybihhKGMpK2EoXykrYShmKSthKG0pKS50b0xvd2VyQ2FzZSgpfSxpZS5wdWJsaWNLZXlGcm9tU3RyaW5nPWZ1bmN0aW9uKGUpe3ZhciBlPWUuc3BsaXQoInwiKVswXSx0PW5ldyBaO3JldHVybiB0LnNldFB1YmxpYyhlLCIxMDAwMSIpLHR9LGllLmVuY3J5cHQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciBpPSIiO3RyeXtpKz1pZS5wdWJsaWNLZXlGcm9tU3RyaW5nKHQpLmVuY3J5cHQoZSkrIj8ifWNhdGNoKGUpe3JldHVybntzdGF0dXM6IkludmFsaWQgcHVibGljIGtleSJ9fXJldHVybntzdGF0dXM6InN1Y2Nlc3MiLGNpcGhlcjppfX0saWUuZGVjcnlwdD1mdW5jdGlvbihlLHQpe2U9ZS5zcGxpdCgiPyIpO3JldHVybntzdGF0dXM6InN1Y2Nlc3MiLHBsYWludGV4dDp0LmRlY3J5cHQoZVswXSksc2lnbmF0dXJlOiJ1bnNpZ25lZCJ9fSxpZSk7ZS5leHBvcnRzPXV9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigyNzYpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7bigzNyksbig1NSksZS5leHBvcnRzPW4oNjUpLmYoIml0ZXJhdG9yIil9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigyNzgpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7bigyNzkpLG4oNDUpLG4oMjgyKSxuKDI4MyksZS5leHBvcnRzPW4oMykuU3ltYm9sfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9VltlXT1FKFdbRl0pO3JldHVybiB0Ll9rPWUsdH1mdW5jdGlvbiByKGUsdCl7UyhlKTtmb3IodmFyIG4saT1NKHQ9dyh0KSkscj0wLGE9aS5sZW5ndGg7cjxhOylRKGUsbj1pW3IrK10sdFtuXSk7cmV0dXJuIGV9ZnVuY3Rpb24gYShlKXt2YXIgdD1OLmNhbGwodGhpcyxlPUQoZSwhMCkpO3JldHVybiEodGhpcz09PUomJnUoVixlKSYmIXUoRyxlKSkmJighKHR8fCF1KHRoaXMsZSl8fCF1KFYsZSl8fHUodGhpcyxCKSYmdGhpc1tCXVtlXSl8fHQpfWZ1bmN0aW9uIHMoZSx0KXtpZihlPXcoZSksdD1EKHQsITApLGUhPT1KfHwhdShWLHQpfHx1KEcsdCkpe3ZhciBuPXgoZSx0KTtyZXR1cm4hbnx8IXUoVix0KXx8dShlLEIpJiZlW0JdW3RdfHwobi5lbnVtZXJhYmxlPSEwKSxufX12YXIgbz1uKDUpLHU9bigyMCksZD1uKDExKSxsPW4oNCksaD1uKDc3KSxjPW4oNjYpLktFWSxfPW4oMTkpLGY9big1MyksbT1uKDMzKSxwPW4oNDApLHk9big4KSx2PW4oNjUpLGc9big2NyksTT1uKDI4MCksTD1uKDk3KSxTPW4oMTYpLGs9bigxMCksYj1uKDIyKSx3PW4oMjEpLEQ9big1MCksVD1uKDI5KSxFPW4oMzgpLFk9bigyODEpLFA9big2OSksQz1uKDY4KSxSPW4oOSksQT1uKDMxKSx4PVAuZixPPVIuZixJPVkuZixXPW8uU3ltYm9sLEg9by5KU09OLGo9SCYmSC5zdHJpbmdpZnksRj0icHJvdG90eXBlIixCPXkoIl9oaWRkZW4iKSxVPXkoInRvUHJpbWl0aXZlIiksTj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSx6PWYoInN5bWJvbC1yZWdpc3RyeSIpLFY9Zigic3ltYm9scyIpLEc9Zigib3Atc3ltYm9scyIpLEo9T2JqZWN0W0ZdLHE9ImZ1bmN0aW9uIj09dHlwZW9mIFcmJiEhQy5mLEs9by5RT2JqZWN0LFg9IUt8fCFLW0ZdfHwhS1tGXS5maW5kQ2hpbGQsWj1kJiZfKGZ1bmN0aW9uKCl7cmV0dXJuIDchPUUoTyh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBPKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKGUsdCxuKXt2YXIgaT14KEosdCk7aSYmZGVsZXRlIEpbdF0sTyhlLHQsbiksaSYmZSE9PUomJk8oSix0LGkpfTpPLCQ9cSYmInN5bWJvbCI9PXR5cGVvZiBXLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBXfSxRPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PUomJlEoRyx0LG4pLFMoZSksdD1EKHQsITApLFMobiksdShWLHQpPyhuLmVudW1lcmFibGU/KHUoZSxCKSYmZVtCXVt0XSYmKGVbQl1bdF09ITEpLG49RShuLHtlbnVtZXJhYmxlOlQoMCwhMSl9KSk6KHUoZSxCKXx8TyhlLEIsVCgxLHt9KSksZVtCXVt0XT0hMCksWihlLHQsbikpOk8oZSx0LG4pfSxmPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPUkodyhlKSksaT1bXSxyPTA7bi5sZW5ndGg+cjspdShWLHQ9bltyKytdKXx8dD09Qnx8dD09Y3x8aS5wdXNoKHQpO3JldHVybiBpfSxLPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWU9PT1KLGk9SShuP0c6dyhlKSkscj1bXSxhPTA7aS5sZW5ndGg+YTspIXUoVix0PWlbYSsrXSl8fG4mJiF1KEosdCl8fHIucHVzaChWW3RdKTtyZXR1cm4gcn07cXx8KGgoKFc9ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgVyl0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEiKTt2YXIgdD1wKDA8YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwKSxuPWZ1bmN0aW9uKGUpe3RoaXM9PT1KJiZuLmNhbGwoRyxlKSx1KHRoaXMsQikmJnUodGhpc1tCXSx0KSYmKHRoaXNbQl1bdF09ITEpLFoodGhpcyx0LFQoMSxlKSl9O3JldHVybiBkJiZYJiZaKEosdCx7Y29uZmlndXJhYmxlOiEwLHNldDpufSksaSh0KX0pW0ZdLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLFAuZj1zLFIuZj1RLG4oOTgpLmY9WS5mPWYsbig0MSkuZj1hLEMuZj1LLGQmJiFuKDI3KSYmaChKLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsYSwhMCksdi5mPWZ1bmN0aW9uKGUpe3JldHVybiBpKHkoZSkpfSksbChsLkcrbC5XK2wuRiohcSx7U3ltYm9sOld9KTtmb3IodmFyIGVlPSJoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcyIuc3BsaXQoIiwiKSx0ZT0wO2VlLmxlbmd0aD50ZTspeShlZVt0ZSsrXSk7Zm9yKHZhciBuZT1BKHkuc3RvcmUpLGllPTA7bmUubGVuZ3RoPmllOylnKG5lW2llKytdKTtsKGwuUytsLkYqIXEsIlN5bWJvbCIse2ZvcjpmdW5jdGlvbihlKXtyZXR1cm4gdSh6LGUrPSIiKT96W2VdOnpbZV09VyhlKX0sa2V5Rm9yOmZ1bmN0aW9uKGUpe2lmKCEkKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgdCBpbiB6KWlmKHpbdF09PT1lKXJldHVybiB0fSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtYPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtYPSExfX0pLGwobC5TK2wuRiohcSwiT2JqZWN0Iix7Y3JlYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/RShlKTpyKEUoZSksdCl9LGRlZmluZVByb3BlcnR5OlEsZGVmaW5lUHJvcGVydGllczpyLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpzLGdldE93blByb3BlcnR5TmFtZXM6ZixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6S30pO0s9XyhmdW5jdGlvbigpe0MuZigxKX0pO2wobC5TK2wuRipLLCJPYmplY3QiLHtnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ZnVuY3Rpb24oZSl7cmV0dXJuIEMuZihiKGUpKX19KSxIJiZsKGwuUytsLkYqKCFxfHxfKGZ1bmN0aW9uKCl7dmFyIGU9VygpO3JldHVybiJbbnVsbF0iIT1qKFtlXSl8fCJ7fSIhPWooe2E6ZX0pfHwie30iIT1qKE9iamVjdChlKSl9KSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG4saT1bZV0scj0xO3I8YXJndW1lbnRzLmxlbmd0aDspaS5wdXNoKGFyZ3VtZW50c1tyKytdKTtpZihuPXQ9aVsxXSwoayh0KXx8dm9pZCAwIT09ZSkmJiEkKGUpKXJldHVybiBMKHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuJiYodD1uLmNhbGwodGhpcyxlLHQpKSwhJCh0KSlyZXR1cm4gdH0pLGlbMV09dCxqLmFwcGx5KEgsaSl9fSksV1tGXVtVXXx8bigxOCkoV1tGXSxVLFdbRl0udmFsdWVPZiksbShXLCJTeW1ib2wiKSxtKE1hdGgsIk1hdGgiLCEwKSxtKG8uSlNPTiwiSlNPTiIsITApfSxmdW5jdGlvbihlLHQsbil7dmFyIG89bigzMSksdT1uKDY4KSxkPW4oNDEpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1vKGUpLG49dS5mO2lmKG4pZm9yKHZhciBpLHI9bihlKSxhPWQuZixzPTA7ci5sZW5ndGg+czspYS5jYWxsKGUsaT1yW3MrK10pJiZ0LnB1c2goaSk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMSkscj1uKDk4KS5mLGE9e30udG9TdHJpbmcscz0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBzJiYiW29iamVjdCBXaW5kb3ddIj09YS5jYWxsKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gcihlKX1jYXRjaChlKXtyZXR1cm4gcy5zbGljZSgpfX0oZSk6cihpKGUpKX19LGZ1bmN0aW9uKGUsdCxuKXtuKDY3KSgiYXN5bmNJdGVyYXRvciIpfSxmdW5jdGlvbihlLHQsbil7big2NykoIm9ic2VydmFibGUiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHUsaSxyLGEsZCxzLEU9ZnVuY3Rpb24obyl7ZnVuY3Rpb24gbigpe312YXIgZT17fSx0PWUubGliPXt9LGk9dC5CYXNlPXtleHRlbmQ6ZnVuY3Rpb24oZSl7bi5wcm90b3R5cGU9dGhpczt2YXIgdD1uZXcgbjtyZXR1cm4gZSYmdC5taXhJbihlKSx0Lmhhc093blByb3BlcnR5KCJpbml0Iil8fCh0LmluaXQ9ZnVuY3Rpb24oKXt0LiRzdXBlci5pbml0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLCh0LmluaXQucHJvdG90eXBlPXQpLiRzdXBlcj10aGlzLHR9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIGUuaW5pdC5hcHBseShlLGFyZ3VtZW50cyksZX0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpZS5oYXNPd25Qcm9wZXJ0eSh0KSYmKHRoaXNbdF09ZVt0XSk7ZS5oYXNPd25Qcm9wZXJ0eSgidG9TdHJpbmciKSYmKHRoaXMudG9TdHJpbmc9ZS50b1N0cmluZyl9LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX0sdT10LldvcmRBcnJheT1pLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihlLHQpe2U9dGhpcy53b3Jkcz1lfHxbXSx0aGlzLnNpZ0J5dGVzPW51bGwhPXQ/dDo0KmUubGVuZ3RofSx0b1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4oZXx8YSkuc3RyaW5naWZ5KHRoaXMpfSxjb25jYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy53b3JkcyxuPWUud29yZHMsaT10aGlzLnNpZ0J5dGVzO2lmKGU9ZS5zaWdCeXRlcyx0aGlzLmNsYW1wKCksaSU0KWZvcih2YXIgcj0wO3I8ZTtyKyspdFtpK3I+Pj4yXXw9KG5bcj4+PjJdPj4+MjQtciU0KjgmMjU1KTw8MjQtKGkrciklNCo4O2Vsc2UgaWYoNjU1MzU8bi5sZW5ndGgpZm9yKHI9MDtyPGU7cis9NCl0W2krcj4+PjJdPW5bcj4+PjJdO2Vsc2UgdC5wdXNoLmFwcGx5KHQsbik7cmV0dXJuIHRoaXMuc2lnQnl0ZXMrPWUsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLndvcmRzLHQ9dGhpcy5zaWdCeXRlcztlW3Q+Pj4yXSY9NDI5NDk2NzI5NTw8MzItdCU0KjgsZS5sZW5ndGg9by5jZWlsKHQvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9aS5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksZX0scmFuZG9tOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlO24rPTQpdC5wdXNoKDQyOTQ5NjcyOTYqby5yYW5kb20oKXwwKTtyZXR1cm4gbmV3IHUuaW5pdCh0LGUpfX0pLHI9ZS5lbmM9e30sYT1yLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3ZhciB0PWUud29yZHM7ZT1lLnNpZ0J5dGVzO2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krKyl7dmFyIHI9dFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTU7bi5wdXNoKChyPj4+NCkudG9TdHJpbmcoMTYpKSxuLnB1c2goKDE1JnIpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIG4uam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aCxuPVtdLGk9MDtpPHQ7aSs9MiluW2k+Pj4zXXw9cGFyc2VJbnQoZS5zdWJzdHIoaSwyKSwxNik8PDI0LWklOCo0O3JldHVybiBuZXcgdS5pbml0KG4sdC8yKX19LHM9ci5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihlKXt2YXIgdD1lLndvcmRzO2U9ZS5zaWdCeXRlcztmb3IodmFyIG49W10saT0wO2k8ZTtpKyspbi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUodFtpPj4+Ml0+Pj4yNC1pJTQqOCYyNTUpKTtyZXR1cm4gbi5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoLG49W10saT0wO2k8dDtpKyspbltpPj4+Ml18PSgyNTUmZS5jaGFyQ29kZUF0KGkpKTw8MjQtaSU0Kjg7cmV0dXJuIG5ldyB1LmluaXQobix0KX19LGQ9ci5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHMuc3RyaW5naWZ5KGUpKSl9Y2F0Y2goZSl7dGhyb3cgRXJyb3IoIk1hbGZvcm1lZCBVVEYtOCBkYXRhIil9fSxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gcy5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpKX19LGw9dC5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtPWkuZXh0ZW5kKHtyZXNldDpmdW5jdGlvbigpe3RoaXMuX2RhdGE9bmV3IHUuaW5pdCx0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1kLnBhcnNlKGUpKSx0aGlzLl9kYXRhLmNvbmNhdChlKSx0aGlzLl9uRGF0YUJ5dGVzKz1lLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9kYXRhLG49dC53b3JkcyxpPXQuc2lnQnl0ZXMscj10aGlzLmJsb2NrU2l6ZSxhPWkvKDQqciksYT1lP28uY2VpbChhKTpvLm1heCgoMHxhKS10aGlzLl9taW5CdWZmZXJTaXplLDApLGk9by5taW4oNCooZT1hKnIpLGkpO2lmKGUpe2Zvcih2YXIgcz0wO3M8ZTtzKz1yKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKG4scyk7cz1uLnNwbGljZSgwLGUpLHQuc2lnQnl0ZXMtPWl9cmV0dXJuIG5ldyB1LmluaXQocyxpKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgZT1pLmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIGUuX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLGV9LF9taW5CdWZmZXJTaXplOjB9KTt0Lkhhc2hlcj1sLmV4dGVuZCh7Y2ZnOmkuZXh0ZW5kKCksaW5pdDpmdW5jdGlvbihlKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQoZSksdGhpcy5yZXNldCgpfSxyZXNldDpmdW5jdGlvbigpe2wucmVzZXQuY2FsbCh0aGlzKSx0aGlzLl9kb1Jlc2V0KCl9LHVwZGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fYXBwZW5kKGUpLHRoaXMuX3Byb2Nlc3MoKSx0aGlzfSxmaW5hbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fYXBwZW5kKGUpLHRoaXMuX2RvRmluYWxpemUoKX0sYmxvY2tTaXplOjE2LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyBuLmluaXQodCkuZmluYWxpemUoZSl9fSxfY3JlYXRlSG1hY0hlbHBlcjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IGguSE1BQy5pbml0KG4sdCkuZmluYWxpemUoZSl9fX0pO3ZhciBoPWUuYWxnbz17fTtyZXR1cm4gZX0oTWF0aCk7dT1FLmxpYi5Xb3JkQXJyYXksRS5lbmMuQmFzZTY0PXtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53b3JkcyxuPWUuc2lnQnl0ZXMsaT10aGlzLl9tYXA7ZS5jbGFtcCgpLGU9W107Zm9yKHZhciByPTA7cjxuO3IrPTMpZm9yKHZhciBhPSh0W3I+Pj4yXT4+PjI0LXIlNCo4JjI1NSk8PDE2fCh0W3IrMT4+PjJdPj4+MjQtKHIrMSklNCo4JjI1NSk8PDh8dFtyKzI+Pj4yXT4+PjI0LShyKzIpJTQqOCYyNTUscz0wO3M8NCYmcisuNzUqczxuO3MrKyllLnB1c2goaS5jaGFyQXQoYT4+PjYqKDMtcykmNjMpKTtpZih0PWkuY2hhckF0KDY0KSlmb3IoO2UubGVuZ3RoJTQ7KWUucHVzaCh0KTtyZXR1cm4gZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGgsbj10aGlzLl9tYXA7IShhPW4uY2hhckF0KDY0KSl8fC0xIT0oYT1lLmluZGV4T2YoYSkpJiYodD1hKTtmb3IodmFyIGkscixhPVtdLHM9MCxvPTA7bzx0O28rKylvJTQmJihpPW4uaW5kZXhPZihlLmNoYXJBdChvLTEpKTw8byU0KjIscj1uLmluZGV4T2YoZS5jaGFyQXQobykpPj4+Ni1vJTQqMixhW3M+Pj4yXXw9KGl8cik8PDI0LXMlNCo4LHMrKyk7cmV0dXJuIHUuY3JlYXRlKGEscyl9LF9tYXA6IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89In0sZnVuY3Rpb24oYSl7ZnVuY3Rpb24gayhlLHQsbixpLHIsYSxzKXtyZXR1cm4oKGU9ZSsodCZufH50JmkpK3Ircyk8PGF8ZT4+PjMyLWEpK3R9ZnVuY3Rpb24gYihlLHQsbixpLHIsYSxzKXtyZXR1cm4oKGU9ZSsodCZpfG4mfmkpK3Ircyk8PGF8ZT4+PjMyLWEpK3R9ZnVuY3Rpb24gdyhlLHQsbixpLHIsYSxzKXtyZXR1cm4oKGU9ZSsodF5uXmkpK3Ircyk8PGF8ZT4+PjMyLWEpK3R9ZnVuY3Rpb24gRChlLHQsbixpLHIsYSxzKXtyZXR1cm4oKGU9ZSsobl4odHx+aSkpK3Ircyk8PGF8ZT4+PjMyLWEpK3R9Zm9yKHZhciBlPUUsdD0oaT1lLmxpYikuV29yZEFycmF5LG49aS5IYXNoZXIsaT1lLmFsZ28sVD1bXSxyPTA7cjw2NDtyKyspVFtyXT00Mjk0OTY3Mjk2KmEuYWJzKGEuc2luKHIrMSkpfDA7aT1pLk1ENT1uLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB0LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MDtuPDE2O24rKyl7dmFyIGk9ZVtyPXQrbl07ZVtyXT0xNjcxMTkzNSYoaTw8OHxpPj4+MjQpfDQyNzgyNTUzNjAmKGk8PDI0fGk+Pj44KX12YXIgbj10aGlzLl9oYXNoLndvcmRzLHI9ZVt0KzBdLGk9ZVt0KzFdLGE9ZVt0KzJdLHM9ZVt0KzNdLG89ZVt0KzRdLHU9ZVt0KzVdLGQ9ZVt0KzZdLGw9ZVt0KzddLGg9ZVt0KzhdLGM9ZVt0KzldLF89ZVt0KzEwXSxmPWVbdCsxMV0sbT1lW3QrMTJdLHA9ZVt0KzEzXSx5PWVbdCsxNF0sdj1lW3QrMTVdLGc9ayhnPW5bMF0sUz1uWzFdLEw9blsyXSxNPW5bM10sciw3LFRbMF0pLE09ayhNLGcsUyxMLGksMTIsVFsxXSksTD1rKEwsTSxnLFMsYSwxNyxUWzJdKSxTPWsoUyxMLE0sZyxzLDIyLFRbM10pLGc9ayhnLFMsTCxNLG8sNyxUWzRdKSxNPWsoTSxnLFMsTCx1LDEyLFRbNV0pLEw9ayhMLE0sZyxTLGQsMTcsVFs2XSksUz1rKFMsTCxNLGcsbCwyMixUWzddKSxnPWsoZyxTLEwsTSxoLDcsVFs4XSksTT1rKE0sZyxTLEwsYywxMixUWzldKSxMPWsoTCxNLGcsUyxfLDE3LFRbMTBdKSxTPWsoUyxMLE0sZyxmLDIyLFRbMTFdKSxnPWsoZyxTLEwsTSxtLDcsVFsxMl0pLE09ayhNLGcsUyxMLHAsMTIsVFsxM10pLEw9ayhMLE0sZyxTLHksMTcsVFsxNF0pLGc9YihnLFM9ayhTLEwsTSxnLHYsMjIsVFsxNV0pLEwsTSxpLDUsVFsxNl0pLE09YihNLGcsUyxMLGQsOSxUWzE3XSksTD1iKEwsTSxnLFMsZiwxNCxUWzE4XSksUz1iKFMsTCxNLGcsciwyMCxUWzE5XSksZz1iKGcsUyxMLE0sdSw1LFRbMjBdKSxNPWIoTSxnLFMsTCxfLDksVFsyMV0pLEw9YihMLE0sZyxTLHYsMTQsVFsyMl0pLFM9YihTLEwsTSxnLG8sMjAsVFsyM10pLGc9YihnLFMsTCxNLGMsNSxUWzI0XSksTT1iKE0sZyxTLEwseSw5LFRbMjVdKSxMPWIoTCxNLGcsUyxzLDE0LFRbMjZdKSxTPWIoUyxMLE0sZyxoLDIwLFRbMjddKSxnPWIoZyxTLEwsTSxwLDUsVFsyOF0pLE09YihNLGcsUyxMLGEsOSxUWzI5XSksTD1iKEwsTSxnLFMsbCwxNCxUWzMwXSksZz13KGcsUz1iKFMsTCxNLGcsbSwyMCxUWzMxXSksTCxNLHUsNCxUWzMyXSksTT13KE0sZyxTLEwsaCwxMSxUWzMzXSksTD13KEwsTSxnLFMsZiwxNixUWzM0XSksUz13KFMsTCxNLGcseSwyMyxUWzM1XSksZz13KGcsUyxMLE0saSw0LFRbMzZdKSxNPXcoTSxnLFMsTCxvLDExLFRbMzddKSxMPXcoTCxNLGcsUyxsLDE2LFRbMzhdKSxTPXcoUyxMLE0sZyxfLDIzLFRbMzldKSxnPXcoZyxTLEwsTSxwLDQsVFs0MF0pLE09dyhNLGcsUyxMLHIsMTEsVFs0MV0pLEw9dyhMLE0sZyxTLHMsMTYsVFs0Ml0pLFM9dyhTLEwsTSxnLGQsMjMsVFs0M10pLGc9dyhnLFMsTCxNLGMsNCxUWzQ0XSksTT13KE0sZyxTLEwsbSwxMSxUWzQ1XSksTD13KEwsTSxnLFMsdiwxNixUWzQ2XSksZz1EKGcsUz13KFMsTCxNLGcsYSwyMyxUWzQ3XSksTCxNLHIsNixUWzQ4XSksTT1EKE0sZyxTLEwsbCwxMCxUWzQ5XSksTD1EKEwsTSxnLFMseSwxNSxUWzUwXSksUz1EKFMsTCxNLGcsdSwyMSxUWzUxXSksZz1EKGcsUyxMLE0sbSw2LFRbNTJdKSxNPUQoTSxnLFMsTCxzLDEwLFRbNTNdKSxMPUQoTCxNLGcsUyxfLDE1LFRbNTRdKSxTPUQoUyxMLE0sZyxpLDIxLFRbNTVdKSxnPUQoZyxTLEwsTSxoLDYsVFs1Nl0pLE09RChNLGcsUyxMLHYsMTAsVFs1N10pLEw9RChMLE0sZyxTLGQsMTUsVFs1OF0pLFM9RChTLEwsTSxnLHAsMjEsVFs1OV0pLGc9RChnLFMsTCxNLG8sNixUWzYwXSksTT1EKE0sZyxTLEwsZiwxMCxUWzYxXSksTD1EKEwsTSxnLFMsYSwxNSxUWzYyXSksUz1EKFMsTCxNLGcsYywyMSxUWzYzXSk7blswXT1uWzBdK2d8MCxuWzFdPW5bMV0rU3wwLG5bMl09blsyXStMfDAsblszXT1uWzNdK018MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9kYXRhLHQ9ZS53b3JkcyxuPTgqdGhpcy5fbkRhdGFCeXRlcyxpPTgqZS5zaWdCeXRlczt0W2k+Pj41XXw9MTI4PDwyNC1pJTMyO3ZhciByPWEuZmxvb3Iobi80Mjk0OTY3Mjk2KTtmb3IodFsxNSsoNjQraT4+Pjk8PDQpXT0xNjcxMTkzNSYocjw8OHxyPj4+MjQpfDQyNzgyNTUzNjAmKHI8PDI0fHI+Pj44KSx0WzE0Kyg2NCtpPj4+OTw8NCldPTE2NzExOTM1JihuPDw4fG4+Pj4yNCl8NDI3ODI1NTM2MCYobjw8MjR8bj4+PjgpLGUuc2lnQnl0ZXM9NCoodC5sZW5ndGgrMSksdGhpcy5fcHJvY2VzcygpLHQ9KGU9dGhpcy5faGFzaCkud29yZHMsbj0wO248NDtuKyspaT10W25dLHRbbl09MTY3MTE5MzUmKGk8PDh8aT4+PjI0KXw0Mjc4MjU1MzYwJihpPDwyNHxpPj4+OCk7cmV0dXJuIGV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9bi5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBlLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxlfX0pLGUuTUQ1PW4uX2NyZWF0ZUhlbHBlcihpKSxlLkhtYWNNRDU9bi5fY3JlYXRlSG1hY0hlbHBlcihpKX0oTWF0aCkscj0oaT1FKS5saWIsYT1yLkJhc2UsZD1yLldvcmRBcnJheSxzPShyPWkuYWxnbykuRXZwS0RGPWEuZXh0ZW5kKHtjZmc6YS5leHRlbmQoe2tleVNpemU6NCxoYXNoZXI6ci5NRDUsaXRlcmF0aW9uczoxfSksaW5pdDpmdW5jdGlvbihlKXt0aGlzLmNmZz10aGlzLmNmZy5leHRlbmQoZSl9LGNvbXB1dGU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49KHM9dGhpcy5jZmcpLmhhc2hlci5jcmVhdGUoKSxpPWQuY3JlYXRlKCkscj1pLndvcmRzLGE9cy5rZXlTaXplLHM9cy5pdGVyYXRpb25zO3IubGVuZ3RoPGE7KXtvJiZuLnVwZGF0ZShvKTt2YXIgbz1uLnVwZGF0ZShlKS5maW5hbGl6ZSh0KTtuLnJlc2V0KCk7Zm9yKHZhciB1PTE7dTxzO3UrKylvPW4uZmluYWxpemUobyksbi5yZXNldCgpO2kuY29uY2F0KG8pfXJldHVybiBpLnNpZ0J5dGVzPTQqYSxpfX0pLGkuRXZwS0RGPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcy5jcmVhdGUobikuY29tcHV0ZShlLHQpfSxFLmxpYi5DaXBoZXJ8fGZ1bmN0aW9uKCl7dmFyIGU9KGM9RSkubGliLHQ9ZS5CYXNlLHM9ZS5Xb3JkQXJyYXksbj1lLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0saT1jLmVuYy5CYXNlNjQscj1jLmFsZ28uRXZwS0RGLGE9ZS5DaXBoZXI9bi5leHRlbmQoe2NmZzp0LmV4dGVuZCgpLGNyZWF0ZUVuY3J5cHRvcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNyZWF0ZSh0aGlzLl9FTkNfWEZPUk1fTU9ERSxlLHQpfSxjcmVhdGVEZWNyeXB0b3I6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5jcmVhdGUodGhpcy5fREVDX1hGT1JNX01PREUsZSx0KX0saW5pdDpmdW5jdGlvbihlLHQsbil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pLHRoaXMuX3hmb3JtTW9kZT1lLHRoaXMuX2tleT10LHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtuLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSxwcm9jZXNzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9hcHBlbmQoZSksdGhpcy5fcHJvY2VzcygpfSxmaW5hbGl6ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmdGhpcy5fYXBwZW5kKGUpLHRoaXMuX2RvRmluYWxpemUoKX0sa2V5U2l6ZTo0LGl2U2l6ZTo0LF9FTkNfWEZPUk1fTU9ERToxLF9ERUNfWEZPUk1fTU9ERToyLF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24oaSl7cmV0dXJue2VuY3J5cHQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybigic3RyaW5nIj09dHlwZW9mIHQ/XzpoKS5lbmNyeXB0KGksZSx0LG4pfSxkZWNyeXB0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4oInN0cmluZyI9PXR5cGVvZiB0P186aCkuZGVjcnlwdChpLGUsdCxuKX19fX0pO2UuU3RyZWFtQ2lwaGVyPWEuZXh0ZW5kKHtfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9jZXNzKCEwKX0sYmxvY2tTaXplOjF9KTtmdW5jdGlvbiBvKGUsdCxuKXt2YXIgaT10aGlzLl9pdjtpP3RoaXMuX2l2PXZvaWQgMDppPXRoaXMuX3ByZXZCbG9jaztmb3IodmFyIHI9MDtyPG47cisrKWVbdCtyXV49aVtyXX12YXIgdT1jLm1vZGU9e30sZD0oZS5CbG9ja0NpcGhlck1vZGU9dC5leHRlbmQoe2NyZWF0ZUVuY3J5cHRvcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLkVuY3J5cHRvci5jcmVhdGUoZSx0KX0sY3JlYXRlRGVjcnlwdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuRGVjcnlwdG9yLmNyZWF0ZShlLHQpfSxpbml0OmZ1bmN0aW9uKGUsdCl7dGhpcy5fY2lwaGVyPWUsdGhpcy5faXY9dH19KSkuZXh0ZW5kKCk7ZC5FbmNyeXB0b3I9ZC5leHRlbmQoe3Byb2Nlc3NCbG9jazpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2NpcGhlcixpPW4uYmxvY2tTaXplO28uY2FsbCh0aGlzLGUsdCxpKSxuLmVuY3J5cHRCbG9jayhlLHQpLHRoaXMuX3ByZXZCbG9jaz1lLnNsaWNlKHQsdCtpKX19KSxkLkRlY3J5cHRvcj1kLmV4dGVuZCh7cHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fY2lwaGVyLGk9bi5ibG9ja1NpemUscj1lLnNsaWNlKHQsdCtpKTtuLmRlY3J5cHRCbG9jayhlLHQpLG8uY2FsbCh0aGlzLGUsdCxpKSx0aGlzLl9wcmV2QmxvY2s9cn19KSx1PXUuQ0JDPWQsZD0oYy5wYWQ9e30pLlBrY3M3PXtwYWQ6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49NCp0LGk9KG49bi1lLnNpZ0J5dGVzJW4pPDwyNHxuPDwxNnxuPDw4fG4scj1bXSxhPTA7YTxuO2ErPTQpci5wdXNoKGkpO249cy5jcmVhdGUocixuKSxlLmNvbmNhdChuKX0sdW5wYWQ6ZnVuY3Rpb24oZSl7ZS5zaWdCeXRlcy09MjU1JmUud29yZHNbZS5zaWdCeXRlcy0xPj4+Ml19fSxlLkJsb2NrQ2lwaGVyPWEuZXh0ZW5kKHtjZmc6YS5jZmcuZXh0ZW5kKHttb2RlOnUscGFkZGluZzpkfSkscmVzZXQ6ZnVuY3Rpb24oKXthLnJlc2V0LmNhbGwodGhpcyk7dmFyIGUsdD0obj10aGlzLmNmZykuaXYsbj1uLm1vZGU7dGhpcy5feGZvcm1Nb2RlPT10aGlzLl9FTkNfWEZPUk1fTU9ERT9lPW4uY3JlYXRlRW5jcnlwdG9yOihlPW4uY3JlYXRlRGVjcnlwdG9yLHRoaXMuX21pbkJ1ZmZlclNpemU9MSksdGhpcy5fbW9kZT1lLmNhbGwobix0aGlzLHQmJnQud29yZHMpfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tb2RlLnByb2Nlc3NCbG9jayhlLHQpfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jZmcucGFkZGluZztyZXR1cm4gdGhpcy5feGZvcm1Nb2RlPT10aGlzLl9FTkNfWEZPUk1fTU9ERT8odC5wYWQodGhpcy5fZGF0YSx0aGlzLmJsb2NrU2l6ZSksZT10aGlzLl9wcm9jZXNzKCEwKSk6KGU9dGhpcy5fcHJvY2VzcyghMCksdC51bnBhZChlKSksZX0sYmxvY2tTaXplOjR9KTt2YXIgbD1lLkNpcGhlclBhcmFtcz10LmV4dGVuZCh7aW5pdDpmdW5jdGlvbihlKXt0aGlzLm1peEluKGUpfSx0b1N0cmluZzpmdW5jdGlvbihlKXtyZXR1cm4oZXx8dGhpcy5mb3JtYXR0ZXIpLnN0cmluZ2lmeSh0aGlzKX19KSx1PShjLmZvcm1hdD17fSkuT3BlblNTTD17c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2lwaGVydGV4dDtyZXR1cm4oKGU9ZS5zYWx0KT9zLmNyZWF0ZShbMTM5ODg5MzY4NCwxNzAxMDc2ODMxXSkuY29uY2F0KGUpLmNvbmNhdCh0KTp0KS50b1N0cmluZyhpKX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQsbj0oZT1pLnBhcnNlKGUpKS53b3JkcztyZXR1cm4gMTM5ODg5MzY4ND09blswXSYmMTcwMTA3NjgzMT09blsxXSYmKHQ9cy5jcmVhdGUobi5zbGljZSgyLDQpKSxuLnNwbGljZSgwLDQpLGUuc2lnQnl0ZXMtPTE2KSxsLmNyZWF0ZSh7Y2lwaGVydGV4dDplLHNhbHQ6dH0pfX0saD1lLlNlcmlhbGl6YWJsZUNpcGhlcj10LmV4dGVuZCh7Y2ZnOnQuZXh0ZW5kKHtmb3JtYXQ6dX0pLGVuY3J5cHQ6ZnVuY3Rpb24oZSx0LG4saSl7aT10aGlzLmNmZy5leHRlbmQoaSk7dmFyIHI9ZS5jcmVhdGVFbmNyeXB0b3IobixpKTtyZXR1cm4gdD1yLmZpbmFsaXplKHQpLHI9ci5jZmcsbC5jcmVhdGUoe2NpcGhlcnRleHQ6dCxrZXk6bixpdjpyLml2LGFsZ29yaXRobTplLG1vZGU6ci5tb2RlLHBhZGRpbmc6ci5wYWRkaW5nLGJsb2NrU2l6ZTplLmJsb2NrU2l6ZSxmb3JtYXR0ZXI6aS5mb3JtYXR9KX0sZGVjcnlwdDpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gaT10aGlzLmNmZy5leHRlbmQoaSksdD10aGlzLl9wYXJzZSh0LGkuZm9ybWF0KSxlLmNyZWF0ZURlY3J5cHRvcihuLGkpLmZpbmFsaXplKHQuY2lwaGVydGV4dCl9LF9wYXJzZTpmdW5jdGlvbihlLHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT90LnBhcnNlKGUsdGhpcyk6ZX19KSxjPShjLmtkZj17fSkuT3BlblNTTD17ZXhlY3V0ZTpmdW5jdGlvbihlLHQsbixpKXtyZXR1cm4gaT1pfHxzLnJhbmRvbSg4KSxlPXIuY3JlYXRlKHtrZXlTaXplOnQrbn0pLmNvbXB1dGUoZSxpKSxuPXMuY3JlYXRlKGUud29yZHMuc2xpY2UodCksNCpuKSxlLnNpZ0J5dGVzPTQqdCxsLmNyZWF0ZSh7a2V5OmUsaXY6bixzYWx0Oml9KX19LF89ZS5QYXNzd29yZEJhc2VkQ2lwaGVyPWguZXh0ZW5kKHtjZmc6aC5jZmcuZXh0ZW5kKHtrZGY6Y30pLGVuY3J5cHQ6ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJuIG49KGk9dGhpcy5jZmcuZXh0ZW5kKGkpKS5rZGYuZXhlY3V0ZShuLGUua2V5U2l6ZSxlLml2U2l6ZSksaS5pdj1uLml2LChlPWguZW5jcnlwdC5jYWxsKHRoaXMsZSx0LG4ua2V5LGkpKS5taXhJbihuKSxlfSxkZWNyeXB0OmZ1bmN0aW9uKGUsdCxuLGkpe3JldHVybiBpPXRoaXMuY2ZnLmV4dGVuZChpKSx0PXRoaXMuX3BhcnNlKHQsaS5mb3JtYXQpLG49aS5rZGYuZXhlY3V0ZShuLGUua2V5U2l6ZSxlLml2U2l6ZSx0LnNhbHQpLGkuaXY9bi5pdixoLmRlY3J5cHQuY2FsbCh0aGlzLGUsdCxuLmtleSxpKX19KX0oKSxmdW5jdGlvbigpe2Zvcih2YXIgZT1FLHQ9ZS5saWIuQmxvY2tDaXBoZXIsbj1lLmFsZ28scz1bXSxpPVtdLHI9W10sYT1bXSxvPVtdLHU9W10sZD1bXSxsPVtdLGg9W10sYz1bXSxfPVtdLGY9MDtmPDI1NjtmKyspX1tmXT1mPDEyOD9mPDwxOmY8PDFeMjgzO2Zvcih2YXIgbT0wLHA9MCxmPTA7ZjwyNTY7ZisrKXt2YXIgeT1wXnA8PDFecDw8Ml5wPDwzXnA8PDQ7c1ttXT15PXk+Pj44XjI1NSZ5Xjk5O3ZhciB2PV9baVt5XT1tXSxnPV9bdl0sTT1fW2ddLEw9MjU3Kl9beV1eMTY4NDMwMDgqeTtyW21dPUw8PDI0fEw+Pj44LGFbbV09TDw8MTZ8TD4+PjE2LG9bbV09TDw8OHxMPj4+MjQsdVttXT1MLGRbeV09KEw9MTY4NDMwMDkqTV42NTUzNypnXjI1Nyp2XjE2ODQzMDA4Km0pPDwyNHxMPj4+OCxsW3ldPUw8PDE2fEw+Pj4xNixoW3ldPUw8PDh8TD4+PjI0LGNbeV09TCxtPyhtPXZeX1tfW19bTV52XV1dLHBePV9bX1twXV0pOm09cD0xfXZhciBTPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XSxuPW4uQUVTPXQuZXh0ZW5kKHtfZG9SZXNldDpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PShpPXRoaXMuX2tleSkud29yZHMsbj1pLnNpZ0J5dGVzLzQsaT00KigodGhpcy5fblJvdW5kcz1uKzYpKzEpLHI9dGhpcy5fa2V5U2NoZWR1bGU9W10sYT0wO2E8aTthKyspYTxuP3JbYV09dFthXTooZT1yW2EtMV0sYSVuPzY8biYmND09YSVuJiYoZT1zW2U+Pj4yNF08PDI0fHNbZT4+PjE2JjI1NV08PDE2fHNbZT4+PjgmMjU1XTw8OHxzWzI1NSZlXSk6KGU9c1soZT1lPDw4fGU+Pj4yNCk+Pj4yNF08PDI0fHNbZT4+PjE2JjI1NV08PDE2fHNbZT4+PjgmMjU1XTw8OHxzWzI1NSZlXSxlXj1TW2EvbnwwXTw8MjQpLHJbYV09clthLW5dXmUpO2Zvcih0PXRoaXMuX2ludktleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKWE9aS1uLGU9biU0P3JbYV06clthLTRdLHRbbl09bjw0fHxhPD00P2U6ZFtzW2U+Pj4yNF1dXmxbc1tlPj4+MTYmMjU1XV1eaFtzW2U+Pj44JjI1NV1dXmNbc1syNTUmZV1dfSxlbmNyeXB0QmxvY2s6ZnVuY3Rpb24oZSx0KXt0aGlzLl9kb0NyeXB0QmxvY2soZSx0LHRoaXMuX2tleVNjaGVkdWxlLHIsYSxvLHUscyl9LGRlY3J5cHRCbG9jazpmdW5jdGlvbihlLHQpe3ZhciBuPWVbdCsxXTtlW3QrMV09ZVt0KzNdLGVbdCszXT1uLHRoaXMuX2RvQ3J5cHRCbG9jayhlLHQsdGhpcy5faW52S2V5U2NoZWR1bGUsZCxsLGgsYyxpKSxuPWVbdCsxXSxlW3QrMV09ZVt0KzNdLGVbdCszXT1ufSxfZG9DcnlwdEJsb2NrOmZ1bmN0aW9uKGUsdCxuLGkscixhLHMsbyl7Zm9yKHZhciB1PXRoaXMuX25Sb3VuZHMsZD1lW3RdXm5bMF0sbD1lW3QrMV1eblsxXSxoPWVbdCsyXV5uWzJdLGM9ZVt0KzNdXm5bM10sXz00LGY9MTtmPHU7ZisrKXZhciBtPWlbZD4+PjI0XV5yW2w+Pj4xNiYyNTVdXmFbaD4+PjgmMjU1XV5zWzI1NSZjXV5uW18rK10scD1pW2w+Pj4yNF1ecltoPj4+MTYmMjU1XV5hW2M+Pj44JjI1NV1ec1syNTUmZF1ebltfKytdLHk9aVtoPj4+MjRdXnJbYz4+PjE2JjI1NV1eYVtkPj4+OCYyNTVdXnNbMjU1JmxdXm5bXysrXSxjPWlbYz4+PjI0XV5yW2Q+Pj4xNiYyNTVdXmFbbD4+PjgmMjU1XV5zWzI1NSZoXV5uW18rK10sZD1tLGw9cCxoPXk7bT0ob1tkPj4+MjRdPDwyNHxvW2w+Pj4xNiYyNTVdPDwxNnxvW2g+Pj44JjI1NV08PDh8b1syNTUmY10pXm5bXysrXSxwPShvW2w+Pj4yNF08PDI0fG9baD4+PjE2JjI1NV08PDE2fG9bYz4+PjgmMjU1XTw8OHxvWzI1NSZkXSlebltfKytdLHk9KG9baD4+PjI0XTw8MjR8b1tjPj4+MTYmMjU1XTw8MTZ8b1tkPj4+OCYyNTVdPDw4fG9bMjU1JmxdKV5uW18rK10sYz0ob1tjPj4+MjRdPDwyNHxvW2Q+Pj4xNiYyNTVdPDwxNnxvW2w+Pj44JjI1NV08PDh8b1syNTUmaF0pXm5bXysrXSxlW3RdPW0sZVt0KzFdPXAsZVt0KzJdPXksZVt0KzNdPWN9LGtleVNpemU6OH0pO2UuQUVTPXQuX2NyZWF0ZUhlbHBlcihuKX0oKSx0LmRlZmF1bHQ9RX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Mb2NhbFNlcnZpY2U9dm9pZCAwO3ZhciBpPWEobig2NCkpLHI9YShuKDEpKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxhKG4oMikpLmRlZmF1bHQpKHMsW3trZXk6ImNyZWF0ZUNsaWVudE9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7cmV0dXJue3NvY2tldDplLGlkOnQscGxheVVSTDpuLGRldmljZVNlcmlhbDppLmRldmljZVNlcmlhbHx8IiIsdmVyaWZpY2F0aW9uQ29kZTppLnZlcmlmaWNhdGlvbkNvZGV8fCIiLHJlc29sdmU6bnVsbCxyZWplY3Q6bnVsbCxzdG9waW5nOiExfX19LHtrZXk6InBsYXlDbWQiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9e3NlcXVlbmNlOjAsY21kOiJyZWFscGxheSIsZGV2aWNlU2VyaWFsOmUuZGV2aWNlU2VyaWFsLHZlcmlmaWNhdGlvbkNvZGU6ZS52ZXJpZmljYXRpb25Db2RlLHVybDplLnBsYXlVUkx9O3JldHVybigwLGkuZGVmYXVsdCkoZSl9fSx7a2V5OiJwbGF5YmFja0NtZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe249e3NlcXVlbmNlOjAsY21kOiJwbGF5YmFjayIsZGV2aWNlU2VyaWFsOmUuZGV2aWNlU2VyaWFsLHZlcmlmaWNhdGlvbkNvZGU6ZS52ZXJpZmljYXRpb25Db2RlLHVybDplLnBsYXlVUkwsc3RhcnRUaW1lOnQsZW5kVGltZTpufTtyZXR1cm4oMCxpLmRlZmF1bHQpKG4pfX1dKSxuPXM7ZnVuY3Rpb24gcygpeygwLHIuZGVmYXVsdCkodGhpcyxzKX10LkxvY2FsU2VydmljZT1ufSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17Ii4vYWYiOjEwMCwiLi9hZi5qcyI6MTAwLCIuL2FyIjoxMDEsIi4vYXItZHoiOjEwMiwiLi9hci1kei5qcyI6MTAyLCIuL2FyLWt3IjoxMDMsIi4vYXIta3cuanMiOjEwMywiLi9hci1seSI6MTA0LCIuL2FyLWx5LmpzIjoxMDQsIi4vYXItbWEiOjEwNSwiLi9hci1tYS5qcyI6MTA1LCIuL2FyLXBzIjoxMDYsIi4vYXItcHMuanMiOjEwNiwiLi9hci1zYSI6MTA3LCIuL2FyLXNhLmpzIjoxMDcsIi4vYXItdG4iOjEwOCwiLi9hci10bi5qcyI6MTA4LCIuL2FyLmpzIjoxMDEsIi4vYXoiOjEwOSwiLi9hei5qcyI6MTA5LCIuL2JlIjoxMTAsIi4vYmUuanMiOjExMCwiLi9iZyI6MTExLCIuL2JnLmpzIjoxMTEsIi4vYm0iOjExMiwiLi9ibS5qcyI6MTEyLCIuL2JuIjoxMTMsIi4vYm4tYmQiOjExNCwiLi9ibi1iZC5qcyI6MTE0LCIuL2JuLmpzIjoxMTMsIi4vYm8iOjExNSwiLi9iby5qcyI6MTE1LCIuL2JyIjoxMTYsIi4vYnIuanMiOjExNiwiLi9icyI6MTE3LCIuL2JzLmpzIjoxMTcsIi4vY2EiOjExOCwiLi9jYS5qcyI6MTE4LCIuL2NzIjoxMTksIi4vY3MuanMiOjExOSwiLi9jdiI6MTIwLCIuL2N2LmpzIjoxMjAsIi4vY3kiOjEyMSwiLi9jeS5qcyI6MTIxLCIuL2RhIjoxMjIsIi4vZGEuanMiOjEyMiwiLi9kZSI6MTIzLCIuL2RlLWF0IjoxMjQsIi4vZGUtYXQuanMiOjEyNCwiLi9kZS1jaCI6MTI1LCIuL2RlLWNoLmpzIjoxMjUsIi4vZGUuanMiOjEyMywiLi9kdiI6MTI2LCIuL2R2LmpzIjoxMjYsIi4vZWwiOjEyNywiLi9lbC5qcyI6MTI3LCIuL2VuLWF1IjoxMjgsIi4vZW4tYXUuanMiOjEyOCwiLi9lbi1jYSI6MTI5LCIuL2VuLWNhLmpzIjoxMjksIi4vZW4tZ2IiOjEzMCwiLi9lbi1nYi5qcyI6MTMwLCIuL2VuLWllIjoxMzEsIi4vZW4taWUuanMiOjEzMSwiLi9lbi1pbCI6MTMyLCIuL2VuLWlsLmpzIjoxMzIsIi4vZW4taW4iOjEzMywiLi9lbi1pbi5qcyI6MTMzLCIuL2VuLW56IjoxMzQsIi4vZW4tbnouanMiOjEzNCwiLi9lbi1zZyI6MTM1LCIuL2VuLXNnLmpzIjoxMzUsIi4vZW8iOjEzNiwiLi9lby5qcyI6MTM2LCIuL2VzIjoxMzcsIi4vZXMtZG8iOjEzOCwiLi9lcy1kby5qcyI6MTM4LCIuL2VzLW14IjoxMzksIi4vZXMtbXguanMiOjEzOSwiLi9lcy11cyI6MTQwLCIuL2VzLXVzLmpzIjoxNDAsIi4vZXMuanMiOjEzNywiLi9ldCI6MTQxLCIuL2V0LmpzIjoxNDEsIi4vZXUiOjE0MiwiLi9ldS5qcyI6MTQyLCIuL2ZhIjoxNDMsIi4vZmEuanMiOjE0MywiLi9maSI6MTQ0LCIuL2ZpLmpzIjoxNDQsIi4vZmlsIjoxNDUsIi4vZmlsLmpzIjoxNDUsIi4vZm8iOjE0NiwiLi9mby5qcyI6MTQ2LCIuL2ZyIjoxNDcsIi4vZnItY2EiOjE0OCwiLi9mci1jYS5qcyI6MTQ4LCIuL2ZyLWNoIjoxNDksIi4vZnItY2guanMiOjE0OSwiLi9mci5qcyI6MTQ3LCIuL2Z5IjoxNTAsIi4vZnkuanMiOjE1MCwiLi9nYSI6MTUxLCIuL2dhLmpzIjoxNTEsIi4vZ2QiOjE1MiwiLi9nZC5qcyI6MTUyLCIuL2dsIjoxNTMsIi4vZ2wuanMiOjE1MywiLi9nb20tZGV2YSI6MTU0LCIuL2dvbS1kZXZhLmpzIjoxNTQsIi4vZ29tLWxhdG4iOjE1NSwiLi9nb20tbGF0bi5qcyI6MTU1LCIuL2d1IjoxNTYsIi4vZ3UuanMiOjE1NiwiLi9oZSI6MTU3LCIuL2hlLmpzIjoxNTcsIi4vaGkiOjE1OCwiLi9oaS5qcyI6MTU4LCIuL2hyIjoxNTksIi4vaHIuanMiOjE1OSwiLi9odSI6MTYwLCIuL2h1LmpzIjoxNjAsIi4vaHktYW0iOjE2MSwiLi9oeS1hbS5qcyI6MTYxLCIuL2lkIjoxNjIsIi4vaWQuanMiOjE2MiwiLi9pcyI6MTYzLCIuL2lzLmpzIjoxNjMsIi4vaXQiOjE2NCwiLi9pdC1jaCI6MTY1LCIuL2l0LWNoLmpzIjoxNjUsIi4vaXQuanMiOjE2NCwiLi9qYSI6MTY2LCIuL2phLmpzIjoxNjYsIi4vanYiOjE2NywiLi9qdi5qcyI6MTY3LCIuL2thIjoxNjgsIi4va2EuanMiOjE2OCwiLi9rayI6MTY5LCIuL2trLmpzIjoxNjksIi4va20iOjE3MCwiLi9rbS5qcyI6MTcwLCIuL2tuIjoxNzEsIi4va24uanMiOjE3MSwiLi9rbyI6MTcyLCIuL2tvLmpzIjoxNzIsIi4va3UiOjE3MywiLi9rdS1rbXIiOjE3NCwiLi9rdS1rbXIuanMiOjE3NCwiLi9rdS5qcyI6MTczLCIuL2t5IjoxNzUsIi4va3kuanMiOjE3NSwiLi9sYiI6MTc2LCIuL2xiLmpzIjoxNzYsIi4vbG8iOjE3NywiLi9sby5qcyI6MTc3LCIuL2x0IjoxNzgsIi4vbHQuanMiOjE3OCwiLi9sdiI6MTc5LCIuL2x2LmpzIjoxNzksIi4vbWUiOjE4MCwiLi9tZS5qcyI6MTgwLCIuL21pIjoxODEsIi4vbWkuanMiOjE4MSwiLi9tayI6MTgyLCIuL21rLmpzIjoxODIsIi4vbWwiOjE4MywiLi9tbC5qcyI6MTgzLCIuL21uIjoxODQsIi4vbW4uanMiOjE4NCwiLi9tciI6MTg1LCIuL21yLmpzIjoxODUsIi4vbXMiOjE4NiwiLi9tcy1teSI6MTg3LCIuL21zLW15LmpzIjoxODcsIi4vbXMuanMiOjE4NiwiLi9tdCI6MTg4LCIuL210LmpzIjoxODgsIi4vbXkiOjE4OSwiLi9teS5qcyI6MTg5LCIuL25iIjoxOTAsIi4vbmIuanMiOjE5MCwiLi9uZSI6MTkxLCIuL25lLmpzIjoxOTEsIi4vbmwiOjE5MiwiLi9ubC1iZSI6MTkzLCIuL25sLWJlLmpzIjoxOTMsIi4vbmwuanMiOjE5MiwiLi9ubiI6MTk0LCIuL25uLmpzIjoxOTQsIi4vb2MtbG5jIjoxOTUsIi4vb2MtbG5jLmpzIjoxOTUsIi4vcGEtaW4iOjE5NiwiLi9wYS1pbi5qcyI6MTk2LCIuL3BsIjoxOTcsIi4vcGwuanMiOjE5NywiLi9wdCI6MTk4LCIuL3B0LWJyIjoxOTksIi4vcHQtYnIuanMiOjE5OSwiLi9wdC5qcyI6MTk4LCIuL3JvIjoyMDAsIi4vcm8uanMiOjIwMCwiLi9ydSI6MjAxLCIuL3J1LmpzIjoyMDEsIi4vc2QiOjIwMiwiLi9zZC5qcyI6MjAyLCIuL3NlIjoyMDMsIi4vc2UuanMiOjIwMywiLi9zaSI6MjA0LCIuL3NpLmpzIjoyMDQsIi4vc2siOjIwNSwiLi9zay5qcyI6MjA1LCIuL3NsIjoyMDYsIi4vc2wuanMiOjIwNiwiLi9zcSI6MjA3LCIuL3NxLmpzIjoyMDcsIi4vc3IiOjIwOCwiLi9zci1jeXJsIjoyMDksIi4vc3ItY3lybC5qcyI6MjA5LCIuL3NyLmpzIjoyMDgsIi4vc3MiOjIxMCwiLi9zcy5qcyI6MjEwLCIuL3N2IjoyMTEsIi4vc3YuanMiOjIxMSwiLi9zdyI6MjEyLCIuL3N3LmpzIjoyMTIsIi4vdGEiOjIxMywiLi90YS5qcyI6MjEzLCIuL3RlIjoyMTQsIi4vdGUuanMiOjIxNCwiLi90ZXQiOjIxNSwiLi90ZXQuanMiOjIxNSwiLi90ZyI6MjE2LCIuL3RnLmpzIjoyMTYsIi4vdGgiOjIxNywiLi90aC5qcyI6MjE3LCIuL3RrIjoyMTgsIi4vdGsuanMiOjIxOCwiLi90bC1waCI6MjE5LCIuL3RsLXBoLmpzIjoyMTksIi4vdGxoIjoyMjAsIi4vdGxoLmpzIjoyMjAsIi4vdHIiOjIyMSwiLi90ci5qcyI6MjIxLCIuL3R6bCI6MjIyLCIuL3R6bC5qcyI6MjIyLCIuL3R6bSI6MjIzLCIuL3R6bS1sYXRuIjoyMjQsIi4vdHptLWxhdG4uanMiOjIyNCwiLi90em0uanMiOjIyMywiLi91Zy1jbiI6MjI1LCIuL3VnLWNuLmpzIjoyMjUsIi4vdWsiOjIyNiwiLi91ay5qcyI6MjI2LCIuL3VyIjoyMjcsIi4vdXIuanMiOjIyNywiLi91eiI6MjI4LCIuL3V6LWxhdG4iOjIyOSwiLi91ei1sYXRuLmpzIjoyMjksIi4vdXouanMiOjIyOCwiLi92aSI6MjMwLCIuL3ZpLmpzIjoyMzAsIi4veC1wc2V1ZG8iOjIzMSwiLi94LXBzZXVkby5qcyI6MjMxLCIuL3lvIjoyMzIsIi4veW8uanMiOjIzMiwiLi96aC1jbiI6MjMzLCIuL3poLWNuLmpzIjoyMzMsIi4vemgtaGsiOjIzNCwiLi96aC1oay5qcyI6MjM0LCIuL3poLW1vIjoyMzUsIi4vemgtbW8uanMiOjIzNSwiLi96aC10dyI6MjM2LCIuL3poLXR3LmpzIjoyMzZ9O2Z1bmN0aW9uIHIoZSl7ZT1hKGUpO3JldHVybiBuKGUpfWZ1bmN0aW9uIGEoZSl7aWYobi5vKGksZSkpcmV0dXJuIGlbZV07ZT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitlKyInIik7dGhyb3cgZS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixlfXIua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhpKX0sci5yZXNvbHZlPWEsKGUuZXhwb3J0cz1yKS5pZD0yODd9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSlNQbGF5Q3RybD12b2lkIDA7dmFyIGk9cihuKDEpKSxuPXIobigyKSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIG89e2lkOm51bGwsY21kOm51bGwsZGF0YTpudWxsLGVycm9yQ29kZTowLHN0YXR1czpudWxsfSxuPSgoMCxuLmRlZmF1bHQpKGEsW3trZXk6IlBsYXlNNF9TZXRTdHJlYW1PcGVuTW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaVBvcnQ9dGhpcy5vV0FTTS5fSlNQbGF5TTRfR2V0UG9ydCgpLDEhPT10aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXRTdHJlYW1PcGVuTW9kZSh0aGlzLmlQb3J0LGUpPzA6MX19LHtrZXk6IlBsYXlNNF9PcGVuU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYodGhpcy5pUG9ydDwwKXJldHVybiAwO2lmKCFlfHx0PD0wfHxuPD0wKXJldHVybiAwO3RoaXMuYlBsYXk9ITEsdGhpcy5iUGF1c2U9ITEsdGhpcy5iT25lYnlPbmU9ITEsdGhpcy5iSXNGaXJzdEZyYW1lPSEwLHRoaXMuYklzR2V0WVVWPSExLHRoaXMuYklzSW5wdXQ9ITE7dmFyIGk9dCx0PXRoaXMub1dBU00uX21hbGxvYyhpKTtyZXR1cm4gdD8odGhpcy5vV0FTTS53cml0ZUFycmF5VG9NZW1vcnkoZSx0KSx0aGlzLm9XQVNNLl9KU1BsYXlNNF9JZ25vcmVIZWFkZXJBdWRpb0RlZmluZSh0aGlzLmlQb3J0LDEpLDEhPT10aGlzLm9XQVNNLl9KU1BsYXlNNF9PcGVuU3RyZWFtKHRoaXMuaVBvcnQsdCxpLG4pPyh0aGlzLm9XQVNNLl9mcmVlKHQpLHQ9bnVsbCx0aGlzLm9XQVNNLl9KU1BsYXlNNF9GcmVlUG9ydCh0aGlzLmlQb3J0KSx0aGlzLmlQb3J0PS0xLDApOih0aGlzLm9XQVNNLl9mcmVlKHQpLHQ9bnVsbCwxKSk6MH19LHtrZXk6IlBsYXlNNF9TZXREaXNwbGF5QnVmIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXREaXNwbGF5QnVmKHRoaXMuaVBvcnQsZSl9fSx7a2V5OiJQbGF5TTRfT3BlblBsYXllclNES1ByaW50TG9nIix2YWx1ZTpmdW5jdGlvbihlKXtlPyhjb25zb2xlLmxvZygiSlNQbGF5U0RLSW50ZXJmYWNlLmpzIGJGbGFnOiIrZSksdGhpcy5vV0FTTS5fSlNQbGF5TTRfU2V0UHJpbnRMb2dGbGFnKHRoaXMuaVBvcnQsMikpOnRoaXMub1dBU00uX0pTUGxheU00X1NldFByaW50TG9nRmxhZyh0aGlzLmlQb3J0LDApfX0se2tleToiU2V0RGVjb2RlVGhyZWFkTnVtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXREZWNvZGVUaHJlYWROdW0odGhpcy5pUG9ydCxlKX19LHtrZXk6IlBsYXlNNF9TZXRTZWNyZXRLZXkiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIDF9fSx7a2V5OiJQbGF5TTRfUmVuZGVyUHJpdmF0ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub1dBU00uX0pTUGxheU00X1JlbmRlclByaXZhdGVEYXRhKHRoaXMuaVBvcnQsZSx0KX19LHtrZXk6IlBsYXlNNF9SZW5kZXJQcml2YXRlRGF0YUV4Iix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub1dBU00uX0pTUGxheU00X1JlbmRlclByaXZhdGVEYXRhRXgodGhpcy5pUG9ydCxlLHQsbil9fSx7a2V5OiJzdHJpbmdUb0J5dGVzIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dm9pZCAwLG49dm9pZCAwLGk9W10scj0wO3I8ZS5sZW5ndGg7cisrKXtmb3IodD1lLmNoYXJDb2RlQXQociksbj1bXTtuLnB1c2goMjU1JnQpLHQ+Pj04Oyk7aT1pLmNvbmNhdChuLnJldmVyc2UoKSl9cmV0dXJuIGl9fSx7a2V5OiJQbGF5TTRfUGxheSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLnBDYW52YXNEYXRhPXRoaXMub1dBU00uX21hbGxvYygxMjgpLG51bGw9PT10aGlzLnBDYW52YXNEYXRhKXJldHVybiAwO3RoaXMuYk9uZWJ5T25lJiYodGhpcy5iUGxheVJhdGVDaGFuZ2U9ITEsdGhpcy5iT25lYnlPbmU9ITEsdGhpcy5iUGF1c2U9ITEpLCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnN6Q2FudmFzSUQpJiZ0aGlzLmNsb25lZENhbnZhcyYmdGhpcy5jbG9uZWRDYW52YXNQYXJlbnROb2RlJiZ0aGlzLmNsb25lZENhbnZhc1BhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcy5jbG9uZWRDYW52YXMpLDA8dGhpcy5pQ2FudmFzV2lkdGgmJjA8dGhpcy5pQ2FudmFzSGVpZ2h0JiZ0aGlzLlBsYXlNNF9TZXRDYW52YXNTaXplKHRoaXMuaUNhbnZhc1dpZHRoLHRoaXMuaUNhbnZhc0hlaWdodCk7dmFyIGU9dGhpcy5zdHJpbmdUb0J5dGVzKCIjIit0aGlzLnN6Q2FudmFzSUQpLHQ9dGhpcy5vV0FTTS5IRUFQVTguc3ViYXJyYXkodGhpcy5wQ2FudmFzRGF0YSx0aGlzLnBDYW52YXNEYXRhKzEyOCksbj1uZXcgVWludDhBcnJheSgxMjgpO3Quc2V0KG4sMCksdC5zZXQobmV3IFVpbnQ4QXJyYXkoZSkpO3JldHVybiAxIT09dGhpcy5vV0FTTS5fSlNQbGF5TTRfUGxheSh0aGlzLmlQb3J0LHRoaXMucENhbnZhc0RhdGEpPzA6KHRoaXMub1dBU00uX0pTUGxheU00X1NldEZyYW1lSW5mb0NhbGxCYWNrKHRoaXMuaVBvcnQsMSksdGhpcy5iUGxheT0hMCx0aGlzLmJQYXVzZT0hMSx0aGlzLmJPbmVieU9uZT0hMSx0aGlzLmJQbGF5U291bmQ9ITEsdGhpcy5iUGxheVJhdGVDaGFuZ2U9ITEsdGhpcy5iT25seVBsYXlTb3VuZD0hMSwxKX19LHtrZXk6IlBsYXlNNF9PbmVCeU9uZV9QbGF5Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMub1dBU00uX0pTUGxheU00X1BsYXkodGhpcy5pUG9ydCx0aGlzLnBDYW52YXNEYXRhKSx0aGlzLmJQbGF5UmF0ZUNoYW5nZT0hMSx0aGlzLmJPbmVieU9uZT0hMSx0aGlzLmJQYXVzZT0hMX19LHtrZXk6IlNsZWVwIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9KG5ldyBEYXRlKS5nZXRUaW1lKCk7KG5ldyBEYXRlKS5nZXRUaW1lKCktdDxlOyk7fX0se2tleToiUGxheU00X0lucHV0RGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LGk9MTtpZigwPG4pe3ZhciByPXRoaXMub1dBU00uX21hbGxvYyhuKTtpZihudWxsPT09cilyZXR1cm4gMDt0PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyKTt0aGlzLm9XQVNNLndyaXRlQXJyYXlUb01lbW9yeSh0LHIpLHQ9bnVsbCx0aGlzLmJJc0ZpcnN0RnJhbWUmJnRoaXMuaW5wdXREYXRhRnVuKCksdGhpcy5iT25lYnlPbmU/MSE9PXRoaXMub1dBU00uX0pTUGxheU00X0lucHV0RGF0YSh0aGlzLmlQb3J0LHIsbikmJigxMT09PShpPXRoaXMub1dBU00uX0pTUGxheU00X0dldExhc3RFcnJvcih0aGlzLmlQb3J0KSkmJih0aGlzLnNldENhbGxCYWNrKHRoaXMsIk9uZWJ5T25lIiwwLDAsITEpLHRoaXMuYklzRmlyc3RGcmFtZT0hMCksdGhpcy5hSW5wdXREYXRhQnVmZmVyLnB1c2goZSkpOjEhPT10aGlzLm9XQVNNLl9KU1BsYXlNNF9JbnB1dERhdGEodGhpcy5pUG9ydCxyLG4pJiYoaT10aGlzLm9XQVNNLl9KU1BsYXlNNF9HZXRMYXN0RXJyb3IodGhpcy5pUG9ydCkpLHRoaXMub1dBU00uX2ZyZWUocikscj1udWxsfXJldHVybiBpfX0se2tleToiaW5wdXREYXRhRnVuIix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuYklzR2V0WVVWPSExLHRoaXMuYlBsYXkmJighdGhpcy5iUGF1c2V8fHRoaXMuYk9uZWJ5T25lKXx8dGhpcy5iT25seVBsYXlTb3VuZClmb3IoOzA8dGhpcy5hSW5wdXREYXRhQnVmZmVyLmxlbmd0aDspe3ZhciBlPXRoaXMuYUlucHV0RGF0YUJ1ZmZlci5zaGlmdCgpLHQ9dGhpcy5vV0FTTS5fSlNQbGF5TTRfSW5wdXREYXRhKHRoaXMuaVBvcnQsZSxlLmJ5dGVMZW5ndGgpO2lmKDEhPT10KWlmKDExPT09dGhpcy5vV0FTTS5fSlNQbGF5TTRfR2V0TGFzdEVycm9yKHRoaXMuaVBvcnQpKXt0aGlzLmJJc0ZpcnN0RnJhbWU9ITAsdGhpcy5hSW5wdXREYXRhQnVmZmVyLnVuc2hpZnQoZSk7YnJlYWt9fXRoaXMuYklzRmlyc3RGcmFtZT0hMX19LHtrZXk6IlBsYXlNNF9TdG9wIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYlBsYXlTb3VuZCYmKHRoaXMuUGxheU00X1N0b3BTb3VuZCgpLHRoaXMuYlBsYXlTb3VuZD0hMSksdGhpcy5iUGxheT0hMSx0aGlzLmJPbmVieU9uZT0hMSx0aGlzLmJQYXVzZT0hMSx0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXRGcmFtZUluZm9DYWxsQmFjayh0aGlzLmlQb3J0LDApLHRoaXMuUGxheU00X1NldERpc3BsYXlSZWdpb24obnVsbCwhMSksdGhpcy5vV0FTTS5fSlNQbGF5TTRfU3RvcCh0aGlzLmlQb3J0KSx0aGlzLm9XQVNNLl9KU1BsYXlNNF9DbG9zZVN0cmVhbSh0aGlzLmlQb3J0KSx0aGlzLm9XQVNNLl9KU1BsYXlNNF9GcmVlUG9ydCh0aGlzLmlQb3J0KSx0aGlzLmlQb3J0PS0xO3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3pDYW52YXNJRCk7ZSYmKHRoaXMuY2xvbmVkQ2FudmFzPWUuY2xvbmVOb2RlKCEwKSx0aGlzLmNsb25lZENhbnZhc1BhcmVudE5vZGU9ZS5wYXJlbnROb2RlLHRoaXMuY2xvbmVkQ2FudmFzUGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodGhpcy5jbG9uZWRDYW52YXMsZSkpLG51bGwhPT10aGlzLnBDYW52YXNEYXRhJiYodGhpcy5vV0FTTS5fZnJlZSh0aGlzLnBDYW52YXNEYXRhKSx0aGlzLnBDYW52YXNEYXRhPW51bGwpfX0se2tleToiUGxheU00X1BsYXlSYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iUGxheVJhdGVDaGFuZ2U9MSE9PWUsdGhpcy5pSW5wdXREYXRhTGVuPTVlMyplLDF9fSx7a2V5OiJQbGF5TTRfRmFzdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5iUGxheVJhdGVDaGFuZ2U9MSE9PWUsdGhpcy5vV0FTTS5fSlNQbGF5TTRfRmFzdCh0aGlzLmlQb3J0KX19LHtrZXk6IlBsYXlNNF9TbG93Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmJQbGF5UmF0ZUNoYW5nZT0xIT09ZSx0aGlzLm9XQVNNLl9KU1BsYXlNNF9TbG93KHRoaXMuaVBvcnQpfX0se2tleToiUGxheU00X1BhdXNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hdGhpcy5iUGxheXx8dGhpcy5iT25lYnlPbmU/MjooImJvb2xlYW4iIT10eXBlb2YgZXx8KHRoaXMuYlBhdXNlPWUsdGhpcy5iSXNGaXJzdEZyYW1lPSEwLGU/KHRoaXMuYlBsYXlTb3VuZCYmKHRoaXMuUGxheU00X1N0b3BTb3VuZCgpLHRoaXMuYlBsYXlTb3VuZD0hMCksdGhpcy5vV0FTTS5fSlNQbGF5TTRfUGF1c2UodGhpcy5pUG9ydCwxKSk6KHRoaXMuYlBsYXlTb3VuZCYmdGhpcy5QbGF5TTRfUGxheVNvdW5kKCksdGhpcy5vV0FTTS5fSlNQbGF5TTRfUGF1c2UodGhpcy5pUG9ydCwwKSkpLDEpfX0se2tleToiUGxheU00X09uZUJ5T25lIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJQbGF5Pyh0aGlzLm9XQVNNLl9KU1BsYXlNNF9HZXRTb3VyY2VCdWZmZXJSZW1haW4odGhpcy5pUG9ydCk8dGhpcy5vV0FTTS5fSlNQbGF5TTRfR2V0QnVmZmVyVmFsdWUodGhpcy5pUG9ydCwxKS8yJiYodGhpcy5iSXNJbnB1dEJ1Zk92ZXI9ITEsdGhpcy5zZXRDYWxsQmFjayh0aGlzLCJPbmVieU9uZSIsMCwzMSwhMCkpLHRoaXMuaUlucHV0RGF0YUxlbj01ZTMsdGhpcy5vV0FTTS5fSlNQbGF5TTRfT25lQnlPbmUodGhpcy5pUG9ydCksdGhpcy5iUGF1c2U9ITAsdGhpcy5iT25lYnlPbmU9ITAsdGhpcy5iUGxheVJhdGVDaGFuZ2U9ITAsMSk6Mn19LHtrZXk6IlBsYXlNNF9QbGF5U291bmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPDB8fDE2PGV8fDE9PT10aGlzLm9XQVNNLl9KU1BsYXlNNF9QbGF5U291bmQodGhpcy5pUG9ydCkmJih0aGlzLmJQbGF5U291bmQ9ITAsdGhpcy5vV0FTTS5fSlNQbGF5TTRfU2V0QU5SUGFyYW0oMykpLDF9fSx7a2V5OiJQbGF5TTRfU3RvcFNvdW5kIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJQbGF5U291bmQ/KDE9PT10aGlzLm9XQVNNLl9KU1BsYXlNNF9TdG9wU291bmQodGhpcy5pUG9ydCkmJih0aGlzLmJQbGF5U291bmQ9ITEpLDEpOjJ9fSx7a2V5OiJQbGF5TTRfU2V0U2VjcmV0S2V5Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6IlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiAwIT09ZSYmMSE9PWV8fCh0aGlzLm5EZWNGcmFtZVR5cGU9ZSx0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUodGhpcy5pUG9ydCxlKSksMX19LHtrZXk6IlBsYXlNNF9TZXRJRnJhbWVEZWNJbnRlcnZhbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDEhPT10aGlzLm5EZWNGcmFtZVR5cGU/MjooZTwwfHwodGhpcy5vV0FTTS5fSlNQbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlKHRoaXMuaVBvcnQsMSksdGhpcy5vV0FTTS5fSlNQbGF5TTRfU2V0SUZyYW1lRGVjSW50ZXJ2YWwodGhpcy5pUG9ydCxlKSksMSl9fSx7a2V5OiJQbGF5TTRfU2V0RGlzcGxheVJlZ2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZihudWxsPT09dGhpcy5zekNhbnZhc0lEKXJldHVybiAyO2lmKCEwIT09dClyZXR1cm4gMT09PXRoaXMub1dBU00uX0pTUGxheU00X1NldERpc3BsYXlSZWdpb24odGhpcy5pUG9ydCx0aGlzLnBDYW52YXNEYXRhLDAsdGhpcy5pWVVWV2lkdGgsMCx0aGlzLmlZVVZIZWlnaHQpPyh0aGlzLmlab29tTnVtPTAsdGhpcy5iRGlzUmVjdD0hMSwxKTp0aGlzLlBsYXlNNF9HZXRMYXN0RXJyb3IoKTtpZihudWxsPT1lKXJldHVybiAxO2lmKCJudW1iZXIiIT10eXBlb2YgZS5sZWZ0fHwibnVtYmVyIiE9dHlwZW9mIGUudG9wfHwibnVtYmVyIiE9dHlwZW9mIGUucmlnaHR8fCJudW1iZXIiIT10eXBlb2YgZS5ib3R0b20pcmV0dXJuIDE7aWYoZS5yaWdodDwwfHxlLmxlZnQ8MHx8ZS50b3A8MHx8ZS5ib3R0b208MClyZXR1cm4gMTt2YXIgbj1lLmxlZnQsaT1lLnJpZ2h0LHI9ZS50b3AsYT1lLmJvdHRvbSx0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3pDYW52YXNJRCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodGhpcy5pQ2FudmFzV2lkdGg9dC53aWR0aCx0aGlzLmlDYW52YXNIZWlnaHQ9dC5oZWlnaHQsaS1uPDE2fHxhLXI8MTZ8fGktbj50aGlzLmlDYW52YXNXaWR0aHx8YS1yPnRoaXMuaUNhbnZhc0hlaWdodClyZXR1cm4gMTthPTAhPT10aGlzLmlab29tTnVtPyhuPU1hdGgucm91bmQobi90aGlzLmlSYXRpb194KSt0aGlzLnN0RGlzcGxheVJlY3QubGVmdCxyPU1hdGgucm91bmQoci90aGlzLmlSYXRpb195KSt0aGlzLnN0RGlzcGxheVJlY3QudG9wLGk9TWF0aC5yb3VuZChpL3RoaXMuaVJhdGlvX3gpK3RoaXMuc3REaXNwbGF5UmVjdC5sZWZ0LE1hdGgucm91bmQoYS90aGlzLmlSYXRpb195KSt0aGlzLnN0RGlzcGxheVJlY3QudG9wKTooZT10aGlzLmlZVVZXaWR0aC90aGlzLmlDYW52YXNXaWR0aCx0PXRoaXMuaVlVVkhlaWdodC90aGlzLmlDYW52YXNIZWlnaHQsbj1NYXRoLnJvdW5kKG4qZSkscj1NYXRoLnJvdW5kKHIqdCksaT1NYXRoLnJvdW5kKGkqZSksTWF0aC5yb3VuZChhKnQpKSx0aGlzLnN0RGlzcGxheVJlY3Q9e3RvcDpyLGxlZnQ6bixyaWdodDppLGJvdHRvbTphfSx0aGlzLmJEaXNSZWN0PSEwO3I9YS1yO3JldHVybiB0aGlzLmlSYXRpb194PXRoaXMuaUNhbnZhc1dpZHRoLyhpLW4pLHRoaXMuaVJhdGlvX3k9dGhpcy5pQ2FudmFzSGVpZ2h0L3IsdGhpcy5pWm9vbU51bSsrLHRoaXMub1dBU00uX0pTUGxheU00X1NldERpc3BsYXlSZWdpb24odGhpcy5pUG9ydCx0aGlzLnBDYW52YXNEYXRhLHRoaXMuc3REaXNwbGF5UmVjdC5sZWZ0LHRoaXMuc3REaXNwbGF5UmVjdC5yaWdodCx0aGlzLnN0RGlzcGxheVJlY3QudG9wLHRoaXMuc3REaXNwbGF5UmVjdC5ib3R0b20pfX0se2tleToiUGxheU00X0dldEpQRUciLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5pWVVWV2lkdGgqdGhpcy5pWVVWSGVpZ2h0KjQrNjAsaT10aGlzLm9XQVNNLl9tYWxsb2Mobikscj10aGlzLm9XQVNNLl9tYWxsb2MoNCk7bnVsbCE9PWkmJih0aGlzLm9XQVNNLl9KU1BsYXlNNF9HZXRKUEVHKHRoaXMuaVBvcnQsaSxuLHIpLDA8KHQ9dGhpcy5vV0FTTS5nZXRWYWx1ZShyLCJpMzIiKSk/KChuPW5ldyBVaW50OEFycmF5KHQpKS5zZXQodGhpcy5vV0FTTS5IRUFQVTguc3ViYXJyYXkoaSxpK3QpKSxlKG4pKTplKDYpLHRoaXMub1dBU00uX2ZyZWUoaSksdGhpcy5vV0FTTS5fZnJlZShyKSxpPW51bGwpfX0se2tleToiUGxheU00X0dldEJNUCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQsbj10aGlzLmlZVVZXaWR0aCp0aGlzLmlZVVZIZWlnaHQqNCs2MCxpPXRoaXMub1dBU00uX21hbGxvYyhuKSxyPXRoaXMub1dBU00uX21hbGxvYyg0KTtudWxsIT09aSYmKHRoaXMub1dBU00uX0pTUGxheU00X0dldEJNUCh0aGlzLmlQb3J0LGksbixyKSwwPCh0PXRoaXMub1dBU00uZ2V0VmFsdWUociwiaTMyIikpPygobj1uZXcgVWludDhBcnJheSh0KSkuc2V0KHRoaXMub1dBU00uSEVBUFU4LnN1YmFycmF5KGksaSt0KSksZShuKSk6ZSg2KSx0aGlzLm9XQVNNLl9mcmVlKGkpLHRoaXMub1dBU00uX2ZyZWUociksaT1udWxsKX19LHtrZXk6IlBsYXlNNF9TZXRWb2x1bWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXRWb2x1bWUodGhpcy5pUG9ydCxlKX19LHtrZXk6IlBsYXlNNF9HZXRWb2x1bWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlKXt2YXIgdD10aGlzLm9XQVNNLl9KU1BsYXlNNF9HZXRWb2x1bWUodGhpcy5pUG9ydCk7cmV0dXJuIG51bGw9PT10PzYzOihlKE1hdGgucm91bmQodCkpLDEpfXJldHVybiAxfX0se2tleToiUGxheU00X0dldERlY29kZUZyYW1lVHlwZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uRGVjRnJhbWVUeXBlfX0se2tleToiUGxheU00X0dldFNka1ZlcnNpb24iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1dBU00uX0pTUGxheU00X0dldFNES1ZlcnNpb24oKX19LHtrZXk6IlBsYXlNNF9HZXRCdWlsZERhdGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1dBU00uX0pTUGxheU00X0dldEJ1aWxkRGF0ZSgpfX0se2tleToiUGxheU00X1NldENhbnZhc1NpemUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7IWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3pDYW52YXNJRCkmJnRoaXMuY2xvbmVkQ2FudmFzJiYodGhpcy5pQ2FudmFzV2lkdGg9ZSx0aGlzLmlDYW52YXNIZWlnaHQ9dCx0aGlzLmNsb25lZENhbnZhcy53aWR0aD1lLHRoaXMuY2xvbmVkQ2FudmFzLmhlaWdodD10KSwtMTx0aGlzLmlQb3J0JiZ0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXRDYW52YXNTaXplKHRoaXMuaVBvcnQsZSx0KX19LHtrZXk6IlBsYXlNNF9TZXRBbnRpYWxpYXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9XQVNNLl9KU1BsYXlNNF9TZXRBbnRpYWxpYXModGhpcy5pUG9ydCxlKX19LHtrZXk6IlBsYXlNNF9HZXRTb3VyY2VCdWZmZXJSZW1haW4iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1dBU00uX0pTUGxheU00X0dldFNvdXJjZUJ1ZmZlclJlbWFpbih0aGlzLmlQb3J0KX19LHtrZXk6IlBsYXlNNF9HZXRCdWZmZXJWYWx1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1dBU00uX0pTUGxheU00X0dldEJ1ZmZlclZhbHVlKHRoaXMuaVBvcnQsZSl9fSx7a2V5OiJQbGF5TTRfR2V0TGFzdEVycm9yIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9XQVNNLl9KU1BsYXlNNF9HZXRMYXN0RXJyb3IodGhpcy5pUG9ydCl9fSx7a2V5OiJQbGF5TTRfR2V0RnJhbWVJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuO2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYodD17cG9ydDowLGZyYW1lVHlwZTowLGZyYW1lU2l6ZTowLHdpZHRoOjAsaGVpZ2h0OjAsdGltZVN0YW1wOjAsZnJhbWVSYXRlOjAsYml0UGVyU2FtcGxlOjAsc2FtcGxlc1BlclNlYzowLGNoYW5uZWw6MCxmcmFtZU51bTowLGNyb3BMZWZ0OjAsY3JvcFJpZ2h0OjAsY3JvcFRvcDowLGNyb3BCb3R0b206MCx5ZWFyOjAsbW9udGg6MCx3ZWVrOjAsZGF5OjAsaG91cjowLG1pbnV0ZTowLHNlY29uZDowLG1pbGxpc2Vjb25kczowfSxuPXRoaXMub1dBU00uX0pTUGxheU00X0dldEZyYW1lSW5mbyh0aGlzLmlQb3J0KSx0LnBvcnQ9dGhpcy5vV0FTTS5IRUFQMzJbbj4+Ml0sdC5mcmFtZVR5cGU9dGhpcy5vV0FTTS5IRUFQMzJbbis0Pj4yXSx0LmZyYW1lU2l6ZT10aGlzLm9XQVNNLkhFQVAzMltuKzg+PjJdLHQud2lkdGg9dGhpcy5vV0FTTS5IRUFQMzJbbisxMj4+Ml0sdC5oZWlnaHQ9dGhpcy5vV0FTTS5IRUFQMzJbbisxNj4+Ml0sdC50aW1lU3RhbXA9dGhpcy5vV0FTTS5IRUFQMzJbbisyMD4+Ml0sdC5mcmFtZVJhdGU9dGhpcy5vV0FTTS5IRUFQMzJbbisyND4+Ml0sdC5iaXRQZXJTYW1wbGU9dGhpcy5vV0FTTS5IRUFQMzJbbisyOD4+Ml0sdC5zYW1wbGVzUGVyU2VjPXRoaXMub1dBU00uSEVBUDMyW24rMzI+PjJdLHQuY2hhbm5lbD10aGlzLm9XQVNNLkhFQVAzMltuKzM2Pj4yXSx0LmZyYW1lTnVtPXRoaXMub1dBU00uSEVBUDMyW24rNDA+PjJdLHQuY3JvcExlZnQ9dGhpcy5vV0FTTS5IRUFQMzJbbis0ND4+Ml0sdC5jcm9wUmlnaHQ9dGhpcy5vV0FTTS5IRUFQMzJbbis0OD4+Ml0sdC5jcm9wVG9wPXRoaXMub1dBU00uSEVBUDMyW24rNTI+PjJdLHQuY3JvcEJvdHRvbT10aGlzLm9XQVNNLkhFQVAzMltuKzU2Pj4yXSx0LnllYXI9dGhpcy5vV0FTTS5IRUFQMTZbbis2MD4+MV0sdC5tb250aD10aGlzLm9XQVNNLkhFQVAxNltuKzYyPj4xXSx0LndlZWs9dGhpcy5vV0FTTS5IRUFQMTZbbis2ND4+MV0sdC5kYXk9dGhpcy5vV0FTTS5IRUFQMTZbbis2Nj4+MV0sdC5ob3VyPXRoaXMub1dBU00uSEVBUDE2W24rNjg+PjFdLHQubWludXRlPXRoaXMub1dBU00uSEVBUDE2W24rNzA+PjFdLHQuc2Vjb25kPXRoaXMub1dBU00uSEVBUDE2W24rNzI+PjFdLHQubWlsbGlzZWNvbmRzPXRoaXMub1dBU00uSEVBUDE2W24rNzQ+PjFdLGUodCkpfX0se2tleToiUGxheU00X1JldmVyc2VQbGF5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9XQVNNLl9KU1BsYXlNNF9SZXZlcnNlUGxheSh0aGlzLmlQb3J0KX19LHtrZXk6IlBsYXlNNF9TZXRBZGRpdGlvbkRhdGFDYWxsQmFjayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vV0FTTS5fSlNQbGF5TTRfU2V0QWRkaXRpb25EYXRhQ2FsbEJhY2sodGhpcy5pUG9ydCxlLHQpfX0se2tleToiUGxheU00X1NldEdsb2JhbEJhc2VUaW1lIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmdldEZ1bGxZZWFyKCksbj1lLmdldE1vbnRoKCkrMSxpPWUuZ2V0RGF0ZSgpLHI9ZS5nZXRIb3VycygpLGE9ZS5nZXRNaW51dGVzKCkscz1lLmdldFNlY29uZHMoKSxlPWUuZ2V0TWlsbGlzZWNvbmRzKCk7dGhpcy5vV0FTTS5fSlNQbGF5TTRfU2V0R2xvYmFsQmFzZVRpbWUodGhpcy5pUG9ydCx0LG4saSxyLGEscyxlKX19LHtrZXk6IlBsYXlNNF9SZXNldEJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vV0FTTS5fSlNQbGF5TTRfUmVzZXRCdWZmZXIodGhpcy5pUG9ydCwxKX19XSksYSk7ZnVuY3Rpb24gYShlLHQsbixzKXsoMCxpLmRlZmF1bHQpKHRoaXMsYSksdGhpcy5zekNhbnZhc0lEPWUsdGhpcy5jbG9uZWRDYW52YXM9bnVsbCx0aGlzLm9XQVNNPW51bGwsdGhpcy5pUG9ydD0tMSx0aGlzLnBDYW52YXNEYXRhPW51bGwsdGhpcy5pWVVWV2lkdGg9MCx0aGlzLmlZVVZIZWlnaHQ9MCx0aGlzLmJQbGF5PSExLHRoaXMuYlBhdXNlPSExLHRoaXMuYk9uZWJ5T25lPSExLHRoaXMuYklzRmlyc3RGcmFtZT0hMCx0aGlzLmJJc0dldFlVVj0hMSx0aGlzLmJJc0lucHV0PSExLHRoaXMuaVpvb21OdW09MCx0aGlzLmlDYW52YXNXaWR0aD0wLHRoaXMuaUNhbnZhc0hlaWdodD0wLHRoaXMubkRlY0ZyYW1lVHlwZT0wLG4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuJiYodGhpcy5mbkNhbGxCYWNrPW4pLHRoaXMuYUlucHV0RGF0YUJ1ZmZlcj1bXSx0aGlzLnNldENhbGxCYWNrPWZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGE9bzthLmlkPXMsYS5jbWQ9dCxhLmRhdGE9bixhLmVycm9yQ29kZT1pLGEuc3RhdHVzPXIsKGEuaW5zdGFuY2U9ZSkuZm5DYWxsQmFjayhhKX0sdGhpcy5hSW5wdXREYXRhTGVucz1bXSx0aGlzLmFJbnB1dERhdGFCdWZmZXI9W10sdGhpcy5iSXNHZXRZVVY9ITEsdGhpcy5iSXNGaXJzdEZyYW1lPSEwLHRoaXMuaUlucHV0TWF4QnVmU2l6ZT01MjQyODgwLHRoaXMuYklzSW5wdXQ9ITEsdGhpcy5iSXNJbnB1dEJ1Zk92ZXI9ITEsdGhpcy5pSW5wdXREYXRhTGVuPTVlMyx0JiYodGhpcy5vV0FTTT10KX10LkpTUGxheUN0cmw9bn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KU1BsYXlDdHJsPXZvaWQgMDt2YXIgaT1sKG4oNjEpKSxyPWwobig2MikpLGE9bChuKDEpKSxzPWwobigyKSksbz1sKG4oMTQpKSx1PW4oMjkwKSxkPWwobigzMDYpKTtmdW5jdGlvbiBsKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgaD17d2lkdGg6MCxoZWlnaHQ6MCxmcmFtZU51bTowLHl1dkRhdGE6bnVsbH0sYz17d2lkdGg6MCxoZWlnaHQ6MCxmcmFtZU51bTowLHl1dkRhdGE6bnVsbH0sXz17c2FtcGxlUmF0ZTowLGNoYW5uZWw6MCxiaXRzUGVyU2FtcGxlOjAsbGVuZ3RoOjAscGNtRGF0YTpudWxsfSxmPSExLG09ITEscD17aWQ6bnVsbCxjbWQ6bnVsbCxkYXRhOm51bGwsZXJyb3JDb2RlOjAsc3RhdHVzOm51bGx9O2Z1bmN0aW9uIHkoaSl7cmV0dXJuIG5ldyBvLmRlZmF1bHQoZnVuY3Rpb24oZSx0KXt2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtuLnR5cGU9InRleHQvamF2YXNjcmlwdCIsbi5zcmM9aSxuLm9ubG9hZD1mdW5jdGlvbigpe2UoKX0sbi5vbmVycm9yPWZ1bmN0aW9uKGUpe3QoKX0sZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuKX0pfXZhciB2O3QuSlNQbGF5Q3RybD0oKDAscy5kZWZhdWx0KShnLFt7a2V5OiJfbG9hZFJlbmRlckZpbGVzIix2YWx1ZToodj0oMCxyLmRlZmF1bHQpKGkuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIGUoKXt2YXIgdD10aGlzO3JldHVybiBpLmRlZmF1bHQud3JhcChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihtJiZmKXtlLm5leHQ9NTticmVha31yZXR1cm4gZS5uZXh0PTMsby5kZWZhdWx0LmFsbChbeSh0aGlzLnN6QmFzZVBhdGgrIkF1ZGlvUmVuZGVyZXIuanMiKSx5KHRoaXMuc3pCYXNlUGF0aCsiU3VwZXJSZW5kZXJfMTAuanMiKV0pLnRoZW4oZnVuY3Rpb24oKXtmPW09ITB9LGZ1bmN0aW9uKGUpe3Quc2V0Q2FsbEJhY2sodCwibG9hZGZhaWxlZCIsMCwwLCEwKX0pO2Nhc2UgMzplLm5leHQ9NjticmVhaztjYXNlIDU6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG8uZGVmYXVsdC5yZXNvbHZlKCkpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sZSx0aGlzKX0pKSxmdW5jdGlvbigpe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJQbGF5TTRfU2V0Q3VycmVudEZyYW1lTnVtIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiAxNn19LHtrZXk6IlBsYXlNNF9PcGVuUGxheWVyU0RLUHJpbnRMb2ciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmJKU1ByaW50TG9nPSEwPT09ZSx0aGlzLmRlY29kZVdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDoicHJpbnRMb2ciLGRhdGE6ZX0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MX19LHtrZXk6IlBsYXlNNF9Eb3dubG9hZFlVVmRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYldyaXRlWVVWRGF0YT0hMCx0aGlzLmlMYXN0RXJyb3JDb2RlPTF9fSx7a2V5OiJQbGF5TTRfRG93bmxvYWRQQ01kYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJXcml0ZVBDTURhdGE9ITAsdGhpcy5pTGFzdEVycm9yQ29kZT0xfX0se2tleToiUGxheU00X1NldERlY0NhbGxCYWNrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRoaXMuRGVjQ2FsbEJhY2tGdW49ZSx0aGlzLmlMYXN0RXJyb3JDb2RlPTEpOnRoaXMuaUxhc3RFcnJvckNvZGU9MH19LHtrZXk6IlBsYXlNNF9TZXREaXNwbGF5Q2FsbEJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZT8odGhpcy5EaXNwbGF5Q2FsbEJhY2tGdW49ZSx0aGlzLmlMYXN0RXJyb3JDb2RlPTEpOnRoaXMuaUxhc3RFcnJvckNvZGU9MH19LHtrZXk6IlBsYXlNNF9TZXRQQ01DYWxsQmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlPyh0aGlzLlBDTUNhbGxCYWNrRnVuPWUsdGhpcy5pTGFzdEVycm9yQ29kZT0xKTp0aGlzLmlMYXN0RXJyb3JDb2RlPTB9fSx7a2V5OiJQbGF5TTRfU2V0U3RyZWFtT3Blbk1vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfHx2b2lkIDA9PT1lfHwwIT09ZSYmMSE9PWU/dGhpcy5pTGFzdEVycm9yQ29kZT0wOih0aGlzLnN0cmVhbU9wZW5Nb2RlPWUsdGhpcy5pTGFzdEVycm9yQ29kZT0xKX19LHtrZXk6IlBsYXlNNF9Eb3dubG9hZFJUUERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZG93bmxvYWRSVFA9ZX19LHtrZXk6IlBsYXlNNF9PcGVuU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMuYkpTUHJpbnRMb2cmJmNvbnNvbGUubG9nKCI+Pj5KUyBQbGF5TTRfT3BlblN0cmVhbSBuU3lzVGltZToiKygobmV3IERhdGUpLmdldE1vbnRoKCkrMSkrIi0iKyhuZXcgRGF0ZSkuZ2V0RGF0ZSgpKyIgIisobmV3IERhdGUpLmdldEhvdXJzKCkrIjoiKyhuZXcgRGF0ZSkuZ2V0TWludXRlcygpKyI6IisobmV3IERhdGUpLmdldFNlY29uZHMoKSsiLiIrKG5ldyBEYXRlKS5nZXRNaWxsaXNlY29uZHMoKSksbnVsbD09dGhpcy5kZWNvZGVXb3JrZXI/dGhpcy5pTGFzdEVycm9yQ29kZT0yOih0aGlzLmRvd25sb2FkUlRQJiYoaT1uZXcgVWludDhBcnJheShlLmJ1ZmZlciksdGhpcy5Eb3dubG9hZFJUUERhdGEoaSksY29uc29sZS5sb2coIndyaXRlIDQwIGhpayBoZWFkIikpLG51bGw9PWV8fHQ8PTB8fG48PTA/dGhpcy5pTGFzdEVycm9yQ29kZT0wOih0aGlzLmJQbGF5PSExLHRoaXMuYlBhdXNlPSExLHRoaXMuYk9uZWJ5T25lPSExLHRoaXMuYklzRmlyc3RGcmFtZT0hMCx0aGlzLmJJc0dldFlVVj0hMSx0aGlzLmJJc0lucHV0PSExLHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXRTdHJlYW1PcGVuTW9kZSIsZGF0YTp0aGlzLnN0cmVhbU9wZW5Nb2RlfSksdGhpcy5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6Ik9wZW5TdHJlYW0iLGRhdGE6ZSxkYXRhU2l6ZTp0LGJ1ZlBvb2xTaXplOm59KSx0aGlzLmJPcGVuU3RyZWFtPSEwLHRoaXMuaUxhc3RFcnJvckNvZGU9MSkpO3ZhciBpfX0se2tleToiUGxheU00X0Nsb3NlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT09dGhpcy5kZWNvZGVXb3JrZXJ8fCExPT09dGhpcy5iT3BlblN0cmVhbT90aGlzLmlMYXN0RXJyb3JDb2RlPTI6KHRoaXMuYk9ubHlQbGF5U291bmQ9ITEsdGhpcy5QbGF5TTRfU3RvcCgpLHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJDbG9zZVN0cmVhbSJ9KSxudWxsIT09dGhpcy5vU3VwZXJSZW5kZXImJih0aGlzLm9TdXBlclJlbmRlci5TUl9EZXN0cm95KCksdGhpcy5vU3VwZXJSZW5kZXI9bnVsbCksbnVsbCE9PXRoaXMuYXVkaW9SZW5kZXJlciYmKHRoaXMuYXVkaW9SZW5kZXJlci5TdG9wKCksdGhpcy5hdWRpb1JlbmRlcmVyPW51bGwpLHRoaXMuYUF1ZGlvQnVmZmVyLnNwbGljZSgwLHRoaXMuYUF1ZGlvQnVmZmVyLmxlbmd0aCksdGhpcy5hVmlkZW9GcmFtZUJ1ZmZlci5zcGxpY2UoMCx0aGlzLmFWaWRlb0ZyYW1lQnVmZmVyLmxlbmd0aCksdGhpcy5hSW5wdXREYXRhQnVmZmVyLnNwbGljZSgwLHRoaXMuYUlucHV0RGF0YUJ1ZmZlci5sZW5ndGgpLHRoaXMuYUlucHV0RGF0YUxlbnM9MCx0aGlzLmFWaWRlb1lVVkJ1ZmZlci5zcGxpY2UoMCx0aGlzLmFWaWRlb1lVVkJ1ZmZlci5sZW5ndGgpLHRoaXMuYUF1ZGlvUENNQnVmZmVyLnNwbGljZSgwLHRoaXMuYUF1ZGlvUENNQnVmZmVyLmxlbmd0aCksdGhpcy5hUmF3RGF0YUJ1ZmZlci5zcGxpY2UoMCx0aGlzLmFSYXdEYXRhQnVmZmVyLmxlbmd0aCksdGhpcy5iT3BlblN0cmVhbT0hMSx0aGlzLmlBdWRpb0J1ZmZlclNpemU9MCx0aGlzLnN6T1NEVGltZT1udWxsLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfRGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09PXRoaXMuZGVjb2RlV29ya2VyfHwodGhpcy5QbGF5TTRfQ2xvc2VTdHJlYW0oKSx0aGlzLmRlY29kZVdvcmtlci50ZXJtaW5hdGUoKSx0aGlzLmRlY29kZVdvcmtlcj1udWxsKSx0aGlzLmlMYXN0RXJyb3JDb2RlPTF9fSx7a2V5OiJQbGF5TTRfSW5wdXREYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYUlucHV0RGF0YUJ1ZmZlci5sZW5ndGg7aWYobit0PnRoaXMuaUlucHV0TWF4QnVmU2l6ZSlyZXR1cm4gZmFsc2UsdGhpcy5pbnB1dERhdGFGdW4oKSx0aGlzLmlMYXN0RXJyb3JDb2RlPTExO3ZhciBpPW51bGwscj10O3N3aXRjaCh0aGlzLnN0cmVhbU9wZW5Nb2RlKXtjYXNlIDE6aT1uZXcgVWludDhBcnJheShlLmJ1ZmZlciksdGhpcy5kb3dubG9hZFJUUCYmKHRoaXMuRG93bmxvYWRSVFBEYXRhKGkpLHRoaXMucnRwTnVtKyssY29uc29sZS5sb2coIlNUUkVBTV9GSUxFIHBzTlVtOiIrdGhpcy5ydHBOdW0pKSx0aGlzLmFJbnB1dERhdGFMZW5zKz10O2JyZWFrO2Nhc2UgMDp2YXIgcj10KzQsYT1uZXcgVWludDMyQXJyYXkoW3RdKSxzPW5ldyBVaW50OEFycmF5KGEuYnVmZmVyKTsoaT1uZXcgVWludDhBcnJheShyKSkuc2V0KHMsMCksaS5zZXQoZSw0KSx0aGlzLmRvd25sb2FkUlRQJiYodGhpcy5Eb3dubG9hZFJUUERhdGEoaSksdGhpcy5ydHBOdW0rKyxjb25zb2xlLmxvZygiU1RSRUFNX1JFQUxUSU1FIHJ0cE5VbToiK3RoaXMucnRwTnVtKSksMCx0aGlzLmFJbnB1dERhdGFMZW5zKz10KzQ7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0xNn1mb3IodmFyIG89MDtvPHI7bysrKXRoaXMuYUlucHV0RGF0YUJ1ZmZlcltuK29dPWlbb107cmV0dXJuIXRoaXMuYlBsYXkmJiF0aGlzLmJPbmx5UGxheVNvdW5kfHxudWxsPT09dGhpcy5kZWNvZGVXb3JrZXJ8fCExPT09dGhpcy5iT3BlblN0cmVhbT8xOihpPW51bGwsMDx0aGlzLmFJbnB1dERhdGFCdWZmZXIubGVuZ3RoJiZ0aGlzLmlucHV0RGF0YUZ1bigpLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJEb3dubG9hZFJUUERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYldyaXRlUlRQRGF0YSl7Zm9yKHZhciB0PW5ldyBVaW50OEFycmF5KGUpLG49dGhpcy5hUlRQRGF0YUJ1ZmZlci5sZW5ndGgsaT0wLHI9dC5sZW5ndGg7aTxyO2krKyl0aGlzLmFSVFBEYXRhQnVmZmVyW24raV09dFtpXTt0aGlzLmlSVFBEYXRhU2l6ZSsrLHQ9bnVsbH10aGlzLmJXcml0ZVJUUERhdGEmJjIwMDw9dGhpcy5pUlRQRGF0YVNpemUmJihjb25zb2xlLmxvZygiZG93bmxvYWQyMDBSVFBkYXRhIiksZT1uZXcgVWludDhBcnJheSh0aGlzLmFSVFBEYXRhQnVmZmVyKSx0aGlzLmRvd25sb2FkRmlsZShlLCJSVFAuZGF0YSIpLHRoaXMuYVJUUERhdGFCdWZmZXIuc3BsaWNlKDAsdGhpcy5hUlRQRGF0YUJ1ZmZlci5sZW5ndGgpLHRoaXMuaVJUUERhdGFTaXplPTAsdGhpcy5ydHBOdW09MCx0aGlzLmRvd25sb2FkUlRQPSExKX19LHtrZXk6IlBsYXlNNF9QbGF5Iix2YWx1ZTpmdW5jdGlvbihlKXtpZihudWxsPT09dGhpcy5kZWNvZGVXb3JrZXIpcmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MjtpZih0aGlzLmJKU1ByaW50TG9nJiZjb25zb2xlLmxvZygiPj4+SlMgUGxheU00X1BsYXkgY2FudmFzSUQ6ICIrZSksbnVsbD09PWUpdGhpcy5iT25seVBsYXlTb3VuZD0hMCx0aGlzLmRlY29kZVdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDoiT25seVBsYXlTb3VuZCJ9KSx0aGlzLnNDYW52YXNJZD1udWxsO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7aWYodGhpcy5iT25lYnlPbmUmJih0aGlzLmJQbGF5UmF0ZUNoYW5nZT0hMSx0aGlzLmJPbmVieU9uZT0hMSx0aGlzLmJQYXVzZT0hMSx0aGlzLlBsYXlNNF9TZXRMb3N0RnJhbWVNb2RlKDEpLHRoaXMuZHJhdygpKSx0aGlzLmJQbGF5KXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTE7aWYobnVsbD09dGhpcy5vU3VwZXJSZW5kZXImJih0aGlzLm9TdXBlclJlbmRlcj1uZXcgZC5kZWZhdWx0KGUsdGhpcy5zekJhc2VQYXRoKSxudWxsPT10aGlzLm9TdXBlclJlbmRlcikpcmV0dXJuIDYxO3RoaXMuc0NhbnZhc0lkPWUsdGhpcy5iUGxheT0hMCx0aGlzLmJQYXVzZT0hMSx0aGlzLmJPbmVieU9uZT0hMSx0aGlzLmJQbGF5UmF0ZUNoYW5nZT0hMSx0aGlzLmJPbmx5UGxheVNvdW5kPSExLHRoaXMuZHJhdygpfXJldHVybiBudWxsPT10aGlzLmF1ZGlvUmVuZGVyZXImJih0aGlzLmF1ZGlvUmVuZGVyZXI9bmV3IHUuQXVkaW9SZW5kZXJlcixudWxsPT10aGlzLmF1ZGlvUmVuZGVyZXIpP3RoaXMuaUxhc3RFcnJvckNvZGU9NjE6KHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJQbGF5In0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfU3RvcCIsdmFsdWU6ZnVuY3Rpb24oKXtpZihudWxsPT10aGlzLmRlY29kZVdvcmtlcnx8bnVsbD09dGhpcy5vU3VwZXJSZW5kZXIpcmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MjtpZighdGhpcy5iUGxheSlyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0yO3RoaXMuYlBsYXlTb3VuZCYmKHRoaXMuUGxheU00X1N0b3BTb3VuZCgpLHRoaXMuYlBsYXlTb3VuZD0hMCksdGhpcy5iUGxheT0hMSx0aGlzLmJPbmVieU9uZT0hMSx0aGlzLmJQYXVzZT0hMSx0aGlzLm9TdXBlclJlbmRlci5TUl9TZXREaXNwbGF5UmVjdChudWxsKSx0aGlzLmlab29tTnVtPTAsdGhpcy5iRGlzUmVjdD0hMSx0aGlzLm9TdXBlclJlbmRlci5TUl9EaXNwbGF5RnJhbWVEYXRhKHRoaXMubldpZHRoLHRoaXMubkhlaWdodCxudWxsKTt2YXIgZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnNDYW52YXNJZCk7cmV0dXJuIGUmJih0aGlzLmNsb25lZENhbnZhcz1lLmNsb25lTm9kZSghMCksdGhpcy5jbG9uZWRDYW52YXNQYXJlbnROb2RlPWUucGFyZW50Tm9kZSx0aGlzLmNsb25lZENhbnZhc1BhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuY2xvbmVkQ2FudmFzLGUpKSx0aGlzLmlMYXN0RXJyb3JDb2RlPTF9fSx7a2V5OiJQbGF5TTRfUGxheVJhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT10aGlzLmRlY29kZVdvcmtlcj90aGlzLmlMYXN0RXJyb3JDb2RlPTI6KHRoaXMuYlBsYXlSYXRlQ2hhbmdlPTEhPT1lLGU8MT8odGhpcy5QbGF5TTRfU2V0TG9zdEZyYW1lTW9kZSgwKSxlPTEpOnRoaXMuUGxheU00X1NldExvc3RGcmFtZU1vZGUoMSksdGhpcy5pSW5wdXREYXRhTGVuPTIwNDgwKmUsdGhpcy5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IlBsYXlSYXRlIixwbGF5UmF0ZTplfSksdGhpcy5pTGFzdEVycm9yQ29kZT0xKX19LHtrZXk6IlBsYXlNNF9TZXRSYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09dGhpcy5kZWNvZGVXb3JrZXI/dGhpcy5pTGFzdEVycm9yQ29kZT0yOih0aGlzLmJQbGF5UmF0ZUNoYW5nZT0xIT09ZSxlPDE/KHRoaXMuUGxheU00X1NldExvc3RGcmFtZU1vZGUoMCksZT0xKTp0aGlzLlBsYXlNNF9TZXRMb3N0RnJhbWVNb2RlKDEpLHRoaXMuaUlucHV0RGF0YUxlbj0yMDQ4MCplLHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJQbGF5UmF0ZSIscGxheVJhdGU6ZX0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfUGF1c2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT10aGlzLmRlY29kZVdvcmtlcnx8bnVsbD09dGhpcy5vU3VwZXJSZW5kZXJ8fCF0aGlzLmJQbGF5fHx0aGlzLmJPbmVieU9uZXx8dGhpcy5iUGF1c2U9PWU/dGhpcy5pTGFzdEVycm9yQ29kZT0yOiJib29sZWFuIiE9dHlwZW9mIGU/dGhpcy5pTGFzdEVycm9yQ29kZT0wOih0aGlzLmJQYXVzZT1lLHRoaXMuYklzRmlyc3RGcmFtZT0hMCxlP3RoaXMuYlBsYXlTb3VuZCYmKHRoaXMuUGxheU00X1N0b3BTb3VuZCgpLHRoaXMuYlBsYXlTb3VuZD0hMCk6KHRoaXMuYlBsYXlTb3VuZCYmdGhpcy5QbGF5TTRfUGxheVNvdW5kKCksdGhpcy5kcmF3KCkpLDEpfX0se2tleToiUGxheU00X09uZUJ5T25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTA8YXJndW1lbnRzLmxlbmd0aCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxO3JldHVybiBudWxsIT10aGlzLmRlY29kZVdvcmtlciYmbnVsbCE9dGhpcy5vU3VwZXJSZW5kZXImJnRoaXMuYlBsYXk/MTA8ZXx8ZTw9MD90aGlzLmlMYXN0RXJyb3JDb2RlPTA6KHRoaXMuaUlucHV0RGF0YUxlbj0yMDQ4MCx0aGlzLkZyYW1lRm9yd2FyZExlbj1lLHRoaXMuYlBhdXNlPSEwLHRoaXMuYk9uZWJ5T25lPSEwLHRoaXMuYklzRmlyc3RGcmFtZT0hMCx0aGlzLlBsYXlNNF9TZXRMb3N0RnJhbWVNb2RlKDApLHRoaXMuZHJhdygpLHRoaXMuaUxhc3RFcnJvckNvZGU9MSk6dGhpcy5pTGFzdEVycm9yQ29kZT0yfX0se2tleToiUGxheU00X1BsYXlTb3VuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT10aGlzLmRlY29kZVdvcmtlcnx8ITE9PT10aGlzLmJPcGVuU3RyZWFtP3RoaXMuaUxhc3RFcnJvckNvZGU9MjplPDB8fDE2PGU/dGhpcy5pTGFzdEVycm9yQ29kZT0wOm51bGw9PXRoaXMuYXVkaW9SZW5kZXJlciYmKHRoaXMuYXVkaW9SZW5kZXJlcj1uZXcgdS5BdWRpb1JlbmRlcmVyLG51bGw9PXRoaXMuYXVkaW9SZW5kZXJlcik/dGhpcy5pTGFzdEVycm9yQ29kZT02MToodGhpcy5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IlBsYXlTb3VuZCJ9KSx0aGlzLmF1ZGlvUmVuZGVyZXIuU2V0V25kTnVtKGUpLDAhPT10aGlzLlZvbHVtZSYmdGhpcy5hdWRpb1JlbmRlcmVyLlNldFZvbHVtZSh0aGlzLlZvbHVtZSksdGhpcy5hdWRpb1JlbmRlcmVyLm9BdWRpb0NvbnRleHQucmVzdW1lKCksdGhpcy5iUGxheVNvdW5kPSEwLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfU3RvcFNvdW5kIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsPT10aGlzLmRlY29kZVdvcmtlcnx8bnVsbD09dGhpcy5hdWRpb1JlbmRlcmVyP3RoaXMuaUxhc3RFcnJvckNvZGU9Mjp0aGlzLmJQbGF5U291bmQ/KHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTdG9wU291bmQifSksdGhpcy5iUGxheVNvdW5kPSExLHRoaXMuaUxhc3RFcnJvckNvZGU9MSk6Mn19LHtrZXk6IlBsYXlNNF9TZXREaXNwbGF5QnVmIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09dGhpcy5kZWNvZGVXb3JrZXI/dGhpcy5pTGFzdEVycm9yQ29kZT0yOmU8PTA/dGhpcy5pTGFzdEVycm9yQ29kZT0wOih0aGlzLllVVkJ1ZmZlclNpemU9ZSx0aGlzLmlMYXN0RXJyb3JDb2RlPTEpfX0se2tleToiUGxheU00X1NldFNlY3JldEtleSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PXRoaXMuZGVjb2RlV29ya2VyfHwhMT09PXRoaXMuYk9wZW5TdHJlYW0pcmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MjtpZihudWxsPT10KXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7aWYoMT09PWUpe2lmKDEyOCE9PW4pcmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MH1lbHNlIGlmKDAhPT1lKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7cmV0dXJuIHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXRTZWNyZXRLZXkiLGRhdGE6dCxuS2V5VHlwZTplLG5LZXlMZW46bn0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MX19LHtrZXk6IlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT10aGlzLmRlY29kZVdvcmtlcnx8bnVsbD09dGhpcy5vU3VwZXJSZW5kZXI/dGhpcy5pTGFzdEVycm9yQ29kZT0yOjAhPT1lJiYxIT09ZT90aGlzLmlMYXN0RXJyb3JDb2RlPTA6KHRoaXMuYkpTUHJpbnRMb2cmJmNvbnNvbGUubG9nKCI+Pj5KUyBQbGF5TTRfU2V0RGVjb2RlRnJhbWVUeXBlIDoiK2UpLHRoaXMubkRlY0ZyYW1lVHlwZT1lLHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXREZWNvZGVGcmFtZVR5cGUiLGRhdGE6ZX0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfU2V0SUZyYW1lRGVjSW50ZXJ2YWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiAxIT09dGhpcy5uRGVjRnJhbWVUeXBlP3RoaXMuaUxhc3RFcnJvckNvZGU9MjplPDA/dGhpcy5pTGFzdEVycm9yQ29kZT0wOih0aGlzLmRlY29kZVdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDoiU2V0SUZyYW1lRGVjSW50ZXJ2YWwiLGRhdGE6ZX0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfU2V0TG9zdEZyYW1lTW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MHx8MTxlPzA6KHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXRMb3N0RnJhbWVNb2RlIixkYXRhOmV9KSwxKX19LHtrZXk6IlBsYXlNNF9TZXREaXNwbGF5UmVnaW9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKG51bGw9PT10aGlzLmRlY29kZVdvcmtlcnx8ITE9PT10aGlzLmJQbGF5fHxudWxsPT09dGhpcy5vU3VwZXJSZW5kZXJ8fG51bGw9PT10aGlzLmNhbnZhc0lkKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTI7aWYoITA9PT10KXtpZihudWxsPT1lKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7aWYoIm51bWJlciIhPXR5cGVvZiBlLmxlZnR8fCJudW1iZXIiIT10eXBlb2YgZS50b3B8fCJudW1iZXIiIT10eXBlb2YgZS5yaWdodHx8Im51bWJlciIhPXR5cGVvZiBlLmJvdHRvbSlyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0wO2lmKGUucmlnaHQ8MHx8ZS5sZWZ0PDB8fGUudG9wPDB8fGUuYm90dG9tPDApcmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MDt2YXIgbj1lLmxlZnQsaT1lLnJpZ2h0LHI9ZS50b3AsdD1lLmJvdHRvbSxlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc0NhbnZhc0lkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZih0aGlzLmlDYW52YXNXaWR0aD1lLndpZHRoLHRoaXMuaUNhbnZhc0hlaWdodD1lLmhlaWdodCxpLW48MTZ8fHQtcjwxNnx8aS1uPnRoaXMuaUNhbnZhc1dpZHRofHx0LXI+dGhpcy5pQ2FudmFzSGVpZ2h0KXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7MCE9PXRoaXMuaVpvb21OdW0mJihuPU1hdGgucm91bmQobi90aGlzLmlSYXRpb194KSt0aGlzLnN0RGlzcGxheVJlY3QubGVmdCxyPU1hdGgucm91bmQoci90aGlzLmlSYXRpb195KSt0aGlzLnN0RGlzcGxheVJlY3QudG9wLGk9TWF0aC5yb3VuZChpL3RoaXMuaVJhdGlvX3gpK3RoaXMuc3REaXNwbGF5UmVjdC5sZWZ0LHQ9TWF0aC5yb3VuZCh0L3RoaXMuaVJhdGlvX3kpK3RoaXMuc3REaXNwbGF5UmVjdC50b3ApLHRoaXMuc3REaXNwbGF5UmVjdD17dG9wOnIsbGVmdDpuLHJpZ2h0OmksYm90dG9tOnR9LHRoaXMub1N1cGVyUmVuZGVyLlNSX1NldERpc3BsYXlSZWN0KHRoaXMuc3REaXNwbGF5UmVjdCksdGhpcy5iRGlzUmVjdD0hMDtyPXQtcjt0aGlzLmlSYXRpb194PXRoaXMuaUNhbnZhc1dpZHRoLyhpLW4pLHRoaXMuaVJhdGlvX3k9dGhpcy5pQ2FudmFzSGVpZ2h0L3IsdGhpcy5pWm9vbU51bSsrfWVsc2UgdGhpcy5vU3VwZXJSZW5kZXIuU1JfU2V0RGlzcGxheVJlY3QobnVsbCksdGhpcy5pWm9vbU51bT0wLHRoaXMuYkRpc1JlY3Q9ITE7cmV0dXJuKHRoaXMuYlBhdXNlfHx0aGlzLmJPbmVieU9uZXx8dGhpcy5iUGxheVJhdGVDaGFuZ2UpJiZ0aGlzLm9TdXBlclJlbmRlci5TUl9EaXNwbGF5RnJhbWVEYXRhKHRoaXMubldpZHRoLHRoaXMubkhlaWdodCxuZXcgVWludDhBcnJheSh0aGlzLmFEaXNwbGF5QnVmKSx0aGlzLm5XaWR0aCx0aGlzLm5IZWlnaHQpLHRoaXMuaUxhc3RFcnJvckNvZGU9MX19LHtrZXk6IlBsYXlNNF9HZXRCTVAiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmdldFBpYyhlLCJHZXRCTVAiKX19LHtrZXk6IlBsYXlNNF9HZXRKUEVHIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5nZXRQaWMoZSwiR2V0SlBFRyIpfX0se2tleToiUGxheU00X1NldFZvbHVtZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PXRoaXMuZGVjb2RlV29ya2VyfHxudWxsPT10aGlzLmF1ZGlvUmVuZGVyZXI/KHRoaXMuaUxhc3RFcnJvckNvZGU9MCwyKTplPDB8fDEwMDxlfHwiIj09PWU/dGhpcy5pTGFzdEVycm9yQ29kZT0wOih0aGlzLlZvbHVtZT1lLHRoaXMuYXVkaW9SZW5kZXJlci5TZXRWb2x1bWUoZSksdGhpcy5pTGFzdEVycm9yQ29kZT0xKX19LHtrZXk6IlBsYXlNNF9HZXRWb2x1bWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKG51bGw9PXRoaXMuZGVjb2RlV29ya2VyfHxudWxsPT10aGlzLmF1ZGlvUmVuZGVyZXIpcmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MjtpZihlJiYiZnVuY3Rpb24iPT10eXBlb2YgZSl7dmFyIHQ9dGhpcy5hdWRpb1JlbmRlcmVyLkdldFZvbHVtZSgpO3JldHVybiBudWxsPT09dD82MzooZSh0KSx0aGlzLmlMYXN0RXJyb3JDb2RlPTEpfXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTB9fSx7a2V5OiJQbGF5TTRfR2V0T1NEVGltZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGwhPXRoaXMuZGVjb2RlV29ya2VyJiZ0aGlzLmJQbGF5P2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBlPyhlKHRoaXMuc3pPU0RUaW1lKSx0aGlzLmlMYXN0RXJyb3JDb2RlPTEpOnRoaXMuaUxhc3RFcnJvckNvZGU9MDp0aGlzLmlMYXN0RXJyb3JDb2RlPTJ9fSx7a2V5OiJQbGF5TTRfSXNWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iVmlzaWJpbGl0eT1lLHRoaXMuaUxhc3RFcnJvckNvZGU9MX19LHtrZXk6IlBsYXlNNF9HZXRTZGtWZXJzaW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIwNzA0MDAwMiJ9fSx7a2V5OiJQbGF5TTRfR2V0QnVpbGREYXRlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIyMDIyMTAxNCJ9fSx7a2V5OiJQbGF5TTRfR2V0SW5wdXRCdWZTaXplIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFJbnB1dERhdGFCdWZmZXIubGVuZ3RofX0se2tleToiUGxheU00X1NldElucHV0QnVmU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDA8ZT8odGhpcy5pSW5wdXRNYXhCdWZTaXplPWUsY29uc29sZS5sb2coIj4+SlNCdWZmZXJTaXplIFNldElucHV0QnVmU2l6ZToiK3RoaXMuaUlucHV0TWF4QnVmU2l6ZSksdGhpcy5pTGFzdEVycm9yQ29kZT0xKTp0aGlzLmlMYXN0RXJyb3JDb2RlPTB9fSx7a2V5OiJQbGF5TTRfR2V0WVVWQnVmU2l6ZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hVmlkZW9GcmFtZUJ1ZmZlci5sZW5ndGh9fSx7a2V5OiJQbGF5TTRfR2V0RnJhbWVSZXNvbHV0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtpZihudWxsPT10aGlzLmRlY29kZVdvcmtlcilyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0yO3ZhciB0PXRoaXMubkhlaWdodCxuPXRoaXMubldpZHRoO3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgZSYmMDx0aGlzLm5IZWlnaHQmJjA8dGhpcy5uV2lkdGg/KGUobix0PTEwODg9PXRoaXMubkhlaWdodD8xMDgwOnQpLHRoaXMuaUxhc3RFcnJvckNvZGU9MSk6dGhpcy5pTGFzdEVycm9yQ29kZT0wfX0se2tleToiUGxheU00X1JlZ2lzdGVyWVVWQnVmU2l6ZUNCIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIGU/KHRoaXMuWVVWQnVmU2l6ZUNCRnVuPWUsdGhpcy5pTGFzdEVycm9yQ29kZT0xKTp0aGlzLmlMYXN0RXJyb3JDb2RlPTB9fSx7a2V5OiJQbGF5TTRfVW5SZWdpc3RlcllVVkJ1ZlNpemVDQiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9dGhpcy5ZVVZCdWZTaXplQ0JGdW4mJih0aGlzLllVVkJ1ZlNpemVDQkZ1bj1udWxsKSx0aGlzLmlMYXN0RXJyb3JDb2RlPTF9fSx7a2V5OiJQbGF5TTRfQ2xlYXJDYW52YXMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PXRoaXMub1N1cGVyUmVuZGVyP3RoaXMuaUxhc3RFcnJvckNvZGU9MjoodGhpcy5vU3VwZXJSZW5kZXIuU1JfRGlzcGxheUZyYW1lRGF0YSh0aGlzLm5XaWR0aCx0aGlzLm5IZWlnaHQsbnVsbCksdGhpcy5pTGFzdEVycm9yQ29kZT0xKX19LHtrZXk6IlBsYXlNNF9SZWxlYXNlSW5wdXRCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGw9PT10aGlzLmFJbnB1dERhdGFCdWZmZXI/dGhpcy5pTGFzdEVycm9yQ29kZT0yOih0aGlzLmFJbnB1dERhdGFCdWZmZXIuc3BsaWNlKDAsdGhpcy5hSW5wdXREYXRhQnVmZmVyLmxlbmd0aCksdGhpcy5hSW5wdXREYXRhTGVucz0wLHRoaXMuaUxhc3RFcnJvckNvZGU9MSl9fSx7a2V5OiJQbGF5TTRfR2V0RGVjb2RlRnJhbWVUeXBlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5EZWNGcmFtZVR5cGV9fSx7a2V5OiJQbGF5TTRfU2V0RGVtdXhNb2RlbCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IlNldERlbXV4TW9kZWwiLG5JZGVtdXhUeXBlOmUsYlRydWU6dH0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MX19LHtrZXk6IlBsYXlNNF9Ta2lwRXJyb3JEYXRhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IlNraXBFcnJvckRhdGEiLGJTa2lwOmV9KSx0aGlzLmlMYXN0RXJyb3JDb2RlPTF9fSx7a2V5OiJQbGF5TTRfU2V0RGVjb2RlRVJDIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uoe2NvbW1hbmQ6IlNldERlY29kZUVSQyIsbkxldmVsOmV9KSx0aGlzLmlMYXN0RXJyb3JDb2RlPTF9fSx7a2V5OiJQbGF5TTRfU2V0QU5SUGFyYW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXRBTlJQYXJhbSIsbkVuYWJsZTplLG5BTlJMZXZlbDp0fSksdGhpcy5pTGFzdEVycm9yQ29kZT0xfX0se2tleToiUGxheU00X1NldFJlc2FtcGxlVmFsdWUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXRSZXNhbXBsZVZhbHVlIixuRW5hYmxlOmUscmVzYW1wbGVWYWx1ZTp0fSksdGhpcy5pTGFzdEVycm9yQ29kZT0xfX0se2tleToiZG93bmxvYWRGaWxlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWU7ZSBpbnN0YW5jZW9mIEJsb2J8fGUgaW5zdGFuY2VvZiBGaWxlfHwobj1uZXcgQmxvYihbZV0pKTtlPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG4pLG49d2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtuLmhyZWY9ZSxuLmRvd25sb2FkPXQ7dD1kb2N1bWVudC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKTt0LmluaXRFdmVudCgiY2xpY2siLCEwLCEwKSxuLmRpc3BhdGNoRXZlbnQodCl9fSx7a2V5OiJQbGF5TTRfR2V0TGFzdEVycm9yIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlfX0se2tleToiUGxheU00X1Jlc2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYUF1ZGlvQnVmZmVyLnNwbGljZSgwLHRoaXMuYUF1ZGlvQnVmZmVyLmxlbmd0aCksdGhpcy5hVmlkZW9GcmFtZUJ1ZmZlci5zcGxpY2UoMCx0aGlzLmFWaWRlb0ZyYW1lQnVmZmVyLmxlbmd0aCksdGhpcy5hSW5wdXREYXRhQnVmZmVyLnNwbGljZSgwLHRoaXMuYUlucHV0RGF0YUJ1ZmZlci5sZW5ndGgpLHRoaXMuYUlucHV0RGF0YUxlbnM9MCx0aGlzLmFWaWRlb1lVVkJ1ZmZlci5zcGxpY2UoMCx0aGlzLmFWaWRlb1lVVkJ1ZmZlci5sZW5ndGgpLHRoaXMuYUF1ZGlvUENNQnVmZmVyLnNwbGljZSgwLHRoaXMuYUF1ZGlvUENNQnVmZmVyLmxlbmd0aCksdGhpcy5hUmF3RGF0YUJ1ZmZlci5zcGxpY2UoMCx0aGlzLmFSYXdEYXRhQnVmZmVyLmxlbmd0aCl9fSx7a2V5OiJQbGF5TTRfU2V0QXV0b1Ntb290aFBsYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6IlBsYXlNNF9TZXRTdHJldGNoUGxheSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToiUGxheU00X1NldEdsb2JhbEJhc2VUaW1lIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmdldEZ1bGxZZWFyKCksbj1lLmdldE1vbnRoKCkrMSxpPWUuZ2V0RGF0ZSgpLHI9ZS5nZXRIb3VycygpLGE9ZS5nZXRNaW51dGVzKCkscz1lLmdldFNlY29uZHMoKSxlPWUuZ2V0TWlsbGlzZWNvbmRzKCk7cmV0dXJuIHRoaXMuZGVjb2RlV29ya2VyLnBvc3RNZXNzYWdlKHtjb21tYW5kOiJTZXRHbG9iYWxCYXNlVGltZSIseWVhcjp0LG1vbnRoOm4sZGF5OmksaG91cjpyLG1pbjphLHNlYzpzLG1zOmV9KSwxfX1dKSxnKTtmdW5jdGlvbiBnKGUsdCxzKXtpZigoMCxhLmRlZmF1bHQpKHRoaXMsZyksbnVsbD09ZXx8dm9pZCAwPT09ZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiAwO2lmKHRoaXMuc3pCYXNlUGF0aD1lLCF0fHwiZnVuY3Rpb24iIT10eXBlb2YgdClyZXR1cm4gMDt0aGlzLmZuQ2FsbEJhY2s9dCx0aGlzLmRlY29kZVdvcmtlcj1udWxsLHRoaXMuc3RyZWFtT3Blbk1vZGU9bnVsbCx0aGlzLmJPcGVuU3RyZWFtPSExLHRoaXMuYXVkaW9SZW5kZXJlcj1udWxsLHRoaXMuYUF1ZGlvQnVmZmVyPVtdLHRoaXMuaUF1ZGlvQnVmZmVyU2l6ZT0wLHRoaXMuVm9sdW1lPTUwLHRoaXMub1N1cGVyUmVuZGVyPW51bGwsdGhpcy5hVmlkZW9GcmFtZUJ1ZmZlcj1bXSx0aGlzLllVVkJ1ZmZlclNpemU9MSx0aGlzLnN6T1NEVGltZT1udWxsLHRoaXMuYkpTUHJpbnRMb2c9ITEsdGhpcy5iV3JpdGVZVVZEYXRhPSExLHRoaXMuaVlVVjEwc2l6ZT0wLHRoaXMuYVZpZGVvWVVWQnVmZmVyPVtdLHRoaXMuYldyaXRlUENNRGF0YT0hMSx0aGlzLmlBdWRpb0J1ZmZlcjUwMFNpemU9MCx0aGlzLmFBdWRpb1BDTUJ1ZmZlcj1bXSx0aGlzLmJXcml0ZVJhd0RhdGE9ITEsdGhpcy5pUmF3RGF0YVNpemU9MCx0aGlzLmFSYXdEYXRhQnVmZmVyPVtdLHRoaXMuYldyaXRlUlRQRGF0YT0hMCx0aGlzLmlSVFBEYXRhU2l6ZT0wLHRoaXMuYVJUUERhdGFCdWZmZXI9W10sdGhpcy5kb3dubG9hZFJUUD0hMSx0aGlzLnJ0cE51bT0wLHRoaXMuYlBsYXlTb3VuZD0hMSx0aGlzLmJQbGF5PSExLHRoaXMuYlBhdXNlPSExLHRoaXMuYk9uZWJ5T25lPSExLHRoaXMuYlBsYXlSYXRlQ2hhbmdlPSExLHRoaXMuYXVkaW9OdW09MCx0aGlzLnZpZGVvTnVtPTAsdGhpcy5GcmFtZUZvcndhcmRMZW49MSx0aGlzLmJPbmx5UGxheVNvdW5kPSExLHRoaXMuZGF0YUNhbGxCYWNrRnVuPW51bGwsdGhpcy5ZVVZCdWZTaXplQ0JGdW49bnVsbCx0aGlzLkRlY0NhbGxCYWNrRnVuPW51bGwsdGhpcy5EaXNwbGF5Q2FsbEJhY2tGdW49bnVsbCx0aGlzLlBDTUNhbGxCYWNrRnVuPW51bGwsdGhpcy5EZWNJbmZvWVVWPWgsdGhpcy5EaXNwbGF5SW5mb1lVVj1jLHRoaXMuRGVjSW5mb1BDTT1fLHRoaXMubldpZHRoPTAsdGhpcy5uSGVpZ2h0PTAsdGhpcy5uU1BTQ3JvcExlZnQ9MCx0aGlzLm5TUFNDcm9wUmlnaHQ9MCx0aGlzLm5TUFNDcm9wVG9wPTAsdGhpcy5uU1BTQ3JvcEJvdHRvbT0wLHRoaXMuc0NhbnZhc0lkPW51bGwsdGhpcy5hRGlzcGxheUJ1Zj1udWxsLHRoaXMuYlZpc2liaWxpdHk9ITAsdGhpcy5uRGVjRnJhbWVUeXBlPTAsdGhpcy5pQ2FudmFzV2lkdGg9MCx0aGlzLmlDYW52YXNIZWlnaHQ9MCx0aGlzLmlab29tTnVtPTAsdGhpcy5pUmF0aW9feD0xLHRoaXMuaVJhdGlvX3k9MSx0aGlzLnN0RGlzcGxheVJlY3Q9e3RvcDowLGxlZnQ6MCxyaWdodDowLGJvdHRvbTowfSx0aGlzLmJEaXNSZWN0PSExLHRoaXMuc3RZVVZSZWN0PXt0b3A6MCxsZWZ0OjAscmlnaHQ6MCxib3R0b206MH0sdGhpcy5hSW5wdXREYXRhTGVucz0wLHRoaXMuYUlucHV0RGF0YUJ1ZmZlcj1bXSx0aGlzLmJJc0dldFlVVj0hMSx0aGlzLmJJc0ZpcnN0RnJhbWU9ITAsdGhpcy5pSW5wdXRNYXhCdWZTaXplPTUyNDI4ODAsdGhpcy5iSXNJbnB1dD0hMSx0aGlzLmJJc0lucHV0QnVmT3Zlcj0hMSx0aGlzLmJJc0lucHV0QnVmV2lsbE92ZXI9ITEsdGhpcy5pSW5wdXREYXRhTGVuPTIwNDgwO3ZhciBmPXRoaXM7dGhpcy5lcnJvckNvZGU9MSx0aGlzLmxvb3BOdW09MCx0aGlzLnNldENhbGxCYWNrPWZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGE9cDthLmlkPXMsYS5jbWQ9dCxhLmRhdGE9bixhLmVycm9yQ29kZT1pLGEuc3RhdHVzPXIsZS5mbkNhbGxCYWNrKGEpfSx0aGlzLmNvbnZlcnRFcnJvckNvZGU9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0xO2Nhc2UgOTg6cmV0dXJuIHRoaXMuaUxhc3RFcnJvckNvZGU9MDtkZWZhdWx0OnJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPWV9fSx0aGlzLmFycmF5QnVmZmVyQ29weT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5ieXRlTGVuZ3RoLG49bmV3IFVpbnQ4QXJyYXkodCksaT1uZXcgVWludDhBcnJheShlKSxyPTAscj0wO3I8dDtyKyspbltyXT1pW3JdO3JldHVybiBufSx0aGlzLmlucHV0RGF0YUZ1bj1mdW5jdGlvbigpe3ZhciBlPTA7aWYoZi5iSXNJbnB1dEJ1Zk92ZXJ8fGYuYklzSW5wdXRCdWZXaWxsT3Zlcil7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSksbj17Y29tbWFuZDoiSW5wdXREYXRhIixkYXRhOm5ldyBVaW50OEFycmF5KHQpLmJ1ZmZlcixkYXRhU2l6ZTowfTtmLmRlY29kZVdvcmtlci5wb3N0TWVzc2FnZShuLFtuLmRhdGFdKX1lbHNlIGlmKGYuYlBsYXkmJighZi5iUGF1c2V8fGYuYk9uZWJ5T25lKXx8dGhpcy5iT25seVBsYXlTb3VuZCl7aWYoZi5hSW5wdXREYXRhTGVucz5mLmlJbnB1dERhdGFMZW4pZT1mLmlJbnB1dERhdGFMZW4sZi5hSW5wdXREYXRhTGVucy09Zi5pSW5wdXREYXRhTGVuO2Vsc2V7aWYoMD09PWYuYUlucHV0RGF0YUxlbnMpcmV0dXJuO2U9Zi5hSW5wdXREYXRhTGVucyxmLmFJbnB1dERhdGFMZW5zPTB9dD0wPGU/Zi5hSW5wdXREYXRhQnVmZmVyLnNwbGljZSgwLGUpOm5ldyBVaW50OEFycmF5KDEpO249e2NvbW1hbmQ6IklucHV0RGF0YSIsZGF0YTpuZXcgVWludDhBcnJheSh0KS5idWZmZXIsZGF0YVNpemU6ZX07Zi5kZWNvZGVXb3JrZXIucG9zdE1lc3NhZ2Uobixbbi5kYXRhXSl9dD1udWxsfSx0aGlzLmdldFBpYz1mdW5jdGlvbihlLHQpe2lmKG51bGw9PXRoaXMuZGVjb2RlV29ya2VyfHxudWxsPT10aGlzLm9TdXBlclJlbmRlcilyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0yO2lmKCF0aGlzLmJQbGF5KXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTI7aWYoIWV8fCJmdW5jdGlvbiIhPXR5cGVvZiBlKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7aWYodGhpcy5kYXRhQ2FsbEJhY2tGdW49ZSwwPT09dGhpcy5pWm9vbU51bSl0aGlzLnN0WVVWUmVjdC5sZWZ0PTAsdGhpcy5zdFlVVlJlY3QudG9wPTAsdGhpcy5zdFlVVlJlY3QucmlnaHQ9MCx0aGlzLnN0WVVWUmVjdC5ib3R0b209MDtlbHNlIGlmKDA9PT10aGlzLmlDYW52YXNXaWR0aHx8MD09PXRoaXMuaUNhbnZhc0hlaWdodD8odGhpcy5zdFlVVlJlY3QubGVmdD0wLHRoaXMuc3RZVVZSZWN0LnRvcD0wLHRoaXMuc3RZVVZSZWN0LnJpZ2h0PTAsdGhpcy5zdFlVVlJlY3QuYm90dG9tPTApOihlPXRoaXMubldpZHRoL3RoaXMuaUNhbnZhc1dpZHRoLG49dGhpcy5uSGVpZ2h0L3RoaXMuaUNhbnZhc0hlaWdodCx0aGlzLnN0WVVWUmVjdC5sZWZ0PU1hdGgucm91bmQodGhpcy5zdERpc3BsYXlSZWN0LmxlZnQqZSksdGhpcy5zdFlVVlJlY3QudG9wPU1hdGgucm91bmQodGhpcy5zdERpc3BsYXlSZWN0LnRvcCpuKSx0aGlzLnN0WVVWUmVjdC5yaWdodD1NYXRoLnJvdW5kKHRoaXMuc3REaXNwbGF5UmVjdC5yaWdodCplKSx0aGlzLnN0WVVWUmVjdC5ib3R0b209TWF0aC5yb3VuZCh0aGlzLnN0RGlzcGxheVJlY3QuYm90dG9tKm4pKSx0aGlzLnN0WVVWUmVjdC5yaWdodC10aGlzLnN0WVVWUmVjdC5sZWZ0PDMyfHx0aGlzLnN0WVVWUmVjdC5ib3R0b20tdGhpcy5zdFlVVlJlY3QudG9wPDMyKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7aWYobnVsbD09dGhpcy5hRGlzcGxheUJ1ZilyZXR1cm4gdGhpcy5pTGFzdEVycm9yQ29kZT0yO3ZhciBuPXRoaXMuYXJyYXlCdWZmZXJDb3B5KHRoaXMuYURpc3BsYXlCdWYpO3JldHVybiB0aGlzLmRlY29kZVdvcmtlci5wb3N0TWVzc2FnZSh7Y29tbWFuZDp0LGRhdGE6bi5idWZmZXIsd2lkdGg6dGhpcy5uV2lkdGgsaGVpZ2h0OnRoaXMubkhlaWdodCxyZWN0bGVmdDp0aGlzLnN0WVVWUmVjdC5sZWZ0LHJlY3R0b3A6dGhpcy5zdFlVVlJlY3QudG9wLHJlY3RyaWdodDp0aGlzLnN0WVVWUmVjdC5yaWdodCxyZWN0Ym90dG9tOnRoaXMuc3RZVVZSZWN0LmJvdHRvbX0pLHRoaXMuaUxhc3RFcnJvckNvZGU9MX0sdGhpcy5jcmVhdGVXb3JrZXI9ZnVuY3Rpb24oXyl7aWYod2luZG93Lldvcmtlcil7aWYobnVsbD09dGhpcy5kZWNvZGVXb3JrZXImJih0aGlzLmRlY29kZVdvcmtlcj1uZXcgV29ya2VyKGYuc3pCYXNlUGF0aCsiRGVjb2RlV29ya2VyLmpzIiksXy5iSlNQcmludExvZyYmY29uc29sZS5sb2coIj4+PkpTUGxheVYxLjEgY3JlYXRlV29ya2VyIHN1Y2Nlc3MhIiksbnVsbD09dGhpcy5kZWNvZGVXb3JrZXIpKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTYwO3RoaXMuZGVjb2RlV29ya2VyLm9ubWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdCxuLGk9bnVsbCxyPWUuZGF0YTtzd2l0Y2goci5mdW5jdGlvbil7Y2FzZSJwcmludExvZyI6Y29uc29sZS5sb2coInByaW50IEpTUGxheWVyU0RLIGxvZyBmYWlsZWQiKTticmVhaztjYXNlImxvYWRlZCI6Xy5zZXRDYWxsQmFjayhfLGk9ImxvYWRlZCIsMCwwLCEwKTticmVhaztjYXNlIlNldFN0cmVhbU9wZW5Nb2RlIjppPSJTZXRTdHJlYW1PcGVuTW9kZSI7YnJlYWs7Y2FzZSJPcGVuU3RyZWFtIjppZihpPSJPcGVuU3RyZWFtIiwxPT09ci5lcnJvckNvZGUpcmV0dXJuIHZvaWQoZi5iT3BlblN0cmVhbT0hMCk7YnJlYWs7Y2FzZSJJbnB1dERhdGEiOmk9IklucHV0RGF0YSIsMTE9PT1yLmVycm9yQ29kZSYmKGYuYklzSW5wdXRCdWZPdmVyPSEwLGNvbnNvbGUubG9nKCJ5ZmYgaW5wdXRCdWZmZXIgb3ZlciBzZXQga2V5IGZyYW1lIiksMSE9Zi5uRGVjRnJhbWVUeXBlJiZmLlBsYXlNNF9TZXREZWNvZGVGcmFtZVR5cGUoMSkpLDM2PT09ci5lcnJvckNvZGUmJihmLmJJc0lucHV0QnVmV2lsbE92ZXI9ITApLDMxPT09ci5lcnJvckNvZGUmJihmLmJJc0lucHV0QnVmT3Zlcj0hMSxmLmJJc0lucHV0QnVmV2lsbE92ZXI9ITEpO2JyZWFrO2Nhc2UiR2V0RnJhbWVEYXRhIjppZihpPSJHZXRGcmFtZURhdGEiLCFmLmJPbmx5UGxheVNvdW5kKXtpZihudWxsIT1yLmRhdGEmJm51bGwhPXIuZnJhbWVJbmZvJiYoci5mcmFtZUluZm8ud2lkdGgsci5mcmFtZUluZm8uaGVpZ2h0KSwhZi5iUGxheSlyZXR1cm47aWYoZi5lcnJvckNvZGU9ci5lcnJvckNvZGUsZi5iSXNGaXJzdEZyYW1lfHwzMSE9PXIuZXJyb3JDb2RlJiYzNSE9PXIuZXJyb3JDb2RlKSJ2aWRlb1R5cGUiPT09ci50eXBlJiYoZi5iSXNGaXJzdEZyYW1lPSExKTtlbHNlIGlmKDMxPT09ci5lcnJvckNvZGUpe2YuYklzSW5wdXRCdWZPdmVyPSExLGYuYklzSW5wdXRCdWZXaWxsT3Zlcj0hMTticmVha319aWYoZi5iVmlzaWJpbGl0eSYmMT09PXIuZXJyb3JDb2RlKXN3aXRjaChyLnR5cGUpe2Nhc2UidmlkZW9UeXBlIjppZihudWxsPT1yLmRhdGF8fG51bGw9PXIuZnJhbWVJbmZvKXJldHVybiB0aGlzLmlMYXN0RXJyb3JDb2RlPTA7aWYobnVsbCE9Zi5EZWNDYWxsQmFja0Z1biYmKGYuRGVjSW5mb1lVVi5oZWlnaHQ9ci5mcmFtZUluZm8uaGVpZ2h0LGYuRGVjSW5mb1lVVi53aWR0aD1yLmZyYW1lSW5mby53aWR0aCxmLkRlY0luZm9ZVVYuZnJhbWVOdW09ci5mcmFtZUluZm8uZnJhbWVOdW0sZi5EZWNJbmZvWVVWLnl1dkRhdGE9bmV3IFVpbnQ4QXJyYXkoci5kYXRhKSxmLkRlY0NhbGxCYWNrRnVuKGYuRGVjSW5mb1lVVikpLGYuYklzRmlyc3RGcmFtZT0hMSxfLm5TUFNDcm9wTGVmdD1yLmZyYW1lSW5mby5jcm9wTGVmdCxfLm5TUFNDcm9wUmlnaHQ9ci5mcmFtZUluZm8uY3JvcFJpZ2h0LF8ublNQU0Nyb3BUb3A9ci5mcmFtZUluZm8uY3JvcFRvcCxfLm5TUFNDcm9wQm90dG9tPXIuZnJhbWVJbmZvLmNyb3BCb3R0b20sKGQ9bmV3IE9iamVjdCkuZGF0YT1yLmRhdGEsZC5vc2RUaW1lPXIub3NkLGQubldpZHRoPXIuZnJhbWVJbmZvLndpZHRoLGQubkhlaWdodD1yLmZyYW1lSW5mby5oZWlnaHQsZC5mcmFtZU51bT1yLmZyYW1lSW5mby5mcmFtZU51bSxkLnRpbWVTdGFtcD1yLmZyYW1lSW5mby50aW1lU3RhbXAsXy5iV3JpdGVZVVZEYXRhKXtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkoci5kYXRhKSxzPV8uYVZpZGVvWVVWQnVmZmVyLmxlbmd0aCxvPTAsdT1hLmxlbmd0aDtvPHU7bysrKV8uYVZpZGVvWVVWQnVmZmVyW3Mrb109YVtvXTtfLmlZVVYxMHNpemUrKyxhPW51bGx9Xy5iV3JpdGVZVVZEYXRhJiYyMDw9Xy5pWVVWMTBzaXplJiYodD1uZXcgVWludDhBcnJheShfLmFWaWRlb1lVVkJ1ZmZlciksXy5kb3dubG9hZEZpbGUodCwidmlkZW9ZVVYuZGF0YSIpLF8uYVZpZGVvWVVWQnVmZmVyLnNwbGljZSgwLF8uYVZpZGVvWVVWQnVmZmVyLmxlbmd0aCksXy5iV3JpdGVZVVZEYXRhPSExLF8uaVlVVjEwc2l6ZT0wLHQ9bnVsbCksXy5hVmlkZW9GcmFtZUJ1ZmZlci5wdXNoKGQpO3ZhciBkPW51bGwsZD1fLmFWaWRlb0ZyYW1lQnVmZmVyLmxlbmd0aDtpZig1PGQmJihfLmJPbmVieU9uZXx8Xy5hVmlkZW9GcmFtZUJ1ZmZlci5zcGxpY2UoMCwyKSksXy5iT25lYnlPbmUmJjE1PD1fLmFWaWRlb0ZyYW1lQnVmZmVyLmxlbmd0aCl7Xy5zZXRDYWxsQmFjayhfLCJPbmVieU9uZSIsMCwwLCExKSxfLmJJc0ZpcnN0RnJhbWU9ITA7YnJlYWt9YnJlYWs7Y2FzZSJhdWRpb1R5cGUiOmlmKF8uYlBsYXlTb3VuZCYmIV8uYlBsYXlSYXRlQ2hhbmdlfHxmLmJPbmx5UGxheVNvdW5kKXtudWxsIT1mLlBDTUNhbGxCYWNrRnVuJiYoZi5EZWNJbmZvUENNLnNhbXBsZVJhdGU9ci5mcmFtZUluZm8uc2FtcGxlc1BlclNlYyxmLkRlY0luZm9QQ00uY2hhbm5lbD1yLmZyYW1lSW5mby5jaGFubmVscyxmLkRlY0luZm9QQ00uYml0c1BlclNhbXBsZT1yLmZyYW1lSW5mby5iaXRzUGVyU2FtcGxlLGYuRGVjSW5mb1BDTS5wY21EYXRhPW5ldyBVaW50OEFycmF5KHIuZGF0YSksZi5EZWNJbmZvUENNLmxlbmd0aD1mLkRlY0luZm9QQ00ucGNtRGF0YS5sZW5ndGgsZi5QQ01DYWxsQmFja0Z1bihmLkRlY0luZm9QQ00pKTtmb3IoYT1uZXcgVWludDhBcnJheShyLmRhdGEpLHM9Xy5hQXVkaW9CdWZmZXIubGVuZ3RoLG89MCx1PWEubGVuZ3RoO288dTtvKyspXy5hQXVkaW9CdWZmZXJbcytvXT1hW29dO2lmKF8uaUF1ZGlvQnVmZmVyU2l6ZSsrLGE9bnVsbCxfLmJXcml0ZVBDTURhdGEpe2ZvcihhPW5ldyBVaW50OEFycmF5KHIuZGF0YSkscz1fLmFBdWRpb1BDTUJ1ZmZlci5sZW5ndGgsbz0wLHU9YS5sZW5ndGg7bzx1O28rKylfLmFBdWRpb1BDTUJ1ZmZlcltzK29dPWFbb107Y29uc29sZS5sb2coImF1ZGlvX3R5cGUgbnVtOiIrXy5pQXVkaW9CdWZmZXI1MDBTaXplKyIsIGxlbjoiK2EubGVuZ3RoKSxfLmlBdWRpb0J1ZmZlcjUwMFNpemUrKyxhPW51bGx9Xy5iV3JpdGVQQ01EYXRhJiYxMDA8PV8uaUF1ZGlvQnVmZmVyNTAwU2l6ZSYmKGQ9bmV3IFVpbnQ4QXJyYXkoXy5hQXVkaW9QQ01CdWZmZXIpLF8uZG93bmxvYWRGaWxlKGQsImF1ZGlvUENNLmRhdGEiKSxfLmFBdWRpb1BDTUJ1ZmZlci5zcGxpY2UoMCxfLmFBdWRpb1BDTUJ1ZmZlci5sZW5ndGgpLF8uYldyaXRlUENNRGF0YT0hMSxfLmlBdWRpb0J1ZmZlcjUwMFNpemU9MCxkPW51bGwpLDUwPD1fLmlBdWRpb0J1ZmZlclNpemUmJihfLmF1ZGlvUmVuZGVyZXIuUGxheShfLmFBdWRpb0J1ZmZlcixfLmFBdWRpb0J1ZmZlci5sZW5ndGgsci5mcmFtZUluZm8pLF8uYUF1ZGlvQnVmZmVyLnNwbGljZSgwLF8uYUF1ZGlvQnVmZmVyLmxlbmd0aCksXy5hQXVkaW9CdWZmZXIubGVuZ3RoPTAsXy5pQXVkaW9CdWZmZXJTaXplPTApfX1icmVhaztjYXNlIkdldFJhd0RhdGEiOmlmKGk9IkdldFJhd0RhdGEiLF8uYldyaXRlUmF3RGF0YSl7Zm9yKHZhciBsPW5ldyBVaW50OEFycmF5KHIuZGF0YSksaD1fLmFSYXdEYXRhQnVmZmVyLmxlbmd0aCxvPTAsdT1sLmxlbmd0aDtvPHU7bysrKV8uYVJhd0RhdGFCdWZmZXJbaCtvXT1sW29dO18uaVJhd0RhdGFTaXplKyssbD1udWxsfV8uYldyaXRlUmF3RGF0YSYmMTAwPD1fLmlSYXdEYXRhU2l6ZSYmKG49bmV3IFVpbnQ4QXJyYXkoXy5hUmF3RGF0YUJ1ZmZlciksXy5kb3dubG9hZEZpbGUobiwicmF3QnVmZmVyLmRhdGEiKSxfLmFSYXdEYXRhQnVmZmVyLnNwbGljZSgwLF8uYVJhd0RhdGFCdWZmZXIubGVuZ3RoKSxfLmJXcml0ZVJhd0RhdGE9ITEsXy5pUmF3RGF0YVNpemU9MCxuPW51bGwpO2JyZWFrO2Nhc2UiUGxheVNvdW5kIjppPSJQbGF5U291bmQiO2JyZWFrO2Nhc2UiR2V0SlBFRyI6aWYoaT0iR2V0SlBFRyIsMSE9PXIuZXJyb3JDb2RlKXJldHVybiB2b2lkIGNvbnNvbGUubG9nKCJHZXRKUEVHIEVycm9yUGFyYW0sIGVycm9yY29kZSA6IixyLmVycm9yQ29kZSk7dmFyIGM9ci5kYXRhO18uZGF0YUNhbGxCYWNrRnVuKGMpO2JyZWFrO2Nhc2UiR2V0Qk1QIjppZihpPSJHZXRCTVAiLDEhPT1yLmVycm9yQ29kZSlyZXR1cm4gdm9pZCBjb25zb2xlLmxvZygiR2V0Qk1QIEVycm9yUGFyYW0iKTtjPXIuZGF0YTtfLmRhdGFDYWxsQmFja0Z1bihjKX0iR2V0RnJhbWVEYXRhIj09PWkmJjE2IT09ci5lcnJvckNvZGUmJjEwMSE9PXIuZXJyb3JDb2RlJiYxMDAhPT1yLmVycm9yQ29kZSYmNDghPT1yLmVycm9yQ29kZXx8Xy5zZXRDYWxsQmFjayhfLGksMCxfLmNvbnZlcnRFcnJvckNvZGUoci5lcnJvckNvZGUpLCEwKX0sY29uc29sZS5kZWJ1ZygiRGVjb2RlV29ya2VyIGNyZWF0ZWQuIil9fSx0aGlzLmRyYXc9ZnVuY3Rpb24oKXtpZihmLmJQbGF5KXtpZighZi5iUGF1c2V8fGYuYk9uZWJ5T25lKXt2YXIgZSx0PWYuYVZpZGVvRnJhbWVCdWZmZXIubGVuZ3RoO2lmKG51bGwhPWYuWVVWQnVmU2l6ZUNCRnVuJiZmLllVVkJ1ZlNpemVDQkZ1bih0KSxmLmJPbmVieU9uZSl7aWYodDw9OCYmZi5zZXRDYWxsQmFjayhmLCJPbmVieU9uZSIsMCwzMSwhMCksdDw9Zi5GcmFtZUZvcndhcmRMZW4rMSlyZXR1cm4gdm9pZCBmLnNldENhbGxCYWNrKGYsIk9uZWJ5T25lIiwwLDMxLCEwKTtmb3IodmFyIG49Zi5GcmFtZUZvcndhcmRMZW47MTxuOyl7Zi5hVmlkZW9GcmFtZUJ1ZmZlci5zaGlmdCgpO24tLX19ZWxzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZi5kcmF3KTswPHQ/KGU9Zi5hVmlkZW9GcmFtZUJ1ZmZlci5zaGlmdCgpLGYuYURpc3BsYXlCdWY9ZS5kYXRhLHQ9bmV3IFVpbnQ4QXJyYXkoZi5hRGlzcGxheUJ1ZiksZi5vU3VwZXJSZW5kZXIuU1JfRGlzcGxheUZyYW1lRGF0YShlLm5XaWR0aCxlLm5IZWlnaHQsdCxlLm5XaWR0aC1mLm5TUFNDcm9wTGVmdC1mLm5TUFNDcm9wUmlnaHQsZS5uSGVpZ2h0LWYublNQU0Nyb3BUb3AtZi5uU1BTQ3JvcEJvdHRvbSksbnVsbCE9Zi5EaXNwbGF5Q2FsbEJhY2tGdW4mJihmLkRpc3BsYXlJbmZvWVVWLmhlaWdodD1lLm5IZWlnaHQsZi5EaXNwbGF5SW5mb1lVVi53aWR0aD1lLm5XaWR0aCxmLkRpc3BsYXlJbmZvWVVWLmZyYW1lTnVtPWUuZnJhbWVOdW0sZi5EaXNwbGF5SW5mb1lVVi55dXZEYXRhPW5ldyBVaW50OEFycmF5KHQpLGYuRGlzcGxheUNhbGxCYWNrRnVuKGYuRGlzcGxheUluZm9ZVVYpKSx0PW51bGwsZi5zek9TRFRpbWU9ZS5vc2RUaW1lLnllYXIrIi0iK2Uub3NkVGltZS5tb250aCsiLSIrZS5vc2RUaW1lLmRheSsiICIrZS5vc2RUaW1lLmhvdXIrIjoiK2Uub3NkVGltZS5taW51dGUrIjoiK2Uub3NkVGltZS5zZWNvbmQsZi5uV2lkdGg9ZS5uV2lkdGgsZi5uSGVpZ2h0PWUubkhlaWdodCk6Zi5zZXRDYWxsQmFjayhmLCJQbGF5IiwwLDMxLCEwKX19ZWxzZSBmLmJQbGF5fHwoZi5hVmlkZW9GcmFtZUJ1ZmZlci5zcGxpY2UoMCxmLmFWaWRlb0ZyYW1lQnVmZmVyLmxlbmd0aCksZi5hQXVkaW9CdWZmZXIuc3BsaWNlKDAsZi5hQXVkaW9CdWZmZXIubGVuZ3RoKSl9LHRoaXMuY3JlYXRlV29ya2VyKGYpfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5BdWRpb1JlbmRlcmVyPXZvaWQgMDt2YXIgaT1hKG4oMjkxKSkscj1hKG4oOTIpKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX1mdW5jdGlvbiBzKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIGkmJihpLndyaXRhYmxlPSEwKSwoMCxyLmRlZmF1bHQpKGUsaS5rZXksaSl9fXZhciBvLHU9KG89dm9pZCAwLGZ1bmN0aW9uKGUpe3JldHVybiBvPWU/ZTpvfSksbj0oZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZzKGUucHJvdG90eXBlLHQpLG4mJnMoZSxuKSxlfShkLFt7a2V5OiJQbGF5Iix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIGk9bmV3IEFycmF5QnVmZmVyKDQ0K3QpLHI9bmV3IERhdGFWaWV3KGkpLGE9bi5zYW1wbGVzUGVyU2VjLGk9bi5jaGFubmVscyxuPW4uYml0c1BlclNhbXBsZTt0aGlzLndyaXRlU3RyaW5nKHIsMCwiUklGRiIpLHIuc2V0VWludDMyKDQsMzIrMip0LCEwKSx0aGlzLndyaXRlU3RyaW5nKHIsOCwiV0FWRSIpLHRoaXMud3JpdGVTdHJpbmcociwxMiwiZm10ICIpLHIuc2V0VWludDMyKDE2LDE2LCEwKSxyLnNldFVpbnQxNigyMCwxLCEwKSxyLnNldFVpbnQxNigyMixpLCEwKSxyLnNldFVpbnQzMigyNCxhLCEwKSxyLnNldFVpbnQzMigyOCwyKmEsITApLHIuc2V0VWludDE2KDMyLGkqbi84LCEwKSxyLnNldFVpbnQxNigzNCxuLCEwKSx0aGlzLndyaXRlU3RyaW5nKHIsMzYsImRhdGEiKSxyLnNldFVpbnQzMig0MCx0LCEwKSx0aGlzLnNldEJ1ZmZlclRvRGF0YXZpZXcociw0NCxlKTt2YXIgcz10aGlzO3JldHVybiB0aGlzLm9BdWRpb0NvbnRleHQuZGVjb2RlQXVkaW9EYXRhKHIuYnVmZmVyLGZ1bmN0aW9uKGUpe3ZhciB0PXMub0F1ZGlvQ29udGV4dC5jcmVhdGVCdWZmZXJTb3VyY2UoKTtpZihudWxsPT10KXJldHVybi0xO3QuYnVmZmVyPWUsdC5zdGFydCgwKSxudWxsIT1zLmdhaW5Ob2RlJiYhcy5iU2V0Vm9sdW1lfHwocy5nYWluTm9kZT1zLm9BdWRpb0NvbnRleHQuY3JlYXRlR2FpbigpLHMuYlNldFZvbHVtZT0hMSkscy5nYWluTm9kZS5nYWluLnZhbHVlPXMuY3VycmVudFZvbHVtZS8xMDAscy5nYWluTm9kZS5jb25uZWN0KHMub0F1ZGlvQ29udGV4dC5kZXN0aW5hdGlvbiksdC5jb25uZWN0KHMuZ2Fpbk5vZGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gY29uc29sZS5sb2coImRlY29kZSBlcnJvciIpLC0xfSksMH19LHtrZXk6IlN0b3AiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGwhPXRoaXMuZ2Fpbk5vZGUmJih0aGlzLmdhaW5Ob2RlLmRpc2Nvbm5lY3QoKSx0aGlzLmdhaW5Ob2RlPW51bGwpLCEwfX0se2tleToiU2V0Vm9sdW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5iU2V0Vm9sdW1lPSEwLHRoaXMuY3VycmVudFZvbHVtZT1lLHRoaXMubVZvbHVtZXMuc2V0KHRoaXMuaVduZE51bSx0aGlzLmN1cnJlbnRWb2x1bWUpLCEwfX0se2tleToiU2V0V25kTnVtIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmlXbmROdW09ZTtlPXRoaXMubVZvbHVtZXMuZ2V0KGUpO3JldHVybiB0aGlzLmN1cnJlbnRWb2x1bWU9ZT1udWxsPT1lPzgwOmUsITB9fSx7a2V5OiJHZXRWb2x1bWUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tVm9sdW1lcy5nZXQodGhpcy5pV25kTnVtKTtyZXR1cm4gZT1udWxsPT1lPzgwOmV9fV0pLGQpO2Z1bmN0aW9uIGQoKXtpZighZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxkKSx1KCkpcmV0dXJuIHUoKTtpZih2b2lkIDAhPT1kLnVuaXF1ZSlyZXR1cm4gZC51bmlxdWU7KGQudW5pcXVlPXRoaXMpLm9BdWRpb0NvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRWb2x1bWU9ODAsdGhpcy5iU2V0Vm9sdW1lPSExLHRoaXMuZ2Fpbk5vZGU9bnVsbCx0aGlzLmlXbmROdW09LTEsdGhpcy5tVm9sdW1lcz1uZXcgaS5kZWZhdWx0O3ZhciBlPXdpbmRvdy5BdWRpb0NvbnRleHR8fHdpbmRvdy53ZWJraXRBdWRpb0NvbnRleHQ7dGhpcy5vQXVkaW9Db250ZXh0PW5ldyBlLHRoaXMud3JpdGVTdHJpbmc9ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKWUuc2V0VWludDgodCtpLG4uY2hhckNvZGVBdChpKSl9LHRoaXMuc2V0QnVmZmVyVG9EYXRhdmlldz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBpPTA7aTxuLmxlbmd0aDtpKyssdCsrKWUuc2V0VWludDgodCxuW2ldKX0sdSh0aGlzKX10LkF1ZGlvUmVuZGVyZXI9bn0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz17ZGVmYXVsdDpuKDI5MiksX19lc01vZHVsZTohMH19LGZ1bmN0aW9uKGUsdCxuKXtuKDQ1KSxuKDM3KSxuKDU1KSxuKDI5MyksbigyOTkpLG4oMzAyKSxuKDMwNCksZS5leHBvcnRzPW4oMykuTWFwfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBpPW4oMjk0KSxyPW4oMjM3KTtlLmV4cG9ydHM9bigyOTUpKCJNYXAiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsMDxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbihlKXtlPWkuZ2V0RW50cnkocih0aGlzLCJNYXAiKSxlKTtyZXR1cm4gZSYmZS52fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5kZWYocih0aGlzLCJNYXAiKSwwPT09ZT8wOmUsdCl9fSxpLCEwKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBzKGUsdCl7dmFyIG4saT1mKHQpO2lmKCJGIiE9PWkpcmV0dXJuIGUuX2lbaV07Zm9yKG49ZS5fZjtuO249bi5uKWlmKG4uaz09dClyZXR1cm4gbn12YXIgbz1uKDkpLmYsdT1uKDM4KSxkPW4oNTkpLGw9bigxNSksaD1uKDU3KSxjPW4oMzQpLGk9big0OCkscj1uKDgxKSxhPW4oODkpLF89bigxMSksZj1uKDY2KS5mYXN0S2V5LG09bigyMzcpLHA9Xz8iX3MiOiJzaXplIjtlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUscixuLGkpe3ZhciBhPWUoZnVuY3Rpb24oZSx0KXtoKGUsYSxyLCJfaSIpLGUuX3Q9cixlLl9pPXUobnVsbCksZS5fZj12b2lkIDAsZS5fbD12b2lkIDAsZVtwXT0wLG51bGwhPXQmJmModCxuLGVbaV0sZSl9KTtyZXR1cm4gZChhLnByb3RvdHlwZSx7Y2xlYXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9bSh0aGlzLHIpLHQ9ZS5faSxuPWUuX2Y7bjtuPW4ubiluLnI9ITAsbi5wJiYobi5wPW4ucC5uPXZvaWQgMCksZGVsZXRlIHRbbi5pXTtlLl9mPWUuX2w9dm9pZCAwLGVbcF09MH0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0LG49bSh0aGlzLHIpLGk9cyhuLGUpO3JldHVybiBpJiYodD1pLm4sZT1pLnAsZGVsZXRlIG4uX2lbaS5pXSxpLnI9ITAsZSYmKGUubj10KSx0JiYodC5wPWUpLG4uX2Y9PWkmJihuLl9mPXQpLG4uX2w9PWkmJihuLl9sPWUpLG5bcF0tLSksISFpfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe20odGhpcyxyKTtmb3IodmFyIHQsbj1sKGUsMTxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7dD10P3Qubjp0aGlzLl9mOylmb3Iobih0LnYsdC5rLHRoaXMpO3QmJnQucjspdD10LnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIXMobSh0aGlzLHIpLGUpfX0pLF8mJm8oYS5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLHIpW3BdfX0pLGF9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIGkscj1zKGUsdCk7cmV0dXJuIHI/ci52PW46KGUuX2w9cj17aTppPWYodCwhMCksazp0LHY6bixwOm49ZS5fbCxuOnZvaWQgMCxyOiExfSxlLl9mfHwoZS5fZj1yKSxuJiYobi5uPXIpLGVbcF0rKywiRiIhPT1pJiYoZS5faVtpXT1yKSksZX0sZ2V0RW50cnk6cyxzZXRTdHJvbmc6ZnVuY3Rpb24oZSxuLHQpe2koZSxuLGZ1bmN0aW9uKGUsdCl7dGhpcy5fdD1tKGUsbiksdGhpcy5faz10LHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLl9rLHQ9dGhpcy5fbDt0JiZ0LnI7KXQ9dC5wO3JldHVybiB0aGlzLl90JiYodGhpcy5fbD10PXQ/dC5uOnRoaXMuX3QuX2YpP3IoMCwia2V5cyI9PWU/dC5rOiJ2YWx1ZXMiPT1lP3QudjpbdC5rLHQudl0pOih0aGlzLl90PXZvaWQgMCxyKDEpKX0sdD8iZW50cmllcyI6InZhbHVlcyIsIXQsITApLGEobil9fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaD1uKDUpLGM9big0KSxfPW4oNjYpLGY9bigxOSksbT1uKDE4KSxwPW4oNTkpLHk9bigzNCksdj1uKDU3KSxnPW4oMTApLE09bigzMyksTD1uKDkpLmYsUz1uKDI5NikoMCksaz1uKDExKTtlLmV4cG9ydHM9ZnVuY3Rpb24obixlLHQsaSxyLGEpe3ZhciBzPWhbbl0sbz1zLHU9cj8ic2V0IjoiYWRkIixkPW8mJm8ucHJvdG90eXBlLGw9e307cmV0dXJuIGsmJiJmdW5jdGlvbiI9PXR5cGVvZiBvJiYoYXx8ZC5mb3JFYWNoJiYhZihmdW5jdGlvbigpeyhuZXcgbykuZW50cmllcygpLm5leHQoKX0pKT8obz1lKGZ1bmN0aW9uKGUsdCl7dihlLG8sbiwiX2MiKSxlLl9jPW5ldyBzLG51bGwhPXQmJnkodCxyLGVbdV0sZSl9KSxTKCJhZGQsY2xlYXIsZGVsZXRlLGZvckVhY2gsZ2V0LGhhcyxzZXQsa2V5cyx2YWx1ZXMsZW50cmllcyx0b0pTT04iLnNwbGl0KCIsIiksZnVuY3Rpb24obil7dmFyIGk9ImFkZCI9PW58fCJzZXQiPT1uO24gaW4gZCYmKCFhfHwiY2xlYXIiIT1uKSYmbShvLnByb3RvdHlwZSxuLGZ1bmN0aW9uKGUsdCl7aWYodih0aGlzLG8sbiksIWkmJmEmJiFnKGUpKXJldHVybiJnZXQiPT1uJiZ2b2lkIDA7dD10aGlzLl9jW25dKDA9PT1lPzA6ZSx0KTtyZXR1cm4gaT90aGlzOnR9KX0pLGF8fEwoby5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYy5zaXplfX0pKToobz1pLmdldENvbnN0cnVjdG9yKGUsbixyLHUpLHAoby5wcm90b3R5cGUsdCksXy5ORUVEPSEwKSxNKG8sbiksbFtuXT1vLGMoYy5HK2MuVytjLkYsbCksYXx8aS5zZXRTdHJvbmcobyxuLHIpLG99fSxmdW5jdGlvbihlLHQsbil7dmFyIGc9bigxNSksTT1uKDUxKSxMPW4oMjIpLFM9bigzOSksaT1uKDI5Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGgsZSl7dmFyIGM9MT09aCxfPTI9PWgsZj0zPT1oLG09ND09aCxwPTY9PWgseT01PT1ofHxwLHY9ZXx8aTtyZXR1cm4gZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaSxyLGE9TChlKSxzPU0oYSksbz1nKHQsbiwzKSx1PVMocy5sZW5ndGgpLGQ9MCxsPWM/dihlLHUpOl8/dihlLDApOnZvaWQgMDtkPHU7ZCsrKWlmKCh5fHxkIGluIHMpJiYocj1vKGk9c1tkXSxkLGEpLGgpKWlmKGMpbFtkXT1yO2Vsc2UgaWYocilzd2l0Y2goaCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gaTtjYXNlIDY6cmV0dXJuIGQ7Y2FzZSAyOmwucHVzaChpKX1lbHNlIGlmKG0pcmV0dXJuITE7cmV0dXJuIHA/LTE6Znx8bT9tOmx9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjk4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KGkoZSkpKHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMTApLHI9big5NyksYT1uKDgpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiByKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIXIodC5wcm90b3R5cGUpfHwodD12b2lkIDApLGkodCkmJm51bGw9PT0odD10W2FdKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oNCk7aShpLlAraS5SLCJNYXAiLHt0b0pTT046bigzMDApKCJNYXAiKX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big1Nikscj1uKDMwMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2lmKGkodGhpcykhPWUpdGhyb3cgVHlwZUVycm9yKGUrIiN0b0pTT04gaXNuJ3QgZ2VuZXJpYyIpO3JldHVybiByKHRoaXMpfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtyZXR1cm4gaShlLCExLG4ucHVzaCxuLHQpLG59fSxmdW5jdGlvbihlLHQsbil7bigzMDMpKCJNYXAiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpKGkuUyxlLHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpO2UtLTspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIG5ldyB0aGlzKHQpfX0pfX0sZnVuY3Rpb24oZSx0LG4pe24oMzA1KSgiTWFwIil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIGk9big0KSxzPW4oMjgpLG89bigxNSksdT1uKDM0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aShpLlMsZSx7ZnJvbTpmdW5jdGlvbihlKXt2YXIgdCxuLGkscixhPWFyZ3VtZW50c1sxXTtyZXR1cm4gcyh0aGlzKSwodD12b2lkIDAhPT1hKSYmcyhhKSxudWxsPT1lP25ldyB0aGlzOihuPVtdLHQ/KGk9MCxyPW8oYSxhcmd1bWVudHNbMl0sMiksdShlLCExLGZ1bmN0aW9uKGUpe24ucHVzaChyKGUsaSsrKSl9KSk6dShlLCExLG4ucHVzaCxuKSxuZXcgdGhpcyhuKSl9fSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1bImF0dHJpYnV0ZSB2ZWM0IHZlcnRleFBvczsiLCJhdHRyaWJ1dGUgdmVjMiB0ZXh0dXJlUG9zOyIsInZhcnlpbmcgdmVjMiB0ZXh0dXJlQ29vcmQ7Iiwidm9pZCBtYWluKCkiLCJ7IiwiZ2xfUG9zaXRpb24gPSB2ZXJ0ZXhQb3M7IiwidGV4dHVyZUNvb3JkID0gdGV4dHVyZVBvczsiLCJ9Il0uam9pbigiXG4iKSxyPVsicHJlY2lzaW9uIGhpZ2hwIGZsb2F0OyIsInZhcnlpbmcgaGlnaHAgdmVjMiB0ZXh0dXJlQ29vcmQ7IiwidW5pZm9ybSBzYW1wbGVyMkQgeVNhbXBsZXI7IiwidW5pZm9ybSBzYW1wbGVyMkQgdVNhbXBsZXI7IiwidW5pZm9ybSBzYW1wbGVyMkQgdlNhbXBsZXI7IiwiY29uc3QgbWF0NCBZVVYyUkdCID0gbWF0NCIsIigiLCIxLjE2NDM4MjgxMjUsIDAsIDEuNTk2MDI3MzQzNzUsIC0uODcwNzg1MTU2MjUsIiwiMS4xNjQzODI4MTI1LCAtLjM5MTc2MTcxODc1LCAtLjgxMjk2ODc1LCAuNTI5NTkzNzUsIiwiMS4xNjQzODI4MTI1LCAyLjAxNzIzNDM3NSwgMCwgLTEuMDgxMzkwNjI1LCIsIjAsIDAsIDAsIDEiLCIpOyIsInZvaWQgbWFpbih2b2lkKSB7IiwiaGlnaHAgZmxvYXQgeSA9IHRleHR1cmUyRCh5U2FtcGxlciwgIHRleHR1cmVDb29yZCkucjsiLCJoaWdocCBmbG9hdCB1ID0gdGV4dHVyZTJEKHVTYW1wbGVyLCAgdGV4dHVyZUNvb3JkKS5yOyIsImhpZ2hwIGZsb2F0IHYgPSB0ZXh0dXJlMkQodlNhbXBsZXIsICB0ZXh0dXJlQ29vcmQpLnI7IiwiZ2xfRnJhZ0NvbG9yID0gdmVjNCh5LCB1LCB2LCAxKSAqIFlVVjJSR0I7IiwifSJdLmpvaW4oIlxuIik7ZnVuY3Rpb24gYShlKXt0aGlzLmNhbnZhc0VsZW1lbnQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZSksdGhpcy5pbml0Q29udGV4dEdMKCksdGhpcy5jb250ZXh0R0wmJih0aGlzLllVVlByb2dyYW09dGhpcy5pbml0UHJvZ3JhbShpLHIpLHRoaXMuaW5pdEJ1ZmZlcnMoKSx0aGlzLmluaXRUZXh0dXJlcygpKX1hLnByb3RvdHlwZS5pbml0Q29udGV4dEdMPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jYW52YXNFbGVtZW50LHQ9bnVsbDt0cnl7dD1lLmdldENvbnRleHQoIndlYmdsIil8fGUuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIil9Y2F0Y2goZSl7dD1udWxsfXQmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldFBhcmFtZXRlcnx8KHQ9bnVsbCksdGhpcy5jb250ZXh0R0w9dCxjb25zb2xlLmxvZygiV2ViR0wxLjAiKX0sYS5wcm90b3R5cGUuaW5pdFByb2dyYW09ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNvbnRleHRHTCxpPW4uY3JlYXRlU2hhZGVyKG4uVkVSVEVYX1NIQURFUik7bi5zaGFkZXJTb3VyY2UoaSxlKSxuLmNvbXBpbGVTaGFkZXIoaSksbi5nZXRTaGFkZXJQYXJhbWV0ZXIoaSxuLkNPTVBJTEVfU1RBVFVTKXx8Y29uc29sZS5sb2coIlZlcnRleCBzaGFkZXIgZmFpbGVkIHRvIGNvbXBpbGU6ICIrbi5nZXRTaGFkZXJJbmZvTG9nKGkpKTtlPW4uY3JlYXRlU2hhZGVyKG4uRlJBR01FTlRfU0hBREVSKTtuLnNoYWRlclNvdXJjZShlLHQpLG4uY29tcGlsZVNoYWRlcihlKSxuLmdldFNoYWRlclBhcmFtZXRlcihlLG4uQ09NUElMRV9TVEFUVVMpfHxjb25zb2xlLmxvZygiRnJhZ21lbnQgc2hhZGVyIGZhaWxlZCB0byBjb21waWxlOiAiK24uZ2V0U2hhZGVySW5mb0xvZyhlKSk7dD1uLmNyZWF0ZVByb2dyYW0oKTtyZXR1cm4gbi5hdHRhY2hTaGFkZXIodCxpKSxuLmF0dGFjaFNoYWRlcih0LGUpLG4ubGlua1Byb2dyYW0odCksbi5nZXRQcm9ncmFtUGFyYW1ldGVyKHQsbi5MSU5LX1NUQVRVUyl8fGNvbnNvbGUubG9nKCJQcm9ncmFtIGZhaWxlZCB0byBjb21waWxlOiAiK24uZ2V0UHJvZ3JhbUluZm9Mb2codCkpLG4uZGVsZXRlU2hhZGVyKGkpLG4uZGVsZXRlU2hhZGVyKGUpLHR9LGEucHJvdG90eXBlLmluaXRCdWZmZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0R0wsdD1lLmNyZWF0ZUJ1ZmZlcigpO2UuYmluZEJ1ZmZlcihlLkFSUkFZX0JVRkZFUix0KSxlLmJ1ZmZlckRhdGEoZS5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMSwxLC0xLDEsMSwtMSwtMSwtMV0pLGUuU1RBVElDX0RSQVcpLGUuYmluZEJ1ZmZlcihlLkFSUkFZX0JVRkZFUixudWxsKTt2YXIgbj1lLmNyZWF0ZUJ1ZmZlcigpO2UuYmluZEJ1ZmZlcihlLkFSUkFZX0JVRkZFUixuKSxlLmJ1ZmZlckRhdGEoZS5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDEsMCwxXSksZS5EWU5BTUlDX0RSQVcpLGUuYmluZEJ1ZmZlcihlLkFSUkFZX0JVRkZFUixudWxsKSx0aGlzLnZlcnRleFBvc0J1ZmZlcj10LHRoaXMudGV4dHVyZVBvc0J1ZmZlcj1ufSxhLnByb3RvdHlwZS5pbml0VGV4dHVyZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dEdMLHQ9ZS5jcmVhdGVUZXh0dXJlKCk7cmV0dXJuIGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELHQpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01BR19GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX01JTl9GSUxURVIsZS5MSU5FQVIpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfUyxlLkNMQU1QX1RPX0VER0UpLGUudGV4UGFyYW1ldGVyaShlLlRFWFRVUkVfMkQsZS5URVhUVVJFX1dSQVBfVCxlLkNMQU1QX1RPX0VER0UpLGUuYmluZFRleHR1cmUoZS5URVhUVVJFXzJELG51bGwpLHR9LGEucHJvdG90eXBlLmluaXRUZXh0dXJlcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMuY29udGV4dEdMLHQ9dGhpcy5ZVVZQcm9ncmFtO2UudXNlUHJvZ3JhbSh0KTt2YXIgbj10aGlzLmluaXRUZXh0dXJlKCksaT1lLmdldFVuaWZvcm1Mb2NhdGlvbih0LCJ5U2FtcGxlciIpO2UudW5pZm9ybTFpKGksMCksdGhpcy55VGV4dHVyZVJlZj1uO2k9dGhpcy5pbml0VGV4dHVyZSgpLG49ZS5nZXRVbmlmb3JtTG9jYXRpb24odCwidVNhbXBsZXIiKTtlLnVuaWZvcm0xaShuLDEpLHRoaXMudVRleHR1cmVSZWY9aTtpPXRoaXMuaW5pdFRleHR1cmUoKSx0PWUuZ2V0VW5pZm9ybUxvY2F0aW9uKHQsInZTYW1wbGVyIik7ZS51bmlmb3JtMWkodCwyKSx0aGlzLnZUZXh0dXJlUmVmPWksZS51c2VQcm9ncmFtKG51bGwpfSxhLnByb3RvdHlwZS5TUl9EaXNwbGF5RnJhbWVEYXRhPWZ1bmN0aW9uKGUsdCxuLGkscil7aWYoIShlPD0wfHx0PD0wKSl7dmFyIGE9dGhpcy5jb250ZXh0R0w7aWYobnVsbD09bilyZXR1cm4gYS5jbGVhckNvbG9yKDAsMCwwLDApLHZvaWQgYS5jbGVhcihhLkNPTE9SX0JVRkZFUl9CSVR8YS5ERVBUSF9CVUZGRVJfQklUKTt2YXIgcz10aGlzLmNhbnZhc0VsZW1lbnQ7dGhpcy5uV2luZG93V2lkdGg9cy53aWR0aCx0aGlzLm5XaW5kb3dIZWlnaHQ9cy5oZWlnaHQ7dmFyIG89dGhpcy5uV2luZG93V2lkdGgscz10aGlzLm5XaW5kb3dIZWlnaHQ7YS5jbGVhckNvbG9yKC44LC44LDEsMSksYS5jbGVhcihhLkNPTE9SX0JVRkZFUl9CSVR8YS5ERVBUSF9CVUZGRVJfQklUKSxhLnZpZXdwb3J0KDAsMCxvLHMpLHRoaXMudXBkYXRlRnJhbWVEYXRhKGUsdCxuLGkscik7bj10aGlzLllVVlByb2dyYW07YS51c2VQcm9ncmFtKG4pO2k9dGhpcy52ZXJ0ZXhQb3NCdWZmZXI7YS5iaW5kQnVmZmVyKGEuQVJSQVlfQlVGRkVSLGkpO3I9YS5nZXRBdHRyaWJMb2NhdGlvbihuLCJ2ZXJ0ZXhQb3MiKTthLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHIpLGEudmVydGV4QXR0cmliUG9pbnRlcihyLDIsYS5GTE9BVCwhMSwwLDApLGEuYmluZEJ1ZmZlcihhLkFSUkFZX0JVRkZFUixudWxsKTtpPXRoaXMudGV4dHVyZVBvc0J1ZmZlcjthLmJpbmRCdWZmZXIoYS5BUlJBWV9CVUZGRVIsaSk7bj1hLmdldEF0dHJpYkxvY2F0aW9uKG4sInRleHR1cmVQb3MiKTthLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG4pLGEudmVydGV4QXR0cmliUG9pbnRlcihuLDIsYS5GTE9BVCwhMSwwLDApLGEuYmluZEJ1ZmZlcihhLkFSUkFZX0JVRkZFUixudWxsKSxhLmRyYXdBcnJheXMoYS5UUklBTkdMRV9TVFJJUCwwLDQpLGEuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHIpLGEuZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KG4pLGEudXNlUHJvZ3JhbShudWxsKX19LGEucHJvdG90eXBlLnVwZGF0ZUZyYW1lRGF0YT1mdW5jdGlvbihlLHQsbixpLHIpe3ZhciBhPXRoaXMuY29udGV4dEdMLHM9dGhpcy55VGV4dHVyZVJlZixvPXRoaXMudVRleHR1cmVSZWYsdT10aGlzLnZUZXh0dXJlUmVmLGQ9bjtpZihlPT1pJiZ0PT1yKXt2YXIgbD1lKnQsaD1kLnN1YmFycmF5KDAsbCk7YS5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTApLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELHMpLGEudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxhLkxVTUlOQU5DRSxlLHQsMCxhLkxVTUlOQU5DRSxhLlVOU0lHTkVEX0JZVEUsaCk7dmFyIGM9ZS8yKnQvMixfPWQuc3ViYXJyYXkoZSp0LGUqdCtjKTthLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMiksYS5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsdSksYS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuTFVNSU5BTkNFLGUvMix0LzIsMCxhLkxVTUlOQU5DRSxhLlVOU0lHTkVEX0JZVEUsXyk7dmFyIGY9YyxtPWQuc3ViYXJyYXkoZSp0K2UqdC80LGUqdCtlKnQvNCtmKTthLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMSksYS5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsbyksYS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuTFVNSU5BTkNFLGUvMix0LzIsMCxhLkxVTUlOQU5DRSxhLlVOU0lHTkVEX0JZVEUsbSl9ZWxzZXtmb3IodmFyIGw9aSpyLGg9bmV3IFVpbnQ4QXJyYXkobCkscD0wO3A8cjtwKyspZm9yKHZhciB5PWQuc3ViYXJyYXkocCplLHAqZStpKSx2PTA7djxpO3YrKyloW3AqaSt2XT15W3ZdO2EuYWN0aXZlVGV4dHVyZShhLlRFWFRVUkUwKSxhLmJpbmRUZXh0dXJlKGEuVEVYVFVSRV8yRCxzKSxhLnRleEltYWdlMkQoYS5URVhUVVJFXzJELDAsYS5MVU1JTkFOQ0UsaSxyLDAsYS5MVU1JTkFOQ0UsYS5VTlNJR05FRF9CWVRFLGgpO2Zvcih5PWg9bnVsbCxjPWkvMipyLzIsXz1uZXcgVWludDhBcnJheShjKSxwPTA7cDxyLzI7cCsrKWZvcih2YXIgZz1kLnN1YmFycmF5KGUqdCtwKmUvMixlKnQrcCplLzIraS8yKSx2PTA7djxpLzI7disrKV9bcCppLzIrdl09Z1t2XTthLmFjdGl2ZVRleHR1cmUoYS5URVhUVVJFMiksYS5iaW5kVGV4dHVyZShhLlRFWFRVUkVfMkQsdSksYS50ZXhJbWFnZTJEKGEuVEVYVFVSRV8yRCwwLGEuTFVNSU5BTkNFLGkvMixyLzIsMCxhLkxVTUlOQU5DRSxhLlVOU0lHTkVEX0JZVEUsXyk7Zm9yKGc9Xz1udWxsLGY9YyxtPW5ldyBVaW50OEFycmF5KGYpLHA9MDtwPHIvMjtwKyspZm9yKHZhciBNPWQuc3ViYXJyYXkoZSp0KjUvNCtwKmUvMixlKnQqNS80K3AqZS8yK2kvMiksdj0wO3Y8aS8yO3YrKyltW3AqaS8yK3ZdPU1bdl07YS5hY3RpdmVUZXh0dXJlKGEuVEVYVFVSRTEpLGEuYmluZFRleHR1cmUoYS5URVhUVVJFXzJELG8pLGEudGV4SW1hZ2UyRChhLlRFWFRVUkVfMkQsMCxhLkxVTUlOQU5DRSxpLzIsci8yLDAsYS5MVU1JTkFOQ0UsYS5VTlNJR05FRF9CWVRFLG0pLG09bnVsbH19LGEucHJvdG90eXBlLlNSX1NldERpc3BsYXlSZWN0PWZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5jb250ZXh0R0wsaT10aGlzLmNhbnZhc0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscj1pLndpZHRoLGE9aS5oZWlnaHQscz1udWxsO3M9ZSYmMDxyJiYwPGE/KHQ9ZS5sZWZ0L3IsaT1lLnRvcC9hLHI9ZS5yaWdodC9yLG89ZS5ib3R0b20vYSxuZXcgRmxvYXQzMkFycmF5KFtyLGksdCxpLHIsbyx0LG9dKSk6bmV3IEZsb2F0MzJBcnJheShbMSwwLDAsMCwxLDEsMCwxXSk7dmFyIG89dGhpcy50ZXh0dXJlUG9zQnVmZmVyO24uYmluZEJ1ZmZlcihuLkFSUkFZX0JVRkZFUixvKSxuLmJ1ZmZlclN1YkRhdGEobi5BUlJBWV9CVUZGRVIsMCxzKSxuLmJpbmRCdWZmZXIobi5BUlJBWV9CVUZGRVIsbnVsbCl9LGEucHJvdG90eXBlLlNSX0Rlc3Ryb3k9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHRHTCx0PXRoaXMuWVVWUHJvZ3JhbTtlLmRlbGV0ZVByb2dyYW0odCk7dmFyIG49dGhpcy52ZXJ0ZXhQb3NCdWZmZXIsaT10aGlzLnRleHR1cmVQb3NCdWZmZXI7ZS5kZWxldGVCdWZmZXIobiksZS5kZWxldGVCdWZmZXIoaSk7dD10aGlzLnlUZXh0dXJlUmVmLG49dGhpcy51VGV4dHVyZVJlZixpPXRoaXMudlRleHR1cmVSZWY7ZS5kZWxldGVUZXh0dXJlKHQpLGUuZGVsZXRlVGV4dHVyZShuKSxlLmRlbGV0ZVRleHR1cmUoaSl9LHQuZGVmYXVsdD1hfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpTVGFsa0N0cmw9dm9pZCAwO3ZhciBpPXIobigxKSksbj1yKG4oMikpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBhPSExLHM9e2lkOm51bGwsY21kOm51bGwsZGF0YTpudWxsLGVycm9yQ29kZTowLHN0YXR1czpudWxsfSxvPW51bGwsdT1udWxsO3dpbmRvdy5KU0FVRElPQ09NX0VuY29kZURhdGFDQkZ1bj1mdW5jdGlvbihlLHQsbixpKXtvJiZudWxsIT1vLkF1ZEVuY29kZURhdGFDQkZ1biYmby5BdWRFbmNvZGVEYXRhQ0JGdW4obmV3IFVpbnQ4QXJyYXkodCkpfSx3aW5kb3cuSlNBVURJT0NPTV9EZWNvZGVEYXRhQ0JGdW49ZnVuY3Rpb24oZSx0LG4saSl7byYmbnVsbCE9by5BdWREZWNvZGVEYXRhQ0JGdW4mJm8uQXVkRGVjb2RlRGF0YUNCRnVuKG5ldyBVaW50OEFycmF5KHQpKX07KDAsbi5kZWZhdWx0KShkLFt7a2V5OiJUYWxrX0NyZWF0ZUF1ZEVuY29kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pVGFsa0VuY29kZVBvcnQ9dGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fQ3JlYXRlRW5jb2RlSGFuZGxlKGUpLGNvbnNvbGUubG9nKCJfSlNBVURJT0NPTV9DcmVhdGVFbmNvZGVIYW5kbGUgcG9ydCA6Iit0aGlzLmlUYWxrRW5jb2RlUG9ydCl9fSx7a2V5OiJUYWxrX1NldEF1ZEVuY29kZVBhcmFtIix2YWx1ZTpmdW5jdGlvbihlLHQsbixpKXt2YXIgcjswPT10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9SZWdpc3RlckVuY29kZURhdGFDYWxsQmFjayh0aGlzLmlUYWxrRW5jb2RlUG9ydCx0LGksZSxuKSYmKHI9dGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fR2V0TGFzdEVycm9yKHRoaXMuaVRhbGtFbmNvZGVQb3J0KSxjb25zb2xlLmxvZygicmVzRW5jb2RlRGF0YUNhbGxCYWNrIHJlc0Vycm9yIDoiK3IpKSwxIT09dGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fU3RhcnRFbmNvZGUodGhpcy5pVGFsa0VuY29kZVBvcnQpJiYocj10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRMYXN0RXJyb3IodGhpcy5pVGFsa0VuY29kZVBvcnQpLGNvbnNvbGUubG9nKCJfSlNBVURJT0NPTV9TdGFydEVuY29kZSByZXNFcnJvciA6IityKSl9fSx7a2V5OiJUYWxrX1JlZ2lzdGVyQXVkRW5jb2RlQ0IiLHZhbHVlOmZ1bmN0aW9uKHIpe3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2Ygcj8odGhpcy5BdWRFbmNvZGVEYXRhQ0JGdW49cix3aW5kb3cuSlNBVURJT0NPTV9FbmNvZGVEYXRhQ0JGdW49ZnVuY3Rpb24oZSx0LG4saSl7cihuZXcgVWludDhBcnJheSh0KSl9LDEpOjB9fSx7a2V5OiJUYWxrX1JlZ2lzdGVyQXVkRGVjb2RlQ0IiLHZhbHVlOmZ1bmN0aW9uKHIpe3JldHVybiByJiYiZnVuY3Rpb24iPT10eXBlb2Ygcj8odGhpcy5BdWREZWNvZGVEYXRhQ0JGdW49cix3aW5kb3cuSlNBVURJT0NPTV9EZWNvZGVEYXRhQ0JGdW49ZnVuY3Rpb24oZSx0LG4saSl7cihuZXcgVWludDhBcnJheSh0KSl9LDEpOjB9fSx7a2V5OiJUYWxrX0lucHV0QXVkRW5jb2RlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9UYWxrV0FTTS5fbWFsbG9jKHQpO2lmKG51bGw9PT1uKXJldHVybiBjb25zb2xlLmxvZygiaW5wdXRkYXRhIG1hbGxvYyBmYWlsZWQhISEiKSwtMTtlPW5ldyBVaW50OEFycmF5KGUpO3RoaXMub1RhbGtXQVNNLndyaXRlQXJyYXlUb01lbW9yeShlLG4pO2U9dm9pZCAwO3RyeXtlPXRoaXMub1RhbGtXQVNNLl9KU0FVRElPQ09NX0lucHV0RW5jb2RlRGF0YSh0aGlzLmlUYWxrRW5jb2RlUG9ydCxuLHQpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9cmV0dXJuIDEhPT1lJiYoZT10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRMYXN0RXJyb3IodGhpcy5pVGFsa0VuY29kZVBvcnQpLGNvbnNvbGUubG9nKCJfSlNBVURJT0NPTV9JbnB1dEVuY29kZURhdGEgcmVzRXJyb3IgOiIrZSkpLG51bGwhPT1uJiYodGhpcy5vVGFsa1dBU00uX2ZyZWUobiksbj1udWxsKSwxfX0se2tleToiVGFsa19EZXN0cm95QXVkRW5jb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9TdG9wRW5jb2RlKHRoaXMuaVRhbGtFbmNvZGVQb3J0KSx0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9SZWxlYXNlRW5jb2RlSGFuZGxlKHRoaXMuaVRhbGtFbmNvZGVQb3J0KSx0aGlzLmlUYWxrRW5jb2RlUG9ydD0tMSwxfX0se2tleToiVGFsa19DcmVhdGVBdURlY29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9Mb2FkTGlicmFyeSgpLHRoaXMub1RhbGtXQVNNLl9KU0FVRElPQ09NX0dldFBsYXlEZXZpY2VOdW0oKTt2YXIgZT10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRPbmVQbGF5RGV2aWNlTmFtZSgwKTt0aGlzLmlUYWxrRGVjb2RlUG9ydD10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9DcmVhdGVQbGF5SGFuZGxlKCksY29uc29sZS5sb2coIkpTQVVESU9DT00gZ2V0TmFtZVJlczoiK2UrIiwgcG9ydDoiK3RoaXMuaVRhbGtEZWNvZGVQb3J0KSx0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9TZXRBTlJQYXJhbSh0aGlzLmlUYWxrRGVjb2RlUG9ydCwxLDMpfX0se2tleToiVGFsa19TZXRBdWREZWNvZGVQYXJhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSxyKXsxIT09dGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fT3BlblN0cmVhbSh0aGlzLmlUYWxrRGVjb2RlUG9ydCx0LGksZSxuLHIpJiYocj10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRMYXN0RXJyb3IodGhpcy5pVGFsa0RlY29kZVBvcnQpLGNvbnNvbGUubG9nKCJfSlNBVURJT0NPTV9PcGVuU3RyZWFtIHJlc0Vycm9yIDoiK3IpKSx0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9SZWdpc3RlckRlY29kZURhdGFDYWxsQmFjayh0aGlzLmlUYWxrRGVjb2RlUG9ydCl9fSx7a2V5OiJUYWxrX09wZW5TdHJlYW1EZWNvZGVEYXRhIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlOzEhPT10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9TdGFydFBsYXkodGhpcy5pVGFsa0RlY29kZVBvcnQpJiYoZT10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRMYXN0RXJyb3IodGhpcy5pVGFsa0RlY29kZVBvcnQpLGNvbnNvbGUubG9nKCJfSlNBVURJT0NPTV9TdGFydFBsYXkgcmVzRXJyb3IgOiIrZSkpfX0se2tleToiVGFsa19JbnB1dEF1ZERlY29kZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5vVGFsa1dBU00uX21hbGxvYyh0KTtpZihudWxsPT09bilyZXR1cm4gY29uc29sZS5sb2coImlucHV0ZGF0YSBtYWxsb2MgZmFpbGVkISEhIiksLTE7ZT1uZXcgVWludDhBcnJheShlKTtyZXR1cm4gdGhpcy5vVGFsa1dBU00ud3JpdGVBcnJheVRvTWVtb3J5KGUsbiksMSE9PXRoaXMub1RhbGtXQVNNLl9KU0FVRElPQ09NX0lucHV0U3RyZWFtRGF0YSh0aGlzLmlUYWxrRGVjb2RlUG9ydCxuLHQpJiYodD10aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRMYXN0RXJyb3IodGhpcy5pVGFsa0RlY29kZVBvcnQpLGNvbnNvbGUubG9nKCJfSlNBVURJT0NPTV9JbnB1dFN0cmVhbURhdGEgcmVzRXJyb3IgOiIrdCkpLG51bGwhPT1uJiYodGhpcy5vVGFsa1dBU00uX2ZyZWUobiksMCksMX19LHtrZXk6IlRhbGtfRGVzdHJveUF1ZERlY29kZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9TdG9wUGxheSh0aGlzLmlUYWxrRGVjb2RlUG9ydCksdGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fUmVsZWFzZVBsYXlIYW5kbGUodGhpcy5pVGFsa0RlY29kZVBvcnQpLHRoaXMuaVRhbGtEZWNvZGVQb3J0PS0xfX0se2tleToiVGFsa19TZXRUYWxrTG9nRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fU2V0UHJpbnRMb2dGbGFnKHRoaXMuaVRhbGtEZWNvZGVQb3J0LGUpLHRoaXMub1RhbGtXQVNNLl9KU0FVRElPQ09NX1NldFByaW50TG9nRmxhZyh0aGlzLmlUYWxrRW5jb2RlUG9ydCxlKX19LHtrZXk6IlRhbGtfU2V0Vm9sdW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vVGFsa1dBU00uX0pTQVVESU9DT01fU2V0Vm9sdW1lKHRoaXMuaVRhbGtEZWNvZGVQb3J0LGUpfX0se2tleToiVGFsa19HZXRWb2x1bWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBlKHRoaXMub1RhbGtXQVNNLl9KU0FVRElPQ09NX0dldFZvbHVtZSh0aGlzLmlUYWxrRGVjb2RlUG9ydCkpLFJFVFVSTl9PS319LHtrZXk6IlRhbGtfR2V0TGFzdEVycm9yIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9UYWxrV0FTTS5fSlNBVURJT0NPTV9HZXRMYXN0RXJyb3IodGhpcy5pVGFsa0RlY29kZVBvcnQpfX1dKSxuPWQ7ZnVuY3Rpb24gZChlLHQpe3ZhciBuPXRoaXM7KDAsaS5kZWZhdWx0KSh0aGlzLGQpLG89dGhpcyx0JiYiZnVuY3Rpb24iPT10eXBlb2YgdCYmKHRoaXMuZm5DYWxsQmFjaz10KSx0aGlzLnNldENhbGxCYWNrPWZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGE9czthLmNtZD10LGEuZGF0YT1uLGEuZXJyb3JDb2RlPWksYS5zdGF0dXM9cixlLmZuQ2FsbEJhY2soYSl9LHRoaXMuaVRhbGtFbmNvZGVQb3J0PS0xLHRoaXMuaVRhbGtEZWNvZGVQb3J0PS0xLHRoaXMuQXVkRW5jb2RlRGF0YUNCRnVuPW51bGwsdGhpcy5BdWREZWNvZGVEYXRhQ0JGdW49bnVsbCx0aGlzLm9UYWxrV0FTTT1udWxsLGE/KHRoaXMub1RhbGtXQVNNPXUsdGhpcy5zZXRDYWxsQmFjayh0aGlzLCJsb2FkZWQiKSk6KHQ9ZSwoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSkudHlwZT0idGV4dC9qYXZhc2NyaXB0IixlLnNyYz10LGUub25sb2FkPWZ1bmN0aW9uKCl7SlNBdWRpb0ludGVyQ29tTW9kdWxlKCkudGhlbihmdW5jdGlvbihlKXtuLm9UYWxrV0FTTT11PWUsYT0hMCxuLnNldENhbGxCYWNrKG4sImxvYWRlZCIpfSl9LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSkpfXQuSlNUYWxrQ3RybD1ufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0b3JhZ2VNYW5hZ2VyPXZvaWQgMDt2YXIgaT1oKG4oNjEpKSxyPWgobig2MikpLHU9aChuKDE0KSksbz1oKG4oMSkpLGE9aChuKDIpKSxkPWgobig5NCkpLHM9big5MyksbD1oKG4oNjMpKTtmdW5jdGlvbiBoKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX12YXIgYz1uZXcgVWludDhBcnJheShbMSwyLDMsNF0pO3dpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbT13aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW18fHdpbmRvdy53ZWJraXRSZXF1ZXN0RmlsZVN5c3RlbSx3aW5kb3cuVVJMPXdpbmRvdy5VUkx8fHdpbmRvdy53ZWJraXRVUkw7dmFyIF89KCgwLGEuZGVmYXVsdCkoZixbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbj10aGlzOzA9PT10aGlzLmlTdHJlYW1UeXBlP3RoaXMuc3pQYXRoPSJXZWIvUmVjb3JkRmlsZXMvIjoxPT09dGhpcy5pU3RyZWFtVHlwZSYmKHRoaXMuc3pQYXRoPSJXZWIvUGxheWJhY2tGaWxlcy8iKSx0aGlzLnN6UGF0aCs9dGhpcy5nZXREYXRlRGlyKCk7dmFyIGk9dGhpcy5zelBhdGguc3BsaXQoIi8iKTtyZXR1cm4gbmV3IHUuZGVmYXVsdChmdW5jdGlvbih0KXt3aW5kb3cucmVxdWVzdEZpbGVTeXN0ZW0od2luZG93LlRFTVBPUkFSWSxuLm9wdGlvbnMuaUZpbGVTaXplLGZ1bmN0aW9uKGUpe24uY3JlYXRlRGlyKGUucm9vdCxpLGZ1bmN0aW9uKCl7dCgpfSl9LG4uZXJyb3JIYW5kbGVyKX0pfX0se2tleToiZ2V0RGF0ZURpciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gcy5vVG9vbC5kYXRlRm9ybWF0KG5ldyBEYXRlLCJ5eXl5LU1NLWRkIil9fSx7a2V5OiJjcmVhdGVEaXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzO3QubGVuZ3RoP2UuZ2V0RGlyZWN0b3J5KHRbMF0se2NyZWF0ZTohMH0sZnVuY3Rpb24oZSl7aS5jcmVhdGVEaXIoZSx0LnNsaWNlKDEpLG4pfSx0aGlzLmVycm9ySGFuZGxlcik6bigpfX0se2tleToiZXJyb3JIYW5kbGVyIix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6Im9wZW5GaWxlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7d2luZG93LnJlcXVlc3RGaWxlU3lzdGVtKHdpbmRvdy5URU1QT1JBUlksdGhpcy5vcHRpb25zLmlGaWxlU2l6ZSxmdW5jdGlvbihlKXtlLnJvb3QuZ2V0RmlsZSh0LnN6UGF0aCsiLyIrdC5zekZpbGVOYW1lLHtjcmVhdGU6ITB9LGZ1bmN0aW9uKGUpe2UuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKGUpe2Uub253cml0ZWVuZD1mdW5jdGlvbigpe3Qud3JpdGVGaWxlKGUpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oKXt9fSx0LmVycm9ySGFuZGxlcil9LHQuZXJyb3JIYW5kbGVyKX0sdGhpcy5lcnJvckhhbmRsZXIpfX0se2tleToid3JpdGVGaWxlSGVhZGVyIix2YWx1ZTpmdW5jdGlvbihuKXt2YXIgaT10aGlzO3dpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLHRoaXMub3B0aW9ucy5pRmlsZVNpemUsZnVuY3Rpb24oZSl7ZS5yb290LmdldEZpbGUoaS5zekZpbGVOYW1lLHtjcmVhdGU6ITB9LGZ1bmN0aW9uKGUpe2UuY3JlYXRlV3JpdGVyKGZ1bmN0aW9uKGUpe2kuYlN0YXJ0PSEwLGUub253cml0ZWVuZD1mdW5jdGlvbigpe2kud3JpdGVGaWxlKGUpfSxlLm9uZXJyb3I9ZnVuY3Rpb24oKXt9LGUuc2VlayhlLmxlbmd0aCk7dmFyIHQ9bmV3IEJsb2IoW25dKTtlLndyaXRlKHQpfSxpLmVycm9ySGFuZGxlcil9LGZ1bmN0aW9uKGUpe2NvbnNvbGUubG9nKCJnZXRGaWxlIGVycm9yOiIsZS5tZXNzYWdlKX0pfSx0aGlzLmVycm9ySGFuZGxlcil9fSx7a2V5OiJ3cml0ZUZpbGVDb250ZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmFTdHJlYW1MaXN0LnB1c2goZSl9fSx7a2V5OiJ3cml0ZUZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoMDx0aGlzLmFTdHJlYW1MaXN0Lmxlbmd0aCl7dmFyIG49dGhpcy5hU3RyZWFtTGlzdC5zaGlmdCgpO2lmKGUuc2VlayhlLmxlbmd0aCksZS5sZW5ndGg+PXRoaXMub3B0aW9ucy5pRmlsZVNpemUpcmV0dXJuIHZvaWQodGhpcy5vcHRpb25zLmNiRXZlbnRIYW5kbGVyJiZ0aGlzLm9wdGlvbnMuY2JFdmVudEhhbmRsZXIoMzAwMSx0aGlzLnN6VVVJRCkpO249bmV3IEJsb2IoW25dKTtlLndyaXRlKG4pfWVsc2UhMT09PXRoaXMuYlN0b3AmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXt0LndyaXRlRmlsZShlKX0sNTAwKTs1IT09dGhpcy5pUGFja1R5cGUmJjA9PT10aGlzLmFTdHJlYW1MaXN0Lmxlbmd0aCYmITA9PT10aGlzLmJTdG9wJiZ0aGlzLmJTdGFydCYmKHRoaXMuYlN0YXJ0PSExLHRoaXMuc3RvcFdyaXRlRmlsZSgpKSx0aGlzLmdldFN0b3BEYXRhJiYwPT09dGhpcy5hU3RyZWFtTGlzdC5sZW5ndGgmJih0aGlzLmJTdGFydD0hMSx0aGlzLnN0b3BXcml0ZUZpbGUoKSx0aGlzLmdldFN0b3BEYXRhPSExKX19LHtrZXk6InN0b3BXcml0ZUZpbGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsYT10aGlzO3JldHVybiBuZXcgdS5kZWZhdWx0KCh0PSgwLHIuZGVmYXVsdCkoaS5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gZShyKXtyZXR1cm4gaS5kZWZhdWx0LndyYXAoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoYS5iU3RvcCl7ZS5uZXh0PTI7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHIoKSk7Y2FzZSAyOmlmKCghYS5nZXRTdG9wRGF0YXx8MDxhLmFTdHJlYW1MaXN0Lmxlbmd0aCkmJjU9PT1hLmlQYWNrVHlwZSlyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIscigpKTtlLm5leHQ9NDticmVhaztjYXNlIDQ6aWYoMDxhLmFTdHJlYW1MaXN0Lmxlbmd0aCYmNSE9PWEuaVBhY2tUeXBlKXJldHVybiBlLmFicnVwdCgicmV0dXJuIixyKCkpO2UubmV4dD02O2JyZWFrO2Nhc2UgNjpyZXR1cm4gYS5vcHRpb25zLmNiU3RyZWFtQ0ImJmEub3B0aW9ucy5jYlN0cmVhbUNCKGMpLGEub3B0aW9ucy5jYlN0cmVhbUNCPW51bGwsZS5uZXh0PTEwLHdpbmRvdy5yZXF1ZXN0RmlsZVN5c3RlbSh3aW5kb3cuVEVNUE9SQVJZLGEub3B0aW9ucy5pRmlsZVNpemUsZnVuY3Rpb24oZSl7ZS5yb290LmdldEZpbGUoYS5zekZpbGVOYW1lLHtjcmVhdGU6ITF9LGZ1bmN0aW9uKGkpe2kuZmlsZShmdW5jdGlvbihlKXt2YXIgdCxuO3IoKSx0PWkudG9VUkwoKSxuPWUubmFtZSwoZT13aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpKS5ocmVmPXQsZS5kb3dubG9hZD1uLChuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJNb3VzZUV2ZW50cyIpKS5pbml0RXZlbnQoImNsaWNrIiwhMCwhMCksZS5kaXNwYXRjaEV2ZW50KG4pLGEuYlN0b3A9ITF9KX0sYS5lcnJvckhhbmRsZXIpfSxhLmVycm9ySGFuZGxlcik7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0sZSxhKX0pKSxmdW5jdGlvbihlKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSl9fV0pLGYpO2Z1bmN0aW9uIGYoZSx0LG4saSxyKXsoMCxvLmRlZmF1bHQpKHRoaXMsZiksdGhpcy5zelVVSUQ9ZSx0aGlzLnN6RmlsZU5hbWU9dCx0aGlzLmlTdHJlYW1UeXBlPW4sdGhpcy5zelBhdGg9IiIsdGhpcy5iU3RhcnQ9ITEsdGhpcy5nZXRTdG9wRGF0YT0hMSx0aGlzLmFTdHJlYW1MaXN0PVtdLHRoaXMub3B0aW9ucz1yLHRoaXMuaVBhY2tUeXBlPWksdGhpcy5iU3RvcD0hMX12YXIgbT0oKDAsYS5kZWZhdWx0KShwLFt7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBuPXRoaXM7cmV0dXJuIG5ldyB1LmRlZmF1bHQoZnVuY3Rpb24oZSx0KXtuLmluaXRGaWxlU3lzdGVtKCkudGhlbihmdW5jdGlvbigpeyEwPT09bi5pc1RyYW5zZT9uLmluaXRXb3JrZXIoKS50aGVuKGZ1bmN0aW9uKCl7ZShuLnN6VVVJRCl9LGZ1bmN0aW9uKGUpe3QoZSl9KTplKG4uc3pVVUlEKX0sZnVuY3Rpb24oZSl7dChlKX0pfSl9fSx7a2V5OiJpbml0RmlsZVN5c3RlbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3JldHVybiBuZXcgdS5kZWZhdWx0KGZ1bmN0aW9uKGUsdCl7MiE9PW4ub3B0aW9ucy5pcmVjb3JkVHlwZSYmKG4ub0ZpbGVTeXN0ZW09bmV3IF8obi5zelVVSUQsbi5zekZpbGVOYW1lLG4uaVN0cmVhbVR5cGUsbi5pUGFja1R5cGUsbi5vcHRpb25zKSxuLm9GaWxlU3lzdGVtLmluaXQoKS50aGVuKGZ1bmN0aW9uKCl7ZSgpfSxmdW5jdGlvbihlKXt0KGUpfSkpLGUoKX0pfX0se2tleToiaW5pdFdvcmtlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgaT10aGlzO3JldHVybiBuZXcgdS5kZWZhdWx0KGZ1bmN0aW9uKG4pe2kub1dvcmtlcj1uZXcgV29ya2VyKGkuc3pCYXNlUGF0aCsic3lzdGVtVHJhbnNmb3JtLXdvcmtlci5qcyIpLGkub1dvcmtlci5vbm1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhLGU9aS5pUGFja1R5cGU7MT09PWkub3B0aW9ucy5pUGFja2FnZSYmKGU9MTIpLCJsb2FkZWQiPT09dC50eXBlP2kub1dvcmtlci5wb3N0TWVzc2FnZSh7dHlwZToiY3JlYXRlIixidWY6aS5hSGVhZEJ1Zi5idWZmZXIsbGVuOjQwLHBhY2tUeXBlOmV9KToiY3JlYXRlZCI9PT10LnR5cGU/bigpOiJvdXRwdXREYXRhIj09PXQudHlwZSYmKGU9bmV3IFVpbnQ4QXJyYXkodC5idWYpLDIhPT1pLm9wdGlvbnMuaXJlY29yZFR5cGUmJigxPT09dC5kVHlwZT9pLm9GaWxlU3lzdGVtLndyaXRlRmlsZUhlYWRlcihlKTppLm9GaWxlU3lzdGVtLndyaXRlRmlsZUNvbnRlbnQoZSksNj09PXQuZFR5cGUmJihpLm9GaWxlU3lzdGVtLmdldFN0b3BEYXRhPSEwKSksMSE9PWkub3B0aW9ucy5pcmVjb3JkVHlwZSYmKGkub3B0aW9ucy5jYlN0cmVhbUNCJiZpLm9wdGlvbnMuY2JTdHJlYW1DQihlKSw2PT09dC5kVHlwZSYmMj09PWkub3B0aW9ucy5pcmVjb3JkVHlwZSYmKGkub3B0aW9ucy5jYlN0cmVhbUNCJiZpLm9wdGlvbnMuY2JTdHJlYW1DQihjKSxpLm9wdGlvbnMuY2JTdHJlYW1DQj1udWxsKSkpfX0pfX0se2tleToiaW5wdXREYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdDshMD09PXRoaXMuaXNUcmFuc2U/dGhpcy5vV29ya2VyJiYodD1uZXcgVWludDhBcnJheShlKSx0aGlzLm9Xb3JrZXIucG9zdE1lc3NhZ2Uoe3R5cGU6ImlucHV0RGF0YSIsYnVmOnQuYnVmZmVyLGxlbjp0Lmxlbmd0aH0pKTooMiE9PXRoaXMub3B0aW9ucy5pcmVjb3JkVHlwZSYmKCEwPT09dGhpcy5iSGVhZD8oMT09PXRoaXMuaVBhY2tUeXBlPyh0aGlzLm9GaWxlU3lzdGVtLndyaXRlRmlsZUhlYWRlcih0aGlzLmFIZWFkQnVmKSx0aGlzLm9GaWxlU3lzdGVtLndyaXRlRmlsZUNvbnRlbnQoZSkpOnRoaXMub0ZpbGVTeXN0ZW0ud3JpdGVGaWxlSGVhZGVyKGUpLHRoaXMuYkhlYWQ9ITEpOnRoaXMub0ZpbGVTeXN0ZW0ud3JpdGVGaWxlQ29udGVudChlKSksMSE9PXRoaXMub3B0aW9ucy5pcmVjb3JkVHlwZSYmKCEwPT09dGhpcy5iSGVhZCYmKHRoaXMub3B0aW9ucy5jYlN0cmVhbUNCJiZ0aGlzLm9wdGlvbnMuY2JTdHJlYW1DQih0aGlzLmFIZWFkQnVmKSx0aGlzLmJIZWFkPSExKSx0aGlzLm9wdGlvbnMuY2JTdHJlYW1DQiYmdGhpcy5vcHRpb25zLmNiU3RyZWFtQ0IoZSkpKX19LHtrZXk6InN0b3BSZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IHUuZGVmYXVsdChmdW5jdGlvbihlLHQpeyEwPT09bi5pc1RyYW5zZSYmKG4ub1dvcmtlcj9uLm9Xb3JrZXIucG9zdE1lc3NhZ2Uoe3R5cGU6InJlbGVhc2UifSk6dCgpKSxuLm9GaWxlU3lzdGVtPyhuLm9GaWxlU3lzdGVtLmJTdG9wPSEwLG4ub0ZpbGVTeXN0ZW0uc3RvcFdyaXRlRmlsZSgpLnRoZW4oZnVuY3Rpb24oKXtuLmJIZWFkPSEwLGUoKX0sZnVuY3Rpb24oKXt0KCl9KSk6KDUhPT1uLmlQYWNrVHlwZSYmKG4ub3B0aW9ucy5jYlN0cmVhbUNCJiZuLm9wdGlvbnMuY2JTdHJlYW1DQihjKSxuLm9wdGlvbnMuY2JTdHJlYW1DQj1udWxsKSxlKCkpfSl9fV0pLHApO2Z1bmN0aW9uIHAoZSx0LG4saSxyLGEscyl7KDAsby5kZWZhdWx0KSh0aGlzLHApLHRoaXMuc3pCYXNlUGF0aD1lLHRoaXMuc3pVVUlEPXQsdGhpcy5zekZpbGVOYW1lPW4sdGhpcy5hSGVhZEJ1Zj1uZXcgVWludDhBcnJheShpKSx0aGlzLmlQYWNrVHlwZT1yLHRoaXMuaVN0cmVhbVR5cGU9YSx0aGlzLm9Xb3JrZXI9bnVsbCx0aGlzLm9GaWxlU3lzdGVtPW51bGwsdGhpcy5vcHRpb25zPXMsdGhpcy5iSGVhZD0hMCx0aGlzLmlzVHJhbnNlPSEwLCgyPT09aVs4XSYmMD09PWlbOV0mJjI9PT1yfHwiYXVkaW8iPT09aXx8MT09PXIpJiYodGhpcy5pc1RyYW5zZT0hMSl9KDAsYS5kZWZhdWx0KSh5LFt7a2V5OiJzdGFydFJlY29yZCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSxyKXt2YXIgYT10aGlzLHM9ZC5kZWZhdWx0LnY0KCkscj1sLmRlZmF1bHQuZXh0ZW5kKHRoaXMub3B0aW9ucyxyKSxvPW5ldyBtKHRoaXMuc3pCYXNlUGF0aCxzLGUsdCxuLGkscik7cmV0dXJuIG5ldyB1LmRlZmF1bHQoZnVuY3Rpb24odCxuKXtvLmluaXQoKS50aGVuKGZ1bmN0aW9uKGUpe2Eub1N0b3JhZ2VMaXN0W2VdPW8sdChlKX0sZnVuY3Rpb24oZSl7bihlKX0pfSl9fSx7a2V5OiJpbnB1dERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7ZT10aGlzLm9TdG9yYWdlTGlzdFtlXTtlJiZlLmlucHV0RGF0YSh0KX19LHtrZXk6InN0b3BSZWNvcmQiLHZhbHVlOmZ1bmN0aW9uKGkpe3ZhciByPXRoaXM7cmV0dXJuIG5ldyB1LmRlZmF1bHQoZnVuY3Rpb24oZSx0KXt2YXIgbj1yLm9TdG9yYWdlTGlzdFtpXTtuP24uc3RvcFJlY29yZCgpLnRoZW4oZnVuY3Rpb24oKXtkZWxldGUgci5vU3RvcmFnZUxpc3RbaV0sZSgpfSxmdW5jdGlvbigpe3QoKX0pOnQoKX0pfX1dKSxhPXk7ZnVuY3Rpb24geShlLHQpeygwLG8uZGVmYXVsdCkodGhpcyx5KSx0aGlzLnN6QmFzZVBhdGg9ZSx0aGlzLm9TdG9yYWdlTGlzdD17fSx0aGlzLm9wdGlvbnM9e2lGaWxlU2l6ZToxMDczNzQxODI0LGlyZWNvcmRUeXBlOjEsY2JTdHJlYW1DQjpudWxsfX10LlN0b3JhZ2VNYW5hZ2VyPWF9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRVNDYW52YXM9dm9pZCAwO3ZhciBpPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdCYmcihlLnByb3RvdHlwZSx0KSxuJiZyKGUsbiksZX07ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO2kuZW51bWVyYWJsZT1pLmVudW1lcmFibGV8fCExLGkuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBpJiYoaS53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaS5rZXksaSl9fXZhciBhLHM9big2Myksbz0oYT1zKSYmYS5fX2VzTW9kdWxlP2E6e2RlZmF1bHQ6YX07ZnVuY3Rpb24gdShlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fWZ1bmN0aW9uIGQoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfWZ1bmN0aW9uIGwoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgbSxoLGMsXyxmLHAseSxpPShtPW51bGwsaShMLFt7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbigpe319LHtrZXk6ImRyYWciLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMubV9hUG9pbnQubGVuZ3RoLGk9MCxpPTA7aTxuO2krKylpZih0aGlzLm1fYVBvaW50W2ldWzBdK2UtdGhpcy5tX2lEcmlmdFN0YXJ0WD5tLm1faUNhbnZhc1dpZHRofHx0aGlzLm1fYVBvaW50W2ldWzFdK3QtdGhpcy5tX2lEcmlmdFN0YXJ0WT5tLm1faUNhbnZhc0hlaWdodHx8dGhpcy5tX2FQb2ludFtpXVswXStlLXRoaXMubV9pRHJpZnRTdGFydFg8MHx8dGhpcy5tX2FQb2ludFtpXVsxXSt0LXRoaXMubV9pRHJpZnRTdGFydFk8MClyZXR1cm4gdGhpcy5tX2lEcmlmdFN0YXJ0WD1lLHZvaWQodGhpcy5tX2lEcmlmdFN0YXJ0WT10KTtmb3IoaT0wO2k8bjtpKyspdGhpcy5tX2FQb2ludFtpXVswXT10aGlzLm1fYVBvaW50W2ldWzBdK2UtdGhpcy5tX2lEcmlmdFN0YXJ0WCx0aGlzLm1fYVBvaW50W2ldWzFdPXRoaXMubV9hUG9pbnRbaV1bMV0rdC10aGlzLm1faURyaWZ0U3RhcnRZO3RoaXMubV9pRHJpZnRTdGFydFg9ZSx0aGlzLm1faURyaWZ0U3RhcnRZPXQsdGhpcy5zZXRQb2ludEluZm8odGhpcy5tX2FQb2ludCksdigpfX0se2tleToic3RyZXRjaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXswPT09dGhpcy5tX2lFZGl0VHlwZSYmKC0xIT09dGhpcy5tX2lJbmRleENob29zZVBvaW50JiYodGhpcy5tX2FQb2ludFt0aGlzLm1faUluZGV4Q2hvb3NlUG9pbnRdWzBdPWUsdGhpcy5tX2FQb2ludFt0aGlzLm1faUluZGV4Q2hvb3NlUG9pbnRdWzFdPXQpLHRoaXMuc2V0UG9pbnRJbmZvKHRoaXMubV9hUG9pbnQpLHYoKSl9fSx7a2V5OiJpblNoYXBlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0hMSxpPXRoaXMubV9hUG9pbnQubGVuZ3RoLHI9MCxhPWktMTtyPGk7YT1yKyspdGhpcy5tX2FQb2ludFtyXVsxXT50IT10aGlzLm1fYVBvaW50W2FdWzFdPnQmJmU8KHRoaXMubV9hUG9pbnRbYV1bMF0tdGhpcy5tX2FQb2ludFtyXVswXSkqKHQtdGhpcy5tX2FQb2ludFtyXVsxXSkvKHRoaXMubV9hUG9pbnRbYV1bMV0tdGhpcy5tX2FQb2ludFtyXVsxXSkrdGhpcy5tX2FQb2ludFtyXVswXSYmKG49IW4pO3JldHVybiBufX0se2tleToiaW5BcmMiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIGk9ITEscj0wLGE9dGhpcy5tX2FQb2ludC5sZW5ndGg7cjxhO3IrKylpZihNYXRoLnNxcnQoKGUtdGhpcy5tX2FQb2ludFtyXVswXSkqKGUtdGhpcy5tX2FQb2ludFtyXVswXSkrKHQtdGhpcy5tX2FQb2ludFtyXVsxXSkqKHQtdGhpcy5tX2FQb2ludFtyXVsxXSkpPG4pe2k9ITAsdGhpcy5tX2lJbmRleENob29zZVBvaW50PXI7YnJlYWt9cmV0dXJuIGl9fSx7a2V5OiJnZXRNb3VzZURvd25Qb2ludHMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5tX2lEcmlmdFN0YXJ0WD1lLHRoaXMubV9pRHJpZnRTdGFydFk9dH19LHtrZXk6ImdldFBvaW50SW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tX2FQb2ludH19LHtrZXk6InNldFBvaW50SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7bnVsbCE9ZSYmMDxlLmxlbmd0aCYmKHRoaXMubV9hUG9pbnQ9ZSx0aGlzLnNldEVkZ2VQb2ludHMoZSkpfX0se2tleToiYWRkUG9pbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5tX2FQb2ludC5sZW5ndGg8dGhpcy5tX2lNYXhQb2ludE51bSYmdGhpcy5tX2FQb2ludC5wdXNoKFtlLHRdKSx0aGlzLm1fYVBvaW50Lmxlbmd0aD09PXRoaXMubV9pTWF4UG9pbnROdW0mJnRoaXMuc2V0UG9pbnRJbmZvKHRoaXMubV9hUG9pbnQpfX0se2tleToic2V0RWRnZVBvaW50cyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKTA9PT10Pyh0aGlzLm1fb0VkZ2VQb2ludHMudG9wLng9ZVt0XVswXSx0aGlzLm1fb0VkZ2VQb2ludHMudG9wLnk9ZVt0XVsxXSx0aGlzLm1fb0VkZ2VQb2ludHMubGVmdC54PWVbdF1bMF0sdGhpcy5tX29FZGdlUG9pbnRzLmxlZnQueT1lW3RdWzFdLHRoaXMubV9vRWRnZVBvaW50cy5yaWdodC54PWVbdF1bMF0sdGhpcy5tX29FZGdlUG9pbnRzLnJpZ2h0Lnk9ZVt0XVsxXSx0aGlzLm1fb0VkZ2VQb2ludHMuYm90dG9tLng9ZVt0XVswXSx0aGlzLm1fb0VkZ2VQb2ludHMuYm90dG9tLnk9ZVt0XVsxXSk6KGVbdF1bMV08dGhpcy5tX29FZGdlUG9pbnRzLnRvcC55JiYodGhpcy5tX29FZGdlUG9pbnRzLnRvcC54PWVbdF1bMF0sdGhpcy5tX29FZGdlUG9pbnRzLnRvcC55PWVbdF1bMV0pLGVbdF1bMF0+dGhpcy5tX29FZGdlUG9pbnRzLnJpZ2h0LngmJih0aGlzLm1fb0VkZ2VQb2ludHMucmlnaHQueD1lW3RdWzBdLHRoaXMubV9vRWRnZVBvaW50cy5yaWdodC55PWVbdF1bMV0pLGVbdF1bMV0+dGhpcy5tX29FZGdlUG9pbnRzLmJvdHRvbS55JiYodGhpcy5tX29FZGdlUG9pbnRzLmJvdHRvbS54PWVbdF1bMF0sdGhpcy5tX29FZGdlUG9pbnRzLmJvdHRvbS55PWVbdF1bMV0pLGVbdF1bMF08dGhpcy5tX29FZGdlUG9pbnRzLmxlZnQueCYmKHRoaXMubV9vRWRnZVBvaW50cy5sZWZ0Lng9ZVt0XVswXSx0aGlzLm1fb0VkZ2VQb2ludHMubGVmdC55PWVbdF1bMV0pKX19XSksZChTLG49TCksaShTLFt7a2V5OiJzZXRQb2ludEluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpe2Zvcih2YXIgdD1lWzBdWzBdLG49ZVswXVsxXSxpPWVbMF1bMF0scj1lWzBdWzFdLGE9MCxzPWUubGVuZ3RoO2E8czthKyspdD5lW2FdWzBdJiYodD1lW2FdWzBdKSxuPmVbYV1bMV0mJihuPWVbYV1bMV0pLGk8ZVthXVswXSYmKGk9ZVthXVswXSkscjxlW2FdWzFdJiYocj1lW2FdWzFdKTt0aGlzLm1fYVBvaW50PVtbdCxuXSxbaSxuXSxbaSxyXSxbdCxyXV19fX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24oKXttLm9Db250ZXh0LmZpbGxTdHlsZT10aGlzLm1fc3pGaWxsQ29sb3IsbS5vQ29udGV4dC5zdHJva2VTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3I7dmFyIGU9dGhpcy5tX2FQb2ludFswXVswXSx0PXRoaXMubV9hUG9pbnRbMF1bMV0sbj10aGlzLm1fYVBvaW50WzJdWzBdLWUsaT10aGlzLm1fYVBvaW50WzJdWzFdLXQ7aWYobS5vQ29udGV4dC5nbG9iYWxBbHBoYT10aGlzLm1faVRyYW5zbHVjZW50LG0ub0NvbnRleHQuZmlsbFJlY3QoZSx0LG4saSksbS5vQ29udGV4dC5nbG9iYWxBbHBoYT0xLG0ub0NvbnRleHQuZmlsbFRleHQodGhpcy5tX3N6VGlwcywoZSt0aGlzLm1fYVBvaW50WzJdWzBdKS8yLCh0K3RoaXMubV9hUG9pbnRbMl1bMV0pLzIpLHRoaXMubV9iQ2hvb3NlZCl7dmFyIHI9TWF0aC5yb3VuZChuLzIpLGE9TWF0aC5yb3VuZChpLzIpO2lmKDA9PT10aGlzLm1faUVkaXRUeXBlKWZvcih2YXIgcz1bZSxlK3IsZStuLGUsZStuLGUsZStyLGUrbl0sbz1bdCx0LHQsdCthLHQrYSx0K2ksdCtpLHQraV0sdT0wO3U8ODt1KyspbS5vQ29udGV4dC5iZWdpblBhdGgoKSxtLm9Db250ZXh0LmFyYyhzW3VdLG9bdV0sMywwLDM2MCwhMSksbS5vQ29udGV4dC5maWxsU3R5bGU9dGhpcy5tX3N6RHJhd0NvbG9yLG0ub0NvbnRleHQuY2xvc2VQYXRoKCksbS5vQ29udGV4dC5maWxsKCl9bS5vQ29udGV4dC5zdHJva2VSZWN0KGUsdCxuLGkpfX0se2tleToic3RyZXRjaCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXswPT09dGhpcy5tX2lFZGl0VHlwZSYmKDA9PT10aGlzLm1faUluZGV4Q2hvb3NlUG9pbnQ/ZTx0aGlzLm1fYVBvaW50WzJdWzBdJiZ0PHRoaXMubV9hUG9pbnRbMl1bMV0mJih0aGlzLm1fYVBvaW50WzBdWzBdPWUsdGhpcy5tX2FQb2ludFswXVsxXT10LHRoaXMubV9hUG9pbnRbM11bMF09ZSx0aGlzLm1fYVBvaW50WzFdWzFdPXQpOjE9PT10aGlzLm1faUluZGV4Q2hvb3NlUG9pbnQ/dDx0aGlzLm1fYVBvaW50WzJdWzFdJiYodGhpcy5tX2FQb2ludFswXVsxXT10LHRoaXMubV9hUG9pbnRbMV1bMV09dCk6Mj09PXRoaXMubV9pSW5kZXhDaG9vc2VQb2ludD9lPnRoaXMubV9hUG9pbnRbM11bMF0mJnQ8dGhpcy5tX2FQb2ludFszXVsxXSYmKHRoaXMubV9hUG9pbnRbMV1bMF09ZSx0aGlzLm1fYVBvaW50WzFdWzFdPXQsdGhpcy5tX2FQb2ludFsyXVswXT1lLHRoaXMubV9hUG9pbnRbMF1bMV09dCk6Mz09PXRoaXMubV9pSW5kZXhDaG9vc2VQb2ludD9lPHRoaXMubV9hUG9pbnRbMl1bMF0mJih0aGlzLm1fYVBvaW50WzBdWzBdPWUsdGhpcy5tX2FQb2ludFszXVswXT1lKTo0PT09dGhpcy5tX2lJbmRleENob29zZVBvaW50P2U+dGhpcy5tX2FQb2ludFswXVswXSYmKHRoaXMubV9hUG9pbnRbMV1bMF09ZSx0aGlzLm1fYVBvaW50WzJdWzBdPWUpOjU9PT10aGlzLm1faUluZGV4Q2hvb3NlUG9pbnQ/ZTx0aGlzLm1fYVBvaW50WzFdWzBdJiZ0PnRoaXMubV9hUG9pbnRbMV1bMV0mJih0aGlzLm1fYVBvaW50WzNdWzBdPWUsdGhpcy5tX2FQb2ludFszXVsxXT10LHRoaXMubV9hUG9pbnRbMF1bMF09ZSx0aGlzLm1fYVBvaW50WzJdWzFdPXQpOjY9PT10aGlzLm1faUluZGV4Q2hvb3NlUG9pbnQ/dD50aGlzLm1fYVBvaW50WzFdWzFdJiYodGhpcy5tX2FQb2ludFsyXVsxXT10LHRoaXMubV9hUG9pbnRbM11bMV09dCk6Nz09PXRoaXMubV9pSW5kZXhDaG9vc2VQb2ludCYmZT50aGlzLm1fYVBvaW50WzBdWzBdJiZ0PnRoaXMubV9hUG9pbnRbMF1bMV0mJih0aGlzLm1fYVBvaW50WzJdWzBdPWUsdGhpcy5tX2FQb2ludFsyXVsxXT10LHRoaXMubV9hUG9pbnRbMV1bMF09ZSx0aGlzLm1fYVBvaW50WzNdWzFdPXQpLHYoKSl9fSx7a2V5OiJtb3ZlIix2YWx1ZTpmdW5jdGlvbihlKXt2KCksdGhpcy5tX2JDaG9vc2VkPSEwO3ZhciB0PWVbMF1bMF0sbj1lWzBdWzFdLGk9ZVsxXVswXSxlPWVbMV1bMV07dGhpcy5zZXRQb2ludEluZm8oW1t0LG5dLFtpLG5dLFtpLGVdLFt0LGVdXSksdGhpcy5kcmF3KCl9fSx7a2V5OiJpbkFyYyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgaT10aGlzLm1fYVBvaW50WzBdWzBdLHI9dGhpcy5tX2FQb2ludFswXVsxXSxhPXRoaXMubV9hUG9pbnRbMl1bMF0taSxzPXRoaXMubV9hUG9pbnRbMl1bMV0tcixvPU1hdGgucm91bmQoYS8yKSx1PU1hdGgucm91bmQocy8yKSxkPVtpLGkrbyxpK2EsaSxpK2EsaSxpK28saSthXSxsPVtyLHIscixyK3Uscit1LHIrcyxyK3MscitzXSxoPTA7aDw4O2grKylpZihNYXRoLnNxcnQoKGUtZFtoXSkqKGUtZFtoXSkrKHQtbFtoXSkqKHQtbFtoXSkpPG4pcmV0dXJuIHRoaXMubV9pSW5kZXhDaG9vc2VQb2ludD1oLCEwO3JldHVybiExfX1dKSxoPVMsZChrLG4pLGkoayxbe2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LG4saTsidHJ1ZSI9PT10aGlzLm1fc3pFbmFibGVkJiYoZT10aGlzLm1fYVBvaW50WzBdWzBdLHQ9dGhpcy5tX2FQb2ludFswXVsxXSxuPXRoaXMubV9hUG9pbnRbMl1bMF0tZSxpPXRoaXMubV9hUG9pbnRbMl1bMV0tdCxtLm9Db250ZXh0LmJlZ2luUGF0aCgpLG0ub0NvbnRleHQuc3Ryb2tlU3R5bGU9dGhpcy5tX3N6RHJhd0NvbG9yLG0ub0NvbnRleHQuZ2xvYmFsQWxwaGE9MSxtLm9Db250ZXh0LnJlY3QoZSx0LG4saSksbS5vQ29udGV4dC5mb250PSIxNXB4IHNlcmlmIixtLm9Db250ZXh0LnN0cm9rZVRleHQodGhpcy5tX3N6VGV4dCxlLHQrMTUpLG0ub0NvbnRleHQuc3Ryb2tlKCkpfX0se2tleToiZHJhZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm1fYVBvaW50Lmxlbmd0aCxpPTA7aWYoIjAiPT09dGhpcy5tX3N6QWxpZ25tZW50KXtmb3IoaT0wO2k8bjtpKyspaWYodGhpcy5tX2FQb2ludFtpXVsxXSt0LXRoaXMubV9pRHJpZnRTdGFydFk+bS5tX2lDYW52YXNIZWlnaHR8fHRoaXMubV9hUG9pbnRbaV1bMF0rZS10aGlzLm1faURyaWZ0U3RhcnRYPDB8fHRoaXMubV9hUG9pbnRbaV1bMV0rdC10aGlzLm1faURyaWZ0U3RhcnRZPDApcmV0dXJuIHRoaXMubV9pRHJpZnRTdGFydFg9ZSx2b2lkKHRoaXMubV9pRHJpZnRTdGFydFk9dCk7Zm9yKGk9MDtpPG47aSsrKXRoaXMubV9hUG9pbnRbaV1bMF09dGhpcy5tX2FQb2ludFtpXVswXStlLXRoaXMubV9pRHJpZnRTdGFydFgsdGhpcy5tX2FQb2ludFtpXVsxXT10aGlzLm1fYVBvaW50W2ldWzFdK3QtdGhpcy5tX2lEcmlmdFN0YXJ0WX1lbHNlIGlmKCIxIj09PXRoaXMubV9zekFsaWdubWVudHx8IjIiPT09dGhpcy5tX3N6QWxpZ25tZW50KXtmb3IoaT0wO2k8bjtpKyspaWYodGhpcy5tX2FQb2ludFtpXVsxXSt0LXRoaXMubV9pRHJpZnRTdGFydFk+bS5tX2lDYW52YXNIZWlnaHR8fHRoaXMubV9hUG9pbnRbaV1bMV0rdC10aGlzLm1faURyaWZ0U3RhcnRZPDApcmV0dXJuIHRoaXMubV9pRHJpZnRTdGFydFg9ZSx2b2lkKHRoaXMubV9pRHJpZnRTdGFydFk9dCk7Zm9yKGk9MDtpPG47aSsrKXRoaXMubV9hUG9pbnRbaV1bMV09dGhpcy5tX2FQb2ludFtpXVsxXSt0LXRoaXMubV9pRHJpZnRTdGFydFl9dGhpcy5tX2lEcmlmdFN0YXJ0WD1lLHRoaXMubV9pRHJpZnRTdGFydFk9dCx0aGlzLnNldEVkZ2VQb2ludHModGhpcy5tX2FQb2ludCksdigpfX0se2tleToic3RyZXRjaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGM9ayxkKGIsbiksaShiLFt7a2V5OiJkcmF3Iix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1tLm1faUNhbnZhc1dpZHRoL3RoaXMubV9pR3JpZENvbE51bSx0PW0ubV9pQ2FudmFzSGVpZ2h0L3RoaXMubV9pR3JpZFJvd051bSxuPSIiLGk9MDtpPHRoaXMubV9pR3JpZFJvd051bTtpKyspe2Zvcih2YXIgcj10aGlzLm1fc3pHcmlkTWFwLnN1YnN0cmluZyg2KmksNippKzYpLGE9cGFyc2VJbnQoImYiK3IsMTYpLnRvU3RyaW5nKDIpLnNwbGl0KCIiKS5zbGljZSg0KSxzPSIiLG89MDtvPHRoaXMubV9pR3JpZENvbE51bTtvKyspe3ZhciB1PSIiLHU9IjEiPT09YVtvXT8obS5vQ29udGV4dC5zdHJva2VTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5nbG9iYWxBbHBoYT0xLG0ub0NvbnRleHQuc3Ryb2tlUmVjdChlKm8sdCppLGUsdCksIjEiKToiMCI7dGhpcy5tX2FBZGRHcmlkTWFwLmxlbmd0aCYmMT09PXRoaXMubV9hQWRkR3JpZE1hcFtpXVtvXSYmKG0ub0NvbnRleHQuc3Ryb2tlU3R5bGU9dGhpcy5tX3N6RHJhd0NvbG9yLG0ub0NvbnRleHQuc3Ryb2tlUmVjdChlKm8sdCppLGUsdCksdT0iMSIpLHMrPXV9bis9cGFyc2VJbnQoIjExMTEiK3MrIjAwIiwyKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpfXRoaXMubV9zekdyaWRNYXA9bn19LHtrZXk6Im1vdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkpe2Zvcih2YXIgcj1tLm1faUNhbnZhc1dpZHRoL3RoaXMubV9pR3JpZENvbE51bSxhPW0ubV9pQ2FudmFzSGVpZ2h0L3RoaXMubV9pR3JpZFJvd051bSxzPU1hdGguZmxvb3IoZS9yKSxvPU1hdGguZmxvb3IodC9hKSx1PU1hdGguZmxvb3IoTWF0aC5hYnMobi1lKS9yKSxkPU1hdGguZmxvb3IoTWF0aC5hYnMoaS10KS9hKSxsPTEsaD0xLGw9MDxuLWU/MTotMSxoPTA8aS10PzE6LTEsYz1bXSxfPTA7Xzx0aGlzLm1faUdyaWRSb3dOdW07XysrKXtjW19dPVtdO2Zvcih2YXIgZj0wO2Y8dGhpcy5tX2lHcmlkQ29sTnVtO2YrKyljW19dW2ZdPTE9PT1sPzE9PT1oP288PV8mJl88PW8rZCYmczw9ZiYmZjw9cyt1PzE6MDpfPD1vJiZvLWQ8PV8mJnM8PWYmJmY8PXMrdT8xOjA6MT09PWg/bzw9XyYmXzw9bytkJiZmPD1zJiZzLXU8PWY/MTowOl88PW8mJm8tZDw9XyYmZjw9cyYmcy11PD1mPzE6MH10aGlzLm1fYUFkZEdyaWRNYXA9Yyx0aGlzLmRyYXcoKX19XSksXz1iLGQodyxuKSxpKHcsW3trZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKCl7MD09PXRoaXMubV9pTGluZVR5cGU/dGhpcy5kcmF3Tm9ybWFsTGluZSgpOjE9PT10aGlzLm1faUxpbmVUeXBlP3RoaXMuZHJhd0Fycm93TGluZSgpOjM9PT10aGlzLm1faUxpbmVUeXBlP3RoaXMuZHJhd0Nyb3NzTGluZSgpOjQ9PT10aGlzLm1faUxpbmVUeXBlJiZ0aGlzLmRyYXdMaW5lQ291bnQoKX19LHtrZXk6ImRyYXdOb3JtYWxMaW5lIix2YWx1ZTpmdW5jdGlvbigpe2lmKG0ub0NvbnRleHQuZ2xvYmFsQWxwaGE9MSwwPHRoaXMubV9hUG9pbnQubGVuZ3RoKXttLm9Db250ZXh0LmJlZ2luUGF0aCgpLG0ub0NvbnRleHQuc3Ryb2tlU3R5bGU9dGhpcy5tX3N6RHJhd0NvbG9yLG0ub0NvbnRleHQubGluZVdpZHRoPTIsbS5vQ29udGV4dC5tb3ZlVG8odGhpcy5tX2FQb2ludFswXVswXSx0aGlzLm1fYVBvaW50WzBdWzFdKTtmb3IodmFyIGU9MSx0PXRoaXMubV9hUG9pbnQubGVuZ3RoO2U8dDtlKyspbS5vQ29udGV4dC5saW5lVG8odGhpcy5tX2FQb2ludFtlXVswXSx0aGlzLm1fYVBvaW50W2VdWzFdKTtpZihtLm9Db250ZXh0LnN0cm9rZSgpLHRoaXMubV9iQ2hvb3NlZClmb3IodmFyIG49MCxpPXRoaXMubV9hUG9pbnQubGVuZ3RoO248aTtuKyspbS5vQ29udGV4dC5iZWdpblBhdGgoKSxtLm9Db250ZXh0LmZpbGxTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5hcmModGhpcy5tX2FQb2ludFtuXVswXSx0aGlzLm1fYVBvaW50W25dWzFdLDMsMCwyKk1hdGguUEksITApLG0ub0NvbnRleHQuY2xvc2VQYXRoKCksbS5vQ29udGV4dC5maWxsKCk7IiIhPT10aGlzLm1fc3pUaXBzJiYobS5vQ29udGV4dC5zdHJva2VTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5maWxsVGV4dCh0aGlzLm1fc3pUaXBzLHRoaXMubV9hUG9pbnRbMF1bMF0rMTAsdGhpcy5tX2FQb2ludFswXVsxXSs0KSl9fX0se2tleToiZHJhd0Fycm93TGluZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSxyLGEscyxvKXthPXZvaWQgMCE9PWE/YTozMCxzPXZvaWQgMCE9PXM/czoxMCxvPXZvaWQgMCE9PW8/bzoxO3ZhciB1PTE4MCpNYXRoLmF0YW4yKG4tcix0LWkpL01hdGguUEksZD0odSthKSpNYXRoLlBJLzE4MCxsPSh1LWEpKk1hdGguUEkvMTgwLHU9cypNYXRoLmNvcyhkKSxhPXMqTWF0aC5zaW4oZCksZD1zKk1hdGguY29zKGwpLGw9cypNYXRoLnNpbihsKTttLm9Db250ZXh0LnNhdmUoKSxtLm9Db250ZXh0LmJlZ2luUGF0aCgpLG0ub0NvbnRleHQubW92ZVRvKHQtdSxuLWEpLG0ub0NvbnRleHQubGluZVRvKHQsbiksbS5vQ29udGV4dC5saW5lVG8odC1kLG4tbCksbS5vQ29udGV4dC5tb3ZlVG8odCxuKSxtLm9Db250ZXh0LmxpbmVUbyhpLHIpLDE9PT1lJiYobS5vQ29udGV4dC5tb3ZlVG8oaSt1LHIrYSksbS5vQ29udGV4dC5saW5lVG8oaSxyKSxtLm9Db250ZXh0LmxpbmVUbyhpK2QscitsKSksbS5vQ29udGV4dC5zdHJva2VTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5saW5lV2lkdGg9byxtLm9Db250ZXh0LnN0cm9rZSgpLG0ub0NvbnRleHQucmVzdG9yZSgpfX0se2tleToiZHJhd0Nyb3NzTGluZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYXdOb3JtYWxMaW5lKCk7dmFyIGU9KHRoaXMubV9hUG9pbnRbMF1bMF0rdGhpcy5tX2FQb2ludFsxXVswXSkvMix0PSh0aGlzLm1fYVBvaW50WzBdWzFdK3RoaXMubV9hUG9pbnRbMV1bMV0pLzIsbj0xODAqTWF0aC5hdGFuMih0LXRoaXMubV9hUG9pbnRbMF1bMV0sZS10aGlzLm1fYVBvaW50WzBdWzBdKS9NYXRoLlBJLGk9KDkwK24pKk1hdGguUEkvMTgwLHI9KG4tOTApKk1hdGguUEkvMTgwLGE9MjUqTWF0aC5jb3MoaSkscz0yNSpNYXRoLnNpbihpKSxvPTI1Kk1hdGguY29zKHIpLG49MjUqTWF0aC5zaW4ociksaT0wLHI9MCxpPWUtYSxyPXQtcyxhPTAscz0wLHM9MD09PXRoaXMubV9pRGlyZWN0aW9uPyhhPS0xMCwtMTUpOjE9PT10aGlzLm1faURpcmVjdGlvbj9hPTEwOihhPTEwLC0xNSk7MCE9PXRoaXMubV9pRGlyZWN0aW9uJiZ0aGlzLmRyYXdBcnJvd0xpbmUoMCxpLHIsZSx0KSxtLm9Db250ZXh0LnN0cm9rZVN0eWxlPXRoaXMubV9zekRyYXdDb2xvcixtLm9Db250ZXh0LmZvbnQ9IjhweCIsbS5vQ29udGV4dC5zdHJva2VUZXh0KCJBIixpK2Escis0KSxpPWUtbyxyPXQtbiwxIT09dGhpcy5tX2lEaXJlY3Rpb24mJnRoaXMuZHJhd0Fycm93TGluZSgwLGkscixlLHQpLG0ub0NvbnRleHQuc3Ryb2tlU3R5bGU9dGhpcy5tX3N6RHJhd0NvbG9yLG0ub0NvbnRleHQuZm9udD0iOHB4IixtLm9Db250ZXh0LnN0cm9rZVRleHQoIkIiLGkrcyxyKzQpfX0se2tleToiZHJhd0xpbmVDb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYXdOb3JtYWxMaW5lKCk7dmFyIGU9KHRoaXMubV9hUG9pbnRbMF1bMF0rdGhpcy5tX2FQb2ludFsxXVswXSkvMix0PSh0aGlzLm1fYVBvaW50WzBdWzFdK3RoaXMubV9hUG9pbnRbMV1bMV0pLzIsbj0xODAqTWF0aC5hdGFuMih0LXRoaXMubV9hUG9pbnRbMF1bMV0sZS10aGlzLm1fYVBvaW50WzBdWzBdKS9NYXRoLlBJLGk9KDkwK24pKk1hdGguUEkvMTgwLHI9KG4tOTApKk1hdGguUEkvMTgwLGE9MjUqTWF0aC5jb3MoaSkscz0yNSpNYXRoLnNpbihpKSxvPTI1Kk1hdGguY29zKHIpLG49MjUqTWF0aC5zaW4ociksaT0wLHI9MCxpPWUtYSxyPXQtczsxPT09dGhpcy5tX2lBcnJvd1R5cGU/dGhpcy5kcmF3QXJyb3dMaW5lKDAsaT1lLW8scj10LW4sZSx0KTowPT09dGhpcy5tX2lBcnJvd1R5cGUmJnRoaXMuZHJhd0Fycm93TGluZSgwLGkscixlLHQpLHRoaXMubV9hQ3Jvc3NBcnJvd1BvaW50PVtbZSx0XSxbaSxyXV19fSx7a2V5OiJpblNoYXBlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0hMSxpPTAscj10aGlzLm1fYVBvaW50Lmxlbmd0aC0xO2k8cjtpKyspe3ZhciBhPU1hdGguc3FydCgodGhpcy5tX2FQb2ludFtpKzFdWzBdLXRoaXMubV9hUG9pbnRbaV1bMF0pKih0aGlzLm1fYVBvaW50W2krMV1bMF0tdGhpcy5tX2FQb2ludFtpXVswXSkrKHRoaXMubV9hUG9pbnRbaSsxXVsxXS10aGlzLm1fYVBvaW50W2ldWzFdKSoodGhpcy5tX2FQb2ludFtpKzFdWzFdLXRoaXMubV9hUG9pbnRbaV1bMV0pKTtNYXRoLnNxcnQoKGUtdGhpcy5tX2FQb2ludFtpXVswXSkqKGUtdGhpcy5tX2FQb2ludFtpXVswXSkrKHQtdGhpcy5tX2FQb2ludFtpXVsxXSkqKHQtdGhpcy5tX2FQb2ludFtpXVsxXSkpK01hdGguc3FydCgoZS10aGlzLm1fYVBvaW50W2krMV1bMF0pKihlLXRoaXMubV9hUG9pbnRbaSsxXVswXSkrKHQtdGhpcy5tX2FQb2ludFtpKzFdWzFdKSoodC10aGlzLm1fYVBvaW50W2krMV1bMV0pKS1hPDEmJihuPSEwKX1yZXR1cm4gbn19XSksZj13LGQoRCxuKSxpKEQsW3trZXk6InNldFBvaW50SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSl7aWYoMD09PXRoaXMubV9pUG9seWdvblR5cGUpe2Zvcih2YXIgdD1lWzBdWzBdLG49ZVswXVsxXSxpPWVbMF1bMF0scj1lWzBdWzFdLGE9MCxzPWUubGVuZ3RoO2E8czthKyspdD5lW2FdWzBdJiYodD1lW2FdWzBdKSxuPmVbYV1bMV0mJihuPWVbYV1bMV0pLGk8ZVthXVswXSYmKGk9ZVthXVswXSkscjxlW2FdWzFdJiYocj1lW2FdWzFdKTt0aGlzLm1fYVBvaW50PVtbdCxuXSxbaSxuXSxbaSxyXSxbdCxyXV19ZWxzZSB0aGlzLm1faVBvbHlnb25UeXBlLHRoaXMubV9hUG9pbnQ9ZTt0aGlzLnNldEVkZ2VQb2ludHMoZSl9fX0se2tleToiZHJhdyIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwPHRoaXMubV9hUG9pbnQubGVuZ3RoKXttLm9Db250ZXh0LmZpbGxTdHlsZT10aGlzLm1fc3pGaWxsQ29sb3IsbS5vQ29udGV4dC5zdHJva2VTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5nbG9iYWxBbHBoYT0xO3ZhciBlPTAsdD0wO2lmKHRoaXMubV9iQ2hvb3NlZClmb3IoZT0wLHQ9dGhpcy5tX2FQb2ludC5sZW5ndGg7ZTx0O2UrKyltLm9Db250ZXh0LmJlZ2luUGF0aCgpLG0ub0NvbnRleHQuYXJjKHRoaXMubV9hUG9pbnRbZV1bMF0sdGhpcy5tX2FQb2ludFtlXVsxXSwzLDAsMzYwLCExKSxtLm9Db250ZXh0LmZpbGxTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5jbG9zZVBhdGgoKSxtLm9Db250ZXh0LmZpbGwoKTtmb3IobS5vQ29udGV4dC5iZWdpblBhdGgoKSxtLm9Db250ZXh0Lm1vdmVUbyh0aGlzLm1fYVBvaW50WzBdWzBdLHRoaXMubV9hUG9pbnRbMF1bMV0pLGU9MCx0PXRoaXMubV9hUG9pbnQubGVuZ3RoO2U8dDtlKyspMCE9PWUmJm0ub0NvbnRleHQubGluZVRvKHRoaXMubV9hUG9pbnRbZV1bMF0sdGhpcy5tX2FQb2ludFtlXVsxXSk7bS5vQ29udGV4dC5zdHJva2UoKSx0aGlzLm1fYkNsb3NlZCYmKG0ub0NvbnRleHQuZmlsbFRleHQodGhpcy5tX3N6VGlwcywodGhpcy5tX29FZGdlUG9pbnRzLmxlZnQueCt0aGlzLm1fb0VkZ2VQb2ludHMucmlnaHQueCkvMiwodGhpcy5tX29FZGdlUG9pbnRzLnRvcC55K3RoaXMubV9vRWRnZVBvaW50cy5ib3R0b20ueSkvMiksbS5vQ29udGV4dC5jbG9zZVBhdGgoKSxtLm9Db250ZXh0LnN0cm9rZSgpLG0ub0NvbnRleHQuZ2xvYmFsQWxwaGE9dGhpcy5tX2lUcmFuc2x1Y2VudCxtLm9Db250ZXh0LmZpbGwoKSl9fX0se2tleToibW92ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7aWYoMT09PXRoaXMubV9pUG9seWdvblR5cGUpe2lmKHRoaXMubV9hUG9pbnQubGVuZ3RoPHRoaXMubV9pTWF4UG9pbnROdW0mJjA8dGhpcy5tX2FQb2ludC5sZW5ndGgpe20ub0NvbnRleHQuZmlsbFN0eWxlPXRoaXMubV9zekZpbGxDb2xvcixtLm9Db250ZXh0LnN0cm9rZVN0eWxlPXRoaXMubV9zekRyYXdDb2xvcixtLm9Db250ZXh0Lmdsb2JhbEFscGhhPTE7Zm9yKHZhciByPTAsYT0wLHI9MCxhPXRoaXMubV9hUG9pbnQubGVuZ3RoO3I8YTtyKyspbS5vQ29udGV4dC5iZWdpblBhdGgoKSxtLm9Db250ZXh0LmFyYyh0aGlzLm1fYVBvaW50W3JdWzBdLHRoaXMubV9hUG9pbnRbcl1bMV0sMywwLDM2MCwhMSksbS5vQ29udGV4dC5maWxsU3R5bGU9dGhpcy5tX3N6RHJhd0NvbG9yLG0ub0NvbnRleHQuY2xvc2VQYXRoKCksbS5vQ29udGV4dC5maWxsKCk7Zm9yKG0ub0NvbnRleHQuYmVnaW5QYXRoKCksbS5vQ29udGV4dC5tb3ZlVG8odGhpcy5tX2FQb2ludFswXVswXSx0aGlzLm1fYVBvaW50WzBdWzFdKSxyPTAsYT10aGlzLm1fYVBvaW50Lmxlbmd0aDtyPGE7cisrKTAhPT1yJiZtLm9Db250ZXh0LmxpbmVUbyh0aGlzLm1fYVBvaW50W3JdWzBdLHRoaXMubV9hUG9pbnRbcl1bMV0pO20ub0NvbnRleHQubGluZVRvKGUsdCksbS5vQ29udGV4dC5jbG9zZVBhdGgoKSxtLm9Db250ZXh0LnN0cm9rZSgpfX1lbHNlIDA9PT10aGlzLm1faVBvbHlnb25UeXBlJiYodGhpcy5tX2JDaG9vc2VkPSEwLHRoaXMuc2V0UG9pbnRJbmZvKFtbbixpXSxbZSxpXSxbZSx0XSxbbix0XV0pLHRoaXMuZHJhdygpKX19LHtrZXk6InN0cmV0Y2giLHZhbHVlOmZ1bmN0aW9uKGUsdCl7MD09PXRoaXMubV9pRWRpdFR5cGUmJigxPT09dGhpcy5tX2lQb2x5Z29uVHlwZT8tMSE9PXRoaXMubV9pSW5kZXhDaG9vc2VQb2ludCYmKHRoaXMubV9hUG9pbnRbdGhpcy5tX2lJbmRleENob29zZVBvaW50XVswXT1lLHRoaXMubV9hUG9pbnRbdGhpcy5tX2lJbmRleENob29zZVBvaW50XVsxXT10KTowPT09dGhpcy5tX2lJbmRleENob29zZVBvaW50P2U8dGhpcy5tX2FQb2ludFsyXVswXSYmdDx0aGlzLm1fYVBvaW50WzJdWzFdJiYodGhpcy5tX2FQb2ludFswXVswXT1lLHRoaXMubV9hUG9pbnRbMF1bMV09dCx0aGlzLm1fYVBvaW50WzNdWzBdPWUsdGhpcy5tX2FQb2ludFsxXVsxXT10KToxPT09dGhpcy5tX2lJbmRleENob29zZVBvaW50P2U+dGhpcy5tX2FQb2ludFszXVswXSYmdDx0aGlzLm1fYVBvaW50WzNdWzFdJiYodGhpcy5tX2FQb2ludFsxXVswXT1lLHRoaXMubV9hUG9pbnRbMV1bMV09dCx0aGlzLm1fYVBvaW50WzJdWzBdPWUsdGhpcy5tX2FQb2ludFswXVsxXT10KToyPT09dGhpcy5tX2lJbmRleENob29zZVBvaW50P2U+dGhpcy5tX2FQb2ludFswXVswXSYmdD50aGlzLm1fYVBvaW50WzBdWzFdJiYodGhpcy5tX2FQb2ludFsyXVswXT1lLHRoaXMubV9hUG9pbnRbMl1bMV09dCx0aGlzLm1fYVBvaW50WzFdWzBdPWUsdGhpcy5tX2FQb2ludFszXVsxXT10KTozPT09dGhpcy5tX2lJbmRleENob29zZVBvaW50JiZlPHRoaXMubV9hUG9pbnRbMV1bMF0mJnQ+dGhpcy5tX2FQb2ludFsxXVsxXSYmKHRoaXMubV9hUG9pbnRbM11bMF09ZSx0aGlzLm1fYVBvaW50WzNdWzFdPXQsdGhpcy5tX2FQb2ludFswXVswXT1lLHRoaXMubV9hUG9pbnRbMl1bMV09dCksdGhpcy5zZXRQb2ludEluZm8odGhpcy5tX2FQb2ludCksdigpKX19XSkscD1ELGQoVCxuKSxpKFQsW3trZXk6ImRyYXciLHZhbHVlOmZ1bmN0aW9uKCl7bS5vQ29udGV4dC5iZWdpblBhdGgoKSxtLm9Db250ZXh0LmZpbGxTdHlsZT10aGlzLm1fc3pEcmF3Q29sb3IsbS5vQ29udGV4dC5nbG9iYWxBbHBoYT0xLG0ub0NvbnRleHQuYXJjKHRoaXMubV9hUG9pbnRbMF1bMF0sdGhpcy5tX2FQb2ludFswXVsxXSwxMCwwLDIqTWF0aC5QSSwhMCksbS5vQ29udGV4dC5jbG9zZVBhdGgoKSxtLm9Db250ZXh0LmZpbGwoKX19LHtrZXk6ImRyYWciLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToic3RyZXRjaCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLHk9VCxpKEUsW3trZXk6InNldERyYXdNdXRpU2hhcGVPbmVUaW1lIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmJEcmF3U2hhcGVNdWx0aU9uZVRpbWU9ZX19LHtrZXk6InNldE1heFNoYXBlU3VwcG9ydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5pTWF4U2hhcGVOdW1TdXBwb3J0PWV9fSx7a2V5OiJnZXRNYXhTaGFwZVN1cHBvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaU1heFNoYXBlTnVtU3VwcG9ydH19LHtrZXk6InNldERyYXdTdGF0dXMiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5iRHJhd1N0YXR1cz1lLHQmJmUmJih0aGlzLm9FdmVudENhbGxiYWNrPXQpLGV8fCh0aGlzLm9FdmVudENhbGxiYWNrPW51bGwpfX0se2tleToic2V0U2hhcGVUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnN6U2hhcGVUeXBlPWUsdigpfX0se2tleToic2V0Q3VycmVudFNoYXBlSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vQ3VycmVudFNoYXBlSW5mbz1lfHx7c3pJZDoiIixzelRpcHM6IiIsaU1pbkNsb3NlZDozLGlNYXhQb2ludE51bToxMSxpUG9seWdvblR5cGU6MSxpUmVkcmF3TW9kZTowfX19LHtrZXk6ImdldFNoYXBlVHlwZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zelNoYXBlVHlwZX19LHtrZXk6ImdldEFsbFNoYXBlc0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxuPXRoaXMuYVNoYXBlcy5sZW5ndGg7dDxuO3QrKykiR3JpZCI9PT10aGlzLmFTaGFwZXNbdF0ubV9zelR5cGU/ZS5wdXNoKHtzelR5cGU6dGhpcy5hU2hhcGVzW3RdLm1fc3pUeXBlLHN6R3JpZE1hcDp0aGlzLmFTaGFwZXNbdF0ubV9zekdyaWRNYXAsaUdyaWRDb2xOdW06dGhpcy5hU2hhcGVzW3RdLm1faUdyaWRDb2xOdW0saUdyaWRSb3dOdW06dGhpcy5hU2hhcGVzW3RdLm1faUdyaWRSb3dOdW19KToiUmVjdE9TRCI9PT10aGlzLmFTaGFwZXNbdF0ubV9zelR5cGU/ZS5wdXNoKHtzelR5cGU6dGhpcy5hU2hhcGVzW3RdLm1fc3pUeXBlLHN6VGV4dDp0aGlzLmFTaGFwZXNbdF0ubV9zelRleHQsc3pFbmFibGVkOnRoaXMuYVNoYXBlc1t0XS5tX3N6RW5hYmxlZCxzek9TRFR5cGU6dGhpcy5hU2hhcGVzW3RdLm1fc3pPU0RUeXBlLGlQb3NpdGlvblg6dGhpcy5hU2hhcGVzW3RdLm1fYVBvaW50WzBdWzBdLGlQb3NpdGlvblk6dGhpcy5hU2hhcGVzW3RdLm1fYVBvaW50WzBdWzFdLHN6RGF0ZVN0eWxlOnRoaXMuYVNoYXBlc1t0XS5tX3N6RGF0ZVN0eWxlLHN6Q2xvY2tUeXBlOnRoaXMuYVNoYXBlc1t0XS5tX3N6Q2xvY2tUeXBlLHN6RGlzcGxheVdlZWs6dGhpcy5hU2hhcGVzW3RdLm1fc3pEaXNwbGF5V2VlayxzeklkOnRoaXMuYVNoYXBlc1t0XS5tX3N6SWQsc3pBbGlnbm1lbnQ6dGhpcy5hU2hhcGVzW3RdLm1fc3pBbGlnbm1lbnR9KTplLnB1c2goe3N6VHlwZTp0aGlzLmFTaGFwZXNbdF0ubV9zelR5cGUsYVBvaW50OnRoaXMuYVNoYXBlc1t0XS5tX2FQb2ludCxzeklkOnRoaXMuYVNoYXBlc1t0XS5tX3N6SWQsYkNob29zZWQ6dGhpcy5hU2hhcGVzW3RdLm1fYkNob29zZWR9KTtyZXR1cm4gZX19LHtrZXk6ImRlbGV0ZVJlcGVhdFBvbHlvbkJ5SWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0QWxsU2hhcGVzSW5mbygpLG49dC5sZW5ndGg7aWYoMDxuKWZvcih2YXIgaT0wO2k8bjtpKyspIlBvbHlnb24iPT09dFtpXS5zelR5cGUmJnRbaV0uc3pJZD09PWUmJnRoaXMuZGVsZXRlU2hhcGUoaSl9fSx7a2V5OiJnZXRTaGFwZXNJbmZvQnlUeXBlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10sbj0wLGk9dGhpcy5hU2hhcGVzLmxlbmd0aDtuPGk7bisrKXRoaXMuYVNoYXBlc1tuXS5tX3N6VHlwZT09PWUmJigiR3JpZCI9PT10aGlzLmFTaGFwZXNbbl0ubV9zelR5cGU/dC5wdXNoKHtzelR5cGU6dGhpcy5hU2hhcGVzW25dLm1fc3pUeXBlLHN6R3JpZE1hcDp0aGlzLmFTaGFwZXNbbl0ubV9zekdyaWRNYXAsaUdyaWRDb2xOdW06dGhpcy5hU2hhcGVzW25dLm1faUdyaWRDb2xOdW0saUdyaWRSb3dOdW06dGhpcy5hU2hhcGVzW25dLm1faUdyaWRSb3dOdW19KToiUmVjdE9TRCI9PT10aGlzLmFTaGFwZXNbbl0ubV9zelR5cGU/dC5wdXNoKHtzelR5cGU6dGhpcy5hU2hhcGVzW25dLm1fc3pUeXBlLHN6VGV4dDp0aGlzLmFTaGFwZXNbbl0ubV9zelRleHQsc3pFbmFibGVkOnRoaXMuYVNoYXBlc1tuXS5tX3N6RW5hYmxlZCxzek9TRFR5cGU6dGhpcy5hU2hhcGVzW25dLm1fc3pPU0RUeXBlLGlQb3NpdGlvblg6dGhpcy5hU2hhcGVzW25dLm1fYVBvaW50WzBdWzBdLGlQb3NpdGlvblk6dGhpcy5hU2hhcGVzW25dLm1fYVBvaW50WzBdWzFdLHN6RGF0ZVN0eWxlOnRoaXMuYVNoYXBlc1tuXS5tX3N6RGF0ZVN0eWxlLHN6Q2xvY2tUeXBlOnRoaXMuYVNoYXBlc1tuXS5tX3N6Q2xvY2tUeXBlLHN6RGlzcGxheVdlZWs6dGhpcy5hU2hhcGVzW25dLm1fc3pEaXNwbGF5V2VlayxzeklkOnRoaXMuYVNoYXBlc1tuXS5tX3N6SWQsc3pBbGlnbm1lbnQ6dGhpcy5hU2hhcGVzW25dLm1fc3pBbGlnbm1lbnR9KToiUG9seWdvbiI9PT1lP3QucHVzaCh7c3pUeXBlOnRoaXMuYVNoYXBlc1tuXS5tX3N6VHlwZSxzeklkOnRoaXMuYVNoYXBlc1tuXS5tX3N6SWQsaVBvbHlnb25UeXBlOnRoaXMuYVNoYXBlc1tuXS5tX2lQb2x5Z29uVHlwZSxpTWluQ2xvc2VkOnRoaXMuYVNoYXBlc1tuXS5tX2lNaW5DbG9zZWQsaU1heFBvaW50TnVtOnRoaXMuYVNoYXBlc1tuXS5tX2lNYXhQb2ludE51bSxpRWRpdFR5cGU6dGhpcy5hU2hhcGVzW25dLm1faUVkaXRUeXBlLGFQb2ludDp0aGlzLmFTaGFwZXNbbl0ubV9hUG9pbnQsYkNsb3NlZDp0aGlzLmFTaGFwZXNbbl0ubV9iQ2xvc2VkLHN6VGlwczp0aGlzLmFTaGFwZXNbbl0ubV9zelRpcHMsc3pEcmF3Q29sb3I6dGhpcy5hU2hhcGVzW25dLm1fc3pEcmF3Q29sb3Isc3pGaWxsQ29sb3I6dGhpcy5hU2hhcGVzW25dLm1fc3pGaWxsQ29sb3IsaVRyYW5zbHVjZW50OnRoaXMuYVNoYXBlc1tuXS5tX2lUcmFuc2x1Y2VudH0pOiJMaW5lIj09PWU/dC5wdXNoKHtzelR5cGU6dGhpcy5hU2hhcGVzW25dLm1fc3pUeXBlLHN6SWQ6dGhpcy5hU2hhcGVzW25dLm1fc3pJZCxhUG9pbnQ6dGhpcy5hU2hhcGVzW25dLm1fYVBvaW50LHN6VGlwczp0aGlzLmFTaGFwZXNbbl0ubV9zelRpcHMsaUxpbmVUeXBlOnRoaXMuYVNoYXBlc1tuXS5tX2lMaW5lVHlwZSxpRGlyZWN0aW9uOnRoaXMuYVNoYXBlc1tuXS5tX2lEaXJlY3Rpb24saUFycm93VHlwZTp0aGlzLmFTaGFwZXNbbl0ubV9pQXJyb3dUeXBlLHN6RHJhd0NvbG9yOnRoaXMuYVNoYXBlc1tuXS5tX3N6RHJhd0NvbG9yLGFDcm9zc0Fycm93UG9pbnQ6dGhpcy5hU2hhcGVzW25dLm1fYUNyb3NzQXJyb3dQb2ludH0pOiJSZWN0Ij09PWU/dC5wdXNoKHtzelR5cGU6dGhpcy5hU2hhcGVzW25dLm1fc3pUeXBlLGlFZGl0VHlwZTp0aGlzLmFTaGFwZXNbbl0ubV9pRWRpdFR5cGUsYVBvaW50OnRoaXMuYVNoYXBlc1tuXS5tX2FQb2ludCxzelRpcHM6dGhpcy5hU2hhcGVzW25dLm1fc3pUaXBzLHN6RHJhd0NvbG9yOnRoaXMuYVNoYXBlc1tuXS5tX3N6RHJhd0NvbG9yLHN6RmlsbENvbG9yOnRoaXMuYVNoYXBlc1tuXS5tX3N6RmlsbENvbG9yLGlUcmFuc2x1Y2VudDp0aGlzLmFTaGFwZXNbbl0ubV9pVHJhbnNsdWNlbnR9KTp0LnB1c2goe3N6VHlwZTp0aGlzLmFTaGFwZXNbbl0ubV9zelR5cGUsYVBvaW50OnRoaXMuYVNoYXBlc1tuXS5tX2FQb2ludH0pKTtyZXR1cm4gdH19LHtrZXk6InNldFNoYXBlc0luZm9CeVR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dD10fHxbXTt2YXIgbj1udWxsO2lmKCJSZWN0Ij09PWV8fCJQb2x5Z29uIj09PWV8fCJMaW5lIj09PWV8fCJQb2ludCI9PT1lKWZvcih2YXIgaT0wLHI9dC5sZW5ndGg7aTxyO2krKykiUmVjdCI9PT1lPygobj1uZXcgaCkubV9pRWRpdFR5cGU9dFtpXS5pRWRpdFR5cGUsbi5tX3N6VGlwcz10W2ldLnN6VGlwc3x8IiIsbi5tX3N6RHJhd0NvbG9yPXRbaV0uc3pEcmF3Q29sb3Isbi5tX3N6RmlsbENvbG9yPXRbaV0uc3pGaWxsQ29sb3Isbi5tX2lUcmFuc2x1Y2VudD10W2ldLmlUcmFuc2x1Y2VudCxuLm1faVJlZHJhd01vZGU9dFtpXS5pUmVkcmF3TW9kZSk6IlBvbHlnb24iPT09ZT8obj1uZXcgcCwwPT09dFtpXS5pUG9seWdvblR5cGU/bi5tX2JDbG9zZWQ9ITA6bi5tX2JDbG9zZWQ9dFtpXS5iQ2xvc2VkLG4ubV9zelRpcHM9dFtpXS5zelRpcHN8fCIiLG4ubV9zeklkPXRbaV0uc3pJZHx8IiIsbi5tX2lQb2x5Z29uVHlwZT10W2ldLmlQb2x5Z29uVHlwZSxuLm1faU1pbkNsb3NlZD10W2ldLmlNaW5DbG9zZWR8fDMsbi5tX2lNYXhQb2ludE51bT10W2ldLmlNYXhQb2ludE51bXx8MTEsbi5tX2lFZGl0VHlwZT10W2ldLmlFZGl0VHlwZSxuLm1fc3pEcmF3Q29sb3I9dFtpXS5zekRyYXdDb2xvcixuLm1fc3pGaWxsQ29sb3I9dFtpXS5zekZpbGxDb2xvcixuLm1faVRyYW5zbHVjZW50PXRbaV0uaVRyYW5zbHVjZW50LG4ubV9pUmVkcmF3TW9kZT10W2ldLmlSZWRyYXdNb2RlKToiTGluZSI9PT1lPygobj1uZXcgZikubV9pTGluZVR5cGU9dFtpXS5pTGluZVR5cGUsbi5tX3N6VGlwcz10W2ldLnN6VGlwc3x8IiIsbi5tX3N6SWQ9dFtpXS5zeklkLG4ubV9pRGlyZWN0aW9uPXRbaV0uaURpcmVjdGlvbixuLm1faUFycm93VHlwZT10W2ldLmlBcnJvd1R5cGUsbi5tX3N6RHJhd0NvbG9yPXRbaV0uc3pEcmF3Q29sb3Isbi5zZXRQb2ludEluZm8odFtpXS5hUG9pbnQpKToiUG9pbnQiPT09ZSYmKChuPW5ldyB5KS5tX3N6SWQ9dFtpXS5zeklkLG4ubV9zekRyYXdDb2xvcj10W2ldLnN6RHJhd0NvbG9yLG4uc2V0UG9pbnRJbmZvKHRbaV0uYVBvaW50KSksbi5zZXRQb2ludEluZm8odFtpXS5hUG9pbnQpLDA9PT1pJiYobi5tX2JDaG9vc2VkPSEwKSxnKG4pO2Vsc2UiR3JpZCI9PT1lJiYoKG49bmV3IF8pLm1fc3pHcmlkTWFwPXRbMF0uc3pHcmlkTWFwfHwiIixuLm1faUdyaWRDb2xOdW09dFswXS5pR3JpZENvbE51bXx8MjIsbi5tX2lHcmlkUm93TnVtPXRbMF0uaUdyaWRSb3dOdW18fDE4LGcobikpO3YoKX19LHtrZXk6ImFkZE9TRFNoYXBlIix2YWx1ZTpmdW5jdGlvbihlLHQsbixpLHIpe258fGl8fChpPW49MCkscj1yfHx7fTt0PW5ldyBjKGUsdCksZT0xMCplLmxlbmd0aDt0Lm1fc3pPU0RUeXBlPXIuc3pPU0RUeXBlfHwiIix0Lm1fc3pEYXRlU3R5bGU9ci5zekRhdGVTdHlsZXx8IiIsdC5tX3N6Q2xvY2tUeXBlPXIuc3pDbG9ja1R5cGV8fCIiLHQubV9zekRpc3BsYXlXZWVrPXIuc3pEaXNwbGF5V2Vla3x8IiIsdC5tX3N6SWQ9ci5zeklkfHwiIix0Lm1fc3pBbGlnbm1lbnQ9IiIrci5zekFsaWdubWVudHx8IjAiLCIwIj09PXQubV9zekFsaWdubWVudD90Lm1fYVBvaW50PVtbbixpXSxbZStuLGldLFtlK24saSsyMF0sW24saSsyMF1dOiIxIj09PXQubV9zekFsaWdubWVudD90Lm1fYVBvaW50PVtbMCxpXSxbZSxpXSxbZSxpKzIwXSxbMCxpKzIwXV06IjIiPT09dC5tX3N6QWxpZ25tZW50P3QubV9hUG9pbnQ9W1t0aGlzLm1faUNhbnZhc1dpZHRoLWUsaV0sW3RoaXMubV9pQ2FudmFzV2lkdGgsaV0sW3RoaXMubV9pQ2FudmFzV2lkdGgsaSsyMF0sW3RoaXMubV9pQ2FudmFzV2lkdGgtZSxpKzIwXV06dC5tX2FQb2ludD1bW24saV0sW2UrbixpXSxbZStuLGkrMjBdLFtuLGkrMjBdXSxnKHQpLHYoKX19LHtrZXk6InNlbGVjdFNoYXBlQnlJZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxpPW0uYVNoYXBlcy5sZW5ndGg7bjxpO24rKyllPT09bS5hU2hhcGVzW25dLm1fc3pUeXBlJiYodD09PW0uYVNoYXBlc1tuXS5tX3N6SWQ/bS5hU2hhcGVzW25dLm1fYkNob29zZWQ9ITA6bS5hU2hhcGVzW25dLm1fYkNob29zZWQ9ITEpO3YoKX19LHtrZXk6InNldENhbnZhc1NpemUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7MDxlJiYwPHQmJih0aGlzLm1faUNhbnZhc1dpZHRoPWUsdGhpcy5tX2lDYW52YXNIZWlnaHQ9dCx2KCkpfX0se2tleToic2V0RHJhd1N0eWxlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dGhpcy5vU2hhcGVTdHlsZT17c3pEcmF3Q29sb3I6ZSxzekZpbGxDb2xvcjp0LGlUcmFuc2x1Y2VudDpufX19LHtrZXk6ImNsZWFyQWxsU2hhcGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5hU2hhcGVzLmxlbmd0aD0wLG0uYlBvbHlnb25EcmF3aW5nPSExLHYoKX19LHtrZXk6ImNsZWFyU2hhcGVCeVR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmFTaGFwZXMubGVuZ3RoOzA8dDt0LS0pdGhpcy5hU2hhcGVzW3QtMV0ubV9zelR5cGU9PT1lJiYoIkdyaWQiPT09ZT8odGhpcy5hU2hhcGVzW3QtMV0ubV9zekdyaWRNYXA9IiIsdGhpcy5hU2hhcGVzW3QtMV0ubV9hQWRkR3JpZE1hcD1bXSk6dGhpcy5hU2hhcGVzLnNwbGljZSh0LTEsMSkpOyJQb2x5Z29uIj09PWUmJihtLmJQb2x5Z29uRHJhd2luZz0hMSksdigpfX0se2tleToiZGVsZXRlU2hhcGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYVNoYXBlcy5sZW5ndGg+ZSYmdGhpcy5hU2hhcGVzLnNwbGljZShlLDEpLHYoKX19LHtrZXk6InVwZGF0ZUNhbnZhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vQ2FudmFzPSgwLG8uZGVmYXVsdCkoIiMiK2UpLHRoaXMub0NvbnRleHQ9dGhpcy5vQ2FudmFzWzBdLmdldENvbnRleHQoIjJkIiksdGhpcy5tX2lDYW52YXNXaWR0aD10aGlzLm9DYW52YXMud2lkdGgoKSx0aGlzLm1faUNhbnZhc0hlaWdodD10aGlzLm9DYW52YXMuaGVpZ2h0KCksTSgpfX0se2tleToicmVzaXplQ2FudmFzIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMubV9pQ2FudmFzV2lkdGg9dGhpcy5vQ2FudmFzLndpZHRoKCksdGhpcy5tX2lDYW52YXNIZWlnaHQ9dGhpcy5vQ2FudmFzLmhlaWdodCgpfX0se2tleToiY2FudmFzUmVkcmF3Iix2YWx1ZTpmdW5jdGlvbigpe3YoKX19XSksRSk7ZnVuY3Rpb24gdigpe20ub0NvbnRleHQuY2xlYXJSZWN0KDAsMCxtLm1faUNhbnZhc1dpZHRoLG0ubV9pQ2FudmFzSGVpZ2h0KTtmb3IodmFyIGU9MCx0PW0uYVNoYXBlcy5sZW5ndGg7ZTx0O2UrKyltLmFTaGFwZXNbZV0uZHJhdygpfWZ1bmN0aW9uIGcoZSl7bS5hU2hhcGVzLmxlbmd0aDxtLmlNYXhTaGFwZU51bVN1cHBvcnQmJm0uYVNoYXBlcy5wdXNoKGUpfWZ1bmN0aW9uIE0oKXt2YXIgcj0hMSxhPTAscz0wLG89ImRyYXciLHU9bnVsbDtmdW5jdGlvbiBkKCl7Zm9yKHZhciBlPS0xLHQ9MCxuPW0uYVNoYXBlcy5sZW5ndGg7dDxuO3QrKylpZihtLmFTaGFwZXNbdF0ubV9iQ2hvb3NlZCl7ZT10O2JyZWFrfXJldHVybiBlfW0ub0NhbnZhc1swXS5vbmNvbnRleHRtZW51PWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0ub0NhbnZhc1swXS5vbnNlbGVjdHN0YXJ0PWZ1bmN0aW9uKCl7cmV0dXJuITF9LG0ub0NhbnZhcy51bmJpbmQoKSxtLm9DYW52YXMuYmluZCgibW91c2Vkb3duIixmdW5jdGlvbihlKXtpZihtLm9DYW52YXNbMF0uaWQ9PT1lLnRhcmdldC5pZClpZigyPT09ZS5idXR0b24pbS5iUG9seWdvbkRyYXdpbmcmJnUmJnUubV9hUG9pbnQubGVuZ3RoPj11Lm1faU1pbkNsb3NlZCYmKHUubV9iQ2xvc2VkPSEwLG0uYlBvbHlnb25EcmF3aW5nPSExLHUuc2V0UG9pbnRJbmZvKHUubV9hUG9pbnQpLGcodSksdigpLHI9ITEsbS5iRHJhd1NoYXBlTXVsdGlPbmVUaW1lfHwobS5iRHJhd1N0YXR1cz0hMSksd2luZG93Lm9uRHJhd1NoYXBlRXZlbnQmJndpbmRvdy5vbkRyYXdTaGFwZUV2ZW50KHUubV9zelR5cGUsIm9uRHJhd0VuZCIsdS5tX3N6SWQpKTtlbHNlIGlmKDA9PT1lLmJ1dHRvbil7aWYoYT1lLm9mZnNldFgscz1lLm9mZnNldFksbz0iZHJhdyIsIW0uYlBvbHlnb25EcmF3aW5nKXt2YXIgdD1kKCk7aWYoInN0cmV0Y2giIT09KG89LTEhPT10JiZtLmFTaGFwZXNbdF0uaW5BcmMoZS5vZmZzZXRYLGUub2Zmc2V0WSw1KT8ic3RyZXRjaCI6bykpZm9yKHZhciBuPTAsaT1tLmFTaGFwZXMubGVuZ3RoO248aTtuKyspbS5hU2hhcGVzW25dLmluU2hhcGUoZS5vZmZzZXRYLGUub2Zmc2V0WSk/KG0uYVNoYXBlc1tuXS5tX2JDaG9vc2VkPSEwLG0uYVNoYXBlc1tuXS5nZXRNb3VzZURvd25Qb2ludHMoZS5vZmZzZXRYLGUub2Zmc2V0WSksbz0iZHJhZyIsd2luZG93Lm9uRHJhd1NoYXBlRXZlbnQmJndpbmRvdy5vbkRyYXdTaGFwZUV2ZW50KG0uYVNoYXBlc1tuXS5tX3N6VHlwZSwib25DaG9vc2UiLG0uYVNoYXBlc1tuXS5tX3N6SWQpKTptLmFTaGFwZXNbbl0ubV9iQ2hvb3NlZD0hMTttLm9DYW52YXNbMF0uc3R5bGUuY3Vyc29yPSJkcmFnIj09PW8/Im1vdmUiOiJkZWZhdWx0IiwiZHJhdyI9PT1vJiYxPT09bS5hU2hhcGVzLmxlbmd0aCYmMT09PW0uYVNoYXBlc1swXS5tX2lSZWRyYXdNb2RlJiYobS5kZWxldGVSZXBlYXRQb2x5b25CeUlkKG0uYVNoYXBlc1swXS5tX3N6SWQpLG0uYkRyYXdTdGF0dXM9ITApLG0uYkRyYXdTdGF0dXMmJiFtLmJEcmF3U2hhcGVNdWx0aU9uZVRpbWUmJihvPSJkcmF3Iil9aWYoImRyYXciPT09byYmbS5iRHJhd1N0YXR1cyl7aWYobS5pTWF4U2hhcGVOdW1TdXBwb3J0PD1tLmFTaGFwZXMubGVuZ3RoJiYiR3JpZCIhPT1tLnN6U2hhcGVUeXBlJiYiUG9pbnQiIT09bS5zelNoYXBlVHlwZSlyZXR1cm47IlJlY3QiPT09bS5zelNoYXBlVHlwZT91PW5ldyBoOiJHcmlkIj09PW0uc3pTaGFwZVR5cGU/MD09PW0uYVNoYXBlcy5sZW5ndGgmJmcodT1uZXcgXyk6IlBvbHlnb24iPT09bS5zelNoYXBlVHlwZT8obS5iUG9seWdvbkRyYXdpbmd8fChtLmJQb2x5Z29uRHJhd2luZz0hMCwodT1uZXcgcCkubV9zeklkPW0ub0N1cnJlbnRTaGFwZUluZm8uc3pJZHx8IiIsdS5tX3N6VGlwcz1tLm9DdXJyZW50U2hhcGVJbmZvLnN6VGlwc3x8IiIsdS5tX2lNaW5DbG9zZWQ9bS5vQ3VycmVudFNoYXBlSW5mby5pTWluQ2xvc2VkfHwzLHUubV9pTWF4UG9pbnROdW09bS5vQ3VycmVudFNoYXBlSW5mby5pTWF4UG9pbnROdW18fDExLHUubV9pUG9seWdvblR5cGU9bS5vQ3VycmVudFNoYXBlSW5mby5pUG9seWdvblR5cGUsdS5tX3N6RHJhd0NvbG9yPW0ub0N1cnJlbnRTaGFwZUluZm8uc3pEcmF3Q29sb3IsdS5tX3N6RmlsbENvbG9yPW0ub0N1cnJlbnRTaGFwZUluZm8uc3pGaWxsQ29sb3IsdS5tX2lUcmFuc2x1Y2VudD1tLm9DdXJyZW50U2hhcGVJbmZvLmlUcmFuc2x1Y2VudCx1Lm1faVJlZHJhd01vZGU9bS5vQ3VycmVudFNoYXBlSW5mby5pUmVkcmF3TW9kZSksMT09PXUubV9pUG9seWdvblR5cGUmJih1LmFkZFBvaW50KGEscyksdS5tX2FQb2ludC5sZW5ndGg9PT11Lm1faU1heFBvaW50TnVtJiYodS5tX2JDbG9zZWQ9ITAsbS5iUG9seWdvbkRyYXdpbmc9ITEsZyh1KSx2KCkscj0hMSxtLmJEcmF3U2hhcGVNdWx0aU9uZVRpbWV8fChtLmJEcmF3U3RhdHVzPSExKSx3aW5kb3cub25EcmF3U2hhcGVFdmVudCYmd2luZG93Lm9uRHJhd1NoYXBlRXZlbnQodS5tX3N6VHlwZSwib25EcmF3RW5kIix1Lm1fc3pJZCkpKSk6IlBvaW50Ij09PW0uc3pTaGFwZVR5cGUmJihtLmNsZWFyU2hhcGVCeVR5cGUoIlBvaW50IiksKHU9bmV3IHkpLm1fc3pJZD1tLm9DdXJyZW50U2hhcGVJbmZvLnN6SWR8fCIiLHUubV9zekRyYXdDb2xvcj1tLm9DdXJyZW50U2hhcGVJbmZvLnN6RHJhd0NvbG9yLHUuc2V0UG9pbnRJbmZvKFtbYSxzXV0pLGcodSksdigpKX1yPSEwfX0pLG0ub0NhbnZhcy5iaW5kKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKGUpe3ZhciB0O20uYlBvbHlnb25EcmF3aW5nP20uYkRyYXdTdGF0dXMmJnImJigiUG9seWdvbiI9PT1tLnN6U2hhcGVUeXBlJiYwPT09dS5tX2lQb2x5Z29uVHlwZSYmKHUubV9iQ2xvc2VkPSEwKSx2KCksdS5tb3ZlKGUub2Zmc2V0WCxlLm9mZnNldFksYSxzKSk6LTE8KHQ9ZCgpKT9yJiYoImRyYWciPT09bz8obS5hU2hhcGVzW3RdLmRyYWcoZS5vZmZzZXRYLGUub2Zmc2V0WSksd2luZG93Lm9uRHJhd1NoYXBlRXZlbnQmJndpbmRvdy5vbkRyYXdTaGFwZUV2ZW50KG0uYVNoYXBlc1t0XS5tX3N6VHlwZSwib25EcmFnIixtLmFTaGFwZXNbdF0ubV9zeklkKSk6InN0cmV0Y2giPT09byYmKG0uYVNoYXBlc1t0XS5zdHJldGNoKGUub2Zmc2V0WCxlLm9mZnNldFkpLHdpbmRvdy5vbkRyYXdTaGFwZUV2ZW50JiZ3aW5kb3cub25EcmF3U2hhcGVFdmVudChtLmFTaGFwZXNbdF0ubV9zelR5cGUsIm9uU3RyZXRjaCIsbS5hU2hhcGVzW3RdLm1fc3pJZCkpKTptLmJEcmF3U3RhdHVzJiZyJiYoIlJlY3QiPT09bS5zelNoYXBlVHlwZT91Lm1vdmUoW1thLHNdLFtlLm9mZnNldFgsZS5vZmZzZXRZXV0pOiJHcmlkIj09PW0uc3pTaGFwZVR5cGUmJm0uYVNoYXBlc1swXS5tb3ZlKGEscyxlLm9mZnNldFgsZS5vZmZzZXRZKSl9KSxtLm9DYW52YXMuYmluZCgibW91c2V1cCIsZnVuY3Rpb24oZSl7dmFyIHQ7bS5vQ2FudmFzWzBdLnN0eWxlLmN1cnNvcj0iZGVmYXVsdCIsbnVsbCE9dSYmImRyYXciPT09byYmKCJSZWN0Ij09PW0uc3pTaGFwZVR5cGU/KDI8TWF0aC5hYnMoZS5vZmZzZXRYLWEpJiYyPE1hdGguYWJzKGUub2Zmc2V0WS1zKSYmKGcodSksbS5iRHJhd1NoYXBlTXVsdGlPbmVUaW1lfHwobS5iRHJhd1N0YXR1cz0hMSkpLG0ub0V2ZW50Q2FsbGJhY2smJih0PXtzdGFydFBvczpbXSxlbmRQb3M6W119LGUub2Zmc2V0WD5hJiZlLm9mZnNldFk+cz8odC5zdGFydFBvcz11Lm1fYVBvaW50WzBdfHxbZS5vZmZzZXRYLGUub2Zmc2V0WV0sdC5lbmRQb3M9dS5tX2FQb2ludFsyXXx8W2Uub2Zmc2V0WCxlLm9mZnNldFldKToodC5zdGFydFBvcz11Lm1fYVBvaW50WzJdfHxbZS5vZmZzZXRYLGUub2Zmc2V0WV0sdC5lbmRQb3M9dS5tX2FQb2ludFswXXx8W2Uub2Zmc2V0WCxlLm9mZnNldFldKSxtLm9FdmVudENhbGxiYWNrJiZtLm9FdmVudENhbGxiYWNrKHQpLG0uY2xlYXJBbGxTaGFwZSgpKSx1PW51bGwpOiJQb2x5Z29uIj09PW0uc3pTaGFwZVR5cGUmJjA9PT11Lm1faVBvbHlnb25UeXBlJiZtLmJQb2x5Z29uRHJhd2luZyYmMjxNYXRoLmFicyhlLm9mZnNldFgtYSkmJjI8TWF0aC5hYnMoZS5vZmZzZXRZLXMpJiYoZyh1KSxtLmJQb2x5Z29uRHJhd2luZz0hMSxtLmJEcmF3U2hhcGVNdWx0aU9uZVRpbWV8fChtLmJEcmF3U3RhdHVzPSExKSx3aW5kb3cub25EcmF3U2hhcGVFdmVudCYmd2luZG93Lm9uRHJhd1NoYXBlRXZlbnQodS5tX3N6VHlwZSwib25EcmF3RW5kIix1Lm1fc3pJZCkpKSxyPSEhbS5iUG9seWdvbkRyYXdpbmcsbS5iUG9seWdvbkRyYXdpbmd8fHYoKX0pLG0ub0NhbnZhcy5iaW5kKCJkYmxjbGljayIsZnVuY3Rpb24oKXttLmJEcmF3U3RhdHVzJiYiR3JpZCI9PT1tLnN6U2hhcGVUeXBlJiYobS5hU2hhcGVzWzBdLm1fc3pHcmlkTWFwPSJmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmNmZmZmZmMiLHYoKSl9KSxtLm9DYW52YXMuYmluZCgibW91c2VvdXQiLGZ1bmN0aW9uKCl7bS5vQ2FudmFzWzBdLnN0eWxlLmN1cnNvcj0iZGVmYXVsdCIscj0hIW0uYlBvbHlnb25EcmF3aW5nfSl9ZnVuY3Rpb24gTCgpe2wodGhpcyxMKSx0aGlzLm1fc3pJZD0iIix0aGlzLm1fYVBvaW50PVtdLHRoaXMubV9iQ2hvb3NlZD0hMSx0aGlzLm1fc3pEcmF3Q29sb3I9bS5vU2hhcGVTdHlsZS5zekRyYXdDb2xvcix0aGlzLm1fc3pGaWxsQ29sb3I9bS5vU2hhcGVTdHlsZS5zekZpbGxDb2xvcix0aGlzLm1faVRyYW5zbHVjZW50PW0ub1NoYXBlU3R5bGUuaVRyYW5zbHVjZW50LHRoaXMubV9pSW5kZXhDaG9vc2VQb2ludD0tMSx0aGlzLm1faURyaWZ0U3RhcnRYPTAsdGhpcy5tX2lEcmlmdFN0YXJ0WT0wLHRoaXMubV9vRWRnZVBvaW50cz17dG9wOnt4OjAseTowfSxsZWZ0Ont4OjAseTowfSxyaWdodDp7eDowLHk6MH0sYm90dG9tOnt4OjAseTowfX0sdGhpcy5tX3N6VGlwcz0iIix0aGlzLm1faUVkaXRUeXBlPTAsdGhpcy5tX2lNaW5DbG9zZWQ9Myx0aGlzLm1faU1heFBvaW50TnVtPTExLHRoaXMubV9iQ2xvc2VkPSExLHRoaXMubV9pUmVkcmF3TW9kZT0wfWZ1bmN0aW9uIFMoKXtsKHRoaXMsUyk7dmFyIGU9dSh0aGlzLChTLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKFMpKS5jYWxsKHRoaXMpKTtyZXR1cm4gZS5tX3N6VHlwZT0iUmVjdCIsZX1mdW5jdGlvbiBrKGUsdCl7bCh0aGlzLGspO3ZhciBuPXUodGhpcywoay5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihrKSkuY2FsbCh0aGlzKSk7cmV0dXJuIG4ubV9zelR5cGU9IlJlY3RPU0QiLG4ubV9zek9TRFR5cGU9Im92ZXJsYXktZGF0ZSIsbi5tX3N6VGV4dD1lfHwiIixuLm1fc3pFbmFibGVkPXR8fCIiLG4ubV9zekRhdGVTdHlsZT0iIixuLm1fc3pDbG9ja1R5cGU9IiIsbi5tX3N6RGlzcGxheVdlZWs9IiIsbi5tX3N6SWQ9IiIsbi5tX3N6QWxpZ25tZW50PSIwIixufWZ1bmN0aW9uIGIoKXtsKHRoaXMsYik7dmFyIGU9dSh0aGlzLChiLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gZS5tX3N6VHlwZT0iR3JpZCIsZS5tX2lHcmlkQ29sTnVtPTIyLGUubV9pR3JpZFJvd051bT0xOCxlLm1fc3pHcmlkTWFwPSIiLGUubV9hQWRkR3JpZE1hcD1bXSxlfWZ1bmN0aW9uIHcoKXtsKHRoaXMsdyk7dmFyIGU9dSh0aGlzLCh3Ll9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHcpKS5jYWxsKHRoaXMpKTtyZXR1cm4gZS5tX3N6VHlwZT0iTGluZSIsZS5tX2lMaW5lVHlwZT0wLGUubV9pRGlyZWN0aW9uPTAsZS5tX2lBcnJvd1R5cGU9MCxlLm1fYUNyb3NzQXJyb3dQb2ludD1bXSxlfWZ1bmN0aW9uIEQoKXtsKHRoaXMsRCk7dmFyIGU9dSh0aGlzLChELl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKEQpKS5jYWxsKHRoaXMpKTtyZXR1cm4gZS5tX3N6VHlwZT0iUG9seWdvbiIsZS5tX2lQb2x5Z29uVHlwZT0xLGV9ZnVuY3Rpb24gVCgpe2wodGhpcyxUKTt2YXIgZT11KHRoaXMsKFQuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVCkpLmNhbGwodGhpcykpO3JldHVybiBlLm1fc3pUeXBlPSJQb2ludCIsZS5tX3N6SWQ9IiIsZX1mdW5jdGlvbiBFKGUpe2wodGhpcyxFKSwobT10aGlzKS5vQ2FudmFzPSgwLG8uZGVmYXVsdCkoIiMiK2UpLHRoaXMub0NvbnRleHQ9dGhpcy5vQ2FudmFzWzBdLmdldENvbnRleHQoIjJkIiksdGhpcy5hU2hhcGVzPVtdLHRoaXMuYkRyYXdTdGF0dXM9ITEsdGhpcy5zelNoYXBlVHlwZT0iUmVjdCIsdGhpcy5pTWF4U2hhcGVOdW1TdXBwb3J0PTEwLHRoaXMuYkRyYXdTaGFwZU11bHRpT25lVGltZT0hMCx0aGlzLm9DdXJyZW50U2hhcGVJbmZvPXt9LHRoaXMub0V2ZW50Q2FsbGJhY2s9bnVsbCx0aGlzLm9TaGFwZVN0eWxlPXtzekRyYXdDb2xvcjoiI2ZmMDAwMCIsc3pGaWxsQ29sb3I6IiMzNDM0MzQiLGlUcmFuc2x1Y2VudDouN30sdGhpcy5iUG9seWdvbkRyYXdpbmc9ITEsdGhpcy5tX2lDYW52YXNXaWR0aD10aGlzLm9DYW52YXMud2lkdGgoKSx0aGlzLm1faUNhbnZhc0hlaWdodD10aGlzLm9DYW52YXMuaGVpZ2h0KCksdGhpcy5tX2lIb3Jpem9udGFsUmVzb2x1dGlvbj0wLHRoaXMubV9pVmVydGljYWxSZXNvbHV0aW9uPTAsdGhpcy5tX3N6RGlzcGxheU1vZGU9IiIsdGhpcy5tX3N6VmlkZW9Gb3JtYXQ9IiIsTSgpLHRoaXMuYVNoYXBlcy5sZW5ndGg9MH10LkVTQ2FudmFzPWl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oMzExKS5kZWZhdWx0fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1fKG4oMTIpKSxyPV8obigyMzgpKSxhPV8obigzMjEpKSxzPW4oMTcpLG89XyhuKDMzNykpLHU9XyhuKDM1MykpLGQ9XyhuKDQzKSksbD1uKDI0NSksaD1fKG4oNzMpKSxjPW4oNyk7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19ci5kZWZhdWx0Lmluc3RhbGwoKTtyPXtjcmVhdGVQbGF5ZXI6ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lfHwib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOigwLGkuZGVmYXVsdCkoZSkpKXRocm93IG5ldyBjLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiTWVkaWFEYXRhU291cmNlIG11c3QgYmUgYW4gamF2YXNjcmlwdCBvYmplY3QhIik7aWYoIWUuaGFzT3duUHJvcGVydHkoInR5cGUiKSl0aHJvdyBuZXcgYy5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIk1lZGlhRGF0YVNvdXJjZSBtdXN0IGhhcyB0eXBlIGZpZWxkIHRvIGluZGljYXRlIHZpZGVvIGZpbGUgdHlwZSEiKTtyZXR1cm4gbmV3KCJmbHYiIT09ZS50eXBlP3U6bykuZGVmYXVsdChlLHQpfSxpc1N1cHBvcnRlZDpmdW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHQuc3VwcG9ydE1TRUgyNjRQbGF5YmFjaygpfSxnZXRGZWF0dXJlTGlzdDpmdW5jdGlvbigpe3JldHVybiBhLmRlZmF1bHQuZ2V0RmVhdHVyZUxpc3QoKX19O3IuQmFzZUxvYWRlcj1zLkJhc2VMb2FkZXIsci5Mb2FkZXJTdGF0dXM9cy5Mb2FkZXJTdGF0dXMsci5Mb2FkZXJFcnJvcnM9cy5Mb2FkZXJFcnJvcnMsci5FdmVudHM9ZC5kZWZhdWx0LHIuRXJyb3JUeXBlcz1sLkVycm9yVHlwZXMsci5FcnJvckRldGFpbHM9bC5FcnJvckRldGFpbHMsci5GbHZQbGF5ZXI9by5kZWZhdWx0LHIuTmF0aXZlUGxheWVyPXUuZGVmYXVsdCxyLkxvZ2dpbmdDb250cm9sPWguZGVmYXVsdCxPYmplY3QuZGVmaW5lUHJvcGVydHkociwidmVyc2lvbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIl9fVkVSU0lPTl9fIn19KSx0LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4pe24oMzEzKSxlLmV4cG9ydHM9bigzKS5PYmplY3QuYXNzaWdufSxmdW5jdGlvbihlLHQsbil7dmFyIGk9big0KTtpKGkuUytpLkYsIk9iamVjdCIse2Fzc2lnbjpuKDMxNCl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgYz1uKDExKSxfPW4oMzEpLGY9big2OCksbT1uKDQxKSxwPW4oMjIpLHk9big1MSkscj1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hcnx8bigxOSkoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCksaT0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsaS5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT1yKHt9LGUpW25dfHxPYmplY3Qua2V5cyhyKHt9LHQpKS5qb2luKCIiKSE9aX0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXAoZSksaT1hcmd1bWVudHMubGVuZ3RoLHI9MSxhPWYuZixzPW0uZjtyPGk7KWZvcih2YXIgbyx1PXkoYXJndW1lbnRzW3IrK10pLGQ9YT9fKHUpLmNvbmNhdChhKHUpKTpfKHUpLGw9ZC5sZW5ndGgsaD0wO2g8bDspbz1kW2grK10sYyYmIXMuY2FsbCh1LG8pfHwobltvXT11W29dKTtyZXR1cm4gbn06cn0sZnVuY3Rpb24oZSx0LG4pe24oMzE2KSxlLmV4cG9ydHM9bigzKS5PYmplY3Quc2V0UHJvdG90eXBlT2Z9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDQpO2koaS5TLCJPYmplY3QiLHtzZXRQcm90b3R5cGVPZjpuKDMxNykuc2V0fSl9LGZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBhKGUsdCl7aWYoaShlKSwhbih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX12YXIgbj1yKDEwKSxpPXIoMTYpO2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLG4saSl7dHJ5eyhpPXIoMTUpKEZ1bmN0aW9uLmNhbGwscig2OSkuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGUsW10pLG49IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe249ITB9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoZSx0KSxuP2UuX19wcm90b19fPXQ6aShlLHQpLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazphfX0sZnVuY3Rpb24oZSx0LG4peyFmdW5jdGlvbihpZSxyZSl7Ci8qIQogKiBAb3ZlcnZpZXcgZXM2LXByb21pc2UgLSBhIHRpbnkgaW1wbGVtZW50YXRpb24gb2YgUHJvbWlzZXMvQSsuCiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpCiAqIEBsaWNlbnNlICAgTGljZW5zZWQgdW5kZXIgTUlUIGxpY2Vuc2UKICogICAgICAgICAgICBTZWUgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3N0ZWZhbnBlbm5lci9lczYtcHJvbWlzZS9tYXN0ZXIvTElDRU5TRQogKiBAdmVyc2lvbiAgIHY0LjIuOCsxZTY4ZGNlNgogKi8KZS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkoZSl7dmFyIHQ9dHlwZW9mIGU7cmV0dXJuIGUhPT1udWxsJiYodD09PSJvYmplY3QifHx0PT09ImZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlKXtyZXR1cm4gdHlwZW9mIGU9PT0iZnVuY3Rpb24ifXZhciBlPXZvaWQgMDtpZihBcnJheS5pc0FycmF5KWU9QXJyYXkuaXNBcnJheTtlbHNlIGU9ZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKT09PSJbb2JqZWN0IEFycmF5XSJ9O3ZhciBuPWUscj0wLHQ9dm9pZCAwLGE9dm9pZCAwLHM9ZnVuY3Rpb24gZSh0LG4pe01bcl09dDtNW3IrMV09bjtyKz0yO2lmKHI9PT0yKWlmKGEpYShMKTtlbHNlIGsoKX07ZnVuY3Rpb24gbyhlKXthPWV9ZnVuY3Rpb24gZChlKXtzPWV9dmFyIGw9dHlwZW9mIHdpbmRvdyE9PSJ1bmRlZmluZWQiP3dpbmRvdzp1bmRlZmluZWQsaD1sfHx7fSxjPWguTXV0YXRpb25PYnNlcnZlcnx8aC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLF89dHlwZW9mIHNlbGY9PT0idW5kZWZpbmVkIiYmdHlwZW9mIGllIT09InVuZGVmaW5lZCImJnt9LnRvU3RyaW5nLmNhbGwoaWUpPT09IltvYmplY3QgcHJvY2Vzc10iLGY9dHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5IT09InVuZGVmaW5lZCImJnR5cGVvZiBpbXBvcnRTY3JpcHRzIT09InVuZGVmaW5lZCImJnR5cGVvZiBNZXNzYWdlQ2hhbm5lbCE9PSJ1bmRlZmluZWQiO2Z1bmN0aW9uIG0oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaWUubmV4dFRpY2soTCl9fWZ1bmN0aW9uIHAoKXtpZih0eXBlb2YgdCE9PSJ1bmRlZmluZWQiKXJldHVybiBmdW5jdGlvbigpe3QoTCl9O3JldHVybiBnKCl9ZnVuY3Rpb24geSgpe3ZhciBlPTA7dmFyIHQ9bmV3IGMoTCk7dmFyIG49ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpO3Qub2JzZXJ2ZShuLHtjaGFyYWN0ZXJEYXRhOnRydWV9KTtyZXR1cm4gZnVuY3Rpb24oKXtuLmRhdGE9ZT0rK2UlMn19ZnVuY3Rpb24gdigpe3ZhciBlPW5ldyBNZXNzYWdlQ2hhbm5lbDtlLnBvcnQxLm9ubWVzc2FnZT1MO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLnBvcnQyLnBvc3RNZXNzYWdlKDApfX1mdW5jdGlvbiBnKCl7dmFyIGU9c2V0VGltZW91dDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZShMLDEpfX12YXIgTT1uZXcgQXJyYXkoMWUzKTtmdW5jdGlvbiBMKCl7Zm9yKHZhciBlPTA7ZTxyO2UrPTIpe3ZhciB0PU1bZV07dmFyIG49TVtlKzFdO3Qobik7TVtlXT11bmRlZmluZWQ7TVtlKzFdPXVuZGVmaW5lZH1yPTB9ZnVuY3Rpb24gUygpe3RyeXt2YXIgZT1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLnJlcXVpcmUoInZlcnR4Iik7dD1lLnJ1bk9uTG9vcHx8ZS5ydW5PbkNvbnRleHQ7cmV0dXJuIHAoKX1jYXRjaChlKXtyZXR1cm4gZygpfX12YXIgaz12b2lkIDA7aWYoXylrPW0oKTtlbHNlIGlmKGMpaz15KCk7ZWxzZSBpZihmKWs9digpO2Vsc2UgaWYobD09PXVuZGVmaW5lZCYmImZ1bmN0aW9uIj09PSJmdW5jdGlvbiIpaz1TKCk7ZWxzZSBrPWcoKTtmdW5jdGlvbiBiKGUsdCl7dmFyIG49dGhpczt2YXIgaT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihUKTtpZihpW0RdPT09dW5kZWZpbmVkKUooaSk7dmFyIHI9bi5fc3RhdGU7aWYocil7dmFyIGE9YXJndW1lbnRzW3ItMV07cyhmdW5jdGlvbigpe3JldHVybiBOKHIsaSxhLG4uX3Jlc3VsdCl9KX1lbHNlIEIobixpLGUsdCk7cmV0dXJuIGl9ZnVuY3Rpb24gdyhlKXt2YXIgdD10aGlzO2lmKGUmJnR5cGVvZiBlPT09Im9iamVjdCImJmUuY29uc3RydWN0b3I9PT10KXJldHVybiBlO3ZhciBuPW5ldyB0KFQpO1cobixlKTtyZXR1cm4gbn12YXIgRD1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7ZnVuY3Rpb24gVCgpe312YXIgRT12b2lkIDAsWT0xLFA9MjtmdW5jdGlvbiBDKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIllvdSBjYW5ub3QgcmVzb2x2ZSBhIHByb21pc2Ugd2l0aCBpdHNlbGYiKX1mdW5jdGlvbiBSKCl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkEgcHJvbWlzZXMgY2FsbGJhY2sgY2Fubm90IHJldHVybiB0aGF0IHNhbWUgcHJvbWlzZS4iKX1mdW5jdGlvbiBBKGUsdCxuLGkpe3RyeXtlLmNhbGwodCxuLGkpfWNhdGNoKGUpe3JldHVybiBlfX1mdW5jdGlvbiB4KGUsaSxyKXtzKGZ1bmN0aW9uKHQpe3ZhciBuPWZhbHNlO3ZhciBlPUEocixpLGZ1bmN0aW9uKGUpe2lmKG4pcmV0dXJuO249dHJ1ZTtpZihpIT09ZSlXKHQsZSk7ZWxzZSBqKHQsZSl9LGZ1bmN0aW9uKGUpe2lmKG4pcmV0dXJuO249dHJ1ZTtGKHQsZSl9LCJTZXR0bGU6ICIrKHQuX2xhYmVsfHwiIHVua25vd24gcHJvbWlzZSIpKTtpZighbiYmZSl7bj10cnVlO0YodCxlKX19LGUpfWZ1bmN0aW9uIE8odCxlKXtpZihlLl9zdGF0ZT09PVkpaih0LGUuX3Jlc3VsdCk7ZWxzZSBpZihlLl9zdGF0ZT09PVApRih0LGUuX3Jlc3VsdCk7ZWxzZSBCKGUsdW5kZWZpbmVkLGZ1bmN0aW9uKGUpe3JldHVybiBXKHQsZSl9LGZ1bmN0aW9uKGUpe3JldHVybiBGKHQsZSl9KX1mdW5jdGlvbiBJKGUsdCxuKXtpZih0LmNvbnN0cnVjdG9yPT09ZS5jb25zdHJ1Y3RvciYmbj09PWImJnQuY29uc3RydWN0b3IucmVzb2x2ZT09PXcpTyhlLHQpO2Vsc2UgaWYobj09PXVuZGVmaW5lZClqKGUsdCk7ZWxzZSBpZih1KG4pKXgoZSx0LG4pO2Vsc2UgaihlLHQpfWZ1bmN0aW9uIFcodCxlKXtpZih0PT09ZSlGKHQsQygpKTtlbHNlIGlmKGkoZSkpe3ZhciBuPXZvaWQgMDt0cnl7bj1lLnRoZW59Y2F0Y2goZSl7Rih0LGUpO3JldHVybn1JKHQsZSxuKX1lbHNlIGoodCxlKX1mdW5jdGlvbiBIKGUpe2lmKGUuX29uZXJyb3IpZS5fb25lcnJvcihlLl9yZXN1bHQpO1UoZSl9ZnVuY3Rpb24gaihlLHQpe2lmKGUuX3N0YXRlIT09RSlyZXR1cm47ZS5fcmVzdWx0PXQ7ZS5fc3RhdGU9WTtpZihlLl9zdWJzY3JpYmVycy5sZW5ndGghPT0wKXMoVSxlKX1mdW5jdGlvbiBGKGUsdCl7aWYoZS5fc3RhdGUhPT1FKXJldHVybjtlLl9zdGF0ZT1QO2UuX3Jlc3VsdD10O3MoSCxlKX1mdW5jdGlvbiBCKGUsdCxuLGkpe3ZhciByPWUuX3N1YnNjcmliZXJzO3ZhciBhPXIubGVuZ3RoO2UuX29uZXJyb3I9bnVsbDtyW2FdPXQ7clthK1ldPW47clthK1BdPWk7aWYoYT09PTAmJmUuX3N0YXRlKXMoVSxlKX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUuX3N1YnNjcmliZXJzO3ZhciBuPWUuX3N0YXRlO2lmKHQubGVuZ3RoPT09MClyZXR1cm47dmFyIGk9dm9pZCAwLHI9dm9pZCAwLGE9ZS5fcmVzdWx0O2Zvcih2YXIgcz0wO3M8dC5sZW5ndGg7cys9Myl7aT10W3NdO3I9dFtzK25dO2lmKGkpTihuLGkscixhKTtlbHNlIHIoYSl9ZS5fc3Vic2NyaWJlcnMubGVuZ3RoPTB9ZnVuY3Rpb24gTihlLHQsbixpKXt2YXIgcj11KG4pLGE9dm9pZCAwLHM9dm9pZCAwLG89dHJ1ZTtpZihyKXt0cnl7YT1uKGkpfWNhdGNoKGUpe289ZmFsc2U7cz1lfWlmKHQ9PT1hKXtGKHQsUigpKTtyZXR1cm59fWVsc2UgYT1pO2lmKHQuX3N0YXRlIT09RSk7ZWxzZSBpZihyJiZvKVcodCxhKTtlbHNlIGlmKG89PT1mYWxzZSlGKHQscyk7ZWxzZSBpZihlPT09WSlqKHQsYSk7ZWxzZSBpZihlPT09UClGKHQsYSl9ZnVuY3Rpb24geihuLGUpe3RyeXtlKGZ1bmN0aW9uIGUodCl7VyhuLHQpfSxmdW5jdGlvbiBlKHQpe0Yobix0KX0pfWNhdGNoKGUpe0YobixlKX19dmFyIFY9MDtmdW5jdGlvbiBHKCl7cmV0dXJuIFYrK31mdW5jdGlvbiBKKGUpe2VbRF09VisrO2UuX3N0YXRlPXVuZGVmaW5lZDtlLl9yZXN1bHQ9dW5kZWZpbmVkO2UuX3N1YnNjcmliZXJzPVtdfWZ1bmN0aW9uIHEoKXtyZXR1cm4gbmV3IEVycm9yKCJBcnJheSBNZXRob2RzIG11c3QgYmUgcHJvdmlkZWQgYW4gQXJyYXkiKX12YXIgSz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9pbnN0YW5jZUNvbnN0cnVjdG9yPWU7dGhpcy5wcm9taXNlPW5ldyBlKFQpO2lmKCF0aGlzLnByb21pc2VbRF0pSih0aGlzLnByb21pc2UpO2lmKG4odCkpe3RoaXMubGVuZ3RoPXQubGVuZ3RoO3RoaXMuX3JlbWFpbmluZz10Lmxlbmd0aDt0aGlzLl9yZXN1bHQ9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtpZih0aGlzLmxlbmd0aD09PTApaih0aGlzLnByb21pc2UsdGhpcy5fcmVzdWx0KTtlbHNle3RoaXMubGVuZ3RoPXRoaXMubGVuZ3RofHwwO3RoaXMuX2VudW1lcmF0ZSh0KTtpZih0aGlzLl9yZW1haW5pbmc9PT0wKWoodGhpcy5wcm9taXNlLHRoaXMuX3Jlc3VsdCl9fWVsc2UgRih0aGlzLnByb21pc2UscSgpKX1lLnByb3RvdHlwZS5fZW51bWVyYXRlPWZ1bmN0aW9uIGUodCl7Zm9yKHZhciBuPTA7dGhpcy5fc3RhdGU9PT1FJiZuPHQubGVuZ3RoO24rKyl0aGlzLl9lYWNoRW50cnkodFtuXSxuKX07ZS5wcm90b3R5cGUuX2VhY2hFbnRyeT1mdW5jdGlvbiBlKHQsbil7dmFyIGk9dGhpcy5faW5zdGFuY2VDb25zdHJ1Y3Rvcjt2YXIgcj1pLnJlc29sdmU7aWYocj09PXcpe3ZhciBhPXZvaWQgMDt2YXIgcz12b2lkIDA7dmFyIG89ZmFsc2U7dHJ5e2E9dC50aGVufWNhdGNoKGUpe289dHJ1ZTtzPWV9aWYoYT09PWImJnQuX3N0YXRlIT09RSl0aGlzLl9zZXR0bGVkQXQodC5fc3RhdGUsbix0Ll9yZXN1bHQpO2Vsc2UgaWYodHlwZW9mIGEhPT0iZnVuY3Rpb24iKXt0aGlzLl9yZW1haW5pbmctLTt0aGlzLl9yZXN1bHRbbl09dH1lbHNlIGlmKGk9PT10ZSl7dmFyIHU9bmV3IGkoVCk7aWYobylGKHUscyk7ZWxzZSBJKHUsdCxhKTt0aGlzLl93aWxsU2V0dGxlQXQodSxuKX1lbHNlIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgaShmdW5jdGlvbihlKXtyZXR1cm4gZSh0KX0pLG4pfWVsc2UgdGhpcy5fd2lsbFNldHRsZUF0KHIodCksbil9O2UucHJvdG90eXBlLl9zZXR0bGVkQXQ9ZnVuY3Rpb24gZSh0LG4saSl7dmFyIHI9dGhpcy5wcm9taXNlO2lmKHIuX3N0YXRlPT09RSl7dGhpcy5fcmVtYWluaW5nLS07aWYodD09PVApRihyLGkpO2Vsc2UgdGhpcy5fcmVzdWx0W25dPWl9aWYodGhpcy5fcmVtYWluaW5nPT09MClqKHIsdGhpcy5fcmVzdWx0KX07ZS5wcm90b3R5cGUuX3dpbGxTZXR0bGVBdD1mdW5jdGlvbiBlKHQsbil7dmFyIGk9dGhpcztCKHQsdW5kZWZpbmVkLGZ1bmN0aW9uKGUpe3JldHVybiBpLl9zZXR0bGVkQXQoWSxuLGUpfSxmdW5jdGlvbihlKXtyZXR1cm4gaS5fc2V0dGxlZEF0KFAsbixlKX0pfTtyZXR1cm4gZX0oKTtmdW5jdGlvbiBYKGUpe3JldHVybiBuZXcgSyh0aGlzLGUpLnByb21pc2V9ZnVuY3Rpb24gWihyKXt2YXIgYT10aGlzO2lmKCFuKHIpKXJldHVybiBuZXcgYShmdW5jdGlvbihlLHQpe3JldHVybiB0KG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYW4gYXJyYXkgdG8gcmFjZS4iKSl9KTtlbHNlIHJldHVybiBuZXcgYShmdW5jdGlvbihlLHQpe3ZhciBuPXIubGVuZ3RoO2Zvcih2YXIgaT0wO2k8bjtpKyspYS5yZXNvbHZlKHJbaV0pLnRoZW4oZSx0KX0pfWZ1bmN0aW9uICQoZSl7dmFyIHQ9dGhpczt2YXIgbj1uZXcgdChUKTtGKG4sZSk7cmV0dXJuIG59ZnVuY3Rpb24gUSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIllvdSBtdXN0IHBhc3MgYSByZXNvbHZlciBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIHByb21pc2UgY29uc3RydWN0b3IiKX1mdW5jdGlvbiBlZSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Byb21pc2UnOiBQbGVhc2UgdXNlIHRoZSAnbmV3JyBvcGVyYXRvciwgdGhpcyBvYmplY3QgY29uc3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIpfXZhciB0ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7dGhpc1tEXT1HKCk7dGhpcy5fcmVzdWx0PXRoaXMuX3N0YXRlPXVuZGVmaW5lZDt0aGlzLl9zdWJzY3JpYmVycz1bXTtpZihUIT09ZSl7dHlwZW9mIGUhPT0iZnVuY3Rpb24iJiZRKCk7dGhpcyBpbnN0YW5jZW9mIHQ/eih0aGlzLGUpOmVlKCl9fXQucHJvdG90eXBlLmNhdGNoPWZ1bmN0aW9uIGUodCl7cmV0dXJuIHRoaXMudGhlbihudWxsLHQpfTt0LnByb3RvdHlwZS5maW5hbGx5PWZ1bmN0aW9uIGUodCl7dmFyIG49dGhpczt2YXIgaT1uLmNvbnN0cnVjdG9yO2lmKHUodCkpcmV0dXJuIG4udGhlbihmdW5jdGlvbihlKXtyZXR1cm4gaS5yZXNvbHZlKHQoKSkudGhlbihmdW5jdGlvbigpe3JldHVybiBlfSl9LGZ1bmN0aW9uKGUpe3JldHVybiBpLnJlc29sdmUodCgpKS50aGVuKGZ1bmN0aW9uKCl7dGhyb3cgZX0pfSk7cmV0dXJuIG4udGhlbih0LHQpfTtyZXR1cm4gdH0oKTtmdW5jdGlvbiBuZSgpe3ZhciBlPXZvaWQgMDtpZih0eXBlb2YgcmUhPT0idW5kZWZpbmVkIillPXJlO2Vsc2UgaWYodHlwZW9mIHNlbGYhPT0idW5kZWZpbmVkIillPXNlbGY7ZWxzZSB0cnl7ZT1GdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfWNhdGNoKGUpe3Rocm93IG5ldyBFcnJvcigicG9seWZpbGwgZmFpbGVkIGJlY2F1c2UgZ2xvYmFsIG9iamVjdCBpcyB1bmF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50Iil9dmFyIHQ9ZS5Qcm9taXNlO2lmKHQpe3ZhciBuPW51bGw7dHJ5e249T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQucmVzb2x2ZSgpKX1jYXRjaChlKXt9aWYobj09PSJbb2JqZWN0IFByb21pc2VdIiYmIXQuY2FzdClyZXR1cm59ZS5Qcm9taXNlPXRlfXJldHVybiB0ZS5wcm90b3R5cGUudGhlbj1iLHRlLmFsbD1YLHRlLnJhY2U9Wix0ZS5yZXNvbHZlPXcsdGUucmVqZWN0PSQsdGUuX3NldFNjaGVkdWxlcj1vLHRlLl9zZXRBc2FwPWQsdGUuX2FzYXA9cyx0ZS5wb2x5ZmlsbD1uZSx0ZS5Qcm9taXNlPXRlfSgpfS5jYWxsKHRoaXMsbigzMTkpLG4oMzIwKSl9LGZ1bmN0aW9uKGUsdCl7dmFyIG4saSxlPWUuZXhwb3J0cz17fTtmdW5jdGlvbiByKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gYSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gcyh0KXtpZihuPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChuPT09cnx8IW4pJiZzZXRUaW1lb3V0KXJldHVybiBuPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gbih0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gbi5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gbi5jYWxsKHRoaXMsdCwwKX19fSFmdW5jdGlvbigpe3RyeXtuPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6cn1jYXRjaChlKXtuPXJ9dHJ5e2k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6YX1jYXRjaChlKXtpPWF9fSgpO3ZhciBvLHU9W10sZD0hMSxsPS0xO2Z1bmN0aW9uIGgoKXtkJiZvJiYoZD0hMSxvLmxlbmd0aD91PW8uY29uY2F0KHUpOmw9LTEsdS5sZW5ndGgmJmMoKSl9ZnVuY3Rpb24gYygpe2lmKCFkKXt2YXIgZT1zKGgpO2Q9ITA7Zm9yKHZhciB0PXUubGVuZ3RoO3Q7KXtmb3Iobz11LHU9W107KytsPHQ7KW8mJm9bbF0ucnVuKCk7bD0tMSx0PXUubGVuZ3RofW89bnVsbCxkPSExLGZ1bmN0aW9uKHQpe2lmKGk9PT1jbGVhclRpbWVvdXQpcmV0dXJuIGNsZWFyVGltZW91dCh0KTtpZigoaT09PWF8fCFpKSYmY2xlYXJUaW1lb3V0KXJldHVybiBpPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQodCk7dHJ5e2kodCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBpLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gaS5jYWxsKHRoaXMsdCl9fX0oZSl9fWZ1bmN0aW9uIF8oZSx0KXt0aGlzLmZ1bj1lLHRoaXMuYXJyYXk9dH1mdW5jdGlvbiBmKCl7fWUubmV4dFRpY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoMTxhcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgbj0xO248YXJndW1lbnRzLmxlbmd0aDtuKyspdFtuLTFdPWFyZ3VtZW50c1tuXTt1LnB1c2gobmV3IF8oZSx0KSksMSE9PXUubGVuZ3RofHxkfHxzKGMpfSxfLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxlLnRpdGxlPSJicm93c2VyIixlLmJyb3dzZXI9ITAsZS5lbnY9e30sZS5hcmd2PVtdLGUudmVyc2lvbj0iIixlLnZlcnNpb25zPXt9LGUub249ZixlLmFkZExpc3RlbmVyPWYsZS5vbmNlPWYsZS5vZmY9ZixlLnJlbW92ZUxpc3RlbmVyPWYsZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZixlLmVtaXQ9ZixlLnByZXBlbmRMaXN0ZW5lcj1mLGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mLGUubGlzdGVuZXJzPWZ1bmN0aW9uKGUpe3JldHVybltdfSxlLmJpbmRpbmc9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxlLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sZS5jaGRpcj1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxlLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSxmdW5jdGlvbihlLHQpe3ZhciBuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihuPXdpbmRvdyl9ZS5leHBvcnRzPW59LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPW8obigxKSkscj1vKG4oMikpLGE9byhuKDIzOSkpLHM9big3Mik7ZnVuY3Rpb24gbyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAsci5kZWZhdWx0KSh1LG51bGwsW3trZXk6InN1cHBvcnRNU0VIMjY0UGxheWJhY2siLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5NZWRpYVNvdXJjZSYmd2luZG93Lk1lZGlhU291cmNlLmlzVHlwZVN1cHBvcnRlZCgndmlkZW8vbXA0OyBjb2RlY3M9ImF2YzEuNDJFMDFFLG1wNGEuNDAuMiInKX19LHtrZXk6InN1cHBvcnROZXR3b3JrU3RyZWFtSU8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9bmV3IGEuZGVmYXVsdCh7fSwoMCxzLmNyZWF0ZURlZmF1bHRDb25maWcpKCkpLHQ9ZS5sb2FkZXJUeXBlO3JldHVybiBlLmRlc3Ryb3koKSwiZmV0Y2gtc3RyZWFtLWxvYWRlciI9PXR8fCJ4aHItbW96LWNodW5rZWQtbG9hZGVyIj09dH19LHtrZXk6ImdldE5ldHdvcmtMb2FkZXJUeXBlTmFtZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1uZXcgYS5kZWZhdWx0KHt9LCgwLHMuY3JlYXRlRGVmYXVsdENvbmZpZykoKSksdD1lLmxvYWRlclR5cGU7cmV0dXJuIGUuZGVzdHJveSgpLHR9fSx7a2V5OiJzdXBwb3J0TmF0aXZlTWVkaWFQbGF5YmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT0odS52aWRlb0VsZW1lbnQ9bnVsbD09dS52aWRlb0VsZW1lbnQ/d2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInZpZGVvIik6dS52aWRlb0VsZW1lbnQpLmNhblBsYXlUeXBlKGUpO3JldHVybiJwcm9iYWJseSI9PT1lfHwibWF5YmUiPT1lfX0se2tleToiZ2V0RmVhdHVyZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e21zZUZsdlBsYXliYWNrOiExLG1zZUxpdmVGbHZQbGF5YmFjazohMSxuZXR3b3JrU3RyZWFtSU86ITEsbmV0d29ya0xvYWRlck5hbWU6IiIsbmF0aXZlTVA0SDI2NFBsYXliYWNrOiExLG5hdGl2ZVdlYm1WUDhQbGF5YmFjazohMSxuYXRpdmVXZWJtVlA5UGxheWJhY2s6ITF9O3JldHVybiBlLm1zZUZsdlBsYXliYWNrPXUuc3VwcG9ydE1TRUgyNjRQbGF5YmFjaygpLGUubmV0d29ya1N0cmVhbUlPPXUuc3VwcG9ydE5ldHdvcmtTdHJlYW1JTygpLGUubmV0d29ya0xvYWRlck5hbWU9dS5nZXROZXR3b3JrTG9hZGVyVHlwZU5hbWUoKSxlLm1zZUxpdmVGbHZQbGF5YmFjaz1lLm1zZUZsdlBsYXliYWNrJiZlLm5ldHdvcmtTdHJlYW1JTyxlLm5hdGl2ZU1QNEgyNjRQbGF5YmFjaz11LnN1cHBvcnROYXRpdmVNZWRpYVBsYXliYWNrKCd2aWRlby9tcDQ7IGNvZGVjcz0iYXZjMS40MjAwMUUsIG1wNGEuNDAuMiInKSxlLm5hdGl2ZVdlYm1WUDhQbGF5YmFjaz11LnN1cHBvcnROYXRpdmVNZWRpYVBsYXliYWNrKCd2aWRlby93ZWJtOyBjb2RlY3M9InZwOC4wLCB2b3JiaXMiJyksZS5uYXRpdmVXZWJtVlA5UGxheWJhY2s9dS5zdXBwb3J0TmF0aXZlTWVkaWFQbGF5YmFjaygndmlkZW8vd2VibTsgY29kZWNzPSJ2cDkiJyksZX19XSkscj11O2Z1bmN0aW9uIHUoKXsoMCxpLmRlZmF1bHQpKHRoaXMsdSl9dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXtuKDMyMyksZS5leHBvcnRzPW4oMykuT2JqZWN0LmdldFByb3RvdHlwZU9mfSxmdW5jdGlvbihlLHQsbil7dmFyIGk9bigyMikscj1uKDgwKTtuKDYwKSgiZ2V0UHJvdG90eXBlT2YiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiByKGkoZSkpfX0pfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzI1KSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4pe24oMzI2KTt2YXIgaT1uKDMpLk9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaS5jcmVhdGUoZSx0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgaT1uKDQpO2koaS5TLCJPYmplY3QiLHtjcmVhdGU6bigzOCl9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGQ9XyhuKDEyKSksaT1fKG4oMjQpKSxyPV8obigxKSksYT1fKG4oMjUpKSxzPV8obigzNSkpLG89XyhuKDIpKSx1PV8obigyNikpLGw9KF8obig2KSksXyhuKDM2KSkpLGg9bigxNyksYz1uKDcpO2Z1bmN0aW9uIF8oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW49aC5CYXNlTG9hZGVyLCgwLHUuZGVmYXVsdCkoZixuKSwoMCxvLmRlZmF1bHQpKGYsbnVsbCxbe2tleToiaXNTdXBwb3J0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPWwuZGVmYXVsdC5tc2VkZ2UmJjE1MDQ4PD1sLmRlZmF1bHQudmVyc2lvbi5taW5vcix0PSFsLmRlZmF1bHQubXNlZGdlfHxlO3JldHVybiBzZWxmLmZldGNoJiZzZWxmLlJlYWRhYmxlU3RyZWFtJiZ0fWNhdGNoKGUpe3JldHVybiExfX19XSksKDAsby5kZWZhdWx0KShmLFt7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNXb3JraW5nKCkmJnRoaXMuYWJvcnQoKSwoMCxzLmRlZmF1bHQpKGYucHJvdG90eXBlLl9fcHJvdG9fX3x8KDAsaS5kZWZhdWx0KShmLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7dGhpcy5fZGF0YVNvdXJjZT1lLHRoaXMuX3JhbmdlPXQ7dmFyIGk9ZS51cmw7dGhpcy5fY29uZmlnLnJldXNlUmVkaXJlY3RlZFVSTCYmbnVsbCE9ZS5yZWRpcmVjdGVkVVJMJiYoaT1lLnJlZGlyZWN0ZWRVUkwpO3ZhciByPXRoaXMuX3NlZWtIYW5kbGVyLmdldENvbmZpZyhpLHQpLGE9bmV3IHNlbGYuSGVhZGVycztpZigib2JqZWN0Ij09PSgwLGQuZGVmYXVsdCkoci5oZWFkZXJzKSl7dmFyIHMsbz1yLmhlYWRlcnM7Zm9yKHMgaW4gbylvLmhhc093blByb3BlcnR5KHMpJiZhLmFwcGVuZChzLG9bc10pfXQ9e21ldGhvZDoiR0VUIixoZWFkZXJzOmEsbW9kZToiY29ycyIsY2FjaGU6ImRlZmF1bHQiLHJlZmVycmVyUG9saWN5OiJuby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSJ9O2lmKCJvYmplY3QiPT09KDAsZC5kZWZhdWx0KSh0aGlzLl9jb25maWcuaGVhZGVycykpZm9yKHZhciB1IGluIHRoaXMuX2NvbmZpZy5oZWFkZXJzKWEuYXBwZW5kKHUsdGhpcy5fY29uZmlnLmhlYWRlcnNbdV0pOyExPT09ZS5jb3JzJiYodC5tb2RlPSJzYW1lLW9yaWdpbiIpLGUud2l0aENyZWRlbnRpYWxzJiYodC5jcmVkZW50aWFscz0iaW5jbHVkZSIpLGUucmVmZXJyZXJQb2xpY3kmJih0LnJlZmVycmVyUG9saWN5PWUucmVmZXJyZXJQb2xpY3kpLHRoaXMuX3N0YXR1cz1oLkxvYWRlclN0YXR1cy5rQ29ubmVjdGluZyxzZWxmLmZldGNoKHIudXJsLHQpLnRoZW4oZnVuY3Rpb24oZSl7aWYobi5fcmVxdWVzdEFib3J0KXJldHVybiBuLl9yZXF1ZXN0QWJvcnQ9ITEsdm9pZChuLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0lkbGUpO2lmKGUub2smJjIwMDw9ZS5zdGF0dXMmJmUuc3RhdHVzPD0yOTkpe2UudXJsIT09ci51cmwmJm4uX29uVVJMUmVkaXJlY3QmJih0PW4uX3NlZWtIYW5kbGVyLnJlbW92ZVVSTFBhcmFtZXRlcnMoZS51cmwpLG4uX29uVVJMUmVkaXJlY3QodCkpO3ZhciB0PWUuaGVhZGVycy5nZXQoIkNvbnRlbnQtTGVuZ3RoIik7cmV0dXJuIG51bGwhPXQmJihuLl9jb250ZW50TGVuZ3RoPXBhcnNlSW50KHQpLDAhPT1uLl9jb250ZW50TGVuZ3RoJiZuLl9vbkNvbnRlbnRMZW5ndGhLbm93biYmbi5fb25Db250ZW50TGVuZ3RoS25vd24obi5fY29udGVudExlbmd0aCkpLG4uX3B1bXAuY2FsbChuLGUuYm9keS5nZXRSZWFkZXIoKSl9aWYobi5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtFcnJvciwhbi5fb25FcnJvcil0aHJvdyBuZXcgYy5SdW50aW1lRXhjZXB0aW9uKCJGZXRjaFN0cmVhbUxvYWRlcjogSHR0cCBjb2RlIGludmFsaWQsICIrZS5zdGF0dXMrIiAiK2Uuc3RhdHVzVGV4dCk7bi5fb25FcnJvcihoLkxvYWRlckVycm9ycy5IVFRQX1NUQVRVU19DT0RFX0lOVkFMSUQse2NvZGU6ZS5zdGF0dXMsbXNnOmUuc3RhdHVzVGV4dH0pfSkuY2F0Y2goZnVuY3Rpb24oZSl7aWYobi5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtFcnJvciwhbi5fb25FcnJvcil0aHJvdyBlO24uX29uRXJyb3IoaC5Mb2FkZXJFcnJvcnMuRVhDRVBUSU9OLHtjb2RlOi0xLG1zZzplLm1lc3NhZ2V9KX0pfX0se2tleToiYWJvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fcmVxdWVzdEFib3J0PSEwfX0se2tleToiX3B1bXAiLHZhbHVlOmZ1bmN0aW9uKGkpe3ZhciByPXRoaXM7cmV0dXJuIGkucmVhZCgpLnRoZW4oZnVuY3Rpb24oZSl7aWYoZS5kb25lKWlmKG51bGwhPT1yLl9jb250ZW50TGVuZ3RoJiZyLl9yZWNlaXZlZExlbmd0aDxyLl9jb250ZW50TGVuZ3RoKXtyLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0Vycm9yO3ZhciB0PWguTG9hZGVyRXJyb3JzLkVBUkxZX0VPRixuPXtjb2RlOi0xLG1zZzoiRmV0Y2ggc3RyZWFtIG1lZXQgRWFybHktRU9GIn07aWYoIXIuX29uRXJyb3IpdGhyb3cgbmV3IGMuUnVudGltZUV4Y2VwdGlvbihuLm1zZyk7ci5fb25FcnJvcih0LG4pfWVsc2Ugci5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtDb21wbGV0ZSxyLl9vbkNvbXBsZXRlJiZyLl9vbkNvbXBsZXRlKHIuX3JhbmdlLmZyb20sci5fcmFuZ2UuZnJvbStyLl9yZWNlaXZlZExlbmd0aC0xKTtlbHNle2lmKCEwPT09ci5fcmVxdWVzdEFib3J0KXJldHVybiByLl9yZXF1ZXN0QWJvcnQ9ITEsci5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtDb21wbGV0ZSxpLmNhbmNlbCgpO3IuX3N0YXR1cz1oLkxvYWRlclN0YXR1cy5rQnVmZmVyaW5nO249ZS52YWx1ZS5idWZmZXIsZT1yLl9yYW5nZS5mcm9tK3IuX3JlY2VpdmVkTGVuZ3RoO3IuX3JlY2VpdmVkTGVuZ3RoKz1uLmJ5dGVMZW5ndGgsci5fb25EYXRhQXJyaXZhbCYmci5fb25EYXRhQXJyaXZhbChuLGUsci5fcmVjZWl2ZWRMZW5ndGgpLHIuX3B1bXAoaSl9fSkuY2F0Y2goZnVuY3Rpb24oZSl7aWYoMTEhPT1lLmNvZGV8fCFsLmRlZmF1bHQubXNlZGdlKXtyLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0Vycm9yO3ZhciB0PTAsbj1udWxsLG49MTkhPT1lLmNvZGUmJiJuZXR3b3JrIGVycm9yIiE9PWUubWVzc2FnZXx8IShudWxsPT09ci5fY29udGVudExlbmd0aHx8bnVsbCE9PXIuX2NvbnRlbnRMZW5ndGgmJnIuX3JlY2VpdmVkTGVuZ3RoPHIuX2NvbnRlbnRMZW5ndGgpPyh0PWguTG9hZGVyRXJyb3JzLkVYQ0VQVElPTix7Y29kZTplLmNvZGUsbXNnOmUubWVzc2FnZX0pOih0PWguTG9hZGVyRXJyb3JzLkVBUkxZX0VPRix7Y29kZTplLmNvZGUsbXNnOiJGZXRjaCBzdHJlYW0gbWVldCBFYXJseS1FT0YifSk7aWYoIXIuX29uRXJyb3IpdGhyb3cgbmV3IGMuUnVudGltZUV4Y2VwdGlvbihuLm1zZyk7ci5fb25FcnJvcih0LG4pfX0pfX1dKSxvPWY7ZnVuY3Rpb24gZihlLHQpeygwLHIuZGVmYXVsdCkodGhpcyxmKTt2YXIgbj0oMCxhLmRlZmF1bHQpKHRoaXMsKGYuX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKGYpKS5jYWxsKHRoaXMsImZldGNoLXN0cmVhbS1sb2FkZXIiKSk7cmV0dXJuIG4uVEFHPSJGZXRjaFN0cmVhbUxvYWRlciIsbi5fc2Vla0hhbmRsZXI9ZSxuLl9jb25maWc9dCxuLl9uZWVkU3Rhc2g9ITAsbi5fcmVxdWVzdEFib3J0PSExLG4uX2NvbnRlbnRMZW5ndGg9bnVsbCxuLl9yZWNlaXZlZExlbmd0aD0wLG59dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9e2RlZmF1bHQ6bigzMjkpLF9fZXNNb2R1bGU6ITB9fSxmdW5jdGlvbihlLHQsbil7bigzMzApO3ZhciBpPW4oMykuT2JqZWN0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpLmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciBpPW4oMjEpLHI9big2OSkuZjtuKDYwKSgiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3JldHVybiByKGkoZSksdCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1PV8obigxMikpLGk9XyhuKDI0KSkscj1fKG4oMSkpLGE9XyhuKDI1KSkscz1fKG4oMzUpKSxvPV8obigyKSksZD1fKG4oMjYpKSxsPV8obig2KSksaD1uKDE3KSxjPW4oNyk7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19bj1oLkJhc2VMb2FkZXIsKDAsZC5kZWZhdWx0KShmLG4pLCgwLG8uZGVmYXVsdCkoZixudWxsLFt7a2V5OiJpc1N1cHBvcnRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBlLm9wZW4oIkdFVCIsImh0dHBzOi8vZXhhbXBsZS5jb20iLCEwKSwoZS5yZXNwb25zZVR5cGU9Im1vei1jaHVua2VkLWFycmF5YnVmZmVyIik9PT1lLnJlc3BvbnNlVHlwZX1jYXRjaChlKXtyZXR1cm4gbC5kZWZhdWx0LncoIk1vekNodW5rZWRMb2FkZXIiLGUubWVzc2FnZSksITF9fX1dKSwoMCxvLmRlZmF1bHQpKGYsW3trZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5pc1dvcmtpbmcoKSYmdGhpcy5hYm9ydCgpLHRoaXMuX3hociYmKHRoaXMuX3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCx0aGlzLl94aHIub25wcm9ncmVzcz1udWxsLHRoaXMuX3hoci5vbmxvYWRlbmQ9bnVsbCx0aGlzLl94aHIub25lcnJvcj1udWxsLHRoaXMuX3hocj1udWxsKSwoMCxzLmRlZmF1bHQpKGYucHJvdG90eXBlLl9fcHJvdG9fX3x8KDAsaS5kZWZhdWx0KShmLnByb3RvdHlwZSksImRlc3Ryb3kiLHRoaXMpLmNhbGwodGhpcyl9fSx7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2RhdGFTb3VyY2U9ZSx0aGlzLl9yYW5nZT10O3ZhciBuPWUudXJsO3RoaXMuX2NvbmZpZy5yZXVzZVJlZGlyZWN0ZWRVUkwmJm51bGwhPWUucmVkaXJlY3RlZFVSTCYmKG49ZS5yZWRpcmVjdGVkVVJMKTt0PXRoaXMuX3NlZWtIYW5kbGVyLmdldENvbmZpZyhuLHQpO3RoaXMuX3JlcXVlc3RVUkw9dC51cmw7dmFyIGk9dGhpcy5feGhyPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihpLm9wZW4oIkdFVCIsdC51cmwsITApLGkucmVzcG9uc2VUeXBlPSJtb3otY2h1bmtlZC1hcnJheWJ1ZmZlciIsaS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5fb25SZWFkeVN0YXRlQ2hhbmdlLmJpbmQodGhpcyksaS5vbnByb2dyZXNzPXRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKSxpLm9ubG9hZGVuZD10aGlzLl9vbkxvYWRFbmQuYmluZCh0aGlzKSxpLm9uZXJyb3I9dGhpcy5fb25YaHJFcnJvci5iaW5kKHRoaXMpLGUud2l0aENyZWRlbnRpYWxzJiYoaS53aXRoQ3JlZGVudGlhbHM9ITApLCJvYmplY3QiPT09KDAsdS5kZWZhdWx0KSh0LmhlYWRlcnMpKXt2YXIgcixhPXQuaGVhZGVycztmb3IociBpbiBhKWEuaGFzT3duUHJvcGVydHkocikmJmkuc2V0UmVxdWVzdEhlYWRlcihyLGFbcl0pfWlmKCJvYmplY3QiPT09KDAsdS5kZWZhdWx0KSh0aGlzLl9jb25maWcuaGVhZGVycykpe3ZhciBzLG89dGhpcy5fY29uZmlnLmhlYWRlcnM7Zm9yKHMgaW4gbylvLmhhc093blByb3BlcnR5KHMpJiZpLnNldFJlcXVlc3RIZWFkZXIocyxvW3NdKX10aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0Nvbm5lY3RpbmcsaS5zZW5kKCl9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0QWJvcnQ9ITAsdGhpcy5feGhyJiZ0aGlzLl94aHIuYWJvcnQoKSx0aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0NvbXBsZXRlfX0se2tleToiX29uUmVhZHlTdGF0ZUNoYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYoMj09PXQucmVhZHlTdGF0ZSlpZihudWxsIT10LnJlc3BvbnNlVVJMJiZ0LnJlc3BvbnNlVVJMIT09dGhpcy5fcmVxdWVzdFVSTCYmdGhpcy5fb25VUkxSZWRpcmVjdCYmKGU9dGhpcy5fc2Vla0hhbmRsZXIucmVtb3ZlVVJMUGFyYW1ldGVycyh0LnJlc3BvbnNlVVJMKSx0aGlzLl9vblVSTFJlZGlyZWN0KGUpKSwwIT09dC5zdGF0dXMmJih0LnN0YXR1czwyMDB8fDI5OTx0LnN0YXR1cykpe2lmKHRoaXMuX3N0YXR1cz1oLkxvYWRlclN0YXR1cy5rRXJyb3IsIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IGMuUnVudGltZUV4Y2VwdGlvbigiTW96Q2h1bmtlZExvYWRlcjogSHR0cCBjb2RlIGludmFsaWQsICIrdC5zdGF0dXMrIiAiK3Quc3RhdHVzVGV4dCk7dGhpcy5fb25FcnJvcihoLkxvYWRlckVycm9ycy5IVFRQX1NUQVRVU19DT0RFX0lOVkFMSUQse2NvZGU6dC5zdGF0dXMsbXNnOnQuc3RhdHVzVGV4dH0pfWVsc2UgdGhpcy5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtCdWZmZXJpbmd9fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7dGhpcy5fc3RhdHVzIT09aC5Mb2FkZXJTdGF0dXMua0Vycm9yJiYobnVsbD09PXRoaXMuX2NvbnRlbnRMZW5ndGgmJm51bGwhPT1lLnRvdGFsJiYwIT09ZS50b3RhbCYmKHRoaXMuX2NvbnRlbnRMZW5ndGg9ZS50b3RhbCx0aGlzLl9vbkNvbnRlbnRMZW5ndGhLbm93biYmdGhpcy5fb25Db250ZW50TGVuZ3RoS25vd24odGhpcy5fY29udGVudExlbmd0aCkpLHQ9ZS50YXJnZXQucmVzcG9uc2UsZT10aGlzLl9yYW5nZS5mcm9tK3RoaXMuX3JlY2VpdmVkTGVuZ3RoLHRoaXMuX3JlY2VpdmVkTGVuZ3RoKz10LmJ5dGVMZW5ndGgsdGhpcy5fb25EYXRhQXJyaXZhbCYmdGhpcy5fb25EYXRhQXJyaXZhbCh0LGUsdGhpcy5fcmVjZWl2ZWRMZW5ndGgpKX19LHtrZXk6Il9vbkxvYWRFbmQiLHZhbHVlOmZ1bmN0aW9uKGUpeyEwIT09dGhpcy5fcmVxdWVzdEFib3J0P3RoaXMuX3N0YXR1cyE9PWguTG9hZGVyU3RhdHVzLmtFcnJvciYmKHRoaXMuX3N0YXR1cz1oLkxvYWRlclN0YXR1cy5rQ29tcGxldGUsdGhpcy5fb25Db21wbGV0ZSYmdGhpcy5fb25Db21wbGV0ZSh0aGlzLl9yYW5nZS5mcm9tLHRoaXMuX3JhbmdlLmZyb20rdGhpcy5fcmVjZWl2ZWRMZW5ndGgtMSkpOnRoaXMuX3JlcXVlc3RBYm9ydD0hMX19LHtrZXk6Il9vblhockVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0Vycm9yO3ZhciB0PTAsbj1udWxsLG49dGhpcy5fY29udGVudExlbmd0aCYmZS5sb2FkZWQ8dGhpcy5fY29udGVudExlbmd0aD8odD1oLkxvYWRlckVycm9ycy5FQVJMWV9FT0Yse2NvZGU6LTEsbXNnOiJNb3otQ2h1bmtlZCBzdHJlYW0gbWVldCBFYXJseS1Fb2YifSk6KHQ9aC5Mb2FkZXJFcnJvcnMuRVhDRVBUSU9OLHtjb2RlOi0xLG1zZzplLmNvbnN0cnVjdG9yLm5hbWUrIiAiK2UudHlwZX0pO2lmKCF0aGlzLl9vbkVycm9yKXRocm93IG5ldyBjLlJ1bnRpbWVFeGNlcHRpb24obi5tc2cpO3RoaXMuX29uRXJyb3IodCxuKX19XSksbz1mO2Z1bmN0aW9uIGYoZSx0KXsoMCxyLmRlZmF1bHQpKHRoaXMsZik7dmFyIG49KDAsYS5kZWZhdWx0KSh0aGlzLChmLl9fcHJvdG9fX3x8KDAsaS5kZWZhdWx0KShmKSkuY2FsbCh0aGlzLCJ4aHItbW96LWNodW5rZWQtbG9hZGVyIikpO3JldHVybiBuLlRBRz0iTW96Q2h1bmtlZExvYWRlciIsbi5fc2Vla0hhbmRsZXI9ZSxuLl9jb25maWc9dCxuLl9uZWVkU3Rhc2g9ITAsbi5feGhyPW51bGwsbi5fcmVxdWVzdEFib3J0PSExLG4uX2NvbnRlbnRMZW5ndGg9bnVsbCxuLl9yZWNlaXZlZExlbmd0aD0wLG59dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciB1PV8obigxMikpLGk9XyhuKDI0KSkscj1fKG4oMSkpLGE9XyhuKDI1KSkscz1fKG4oMzUpKSxvPV8obigyKSksZD1fKG4oMjYpKSxsPV8obig2KSksaD1uKDE3KSxjPW4oNyk7ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19bj1oLkJhc2VMb2FkZXIsKDAsZC5kZWZhdWx0KShmLG4pLCgwLG8uZGVmYXVsdCkoZixudWxsLFt7a2V5OiJpc1N1cHBvcnRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0cnl7aWYodm9pZCAwPT09c2VsZi5NU1N0cmVhbXx8dm9pZCAwPT09c2VsZi5NU1N0cmVhbVJlYWRlcilyZXR1cm4hMTt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGUub3BlbigiR0VUIiwiaHR0cHM6Ly9leGFtcGxlLmNvbSIsITApLChlLnJlc3BvbnNlVHlwZT0ibXMtc3RyZWFtIik9PT1lLnJlc3BvbnNlVHlwZX1jYXRjaChlKXtyZXR1cm4gbC5kZWZhdWx0LncoIk1TU3RyZWFtTG9hZGVyIixlLm1lc3NhZ2UpLCExfX19XSksKDAsby5kZWZhdWx0KShmLFt7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNXb3JraW5nKCkmJnRoaXMuYWJvcnQoKSx0aGlzLl9yZWFkZXImJih0aGlzLl9yZWFkZXIub25wcm9ncmVzcz1udWxsLHRoaXMuX3JlYWRlci5vbmxvYWQ9bnVsbCx0aGlzLl9yZWFkZXIub25lcnJvcj1udWxsLHRoaXMuX3JlYWRlcj1udWxsKSx0aGlzLl94aHImJih0aGlzLl94aHIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsdGhpcy5feGhyPW51bGwpLCgwLHMuZGVmYXVsdCkoZi5wcm90b3R5cGUuX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKGYucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5faW50ZXJuYWxPcGVuKGUsdCwhMSl9fSx7a2V5OiJfaW50ZXJuYWxPcGVuIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dGhpcy5fZGF0YVNvdXJjZT1lLG4/dGhpcy5fY3VycmVudFJhbmdlPXQ6dGhpcy5fdG90YWxSYW5nZT10O249ZS51cmw7dGhpcy5fY29uZmlnLnJldXNlUmVkaXJlY3RlZFVSTCYmKG51bGwhPXRoaXMuX2N1cnJlbnRSZWRpcmVjdGVkVVJMP249dGhpcy5fY3VycmVudFJlZGlyZWN0ZWRVUkw6bnVsbCE9ZS5yZWRpcmVjdGVkVVJMJiYobj1lLnJlZGlyZWN0ZWRVUkwpKTtuPXRoaXMuX3NlZWtIYW5kbGVyLmdldENvbmZpZyhuLHQpO3RoaXMuX2N1cnJlbnRSZXF1ZXN0VVJMPW4udXJsO3Q9dGhpcy5fcmVhZGVyPW5ldyBzZWxmLk1TU3RyZWFtUmVhZGVyO3Qub25wcm9ncmVzcz10aGlzLl9tc3JPblByb2dyZXNzLmJpbmQodGhpcyksdC5vbmxvYWQ9dGhpcy5fbXNyT25Mb2FkLmJpbmQodGhpcyksdC5vbmVycm9yPXRoaXMuX21zck9uRXJyb3IuYmluZCh0aGlzKTt2YXIgaT10aGlzLl94aHI9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGkub3BlbigiR0VUIixuLnVybCwhMCksaS5yZXNwb25zZVR5cGU9Im1zLXN0cmVhbSIsaS5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5feGhyT25SZWFkeVN0YXRlQ2hhbmdlLmJpbmQodGhpcyksaS5vbmVycm9yPXRoaXMuX3hock9uRXJyb3IuYmluZCh0aGlzKSxlLndpdGhDcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSEwKSwib2JqZWN0Ij09PSgwLHUuZGVmYXVsdCkobi5oZWFkZXJzKSl7dmFyIHIsYT1uLmhlYWRlcnM7Zm9yKHIgaW4gYSlhLmhhc093blByb3BlcnR5KHIpJiZpLnNldFJlcXVlc3RIZWFkZXIocixhW3JdKX1pZigib2JqZWN0Ij09PSgwLHUuZGVmYXVsdCkodGhpcy5fY29uZmlnLmhlYWRlcnMpKXt2YXIgcyxvPXRoaXMuX2NvbmZpZy5oZWFkZXJzO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmaS5zZXRSZXF1ZXN0SGVhZGVyKHMsb1tzXSl9dGhpcy5faXNSZWNvbm5lY3Rpbmc/dGhpcy5faXNSZWNvbm5lY3Rpbmc9ITE6dGhpcy5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtDb25uZWN0aW5nLGkuc2VuZCgpfX0se2tleToiYWJvcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5faW50ZXJuYWxBYm9ydCgpLHRoaXMuX3N0YXR1cz1oLkxvYWRlclN0YXR1cy5rQ29tcGxldGV9fSx7a2V5OiJfaW50ZXJuYWxBYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkZXImJigxPT09dGhpcy5fcmVhZGVyLnJlYWR5U3RhdGUmJnRoaXMuX3JlYWRlci5hYm9ydCgpLHRoaXMuX3JlYWRlci5vbnByb2dyZXNzPW51bGwsdGhpcy5fcmVhZGVyLm9ubG9hZD1udWxsLHRoaXMuX3JlYWRlci5vbmVycm9yPW51bGwsdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX3hociYmKHRoaXMuX3hoci5hYm9ydCgpLHRoaXMuX3hoci5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCx0aGlzLl94aHI9bnVsbCl9fSx7a2V5OiJfeGhyT25SZWFkeVN0YXRlQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXtlPWUudGFyZ2V0O2lmKDI9PT1lLnJlYWR5U3RhdGUpaWYoMjAwPD1lLnN0YXR1cyYmZS5zdGF0dXM8PTI5OSl7dGhpcy5fc3RhdHVzPWguTG9hZGVyU3RhdHVzLmtCdWZmZXJpbmcsbnVsbCE9ZS5yZXNwb25zZVVSTCYmKHQ9dGhpcy5fc2Vla0hhbmRsZXIucmVtb3ZlVVJMUGFyYW1ldGVycyhlLnJlc3BvbnNlVVJMKSxlLnJlc3BvbnNlVVJMIT09dGhpcy5fY3VycmVudFJlcXVlc3RVUkwmJnQhPT10aGlzLl9jdXJyZW50UmVkaXJlY3RlZFVSTCYmKHRoaXMuX2N1cnJlbnRSZWRpcmVjdGVkVVJMPXQsdGhpcy5fb25VUkxSZWRpcmVjdCYmdGhpcy5fb25VUkxSZWRpcmVjdCh0KSkpO3ZhciB0PWUuZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtTGVuZ3RoIik7bnVsbD09dHx8bnVsbCE9dGhpcy5fY29udGVudExlbmd0aHx8MDwodD1wYXJzZUludCh0KSkmJih0aGlzLl9jb250ZW50TGVuZ3RoPXQsdGhpcy5fb25Db250ZW50TGVuZ3RoS25vd24mJnRoaXMuX29uQ29udGVudExlbmd0aEtub3duKHRoaXMuX2NvbnRlbnRMZW5ndGgpKX1lbHNle2lmKHRoaXMuX3N0YXR1cz1oLkxvYWRlclN0YXR1cy5rRXJyb3IsIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IGMuUnVudGltZUV4Y2VwdGlvbigiTVNTdHJlYW1Mb2FkZXI6IEh0dHAgY29kZSBpbnZhbGlkLCAiK2Uuc3RhdHVzKyIgIitlLnN0YXR1c1RleHQpO3RoaXMuX29uRXJyb3IoaC5Mb2FkZXJFcnJvcnMuSFRUUF9TVEFUVVNfQ09ERV9JTlZBTElELHtjb2RlOmUuc3RhdHVzLG1zZzplLnN0YXR1c1RleHR9KX1lbHNlIDM9PT1lLnJlYWR5U3RhdGUmJjIwMDw9ZS5zdGF0dXMmJmUuc3RhdHVzPD0yOTkmJih0aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0J1ZmZlcmluZyxlPWUucmVzcG9uc2UsdGhpcy5fcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGUpKX19LHtrZXk6Il94aHJPbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0Vycm9yO3ZhciB0PWguTG9hZGVyRXJyb3JzLkVYQ0VQVElPTixlPXtjb2RlOi0xLG1zZzplLmNvbnN0cnVjdG9yLm5hbWUrIiAiK2UudHlwZX07aWYoIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IGMuUnVudGltZUV4Y2VwdGlvbihlLm1zZyk7dGhpcy5fb25FcnJvcih0LGUpfX0se2tleToiX21zck9uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG49ZS50YXJnZXQucmVzdWx0O251bGwhPW4/KHQ9bi5zbGljZSh0aGlzLl9sYXN0VGltZUJ1ZmZlclNpemUpLHRoaXMuX2xhc3RUaW1lQnVmZmVyU2l6ZT1uLmJ5dGVMZW5ndGgsZT10aGlzLl90b3RhbFJhbmdlLmZyb20rdGhpcy5fcmVjZWl2ZWRMZW5ndGgsdGhpcy5fcmVjZWl2ZWRMZW5ndGgrPXQuYnl0ZUxlbmd0aCx0aGlzLl9vbkRhdGFBcnJpdmFsJiZ0aGlzLl9vbkRhdGFBcnJpdmFsKHQsZSx0aGlzLl9yZWNlaXZlZExlbmd0aCksbi5ieXRlTGVuZ3RoPj10aGlzLl9idWZmZXJMaW1pdCYmKGwuZGVmYXVsdC52KHRoaXMuVEFHLCJNU1N0cmVhbSBidWZmZXIgZXhjZWVkZWQgbWF4IHNpemUgbmVhciAiKyhlK3QuYnl0ZUxlbmd0aCkrIiwgcmVjb25uZWN0aW5nLi4uIiksdGhpcy5fZG9SZWNvbm5lY3RJZk5lZWRlZCgpKSk6dGhpcy5fZG9SZWNvbm5lY3RJZk5lZWRlZCgpfX0se2tleToiX2RvUmVjb25uZWN0SWZOZWVkZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU7KG51bGw9PXRoaXMuX2NvbnRlbnRMZW5ndGh8fHRoaXMuX3JlY2VpdmVkTGVuZ3RoPHRoaXMuX2NvbnRlbnRMZW5ndGgpJiYodGhpcy5faXNSZWNvbm5lY3Rpbmc9ITAsdGhpcy5fbGFzdFRpbWVCdWZmZXJTaXplPTAsdGhpcy5faW50ZXJuYWxBYm9ydCgpLGU9e2Zyb206dGhpcy5fdG90YWxSYW5nZS5mcm9tK3RoaXMuX3JlY2VpdmVkTGVuZ3RoLHRvOi0xfSx0aGlzLl9pbnRlcm5hbE9wZW4odGhpcy5fZGF0YVNvdXJjZSxlLCEwKSl9fSx7a2V5OiJfbXNyT25Mb2FkIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0NvbXBsZXRlLHRoaXMuX29uQ29tcGxldGUmJnRoaXMuX29uQ29tcGxldGUodGhpcy5fdG90YWxSYW5nZS5mcm9tLHRoaXMuX3RvdGFsUmFuZ2UuZnJvbSt0aGlzLl9yZWNlaXZlZExlbmd0aC0xKX19LHtrZXk6Il9tc3JPbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGF0dXM9aC5Mb2FkZXJTdGF0dXMua0Vycm9yO3ZhciB0PTAsbj1udWxsLG49dGhpcy5fY29udGVudExlbmd0aCYmdGhpcy5fcmVjZWl2ZWRMZW5ndGg8dGhpcy5fY29udGVudExlbmd0aD8odD1oLkxvYWRlckVycm9ycy5FQVJMWV9FT0Yse2NvZGU6LTEsbXNnOiJNU1N0cmVhbSBtZWV0IEVhcmx5LUVvZiJ9KToodD1oLkxvYWRlckVycm9ycy5FQVJMWV9FT0Yse2NvZGU6LTEsbXNnOmUuY29uc3RydWN0b3IubmFtZSsiICIrZS50eXBlfSk7aWYoIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IGMuUnVudGltZUV4Y2VwdGlvbihuLm1zZyk7dGhpcy5fb25FcnJvcih0LG4pfX1dKSxvPWY7ZnVuY3Rpb24gZihlLHQpeygwLHIuZGVmYXVsdCkodGhpcyxmKTt2YXIgbj0oMCxhLmRlZmF1bHQpKHRoaXMsKGYuX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKGYpKS5jYWxsKHRoaXMsInhoci1tc3N0cmVhbS1sb2FkZXIiKSk7cmV0dXJuIG4uVEFHPSJNU1N0cmVhbUxvYWRlciIsbi5fc2Vla0hhbmRsZXI9ZSxuLl9jb25maWc9dCxuLl9uZWVkU3Rhc2g9ITAsbi5feGhyPW51bGwsbi5fcmVhZGVyPW51bGwsbi5fdG90YWxSYW5nZT1udWxsLG4uX2N1cnJlbnRSYW5nZT1udWxsLG4uX2N1cnJlbnRSZXF1ZXN0VVJMPW51bGwsbi5fY3VycmVudFJlZGlyZWN0ZWRVUkw9bnVsbCxuLl9jb250ZW50TGVuZ3RoPW51bGwsbi5fcmVjZWl2ZWRMZW5ndGg9MCxuLl9idWZmZXJMaW1pdD0xNjc3NzIxNixuLl9sYXN0VGltZUJ1ZmZlclNpemU9MCxuLl9pc1JlY29ubmVjdGluZz0hMSxufXQuZGVmYXVsdD1vfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgdT1mKG4oMTIpKSxpPWYobigyNCkpLHI9ZihuKDEpKSxhPWYobigyNSkpLHM9ZihuKDM1KSksbz1mKG4oMikpLGQ9ZihuKDI2KSksbD1mKG4oNikpLGg9ZihuKDcxKSksYz1uKDE3KSxfPW4oNyk7ZnVuY3Rpb24gZihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19bj1jLkJhc2VMb2FkZXIsKDAsZC5kZWZhdWx0KShtLG4pLCgwLG8uZGVmYXVsdCkobSxudWxsLFt7a2V5OiJpc1N1cHBvcnRlZCIsdmFsdWU6ZnVuY3Rpb24oKXt0cnl7dmFyIGU9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBlLm9wZW4oIkdFVCIsImh0dHBzOi8vZXhhbXBsZS5jb20iLCEwKSwoZS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIik9PT1lLnJlc3BvbnNlVHlwZX1jYXRjaChlKXtyZXR1cm4gbC5kZWZhdWx0LncoIlJhbmdlTG9hZGVyIixlLm1lc3NhZ2UpLCExfX19XSksKDAsby5kZWZhdWx0KShtLFt7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuaXNXb3JraW5nKCkmJnRoaXMuYWJvcnQoKSx0aGlzLl94aHImJih0aGlzLl94aHIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsdGhpcy5feGhyLm9ucHJvZ3Jlc3M9bnVsbCx0aGlzLl94aHIub25sb2FkPW51bGwsdGhpcy5feGhyLm9uZXJyb3I9bnVsbCx0aGlzLl94aHI9bnVsbCksKDAscy5kZWZhdWx0KShtLnByb3RvdHlwZS5fX3Byb3RvX198fCgwLGkuZGVmYXVsdCkobS5wcm90b3R5cGUpLCJkZXN0cm95Iix0aGlzKS5jYWxsKHRoaXMpfX0se2tleToib3BlbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9kYXRhU291cmNlPWUsdGhpcy5fcmFuZ2U9dCx0aGlzLl9zdGF0dXM9Yy5Mb2FkZXJTdGF0dXMua0Nvbm5lY3Rpbmc7dD0hMTtudWxsIT10aGlzLl9kYXRhU291cmNlLmZpbGVzaXplJiYwIT09dGhpcy5fZGF0YVNvdXJjZS5maWxlc2l6ZSYmKHQ9ITAsdGhpcy5fdG90YWxMZW5ndGg9dGhpcy5fZGF0YVNvdXJjZS5maWxlc2l6ZSksdGhpcy5fdG90YWxMZW5ndGhSZWNlaXZlZHx8dD90aGlzLl9vcGVuU3ViUmFuZ2UoKToodGhpcy5fd2FpdEZvclRvdGFsTGVuZ3RoPSEwLHRoaXMuX2ludGVybmFsT3Blbih0aGlzLl9kYXRhU291cmNlLHtmcm9tOjAsdG86LTF9KSl9fSx7a2V5OiJfb3BlblN1YlJhbmdlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPTEwMjQqdGhpcy5fY3VycmVudENodW5rU2l6ZUtCLHQ9dGhpcy5fcmFuZ2UuZnJvbSt0aGlzLl9yZWNlaXZlZExlbmd0aCxlPXQrZTtudWxsIT10aGlzLl9jb250ZW50TGVuZ3RoJiZlLXRoaXMuX3JhbmdlLmZyb20+PXRoaXMuX2NvbnRlbnRMZW5ndGgmJihlPXRoaXMuX3JhbmdlLmZyb20rdGhpcy5fY29udGVudExlbmd0aC0xKSx0aGlzLl9jdXJyZW50UmVxdWVzdFJhbmdlPXtmcm9tOnQsdG86ZX0sdGhpcy5faW50ZXJuYWxPcGVuKHRoaXMuX2RhdGFTb3VyY2UsdGhpcy5fY3VycmVudFJlcXVlc3RSYW5nZSl9fSx7a2V5OiJfaW50ZXJuYWxPcGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2xhc3RUaW1lTG9hZGVkPTA7dmFyIG49ZS51cmw7dGhpcy5fY29uZmlnLnJldXNlUmVkaXJlY3RlZFVSTCYmKG51bGwhPXRoaXMuX2N1cnJlbnRSZWRpcmVjdGVkVVJMP249dGhpcy5fY3VycmVudFJlZGlyZWN0ZWRVUkw6bnVsbCE9ZS5yZWRpcmVjdGVkVVJMJiYobj1lLnJlZGlyZWN0ZWRVUkwpKTt0PXRoaXMuX3NlZWtIYW5kbGVyLmdldENvbmZpZyhuLHQpO3RoaXMuX2N1cnJlbnRSZXF1ZXN0VVJMPXQudXJsO3ZhciBpPXRoaXMuX3hocj1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoaS5vcGVuKCJHRVQiLHQudXJsLCEwKSxpLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGkub25yZWFkeXN0YXRlY2hhbmdlPXRoaXMuX29uUmVhZHlTdGF0ZUNoYW5nZS5iaW5kKHRoaXMpLGkub25wcm9ncmVzcz10aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcyksaS5vbmxvYWQ9dGhpcy5fb25Mb2FkLmJpbmQodGhpcyksaS5vbmVycm9yPXRoaXMuX29uWGhyRXJyb3IuYmluZCh0aGlzKSxlLndpdGhDcmVkZW50aWFscyYmKGkud2l0aENyZWRlbnRpYWxzPSEwKSwib2JqZWN0Ij09PSgwLHUuZGVmYXVsdCkodC5oZWFkZXJzKSl7dmFyIHIsYT10LmhlYWRlcnM7Zm9yKHIgaW4gYSlhLmhhc093blByb3BlcnR5KHIpJiZpLnNldFJlcXVlc3RIZWFkZXIocixhW3JdKX1pZigib2JqZWN0Ij09PSgwLHUuZGVmYXVsdCkodGhpcy5fY29uZmlnLmhlYWRlcnMpKXt2YXIgcyxvPXRoaXMuX2NvbmZpZy5oZWFkZXJzO2ZvcihzIGluIG8pby5oYXNPd25Qcm9wZXJ0eShzKSYmaS5zZXRSZXF1ZXN0SGVhZGVyKHMsb1tzXSl9aS5zZW5kKCl9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9yZXF1ZXN0QWJvcnQ9ITAsdGhpcy5faW50ZXJuYWxBYm9ydCgpLHRoaXMuX3N0YXR1cz1jLkxvYWRlclN0YXR1cy5rQ29tcGxldGV9fSx7a2V5OiJfaW50ZXJuYWxBYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl94aHImJih0aGlzLl94aHIub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsdGhpcy5feGhyLm9ucHJvZ3Jlc3M9bnVsbCx0aGlzLl94aHIub25sb2FkPW51bGwsdGhpcy5feGhyLm9uZXJyb3I9bnVsbCx0aGlzLl94aHIuYWJvcnQoKSx0aGlzLl94aHI9bnVsbCl9fSx7a2V5OiJfb25SZWFkeVN0YXRlQ2hhbmdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtpZigyPT09dC5yZWFkeVN0YXRlKWlmKG51bGwhPXQucmVzcG9uc2VVUkwmJihlPXRoaXMuX3NlZWtIYW5kbGVyLnJlbW92ZVVSTFBhcmFtZXRlcnModC5yZXNwb25zZVVSTCksdC5yZXNwb25zZVVSTCE9PXRoaXMuX2N1cnJlbnRSZXF1ZXN0VVJMJiZlIT09dGhpcy5fY3VycmVudFJlZGlyZWN0ZWRVUkwmJih0aGlzLl9jdXJyZW50UmVkaXJlY3RlZFVSTD1lLHRoaXMuX29uVVJMUmVkaXJlY3QmJnRoaXMuX29uVVJMUmVkaXJlY3QoZSkpKSwyMDA8PXQuc3RhdHVzJiZ0LnN0YXR1czw9Mjk5KXRoaXMuX3dhaXRGb3JUb3RhbExlbmd0aHx8KHRoaXMuX3N0YXR1cz1jLkxvYWRlclN0YXR1cy5rQnVmZmVyaW5nKTtlbHNle2lmKHRoaXMuX3N0YXR1cz1jLkxvYWRlclN0YXR1cy5rRXJyb3IsIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IF8uUnVudGltZUV4Y2VwdGlvbigiUmFuZ2VMb2FkZXI6IEh0dHAgY29kZSBpbnZhbGlkLCAiK3Quc3RhdHVzKyIgIit0LnN0YXR1c1RleHQpO3RoaXMuX29uRXJyb3IoYy5Mb2FkZXJFcnJvcnMuSFRUUF9TVEFUVVNfQ09ERV9JTlZBTElELHtjb2RlOnQuc3RhdHVzLG1zZzp0LnN0YXR1c1RleHR9KX19fSx7a2V5OiJfb25Qcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fc3RhdHVzIT09Yy5Mb2FkZXJTdGF0dXMua0Vycm9yKXtpZihudWxsPT09dGhpcy5fY29udGVudExlbmd0aCl7dmFyIHQsbj0hMTtpZih0aGlzLl93YWl0Rm9yVG90YWxMZW5ndGgmJih0aGlzLl93YWl0Rm9yVG90YWxMZW5ndGg9ITEsbj10aGlzLl90b3RhbExlbmd0aFJlY2VpdmVkPSEwLHQ9ZS50b3RhbCx0aGlzLl9pbnRlcm5hbEFib3J0KCksbnVsbCE9dCYwIT09dCYmKHRoaXMuX3RvdGFsTGVuZ3RoPXQpKSwtMT09PXRoaXMuX3JhbmdlLnRvP3RoaXMuX2NvbnRlbnRMZW5ndGg9dGhpcy5fdG90YWxMZW5ndGgtdGhpcy5fcmFuZ2UuZnJvbTp0aGlzLl9jb250ZW50TGVuZ3RoPXRoaXMuX3JhbmdlLnRvLXRoaXMuX3JhbmdlLmZyb20rMSxuKXJldHVybiB2b2lkIHRoaXMuX29wZW5TdWJSYW5nZSgpO3RoaXMuX29uQ29udGVudExlbmd0aEtub3duJiZ0aGlzLl9vbkNvbnRlbnRMZW5ndGhLbm93bih0aGlzLl9jb250ZW50TGVuZ3RoKX1uPWUubG9hZGVkLXRoaXMuX2xhc3RUaW1lTG9hZGVkO3RoaXMuX2xhc3RUaW1lTG9hZGVkPWUubG9hZGVkLHRoaXMuX3NwZWVkU2FtcGxlci5hZGRCeXRlcyhuKX19fSx7a2V5OiJfbm9ybWFsaXplU3BlZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG49dGhpcy5fY2h1bmtTaXplS0JMaXN0LGk9bi5sZW5ndGgtMSxyPTAsYT1pO2lmKGU8blswXSlyZXR1cm4gblswXTtmb3IoO3I8PWE7KXtpZigodD1yK01hdGguZmxvb3IoKGEtcikvMikpPT09aXx8ZT49blt0XSYmZTxuW3QrMV0pcmV0dXJuIG5bdF07blt0XTxlP3I9dCsxOmE9dC0xfX19LHtrZXk6Il9vbkxvYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG47dGhpcy5fc3RhdHVzIT09Yy5Mb2FkZXJTdGF0dXMua0Vycm9yJiYodGhpcy5fd2FpdEZvclRvdGFsTGVuZ3RoP3RoaXMuX3dhaXRGb3JUb3RhbExlbmd0aD0hMTooKHRoaXMuX2xhc3RUaW1lTG9hZGVkPTApPT09KHQ9dGhpcy5fc3BlZWRTYW1wbGVyLmxhc3RTZWNvbmRLQnBzKSYmKHRoaXMuX3plcm9TcGVlZENodW5rQ291bnQrKywzPD10aGlzLl96ZXJvU3BlZWRDaHVua0NvdW50JiYodD10aGlzLl9zcGVlZFNhbXBsZXIuY3VycmVudEtCcHMpKSwwIT09dCYmKG49dGhpcy5fbm9ybWFsaXplU3BlZWQodCksdGhpcy5fY3VycmVudFNwZWVkTm9ybWFsaXplZCE9PW4mJih0aGlzLl9jdXJyZW50U3BlZWROb3JtYWxpemVkPW4sdGhpcy5fY3VycmVudENodW5rU2l6ZUtCPW4pKSx0PWUudGFyZ2V0LnJlc3BvbnNlLG49dGhpcy5fcmFuZ2UuZnJvbSt0aGlzLl9yZWNlaXZlZExlbmd0aCx0aGlzLl9yZWNlaXZlZExlbmd0aCs9dC5ieXRlTGVuZ3RoLGU9ITEsbnVsbCE9dGhpcy5fY29udGVudExlbmd0aCYmdGhpcy5fcmVjZWl2ZWRMZW5ndGg8dGhpcy5fY29udGVudExlbmd0aD90aGlzLl9vcGVuU3ViUmFuZ2UoKTplPSEwLHRoaXMuX29uRGF0YUFycml2YWwmJnRoaXMuX29uRGF0YUFycml2YWwodCxuLHRoaXMuX3JlY2VpdmVkTGVuZ3RoKSxlJiYodGhpcy5fc3RhdHVzPWMuTG9hZGVyU3RhdHVzLmtDb21wbGV0ZSx0aGlzLl9vbkNvbXBsZXRlJiZ0aGlzLl9vbkNvbXBsZXRlKHRoaXMuX3JhbmdlLmZyb20sdGhpcy5fcmFuZ2UuZnJvbSt0aGlzLl9yZWNlaXZlZExlbmd0aC0xKSkpKX19LHtrZXk6Il9vblhockVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdGF0dXM9Yy5Mb2FkZXJTdGF0dXMua0Vycm9yO3ZhciB0PTAsbj1udWxsLG49dGhpcy5fY29udGVudExlbmd0aCYmMDx0aGlzLl9yZWNlaXZlZExlbmd0aCYmdGhpcy5fcmVjZWl2ZWRMZW5ndGg8dGhpcy5fY29udGVudExlbmd0aD8odD1jLkxvYWRlckVycm9ycy5FQVJMWV9FT0Yse2NvZGU6LTEsbXNnOiJSYW5nZUxvYWRlciBtZWV0IEVhcmx5LUVvZiJ9KToodD1jLkxvYWRlckVycm9ycy5FWENFUFRJT04se2NvZGU6LTEsbXNnOmUuY29uc3RydWN0b3IubmFtZSsiICIrZS50eXBlfSk7aWYoIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IF8uUnVudGltZUV4Y2VwdGlvbihuLm1zZyk7dGhpcy5fb25FcnJvcih0LG4pfX0se2tleToiY3VycmVudFNwZWVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3BlZWRTYW1wbGVyLmxhc3RTZWNvbmRLQnBzfX1dKSxvPW07ZnVuY3Rpb24gbShlLHQpeygwLHIuZGVmYXVsdCkodGhpcyxtKTt2YXIgbj0oMCxhLmRlZmF1bHQpKHRoaXMsKG0uX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKG0pKS5jYWxsKHRoaXMsInhoci1yYW5nZS1sb2FkZXIiKSk7cmV0dXJuIG4uVEFHPSJSYW5nZUxvYWRlciIsbi5fc2Vla0hhbmRsZXI9ZSxuLl9jb25maWc9dCxuLl9uZWVkU3Rhc2g9ITEsbi5fY2h1bmtTaXplS0JMaXN0PVsxMjgsMjU2LDM4NCw1MTIsNzY4LDEwMjQsMTUzNiwyMDQ4LDMwNzIsNDA5Niw1MTIwLDYxNDQsNzE2OCw4MTkyXSxuLl9jdXJyZW50Q2h1bmtTaXplS0I9Mzg0LG4uX2N1cnJlbnRTcGVlZE5vcm1hbGl6ZWQ9MCxuLl96ZXJvU3BlZWRDaHVua0NvdW50PTAsbi5feGhyPW51bGwsbi5fc3BlZWRTYW1wbGVyPW5ldyBoLmRlZmF1bHQsbi5fcmVxdWVzdEFib3J0PSExLG4uX3dhaXRGb3JUb3RhbExlbmd0aD0hMSxuLl90b3RhbExlbmd0aFJlY2VpdmVkPSExLG4uX2N1cnJlbnRSZXF1ZXN0VVJMPW51bGwsbi5fY3VycmVudFJlZGlyZWN0ZWRVUkw9bnVsbCxuLl9jdXJyZW50UmVxdWVzdFJhbmdlPW51bGwsbi5fdG90YWxMZW5ndGg9bnVsbCxuLl9jb250ZW50TGVuZ3RoPW51bGwsbi5fcmVjZWl2ZWRMZW5ndGg9MCxuLl9sYXN0VGltZUxvYWRlZD0wLG59dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWgobigyNCkpLHI9aChuKDEpKSxhPWgobigyNSkpLHM9aChuKDM1KSksbz1oKG4oMikpLHU9aChuKDI2KSksZD0oaChuKDYpKSxuKDE3KSksbD1uKDcpO2Z1bmN0aW9uIGgoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fW49ZC5CYXNlTG9hZGVyLCgwLHUuZGVmYXVsdCkoYyxuKSwoMCxvLmRlZmF1bHQpKGMsbnVsbCxbe2tleToiaXNTdXBwb3J0ZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiB2b2lkIDAhPT1zZWxmLldlYlNvY2tldH1jYXRjaChlKXtyZXR1cm4hMX19fV0pLCgwLG8uZGVmYXVsdCkoYyxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl93cyYmdGhpcy5hYm9ydCgpLCgwLHMuZGVmYXVsdCkoYy5wcm90b3R5cGUuX19wcm90b19ffHwoMCxpLmRlZmF1bHQpKGMucHJvdG90eXBlKSwiZGVzdHJveSIsdGhpcykuY2FsbCh0aGlzKX19LHtrZXk6Im9wZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3RyeXt2YXIgdD10aGlzLl93cz1uZXcgc2VsZi5XZWJTb2NrZXQoZS51cmwpO3QuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLHQub25vcGVuPXRoaXMuX29uV2ViU29ja2V0T3Blbi5iaW5kKHRoaXMpLHQub25jbG9zZT10aGlzLl9vbldlYlNvY2tldENsb3NlLmJpbmQodGhpcyksdC5vbm1lc3NhZ2U9dGhpcy5fb25XZWJTb2NrZXRNZXNzYWdlLmJpbmQodGhpcyksdC5vbmVycm9yPXRoaXMuX29uV2ViU29ja2V0RXJyb3IuYmluZCh0aGlzKSx0aGlzLl9zdGF0dXM9ZC5Mb2FkZXJTdGF0dXMua0Nvbm5lY3Rpbmd9Y2F0Y2goZSl7dGhpcy5fc3RhdHVzPWQuTG9hZGVyU3RhdHVzLmtFcnJvcjt0PXtjb2RlOmUuY29kZSxtc2c6ZS5tZXNzYWdlfTtpZighdGhpcy5fb25FcnJvcil0aHJvdyBuZXcgbC5SdW50aW1lRXhjZXB0aW9uKHQubXNnKTt0aGlzLl9vbkVycm9yKGQuTG9hZGVyRXJyb3JzLkVYQ0VQVElPTix0KX19fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl93czshZXx8MCE9PWUucmVhZHlTdGF0ZSYmMSE9PWUucmVhZHlTdGF0ZXx8KHRoaXMuX3JlcXVlc3RBYm9ydD0hMCxlLmNsb3NlKCkpLHRoaXMuX3dzPW51bGwsdGhpcy5fc3RhdHVzPWQuTG9hZGVyU3RhdHVzLmtDb21wbGV0ZX19LHtrZXk6Il9vbldlYlNvY2tldE9wZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3N0YXR1cz1kLkxvYWRlclN0YXR1cy5rQnVmZmVyaW5nfX0se2tleToiX29uV2ViU29ja2V0Q2xvc2UiLHZhbHVlOmZ1bmN0aW9uKGUpeyEwIT09dGhpcy5fcmVxdWVzdEFib3J0Pyh0aGlzLl9zdGF0dXM9ZC5Mb2FkZXJTdGF0dXMua0NvbXBsZXRlLHRoaXMuX29uQ29tcGxldGUmJnRoaXMuX29uQ29tcGxldGUoMCx0aGlzLl9yZWNlaXZlZExlbmd0aC0xKSk6dGhpcy5fcmVxdWVzdEFib3J0PSExfX0se2tleToiX29uV2ViU29ja2V0TWVzc2FnZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZihlLmRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil0aGlzLl9kaXNwYXRjaEFycmF5QnVmZmVyKGUuZGF0YSk7ZWxzZSBpZihlLmRhdGEgaW5zdGFuY2VvZiBCbG9iKXt2YXIgbj1uZXcgRmlsZVJlYWRlcjtuLm9ubG9hZD1mdW5jdGlvbigpe3QuX2Rpc3BhdGNoQXJyYXlCdWZmZXIobi5yZXN1bHQpfSxuLnJlYWRBc0FycmF5QnVmZmVyKGUuZGF0YSl9ZWxzZXt0aGlzLl9zdGF0dXM9ZC5Mb2FkZXJTdGF0dXMua0Vycm9yO2U9e2NvZGU6LTEsbXNnOiJVbnN1cHBvcnRlZCBXZWJTb2NrZXQgbWVzc2FnZSB0eXBlOiAiK2UuZGF0YS5jb25zdHJ1Y3Rvci5uYW1lfTtpZighdGhpcy5fb25FcnJvcil0aHJvdyBuZXcgbC5SdW50aW1lRXhjZXB0aW9uKGUubXNnKTt0aGlzLl9vbkVycm9yKGQuTG9hZGVyRXJyb3JzLkVYQ0VQVElPTixlKX19fSx7a2V5OiJfZGlzcGF0Y2hBcnJheUJ1ZmZlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxlPXRoaXMuX3JlY2VpdmVkTGVuZ3RoO3RoaXMuX3JlY2VpdmVkTGVuZ3RoKz10LmJ5dGVMZW5ndGgsdGhpcy5fb25EYXRhQXJyaXZhbCYmdGhpcy5fb25EYXRhQXJyaXZhbCh0LGUsdGhpcy5fcmVjZWl2ZWRMZW5ndGgpfX0se2tleToiX29uV2ViU29ja2V0RXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3N0YXR1cz1kLkxvYWRlclN0YXR1cy5rRXJyb3I7ZT17Y29kZTplLmNvZGUsbXNnOmUubWVzc2FnZX07aWYoIXRoaXMuX29uRXJyb3IpdGhyb3cgbmV3IGwuUnVudGltZUV4Y2VwdGlvbihlLm1zZyk7dGhpcy5fb25FcnJvcihkLkxvYWRlckVycm9ycy5FWENFUFRJT04sZSl9fV0pLG89YztmdW5jdGlvbiBjKCl7KDAsci5kZWZhdWx0KSh0aGlzLGMpO3ZhciBlPSgwLGEuZGVmYXVsdCkodGhpcywoYy5fX3Byb3RvX198fCgwLGkuZGVmYXVsdCkoYykpLmNhbGwodGhpcywid2Vic29ja2V0LWxvYWRlciIpKTtyZXR1cm4gZS5UQUc9IldlYlNvY2tldExvYWRlciIsZS5fbmVlZFN0YXNoPSEwLGUuX3dzPW51bGwsZS5fcmVxdWVzdEFib3J0PSExLGUuX3JlY2VpdmVkTGVuZ3RoPTAsZX10LmRlZmF1bHQ9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cihuKDEpKTtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxyKG4oMikpLmRlZmF1bHQpKGEsW3trZXk6ImdldENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbixpPXt9O3JldHVybiAwIT09dC5mcm9tfHwtMSE9PXQudG8/KG49dm9pZCAwLG49LTEhPT10LnRvPyJieXRlcz0iK3QuZnJvbS50b1N0cmluZygpKyItIit0LnRvLnRvU3RyaW5nKCk6ImJ5dGVzPSIrdC5mcm9tLnRvU3RyaW5nKCkrIi0iLGkuUmFuZ2U9bik6dGhpcy5femVyb1N0YXJ0JiYoaS5SYW5nZT0iYnl0ZXM9MC0iKSx7dXJsOmUsaGVhZGVyczppfX19LHtrZXk6InJlbW92ZVVSTFBhcmFtZXRlcnMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlfX1dKSxuPWE7ZnVuY3Rpb24gYShlKXsoMCxpLmRlZmF1bHQpKHRoaXMsYSksdGhpcy5femVyb1N0YXJ0PWV8fCExfXQuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1yKG4oMSkpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIobigyKSkuZGVmYXVsdCkoYSxbe2tleToiZ2V0Q29uZmlnIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWU7cmV0dXJuIDA9PT10LmZyb20mJi0xPT09dC50b3x8KGU9ITAsLTE9PT1uLmluZGV4T2YoIj8iKSYmKG4rPSI/IixlPSExKSxlJiYobis9IiYiKSxuKz10aGlzLl9zdGFydE5hbWUrIj0iK3QuZnJvbS50b1N0cmluZygpLC0xIT09dC50byYmKG4rPSImIit0aGlzLl9lbmROYW1lKyI9Iit0LnRvLnRvU3RyaW5nKCkpKSx7dXJsOm4saGVhZGVyczp7fX19fSx7a2V5OiJyZW1vdmVVUkxQYXJhbWV0ZXJzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCI/IilbMF0sbj12b2lkIDAsaT1lLmluZGV4T2YoIj8iKSxyPSIiO2lmKG51bGwhPShuPS0xIT09aT9lLnN1YnN0cmluZyhpKzEpOm4pJiYwPG4ubGVuZ3RoKWZvcih2YXIgYT1uLnNwbGl0KCImIikscz0wO3M8YS5sZW5ndGg7cysrKXt2YXIgbz1hW3NdLnNwbGl0KCI9Iik7b1swXSE9PXRoaXMuX3N0YXJ0TmFtZSYmb1swXSE9PXRoaXMuX2VuZE5hbWUmJigwPHMmJihyKz0iJiIpLHIrPWFbc10pfXJldHVybiAwPT09ci5sZW5ndGg/dDp0KyI/IityfX1dKSxuPWE7ZnVuY3Rpb24gYShlLHQpeygwLGkuZGVmYXVsdCkodGhpcyxhKSx0aGlzLl9zdGFydE5hbWU9ZSx0aGlzLl9lbmROYW1lPXR9dC5kZWZhdWx0PW59LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPU0obigxNCkpLHI9TShuKDIzKSksYT1NKG4oMTIpKSxzPU0obigxKSksbz1NKG4oMikpLHU9TShuKDEzKSksZD1NKG4oNikpLGw9TShuKDM2KSksaD0oTShuKDcxKSksTShuKDQzKSkpLGM9TShuKDMzOCkpLF89TShuKDQ0KSksZj1NKG4oMzUyKSksbT1NKG4oMjQzKSkscD1uKDI0NSkseT1uKDcyKSx2PW4oNyksZz1NKG4oMjQ0KSk7ZnVuY3Rpb24gTShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAsby5kZWZhdWx0KShMLFt7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe251bGwhPXRoaXMuX3Byb2dyZXNzQ2hlY2tlciYmKHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3Byb2dyZXNzQ2hlY2tlciksdGhpcy5fcHJvZ3Jlc3NDaGVja2VyPW51bGwpLHRoaXMuX3RyYW5zbXV4ZXImJnRoaXMudW5sb2FkKCksdGhpcy5fbWVkaWFFbGVtZW50JiZ0aGlzLmRldGFjaE1lZGlhRWxlbWVudCgpLHRoaXMuZT1udWxsLHRoaXMuX21lZGlhRGF0YVNvdXJjZT1udWxsLHRoaXMuX2VtaXR0ZXImJih0aGlzLl9lbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXMuX2VtaXR0ZXI9bnVsbCl9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO2U9PT1oLmRlZmF1bHQuTUVESUFfSU5GTz9udWxsIT10aGlzLl9tZWRpYUluZm8mJmkuZGVmYXVsdC5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe24uX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuTUVESUFfSU5GTyxuLm1lZGlhSW5mbyl9KTplPT09aC5kZWZhdWx0LlNUQVRJU1RJQ1NfSU5GTyYmbnVsbCE9dGhpcy5fc3RhdGlzdGljc0luZm8mJmkuZGVmYXVsdC5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe24uX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuU1RBVElTVElDU19JTkZPLG4uc3RhdGlzdGljc0luZm8pfSksdGhpcy5fZW1pdHRlci5hZGRMaXN0ZW5lcihlLHQpfX0se2tleToib2ZmIix2YWx1ZTpmdW5jdGlvbihlLHQpe3RoaXMuX2VtaXR0ZXIucmVtb3ZlTGlzdGVuZXIoZSx0KX19LHtrZXk6ImF0dGFjaE1lZGlhRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztpZigodGhpcy5fbWVkaWFFbGVtZW50PWUpLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIix0aGlzLmUub252TG9hZGVkTWV0YWRhdGEpLGUuYWRkRXZlbnRMaXN0ZW5lcigic2Vla2luZyIsdGhpcy5lLm9udlNlZWtpbmcpLGUuYWRkRXZlbnRMaXN0ZW5lcigiY2FucGxheSIsdGhpcy5lLm9udkNhblBsYXkpLGUuYWRkRXZlbnRMaXN0ZW5lcigic3RhbGxlZCIsdGhpcy5lLm9udlN0YWxsZWQpLGUuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHRoaXMuZS5vbnZQcm9ncmVzcyksZS5hZGRFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLmUub252VGltZVVwZGF0ZSksdGhpcy5fbXNlY3RsPW5ldyBmLmRlZmF1bHQodGhpcy5fY29uZmlnKSx0aGlzLl9tc2VjdGwub24obS5kZWZhdWx0LlVQREFURV9FTkQsdGhpcy5fb25tc2VVcGRhdGVFbmQuYmluZCh0aGlzKSksdGhpcy5fbXNlY3RsLm9uKG0uZGVmYXVsdC5CVUZGRVJfRlVMTCx0aGlzLl9vbm1zZUJ1ZmZlckZ1bGwuYmluZCh0aGlzKSksdGhpcy5fbXNlY3RsLm9uKG0uZGVmYXVsdC5TT1VSQ0VfT1BFTixmdW5jdGlvbigpe2lmKHQuX21zZVNvdXJjZU9wZW5lZD0hMCx0Ll9oYXNQZW5kaW5nTG9hZClmb3IodC5faGFzUGVuZGluZ0xvYWQ9ITEsdC5sb2FkKCksMDx0Ll9zdGFzaEFycmF5Lmxlbmd0aCYmY29uc29sZS53YXJuKCJzdGFzaCBiZWZvcmUgc291cmNlIG9wZW4iLHQuX3N0YXNoQXJyYXkubGVuZ3RoKTswPHQuX3N0YXNoQXJyYXkubGVuZ3RoOyl7dmFyIGU9dC5fc3Rhc2hBcnJheS5zaGlmdCgpO3QuX29uTG9hZGVyQ2h1bmtBcnJpdmFsKGUuZGF0YSxlLmJ5dGVTdGFydCl9fSksdGhpcy5fbXNlY3RsLm9uKG0uZGVmYXVsdC5TT1VSQ0VfRU5ELGZ1bmN0aW9uKCl7dC5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5NRURJQV9TT1VSQ0VfRU5ERUQpfSksdGhpcy5fbXNlY3RsLm9uKG0uZGVmYXVsdC5TT1VSQ0VfQ0xPU0UsZnVuY3Rpb24oKXt0Ll9tc2VTb3VyY2VPcGVuZWQ9ITEsdC5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5NRURJQV9TT1VSQ0VfQ0xPU0UpfSksdGhpcy5fbXNlY3RsLm9uKG0uZGVmYXVsdC5FUlJPUixmdW5jdGlvbihlKXt0Ll9lbWl0dGVyLmVtaXQoaC5kZWZhdWx0LkVSUk9SLHAuRXJyb3JUeXBlcy5NRURJQV9FUlJPUixwLkVycm9yRGV0YWlscy5NRURJQV9NU0VfRVJST1IsZSl9KSx0aGlzLl9tc2VjdGwub24obS5kZWZhdWx0LlNPVVJDRV9BRERfRVJST1IsZnVuY3Rpb24oKXt0Ll9lbWl0dGVyLmVtaXQoaC5kZWZhdWx0Lk1FRElBX1NPVVJDRV9BRERfRVJST1IpfSksdGhpcy5fbXNlY3RsLmF0dGFjaE1lZGlhRWxlbWVudChlKSxudWxsIT10aGlzLl9wZW5kaW5nU2Vla1RpbWUpdHJ5e2UuY3VycmVudFRpbWU9dGhpcy5fcGVuZGluZ1NlZWtUaW1lLHRoaXMuX3BlbmRpbmdTZWVrVGltZT1udWxsfWNhdGNoKGUpe319fSx7a2V5OiJkZXRhY2hNZWRpYUVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFFbGVtZW50JiYodGhpcy5fbXNlY3RsLmRldGFjaE1lZGlhRWxlbWVudCgpLHRoaXMuX21lZGlhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkZWRtZXRhZGF0YSIsdGhpcy5lLm9udkxvYWRlZE1ldGFkYXRhKSx0aGlzLl9tZWRpYUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Vla2luZyIsdGhpcy5lLm9udlNlZWtpbmcpLHRoaXMuX21lZGlhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjYW5wbGF5Iix0aGlzLmUub252Q2FuUGxheSksdGhpcy5fbWVkaWFFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0YWxsZWQiLHRoaXMuZS5vbnZTdGFsbGVkKSx0aGlzLl9tZWRpYUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHRoaXMuZS5vbnZQcm9ncmVzcyksdGhpcy5fbWVkaWFFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWV1cGRhdGUiLHRoaXMuZS5vbnZUaW1lVXBkYXRlKSx0aGlzLl9tZWRpYUVsZW1lbnQ9bnVsbCksdGhpcy5fbXNlY3RsJiYodGhpcy5fbXNlY3RsLmRlc3Ryb3koKSx0aGlzLl9tc2VjdGw9bnVsbCksdGhpcy5fc3Rhc2hBcnJheT1bXX19LHtrZXk6ImxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcztpZighdGhpcy5fbWVkaWFFbGVtZW50KXRocm93IG5ldyB2LklsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSFRNTE1lZGlhRWxlbWVudCBtdXN0IGJlIGF0dGFjaGVkIGJlZm9yZSBsb2FkKCkhIik7aWYodGhpcy5fdHJhbnNtdXhlcil0aHJvdyBuZXcgdi5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkZsdlBsYXllci5sb2FkKCkgaGFzIGJlZW4gY2FsbGVkLCBwbGVhc2UgY2FsbCB1bmxvYWQoKSBmaXJzdCEiKTt0aGlzLl9oYXNQZW5kaW5nTG9hZHx8KHRoaXMuX2NvbmZpZy5kZWZlckxvYWRBZnRlclNvdXJjZU9wZW4mJiExPT09dGhpcy5fbXNlU291cmNlT3BlbmVkP3RoaXMuX2hhc1BlbmRpbmdMb2FkPSEwOigwPHRoaXMuX21lZGlhRWxlbWVudC5yZWFkeVN0YXRlJiYodGhpcy5fcmVxdWVzdFNldFRpbWU9ITAsdGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPTApLHRoaXMub3BlbkxhdGVuY3lNb25pdG9yKCksdGhpcy5fdHJhbnNtdXhlcj1uZXcgYy5kZWZhdWx0KHRoaXMuX21lZGlhRGF0YVNvdXJjZSx0aGlzLl9jb25maWcpLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LklOSVRfU0VHTUVOVCxmdW5jdGlvbihlLHQpe2kuX21zZWN0bC5hcHBlbmRJbml0U2VnbWVudCh0KX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0Lk1FRElBX1NFR01FTlQsZnVuY3Rpb24oZSx0KXt2YXIgbjtpLl9tc2VjdGwuYXBwZW5kTWVkaWFTZWdtZW50KHQpLGkuX2NvbmZpZy5sYXp5TG9hZCYmIWkuX2NvbmZpZy5pc0xpdmUmJihuPWkuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZSx0LmluZm8uZW5kRHRzPj0xZTMqKG4raS5fY29uZmlnLmxhenlMb2FkTWF4RHVyYXRpb24pJiZudWxsPT1pLl9wcm9ncmVzc0NoZWNrZXImJihkLmRlZmF1bHQudihpLlRBRywiTWF4aW11bSBidWZmZXJpbmcgZHVyYXRpb24gZXhjZWVkZWQsIHN1c3BlbmQgdHJhbnNtdXhpbmcgdGFzayIpLGkuX3N1c3BlbmRUcmFuc211eGVyKCkpKX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LkxPQURJTkdfQ09NUExFVEUsZnVuY3Rpb24oKXtpLl9tc2VjdGwuZW5kT2ZTdHJlYW0oKSxpLl9lbWl0dGVyLmVtaXQoaC5kZWZhdWx0LkxPQURJTkdfQ09NUExFVEUpfSksdGhpcy5fdHJhbnNtdXhlci5vbihfLmRlZmF1bHQuUkVDT1ZFUkVEX0VBUkxZX0VPRixmdW5jdGlvbigpe2kuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuUkVDT1ZFUkVEX0VBUkxZX0VPRil9KSx0aGlzLl90cmFuc211eGVyLm9uKF8uZGVmYXVsdC5JT19FUlJPUixmdW5jdGlvbihlLHQpe2kuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuRVJST1IscC5FcnJvclR5cGVzLk5FVFdPUktfRVJST1IsZSx0KX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LkRFTVVYX0VSUk9SLGZ1bmN0aW9uKGUsdCl7aS5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5FUlJPUixwLkVycm9yVHlwZXMuTUVESUFfRVJST1IsZSx7Y29kZTotMSxtc2c6dH0pfSksdGhpcy5fdHJhbnNtdXhlci5vbihfLmRlZmF1bHQuTUVESUFfSU5GTyxmdW5jdGlvbihlKXtpLl9tZWRpYUluZm89ZSxpLl9lbWl0dGVyLmVtaXQoaC5kZWZhdWx0Lk1FRElBX0lORk8sKDAsci5kZWZhdWx0KSh7fSxlKSl9KSx0aGlzLl90cmFuc211eGVyLm9uKF8uZGVmYXVsdC5NRVRBREFUQV9BUlJJVkVELGZ1bmN0aW9uKGUpe2kuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuTUVUQURBVEFfQVJSSVZFRCxlKX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LlNDUklQVERBVEFfQVJSSVZFRCxmdW5jdGlvbihlKXtpLl9lbWl0dGVyLmVtaXQoaC5kZWZhdWx0LlNDUklQVERBVEFfQVJSSVZFRCxlKX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LlNUQVRJU1RJQ1NfSU5GTyxmdW5jdGlvbihlKXtpLl9zdGF0aXN0aWNzSW5mbz1pLl9maWxsU3RhdGlzdGljc0luZm8oZSksaS5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5TVEFUSVNUSUNTX0lORk8sKDAsci5kZWZhdWx0KSh7fSxpLl9zdGF0aXN0aWNzSW5mbykpfSksdGhpcy5fdHJhbnNtdXhlci5vbihfLmRlZmF1bHQuUkVDT01NRU5EX1NFRUtQT0lOVCxmdW5jdGlvbihlKXtpLl9tZWRpYUVsZW1lbnQmJiFpLl9jb25maWcuYWNjdXJhdGVTZWVrJiYoaS5fcmVxdWVzdFNldFRpbWU9ITAsaS5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPWUvMWUzKX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LlZJREVPX1JFU09MVVRJT05fQ0hBTkdFRCxmdW5jdGlvbihlKXtpLl9lbWl0dGVyLmVtaXQoaC5kZWZhdWx0LlZJREVPX1JFU09MVVRJT05fQ0hBTkdFRCxlKX0pLHRoaXMuX3RyYW5zbXV4ZXIub24oXy5kZWZhdWx0LlBBUlNFRERBVEFfQVJSSVZFRCxmdW5jdGlvbihlLHQpe2kuX29uUGFyc2VkRGF0YShlLHQsaS5pV25kTnVtKX0pLHRoaXMuX3RyYW5zbXV4ZXIub3BlbigpKSl9fSx7a2V5OiJ1bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFFbGVtZW50JiZ0aGlzLl9tZWRpYUVsZW1lbnQucGF1c2UoKSx0aGlzLl9tc2VjdGwmJnRoaXMuX21zZWN0bC5zZWVrKDApLHRoaXMuX3RyYW5zbXV4ZXImJih0aGlzLl90cmFuc211eGVyLmNsb3NlKCksdGhpcy5fdHJhbnNtdXhlci5kZXN0cm95KCksdGhpcy5fdHJhbnNtdXhlcj1udWxsKSx0aGlzLl9kdXJhdGlvbk1vbml0b3ImJihzZWxmLmNsZWFySW50ZXJ2YWwodGhpcy5fZHVyYXRpb25Nb25pdG9yKSx0aGlzLl9kdXJhdGlvbk1vbml0b3I9bnVsbCksdGhpcy5fbGF0ZW5jeURldGVjdFRpbWVyJiYoc2VsZi5jbGVhckludGVydmFsKHRoaXMuX2xhdGVuY3lEZXRlY3RUaW1lciksdGhpcy5fbGF0ZW5jeURldGVjdFRpbWVyPW51bGwsdGhpcy5fbGF0ZW5jeUFkanVzdENvdW50PTAsZC5kZWZhdWx0LmkodGhpcy5UQUcsIi0tPT0gVG90YWwgbGF0ZW5jeSBhZGp1c3QgY291bnQgOiAiK3RoaXMuX2xhdGVuY3lBZGp1c3RDb3VudFRvdGFsKSx0aGlzLl9sYXRlbmN5QWRqdXN0Q291bnRUb3RhbD0wKSx0aGlzLl9mb3J6ZW5UaW1lcz0wLHRoaXMuX2xhc3REZWNvZGVkRnJhbWVzPTB9fSx7a2V5OiJwbGF5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYUVsZW1lbnQucGxheSgpfX0se2tleToicGF1c2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFFbGVtZW50LnBhdXNlKCl9fSx7a2V5OiJvcGVuRmlsZVN5c3RlbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5faXNSZWNvcmQ9ITAsdGhpcy5fZnM9bmV3IGcuZGVmYXVsdChlLHRoaXMuX2luaXRTZWdtZW50LmRhdGEpfX0se2tleToiZG93bmxvYWRGaWxlIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9pc1JlY29yZHx8IXRoaXMuX2ZzKXRocm93IG5ldyBFcnJvcigiRmlsZVN5c3RlbSBpcyBub3QgcmVhZHkiKTt0aGlzLl9mcy5kb3dubG9hZCgpLHRoaXMuX2lzUmVjb3JkPSExLHRoaXMuX2ZzPW51bGx9fSx7a2V5OiJzZXRSZWNvcmRGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl90cmFuc211eGVyLnNldFJlY29yZEZsYWcoZSl9fSx7a2V5OiJDbGVhbkNhY2hlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3RyYW5zbXV4ZXIuQ2xlYW5DYWNoZSgpfX0se2tleToiX29uTG9hZGVyQ2h1bmtBcnJpdmFsIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dGhpcy5fdHJhbnNtdXhlci5mZWVkKGUsdCxuKX19LHtrZXk6Im9uTG9hZGVyQ2h1bmtBcnJpdmFsIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dGhpcy5fbXNlU291cmNlT3BlbmVkPygwPHRoaXMuX3N0YXNoQXJyYXkubGVuZ3RoJiZ0aGlzLl9zdGFzaEFycmF5LnB1c2goe2RhdGE6ZSxieXRlU3RhcnQ6dH0pLHRoaXMuX29uTG9hZGVyQ2h1bmtBcnJpdmFsKGUsdCxuKSk6dGhpcy5fc3Rhc2hBcnJheS5wdXNoKHtkYXRhOmUsYnl0ZVN0YXJ0OnR9KX19LHtrZXk6Il9maWxsU3RhdGlzdGljc0luZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUucGxheWVyVHlwZT10aGlzLl90eXBlLCEodGhpcy5fbWVkaWFFbGVtZW50IGluc3RhbmNlb2YgSFRNTFZpZGVvRWxlbWVudCkpcmV0dXJuIGU7dmFyIHQsbj0hMCxpPTAscj0wO3JldHVybiB0aGlzLl9tZWRpYUVsZW1lbnQuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHk/KGk9KHQ9dGhpcy5fbWVkaWFFbGVtZW50LmdldFZpZGVvUGxheWJhY2tRdWFsaXR5KCkpLnRvdGFsVmlkZW9GcmFtZXMscj10LmRyb3BwZWRWaWRlb0ZyYW1lcyk6bnVsbCE9dGhpcy5fbWVkaWFFbGVtZW50LndlYmtpdERlY29kZWRGcmFtZUNvdW50PyhpPXRoaXMuX21lZGlhRWxlbWVudC53ZWJraXREZWNvZGVkRnJhbWVDb3VudCxyPXRoaXMuX21lZGlhRWxlbWVudC53ZWJraXREcm9wcGVkRnJhbWVDb3VudCk6bj0hMSxuJiYoZS5kZWNvZGVkRnJhbWVzPWksZS5kcm9wcGVkRnJhbWVzPXIpLGV9fSx7a2V5OiJlbmFibGVWaWRlb1N0YXRlTW9uaXRvciIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZW5hYmxlRHVyYXRpb25Nb25pdG9yPWUsdGhpcy5fZW5hYmxlVmlkZW9Gcm96ZW5Nb25pdG9yPWV9fSx7a2V5OiJfaW5jcmVhc2VMYXRlbmN5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9jdXJMYXRlbmN5VGhyZXNob2xkKz1lLHRoaXMuX2N1ckxhdGVuY3lUaHJlc2hvbGQ+dGhpcy5fY29uZmlnLmhpZ2hMYXRlbmN5VGhyZXNob2xkJiYodGhpcy5fY3VyTGF0ZW5jeVRocmVzaG9sZD10aGlzLl9jb25maWcuaGlnaExhdGVuY3lUaHJlc2hvbGQpLGQuZGVmYXVsdC5pKHRoaXMuVEFHLCJsYXRlbmN5ICsiK3RoaXMuX2N1ckxhdGVuY3lUaHJlc2hvbGQpfX0se2tleToiX2RlY3JlYXNlTGF0ZW5jeSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fY3VyTGF0ZW5jeVRocmVzaG9sZC09ZSx0aGlzLl9jdXJMYXRlbmN5VGhyZXNob2xkPHRoaXMuX2NvbmZpZy5sb3dMYXRlbmN5VGhyZXNob2xkJiYodGhpcy5fY3VyTGF0ZW5jeVRocmVzaG9sZD10aGlzLl9jb25maWcubG93TGF0ZW5jeVRocmVzaG9sZCksZC5kZWZhdWx0LmkodGhpcy5UQUcsImxhdGVuY3kgLSIrdGhpcy5fY3VyTGF0ZW5jeVRocmVzaG9sZCl9fSx7a2V5OiJfdXBkYXRlQ3VycmVudExhdGVuY3lUaHJlc2hvbGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2N1ckxhdGVuY3lUaHJlc2hvbGQ9ZSx0aGlzLl9jdXJMYXRlbmN5VGhyZXNob2xkPHRoaXMuX2NvbmZpZy5sb3dMYXRlbmN5VGhyZXNob2xkJiYodGhpcy5fY3VyTGF0ZW5jeVRocmVzaG9sZD10aGlzLl9jb25maWcubG93TGF0ZW5jeVRocmVzaG9sZCksdGhpcy5fY3VyTGF0ZW5jeVRocmVzaG9sZD50aGlzLl9jb25maWcuaGlnaExhdGVuY3lUaHJlc2hvbGQmJih0aGlzLl9jdXJMYXRlbmN5VGhyZXNob2xkPXRoaXMuX2NvbmZpZy5oaWdoTGF0ZW5jeVRocmVzaG9sZCksZC5kZWZhdWx0LmkodGhpcy5UQUcsInVwZGF0ZSBjdXJyZW50IGxhdGVuY3kgdGhyZXNob2xkIDogIit0aGlzLl9jdXJMYXRlbmN5VGhyZXNob2xkKX19LHtrZXk6Il9hZGp1c3REdXJhdGlvbkdhcCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9sYXRlbmN5QWRqdXN0Q291bnQ8dGhpcy5fbGF0ZW5jeURldGVjdFRocmVzaG9sZD90aGlzLl9kZWNyZWFzZUxhdGVuY3kodGhpcy5fbGF0ZW5jeURldGVjdEFkanVzdFN0ZXApOnRoaXMuX2xhdGVuY3lBZGp1c3RDb3VudD50aGlzLl9sYXRlbmN5RGV0ZWN0VGhyZXNob2xkJiZ0aGlzLl9pbmNyZWFzZUxhdGVuY3koNSp0aGlzLl9sYXRlbmN5RGV0ZWN0QWRqdXN0U3RlcCksdGhpcy5fbGF0ZW5jeUFkanVzdENvdW50PTB9fSx7a2V5OiJfZG9EdXJhdGlvbk1vbml0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5fZW5hYmxlRHVyYXRpb25Nb25pdG9yJiZ0aGlzLl9tc2VTb3VyY2VPcGVuZWQmJighdGhpcy5fbXNlY3RsfHwhdGhpcy5fbXNlY3RsLmNoZWNrU291cmNlQnVmZmVyTnVsbCgpKSl7dmFyIGU9dGhpcy5fbWVkaWFFbGVtZW50LmJ1ZmZlcmVkLHQ9dGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLG49dGhpcy5fbWVkaWFFbGVtZW50LnBhdXNlZDtpZihudWxsIT1lJiYwIT1lLmxlbmd0aCl7ZT1lLmVuZCgwKSx0PWUtdDtpZighbiYmdD50aGlzLl9jdXJMYXRlbmN5VGhyZXNob2xkJiYoZT1lLXRoaXMuX2RlY3JlYXNlRHVyYXRpb25TdGVwLGQuZGVmYXVsdC53KHRoaXMuVEFHLCJoaWdoIGxhdGVuY3kgZ2FwIHsiK3QrIn0sIGRlY3JlYXNlICIrdGhpcy5fZGVjcmVhc2VEdXJhdGlvblN0ZXArIiBhbmQgc2V0IHRvICIrZSksdGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPWUsdGhpcy5fcmVxdWVzdFNldFRpbWU9ITAsdGhpcy5fbGF0ZW5jeUFkanVzdENvdW50VG90YWwrKywyPHRoaXMuX2xhdGVuY3lBZGp1c3RDb3VudFRvdGFsJiYoKyt0aGlzLl9sYXRlbmN5QWRqdXN0Q291bnQsaT10K3RoaXMuX2xhdGVuY3lEZXRlY3RBZGp1c3RTdGVwLHRoaXMuX3VwZGF0ZUN1cnJlbnRMYXRlbmN5VGhyZXNob2xkKGkpKSksdGhpcy5fZW5hYmxlVmlkZW9Gcm96ZW5Nb25pdG9yKXt2YXIgaT0wO2lmKHRoaXMuX21lZGlhRWxlbWVudC5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSlpPXRoaXMuX21lZGlhRWxlbWVudC5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgpLnRvdGFsVmlkZW9GcmFtZXM7ZWxzZXtpZihudWxsPT10aGlzLl9tZWRpYUVsZW1lbnQud2Via2l0RGVjb2RlZEZyYW1lQ291bnQpcmV0dXJuO2k9dGhpcy5fbWVkaWFFbGVtZW50LndlYmtpdERlY29kZWRGcmFtZUNvdW50fTAhPXRoaXMuX2xhc3REZWNvZGVkRnJhbWVzJiYodGhpcy5fbGFzdERlY29kZWRGcmFtZXM9PWk/dGhpcy5fZm9yemVuVGltZXMrKzp0aGlzLl9mb3J6ZW5UaW1lcz0wKSx0aGlzLl9sYXN0RGVjb2RlZEZyYW1lcz1pLHRoaXMuX2ZvcnplblRpbWVzPj10aGlzLl9mcm96ZW5UaW1lc1RocmVzaG9sZCYmKGQuZGVmYXVsdC53KHRoaXMuVEFHLCJSZXBvcnQgdmlkZW8gZnJvemVuIGV2ZW50IiksdGhpcy5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5WSURFT19GUk9aRU4pLHRoaXMuX2ZvcnplblRpbWVzPTApfX19fX0se2tleToib3BlbkxhdGVuY3lNb25pdG9yIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2VuYWJsZUR1cmF0aW9uTW9uaXRvciYmbnVsbD09dGhpcy5fZHVyYXRpb25Nb25pdG9yJiYodGhpcy5fZHVyYXRpb25Nb25pdG9yPXNlbGYuc2V0SW50ZXJ2YWwodGhpcy5fZG9EdXJhdGlvbk1vbml0b3IuYmluZCh0aGlzKSx0aGlzLl92aWRlb1N0YXRlTW9uaXRvckludGVydmFsKSx0aGlzLl9mb3J6ZW5UaW1lcz0wLHRoaXMuX2xhc3REZWNvZGVkRnJhbWVzPTAsdGhpcy5fbGF0ZW5jeURldGVjdFRpbWVyPXNlbGYuc2V0SW50ZXJ2YWwodGhpcy5fYWRqdXN0RHVyYXRpb25HYXAuYmluZCh0aGlzKSx0aGlzLl9sYXRlbmN5RGV0ZWN0SW50ZXJ2YWwpKX19LHtrZXk6ImNsb3NlTGF0ZW5jeU1vbml0b3IiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZHVyYXRpb25Nb25pdG9yJiYoY2xlYXJJbnRlcnZhbCh0aGlzLl9kdXJhdGlvbk1vbml0b3IpLHRoaXMuX2R1cmF0aW9uTW9uaXRvcj1udWxsKSx0aGlzLl9sYXRlbmN5RGV0ZWN0VGltZXImJihjbGVhckludGVydmFsKHRoaXMuX2xhdGVuY3lEZXRlY3RUaW1lciksdGhpcy5fbGF0ZW5jeURldGVjdFRpbWVyPW51bGwpLHRoaXMuX2VtaXR0ZXIubGlzdGVuZXJzKCJ0aW1ldXBkYXRlIikmJnRoaXMuX21lZGlhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0aW1ldXBkYXRlIix0aGlzLmUub252VGltZVVwZGF0ZSl9fSx7a2V5OiJfb25tc2VVcGRhdGVFbmQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5fY29uZmlnLmxhenlMb2FkJiYhdGhpcy5fY29uZmlnLmlzTGl2ZSl7Zm9yKHZhciBlPXRoaXMuX21lZGlhRWxlbWVudC5idWZmZXJlZCx0PXRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZSxuPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgcj1lLnN0YXJ0KGkpLGE9ZS5lbmQoaSk7aWYocjw9dCYmdDxhKXtuPWE7YnJlYWt9fW4+PXQrdGhpcy5fY29uZmlnLmxhenlMb2FkTWF4RHVyYXRpb24mJm51bGw9PXRoaXMuX3Byb2dyZXNzQ2hlY2tlciYmKGQuZGVmYXVsdC52KHRoaXMuVEFHLCJNYXhpbXVtIGJ1ZmZlcmluZyBkdXJhdGlvbiBleGNlZWRlZCwgc3VzcGVuZCB0cmFuc211eGluZyB0YXNrIiksdGhpcy5fc3VzcGVuZFRyYW5zbXV4ZXIoKSl9fX0se2tleToiX29ubXNlQnVmZmVyRnVsbCIsdmFsdWU6ZnVuY3Rpb24oKXtkLmRlZmF1bHQudih0aGlzLlRBRywiTVNFIFNvdXJjZUJ1ZmZlciBpcyBmdWxsLCBzdXNwZW5kIHRyYW5zbXV4aW5nIHRhc2siKSxudWxsPT10aGlzLl9wcm9ncmVzc0NoZWNrZXImJnRoaXMuX3N1c3BlbmRUcmFuc211eGVyKCksdGhpcy5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5NU19CVUZGRVJfRlVMTCl9fSx7a2V5OiJfc3VzcGVuZFRyYW5zbXV4ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNtdXhlciYmKHRoaXMuX3RyYW5zbXV4ZXIucGF1c2UoKSxudWxsPT10aGlzLl9wcm9ncmVzc0NoZWNrZXImJih0aGlzLl9wcm9ncmVzc0NoZWNrZXI9d2luZG93LnNldEludGVydmFsKHRoaXMuX2NoZWNrUHJvZ3Jlc3NBbmRSZXN1bWUuYmluZCh0aGlzKSwxZTMpKSl9fSx7a2V5OiJfY2hlY2tQcm9ncmVzc0FuZFJlc3VtZSIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLHQ9dGhpcy5fbWVkaWFFbGVtZW50LmJ1ZmZlcmVkLG49ITEsaT0wO2k8dC5sZW5ndGg7aSsrKXt2YXIgcj10LnN0YXJ0KGkpLGE9dC5lbmQoaSk7aWYocjw9ZSYmZTxhKXtlPj1hLXRoaXMuX2NvbmZpZy5sYXp5TG9hZFJlY292ZXJEdXJhdGlvbiYmKG49ITApO2JyZWFrfX1uJiYod2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fcHJvZ3Jlc3NDaGVja2VyKSx0aGlzLl9wcm9ncmVzc0NoZWNrZXI9bnVsbCxuJiYoZC5kZWZhdWx0LnYodGhpcy5UQUcsIkNvbnRpbnVlIGxvYWRpbmcgZnJvbSBwYXVzZWQgcG9zaXRpb24iKSx0aGlzLl90cmFuc211eGVyLnJlc3VtZSgpKSl9fSx7a2V5OiJfaXNUaW1lcG9pbnRCdWZmZXJlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuX21lZGlhRWxlbWVudC5idWZmZXJlZCxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuc3RhcnQobikscj10LmVuZChuKTtpZihpPD1lJiZlPHIpcmV0dXJuITB9cmV0dXJuITF9fSx7a2V5OiJfaW50ZXJuYWxTZWVrIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuPXRoaXMuX2lzVGltZXBvaW50QnVmZmVyZWQoZSksaT0hMSxyPTA7ZTwxJiYwPHRoaXMuX21lZGlhRWxlbWVudC5idWZmZXJlZC5sZW5ndGgmJigoKHQ9dGhpcy5fbWVkaWFFbGVtZW50LmJ1ZmZlcmVkLnN0YXJ0KDApKTwxJiZlPHR8fGwuZGVmYXVsdC5zYWZhcmkpJiYoaT0hMCxyPWwuZGVmYXVsdC5zYWZhcmk/LjE6dCkpLGk/KHRoaXMuX3JlcXVlc3RTZXRUaW1lPSEwLHRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZT1yKTpuPyh0aGlzLl9hbHdheXNTZWVrS2V5ZnJhbWU/KG49dGhpcy5fbXNlY3RsLmdldE5lYXJlc3RLZXlmcmFtZShNYXRoLmZsb29yKDFlMyplKSksdGhpcy5fcmVxdWVzdFNldFRpbWU9ITAsdGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPW51bGwhPW4/bi5kdHMvMWUzOmUpOih0aGlzLl9yZXF1ZXN0U2V0VGltZT0hMCx0aGlzLl9tZWRpYUVsZW1lbnQuY3VycmVudFRpbWU9ZSksbnVsbCE9dGhpcy5fcHJvZ3Jlc3NDaGVja2VyJiZ0aGlzLl9jaGVja1Byb2dyZXNzQW5kUmVzdW1lKCkpOihudWxsIT10aGlzLl9wcm9ncmVzc0NoZWNrZXImJih3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9wcm9ncmVzc0NoZWNrZXIpLHRoaXMuX3Byb2dyZXNzQ2hlY2tlcj1udWxsKSx0aGlzLl9tc2VjdGwuc2VlayhlKSx0aGlzLl90cmFuc211eGVyLnNlZWsoTWF0aC5mbG9vcigxZTMqZSkpLHRoaXMuX2NvbmZpZy5hY2N1cmF0ZVNlZWsmJih0aGlzLl9yZXF1ZXN0U2V0VGltZT0hMCx0aGlzLl9tZWRpYUVsZW1lbnQuY3VycmVudFRpbWU9ZSkpfX0se2tleToiX2NoZWNrQW5kQXBwbHlVbmJ1ZmZlcmVkU2Vla3BvaW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlO3RoaXMuX3NlZWtwb2ludFJlY29yZCYmKHRoaXMuX3NlZWtwb2ludFJlY29yZC5yZWNvcmRUaW1lPD10aGlzLl9ub3coKS0xMDA/KGU9dGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLHRoaXMuX3NlZWtwb2ludFJlY29yZD1udWxsLHRoaXMuX2lzVGltZXBvaW50QnVmZmVyZWQoZSl8fChudWxsIT10aGlzLl9wcm9ncmVzc0NoZWNrZXImJih3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3Byb2dyZXNzQ2hlY2tlciksdGhpcy5fcHJvZ3Jlc3NDaGVja2VyPW51bGwpLHRoaXMuX21zZWN0bC5zZWVrKGUpLHRoaXMuX3RyYW5zbXV4ZXIuc2VlayhNYXRoLmZsb29yKDFlMyplKSksdGhpcy5fY29uZmlnLmFjY3VyYXRlU2VlayYmKHRoaXMuX3JlcXVlc3RTZXRUaW1lPSEwLHRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZT1lKSkpOndpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX2NoZWNrQW5kQXBwbHlVbmJ1ZmZlcmVkU2Vla3BvaW50LmJpbmQodGhpcyksNTApKX19LHtrZXk6Il9jaGVja0FuZFJlc3VtZVN0dWNrUGxheWJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21lZGlhRWxlbWVudDtlfHwhdGhpcy5fcmVjZWl2ZWRDYW5QbGF5fHx0LnJlYWR5U3RhdGU8Mj8wPChlPXQuYnVmZmVyZWQpLmxlbmd0aCYmdC5jdXJyZW50VGltZTxlLnN0YXJ0KDApJiYoZC5kZWZhdWx0LncodGhpcy5UQUcsIlBsYXliYWNrIHNlZW1zIHN0dWNrIGF0ICIrdC5jdXJyZW50VGltZSsiLCBzZWVrIHRvICIrZS5zdGFydCgwKSksdGhpcy5fcmVxdWVzdFNldFRpbWU9ITAsdGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPWUuc3RhcnQoMCksdGhpcy5fbWVkaWFFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix0aGlzLmUub252UHJvZ3Jlc3MpKTp0aGlzLl9tZWRpYUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHRoaXMuZS5vbnZQcm9ncmVzcyl9fSx7a2V5OiJfb252TG9hZGVkTWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe251bGwhPXRoaXMuX3BlbmRpbmdTZWVrVGltZSYmKHRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZT10aGlzLl9wZW5kaW5nU2Vla1RpbWUsdGhpcy5fcGVuZGluZ1NlZWtUaW1lPW51bGwpLHRoaXMuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuTE9BREVEX01FVEFfREFUQSl9fSx7a2V5OiJfb252U2Vla2luZyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLG49dGhpcy5fbWVkaWFFbGVtZW50LmJ1ZmZlcmVkO2lmKHRoaXMuX3JlcXVlc3RTZXRUaW1lKXRoaXMuX3JlcXVlc3RTZXRUaW1lPSExO2Vsc2V7aWYodDwxJiYwPG4ubGVuZ3RoKXt2YXIgaT1uLnN0YXJ0KDApO2lmKGk8MSYmdDxpfHxsLmRlZmF1bHQuc2FmYXJpKXJldHVybiB0aGlzLl9yZXF1ZXN0U2V0VGltZT0hMCx2b2lkKHRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZT1sLmRlZmF1bHQuc2FmYXJpPy4xOmkpfWlmKHRoaXMuX2lzVGltZXBvaW50QnVmZmVyZWQodCkpcmV0dXJuIXRoaXMuX2Fsd2F5c1NlZWtLZXlmcmFtZXx8bnVsbCE9KGk9dGhpcy5fbXNlY3RsLmdldE5lYXJlc3RLZXlmcmFtZShNYXRoLmZsb29yKDFlMyp0KSkpJiYodGhpcy5fcmVxdWVzdFNldFRpbWU9ITAsdGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPWkuZHRzLzFlMyksdm9pZChudWxsIT10aGlzLl9wcm9ncmVzc0NoZWNrZXImJnRoaXMuX2NoZWNrUHJvZ3Jlc3NBbmRSZXN1bWUoKSk7dGhpcy5fc2Vla3BvaW50UmVjb3JkPXtzZWVrUG9pbnQ6dCxyZWNvcmRUaW1lOnRoaXMuX25vdygpfSx3aW5kb3cuc2V0VGltZW91dCh0aGlzLl9jaGVja0FuZEFwcGx5VW5idWZmZXJlZFNlZWtwb2ludC5iaW5kKHRoaXMpLDUwKX19fSx7a2V5OiJfb252Q2FuUGxheSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ7dGhpcy5fcmVjZWl2ZWRDYW5QbGF5PSEwLHRoaXMuX21lZGlhRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjYW5wbGF5Iix0aGlzLmUub252Q2FuUGxheSksdGhpcy5fbWVkaWFFbGVtZW50LnBsYXkoKSx0aGlzLl9lbmFibGVBdWRpb0dhaW4mJihnX2F1ZGlvU291cmNlfHwodD10aGlzLl9tZWRpYUVsZW1lbnQsZ19hdWRpb1NvdXJjZT1nX2F1ZGlvQ3R4LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSh0KSksZ19hdWRpb1NvdXJjZS5jb25uZWN0KGdfYXVkaW9HYWluKSxkLmRlZmF1bHQuZCh0aGlzLlRBRywiRW5hYmxlIGF1ZGlvIGdhaW4sIGxldmVsID0gIit0aGlzLl9hdWRpb0dhaW5MZXZlbCkpfX0se2tleToiX29udlN0YWxsZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrQW5kUmVzdW1lU3R1Y2tQbGF5YmFjayghMCl9fSx7a2V5OiJfb252UHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2NoZWNrQW5kUmVzdW1lU3R1Y2tQbGF5YmFjaygpfX0se2tleToiX29udlRpbWVVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4saT1lLnRhcmdldDtpLmN1cnJlbnRUaW1lJiZpLnNlZWthYmxlJiZpLnBsYXliYWNrUmF0ZSYmMCE9aS5zZWVrYWJsZS5sZW5ndGgmJnRoaXMuX2VuYWJsZUR1cmF0aW9uTW9uaXRvciYmKG49aS5jdXJyZW50VGltZSx0PWkuc2Vla2FibGUuZW5kKDApLGU9aS5wbGF5YmFja1JhdGUsKG49dC1uKT50aGlzLl9mYXN0dmFsdWUmJjE9PT1lJiYoaS5wbGF5YmFja1JhdGU9MS4yKSxuPHRoaXMuX3Nsb3d2YWx1ZSYmMTxlJiYoaS5wbGF5YmFja1JhdGU9MSkpfX0se2tleToidHlwZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3R5cGV9fSx7a2V5OiJidWZmZXJlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhRWxlbWVudC5idWZmZXJlZH19LHtrZXk6ImR1cmF0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFFbGVtZW50LmR1cmF0aW9ufX0se2tleToidm9sdW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFFbGVtZW50LnZvbHVtZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX21lZGlhRWxlbWVudC52b2x1bWU9ZX19LHtrZXk6Im11dGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFFbGVtZW50Lm11dGVkfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbWVkaWFFbGVtZW50Lm11dGVkPWV9fSx7a2V5OiJjdXJyZW50VGltZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21lZGlhRWxlbWVudD90aGlzLl9tZWRpYUVsZW1lbnQuY3VycmVudFRpbWU6MH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX21lZGlhRWxlbWVudD90aGlzLl9pbnRlcm5hbFNlZWsoZSk6dGhpcy5fcGVuZGluZ1NlZWtUaW1lPWV9fSx7a2V5OiJtZWRpYUluZm8iLGdldDpmdW5jdGlvbigpe3JldHVybigwLHIuZGVmYXVsdCkoe30sdGhpcy5fbWVkaWFJbmZvKX19LHtrZXk6InN0YXRpc3RpY3NJbmZvIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbD09dGhpcy5fc3RhdGlzdGljc0luZm8mJih0aGlzLl9zdGF0aXN0aWNzSW5mbz17fSksdGhpcy5fc3RhdGlzdGljc0luZm89dGhpcy5fZmlsbFN0YXRpc3RpY3NJbmZvKHRoaXMuX3N0YXRpc3RpY3NJbmZvKSwoMCxyLmRlZmF1bHQpKHt9LHRoaXMuX3N0YXRpc3RpY3NJbmZvKX19LHtrZXk6Im9uUGFyc2VkRGF0YSIsc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uUGFyc2VkRGF0YT1lfX1dKSxvPUw7ZnVuY3Rpb24gTChlLHQpe2lmKCgwLHMuZGVmYXVsdCkodGhpcyxMKSx0aGlzLlRBRz0iRmx2UGxheWVyIix0aGlzLl90eXBlPSJGbHZQbGF5ZXIiLHRoaXMuX2VtaXR0ZXI9bmV3IHUuZGVmYXVsdCx0aGlzLl9jb25maWc9KDAseS5jcmVhdGVEZWZhdWx0Q29uZmlnKSgpLCJvYmplY3QiPT09KHZvaWQgMD09PXQ/InVuZGVmaW5lZCI6KDAsYS5kZWZhdWx0KSh0KSkmJigwLHIuZGVmYXVsdCkodGhpcy5fY29uZmlnLHQpLCJmbHYiIT09ZS50eXBlLnRvTG93ZXJDYXNlKCkpdGhyb3cgbmV3IHYuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJGbHZQbGF5ZXIgcmVxdWlyZXMgYW4gZmx2IE1lZGlhRGF0YVNvdXJjZSBpbnB1dCEiKTshMD09PWUuaXNMaXZlJiYodGhpcy5fY29uZmlnLmlzTGl2ZT0hMCksdGhpcy5lPXtvbnZMb2FkZWRNZXRhZGF0YTp0aGlzLl9vbnZMb2FkZWRNZXRhZGF0YS5iaW5kKHRoaXMpLG9udlNlZWtpbmc6dGhpcy5fb252U2Vla2luZy5iaW5kKHRoaXMpLG9udkNhblBsYXk6dGhpcy5fb252Q2FuUGxheS5iaW5kKHRoaXMpLG9udlN0YWxsZWQ6dGhpcy5fb252U3RhbGxlZC5iaW5kKHRoaXMpLG9udlByb2dyZXNzOnRoaXMuX29udlByb2dyZXNzLmJpbmQodGhpcyksb252VGltZVVwZGF0ZTp0aGlzLl9vbnZUaW1lVXBkYXRlLmJpbmQodGhpcyl9LHNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2Uubm93P3RoaXMuX25vdz1zZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHNlbGYucGVyZm9ybWFuY2UpOnRoaXMuX25vdz1EYXRlLm5vdyx0aGlzLl9wZW5kaW5nU2Vla1RpbWU9bnVsbCx0aGlzLl9yZXF1ZXN0U2V0VGltZT0hMSx0aGlzLl9zZWVrcG9pbnRSZWNvcmQ9bnVsbCx0aGlzLl9wcm9ncmVzc0NoZWNrZXI9bnVsbCx0aGlzLl9tZWRpYURhdGFTb3VyY2U9ZSx0aGlzLl9tZWRpYUVsZW1lbnQ9bnVsbCx0aGlzLl9tc2VjdGw9bnVsbCx0aGlzLl90cmFuc211eGVyPW51bGwsdGhpcy5fZmFzdHZhbHVlPTEuNSx0aGlzLl9zbG93dmFsdWU9LjUsMDxlLnN0YXNoSW5pdGlhbFNpemUmJih0aGlzLl9mYXN0dmFsdWU9NCx0aGlzLl9zbG93dmFsdWU9Mi41KSx0aGlzLl9zdGFzaEFycmF5PVtdLHRoaXMuX21zZVNvdXJjZU9wZW5lZD0hMSx0aGlzLl9oYXNQZW5kaW5nTG9hZD0hMSx0aGlzLl9yZWNlaXZlZENhblBsYXk9ITEsdGhpcy5fbWVkaWFJbmZvPW51bGwsdGhpcy5fc3RhdGlzdGljc0luZm89bnVsbDtlPWwuZGVmYXVsdC5jaHJvbWUmJihsLmRlZmF1bHQudmVyc2lvbi5tYWpvcjw1MHx8NTA9PT1sLmRlZmF1bHQudmVyc2lvbi5tYWpvciYmbC5kZWZhdWx0LnZlcnNpb24uYnVpbGQ8MjY2MSk7dGhpcy5fYWx3YXlzU2Vla0tleWZyYW1lPSEhKGV8fGwuZGVmYXVsdC5tc2VkZ2V8fGwuZGVmYXVsdC5tc2llKSx0aGlzLl9hbHdheXNTZWVrS2V5ZnJhbWUmJih0aGlzLl9jb25maWcuYWNjdXJhdGVTZWVrPSExKSx0aGlzLl92aWRlb1N0YXRlTW9uaXRvckludGVydmFsPXRoaXMuX2NvbmZpZy52aWRlb1N0YXRlTW9uaXRvckludGVydmFsLHRoaXMuX2VuYWJsZUR1cmF0aW9uTW9uaXRvcj10aGlzLl9jb25maWcuZW5hYmxlRHVyYXRpb25Nb25pdG9yLHRoaXMuX2N1ckxhdGVuY3lUaHJlc2hvbGQ9dGhpcy5fY29uZmlnLmxvd0xhdGVuY3lUaHJlc2hvbGQsdGhpcy5fZGVjcmVhc2VEdXJhdGlvblN0ZXA9dGhpcy5fY29uZmlnLmRlY3JlYXNlRHVyYXRpb25TdGVwLHRoaXMuX2R1cmF0aW9uTW9uaXRvcj1udWxsLHRoaXMuX2VuYWJsZVZpZGVvRnJvemVuTW9uaXRvcj10aGlzLl9jb25maWcuZW5hYmxlVmlkZW9Gcm96ZW5Nb25pdG9yLHRoaXMuX2Zyb3plblRpbWVzVGhyZXNob2xkPXRoaXMuX2NvbmZpZy5mcm96ZW5UaW1lc1RocmVzaG9sZCx0aGlzLl9mb3J6ZW5UaW1lcz0wLHRoaXMuX2xhc3REZWNvZGVkRnJhbWVzPTAsdGhpcy5fbGF0ZW5jeURldGVjdEludGVydmFsPXRoaXMuX2NvbmZpZy5sYXRlbmN5RGV0ZWN0SW50ZXJ2YWwsdGhpcy5fbGF0ZW5jeURldGVjdFRocmVzaG9sZD10aGlzLl9jb25maWcubGF0ZW5jeURldGVjdFRocmVzaG9sZCx0aGlzLl9sYXRlbmN5RGV0ZWN0QWRqdXN0U3RlcD10aGlzLl9jb25maWcubGF0ZW5jeURldGVjdEFkanVzdFN0ZXAsdGhpcy5fbGF0ZW5jeURldGVjdFRpbWVyPW51bGwsdGhpcy5fbGF0ZW5jeUFkanVzdENvdW50PTAsdGhpcy5fbGF0ZW5jeUFkanVzdENvdW50VG90YWw9MCx0aGlzLl9lbmFibGVBdWRpb0dhaW49dGhpcy5fY29uZmlnLmVuYWJsZUF1ZGlvR2Fpbix0aGlzLl9hdWRpb0dhaW5MZXZlbD0wPHRoaXMuX2NvbmZpZy5hdWRpb0dhaW5MZXZlbD90aGlzLl9jb25maWcuYXVkaW9HYWluTGV2ZWw6MSx0aGlzLmlXbmROdW09dGhpcy5fY29uZmlnLldESW5mby5pbmRleH10LmRlZmF1bHQ9b30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9ZihuKDQyKSksYT1mKG4oMTQpKSxyPWYobigxKSkscz1mKG4oMikpLG89ZihuKDEzKSksdT1mKG4oNikpLGQ9ZihuKDczKSksbD1mKG4oMjQwKSksaD1mKG4oNDQpKSxjPShmKG4oMjQyKSksZihuKDc0KSkpLF89ZihuKDM1MSkpO2Z1bmN0aW9uIGYoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHMuZGVmYXVsdCkobSxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl93b3JrZXI/dGhpcy5fd29ya2VyRGVzdHJveWluZ3x8KHRoaXMuX3dvcmtlckRlc3Ryb3lpbmc9ITAsdGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6ImRlc3Ryb3kifSksZC5kZWZhdWx0LnJlbW92ZUxpc3RlbmVyKHRoaXMuZS5vbkxvZ2dpbmdDb25maWdDaGFuZ2VkKSx0aGlzLmU9bnVsbCk6KHRoaXMuX2NvbnRyb2xsZXIuZGVzdHJveSgpLHRoaXMuX2NvbnRyb2xsZXI9bnVsbCksdGhpcy5fZW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzLl9lbWl0dGVyPW51bGx9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9lbWl0dGVyLmFkZExpc3RlbmVyKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihlLHQpfX0se2tleToiaGFzV29ya2VyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBudWxsIT10aGlzLl93b3JrZXJ9fSx7a2V5OiJvcGVuIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3dvcmtlcj90aGlzLl93b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoic3RhcnQifSk6dGhpcy5fY29udHJvbGxlci5zdGFydCgpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fd29ya2VyP3RoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJzdG9wIn0pOnRoaXMuX2NvbnRyb2xsZXIuc3RvcCgpfX0se2tleToic2VlayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fd29ya2VyP3RoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJzZWVrIixwYXJhbTplfSk6dGhpcy5fY29udHJvbGxlci5zZWVrKGUpfX0se2tleToicGF1c2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fd29ya2VyP3RoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJwYXVzZSJ9KTp0aGlzLl9jb250cm9sbGVyLnBhdXNlKCl9fSx7a2V5OiJyZXN1bWUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fd29ya2VyP3RoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJyZXN1bWUifSk6dGhpcy5fY29udHJvbGxlci5yZXN1bWUoKX19LHtrZXk6ImZlZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt0aGlzLmhhc1dvcmtlcigpP3RoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJmZWVkIixmZWVkRGF0YTp7ZGF0YTplLGJ5dGVTdGFydDp0LHJlY2VpdmVkTGVuZ3RoOm59fSk6dGhpcy5fY29udHJvbGxlci5faW9jdGwuX29uTG9hZGVyQ2h1bmtBcnJpdmFsKGUsdCxuKX19LHtrZXk6InNldFJlY29yZEZsYWciLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuaGFzV29ya2VyKCk/dGhpcy5fd29ya2VyLnBvc3RNZXNzYWdlKHtjbWQ6InNldF9yZWNvcmRfZmxhZyIsdmFsdWU6ZX0pOnRoaXMuX2NvbnRyb2xsZXIuX2RlbXV4ZXIucmVjb3JkRmxhZz1lfX0se2tleToiQ2xlYW5DYWNoZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhhc1dvcmtlcigpP3RoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJjbGVhbmNhY2hlIn0pOnRoaXMuX2NvbnRyb2xsZXIuX2lvY3RsLl9mbHVzaFN0YXNoQnVmZmVyKCEwKX19LHtrZXk6Il9vbkluaXRTZWdtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7bnVsbCE9bi5fZW1pdHRlciYmbi5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5JTklUX1NFR01FTlQsZSx0KX0pfX0se2tleToiX29uTWVkaWFTZWdtZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7bnVsbCE9bi5fZW1pdHRlciYmbi5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5NRURJQV9TRUdNRU5ULGUsdCl9KX19LHtrZXk6Il9vbkxvYWRpbmdDb21wbGV0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO2EuZGVmYXVsdC5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe2UuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuTE9BRElOR19DT01QTEVURSl9KX19LHtrZXk6Il9vblJlY292ZXJlZEVhcmx5RW9mIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7ZS5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5SRUNPVkVSRURfRUFSTFlfRU9GKX0pfX0se2tleToiX29uTWVkaWFJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2EuZGVmYXVsdC5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe251bGwhPXQuX2VtaXR0ZXImJnQuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuTUVESUFfSU5GTyxlKX0pfX0se2tleToiX29uTWV0YURhdGFBcnJpdmVkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2EuZGVmYXVsdC5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe251bGwhPXQuX2VtaXR0ZXImJnQuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuTUVUQURBVEFfQVJSSVZFRCxlKX0pfX0se2tleToiX29uU2NyaXB0RGF0YUFycml2ZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7bnVsbCE9dC5fZW1pdHRlciYmdC5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5TQ1JJUFREQVRBX0FSUklWRUQsZSl9KX19LHtrZXk6Il9vblN0YXRpc3RpY3NJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2EuZGVmYXVsdC5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3QuX2VtaXR0ZXIuZW1pdChoLmRlZmF1bHQuU1RBVElTVElDU19JTkZPLGUpfSl9fSx7a2V5OiJfb25JT0Vycm9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7bnVsbCE9bi5fZW1pdHRlciYmbi5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5JT19FUlJPUixlLHQpfSl9fSx7a2V5OiJfb25EZW11eEVycm9yIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7bnVsbCE9bi5fZW1pdHRlciYmbi5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5ERU1VWF9FUlJPUixlLHQpfSl9fSx7a2V5OiJfb25SZWNvbW1lbmRTZWVrcG9pbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7dC5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5SRUNPTU1FTkRfU0VFS1BPSU5ULGUpfSl9fSx7a2V5OiJfb25Mb2dnaW5nQ29uZmlnQ2hhbmdlZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoibG9nZ2luZ19jb25maWciLHBhcmFtOmV9KX19LHtrZXk6Il9vblZpZGVvUmVzb2x1dGlvbkNoYW5nZWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7bnVsbCE9dC5fZW1pdHRlciYmdC5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5WSURFT19SRVNPTFVUSU9OX0NIQU5HRUQsZSl9KX19LHtrZXk6Il9vbldvcmtlck1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YSxuPXQuZGF0YTtpZigiZGVzdHJveWVkIj09PXQubXNnfHx0aGlzLl93b3JrZXJEZXN0cm95aW5nKXJldHVybiB0aGlzLl93b3JrZXJEZXN0cm95aW5nPSExLHRoaXMuX3dvcmtlci50ZXJtaW5hdGUoKSx2b2lkKHRoaXMuX3dvcmtlcj1udWxsKTtzd2l0Y2godC5tc2cpe2Nhc2UgaC5kZWZhdWx0LklOSVRfU0VHTUVOVDpjYXNlIGguZGVmYXVsdC5NRURJQV9TRUdNRU5UOnRoaXMuX2VtaXR0ZXIuZW1pdCh0Lm1zZyxuLnR5cGUsbi5kYXRhKTticmVhaztjYXNlIGguZGVmYXVsdC5MT0FESU5HX0NPTVBMRVRFOmNhc2UgaC5kZWZhdWx0LlJFQ09WRVJFRF9FQVJMWV9FT0Y6dGhpcy5fZW1pdHRlci5lbWl0KHQubXNnKTticmVhaztjYXNlIGguZGVmYXVsdC5NRURJQV9JTkZPOigwLGkuZGVmYXVsdCkobixjLmRlZmF1bHQucHJvdG90eXBlKSx0aGlzLl9lbWl0dGVyLmVtaXQodC5tc2csbik7YnJlYWs7Y2FzZSBoLmRlZmF1bHQuTUVUQURBVEFfQVJSSVZFRDpjYXNlIGguZGVmYXVsdC5TQ1JJUFREQVRBX0FSUklWRUQ6Y2FzZSBoLmRlZmF1bHQuU1RBVElTVElDU19JTkZPOnRoaXMuX2VtaXR0ZXIuZW1pdCh0Lm1zZyxuKTticmVhaztjYXNlIGguZGVmYXVsdC5JT19FUlJPUjpjYXNlIGguZGVmYXVsdC5ERU1VWF9FUlJPUjp0aGlzLl9lbWl0dGVyLmVtaXQodC5tc2csbi50eXBlLG4uaW5mbyk7YnJlYWs7Y2FzZSBoLmRlZmF1bHQuUkVDT01NRU5EX1NFRUtQT0lOVDp0aGlzLl9lbWl0dGVyLmVtaXQodC5tc2csbik7YnJlYWs7Y2FzZSJsb2djYXRfY2FsbGJhY2siOnUuZGVmYXVsdC5lbWl0dGVyLmVtaXQoImxvZyIsbi50eXBlLG4ubG9nY2F0KTticmVhaztjYXNlIGguZGVmYXVsdC5QQVJTRUREQVRBX0FSUklWRUQ6dGhpcy5fZW1pdHRlci5lbWl0KHQubXNnLG4uZGF0YWJ1ZixuLmRhdGFUeXBlKX19fSx7a2V5OiJfcGFyc2VkRGF0YUFycml2ZWQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkpe3ZhciByPXRoaXM7YS5kZWZhdWx0LnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7ci5fZW1pdHRlciYmci5fZW1pdHRlci5lbWl0KGguZGVmYXVsdC5QQVJTRUREQVRBX0FSUklWRUQsZSx0LG4saSl9KX19XSkscz1tO2Z1bmN0aW9uIG0odCxuKXtpZigoMCxyLmRlZmF1bHQpKHRoaXMsbSksdGhpcy5UQUc9IlRyYW5zbXV4ZXIiLHRoaXMuX2VtaXR0ZXI9bmV3IG8uZGVmYXVsdCxuLmVuYWJsZVdvcmtlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBXb3JrZXIpdHJ5e3RoaXMuX3dvcmtlcj0oMCxfLmRlZmF1bHQpKDI0MiksdGhpcy5fd29ya2VyRGVzdHJveWluZz0hMSx0aGlzLl93b3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5fb25Xb3JrZXJNZXNzYWdlLmJpbmQodGhpcykpLHRoaXMuX3dvcmtlci5wb3N0TWVzc2FnZSh7Y21kOiJpbml0IixwYXJhbTpbdCxuXX0pLHRoaXMuZT17b25Mb2dnaW5nQ29uZmlnQ2hhbmdlZDp0aGlzLl9vbkxvZ2dpbmdDb25maWdDaGFuZ2VkLmJpbmQodGhpcyl9LGQuZGVmYXVsdC5yZWdpc3Rlckxpc3RlbmVyKHRoaXMuZS5vbkxvZ2dpbmdDb25maWdDaGFuZ2VkKSx0aGlzLl93b3JrZXIucG9zdE1lc3NhZ2Uoe2NtZDoibG9nZ2luZ19jb25maWciLHBhcmFtOmQuZGVmYXVsdC5nZXRDb25maWcoKX0pfWNhdGNoKGUpe3UuZGVmYXVsdC5lKHRoaXMuVEFHLCJFcnJvciB3aGlsZSBpbml0aWFsaXplIHRyYW5zbXV4aW5nIHdvcmtlciwgZmFsbGJhY2sgdG8gaW5saW5lIHRyYW5zbXV4aW5nIiksdGhpcy5fd29ya2VyPW51bGwsdGhpcy5fY29udHJvbGxlcj1uZXcgbC5kZWZhdWx0KHQsbil9ZWxzZSB0aGlzLl9jb250cm9sbGVyPW5ldyBsLmRlZmF1bHQodCxuKTt0aGlzLl9jb250cm9sbGVyJiYoKG49dGhpcy5fY29udHJvbGxlcikub24oaC5kZWZhdWx0LklPX0VSUk9SLHRoaXMuX29uSU9FcnJvci5iaW5kKHRoaXMpKSxuLm9uKGguZGVmYXVsdC5ERU1VWF9FUlJPUix0aGlzLl9vbkRlbXV4RXJyb3IuYmluZCh0aGlzKSksbi5vbihoLmRlZmF1bHQuSU5JVF9TRUdNRU5ULHRoaXMuX29uSW5pdFNlZ21lbnQuYmluZCh0aGlzKSksbi5vbihoLmRlZmF1bHQuTUVESUFfU0VHTUVOVCx0aGlzLl9vbk1lZGlhU2VnbWVudC5iaW5kKHRoaXMpKSxuLm9uKGguZGVmYXVsdC5MT0FESU5HX0NPTVBMRVRFLHRoaXMuX29uTG9hZGluZ0NvbXBsZXRlLmJpbmQodGhpcykpLG4ub24oaC5kZWZhdWx0LlJFQ09WRVJFRF9FQVJMWV9FT0YsdGhpcy5fb25SZWNvdmVyZWRFYXJseUVvZi5iaW5kKHRoaXMpKSxuLm9uKGguZGVmYXVsdC5NRURJQV9JTkZPLHRoaXMuX29uTWVkaWFJbmZvLmJpbmQodGhpcykpLG4ub24oaC5kZWZhdWx0Lk1FVEFEQVRBX0FSUklWRUQsdGhpcy5fb25NZXRhRGF0YUFycml2ZWQuYmluZCh0aGlzKSksbi5vbihoLmRlZmF1bHQuU0NSSVBUREFUQV9BUlJJVkVELHRoaXMuX29uU2NyaXB0RGF0YUFycml2ZWQuYmluZCh0aGlzKSksbi5vbihoLmRlZmF1bHQuU1RBVElTVElDU19JTkZPLHRoaXMuX29uU3RhdGlzdGljc0luZm8uYmluZCh0aGlzKSksbi5vbihoLmRlZmF1bHQuUkVDT01NRU5EX1NFRUtQT0lOVCx0aGlzLl9vblJlY29tbWVuZFNlZWtwb2ludC5iaW5kKHRoaXMpKSxuLm9uKGguZGVmYXVsdC5WSURFT19SRVNPTFVUSU9OX0NIQU5HRUQsdGhpcy5fb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VkLmJpbmQodGhpcykpLG4ub24oaC5kZWZhdWx0LlBBUlNFRERBVEFfQVJSSVZFRCx0aGlzLl9wYXJzZWREYXRhQXJyaXZlZC5iaW5kKHRoaXMpKSl9dC5kZWZhdWx0PXN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBhPWwobig5MSkpLHM9bChuKDIzKSksbz1sKG4oMTIpKSxwPWwobigzNDApKSxpPWwobigxKSkscj1sKG4oMikpLGI9bChuKDYpKSx1PWwobigzNDQpKSx3PWwobigzNDYpKSxEPWwobig3NSkpLGQ9bChuKDc0KSkseT1uKDcpO2Z1bmN0aW9uIGwoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIuZGVmYXVsdCkodixbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9tZWRpYUluZm89bnVsbCx0aGlzLl9tZXRhZGF0YT1udWxsLHRoaXMuX2F1ZGlvTWV0YWRhdGE9bnVsbCx0aGlzLl92aWRlb01ldGFkYXRhPW51bGwsdGhpcy5fdmlkZW9UcmFjaz1udWxsLHRoaXMuX2F1ZGlvVHJhY2s9bnVsbCx0aGlzLl9vbkVycm9yPW51bGwsdGhpcy5fb25NZWRpYUluZm89bnVsbCx0aGlzLl9vbk1ldGFEYXRhQXJyaXZlZD1udWxsLHRoaXMuX29uU2NyaXB0RGF0YUFycml2ZWQ9bnVsbCx0aGlzLl9vblRyYWNrTWV0YWRhdGE9bnVsbCx0aGlzLl9vbkRhdGFBdmFpbGFibGU9bnVsbCx0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb249bnVsbCx0aGlzLl9yZWNvcmRGbGFnPSExLHRoaXMuX2ZpcnN0clZpZGVvPSEwLHRoaXMuX2ZpcnN0QXVkaW89ITAsdGhpcy5fZmx2SGVhZD0iIix0aGlzLl9maXJzdFBhcnNlQXVkaW89ITAsdGhpcy5fYnBzQ2FsY3VsYXRvciYmKHNlbGYuY2xlYXJJbnRlcnZhbCh0aGlzLl9icHNDYWxjdWxhdG9yKSx0aGlzLl9icHNDYWxjdWxhdG9yPW51bGwsdGhpcy5fYnBzSW5mbz1udWxsKX19LHtrZXk6ImJpbmREYXRhU291cmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5vbkRhdGFBcnJpdmFsPXRoaXMucGFyc2VDaHVua3MuYmluZCh0aGlzKSx0aGlzfX0se2tleToicmVzZXRNZWRpYUluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFJbmZvPW5ldyBkLmRlZmF1bHR9fSx7a2V5OiJfaXNJbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNBdWRpbyYmdGhpcy5faGFzVmlkZW8/dGhpcy5fYXVkaW9Jbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkJiZ0aGlzLl92aWRlb0luaXRpYWxNZXRhZGF0YURpc3BhdGNoZWQ6dGhpcy5faGFzQXVkaW8mJiF0aGlzLl9oYXNWaWRlbz90aGlzLl9hdWRpb0luaXRpYWxNZXRhZGF0YURpc3BhdGNoZWQ6ISh0aGlzLl9oYXNBdWRpb3x8IXRoaXMuX2hhc1ZpZGVvKSYmdGhpcy5fdmlkZW9Jbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkfX0se2tleToiX2NhbGN1bGF0ZVJlYWx0aW1lQml0cmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9icHNJbmZvJiYodGhpcy5fYnBzSW5mby50aW1lX2dhcF9mYWN0b3I8MSYmKHRoaXMuX2Jwc0luZm8udGltZV9nYXBfZmFjdG9yPTEpLDAhPXRoaXMuX2Jwc0luZm8ubGFzdFZpZGVvQnl0ZXMmJih0aGlzLl9icHNJbmZvLmJwc192aWRlbz04KnRoaXMuX2Jwc0luZm8ubGFzdFZpZGVvQnl0ZXMvMTAyNC90aGlzLl9icHNJbmZvLnRpbWVfZ2FwX2ZhY3Rvcix0aGlzLl9icHNJbmZvLmxhc3RWaWRlb0J5dGVzPTApLDAhPXRoaXMuX2Jwc0luZm8ubGFzdEF1ZGlvQnl0ZXMmJih0aGlzLl9icHNJbmZvLmJwc19hdWRpbz04KnRoaXMuX2Jwc0luZm8ubGFzdEF1ZGlvQnl0ZXMvMTAyNC90aGlzLl9icHNJbmZvLnRpbWVfZ2FwX2ZhY3Rvcix0aGlzLl9icHNJbmZvLmxhc3RBdWRpb0J5dGVzPTApLHRoaXMuX3ZpZGVvSW5mby5iaXRSYXRlPXRoaXMuX2Jwc0luZm8uYnBzX3ZpZGVvK3RoaXMuX2Jwc0luZm8uYnBzX2F1ZGlvKX19LHtrZXk6InBhcnNlQ2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCEodGhpcy5fb25FcnJvciYmdGhpcy5fb25NZWRpYUluZm8mJnRoaXMuX29uVHJhY2tNZXRhZGF0YSYmdGhpcy5fb25EYXRhQXZhaWxhYmxlKSl0aHJvdyBuZXcgeS5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkZsdjogb25FcnJvciAmIG9uTWVkaWFJbmZvICYgb25UcmFja01ldGFkYXRhICYgb25EYXRhQXZhaWxhYmxlIGNhbGxiYWNrIG11c3QgYmUgc3BlY2lmaWVkIik7dmFyIG49MCxpPXRoaXMuX2xpdHRsZUVuZGlhbjtpZigwPT09dCl7aWYoISgxMzxlLmJ5dGVMZW5ndGgpKXJldHVybiAwO249di5wcm9iZShlKS5kYXRhT2Zmc2V0fWVsc2UgND09PXQmJihuPTQpO3RoaXMuX2Jwc0NhbGN1bGF0b3J8fCh0aGlzLl9icHNDYWxjdWxhdG9yPXNlbGYuc2V0SW50ZXJ2YWwodGhpcy5fY2FsY3VsYXRlUmVhbHRpbWVCaXRyYXRlLmJpbmQodGhpcyksMWUzKSksdGhpcy5fZmlyc3RQYXJzZSYmKHRoaXMuX2ZpcnN0UGFyc2U9ITEsdCtuIT09dGhpcy5fZGF0YU9mZnNldCYmYi5kZWZhdWx0LncodGhpcy5UQUcsIkZpcnN0IHRpbWUgcGFyc2luZyBidXQgY2h1bmsgYnl0ZVN0YXJ0IGludmFsaWQhIiksMCE9PW5ldyBEYXRhVmlldyhlLG4pLmdldFVpbnQzMigwLCFpKSYmYi5kZWZhdWx0LncodGhpcy5UQUcsIlByZXZUYWdTaXplMCAhPT0gMCAhISEiKSxuKz00LHRoaXMuX2ZsdkhlYWQ9bmV3IFVpbnQ4QXJyYXkoZSwwLDEzKSk7Zm9yKHZhciByLGE9MCxzPTA7bjxlLmJ5dGVMZW5ndGg7KXt0aGlzLl9kaXNwYXRjaD0hMDt2YXIgbz1uZXcgRGF0YVZpZXcoZSxuKTtpZihuKzExKzQ+ZS5ieXRlTGVuZ3RoKWJyZWFrO3ZhciB1PW8uZ2V0VWludDgoMCksZD0xNjc3NzIxNSZvLmdldFVpbnQzMigwLCFpKTtpZihuKzExK2QrND5lLmJ5dGVMZW5ndGgpYnJlYWs7aWYoOD09PXV8fDk9PT11fHwxOD09PXV8fDE5MT09PXUpe3ZhciBsPW8uZ2V0VWludDgoNCksaD1vLmdldFVpbnQ4KDUpLGM9by5nZXRVaW50OCg2KXxoPDw4fGw8PDE2fG8uZ2V0VWludDgoNyk8PDI0OzAhPSgxNjc3NzIxNSZvLmdldFVpbnQzMig3LCFpKSkmJmIuZGVmYXVsdC53KHRoaXMuVEFHLCJNZWV0IHRhZyB3aGljaCBoYXMgU3RyZWFtSUQgIT0gMCEiKTt2YXIgXyxmPW4rMTE7c3dpdGNoKCF0aGlzLl9yZWNvcmRGbGFnfHw4IT09dSYmOSE9PXUmJjE4IT09dXx8dGhpcy5fb25QYXJzZWREYXRhKG5ldyBVaW50OEFycmF5KGUsbiwxMStkKzQpLDEpLHUpe2Nhc2UgODp0aGlzLl9maXJzdEF1ZGlvJiYoXz0odGhpcy5fZmlyc3RBdWRpbz0hMSxwLmRlZmF1bHQpKHRoaXMuX2ZsdkhlYWQpLmNvbmNhdCgoMCxwLmRlZmF1bHQpKG5ldyBVaW50OEFycmF5KGUsbiwxMStkKzQpKSksdGhpcy5fZmx2SGVhZD1uZXcgVWludDhBcnJheShfKSx0aGlzLl9vblBhcnNlZERhdGEodGhpcy5fZmx2SGVhZCw1KSksdGhpcy5fcGFyc2VBdWRpb0RhdGEoZSxmLGQsYykscys9ZDticmVhaztjYXNlIDk6dGhpcy5fZmlyc3RyVmlkZW8mJihtPSh0aGlzLl9maXJzdHJWaWRlbz0hMSxwLmRlZmF1bHQpKHRoaXMuX2ZsdkhlYWQpLmNvbmNhdCgoMCxwLmRlZmF1bHQpKG5ldyBVaW50OEFycmF5KGUsbiwxMStkKzQpKSksdGhpcy5fZmx2SGVhZD1uZXcgVWludDhBcnJheShtKSx0aGlzLl9vblBhcnNlZERhdGEodGhpcy5fZmx2SGVhZCw1KSx0aGlzLl9vc2R0aW1lSW5mby5mbHZzdGFydFRpbWU9YyksdGhpcy5fb3NkdGltZUluZm8uZmx2ZHVyYXRpb249Yy10aGlzLl9vc2R0aW1lSW5mby5mbHZzdGFydFRpbWUsdGhpcy5fcGFyc2VWaWRlb0RhdGEoZSxmLGQsYyx0K24pLGErPWQsdGhpcy5fcmVjdkdsb2JlVGltZUZsYWcmJjFlMzw9Yy10aGlzLl9yZWN2UHJlVGltZSYmKHRoaXMuX29zZHRpbWVJbmZvLmdsb2JhbFRpbWU9dGhpcy5fb3NkdGltZUluZm8uZ2xvYmFsVGltZSsxZTMsdGhpcy5fcmVjdlByZVRpbWU9Yyx0aGlzLl9vblBhcnNlZERhdGEodGhpcy5fb3NkdGltZUluZm8sMikpO2JyZWFrO2Nhc2UgMTg6dmFyIG09KDAscC5kZWZhdWx0KSh0aGlzLl9mbHZIZWFkKS5jb25jYXQoKDAscC5kZWZhdWx0KShuZXcgVWludDhBcnJheShlLG4sMTErZCs0KSkpO3RoaXMuX2ZsdkhlYWQ9bmV3IFVpbnQ4QXJyYXkobSksdGhpcy5fcGFyc2VTY3JpcHREYXRhKGUsZixkKTticmVhaztjYXNlIDE5MTp0aGlzLl9wYXJzZVByaXZhdGVEYXRhKGUsZixkLGMpfW89by5nZXRVaW50MzIoMTErZCwhaSk7byE9PTExK2QmJihiLmRlZmF1bHQudyh0aGlzLlRBRywiSW52YWxpZCBQcmV2VGFnU2l6ZSAiK28pLCgyMDk3MTUyPG98fG88MTYpJiZ0aGlzLl9vblBhcnNlZERhdGEoInJlc2V0IGRlY29kZXIiLDExKSksbis9MTErZCs0fWVsc2UgYi5kZWZhdWx0LncodGhpcy5UQUcsIlVuc3VwcG9ydGVkIHRhZyB0eXBlICIrdSsiLCBza2lwcGVkIiksbis9MTErZCs0fXJldHVybiB0aGlzLl9icHNJbmZvJiYodGhpcy5fYnBzSW5mby5sYXN0QXVkaW9CeXRlcys9cyx0aGlzLl9icHNJbmZvLmxhc3RWaWRlb0J5dGVzKz1hLDAhPXRoaXMuX2Jwc0luZm8uZGF0YV91cGRhdGVkX3RpbWUmJihyPShyPSh0aGlzLl9ub3coKS10aGlzLl9icHNJbmZvLmRhdGFfdXBkYXRlZF90aW1lKS8xZTMpPDE/MTpNYXRoLnJvdW5kKHIpLHRoaXMuX2Jwc0luZm8udGltZV9nYXBfZmFjdG9yPXIpLHRoaXMuX2Jwc0luZm8uZGF0YV91cGRhdGVkX3RpbWU9dGhpcy5fbm93KCkpLHRoaXMuX2lzSW5pdGlhbE1ldGFkYXRhRGlzcGF0Y2hlZCgpJiZ0aGlzLl9kaXNwYXRjaCYmKHRoaXMuX2F1ZGlvVHJhY2subGVuZ3RofHx0aGlzLl92aWRlb1RyYWNrLmxlbmd0aCkmJnRoaXMuX29uRGF0YUF2YWlsYWJsZSh0aGlzLl9hdWRpb1RyYWNrLHRoaXMuX3ZpZGVvVHJhY2spLG59fSx7a2V5OiJfcGFyc2VTY3JpcHREYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dD11LmRlZmF1bHQucGFyc2VTY3JpcHREYXRhKGUsdCxuKTtpZih0Lmhhc093blByb3BlcnR5KCJvbk1ldGFEYXRhIikpe2lmKG51bGw9PXQub25NZXRhRGF0YXx8Im9iamVjdCIhPT0oMCxvLmRlZmF1bHQpKHQub25NZXRhRGF0YSkpcmV0dXJuIHZvaWQgYi5kZWZhdWx0LncodGhpcy5UQUcsIkludmFsaWQgb25NZXRhRGF0YSBzdHJ1Y3R1cmUhIik7dGhpcy5fbWV0YWRhdGEmJmIuZGVmYXVsdC53KHRoaXMuVEFHLCJGb3VuZCBhbm90aGVyIG9uTWV0YURhdGEgdGFnISIpLHRoaXMuX21ldGFkYXRhPXQ7dmFyIGkscixuPXRoaXMuX21ldGFkYXRhLm9uTWV0YURhdGE7dGhpcy5fb25NZXRhRGF0YUFycml2ZWQmJnRoaXMuX29uTWV0YURhdGFBcnJpdmVkKCgwLHMuZGVmYXVsdCkoe30sbikpLCJib29sZWFuIj09dHlwZW9mIG4uaGFzQXVkaW8mJiExPT09dGhpcy5faGFzQXVkaW9GbGFnT3ZlcnJpZGVkJiYodGhpcy5faGFzQXVkaW89bi5oYXNBdWRpbyx0aGlzLl9tZWRpYUluZm8uaGFzQXVkaW89dGhpcy5faGFzQXVkaW8pLCJib29sZWFuIj09dHlwZW9mIG4uaGFzVmlkZW8mJiExPT09dGhpcy5faGFzVmlkZW9GbGFnT3ZlcnJpZGVkJiYodGhpcy5faGFzVmlkZW89bi5oYXNWaWRlbyx0aGlzLl9tZWRpYUluZm8uaGFzVmlkZW89dGhpcy5faGFzVmlkZW8pLCJudW1iZXIiPT10eXBlb2Ygbi5hdWRpb2RhdGFyYXRlJiYodGhpcy5fbWVkaWFJbmZvLmF1ZGlvRGF0YVJhdGU9bi5hdWRpb2RhdGFyYXRlKSwibnVtYmVyIj09dHlwZW9mIG4udmlkZW9kYXRhcmF0ZSYmKHRoaXMuX21lZGlhSW5mby52aWRlb0RhdGFSYXRlPW4udmlkZW9kYXRhcmF0ZSksIm51bWJlciI9PXR5cGVvZiBuLndpZHRoJiYodGhpcy5fbWVkaWFJbmZvLndpZHRoPW4ud2lkdGgpLCJudW1iZXIiPT10eXBlb2Ygbi5oZWlnaHQmJih0aGlzLl9tZWRpYUluZm8uaGVpZ2h0PW4uaGVpZ2h0KSwibnVtYmVyIj09dHlwZW9mIG4uZHVyYXRpb24/dGhpcy5fZHVyYXRpb25PdmVycmlkZWR8fChpPU1hdGguZmxvb3Iobi5kdXJhdGlvbip0aGlzLl90aW1lc2NhbGUpLHRoaXMuX2R1cmF0aW9uPWksdGhpcy5fbWVkaWFJbmZvLmR1cmF0aW9uPWkpOnRoaXMuX21lZGlhSW5mby5kdXJhdGlvbj0wLCJudW1iZXIiIT10eXBlb2Ygbi5mcmFtZXJhdGV8fDA8KGk9TWF0aC5mbG9vcigxZTMqbi5mcmFtZXJhdGUpKSYmKHI9aS8xZTMsdGhpcy5fcmVmZXJlbmNlRnJhbWVSYXRlLmZpeGVkPSEwLHRoaXMuX3JlZmVyZW5jZUZyYW1lUmF0ZS5mcHM9cix0aGlzLl9yZWZlcmVuY2VGcmFtZVJhdGUuZnBzX251bT1pLHRoaXMuX3JlZmVyZW5jZUZyYW1lUmF0ZS5mcHNfZGVuPTFlMyx0aGlzLl9tZWRpYUluZm8uZnBzPXIpLCJvYmplY3QiPT09KDAsby5kZWZhdWx0KShuLmtleWZyYW1lcyk/KHRoaXMuX21lZGlhSW5mby5oYXNLZXlmcmFtZXNJbmRleD0hMCxyPW4ua2V5ZnJhbWVzLHRoaXMuX21lZGlhSW5mby5rZXlmcmFtZXNJbmRleD10aGlzLl9wYXJzZUtleWZyYW1lc0luZGV4KHIpLG4ua2V5ZnJhbWVzPW51bGwpOnRoaXMuX21lZGlhSW5mby5oYXNLZXlmcmFtZXNJbmRleD0hMSx0aGlzLl9kaXNwYXRjaD0hMSx0aGlzLl9tZWRpYUluZm8ubWV0YWRhdGE9bixiLmRlZmF1bHQudih0aGlzLlRBRywiUGFyc2VkIG9uTWV0YURhdGEsIGhhc0F1ZGlvOiIrdGhpcy5fbWVkaWFJbmZvLmhhc0F1ZGlvKyIsIGhhc1ZpZGVvOiIrdGhpcy5fbWVkaWFJbmZvLmhhc1ZpZGVvKyIsIHZpZGVvIGRlbWVuc2lvbjoiK3RoaXMuX21lZGlhSW5mby53aWR0aCsieCIrdGhpcy5fbWVkaWFJbmZvLmhlaWdodCsiQCIrdGhpcy5fbWVkaWFJbmZvLmZwcysiIGZwcywgaGFzS2V5ZnJhbWVzSW5kZXg9Iit0aGlzLl9tZWRpYUluZm8uaGFzS2V5ZnJhbWVzSW5kZXgrIiwgdmlkZW9fYml0cmF0ZT0iK3RoaXMuX21lZGlhSW5mby52aWRlb0RhdGFSYXRlKyIsIGF1ZGlvX2JpdHJhdGU9Iit0aGlzLl9tZWRpYUluZm8uYXVkaW9EYXRhUmF0ZSksdGhpcy5fbWVkaWFJbmZvLmlzQ29tcGxldGUoKSYmdGhpcy5fb25NZWRpYUluZm8odGhpcy5fbWVkaWFJbmZvKX0wPCgwLGEuZGVmYXVsdCkodCkubGVuZ3RoJiZ0aGlzLl9vblNjcmlwdERhdGFBcnJpdmVkJiZ0aGlzLl9vblNjcmlwdERhdGFBcnJpdmVkKCgwLHMuZGVmYXVsdCkoe30sdCkpfX0se2tleToiX3BhcnNlS2V5ZnJhbWVzSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPVtdLGk9MTtpPGUudGltZXMubGVuZ3RoO2krKyl7dmFyIHI9dGhpcy5fdGltZXN0YW1wQmFzZStNYXRoLmZsb29yKDFlMyplLnRpbWVzW2ldKTt0LnB1c2gociksbi5wdXNoKGUuZmlsZXBvc2l0aW9uc1tpXSl9cmV0dXJue3RpbWVzOnQsZmlsZXBvc2l0aW9uczpufX19LHtrZXk6Il9wYXJzZUF1ZGlvRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSl7aWYobjw9MSliLmRlZmF1bHQudyh0aGlzLlRBRywiRmx2OiBJbnZhbGlkIGF1ZGlvIHBhY2tldCwgbWlzc2luZyBTb3VuZERhdGEgcGF5bG9hZCEiKTtlbHNlIGlmKCEwIT09dGhpcy5faGFzQXVkaW9GbGFnT3ZlcnJpZGVkfHwhMSE9PXRoaXMuX2hhc0F1ZGlvKXt0aGlzLl9saXR0bGVFbmRpYW47dmFyIHI9bmV3IERhdGFWaWV3KGUsdCxuKS5nZXRVaW50OCgwKSxhPXI+Pj40O2lmKDI9PWF8fDEwPT1hKXt2YXIgcz0wLG89KDEyJnIpPj4+MjtpZigwPD1vJiZvPD00KXt2YXIgcz10aGlzLl9mbHZTb3VuZFJhdGVUYWJsZVtvXSx1PTEmcixkPXRoaXMuX2F1ZGlvTWV0YWRhdGEscj10aGlzLl9hdWRpb1RyYWNrO2lmKGR8fCghMT09PXRoaXMuX2hhc0F1ZGlvJiYhMT09PXRoaXMuX2hhc0F1ZGlvRmxhZ092ZXJyaWRlZCYmKHRoaXMuX2hhc0F1ZGlvPSEwLHRoaXMuX21lZGlhSW5mby5oYXNBdWRpbz0hMCksKGQ9dGhpcy5fYXVkaW9NZXRhZGF0YT17fSkudHlwZT0iYXVkaW8iLGQuaWQ9ci5pZCxkLnRpbWVzY2FsZT10aGlzLl90aW1lc2NhbGUsZC5kdXJhdGlvbj10aGlzLl9kdXJhdGlvbixkLmF1ZGlvU2FtcGxlUmF0ZT1zLGQuY2hhbm5lbENvdW50PTA9PXU/MToyKSwxMD09YSl7dmFyIGwsaD10aGlzLl9wYXJzZUFBQ0F1ZGlvRGF0YShlLHQrMSxuLTEpO251bGwhPWgmJigwPT09aC5wYWNrZXRUeXBlPyhkLmNvbmZpZyYmYi5kZWZhdWx0LncodGhpcy5UQUcsIkZvdW5kIGFub3RoZXIgQXVkaW9TcGVjaWZpY0NvbmZpZyEiKSx1PWguZGF0YSxiLmRlZmF1bHQudih0aGlzLlRBRywib2xkIHtjaGFubmVsOiIrZC5jaGFubmVsQ291bnQrIiwgY29kZWM6IitkLmNvZGVjKyIsIHNhbXBsZSByYXRlOiIrZC5hdWRpb1NhbXBsZVJhdGUrIiwgb3JpZ25hbCBjb2RlYzoiK3Uub3JpZ2luYWxDb2RlYysiLCBjb25maWc6IitkLmNvbmZpZysifSIpLGIuZGVmYXVsdC52KHRoaXMuVEFHLCJuZXcge2NoYW5uZWw6Iit1LmNoYW5uZWxDb3VudCsiLCBjb2RlYzoiK3UuY29kZWMrIiwgc2FtcGxlIHJhdGU6Iit1LnNhbXBsaW5nUmF0ZSsiLCBvcmlnbmFsIGNvZGVjOiIrdS5vcmlnaW5hbENvZGVjKyIsIGNvbmZpZzoiK3UuY29uZmlnKyJ9IiksdGhpcy5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0iQUFDIix0aGlzLl92aWRlb0luZm8uYXVkaW9TYW1wbGVSYXRlPXUuc2FtcGxpbmdSYXRlLHRoaXMuX29uUGFyc2VkRGF0YSh0aGlzLl92aWRlb0luZm8sMyksZC5jaGFubmVsQ291bnQhPT11LmNoYW5uZWxDb3VudHx8ZC5hdWRpb1NhbXBsZVJhdGUhPT11LnNhbXBsaW5nUmF0ZXx8ZC5jb2RlYyE9PXUuY29kZWN8fGQub3JpZ2luYWxDb2RlYyE9PXUub3JpZ2luYWxDb2RlYz8oZC5hdWRpb1NhbXBsZVJhdGU9dS5zYW1wbGluZ1JhdGUsZC5jaGFubmVsQ291bnQ9dS5jaGFubmVsQ291bnQsZC5jb2RlYz11LmNvZGVjLGQub3JpZ2luYWxDb2RlYz11Lm9yaWdpbmFsQ29kZWMsZC5jb25maWc9dS5jb25maWcsZC5yZWZTYW1wbGVEdXJhdGlvbj0xMDI0L2QuYXVkaW9TYW1wbGVSYXRlKmQudGltZXNjYWxlLHRoaXMuX2lzSW5pdGlhbE1ldGFkYXRhRGlzcGF0Y2hlZCgpP3RoaXMuX2Rpc3BhdGNoJiYodGhpcy5fYXVkaW9UcmFjay5sZW5ndGh8fHRoaXMuX3ZpZGVvVHJhY2subGVuZ3RoKSYmdGhpcy5fb25EYXRhQXZhaWxhYmxlKHRoaXMuX2F1ZGlvVHJhY2ssdGhpcy5fdmlkZW9UcmFjayk6dGhpcy5fYXVkaW9Jbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkPSEwLHRoaXMuX2Rpc3BhdGNoPSExLHRoaXMuX29uVHJhY2tNZXRhZGF0YSgiYXVkaW8iLGQpLChsPXRoaXMuX21lZGlhSW5mbykuYXVkaW9Db2RlYz1kLm9yaWdpbmFsQ29kZWMsbC5hdWRpb1NhbXBsZVJhdGU9ZC5hdWRpb1NhbXBsZVJhdGUsbC5hdWRpb0NoYW5uZWxDb3VudD1kLmNoYW5uZWxDb3VudCxsLmhhc1ZpZGVvP251bGwhPWwudmlkZW9Db2RlYyYmKGwubWltZVR5cGU9J3ZpZGVvL3gtZmx2OyBjb2RlY3M9IicrbC52aWRlb0NvZGVjKyIsIitsLmF1ZGlvQ29kZWMrJyInKTpsLm1pbWVUeXBlPSd2aWRlby94LWZsdjsgY29kZWNzPSInK2wuYXVkaW9Db2RlYysnIicsbC5pc0NvbXBsZXRlKCkmJnRoaXMuX29uTWVkaWFJbmZvKGwpKTpiLmRlZmF1bHQudyh0aGlzLlRBRywiYXVkaW8gc3BlY2lmaWMgY29uZmlnIGRvIG5vdCBjaGFuZ2VkLCBkaXNjYXJkIGl0LiIpKToxPT09aC5wYWNrZXRUeXBlPyhsPXRoaXMuX3RpbWVzdGFtcEJhc2UraSxsPXt1bml0OmguZGF0YSxsZW5ndGg6aC5kYXRhLmJ5dGVMZW5ndGgsZHRzOmwscHRzOmx9LHIuc2FtcGxlcy5wdXNoKGwpLHIubGVuZ3RoKz1oLmRhdGEubGVuZ3RoKTpiLmRlZmF1bHQuZSh0aGlzLlRBRywiRmx2OiBVbnN1cHBvcnRlZCBBQUMgZGF0YSB0eXBlICIraC5wYWNrZXRUeXBlKSl9ZWxzZSBpZigyPT1hKXtpZighZC5jb2RlYyl7aD10aGlzLl9wYXJzZU1QM0F1ZGlvRGF0YShlLHQrMSxuLTEsITApO2lmKG51bGw9PWgpcmV0dXJuO2QuYXVkaW9TYW1wbGVSYXRlPWguc2FtcGxpbmdSYXRlLGQuY2hhbm5lbENvdW50PWguY2hhbm5lbENvdW50LGQuY29kZWM9aC5jb2RlYyxkLm9yaWdpbmFsQ29kZWM9aC5vcmlnaW5hbENvZGVjLGQucmVmU2FtcGxlRHVyYXRpb249MTE1Mi9kLmF1ZGlvU2FtcGxlUmF0ZSpkLnRpbWVzY2FsZSxiLmRlZmF1bHQudih0aGlzLlRBRywiUGFyc2VkIE1QRUcgQXVkaW8gRnJhbWUgSGVhZGVyIiksdGhpcy5fYXVkaW9Jbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkPSEwLHRoaXMuX29uVHJhY2tNZXRhZGF0YSgiYXVkaW8iLGQpO3ZhciBjPXRoaXMuX21lZGlhSW5mbztjLmF1ZGlvQ29kZWM9ZC5jb2RlYyxjLmF1ZGlvU2FtcGxlUmF0ZT1kLmF1ZGlvU2FtcGxlUmF0ZSxjLmF1ZGlvQ2hhbm5lbENvdW50PWQuY2hhbm5lbENvdW50LGMuYXVkaW9EYXRhUmF0ZT1oLmJpdFJhdGUsYy5oYXNWaWRlbz9udWxsIT1jLnZpZGVvQ29kZWMmJihjLm1pbWVUeXBlPSd2aWRlby94LWZsdjsgY29kZWNzPSInK2MudmlkZW9Db2RlYysiLCIrYy5hdWRpb0NvZGVjKyciJyk6Yy5taW1lVHlwZT0ndmlkZW8veC1mbHY7IGNvZGVjcz0iJytjLmF1ZGlvQ29kZWMrJyInLGMuaXNDb21wbGV0ZSgpJiZ0aGlzLl9vbk1lZGlhSW5mbyhjKSx0aGlzLl92aWRlb0luZm8uYXVkaW9UeXBlPSJNUDMifWM9dGhpcy5fcGFyc2VNUDNBdWRpb0RhdGEoZSx0KzEsbi0xLCExKTtudWxsIT1jJiYoaT10aGlzLl90aW1lc3RhbXBCYXNlK2ksaT17dW5pdDpjLGxlbmd0aDpjLmJ5dGVMZW5ndGgsZHRzOmkscHRzOml9LHIuc2FtcGxlcy5wdXNoKGkpLHIubGVuZ3RoKz1jLmxlbmd0aCl9fWVsc2UgdGhpcy5fb25FcnJvcihELmRlZmF1bHQuRk9STUFUX0VSUk9SLCJGbHY6IEludmFsaWQgYXVkaW8gc2FtcGxlIHJhdGUgaWR4OiAiK28pfWVsc2UgdGhpcy5fb25FcnJvcihELmRlZmF1bHQuQ09ERUNfVU5TVVBQT1JURUQsIkZsdjogVW5zdXBwb3J0ZWQgYXVkaW8gY29kZWMgaWR4OiAiK2EpfWVsc2UgaWYodGhpcy5fdmlkZW9JbmZvLmF1ZGlvVHlwZT0iQUFDIix0aGlzLl9maXJzdFBhcnNlQXVkaW8pe3RoaXMuX2ZpcnN0UGFyc2VBdWRpbz0hMTtuPXRoaXMuX3BhcnNlQUFDQXVkaW9EYXRhKGUsdCsxLG4tMSk7aWYobnVsbD09bilyZXR1cm47dGhpcy5fdmlkZW9JbmZvLmF1ZGlvU2FtcGxlUmF0ZT1uLmRhdGEuc2FtcGxpbmdSYXRlfX19LHtrZXk6Il9wYXJzZUFBQ0F1ZGlvRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe2lmKCEobjw9MSkpe3ZhciBpPXt9LHI9bmV3IFVpbnQ4QXJyYXkoZSx0LG4pO3JldHVybiBpLnBhY2tldFR5cGU9clswXSwwPT09clswXT9pLmRhdGE9dGhpcy5fcGFyc2VBQUNBdWRpb1NwZWNpZmljQ29uZmlnKGUsdCsxLG4tMSk6aS5kYXRhPXIuc3ViYXJyYXkoMSksaX1iLmRlZmF1bHQudyh0aGlzLlRBRywiRmx2OiBJbnZhbGlkIEFBQyBwYWNrZXQsIG1pc3NpbmcgQUFDUGFja2V0VHlwZSBvci9hbmQgRGF0YSEiKX19LHtrZXk6Il9wYXJzZUFBQ0F1ZGlvU3BlY2lmaWNDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxyPW5ldyBVaW50OEFycmF5KGUsdCxuKSxhPW51bGwscz0wLG89MCxlPW51bGwscz1pPXJbMF0+Pj4zO2lmKChvPSg3JnJbMF0pPDwxfHJbMV0+Pj43KTwwfHxvPj10aGlzLl9tcGVnU2FtcGxpbmdSYXRlcy5sZW5ndGgpdGhpcy5fb25FcnJvcihELmRlZmF1bHQuRk9STUFUX0VSUk9SLCJGbHY6IEFBQyBpbnZhbGlkIHNhbXBsaW5nIGZyZXF1ZW5jeSBpbmRleCEiKTtlbHNle3Q9dGhpcy5fbXBlZ1NhbXBsaW5nUmF0ZXNbb10sbj0oMTIwJnJbMV0pPj4+MztpZighKG48MHx8ODw9bikpezU9PT1zJiYoZT0oNyZyWzFdKTw8MXxyWzJdPj4+NyxyWzJdKTtyPXNlbGYubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpO3JldHVybi0xIT09ci5pbmRleE9mKCJmaXJlZm94Iik/ZT02PD1vPyhzPTUsYT1uZXcgQXJyYXkoNCksby0zKToocz0yLGE9bmV3IEFycmF5KDIpLG8pOi0xIT09ci5pbmRleE9mKCJhbmRyb2lkIik/KHM9MixhPW5ldyBBcnJheSgyKSxlPW8pOihzPTUsZT1vLGE9bmV3IEFycmF5KDQpLDY8PW8/ZT1vLTM6MT09biYmKHM9MixhPW5ldyBBcnJheSgyKSxlPW8pKSxhWzBdPXM8PDMsYVswXXw9KDE1Jm8pPj4+MSxhWzFdPSgxNSZvKTw8NyxhWzFdfD0oMTUmbik8PDMsNT09PXMmJihhWzFdfD0oMTUmZSk+Pj4xLGFbMl09KDEmZSk8PDcsYVsyXXw9OCxhWzNdPTApLHtjb25maWc6YSxzYW1wbGluZ1JhdGU6dCxjaGFubmVsQ291bnQ6bixjb2RlYzoibXA0YS40MC4iK3Msb3JpZ2luYWxDb2RlYzoibXA0YS40MC4iK2l9fXRoaXMuX29uRXJyb3IoRC5kZWZhdWx0LkZPUk1BVF9FUlJPUiwiRmx2OiBBQUMgaW52YWxpZCBjaGFubmVsIGNvbmZpZ3VyYXRpb24iKX19fSx7a2V5OiJfcGFyc2VNUDNBdWRpb0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkpe2lmKCEobjw0KSl7dGhpcy5fbGl0dGxlRW5kaWFuO3ZhciByPW5ldyBVaW50OEFycmF5KGUsdCxuKSxlPW51bGw7aWYoaSl7aWYoMjU1IT09clswXSlyZXR1cm47dmFyIHQ9clsxXT4+PjMmMyxuPSg2JnJbMV0pPj4xLGE9KDI0MCZyWzJdKT4+PjQscz0oMTImclsyXSk+Pj4yLGk9MyE9KHJbM10+Pj42JjMpPzI6MSxvPTAsdT0wO3N3aXRjaCh0KXtjYXNlIDA6bz10aGlzLl9tcGVnQXVkaW9WMjVTYW1wbGVSYXRlVGFibGVbc107YnJlYWs7Y2FzZSAyOm89dGhpcy5fbXBlZ0F1ZGlvVjIwU2FtcGxlUmF0ZVRhYmxlW3NdO2JyZWFrO2Nhc2UgMzpvPXRoaXMuX21wZWdBdWRpb1YxMFNhbXBsZVJhdGVUYWJsZVtzXX1zd2l0Y2gobil7Y2FzZSAxOmE8dGhpcy5fbXBlZ0F1ZGlvTDNCaXRSYXRlVGFibGUubGVuZ3RoJiYodT10aGlzLl9tcGVnQXVkaW9MM0JpdFJhdGVUYWJsZVthXSk7YnJlYWs7Y2FzZSAyOmE8dGhpcy5fbXBlZ0F1ZGlvTDJCaXRSYXRlVGFibGUubGVuZ3RoJiYodT10aGlzLl9tcGVnQXVkaW9MMkJpdFJhdGVUYWJsZVthXSk7YnJlYWs7Y2FzZSAzOmE8dGhpcy5fbXBlZ0F1ZGlvTDFCaXRSYXRlVGFibGUubGVuZ3RoJiYodT10aGlzLl9tcGVnQXVkaW9MMUJpdFJhdGVUYWJsZVthXSl9ZT17Yml0UmF0ZTp1LHNhbXBsaW5nUmF0ZTpvLGNoYW5uZWxDb3VudDppLGNvZGVjOiJtcDMiLG9yaWdpbmFsQ29kZWM6Im1wMyJ9fWVsc2UgZT1yO3JldHVybiBlfWIuZGVmYXVsdC53KHRoaXMuVEFHLCJGbHY6IEludmFsaWQgTVAzIHBhY2tldCwgaGVhZGVyIG1pc3NpbmchIil9fSx7a2V5OiJfcGFyc2VWaWRlb0RhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLGkscil7dmFyIGEscztuPD0xP2IuZGVmYXVsdC53KHRoaXMuVEFHLCJGbHY6IEludmFsaWQgdmlkZW8gcGFja2V0LCBtaXNzaW5nIFZpZGVvRGF0YSBwYXlsb2FkISIpOiEwPT09dGhpcy5faGFzVmlkZW9GbGFnT3ZlcnJpZGVkJiYhMT09PXRoaXMuX2hhc1ZpZGVvfHwoNz09KHM9MTUmKGE9bmV3IFVpbnQ4QXJyYXkoZSx0LG4pWzBdKSk/dGhpcy5fcGFyc2VBVkNWaWRlb1BhY2tldChlLHQrMSxuLTEsaSxyLCgyNDAmYSk+Pj40KTp0aGlzLl9vbkVycm9yKEQuZGVmYXVsdC5DT0RFQ19VTlNVUFBPUlRFRCwiRmx2OiBVbnN1cHBvcnRlZCBjb2RlYyBpbiB2aWRlbyBmcmFtZTogIitzKSl9fSx7a2V5OiJfcGFyc2VBVkNWaWRlb1BhY2tldCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSxyLGEpe3ZhciBzLG8sdTtuPDQ/Yi5kZWZhdWx0LncodGhpcy5UQUcsIkZsdjogSW52YWxpZCBBVkMgcGFja2V0LCBtaXNzaW5nIEFWQ1BhY2tldFR5cGUgb3IvYW5kIENvbXBvc2l0aW9uVGltZSIpOih1PXRoaXMuX2xpdHRsZUVuZGlhbixvPShzPW5ldyBEYXRhVmlldyhlLHQsbikpLmdldFVpbnQ4KDApLHU9KDE2Nzc3MjE1JnMuZ2V0VWludDMyKDAsIXUpKTw8OD4+OCwwPT09bz90aGlzLl9wYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkKGUsdCs0LG4tNCk6MT09PW8/dGhpcy5fcGFyc2VBVkNWaWRlb0RhdGEoZSx0KzQsbi00LGkscixhLHUpOjI9PT1vfHx0aGlzLl9vbkVycm9yKEQuZGVmYXVsdC5GT1JNQVRfRVJST1IsIkZsdjogSW52YWxpZCB2aWRlbyBwYWNrZXQgdHlwZSAiK28pKX19LHtrZXk6Il9wYXJzZUFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYobjw3KWIuZGVmYXVsdC53KHRoaXMuVEFHLCJGbHY6IEludmFsaWQgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQsIGxhY2sgb2YgZGF0YSEiKTtlbHNle3ZhciBpPXRoaXMuX3ZpZGVvTWV0YWRhdGEscj10aGlzLl92aWRlb1RyYWNrLGE9dGhpcy5fbGl0dGxlRW5kaWFuLHM9bmV3IERhdGFWaWV3KGUsdCxuKSxvPSExO2k/dm9pZCAwIT09aS5hdmNjJiYobz0hMCk6KCExPT09dGhpcy5faGFzVmlkZW8mJiExPT09dGhpcy5faGFzVmlkZW9GbGFnT3ZlcnJpZGVkJiYodGhpcy5faGFzVmlkZW89ITAsdGhpcy5fbWVkaWFJbmZvLmhhc1ZpZGVvPSEwKSwoaT10aGlzLl92aWRlb01ldGFkYXRhPXt9KS50eXBlPSJ2aWRlbyIsaS5pZD1yLmlkLGkudGltZXNjYWxlPXRoaXMuX3RpbWVzY2FsZSxpLmR1cmF0aW9uPXRoaXMuX2R1cmF0aW9uKTt2YXIgdT1zLmdldFVpbnQ4KDApLHI9cy5nZXRVaW50OCgxKTtzLmdldFVpbnQ4KDIpLHMuZ2V0VWludDgoMyk7aWYoMT09PXUmJjAhPT1yKWlmKHRoaXMuX25hbHVMZW5ndGhTaXplPTErKDMmcy5nZXRVaW50OCg0KSksMz09PXRoaXMuX25hbHVMZW5ndGhTaXplfHw0PT09dGhpcy5fbmFsdUxlbmd0aFNpemUpe3ZhciBkPTMxJnMuZ2V0VWludDgoNSk7aWYoMCE9ZCl7MTxkJiZiLmRlZmF1bHQudyh0aGlzLlRBRywiRmx2OiBTdHJhbmdlIEFWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOiBTUFMgQ291bnQgPSAiK2QpO2Zvcih2YXIgbD0hMCxoPTYsYz0wO2M8ZDtjKyspe3ZhciBfPXMuZ2V0VWludDE2KGgsIWEpO2lmKGgrPTIsMCE9PV8pe3ZhciBmPW5ldyBVaW50OEFycmF5KGUsdCtoLF8pO2grPV87dmFyIG09dy5kZWZhdWx0LnBhcnNlU1BTKGYpO2lmKDA9PT1jKXtsPW0uY29kZWNfc2l6ZS53aWR0aD49bS5jb2RlY19zaXplLmhlaWdodDtpZihvJiZ0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb24pe2lmKHRoaXMuX2xhc3RWaWRlb0RpbWVuc2lvbi53aWR0aCE9bS5jb2RlY19zaXplLndpZHRofHx0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb24uaGVpZ2h0IT1tLmNvZGVjX3NpemUuaGVpZ2h0KXt0aGlzLl9yZXNvbHV0aW9uQ2hhbmdlZD0hMCxiLmRlZmF1bHQuZCh0aGlzLlRBRywidmlkZW8gcmVzb2x1dGlvbiBjaGFuZ2VkIGZyb20gWyIrdGhpcy5fbGFzdFZpZGVvRGltZW5zaW9uLndpZHRoKyJ4Iit0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb24uaGVpZ2h0KyJdIHRvIFsiK20uY29kZWNfc2l6ZS53aWR0aCsieCIrbS5jb2RlY19zaXplLmhlaWdodCsiXSIpLHRoaXMuX2xhc3RWaWRlb0RpbWVuc2lvbi53aWR0aD1tLmNvZGVjX3NpemUud2lkdGgsdGhpcy5fbGFzdFZpZGVvRGltZW5zaW9uLmhlaWdodD1tLmNvZGVjX3NpemUuaGVpZ2h0LHRoaXMuX2xhc3RWaWRlb0RpbWVuc2lvbi5wcm9maWxlPW0ucHJvZmlsZV9zdHJpbmcsdGhpcy5fbGFzdFZpZGVvRGltZW5zaW9uLmxldmVsPW0ubGV2ZWxfc3RyaW5nO3ZhciBwPXt9O3Aud2lkdGg9bS5jb2RlY19zaXplLndpZHRoLHAuaGVpZ2h0PW0uY29kZWNfc2l6ZS5oZWlnaHQsdGhpcy5fb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VkKHApfWVsc2UgaWYodGhpcy5fbGFzdFZpZGVvRGltZW5zaW9uLnByb2ZpbGU9PW0ucHJvZmlsZV9zdHJpbmcmJnRoaXMuX2xhc3RWaWRlb0RpbWVuc2lvbi5sZXZlbD09bS5sZXZlbF9zdHJpbmcpcmV0dXJufWVsc2UgdGhpcy5fbGFzdFZpZGVvRGltZW5zaW9uLndpZHRoPW0uY29kZWNfc2l6ZS53aWR0aCx0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb24uaGVpZ2h0PW0uY29kZWNfc2l6ZS5oZWlnaHQsdGhpcy5fbGFzdFZpZGVvRGltZW5zaW9uLnByb2ZpbGU9bS5wcm9maWxlX3N0cmluZyx0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb24ubGV2ZWw9bS5sZXZlbF9zdHJpbmcsYi5kZWZhdWx0LmQodGhpcy5UQUcsImdvdCBuZXcgdmlkZW8gZGltZW5zaW9uOiBbIit0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb24ud2lkdGgrIngiK3RoaXMuX2xhc3RWaWRlb0RpbWVuc2lvbi5oZWlnaHQrIl0iKTtpLmNvZGVjV2lkdGg9bS5jb2RlY19zaXplLndpZHRoLGkuY29kZWNIZWlnaHQ9bS5jb2RlY19zaXplLmhlaWdodCxpLnByZXNlbnRXaWR0aD1tLnByZXNlbnRfc2l6ZS53aWR0aCxpLnByZXNlbnRIZWlnaHQ9bS5wcmVzZW50X3NpemUuaGVpZ2h0LGkucHJvZmlsZT1tLnByb2ZpbGVfc3RyaW5nLGkubGV2ZWw9bS5sZXZlbF9zdHJpbmcsaS5iaXREZXB0aD1tLmJpdF9kZXB0aCxpLmNocm9tYUZvcm1hdD1tLmNocm9tYV9mb3JtYXQsaS5zYXJSYXRpbz1tLnNhcl9yYXRpbyxpLmZyYW1lUmF0ZT1tLmZyYW1lX3JhdGUsITEhPT1tLmZyYW1lX3JhdGUuZml4ZWQmJjAhPT1tLmZyYW1lX3JhdGUuZnBzX251bSYmMCE9PW0uZnJhbWVfcmF0ZS5mcHNfZGVufHwoaS5mcmFtZVJhdGU9dGhpcy5fcmVmZXJlbmNlRnJhbWVSYXRlKTtfPWkuZnJhbWVSYXRlLmZwc19kZW4scD1pLmZyYW1lUmF0ZS5mcHNfbnVtO2kucmVmU2FtcGxlRHVyYXRpb249aS50aW1lc2NhbGUqKF8vcCk7Zm9yKHZhciB5PWYuc3ViYXJyYXkoMSw0KSx2PSJhdmMxLiIsZz0wO2c8MztnKyspe3ZhciBNPXlbZ10udG9TdHJpbmcoMTYpO3YrPU09TS5sZW5ndGg8Mj8iMCIrTTpNfWkuY29kZWM9djtmPXRoaXMuX21lZGlhSW5mbztmLndpZHRoPWkuY29kZWNXaWR0aCxmLmhlaWdodD1pLmNvZGVjSGVpZ2h0LGYuZnBzPWkuZnJhbWVSYXRlLmZwcyxmLnByb2ZpbGU9aS5wcm9maWxlLGYubGV2ZWw9aS5sZXZlbCxmLnJlZkZyYW1lcz1tLnJlZl9mcmFtZXMsZi5jaHJvbWFGb3JtYXQ9bS5jaHJvbWFfZm9ybWF0X3N0cmluZyxmLnNhck51bT1pLnNhclJhdGlvLndpZHRoLGYuc2FyRGVuPWkuc2FyUmF0aW8uaGVpZ2h0LGYudmlkZW9Db2RlYz12LGYuaGFzQXVkaW8/bnVsbCE9Zi5hdWRpb0NvZGVjJiYoZi5taW1lVHlwZT0ndmlkZW8veC1mbHY7IGNvZGVjcz0iJytmLnZpZGVvQ29kZWMrIiwiK2YuYXVkaW9Db2RlYysnIicpOmYubWltZVR5cGU9J3ZpZGVvL3gtZmx2OyBjb2RlY3M9IicrZi52aWRlb0NvZGVjKyciJyxmLmlzQ29tcGxldGUoKSYmdGhpcy5fb25NZWRpYUluZm8oZil9fX12YXIgTD1zLmdldFVpbnQ4KGgpO2lmKDAhPT1MKXsxPEwmJmIuZGVmYXVsdC53KHRoaXMuVEFHLCJGbHY6IFN0cmFuZ2UgQVZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQ6IFBQUyBDb3VudCA9ICIrTCksaCsrO2Zvcih2YXIgUz0wO1M8TDtTKyspe3ZhciBrPXMuZ2V0VWludDE2KGgsIWEpO2grPTIsMCE9PWsmJihoKz1rKX1pLmF2Y2M9bmV3IFVpbnQ4QXJyYXkobiksaS5hdmNjLnNldChuZXcgVWludDhBcnJheShlLHQsbiksMCksYi5kZWZhdWx0LnYodGhpcy5UQUcsIlBhcnNlZCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCBkb25lLCAiK2kuY29kZWNXaWR0aCsieCIraS5jb2RlY0hlaWdodCsiQCIraS5mcmFtZVJhdGUuZnBzKyIgZnBzLCBwcm9maWxlPSIraS5wcm9maWxlKyIsIGxldmVsPSIraS5sZXZlbCksdGhpcy5faXNJbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkKCk/dGhpcy5fZGlzcGF0Y2gmJih0aGlzLl9hdWRpb1RyYWNrLmxlbmd0aHx8dGhpcy5fdmlkZW9UcmFjay5sZW5ndGgpJiZ0aGlzLl9vbkRhdGFBdmFpbGFibGUodGhpcy5fYXVkaW9UcmFjayx0aGlzLl92aWRlb1RyYWNrKTp0aGlzLl92aWRlb0luaXRpYWxNZXRhZGF0YURpc3BhdGNoZWQ9ITAsdGhpcy5fZGlzcGF0Y2g9ITEsdGhpcy5fY29uZmlnLmVuYWJsZUNvbnN0VmlkZW9WaWV3U2l6ZSYmKGIuZGVmYXVsdC53KHRoaXMuVEFHLCItLT09IGNvbnN0IHZpZGVvIHZpZXcgc2l6ZSBlbmFibGVkLCB1c2UgeyIrdGhpcy5fY29uZmlnLmNvbnN0VmlkZW9WaWV3V2lkdGgrIngiK3RoaXMuX2NvbmZpZy5jb25zdFZpZGVvVmlld0hlaWdodCsifSA9PS0tIiksaS5jb2RlY1dpZHRoPWw/dGhpcy5fY29uZmlnLmNvbnN0VmlkZW9WaWV3V2lkdGg6dGhpcy5fY29uZmlnLmNvbnN0VmlkZW9WaWV3SGVpZ2h0LGkuY29kZWNIZWlnaHQ9bD90aGlzLl9jb25maWcuY29uc3RWaWRlb1ZpZXdIZWlnaHQ6dGhpcy5fY29uZmlnLmNvbnN0VmlkZW9WaWV3V2lkdGgpLHRoaXMuX29uVHJhY2tNZXRhZGF0YSgidmlkZW8iLGkpLHRoaXMuX3ZpZGVvSW5mby5iaXRSYXRlPXRoaXMuX21lZGlhSW5mby52aWRlb0RhdGFSYXRlLHRoaXMuX3ZpZGVvSW5mby5mcmFtZVJhdGU9aS5mcmFtZVJhdGUuZnBzLHRoaXMuX3ZpZGVvSW5mby53aWR0aD1pLmNvZGVjV2lkdGgsdGhpcy5fdmlkZW9JbmZvLmhlaWdodD1pLmNvZGVjSGVpZ2h0LHRoaXMuX29uUGFyc2VkRGF0YSh0aGlzLl92aWRlb0luZm8sMyl9ZWxzZSB0aGlzLl9vbkVycm9yKEQuZGVmYXVsdC5GT1JNQVRfRVJST1IsIkZsdjogSW52YWxpZCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDogTm8gUFBTIil9ZWxzZSB0aGlzLl9vbkVycm9yKEQuZGVmYXVsdC5GT1JNQVRfRVJST1IsIkZsdjogSW52YWxpZCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZDogTm8gU1BTIil9ZWxzZSB0aGlzLl9vbkVycm9yKEQuZGVmYXVsdC5GT1JNQVRfRVJST1IsIkZsdjogU3RyYW5nZSBOYWx1TGVuZ3RoU2l6ZU1pbnVzT25lOiAiKyh0aGlzLl9uYWx1TGVuZ3RoU2l6ZS0xKSk7ZWxzZSB0aGlzLl9vbkVycm9yKEQuZGVmYXVsdC5GT1JNQVRfRVJST1IsIkZsdjogSW52YWxpZCBBVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCIpfX19LHtrZXk6Il9wYXJzZUFWQ1ZpZGVvRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4saSxyLGEscyl7Zm9yKHZhciBvPXRoaXMuX2xpdHRsZUVuZGlhbix1PW5ldyBEYXRhVmlldyhlLHQsbiksZD1bXSxsPTAsaD0wLGM9dGhpcy5fbmFsdUxlbmd0aFNpemUsXz10aGlzLl90aW1lc3RhbXBCYXNlK2ksZj0xPT09YTtoPG47KXtpZihuPD1oKzQpe2IuZGVmYXVsdC53KHRoaXMuVEFHLCJNYWxmb3JtZWQgTmFsdSBuZWFyIHRpbWVzdGFtcCAiK18rIiwgb2Zmc2V0ID0gIitoKyIsIGRhdGFTaXplID0gIituKTticmVha312YXIgbT11LmdldFVpbnQzMihoLCFvKTtpZigzPT09YyYmKG0+Pj49OCksbi1jPG0pcmV0dXJuIHZvaWQgYi5kZWZhdWx0LncodGhpcy5UQUcsIk1hbGZvcm1lZCBOYWx1cyBuZWFyIHRpbWVzdGFtcCAiK18rIiwgTmFsdVNpemUgPiBEYXRhU2l6ZSEiKTt2YXIgcD0zMSZ1LmdldFVpbnQ4KGgrYyk7NT09cCYmKGY9ITApO3ZhciB5PW5ldyBVaW50OEFycmF5KGUsdCtoLGMrbSk7ZC5wdXNoKHt0eXBlOnAsZGF0YTp5fSksbCs9eS5ieXRlTGVuZ3RoLGgrPWMrbX1mJiZ0aGlzLl9vblBhcnNlZERhdGEodGhpcy5fb3NkdGltZUluZm8sMiksZC5sZW5ndGgmJihhPXRoaXMuX3ZpZGVvVHJhY2sscz17dW5pdHM6ZCxsZW5ndGg6bCxpc0tleWZyYW1lOmYsZHRzOl8sY3RzOnMscHRzOl8rc30sZiYmKHMuZmlsZXBvc2l0aW9uPXIpLGEuc2FtcGxlcy5wdXNoKHMpLGEubGVuZ3RoKz1sKX19LHtrZXk6Il9wYXJzZVByaXZhdGVEYXRhIix2YWx1ZTpmdW5jdGlvbihlLHQsbixpKXt2YXIgcixhLHM9bmV3IFVpbnQ4QXJyYXkoZSx0LG4pOzY0PT09c1swXSYmMTQ9PT1zWzFdJiYodGhpcy5fZmlyc3RUaW1lU3RhbXA9ITEscj1zWzZdKzJlMyxhPXNbN10+PjQsZT0oMTUmc1s3XSk8PDF8c1s4XT4+Nyx0PXNbOF0+PjImMzEsbj0oMyZzWzhdKTw8NHxzWzldPj40LHM9KDE1JnNbOV0pPDwyfHNbMTBdPj42LHRoaXMuX29zZHRpbWVJbmZvLmdsb2JhbFRpbWU9bmV3IERhdGUocisiLSIrYSsiLSIrZSsiICIrdCsiOiIrbisiOiIrcykuZ2V0VGltZSgpLHRoaXMuX3JlY3ZHbG9iZVRpbWVGbGFnPSEwLHRoaXMuX3JlY3ZQcmVUaW1lPWkpfX0se2tleToicmVjb3JkRmxhZyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlY29yZEZsYWd9LHNldDpmdW5jdGlvbihlKXtlJiZ0aGlzLl9vblBhcnNlZERhdGEodGhpcy5fZmx2SGVhZCwxKSx0aGlzLl9yZWNvcmRGbGFnPWV9fSx7a2V5OiJvblRyYWNrTWV0YWRhdGEiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblRyYWNrTWV0YWRhdGF9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vblRyYWNrTWV0YWRhdGE9ZX19LHtrZXk6Im9uTWVkaWFJbmZvIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25NZWRpYUluZm99LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vbk1lZGlhSW5mbz1lfX0se2tleToib25NZXRhRGF0YUFycml2ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbk1ldGFEYXRhQXJyaXZlZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uTWV0YURhdGFBcnJpdmVkPWV9fSx7a2V5OiJvblNjcmlwdERhdGFBcnJpdmVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25TY3JpcHREYXRhQXJyaXZlZH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uU2NyaXB0RGF0YUFycml2ZWQ9ZX19LHtrZXk6Im9uRXJyb3IiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkVycm9yfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25FcnJvcj1lfX0se2tleToib25EYXRhQXZhaWxhYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25EYXRhQXZhaWxhYmxlfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25EYXRhQXZhaWxhYmxlPWV9fSx7a2V5OiJ0aW1lc3RhbXBCYXNlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGltZXN0YW1wQmFzZX0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX3RpbWVzdGFtcEJhc2U9ZX19LHtrZXk6Im92ZXJyaWRlZER1cmF0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZHVyYXRpb259LHNldDpmdW5jdGlvbihlKXt0aGlzLl9kdXJhdGlvbk92ZXJyaWRlZD0hMCx0aGlzLl9kdXJhdGlvbj1lLHRoaXMuX21lZGlhSW5mby5kdXJhdGlvbj1lfX0se2tleToib3ZlcnJpZGVkSGFzQXVkaW8iLHNldDpmdW5jdGlvbihlKXt0aGlzLl9oYXNBdWRpb0ZsYWdPdmVycmlkZWQ9ITAsdGhpcy5faGFzQXVkaW89ZSx0aGlzLl9tZWRpYUluZm8uaGFzQXVkaW89ZX19LHtrZXk6Im92ZXJyaWRlZEhhc1ZpZGVvIixzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5faGFzVmlkZW9GbGFnT3ZlcnJpZGVkPSEwLHRoaXMuX2hhc1ZpZGVvPWUsdGhpcy5fbWVkaWFJbmZvLmhhc1ZpZGVvPWV9fSx7a2V5OiJvblZpZGVvUmVzb2x1dGlvbkNoYW5nZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vblZpZGVvUmVzb2x1dGlvbkNoYW5nZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9vblZpZGVvUmVzb2x1dGlvbkNoYW5nZWQ9ZX19LHtrZXk6Im9uUGFyc2VkRGF0YSIsc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uUGFyc2VkRGF0YT1lfX1dLFt7a2V5OiJwcm9iZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZSksbj17bWF0Y2g6ITF9O2lmKDcwIT09dFswXXx8NzYhPT10WzFdfHw4NiE9PXRbMl18fDEhPT10WzNdKXJldHVybiBuO3ZhciBpPSg0JnRbNF0pPj4+MiE9MCxyPTAhPSgxJnRbNF0pLGU9dFtlPTVdPDwyNHx0W2UrMV08PDE2fHRbZSsyXTw8OHx0W2UrM107cmV0dXJuIGU8OT9uOnttYXRjaDohMCxjb25zdW1lZDplLGRhdGFPZmZzZXQ6ZSxoYXNBdWRpb1RyYWNrOmksaGFzVmlkZW9UcmFjazpyfX19XSkscj12O2Z1bmN0aW9uIHYoZSx0KXsoMCxpLmRlZmF1bHQpKHRoaXMsdiksdGhpcy5UQUc9IkZMVkRlbXV4ZXIiLHRoaXMuX2NvbmZpZz10LHRoaXMuX29uRXJyb3I9bnVsbCx0aGlzLl9vbk1lZGlhSW5mbz1udWxsLHRoaXMuX29uTWV0YURhdGFBcnJpdmVkPW51bGwsdGhpcy5fb25TY3JpcHREYXRhQXJyaXZlZD1udWxsLHRoaXMuX29uVHJhY2tNZXRhZGF0YT1udWxsLHRoaXMuX29uRGF0YUF2YWlsYWJsZT1udWxsLHRoaXMuX29uVmlkZW9SZXNvbHV0aW9uQ2hhbmdlZD1udWxsLHRoaXMuX29uUGFyc2VkRGF0YT1udWxsLHRoaXMuX2RhdGFPZmZzZXQ9ZS5kYXRhT2Zmc2V0LHRoaXMuX2ZpcnN0UGFyc2U9ITAsdGhpcy5fZGlzcGF0Y2g9ITEsdGhpcy5faGFzQXVkaW89ITEsdGhpcy5faGFzVmlkZW89ZS5oYXNWaWRlb1RyYWNrLHRoaXMuX2hhc0F1ZGlvRmxhZ092ZXJyaWRlZD0hMSx0aGlzLl9oYXNWaWRlb0ZsYWdPdmVycmlkZWQ9ITEsdGhpcy5fYXVkaW9Jbml0aWFsTWV0YWRhdGFEaXNwYXRjaGVkPSExLHRoaXMuX3ZpZGVvSW5pdGlhbE1ldGFkYXRhRGlzcGF0Y2hlZD0hMSx0aGlzLl9tZWRpYUluZm89bmV3IGQuZGVmYXVsdCx0aGlzLl9tZWRpYUluZm8uaGFzQXVkaW89dGhpcy5faGFzQXVkaW8sdGhpcy5fbWVkaWFJbmZvLmhhc1ZpZGVvPXRoaXMuX2hhc1ZpZGVvLHRoaXMuX21ldGFkYXRhPW51bGwsdGhpcy5fYXVkaW9NZXRhZGF0YT1udWxsLHRoaXMuX3ZpZGVvTWV0YWRhdGE9bnVsbCx0aGlzLl9uYWx1TGVuZ3RoU2l6ZT00LHRoaXMuX3RpbWVzdGFtcEJhc2U9MCx0aGlzLl90aW1lc2NhbGU9MWUzLHRoaXMuX2R1cmF0aW9uPTAsdGhpcy5fZHVyYXRpb25PdmVycmlkZWQ9ITEsdGhpcy5fcmVmZXJlbmNlRnJhbWVSYXRlPXtmaXhlZDohMCxmcHM6MjMuOTc2LGZwc19udW06MjM5NzYsZnBzX2RlbjoxZTN9LHRoaXMuX2ZsdlNvdW5kUmF0ZVRhYmxlPVs1NTAwLDExMDI1LDIyMDUwLDQ0MTAwLDQ4ZTNdLHRoaXMuX21wZWdTYW1wbGluZ1JhdGVzPVs5NmUzLDg4MjAwLDY0ZTMsNDhlMyw0NDEwMCwzMmUzLDI0ZTMsMjIwNTAsMTZlMywxMmUzLDExMDI1LDhlMyw3MzUwXSx0aGlzLl9sYXN0VmlkZW9EaW1lbnNpb249e3dpZHRoOi0xLGhlaWdodDotMSxwcm9maWxlOiIiLGxldmVsOiIifSx0aGlzLl9icHNDYWxjdWxhdG9yPW51bGwsdGhpcy5fYnBzSW5mbz17bGFzdFZpZGVvQnl0ZXM6MCxsYXN0QXVkaW9CeXRlczowLGJwc192aWRlbzowLGJwc19hdWRpbzowLGRhdGFfdXBkYXRlZF90aW1lOjAsdGltZV9nYXBfZmFjdG9yOjF9LHRoaXMuX3Jlc29sdXRpb25DaGFuZ2VkPSExLHNlbGYucGVyZm9ybWFuY2UmJnNlbGYucGVyZm9ybWFuY2Uubm93P3RoaXMuX25vdz1zZWxmLnBlcmZvcm1hbmNlLm5vdy5iaW5kKHNlbGYucGVyZm9ybWFuY2UpOnRoaXMuX25vdz1EYXRlLm5vdyx0aGlzLl9tcGVnQXVkaW9WMTBTYW1wbGVSYXRlVGFibGU9WzQ0MTAwLDQ4ZTMsMzJlMywwXSx0aGlzLl9tcGVnQXVkaW9WMjBTYW1wbGVSYXRlVGFibGU9WzIyMDUwLDI0ZTMsMTZlMywwXSx0aGlzLl9tcGVnQXVkaW9WMjVTYW1wbGVSYXRlVGFibGU9WzExMDI1LDEyZTMsOGUzLDBdLHRoaXMuX21wZWdBdWRpb0wxQml0UmF0ZVRhYmxlPVswLDMyLDY0LDk2LDEyOCwxNjAsMTkyLDIyNCwyNTYsMjg4LDMyMCwzNTIsMzg0LDQxNiw0NDgsLTFdLHRoaXMuX21wZWdBdWRpb0wyQml0UmF0ZVRhYmxlPVswLDMyLDQ4LDU2LDY0LDgwLDk2LDExMiwxMjgsMTYwLDE5MiwyMjQsMjU2LDMyMCwzODQsLTFdLHRoaXMuX21wZWdBdWRpb0wzQml0UmF0ZVRhYmxlPVswLDMyLDQwLDQ4LDU2LDY0LDgwLDk2LDExMiwxMjgsMTYwLDE5MiwyMjQsMjU2LDMyMCwtMV0sdGhpcy5fdmlkZW9UcmFjaz17dHlwZToidmlkZW8iLGlkOjEsc2VxdWVuY2VOdW1iZXI6MCxzYW1wbGVzOltdLGxlbmd0aDowfSx0aGlzLl9hdWRpb1RyYWNrPXt0eXBlOiJhdWRpbyIsaWQ6MixzZXF1ZW5jZU51bWJlcjowLHNhbXBsZXM6W10sbGVuZ3RoOjB9LHRoaXMuX2xpdHRsZUVuZGlhbj0oZT1uZXcgQXJyYXlCdWZmZXIoMiksbmV3IERhdGFWaWV3KGUpLnNldEludDE2KDAsMjU2LCEwKSwyNTY9PT1uZXcgSW50MTZBcnJheShlKVswXSksdGhpcy5fcmVjb3JkRmxhZz0hMSx0aGlzLl9maXJzdHJWaWRlbz0hMCx0aGlzLl9maXJzdEF1ZGlvPSEwLHRoaXMuX2ZpcnN0VGltZVN0YW1wPSEwLHRoaXMuX2ZsdkhlYWQ9IiIsdGhpcy5fdmlkZW9JbmZvPXtWaWRlVHlwZToiSDI2NCIsYXVkaW9UeXBlOiJ3aXRob3V0Iix3aWR0aDowLGhlaWdodDowLGZyYW1lUmF0ZToyNSxiaXRSYXRlOjAsc3lzdGVtRm9ybXQ6ImZsdiIsYXVkaW9TYW1wbGVSYXRlOjB9LHRoaXMuX2ZpcnN0UGFyc2VBdWRpbz0hMCx0aGlzLl9vc2R0aW1lSW5mbz17Zmx2c3RhcnRUaW1lOjAsZ2xvYmFsVGltZTowLGZsdmR1cmF0aW9uOjB9fXQuZGVmYXVsdD1yfSxmdW5jdGlvbihlLHQsbil7ZS5leHBvcnRzPXtkZWZhdWx0Om4oMzQxKSxfX2VzTW9kdWxlOiEwfX0sZnVuY3Rpb24oZSx0LG4pe24oMzcpLG4oMzQyKSxlLmV4cG9ydHM9bigzKS5BcnJheS5mcm9tfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciBoPW4oMTUpLGk9big0KSxjPW4oMjIpLF89big4MiksZj1uKDgzKSxtPW4oMzkpLHA9bigzNDMpLHk9big4NCk7aShpLlMraS5GKiFuKDkwKShmdW5jdGlvbihlKXtBcnJheS5mcm9tKGUpfSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihlKXt2YXIgdCxuLGkscixhPWMoZSkscz0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LG89YXJndW1lbnRzLmxlbmd0aCx1PTE8bz9hcmd1bWVudHNbMV06dm9pZCAwLGQ9dm9pZCAwIT09dSxsPTAsZT15KGEpO2lmKGQmJih1PWgodSwyPG8/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09ZXx8cz09QXJyYXkmJmYoZSkpZm9yKG49bmV3IHModD1tKGEubGVuZ3RoKSk7bDx0O2wrKylwKG4sbCxkP3UoYVtsXSxsKTphW2xdKTtlbHNlIGZvcihyPWUuY2FsbChhKSxuPW5ldyBzOyEoaT1yLm5leHQoKSkuZG9uZTtsKyspcChuLGwsZD9fKHIsdSxbaS52YWx1ZSxsXSwhMCk6aS52YWx1ZSk7cmV0dXJuIG4ubGVuZ3RoPWwsbn19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgaT1uKDkpLHI9bigyOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt0IGluIGU/aS5mKGUsdCxyKDAsbikpOmVbdF09bn19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPXMobigxKSkscj1zKG4oMikpLHY9cyhuKDYpKSxhPXMobigzNDUpKSxnPW4oNyk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIE09KG49bmV3IEFycmF5QnVmZmVyKDIpLG5ldyBEYXRhVmlldyhuKS5zZXRJbnQxNigwLDI1NiwhMCksMjU2PT09bmV3IEludDE2QXJyYXkobilbMF0pLHI9KCgwLHIuZGVmYXVsdCkoTCxudWxsLFt7a2V5OiJwYXJzZVNjcmlwdERhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgaT17fTt0cnl7dmFyIHI9TC5wYXJzZVZhbHVlKGUsdCxuKSxhPUwucGFyc2VWYWx1ZShlLHQrci5zaXplLG4tci5zaXplKTtpW3IuZGF0YV09YS5kYXRhfWNhdGNoKGUpe3YuZGVmYXVsdC5lKCJBTUYiLGUudG9TdHJpbmcoKSl9cmV0dXJuIGl9fSx7a2V5OiJwYXJzZU9iamVjdCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe2lmKG48Myl0aHJvdyBuZXcgZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkRhdGEgbm90IGVub3VnaCB3aGVuIHBhcnNlIFNjcmlwdERhdGFPYmplY3QiKTt2YXIgaT1MLnBhcnNlU3RyaW5nKGUsdCxuKSx0PUwucGFyc2VWYWx1ZShlLHQraS5zaXplLG4taS5zaXplKSxuPXQub2JqZWN0RW5kO3JldHVybntkYXRhOntuYW1lOmkuZGF0YSx2YWx1ZTp0LmRhdGF9LHNpemU6aS5zaXplK3Quc2l6ZSxvYmplY3RFbmQ6bn19fSx7a2V5OiJwYXJzZVZhcmlhYmxlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIEwucGFyc2VPYmplY3QoZSx0LG4pfX0se2tleToicGFyc2VTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtpZihuPDIpdGhyb3cgbmV3IGcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJEYXRhIG5vdCBlbm91Z2ggd2hlbiBwYXJzZSBTdHJpbmciKTtuPW5ldyBEYXRhVmlldyhlLHQsbikuZ2V0VWludDE2KDAsIU0pO3JldHVybntkYXRhOjA8bj8oMCxhLmRlZmF1bHQpKG5ldyBVaW50OEFycmF5KGUsdCsyLG4pKToiIixzaXplOjIrbn19fSx7a2V5OiJwYXJzZUxvbmdTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtpZihuPDQpdGhyb3cgbmV3IGcuSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJEYXRhIG5vdCBlbm91Z2ggd2hlbiBwYXJzZSBMb25nU3RyaW5nIik7bj1uZXcgRGF0YVZpZXcoZSx0LG4pLmdldFVpbnQzMigwLCFNKTtyZXR1cm57ZGF0YTowPG4/KDAsYS5kZWZhdWx0KShuZXcgVWludDhBcnJheShlLHQrNCxuKSk6IiIsc2l6ZTo0K259fX0se2tleToicGFyc2VEYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYobjwxMCl0aHJvdyBuZXcgZy5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkRhdGEgc2l6ZSBpbnZhbGlkIHdoZW4gcGFyc2UgRGF0ZSIpO3Q9bmV3IERhdGFWaWV3KGUsdCxuKSxuPXQuZ2V0RmxvYXQ2NCgwLCFNKTtyZXR1cm4gbis9NjAqdC5nZXRJbnQxNig4LCFNKSoxZTMse2RhdGE6bmV3IERhdGUobiksc2l6ZToxMH19fSx7a2V5OiJwYXJzZVZhbHVlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7aWYobjwxKXRocm93IG5ldyBnLklsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRGF0YSBub3QgZW5vdWdoIHdoZW4gcGFyc2UgVmFsdWUiKTt2YXIgaT1uZXcgRGF0YVZpZXcoZSx0LG4pLHI9MSxhPWkuZ2V0VWludDgoMCkscz12b2lkIDAsbz0hMTt0cnl7c3dpdGNoKGEpe2Nhc2UgMDpzPWkuZ2V0RmxvYXQ2NCgxLCFNKSxyKz04O2JyZWFrO2Nhc2UgMTpzPSEhaS5nZXRVaW50OCgxKTtyKz0xO2JyZWFrO2Nhc2UgMjp2YXIgdT1MLnBhcnNlU3RyaW5nKGUsdCsxLG4tMSk7cz11LmRhdGEscis9dS5zaXplO2JyZWFrO2Nhc2UgMzpzPXt9O3ZhciBkPTA7Zm9yKDk9PSgxNjc3NzIxNSZpLmdldFVpbnQzMihuLTQsIU0pKSYmKGQ9Myk7cjxuLTQ7KXt2YXIgbD1MLnBhcnNlT2JqZWN0KGUsdCtyLG4tci1kKTtpZihsLm9iamVjdEVuZClicmVhaztzW2wuZGF0YS5uYW1lXT1sLmRhdGEudmFsdWUscis9bC5zaXplfXI8PW4tMyYmOT09KDE2Nzc3MjE1JmkuZ2V0VWludDMyKHItMSwhTSkpJiYocis9Myk7YnJlYWs7Y2FzZSA4OnM9e30scis9NDt2YXIgaD0wO2Zvcig5PT0oMTY3NzcyMTUmaS5nZXRVaW50MzIobi00LCFNKSkmJihoPTMpO3I8bi04Oyl7dmFyIGM9TC5wYXJzZVZhcmlhYmxlKGUsdCtyLG4tci1oKTtpZihjLm9iamVjdEVuZClicmVhaztzW2MuZGF0YS5uYW1lXT1jLmRhdGEudmFsdWUscis9Yy5zaXplfXI8PW4tMyYmOT09KDE2Nzc3MjE1JmkuZ2V0VWludDMyKHItMSwhTSkpJiYocis9Myk7YnJlYWs7Y2FzZSA5OnI9MSxvPSEocz12b2lkIDApO2JyZWFrO2Nhc2UgMTA6cz1bXTt2YXIgXz1pLmdldFVpbnQzMigxLCFNKTtyKz00O2Zvcih2YXIgZj0wO2Y8XztmKyspe3ZhciBtPUwucGFyc2VWYWx1ZShlLHQrcixuLXIpO3MucHVzaChtLmRhdGEpLHIrPW0uc2l6ZX1icmVhaztjYXNlIDExOnZhciBwPUwucGFyc2VEYXRlKGUsdCsxLG4tMSk7cz1wLmRhdGEscis9cC5zaXplO2JyZWFrO2Nhc2UgMTI6dmFyIHk9TC5wYXJzZVN0cmluZyhlLHQrMSxuLTEpO3M9eS5kYXRhLHIrPXkuc2l6ZTticmVhaztkZWZhdWx0OnI9bix2LmRlZmF1bHQudygiQU1GIiwiVW5zdXBwb3J0ZWQgQU1GIHZhbHVlIHR5cGUgIithKX19Y2F0Y2goZSl7di5kZWZhdWx0LmUoIkFNRiIsZS50b1N0cmluZygpKX1yZXR1cm57ZGF0YTpzLHNpemU6cixvYmplY3RFbmQ6b319fV0pLEwpO2Z1bmN0aW9uIEwoKXsoMCxpLmRlZmF1bHQpKHRoaXMsTCl9dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbyhlLHQsbil7dmFyIGk9ZTtpZih0K248aS5sZW5ndGgpe2Zvcig7bi0tOylpZigxMjghPSgxOTImaVsrK3RdKSlyZXR1cm47cmV0dXJuIDF9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLG49ZSxpPTAscj1lLmxlbmd0aDtpPHI7KWlmKG5baV08MTI4KXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG5baV0pKSwrK2k7ZWxzZXtpZighKG5baV08MTkyKSlpZihuW2ldPDIyNCl7aWYobyhuLGksMSkpe3ZhciBhPSgzMSZuW2ldKTw8Nnw2MyZuW2krMV07aWYoMTI4PD1hKXt0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZhKSksaSs9Mjtjb250aW51ZX19fWVsc2UgaWYobltpXTwyNDApe2lmKG8obixpLDIpKXt2YXIgcz0oMTUmbltpXSk8PDEyfCg2MyZuW2krMV0pPDw2fDYzJm5baSsyXTtpZigyMDQ4PD1zJiY1NTI5NiE9KDYzNDg4JnMpKXt0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSg2NTUzNSZzKSksaSs9Mztjb250aW51ZX19fWVsc2UgaWYobltpXTwyNDgmJm8obixpLDMpKXtzPSg3Jm5baV0pPDwxOHwoNjMmbltpKzFdKTw8MTJ8KDYzJm5baSsyXSk8PDZ8NjMmbltpKzNdO2lmKDY1NTM2PHMmJnM8MTExNDExMil7cy09NjU1MzYsdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocz4+PjEwfDU1Mjk2KSksdC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTAyMyZzfDU2MzIwKSksaSs9NDtjb250aW51ZX19dC5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1MzMpKSwrK2l9cmV0dXJuIHQuam9pbigiIil9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1hKG4oMSkpLHI9YShuKDIpKSxUPWEobigzNDcpKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxyLmRlZmF1bHQpKEUsbnVsbCxbe2tleToiX2Vic3AycmJzcCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUsbj10LmJ5dGVMZW5ndGgsaT1uZXcgVWludDhBcnJheShuKSxyPTAsYT0wO2E8bjthKyspMjw9YSYmMz09PXRbYV0mJjA9PT10W2EtMV0mJjA9PT10W2EtMl18fChpW3JdPXRbYV0scisrKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoaS5idWZmZXIsMCxyKX19LHtrZXk6InBhcnNlU1BTIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1FLl9lYnNwMnJic3AoZSksbj1uZXcgVC5kZWZhdWx0KHQpO24ucmVhZEJ5dGUoKTt2YXIgaT1uLnJlYWRCeXRlKCk7bi5yZWFkQnl0ZSgpO3ZhciByPW4ucmVhZEJ5dGUoKTtuLnJlYWRVRUcoKTt2YXIgYT1FLmdldFByb2ZpbGVTdHJpbmcoaSkscz1FLmdldExldmVsU3RyaW5nKHIpLG89MSx1PTQyMCxkPTg7aWYoKDEwMD09PWl8fDExMD09PWl8fDEyMj09PWl8fDI0ND09PWl8fDQ0PT09aXx8ODM9PT1pfHw4Nj09PWl8fDExOD09PWl8fDEyOD09PWl8fDEzOD09PWl8fDE0ND09PWkpJiYoMz09PShvPW4ucmVhZFVFRygpKSYmbi5yZWFkQml0cygxKSxvPD0zJiYodT1bMCw0MjAsNDIyLDQ0NF1bb10pLGQ9bi5yZWFkVUVHKCkrOCxuLnJlYWRVRUcoKSxuLnJlYWRCaXRzKDEpLG4ucmVhZEJvb2woKSkpZm9yKHZhciBsPTMhPT1vPzg6MTIsaD0wO2g8bDtoKyspbi5yZWFkQm9vbCgpJiZFLl9za2lwU2NhbGluZ0xpc3QobixoPDY/MTY6NjQpO24ucmVhZFVFRygpO3ZhciBjPW4ucmVhZFVFRygpO2lmKDA9PT1jKW4ucmVhZFVFRygpO2Vsc2UgaWYoMT09PWMpe24ucmVhZEJpdHMoMSksbi5yZWFkU0VHKCksbi5yZWFkU0VHKCk7Zm9yKHZhciBfPW4ucmVhZFVFRygpLGY9MDtmPF87ZisrKW4ucmVhZFNFRygpfXZhciBtPW4ucmVhZFVFRygpO24ucmVhZEJpdHMoMSk7dmFyIHA9bi5yZWFkVUVHKCkseT1uLnJlYWRVRUcoKSx2PW4ucmVhZEJpdHMoMSk7MD09PXYmJm4ucmVhZEJpdHMoMSksbi5yZWFkQml0cygxKTt2YXIgZz0wLE09MCxMPTAsUz0wO24ucmVhZEJvb2woKSYmKGc9bi5yZWFkVUVHKCksTT1uLnJlYWRVRUcoKSxMPW4ucmVhZFVFRygpLFM9bi5yZWFkVUVHKCkpO3ZhciBrPTEsZT0xLHQ9MCxyPSEwLGk9MCxjPTA7bi5yZWFkQm9vbCgpJiYobi5yZWFkQm9vbCgpJiYoMDwoYj1uLnJlYWRCeXRlKCkpJiZiPDE2PyhrPVsxLDEyLDEwLDE2LDQwLDI0LDIwLDMyLDgwLDE4LDE1LDY0LDE2MCw0LDMsMl1bYi0xXSxlPVsxLDExLDExLDExLDMzLDExLDExLDExLDMzLDExLDExLDMzLDk5LDMsMiwxXVtiLTFdKToyNTU9PT1iJiYoaz1uLnJlYWRCeXRlKCk8PDh8bi5yZWFkQnl0ZSgpLGU9bi5yZWFkQnl0ZSgpPDw4fG4ucmVhZEJ5dGUoKSkpLG4ucmVhZEJvb2woKSYmbi5yZWFkQm9vbCgpLG4ucmVhZEJvb2woKSYmKG4ucmVhZEJpdHMoNCksbi5yZWFkQm9vbCgpJiZuLnJlYWRCaXRzKDI0KSksbi5yZWFkQm9vbCgpJiYobi5yZWFkVUVHKCksbi5yZWFkVUVHKCkpLG4ucmVhZEJvb2woKSYmKEQ9bi5yZWFkQml0cygzMiksdz1uLnJlYWRCaXRzKDMyKSxyPW4ucmVhZEJvb2woKSx0PShpPXcpLyhjPTIqRCkpKTt2YXIgYj0xOzE9PT1rJiYxPT09ZXx8KGI9ay9lKTt2YXIgdz0wLEQ9MDtEPTA9PT1vPyh3PTEsMi12KToodz0zPT09bz8xOjIsKDE9PT1vPzI6MSkqKDItdikpO3A9MTYqKHArMSksdj0xNiooeSsxKSooMi12KTtwLT0oZytNKSp3LHYtPShMK1MpKkQ7Yj1NYXRoLmNlaWwocCpiKTtyZXR1cm4gbi5kZXN0cm95KCksbj1udWxsLHtwcm9maWxlX3N0cmluZzphLGxldmVsX3N0cmluZzpzLGJpdF9kZXB0aDpkLHJlZl9mcmFtZXM6bSxjaHJvbWFfZm9ybWF0OnUsY2hyb21hX2Zvcm1hdF9zdHJpbmc6RS5nZXRDaHJvbWFGb3JtYXRTdHJpbmcodSksZnJhbWVfcmF0ZTp7Zml4ZWQ6cixmcHM6dCxmcHNfZGVuOmMsZnBzX251bTppfSxzYXJfcmF0aW86e3dpZHRoOmssaGVpZ2h0OmV9LGNvZGVjX3NpemU6e3dpZHRoOnAsaGVpZ2h0OnZ9LHByZXNlbnRfc2l6ZTp7d2lkdGg6YixoZWlnaHQ6dn19fX0se2tleToiX3NraXBTY2FsaW5nTGlzdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49OCxpPTgscj0wO3I8dDtyKyspbj0wPT09KGk9MCE9PWk/KG4rZS5yZWFkU0VHKCkrMjU2KSUyNTY6aSk/bjppfX0se2tleToiZ2V0UHJvZmlsZVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UgNjY6cmV0dXJuIkJhc2VsaW5lIjtjYXNlIDc3OnJldHVybiJNYWluIjtjYXNlIDg4OnJldHVybiJFeHRlbmRlZCI7Y2FzZSAxMDA6cmV0dXJuIkhpZ2giO2Nhc2UgMTEwOnJldHVybiJIaWdoMTAiO2Nhc2UgMTIyOnJldHVybiJIaWdoNDIyIjtjYXNlIDI0NDpyZXR1cm4iSGlnaDQ0NCI7ZGVmYXVsdDpyZXR1cm4iVW5rbm93biJ9fX0se2tleToiZ2V0TGV2ZWxTdHJpbmciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybihlLzEwKS50b0ZpeGVkKDEpfX0se2tleToiZ2V0Q2hyb21hRm9ybWF0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSA0MjA6cmV0dXJuIjQ6MjowIjtjYXNlIDQyMjpyZXR1cm4iNDoyOjIiO2Nhc2UgNDQ0OnJldHVybiI0OjQ6NCI7ZGVmYXVsdDpyZXR1cm4iVW5rbm93biJ9fX1dKSxyPUU7ZnVuY3Rpb24gRSgpeygwLGkuZGVmYXVsdCkodGhpcyxFKX10LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cyhuKDEpKSxyPXMobigyKSksYT1uKDcpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIuZGVmYXVsdCkobyxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9idWZmZXI9bnVsbH19LHtrZXk6Il9maWxsQ3VycmVudFdvcmQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdG90YWxfYnl0ZXMtdGhpcy5fYnVmZmVyX2luZGV4O2lmKGU8PTApdGhyb3cgbmV3IGEuSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJFeHBHb2xvbWI6IF9maWxsQ3VycmVudFdvcmQoKSBidXQgbm8gYnl0ZXMgYXZhaWxhYmxlIik7dmFyIHQ9TWF0aC5taW4oNCxlKSxlPW5ldyBVaW50OEFycmF5KDQpO2Uuc2V0KHRoaXMuX2J1ZmZlci5zdWJhcnJheSh0aGlzLl9idWZmZXJfaW5kZXgsdGhpcy5fYnVmZmVyX2luZGV4K3QpKSx0aGlzLl9jdXJyZW50X3dvcmQ9bmV3IERhdGFWaWV3KGUuYnVmZmVyKS5nZXRVaW50MzIoMCwhMSksdGhpcy5fYnVmZmVyX2luZGV4Kz10LHRoaXMuX2N1cnJlbnRfd29yZF9iaXRzX2xlZnQ9OCp0fX0se2tleToicmVhZEJpdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDMyPGUpdGhyb3cgbmV3IGEuSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJFeHBHb2xvbWI6IHJlYWRCaXRzKCkgYml0cyBleGNlZWRlZCBtYXggMzJiaXRzISIpO2lmKGU8PXRoaXMuX2N1cnJlbnRfd29yZF9iaXRzX2xlZnQpe3ZhciB0PXRoaXMuX2N1cnJlbnRfd29yZD4+PjMyLWU7cmV0dXJuIHRoaXMuX2N1cnJlbnRfd29yZDw8PWUsdGhpcy5fY3VycmVudF93b3JkX2JpdHNfbGVmdC09ZSx0fXZhciBuPXRoaXMuX2N1cnJlbnRfd29yZF9iaXRzX2xlZnQ/dGhpcy5fY3VycmVudF93b3JkOjA7bj4+Pj0zMi10aGlzLl9jdXJyZW50X3dvcmRfYml0c19sZWZ0O3Q9ZS10aGlzLl9jdXJyZW50X3dvcmRfYml0c19sZWZ0O3RoaXMuX2ZpbGxDdXJyZW50V29yZCgpO2U9TWF0aC5taW4odCx0aGlzLl9jdXJyZW50X3dvcmRfYml0c19sZWZ0KSx0PXRoaXMuX2N1cnJlbnRfd29yZD4+PjMyLWU7cmV0dXJuIHRoaXMuX2N1cnJlbnRfd29yZDw8PWUsdGhpcy5fY3VycmVudF93b3JkX2JpdHNfbGVmdC09ZSxuPW48PGV8dH19LHtrZXk6InJlYWRCb29sIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5yZWFkQml0cygxKX19LHtrZXk6InJlYWRCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKDgpfX0se2tleToiX3NraXBMZWFkaW5nWmVybyIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dm9pZCAwLGU9MDtlPHRoaXMuX2N1cnJlbnRfd29yZF9iaXRzX2xlZnQ7ZSsrKWlmKDAhPSh0aGlzLl9jdXJyZW50X3dvcmQmMjE0NzQ4MzY0OD4+PmUpKXJldHVybiB0aGlzLl9jdXJyZW50X3dvcmQ8PD1lLHRoaXMuX2N1cnJlbnRfd29yZF9iaXRzX2xlZnQtPWUsZTtyZXR1cm4gdGhpcy5fZmlsbEN1cnJlbnRXb3JkKCksZSt0aGlzLl9za2lwTGVhZGluZ1plcm8oKX19LHtrZXk6InJlYWRVRUciLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fc2tpcExlYWRpbmdaZXJvKCk7cmV0dXJuIHRoaXMucmVhZEJpdHMoZSsxKS0xfX0se2tleToicmVhZFNFRyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVRUcoKTtyZXR1cm4gMSZlP2UrMT4+PjE6LTEqKGU+Pj4xKX19XSkscj1vO2Z1bmN0aW9uIG8oZSl7KDAsaS5kZWZhdWx0KSh0aGlzLG8pLHRoaXMuVEFHPSJFeHBHb2xvbWIiLHRoaXMuX2J1ZmZlcj1lLHRoaXMuX2J1ZmZlcl9pbmRleD0wLHRoaXMuX3RvdGFsX2J5dGVzPWUuYnl0ZUxlbmd0aCx0aGlzLl90b3RhbF9iaXRzPTgqZS5ieXRlTGVuZ3RoLHRoaXMuX2N1cnJlbnRfd29yZD0wLHRoaXMuX2N1cnJlbnRfd29yZF9iaXRzX2xlZnQ9MH10LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cyhuKDEpKSxyPXMobigyKSksTz1zKG4oNikpLEk9cyhuKDM0OSkpLFc9cyhuKDM1MCkpLEg9cyhuKDM2KSksaj1uKDI0MSksYT1uKDcpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIuZGVmYXVsdCkobyxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9kdHNCYXNlPS0xLHRoaXMuX2R0c0Jhc2VJbml0ZWQ9ITEsdGhpcy5fYXVkaW9NZXRhPW51bGwsdGhpcy5fdmlkZW9NZXRhPW51bGwsdGhpcy5fYXVkaW9TZWdtZW50SW5mb0xpc3QuY2xlYXIoKSx0aGlzLl9hdWRpb1NlZ21lbnRJbmZvTGlzdD1udWxsLHRoaXMuX3ZpZGVvU2VnbWVudEluZm9MaXN0LmNsZWFyKCksdGhpcy5fdmlkZW9TZWdtZW50SW5mb0xpc3Q9bnVsbCx0aGlzLl9vbkluaXRTZWdtZW50PW51bGwsdGhpcy5fb25NZWRpYVNlZ21lbnQ9bnVsbH19LHtrZXk6ImJpbmREYXRhU291cmNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5vbkRhdGFBdmFpbGFibGU9dGhpcy5yZW11eC5iaW5kKHRoaXMpLGUub25UcmFja01ldGFkYXRhPXRoaXMuX29uVHJhY2tNZXRhZGF0YVJlY2VpdmVkLmJpbmQodGhpcyksdGhpc319LHtrZXk6Imluc2VydERpc2NvbnRpbnVpdHkiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fYXVkaW9OZXh0RHRzPXRoaXMuX3ZpZGVvTmV4dER0cz12b2lkIDB9fSx7a2V5OiJzZWVrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9hdWRpb1N0YXNoZWRMYXN0U2FtcGxlPW51bGwsdGhpcy5fdmlkZW9TdGFzaGVkTGFzdFNhbXBsZT1udWxsLHRoaXMuX3ZpZGVvU2VnbWVudEluZm9MaXN0LmNsZWFyKCksdGhpcy5fYXVkaW9TZWdtZW50SW5mb0xpc3QuY2xlYXIoKX19LHtrZXk6InJlbXV4Iix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLl9vbk1lZGlhU2VnbWVudCl0aHJvdyBuZXcgYS5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1QNFJlbXV4ZXI6IG9uTWVkaWFTZWdtZW50IGNhbGxiYWNrIG11c3QgYmUgc3BlY2lmaWNlZCEiKTt0aGlzLl9kdHNCYXNlSW5pdGVkfHx0aGlzLl9jYWxjdWxhdGVEdHNCYXNlKGUsdCksdGhpcy5fcmVtdXhWaWRlbyh0KSx0aGlzLl9yZW11eEF1ZGlvKGUpfX0se2tleToiX29uVHJhY2tNZXRhZGF0YVJlY2VpdmVkIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPW51bGwsaT0ibXA0IixyPXQuY29kZWM7aWYoImF1ZGlvIj09PWUpbj0ibXAzIj09PSh0aGlzLl9hdWRpb01ldGE9dCkuY29kZWMmJnRoaXMuX21wM1VzZU1wZWdBdWRpbz8oaT0ibXBlZyIscj0iIixuZXcgVWludDhBcnJheSk6SS5kZWZhdWx0LmdlbmVyYXRlSW5pdFNlZ21lbnQodCk7ZWxzZXtpZigidmlkZW8iIT09ZSlyZXR1cm47dGhpcy5fdmlkZW9NZXRhPXQsbj1JLmRlZmF1bHQuZ2VuZXJhdGVJbml0U2VnbWVudCh0KX1pZighdGhpcy5fb25Jbml0U2VnbWVudCl0aHJvdyBuZXcgYS5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1QNFJlbXV4ZXI6IG9uSW5pdFNlZ21lbnQgY2FsbGJhY2sgbXVzdCBiZSBzcGVjaWZpZWQhIik7dGhpcy5fb25Jbml0U2VnbWVudChlLHt0eXBlOmUsZGF0YTpuLmJ1ZmZlcixjb2RlYzpyLGNvbnRhaW5lcjplKyIvIitpLG1lZGlhRHVyYXRpb246dC5kdXJhdGlvbn0pfX0se2tleToiX2NhbGN1bGF0ZUR0c0Jhc2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZHRzQmFzZUluaXRlZHx8KGUuc2FtcGxlcyYmZS5zYW1wbGVzLmxlbmd0aCYmKHRoaXMuX2F1ZGlvRHRzQmFzZT1lLnNhbXBsZXNbMF0uZHRzKSx0LnNhbXBsZXMmJnQuc2FtcGxlcy5sZW5ndGgmJih0aGlzLl92aWRlb0R0c0Jhc2U9dC5zYW1wbGVzWzBdLmR0cyksdGhpcy5fZHRzQmFzZT1NYXRoLm1pbih0aGlzLl9hdWRpb0R0c0Jhc2UsdGhpcy5fdmlkZW9EdHNCYXNlKSx0aGlzLl9kdHNCYXNlSW5pdGVkPSEwKX19LHtrZXk6ImZsdXNoU3Rhc2hlZFNhbXBsZXMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fdmlkZW9TdGFzaGVkTGFzdFNhbXBsZSx0PXRoaXMuX2F1ZGlvU3Rhc2hlZExhc3RTYW1wbGUsbj17dHlwZToidmlkZW8iLGlkOjEsc2VxdWVuY2VOdW1iZXI6MCxzYW1wbGVzOltdLGxlbmd0aDowfTtudWxsIT1lJiYobi5zYW1wbGVzLnB1c2goZSksbi5sZW5ndGg9ZS5sZW5ndGgpO2U9e3R5cGU6ImF1ZGlvIixpZDoyLHNlcXVlbmNlTnVtYmVyOjAsc2FtcGxlczpbXSxsZW5ndGg6MH07bnVsbCE9dCYmKGUuc2FtcGxlcy5wdXNoKHQpLGUubGVuZ3RoPXQubGVuZ3RoKSx0aGlzLl92aWRlb1N0YXNoZWRMYXN0U2FtcGxlPW51bGwsdGhpcy5fYXVkaW9TdGFzaGVkTGFzdFNhbXBsZT1udWxsLHRoaXMuX3JlbXV4VmlkZW8obiwhMCksdGhpcy5fcmVtdXhBdWRpbyhlLCEwKX19LHtrZXk6Il9yZW11eEF1ZGlvIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKG51bGwhPXRoaXMuX2F1ZGlvTWV0YSl7dmFyIG49ZSxpPW4uc2FtcGxlcyxyPXZvaWQgMCxhPS0xLHM9dGhpcy5fYXVkaW9NZXRhLnJlZlNhbXBsZUR1cmF0aW9uLG89Im1wMyI9PT10aGlzLl9hdWRpb01ldGEuY29kZWMmJnRoaXMuX21wM1VzZU1wZWdBdWRpbyx1PXRoaXMuX2R0c0Jhc2VJbml0ZWQmJnZvaWQgMD09PXRoaXMuX2F1ZGlvTmV4dER0cyxlPSExO2lmKGkmJjAhPT1pLmxlbmd0aCYmKDEhPT1pLmxlbmd0aHx8dCkpe3ZhciBkPTAsbD1udWxsLGg9MCxoPW8/KGQ9MCxuLmxlbmd0aCk6KGQ9OCkrbi5sZW5ndGgsYz1udWxsOzE8aS5sZW5ndGgmJihoLT0oYz1pLnBvcCgpKS5sZW5ndGgpLG51bGwhPXRoaXMuX2F1ZGlvU3Rhc2hlZExhc3RTYW1wbGUmJihtPXRoaXMuX2F1ZGlvU3Rhc2hlZExhc3RTYW1wbGUsdGhpcy5fYXVkaW9TdGFzaGVkTGFzdFNhbXBsZT1udWxsLGkudW5zaGlmdChtKSxoKz1tLmxlbmd0aCksbnVsbCE9YyYmKHRoaXMuX2F1ZGlvU3Rhc2hlZExhc3RTYW1wbGU9Yyk7dmFyIF8sZixtPWlbMF0uZHRzLXRoaXMuX2R0c0Jhc2U7dGhpcy5fYXVkaW9OZXh0RHRzP3I9bS10aGlzLl9hdWRpb05leHREdHM6dGhpcy5fYXVkaW9TZWdtZW50SW5mb0xpc3QuaXNFbXB0eSgpPyhyPTAsdGhpcy5fZmlsbFNpbGVudEFmdGVyU2VlayYmIXRoaXMuX3ZpZGVvU2VnbWVudEluZm9MaXN0LmlzRW1wdHkoKSYmIm1wMyIhPT10aGlzLl9hdWRpb01ldGEub3JpZ2luYWxDb2RlYyYmKGU9ITApKTpyPW51bGwhPShfPXRoaXMuX2F1ZGlvU2VnbWVudEluZm9MaXN0LmdldExhc3RTYW1wbGVCZWZvcmUobSkpPyhmPW0tKF8ub3JpZ2luYWxEdHMrXy5kdXJhdGlvbiksbS0oXy5kdHMrXy5kdXJhdGlvbisoZj1mPD0zPzA6ZikpKTowLGUmJihfPW0tcixudWxsIT0oZj10aGlzLl92aWRlb1NlZ21lbnRJbmZvTGlzdC5nZXRMYXN0U2VnbWVudEJlZm9yZShtKSkmJmYuYmVnaW5EdHM8Xz8oQT1XLmRlZmF1bHQuZ2V0U2lsZW50RnJhbWUodGhpcy5fYXVkaW9NZXRhLm9yaWdpbmFsQ29kZWMsdGhpcy5fYXVkaW9NZXRhLmNoYW5uZWxDb3VudCkpJiYobT1mLmJlZ2luRHRzLGY9Xy1mLmJlZ2luRHRzLE8uZGVmYXVsdC52KHRoaXMuVEFHLCJJbnNlcnRQcmVmaXhTaWxlbnRBdWRpbzogZHRzOiAiK20rIiwgZHVyYXRpb246ICIrZiksaS51bnNoaWZ0KHt1bml0OkEsZHRzOm0scHRzOm19KSxoKz1BLmJ5dGVMZW5ndGgpOmU9ITEpO2Zvcih2YXIgcD1bXSx5PTA7eTxpLmxlbmd0aDt5Kyspe3ZhciB2PWlbeV0sZz12LnVuaXQsTT12LmR0cy10aGlzLl9kdHNCYXNlLEw9TSxTPSExLGs9bnVsbCxiPTA7aWYoIShNPC0uMDAxKSl7aWYoIm1wMyIhPT10aGlzLl9hdWRpb01ldGEuY29kZWMpe3ZhciB3PU07aWYoKHI9TS0odz10aGlzLl9hdWRpb05leHREdHM/dGhpcy5fYXVkaW9OZXh0RHRzOncpKTw9LTIwKnMpe08uZGVmYXVsdC53KHRoaXMuVEFHLCJEcm9wcGluZyAxIGF1ZGlvIGZyYW1lIChvcmlnaW5hbER0czogIitNKyIgbXMgLGN1clJlZkR0czogIit3KyIgbXMpICBkdWUgdG8gZHRzQ29ycmVjdGlvbjogIityKyIgbXMgb3ZlcmxhcC4iKTtjb250aW51ZX1pZigyMCpzPD1yJiZ0aGlzLl9maWxsQXVkaW9UaW1lc3RhbXBHYXAmJiFILmRlZmF1bHQuc2FmYXJpKXt2YXIgUz0hMCxEPU1hdGguZmxvb3Ioci9zKTtPLmRlZmF1bHQudyh0aGlzLlRBRywiTGFyZ2UgYXVkaW8gdGltZXN0YW1wIGdhcCBkZXRlY3RlZCwgbWF5IGNhdXNlIEFWIHN5bmMgdG8gZHJpZnQuIFNpbGVudCBmcmFtZXMgd2lsbCBiZSBnZW5lcmF0ZWQgdG8gYXZvaWQgdW5zeW5jLlxub3JpZ2luYWxEdHM6ICIrTSsiIG1zLCBjdXJSZWZEdHM6ICIrdysiIG1zLCBkdHNDb3JyZWN0aW9uOiAiK01hdGgucm91bmQocikrIiBtcywgZ2VuZXJhdGU6ICIrRCsiIGZyYW1lcyIpO3ZhciBMPU1hdGguZmxvb3IodyksYj1NYXRoLmZsb29yKHcrcyktTCxUPVcuZGVmYXVsdC5nZXRTaWxlbnRGcmFtZSh0aGlzLl9hdWRpb01ldGEub3JpZ2luYWxDb2RlYyx0aGlzLl9hdWRpb01ldGEuY2hhbm5lbENvdW50KTtudWxsPT1UJiYoTy5kZWZhdWx0LncodGhpcy5UQUcsIlVuYWJsZSB0byBnZW5lcmF0ZSBzaWxlbnQgZnJhbWUgZm9yICIrdGhpcy5fYXVkaW9NZXRhLm9yaWdpbmFsQ29kZWMrIiB3aXRoICIrdGhpcy5fYXVkaW9NZXRhLmNoYW5uZWxDb3VudCsiIGNoYW5uZWxzLCByZXBlYXQgbGFzdCBmcmFtZSIpLFQ9Zyk7Zm9yKHZhciBrPVtdLEU9MDtFPEQ7RSsrKXt3Kz1zO3ZhciBZPU1hdGguZmxvb3IodyksUD1NYXRoLmZsb29yKHcrcyktWSxQPXtkdHM6WSxwdHM6WSxjdHM6MCx1bml0OlQsc2l6ZTpULmJ5dGVMZW5ndGgsZHVyYXRpb246UCxvcmlnaW5hbER0czpNLGZsYWdzOntpc0xlYWRpbmc6MCxkZXBlbmRzT246MSxpc0RlcGVuZGVkT246MCxoYXNSZWR1bmRhbmN5OjB9fTtrLnB1c2goUCksaCs9Zy5ieXRlTGVuZ3RofXRoaXMuX2F1ZGlvTmV4dER0cz13K3N9ZWxzZSBMPU1hdGguZmxvb3IodyksYj1NYXRoLmZsb29yKHcrcyktTCx0aGlzLl9hdWRpb05leHREdHM9dytzfWVsc2UgTD1NLXIsYj15IT09aS5sZW5ndGgtMT9pW3krMV0uZHRzLXRoaXMuX2R0c0Jhc2Utci1MOm51bGwhPWM/Yy5kdHMtdGhpcy5fZHRzQmFzZS1yLUw6MTw9cC5sZW5ndGg/cFtwLmxlbmd0aC0xXS5kdXJhdGlvbjpNYXRoLmZsb29yKHMpLHRoaXMuX2F1ZGlvTmV4dER0cz1MK2I7LTE9PT1hJiYoYT1MKSxwLnB1c2goe2R0czpMLHB0czpMLGN0czowLHVuaXQ6di51bml0LHNpemU6di51bml0LmJ5dGVMZW5ndGgsZHVyYXRpb246YixvcmlnaW5hbER0czpNLGZsYWdzOntpc0xlYWRpbmc6MCxkZXBlbmRzT246MSxpc0RlcGVuZGVkT246MCxoYXNSZWR1bmRhbmN5OjB9fSksUyYmcC5wdXNoLmFwcGx5KHAsayl9fWlmKDA9PT1wLmxlbmd0aClyZXR1cm4gbi5zYW1wbGVzPVtdLHZvaWQobi5sZW5ndGg9MCk7bz9sPW5ldyBVaW50OEFycmF5KGgpOigobD1uZXcgVWludDhBcnJheShoKSlbMF09aD4+PjI0JjI1NSxsWzFdPWg+Pj4xNiYyNTUsbFsyXT1oPj4+OCYyNTUsbFszXT0yNTUmaCxsLnNldChJLmRlZmF1bHQudHlwZXMubWRhdCw0KSk7Zm9yKHZhciBDPTA7QzxwLmxlbmd0aDtDKyspe3ZhciBSPXBbQ10udW5pdDtsLnNldChSLGQpLGQrPVIuYnl0ZUxlbmd0aH12YXIgQT1wW3AubGVuZ3RoLTFdLHg9QS5kdHMrQS5kdXJhdGlvbixlPW5ldyBqLk1lZGlhU2VnbWVudEluZm87ZS5iZWdpbkR0cz1hLGUuZW5kRHRzPXgsZS5iZWdpblB0cz1hLGUuZW5kUHRzPXgsZS5vcmlnaW5hbEJlZ2luRHRzPXBbMF0ub3JpZ2luYWxEdHMsZS5vcmlnaW5hbEVuZER0cz1BLm9yaWdpbmFsRHRzK0EuZHVyYXRpb24sZS5maXJzdFNhbXBsZT1uZXcgai5TYW1wbGVJbmZvKHBbMF0uZHRzLHBbMF0ucHRzLHBbMF0uZHVyYXRpb24scFswXS5vcmlnaW5hbER0cywhMSksZS5sYXN0U2FtcGxlPW5ldyBqLlNhbXBsZUluZm8oQS5kdHMsQS5wdHMsQS5kdXJhdGlvbixBLm9yaWdpbmFsRHRzLCExKSx0aGlzLl9pc0xpdmV8fHRoaXMuX2F1ZGlvU2VnbWVudEluZm9MaXN0LmFwcGVuZChlKSxuLnNhbXBsZXM9cCxuLnNlcXVlbmNlTnVtYmVyKys7QT1udWxsLEE9bz9uZXcgVWludDhBcnJheTpJLmRlZmF1bHQubW9vZihuLGEpO24uc2FtcGxlcz1bXSxuLmxlbmd0aD0wO2U9e3R5cGU6ImF1ZGlvIixkYXRhOnRoaXMuX21lcmdlQm94ZXMoQSxsKS5idWZmZXIsc2FtcGxlQ291bnQ6cC5sZW5ndGgsaW5mbzplfTtvJiZ1JiYoZS50aW1lc3RhbXBPZmZzZXQ9YSksdGhpcy5fb25NZWRpYVNlZ21lbnQoImF1ZGlvIixlKX19fX0se2tleToiX3JlbXV4VmlkZW8iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYobnVsbCE9dGhpcy5fdmlkZW9NZXRhKXt2YXIgbj1lLGk9bi5zYW1wbGVzLHI9dm9pZCAwLGE9LTEscz0tMTtpZihpJiYwIT09aS5sZW5ndGgmJigxIT09aS5sZW5ndGh8fHQpKXt2YXIgbz04LHU9bnVsbCx0PTgrZS5sZW5ndGgsZD1udWxsOzE8aS5sZW5ndGgmJih0LT0oZD1pLnBvcCgpKS5sZW5ndGgpLG51bGwhPXRoaXMuX3ZpZGVvU3Rhc2hlZExhc3RTYW1wbGUmJihoPXRoaXMuX3ZpZGVvU3Rhc2hlZExhc3RTYW1wbGUsdGhpcy5fdmlkZW9TdGFzaGVkTGFzdFNhbXBsZT1udWxsLGkudW5zaGlmdChoKSx0Kz1oLmxlbmd0aCksbnVsbCE9ZCYmKHRoaXMuX3ZpZGVvU3Rhc2hlZExhc3RTYW1wbGU9ZCk7dmFyIGwsaCxlPWlbMF0uZHRzLXRoaXMuX2R0c0Jhc2U7cj10aGlzLl92aWRlb05leHREdHM/ZS10aGlzLl92aWRlb05leHREdHM6IXRoaXMuX3ZpZGVvU2VnbWVudEluZm9MaXN0LmlzRW1wdHkoKSYmbnVsbCE9KGw9dGhpcy5fdmlkZW9TZWdtZW50SW5mb0xpc3QuZ2V0TGFzdFNhbXBsZUJlZm9yZShlKSk/KGg9ZS0obC5vcmlnaW5hbER0cytsLmR1cmF0aW9uKSxlLShsLmR0cytsLmR1cmF0aW9uKyhoPWg8PTM/MDpoKSkpOjA7Zm9yKHZhciBjPW5ldyBqLk1lZGlhU2VnbWVudEluZm8sXz1bXSxmPTA7ZjxpLmxlbmd0aDtmKyspe3ZhciBtPWlbZl0scD1tLmR0cy10aGlzLl9kdHNCYXNlLHk9bS5pc0tleWZyYW1lLHY9cC1yLGc9bS5jdHMsTT12K2c7LTE9PT1hJiYoYT12LHM9TSk7dmFyIEwsUz0wO1M9ZiE9PWkubGVuZ3RoLTE/aVtmKzFdLmR0cy10aGlzLl9kdHNCYXNlLXItdjpudWxsIT1kP2QuZHRzLXRoaXMuX2R0c0Jhc2Utci12OjE8PV8ubGVuZ3RoP19bXy5sZW5ndGgtMV0uZHVyYXRpb246TWF0aC5mbG9vcih0aGlzLl92aWRlb01ldGEucmVmU2FtcGxlRHVyYXRpb24pLHkmJigoTD1uZXcgai5TYW1wbGVJbmZvKHYsTSxTLG0uZHRzLCEwKSkuZmlsZXBvc2l0aW9uPW0uZmlsZXBvc2l0aW9uLGMuYXBwZW5kU3luY1BvaW50KEwpKSxfLnB1c2goe2R0czp2LHB0czpNLGN0czpnLHVuaXRzOm0udW5pdHMsc2l6ZTptLmxlbmd0aCxpc0tleWZyYW1lOnksZHVyYXRpb246UyxvcmlnaW5hbER0czpwLGZsYWdzOntpc0xlYWRpbmc6MCxkZXBlbmRzT246eT8yOjEsaXNEZXBlbmRlZE9uOnk/MTowLGhhc1JlZHVuZGFuY3k6MCxpc05vblN5bmM6eT8wOjF9fSl9KHU9bmV3IFVpbnQ4QXJyYXkodCkpWzBdPXQ+Pj4yNCYyNTUsdVsxXT10Pj4+MTYmMjU1LHVbMl09dD4+PjgmMjU1LHVbM109MjU1JnQsdS5zZXQoSS5kZWZhdWx0LnR5cGVzLm1kYXQsNCk7Zm9yKHZhciBrPTA7azxfLmxlbmd0aDtrKyspZm9yKHZhciBiPV9ba10udW5pdHM7Yi5sZW5ndGg7KXt2YXIgdz1iLnNoaWZ0KCkuZGF0YTt1LnNldCh3LG8pLG8rPXcuYnl0ZUxlbmd0aH12YXIgdD1fW18ubGVuZ3RoLTFdLEQ9dC5kdHMrdC5kdXJhdGlvbixUPXQucHRzK3QuZHVyYXRpb247dGhpcy5fdmlkZW9OZXh0RHRzPUQsYy5iZWdpbkR0cz1hLGMuZW5kRHRzPUQsYy5iZWdpblB0cz1zLGMuZW5kUHRzPVQsYy5vcmlnaW5hbEJlZ2luRHRzPV9bMF0ub3JpZ2luYWxEdHMsYy5vcmlnaW5hbEVuZER0cz10Lm9yaWdpbmFsRHRzK3QuZHVyYXRpb24sYy5maXJzdFNhbXBsZT1uZXcgai5TYW1wbGVJbmZvKF9bMF0uZHRzLF9bMF0ucHRzLF9bMF0uZHVyYXRpb24sX1swXS5vcmlnaW5hbER0cyxfWzBdLmlzS2V5ZnJhbWUpLGMubGFzdFNhbXBsZT1uZXcgai5TYW1wbGVJbmZvKHQuZHRzLHQucHRzLHQuZHVyYXRpb24sdC5vcmlnaW5hbER0cyx0LmlzS2V5ZnJhbWUpLHRoaXMuX2lzTGl2ZXx8dGhpcy5fdmlkZW9TZWdtZW50SW5mb0xpc3QuYXBwZW5kKGMpLG4uc2FtcGxlcz1fLG4uc2VxdWVuY2VOdW1iZXIrKyx0aGlzLl9mb3JjZUZpcnN0SURSJiYoKEU9X1swXS5mbGFncykuZGVwZW5kc09uPTIsRS5pc05vblN5bmM9MCk7dmFyIEU9SS5kZWZhdWx0Lm1vb2YobixhKTtuLnNhbXBsZXM9W10sbi5sZW5ndGg9MCx0aGlzLl9vbk1lZGlhU2VnbWVudCgidmlkZW8iLHt0eXBlOiJ2aWRlbyIsZGF0YTp0aGlzLl9tZXJnZUJveGVzKEUsdSkuYnVmZmVyLHNhbXBsZUNvdW50Ol8ubGVuZ3RoLGluZm86Y30pfX19fSx7a2V5OiJfbWVyZ2VCb3hlcyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1uZXcgVWludDhBcnJheShlLmJ5dGVMZW5ndGgrdC5ieXRlTGVuZ3RoKTtyZXR1cm4gbi5zZXQoZSwwKSxuLnNldCh0LGUuYnl0ZUxlbmd0aCksbn19LHtrZXk6Im9uSW5pdFNlZ21lbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbkluaXRTZWdtZW50fSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fb25Jbml0U2VnbWVudD1lfX0se2tleToib25NZWRpYVNlZ21lbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbk1lZGlhU2VnbWVudH0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMuX29uTWVkaWFTZWdtZW50PWV9fV0pLHI9bztmdW5jdGlvbiBvKGUpeygwLGkuZGVmYXVsdCkodGhpcyxvKSx0aGlzLlRBRz0iTVA0UmVtdXhlciIsdGhpcy5fY29uZmlnPWUsdGhpcy5faXNMaXZlPSEwPT09ZS5pc0xpdmUsdGhpcy5fZHRzQmFzZT0tMSx0aGlzLl9kdHNCYXNlSW5pdGVkPSExLHRoaXMuX2F1ZGlvRHRzQmFzZT0xLzAsdGhpcy5fdmlkZW9EdHNCYXNlPTEvMCx0aGlzLl9hdWRpb05leHREdHM9dm9pZCAwLHRoaXMuX3ZpZGVvTmV4dER0cz12b2lkIDAsdGhpcy5fYXVkaW9TdGFzaGVkTGFzdFNhbXBsZT1udWxsLHRoaXMuX3ZpZGVvU3Rhc2hlZExhc3RTYW1wbGU9bnVsbCx0aGlzLl9hdWRpb01ldGE9bnVsbCx0aGlzLl92aWRlb01ldGE9bnVsbCx0aGlzLl9hdWRpb1NlZ21lbnRJbmZvTGlzdD1uZXcgai5NZWRpYVNlZ21lbnRJbmZvTGlzdCgiYXVkaW8iKSx0aGlzLl92aWRlb1NlZ21lbnRJbmZvTGlzdD1uZXcgai5NZWRpYVNlZ21lbnRJbmZvTGlzdCgidmlkZW8iKSx0aGlzLl9vbkluaXRTZWdtZW50PW51bGwsdGhpcy5fb25NZWRpYVNlZ21lbnQ9bnVsbCx0aGlzLl9mb3JjZUZpcnN0SURSPSEoIUguZGVmYXVsdC5jaHJvbWV8fCEoSC5kZWZhdWx0LnZlcnNpb24ubWFqb3I8NTB8fDUwPT09SC5kZWZhdWx0LnZlcnNpb24ubWFqb3ImJkguZGVmYXVsdC52ZXJzaW9uLmJ1aWxkPDI2NjEpKSx0aGlzLl9maWxsU2lsZW50QWZ0ZXJTZWVrPUguZGVmYXVsdC5tc2VkZ2V8fEguZGVmYXVsdC5tc2llLHRoaXMuX21wM1VzZU1wZWdBdWRpbz0hSC5kZWZhdWx0LmZpcmVmb3gsdGhpcy5fZmlsbEF1ZGlvVGltZXN0YW1wR2FwPXRoaXMuX2NvbmZpZy5maXhBdWRpb1RpbWVzdGFtcEdhcH10LmRlZmF1bHQ9cn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cihuKDEpKTtmdW5jdGlvbiByKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxyKG4oMikpLmRlZmF1bHQpKGwsbnVsbCxbe2tleToiaW5pdCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gbC50eXBlcz17YXZjMTpbXSxhdmNDOltdLGJ0cnQ6W10sZGluZjpbXSxkcmVmOltdLGVzZHM6W10sZnR5cDpbXSxoZGxyOltdLG1kYXQ6W10sbWRoZDpbXSxtZGlhOltdLG1maGQ6W10sbWluZjpbXSxtb29mOltdLG1vb3Y6W10sbXA0YTpbXSxtdmV4OltdLG12aGQ6W10sc2R0cDpbXSxzdGJsOltdLHN0Y286W10sc3RzYzpbXSxzdHNkOltdLHN0c3o6W10sc3R0czpbXSx0ZmR0OltdLHRmaGQ6W10sdHJhZjpbXSx0cmFrOltdLHRydW46W10sdHJleDpbXSx0a2hkOltdLHZtaGQ6W10sc21oZDpbXSwiLm1wMyI6W119KWwudHlwZXMuaGFzT3duUHJvcGVydHkoZSkmJihsLnR5cGVzW2VdPVtlLmNoYXJDb2RlQXQoMCksZS5jaGFyQ29kZUF0KDEpLGUuY2hhckNvZGVBdCgyKSxlLmNoYXJDb2RlQXQoMyldKTt2YXIgdD1sLmNvbnN0YW50cz17fTt0LkZUWVA9bmV3IFVpbnQ4QXJyYXkoWzEwNSwxMTUsMTExLDEwOSwwLDAsMCwxLDEwNSwxMTUsMTExLDEwOSw5NywxMTgsOTksNDldKSx0LlNUU0RfUFJFRklYPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDFdKSx0LlNUVFM9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMF0pLHQuU1RTQz10LlNUQ089dC5TVFRTLHQuU1RTWj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSx0LkhETFJfVklERU89bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMCwxMTgsMTA1LDEwMCwxMDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsODYsMTA1LDEwMCwxMDEsMTExLDcyLDk3LDExMCwxMDAsMTA4LDEwMSwxMTQsMF0pLHQuSERMUl9BVURJTz1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDExNSwxMTEsMTE3LDExMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw4MywxMTEsMTE3LDExMCwxMDAsNzIsOTcsMTEwLDEwMCwxMDgsMTAxLDExNCwwXSksdC5EUkVGPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDEsMCwwLDAsMTIsMTE3LDExNCwxMDgsMzIsMCwwLDAsMV0pLHQuU01IRD1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwXSksdC5WTUhEPW5ldyBVaW50OEFycmF5KFswLDAsMCwxLDAsMCwwLDAsMCwwLDAsMF0pfX0se2tleToiYm94Iix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9OCxuPW51bGwsaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkscj1pLmxlbmd0aCxhPTA7YTxyO2ErKyl0Kz1pW2FdLmJ5dGVMZW5ndGg7KG49bmV3IFVpbnQ4QXJyYXkodCkpWzBdPXQ+Pj4yNCYyNTUsblsxXT10Pj4+MTYmMjU1LG5bMl09dD4+PjgmMjU1LG5bM109MjU1JnQsbi5zZXQoZSw0KTtmb3IodmFyIHM9OCxvPTA7bzxyO28rKyluLnNldChpW29dLHMpLHMrPWlbb10uYnl0ZUxlbmd0aDtyZXR1cm4gbn19LHtrZXk6ImdlbmVyYXRlSW5pdFNlZ21lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWwuYm94KGwudHlwZXMuZnR5cCxsLmNvbnN0YW50cy5GVFlQKSxuPWwubW9vdihlKSxlPW5ldyBVaW50OEFycmF5KHQuYnl0ZUxlbmd0aCtuLmJ5dGVMZW5ndGgpO3JldHVybiBlLnNldCh0LDApLGUuc2V0KG4sdC5ieXRlTGVuZ3RoKSxlfX0se2tleToibW9vdiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9bC5tdmhkKGUudGltZXNjYWxlLGUuZHVyYXRpb24pLG49bC50cmFrKGUpLGU9bC5tdmV4KGUpO3JldHVybiBsLmJveChsLnR5cGVzLm1vb3YsdCxuLGUpfX0se2tleToibXZoZCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5ib3gobC50eXBlcy5tdmhkLG5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCxlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlLHQ+Pj4yNCYyNTUsdD4+PjE2JjI1NSx0Pj4+OCYyNTUsMjU1JnQsMCwxLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjU1LDI1NSwyNTUsMjU1XSkpfX0se2tleToidHJhayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwuYm94KGwudHlwZXMudHJhayxsLnRraGQoZSksbC5tZGlhKGUpKX19LHtrZXk6InRraGQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaWQsbj1lLmR1cmF0aW9uLGk9ZS5wcmVzZW50V2lkdGgsZT1lLnByZXNlbnRIZWlnaHQ7cmV0dXJuIGwuYm94KGwudHlwZXMudGtoZCxuZXcgVWludDhBcnJheShbMCwwLDAsNywwLDAsMCwwLDAsMCwwLDAsdD4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdCwwLDAsMCwwLG4+Pj4yNCYyNTUsbj4+PjE2JjI1NSxuPj4+OCYyNTUsMjU1Jm4sMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCwwLDAsaT4+PjgmMjU1LDI1NSZpLDAsMCxlPj4+OCYyNTUsMjU1JmUsMCwwXSkpfX0se2tleToibWRpYSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwuYm94KGwudHlwZXMubWRpYSxsLm1kaGQoZSksbC5oZGxyKGUpLGwubWluZihlKSl9fSx7a2V5OiJtZGhkIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLnRpbWVzY2FsZSxlPWUuZHVyYXRpb247cmV0dXJuIGwuYm94KGwudHlwZXMubWRoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsdD4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdCxlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlLDg1LDE5NiwwLDBdKSl9fSx7a2V5OiJoZGxyIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1udWxsLHQ9ImF1ZGlvIj09PWUudHlwZT9sLmNvbnN0YW50cy5IRExSX0FVRElPOmwuY29uc3RhbnRzLkhETFJfVklERU87cmV0dXJuIGwuYm94KGwudHlwZXMuaGRscix0KX19LHtrZXk6Im1pbmYiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW51bGwsdD0iYXVkaW8iPT09ZS50eXBlP2wuYm94KGwudHlwZXMuc21oZCxsLmNvbnN0YW50cy5TTUhEKTpsLmJveChsLnR5cGVzLnZtaGQsbC5jb25zdGFudHMuVk1IRCk7cmV0dXJuIGwuYm94KGwudHlwZXMubWluZix0LGwuZGluZigpLGwuc3RibChlKSl9fSx7a2V5OiJkaW5mIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBsLmJveChsLnR5cGVzLmRpbmYsbC5ib3gobC50eXBlcy5kcmVmLGwuY29uc3RhbnRzLkRSRUYpKX19LHtrZXk6InN0YmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBsLmJveChsLnR5cGVzLnN0YmwsbC5zdHNkKGUpLGwuYm94KGwudHlwZXMuc3R0cyxsLmNvbnN0YW50cy5TVFRTKSxsLmJveChsLnR5cGVzLnN0c2MsbC5jb25zdGFudHMuU1RTQyksbC5ib3gobC50eXBlcy5zdHN6LGwuY29uc3RhbnRzLlNUU1opLGwuYm94KGwudHlwZXMuc3RjbyxsLmNvbnN0YW50cy5TVENPKSl9fSx7a2V5OiJzdHNkIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iYXVkaW8iPT09ZS50eXBlPyJtcDMiPT09ZS5jb2RlYz9sLmJveChsLnR5cGVzLnN0c2QsbC5jb25zdGFudHMuU1RTRF9QUkVGSVgsbC5tcDMoZSkpOmwuYm94KGwudHlwZXMuc3RzZCxsLmNvbnN0YW50cy5TVFNEX1BSRUZJWCxsLm1wNGEoZSkpOmwuYm94KGwudHlwZXMuc3RzZCxsLmNvbnN0YW50cy5TVFNEX1BSRUZJWCxsLmF2YzEoZSkpfX0se2tleToibXAzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmNoYW5uZWxDb3VudCxlPWUuYXVkaW9TYW1wbGVSYXRlLGU9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCx0LDAsMTYsMCwwLDAsMCxlPj4+OCYyNTUsMjU1JmUsMCwwXSk7cmV0dXJuIGwuYm94KGwudHlwZXNbIi5tcDMiXSxlKX19LHtrZXk6Im1wNGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2hhbm5lbENvdW50LG49ZS5hdWRpb1NhbXBsZVJhdGUsbj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLHQsMCwxNiwwLDAsMCwwLG4+Pj44JjI1NSwyNTUmbiwwLDBdKTtyZXR1cm4gbC5ib3gobC50eXBlcy5tcDRhLG4sbC5lc2RzKGUpKX19LHtrZXk6ImVzZHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY29uZmlnfHxbXSxlPXQubGVuZ3RoLHQ9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsMywyMytlLDAsMSwwLDQsMTUrZSw2NCwyMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNV0uY29uY2F0KFtlXSkuY29uY2F0KHQpLmNvbmNhdChbNiwxLDJdKSk7cmV0dXJuIGwuYm94KGwudHlwZXMuZXNkcyx0KX19LHtrZXk6ImF2YzEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuYXZjYyxuPWUuY29kZWNXaWR0aCxlPWUuY29kZWNIZWlnaHQsZT1uZXcgVWludDhBcnJheShbMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsbj4+PjgmMjU1LDI1NSZuLGU+Pj44JjI1NSwyNTUmZSwwLDcyLDAsMCwwLDcyLDAsMCwwLDAsMCwwLDAsMSwxMCwxMjAsMTEzLDExMyw0NywxMDIsMTA4LDExOCw0NiwxMDYsMTE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMjQsMjU1LDI1NV0pO3JldHVybiBsLmJveChsLnR5cGVzLmF2YzEsZSxsLmJveChsLnR5cGVzLmF2Y0MsdCkpfX0se2tleToibXZleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwuYm94KGwudHlwZXMubXZleCxsLnRyZXgoZSkpfX0se2tleToidHJleCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1lLmlkLGU9bmV3IFVpbnQ4QXJyYXkoWzAsMCwwLDAsZT4+PjI0JjI1NSxlPj4+MTYmMjU1LGU+Pj44JjI1NSwyNTUmZSwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwxXSk7cmV0dXJuIGwuYm94KGwudHlwZXMudHJleCxlKX19LHtrZXk6Im1vb2YiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGwuYm94KGwudHlwZXMubW9vZixsLm1maGQoZS5zZXF1ZW5jZU51bWJlciksbC50cmFmKGUsdCkpfX0se2tleToibWZoZCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1uZXcgVWludDhBcnJheShbMCwwLDAsMCxlPj4+MjQmMjU1LGU+Pj4xNiYyNTUsZT4+PjgmMjU1LDI1NSZlXSk7cmV0dXJuIGwuYm94KGwudHlwZXMubWZoZCxlKX19LHtrZXk6InRyYWYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5pZCxpPWwuYm94KGwudHlwZXMudGZoZCxuZXcgVWludDhBcnJheShbMCwwLDAsMCxuPj4+MjQmMjU1LG4+Pj4xNiYyNTUsbj4+PjgmMjU1LDI1NSZuXSkpLG49bC5ib3gobC50eXBlcy50ZmR0LG5ldyBVaW50OEFycmF5KFswLDAsMCwwLHQ+Pj4yNCYyNTUsdD4+PjE2JjI1NSx0Pj4+OCYyNTUsMjU1JnRdKSksdD1sLnNkdHAoZSksZT1sLnRydW4oZSx0LmJ5dGVMZW5ndGgrMTYrMTYrOCsxNis4KzgpO3JldHVybiBsLmJveChsLnR5cGVzLnRyYWYsaSxuLGUsdCl9fSx7a2V5OiJzZHRwIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5zYW1wbGVzfHxbXSxuPXQubGVuZ3RoLGk9bmV3IFVpbnQ4QXJyYXkoNCtuKSxyPTA7cjxuO3IrKyl7dmFyIGE9dFtyXS5mbGFncztpW3IrNF09YS5pc0xlYWRpbmc8PDZ8YS5kZXBlbmRzT248PDR8YS5pc0RlcGVuZGVkT248PDJ8YS5oYXNSZWR1bmRhbmN5fXJldHVybiBsLmJveChsLnR5cGVzLnNkdHAsaSl9fSx7a2V5OiJ0cnVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPWUuc2FtcGxlc3x8W10saT1uLmxlbmd0aCxlPTEyKzE2Kmkscj1uZXcgVWludDhBcnJheShlKTtyLnNldChbMCwwLDE1LDEsaT4+PjI0JjI1NSxpPj4+MTYmMjU1LGk+Pj44JjI1NSwyNTUmaSwodCs9OCtlKT4+PjI0JjI1NSx0Pj4+MTYmMjU1LHQ+Pj44JjI1NSwyNTUmdF0sMCk7Zm9yKHZhciBhPTA7YTxpO2ErKyl7dmFyIHM9blthXS5kdXJhdGlvbixvPW5bYV0uc2l6ZSx1PW5bYV0uZmxhZ3MsZD1uW2FdLmN0cztyLnNldChbcz4+PjI0JjI1NSxzPj4+MTYmMjU1LHM+Pj44JjI1NSwyNTUmcyxvPj4+MjQmMjU1LG8+Pj4xNiYyNTUsbz4+PjgmMjU1LDI1NSZvLHUuaXNMZWFkaW5nPDwyfHUuZGVwZW5kc09uLHUuaXNEZXBlbmRlZE9uPDw2fHUuaGFzUmVkdW5kYW5jeTw8NHx1LmlzTm9uU3luYywwLDAsZD4+PjI0JjI1NSxkPj4+MTYmMjU1LGQ+Pj44JjI1NSwyNTUmZF0sMTIrMTYqYSl9cmV0dXJuIGwuYm94KGwudHlwZXMudHJ1bixyKX19LHtrZXk6Im1kYXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBsLmJveChsLnR5cGVzLm1kYXQsZSl9fV0pLG49bDtmdW5jdGlvbiBsKCl7KDAsaS5kZWZhdWx0KSh0aGlzLGwpfW4uaW5pdCgpLHQuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgaT1yKG4oMSkpO2Z1bmN0aW9uIHIoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIobigyKSkuZGVmYXVsdCkoYSxudWxsLFt7a2V5OiJnZXRTaWxlbnRGcmFtZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtpZigibXA0YS40MC4yIj09PWUpe2lmKDE9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMCwyMDAsMCwxMjgsMzUsMTI4XSk7aWYoMj09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFszMywwLDczLDE0NCwyLDI1LDAsMzUsMTI4XSk7aWYoMz09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFswLDIwMCwwLDEyOCwzMiwxMzIsMSwzOCw2NCw4LDEwMCwwLDE0Ml0pO2lmKDQ9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMCwyMDAsMCwxMjgsMzIsMTMyLDEsMzgsNjQsOCwxMDAsMCwxMjgsNDQsMTI4LDgsMiw1Nl0pO2lmKDU9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMCwyMDAsMCwxMjgsMzIsMTMyLDEsMzgsNjQsOCwxMDAsMCwxMzAsNDgsNCwxNTMsMCwzMywxNDQsMiw1Nl0pO2lmKDY9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMCwyMDAsMCwxMjgsMzIsMTMyLDEsMzgsNjQsOCwxMDAsMCwxMzAsNDgsNCwxNTMsMCwzMywxNDQsMiwwLDE3OCwwLDMyLDgsMjI0XSl9ZWxzZXtpZigxPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzEsNjQsMzQsMTI4LDE2Myw3OCwyMzAsMTI4LDE4Niw4LDAsMCwwLDI4LDYsMjQxLDE5MywxMCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5MCw5NF0pO2lmKDI9PT10KXJldHVybiBuZXcgVWludDhBcnJheShbMSw2NCwzNCwxMjgsMTYzLDk0LDIzMCwxMjgsMTg2LDgsMCwwLDAsMCwxNDksMCw2LDI0MSwxNjEsMTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTAsOTRdKTtpZigzPT09dClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzEsNjQsMzQsMTI4LDE2Myw5NCwyMzAsMTI4LDE4Niw4LDAsMCwwLDAsMTQ5LDAsNiwyNDEsMTYxLDEwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDkwLDk0XSl9cmV0dXJuIG51bGx9fV0pLG49YTtmdW5jdGlvbiBhKCl7KDAsaS5kZWZhdWx0KSh0aGlzLGEpfXQuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQsaCl7ZnVuY3Rpb24gYShuKXt2YXIgaT17fTtmdW5jdGlvbiByKGUpe2lmKGlbZV0pcmV0dXJuIGlbZV0uZXhwb3J0czt2YXIgdD1pW2VdPXtpOmUsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gbltlXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxyKSx0Lmw9ITAsdC5leHBvcnRzfXIubT1uLHIuYz1pLHIuaT1mdW5jdGlvbihlKXtyZXR1cm4gZX0sci5kPWZ1bmN0aW9uKGUsdCxuKXtyLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsZ2V0Om59KX0sci5yPWZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCwiYSIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9Ii8iLHIub2U9ZnVuY3Rpb24oZSl7dGhyb3cgY29uc29sZS5lcnJvcihlKSxlfTt2YXIgZT1yKHIucz1FTlRSWV9NT0RVTEUpO3JldHVybiBlLmRlZmF1bHR8fGV9dmFyIGM9IltcXC58XFwtfFxcK3xcXHd8L3xAXSsiLF89IlxcKFxccyooL1xcKi4qP1xcKi8pP1xccyouKj8oIitjKyIpLio/XFwpIjtmdW5jdGlvbiBmKGUpe3JldHVybihlKyIiKS5yZXBsYWNlKC9bLj8qK14kW1xdXFwoKXt9fC1dL2csIlxcJCYiKX1mdW5jdGlvbiBtKGUsdCxuKXt2YXIgaT17fTtpW25dPVtdO3ZhciByPXQudG9TdHJpbmcoKSx0PXIubWF0Y2goL15mdW5jdGlvblxzP1x3KlwoXHcrLFxzKlx3KyxccyooXHcrKVwpLyk7aWYoIXQpcmV0dXJuIGk7Zm9yKHZhciBhLHQ9dFsxXSxzPW5ldyBSZWdFeHAoIihcXFxcbnxcXFcpIitmKHQpK18sImciKTthPXMuZXhlYyhyKTspImRsbC1yZWZlcmVuY2UiIT09YVszXSYmaVtuXS5wdXNoKGFbM10pO2ZvcihzPW5ldyBSZWdFeHAoIlxcKCIrZih0KSsnXFwoIihkbGwtcmVmZXJlbmNlXFxzKCcrYysnKSkiXFwpXFwpJytfLCJnIik7YT1zLmV4ZWMocik7KWVbYVsyXV18fChpW25dLnB1c2goYVsxXSksZVthWzJdXT1oKGFbMV0pLm0pLGlbYVsyXV09aVthWzJdXXx8W10saVthWzJdXS5wdXNoKGFbNF0pO2Zvcih2YXIgbyx1PU9iamVjdC5rZXlzKGkpLGQ9MDtkPHUubGVuZ3RoO2QrKylmb3IodmFyIGw9MDtsPGlbdVtkXV0ubGVuZ3RoO2wrKylvPWlbdVtkXV1bbF0saXNOYU4oK28pfHwoaVt1W2RdXVtsXT0raVt1W2RdXVtsXSk7cmV0dXJuIGl9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgbj17bWFpbjpbdF19LGk9e21haW46W119LHI9e21haW46e319O2Z1bmN0aW9uKG4pe3JldHVybiBPYmplY3Qua2V5cyhuKS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZXx8MDxuW3RdLmxlbmd0aH0sITEpfShuKTspZm9yKHZhciBhPU9iamVjdC5rZXlzKG4pLHM9MDtzPGEubGVuZ3RoO3MrKyl7dmFyIG89YVtzXSx1PW5bb10ucG9wKCk7aWYocltvXT1yW29dfHx7fSwhcltvXVt1XSYmZVtvXVt1XSl7cltvXVt1XT0hMCxpW29dPWlbb118fFtdLGlbb10ucHVzaCh1KTtmb3IodmFyIGQ9bShlLGVbb11bdV0sbyksbD1PYmplY3Qua2V5cyhkKSxoPTA7aDxsLmxlbmd0aDtoKyspbltsW2hdXT1uW2xbaF1dfHxbXSxuW2xbaF1dPW5bbFtoXV0uY29uY2F0KGRbbFtoXV0pfX1yZXR1cm4gaX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17bWFpbjpoLm19LGk9KHQ9dHx8e30pLmFsbD97bWFpbjpPYmplY3Qua2V5cyhuLm1haW4pfTpzKG4sZSkscj0iIjtPYmplY3Qua2V5cyhpKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIm1haW4iIT09ZX0pLmZvckVhY2goZnVuY3Rpb24odCl7Zm9yKHZhciBlPTA7aVt0XVtlXTspZSsrO2lbdF0ucHVzaChlKSxuW3RdW2VdPSIoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7IG1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3JlcXVpcmVfXzsgfSkiLHI9cisidmFyICIrdCsiID0gKCIrYS50b1N0cmluZygpLnJlcGxhY2UoIkVOVFJZX01PRFVMRSIsSlNPTi5zdHJpbmdpZnkoZSkpKyIpKHsiK2lbdF0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKSsiOiAiK25bdF1bZV0udG9TdHJpbmcoKX0pLmpvaW4oIiwiKSsifSk7XG4ifSk7cj1yKyJuZXcgKCgiK2EudG9TdHJpbmcoKS5yZXBsYWNlKCJFTlRSWV9NT0RVTEUiLEpTT04uc3RyaW5naWZ5KGUpKSsiKSh7IitpLm1haW4ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBKU09OLnN0cmluZ2lmeShlKSsiOiAiK24ubWFpbltlXS50b1N0cmluZygpfSkuam9pbigiLCIpKyJ9KSkoc2VsZik7IixlPW5ldyB3aW5kb3cuQmxvYihbcl0se3R5cGU6InRleHQvamF2YXNjcmlwdCJ9KTtpZih0LmJhcmUpcmV0dXJuIGU7dD0od2luZG93LlVSTHx8d2luZG93LndlYmtpdFVSTHx8d2luZG93Lm1velVSTHx8d2luZG93Lm1zVVJMKS5jcmVhdGVPYmplY3RVUkwoZSksZT1uZXcgd2luZG93Lldvcmtlcih0KTtyZXR1cm4gZS5vYmplY3RVUkw9dCxlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9YyhuKDEpKSxyPWMobigyKSksYT1jKG4oMTMpKSxvPWMobig2KSksdT1jKG4oMzYpKSxzPWMobigyNDMpKSxkPW4oMjQxKSxsPW4oNyksaD0oYyhuKDI0NCkpLGMobigwKSkpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fSgwLHIuZGVmYXVsdCkoXyxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXsodGhpcy5fbWVkaWFFbGVtZW50fHx0aGlzLl9tZWRpYVNvdXJjZSkmJnRoaXMuZGV0YWNoTWVkaWFFbGVtZW50KCksdGhpcy5lPW51bGwsdGhpcy5fZW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoKSx0aGlzLl9lbWl0dGVyPW51bGx9fSx7a2V5OiJvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9lbWl0dGVyLmFkZExpc3RlbmVyKGUsdCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dGhpcy5fZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihlLHQpfX0se2tleToiYXR0YWNoTWVkaWFFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9tZWRpYVNvdXJjZSl0aHJvdyBuZXcgbC5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk1lZGlhU291cmNlIGhhcyBiZWVuIGF0dGFjaGVkIHRvIGFuIEhUTUxNZWRpYUVsZW1lbnQhIik7dmFyIHQ9dGhpcy5fbWVkaWFTb3VyY2U9bmV3IHdpbmRvdy5NZWRpYVNvdXJjZTt0LmFkZEV2ZW50TGlzdGVuZXIoInNvdXJjZW9wZW4iLHRoaXMuZS5vblNvdXJjZU9wZW4pLHQuYWRkRXZlbnRMaXN0ZW5lcigic291cmNlZW5kZWQiLHRoaXMuZS5vblNvdXJjZUVuZGVkKSx0LmFkZEV2ZW50TGlzdGVuZXIoInNvdXJjZWNsb3NlIix0aGlzLmUub25Tb3VyY2VDbG9zZSksdGhpcy5fbWVkaWFFbGVtZW50PWUsdGhpcy5fbWVkaWFTb3VyY2VPYmplY3RVUkw9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwodGhpcy5fbWVkaWFTb3VyY2UpLGUuc3JjPXRoaXMuX21lZGlhU291cmNlT2JqZWN0VVJMfX0se2tleToiZGV0YWNoTWVkaWFFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKHRoaXMuX21lZGlhU291cmNlKXt2YXIgZSx0PXRoaXMuX21lZGlhU291cmNlO2ZvcihlIGluIHRoaXMuX3NvdXJjZUJ1ZmZlcnMpe3ZhciBuPXRoaXMuX3BlbmRpbmdTZWdtZW50c1tlXTtuLnNwbGljZSgwLG4ubGVuZ3RoKSx0aGlzLl9wZW5kaW5nU2VnbWVudHNbZV09bnVsbCx0aGlzLl9wZW5kaW5nUmVtb3ZlUmFuZ2VzW2VdPW51bGwsdGhpcy5fbGFzdEluaXRTZWdtZW50c1tlXT1udWxsO249dGhpcy5fc291cmNlQnVmZmVyc1tlXTtpZihuKXtpZigiY2xvc2VkIiE9PXQucmVhZHlTdGF0ZSl7dHJ5e3QucmVtb3ZlU291cmNlQnVmZmVyKG4pfWNhdGNoKGUpe28uZGVmYXVsdC5lKHRoaXMuVEFHLGUubWVzc2FnZSl9bi5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdGhpcy5lLm9uU291cmNlQnVmZmVyRXJyb3IpLG4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidXBkYXRlZW5kIix0aGlzLmUub25Tb3VyY2VCdWZmZXJVcGRhdGVFbmQpfXRoaXMuX21pbWVUeXBlc1tlXT1udWxsLHRoaXMuX3NvdXJjZUJ1ZmZlcnNbZV09bnVsbH19aWYoIm9wZW4iPT09dC5yZWFkeVN0YXRlKXRyeXt0LmVuZE9mU3RyZWFtKCl9Y2F0Y2goZSl7by5kZWZhdWx0LmUodGhpcy5UQUcsZS5tZXNzYWdlKX10LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvdXJjZW9wZW4iLHRoaXMuZS5vblNvdXJjZU9wZW4pLHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic291cmNlZW5kZWQiLHRoaXMuZS5vblNvdXJjZUVuZGVkKSx0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvdXJjZWNsb3NlIix0aGlzLmUub25Tb3VyY2VDbG9zZSksdGhpcy5fcGVuZGluZ1NvdXJjZUJ1ZmZlckluaXQ9W10sdGhpcy5faXNCdWZmZXJGdWxsPSExLHRoaXMuX2lkckxpc3QuY2xlYXIoKSx0aGlzLl9tZWRpYVNvdXJjZT1udWxsfXRoaXMuX21lZGlhRWxlbWVudCYmKHRoaXMuX21lZGlhRWxlbWVudC5zcmM9IiIsdGhpcy5fbWVkaWFFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgic3JjIiksdGhpcy5fbWVkaWFFbGVtZW50PW51bGwpLHRoaXMuX21lZGlhU291cmNlT2JqZWN0VVJMJiYod2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5fbWVkaWFTb3VyY2VPYmplY3RVUkwpLHRoaXMuX21lZGlhU291cmNlT2JqZWN0VVJMPW51bGwpLHRoaXMuX2hhc0F1ZGlvPSEwfX0se2tleToiY2hlY2tBdWRpb1NvdXJjZUJ1ZmZlckluaXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9zb3VyY2VCdWZmZXJzLmF1ZGlvfHwiYXVkaW8iPT09ZS50eXBlfHwhdGhpcy5faGFzQXVkaW99fSx7a2V5OiJfb25BdWRpb1NvdXJjZUJ1ZmZlckluaXRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwPHRoaXMuX3BlbmRpbmdTb3VyY2VCdWZmZXJJbml0Lmxlbmd0aClmb3IodmFyIGU9dGhpcy5fcGVuZGluZ1NvdXJjZUJ1ZmZlckluaXQ7ZS5sZW5ndGg7KXt2YXIgdD1lLnNoaWZ0KCk7dGhpcy5hcHBlbmRJbml0U2VnbWVudCh0LCEwKX10aGlzLl9oYXNQZW5kaW5nU2VnbWVudHMoKSYmdGhpcy5fZG9BcHBlbmRTZWdtZW50cygpLHRoaXMuX2VtaXR0ZXIuZW1pdChzLmRlZmF1bHQuU09VUkNFX09QRU4pfX0se2tleToiY2hlY2tNZWRpYVNvdXJjZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISghdGhpcy5fbWVkaWFTb3VyY2V8fCJvcGVuIiE9PXRoaXMuX21lZGlhU291cmNlLnJlYWR5U3RhdGUpfX0se2tleToiYXBwZW5kSW5pdFNlZ21lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuY2hlY2tNZWRpYVNvdXJjZSgiYXBwZW5kSW5pdFNlZ21lbnQiKXx8IXRoaXMuY2hlY2tBdWRpb1NvdXJjZUJ1ZmZlckluaXQoZSkpcmV0dXJuIHRoaXMuX3BlbmRpbmdTb3VyY2VCdWZmZXJJbml0LnB1c2goZSksdm9pZCB0aGlzLl9wZW5kaW5nU2VnbWVudHNbZS50eXBlXS5wdXNoKGUpO3ZhciBuPWUsaT0iIituLmNvbnRhaW5lcjtuLmNvZGVjJiYwPG4uY29kZWMubGVuZ3RoJiYoaSs9Ijtjb2RlY3M9IituLmNvZGVjKTtlPSExO2lmKHRoaXMuX2xhc3RJbml0U2VnbWVudHNbbi50eXBlXT1uLGkhPT10aGlzLl9taW1lVHlwZXNbbi50eXBlXSl7aWYodGhpcy5fbWltZVR5cGVzW24udHlwZV0pby5kZWZhdWx0LnYodGhpcy5UQUcsIk5vdGljZTogIituLnR5cGUrIiBtaW1lVHlwZSBjaGFuZ2VkLCBvcmlnaW46ICIrdGhpcy5fbWltZVR5cGVzW24udHlwZV0rIiwgdGFyZ2V0OiAiK2kpO2Vsc2V7ZT0hMCxjb25zb2xlLmluZm8oIltkZWJ1Z10gJWMiKygwLGguZGVmYXVsdCkoKS5mb3JtYXQoIllZWVktTU0tREQgSEg6bW06c3MuU1NTIikrIiVjIGFwcGVuZEluaXRTZWdtZW50IiwiY29sb3I6IGJsdWUiLCJjb2xvcjogYmxhY2siLHRoaXMuX21lZGlhRWxlbWVudC5yZWFkeVN0YXRlLGkpO3RyeXt2YXIgcj10aGlzLl9zb3VyY2VCdWZmZXJzW24udHlwZV09dGhpcy5fbWVkaWFTb3VyY2UuYWRkU291cmNlQnVmZmVyKGkpO3IuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHRoaXMuZS5vblNvdXJjZUJ1ZmZlckVycm9yKSxyLmFkZEV2ZW50TGlzdGVuZXIoInVwZGF0ZWVuZCIsdGhpcy5lLm9uU291cmNlQnVmZmVyVXBkYXRlRW5kKSwiYXVkaW8iPT09bi50eXBlJiZ0aGlzLl9vbkF1ZGlvU291cmNlQnVmZmVySW5pdGVkKCl9Y2F0Y2goZSl7cmV0dXJuIG8uZGVmYXVsdC5lKHRoaXMuVEFHLGUubWVzc2FnZSx0aGlzLl9tZWRpYUVsZW1lbnQuZXJyb3IpLHZvaWQgdGhpcy5fZW1pdHRlci5lbWl0KHMuZGVmYXVsdC5TT1VSQ0VfQUREX0VSUk9SLHtjb2RlOmUuY29kZSxtc2c6ZS5tZXNzYWdlfSl9fXRoaXMuX21pbWVUeXBlc1tuLnR5cGVdPWl9dHx8dGhpcy5fcGVuZGluZ1NlZ21lbnRzW24udHlwZV0ucHVzaChuKSxlfHx0aGlzLl9zb3VyY2VCdWZmZXJzW24udHlwZV0mJiF0aGlzLl9zb3VyY2VCdWZmZXJzW24udHlwZV0udXBkYXRpbmcmJnRoaXMuX2RvQXBwZW5kU2VnbWVudHMoKSx1LmRlZmF1bHQuc2FmYXJpJiYiYXVkaW8vbXBlZyI9PT1uLmNvbnRhaW5lciYmMDxuLm1lZGlhRHVyYXRpb24mJih0aGlzLl9yZXF1aXJlU2V0TWVkaWFEdXJhdGlvbj0hMCx0aGlzLl9wZW5kaW5nTWVkaWFEdXJhdGlvbj1uLm1lZGlhRHVyYXRpb24vMWUzLHRoaXMuX3VwZGF0ZU1lZGlhU291cmNlRHVyYXRpb24oKSl9fSx7a2V5OiJhcHBlbmRNZWRpYVNlZ21lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuY2hlY2tNZWRpYVNvdXJjZSgiYXBwZW5kTWVkaWFTZWdtZW50IikmJih0aGlzLl9wZW5kaW5nU2VnbWVudHNbKHQ9ZSkudHlwZV0ucHVzaCh0KSx0aGlzLl9jb25maWcuYXV0b0NsZWFudXBTb3VyY2VCdWZmZXImJnRoaXMuX25lZWRDbGVhbnVwU291cmNlQnVmZmVyKCkmJnRoaXMuX2RvQ2xlYW51cFNvdXJjZUJ1ZmZlcigpLCEoZT10aGlzLl9zb3VyY2VCdWZmZXJzW3QudHlwZV0pfHxlLnVwZGF0aW5nfHx0aGlzLl9oYXNQZW5kaW5nUmVtb3ZlUmFuZ2VzKCk/dGhpcy5faGFzQXVkaW8mJjEwPHRoaXMuX3BlbmRpbmdTZWdtZW50c1t0LnR5cGVdLmxlbmd0aCYmKHRoaXMuX2hhc0F1ZGlvPSExLHRoaXMuX29uQXVkaW9Tb3VyY2VCdWZmZXJJbml0ZWQoKSk6dGhpcy5fZG9BcHBlbmRTZWdtZW50cygpKX19LHtrZXk6InNlZWsiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2hlY2tNZWRpYVNvdXJjZSgic2VlayIpKWZvcih2YXIgdCBpbiB0aGlzLl9zb3VyY2VCdWZmZXJzKWlmKHRoaXMuX3NvdXJjZUJ1ZmZlcnNbdF0pe3ZhciBuPXRoaXMuX3NvdXJjZUJ1ZmZlcnNbdF07aWYoIm9wZW4iPT09dGhpcy5fbWVkaWFTb3VyY2UucmVhZHlTdGF0ZSl0cnl7bi5hYm9ydCgpfWNhdGNoKGUpe28uZGVmYXVsdC5lKHRoaXMuVEFHLGUubWVzc2FnZSl9dGhpcy5faWRyTGlzdC5jbGVhcigpO3ZhciBpPXRoaXMuX3BlbmRpbmdTZWdtZW50c1t0XTtpZihpLnNwbGljZSgwLGkubGVuZ3RoKSwiY2xvc2VkIiE9PXRoaXMuX21lZGlhU291cmNlLnJlYWR5U3RhdGUpe2Zvcih2YXIgcj0wO3I8bi5idWZmZXJlZC5sZW5ndGg7cisrKXt2YXIgYT1uLmJ1ZmZlcmVkLnN0YXJ0KHIpLHM9bi5idWZmZXJlZC5lbmQocik7dGhpcy5fcGVuZGluZ1JlbW92ZVJhbmdlc1t0XS5wdXNoKHtzdGFydDphLGVuZDpzfSl9bi51cGRhdGluZ3x8dGhpcy5fZG9SZW1vdmVSYW5nZXMoInNlZWsiKSwhdS5kZWZhdWx0LnNhZmFyaXx8KGk9dGhpcy5fbGFzdEluaXRTZWdtZW50c1t0XSkmJih0aGlzLl9wZW5kaW5nU2VnbWVudHNbdF0ucHVzaChpKSxuLnVwZGF0aW5nfHx0aGlzLl9kb0FwcGVuZFNlZ21lbnRzKCkpfX19fSx7a2V5OiJlbmRPZlN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9tZWRpYVNvdXJjZSx0PXRoaXMuX3NvdXJjZUJ1ZmZlcnM7ZSYmIm9wZW4iPT09ZS5yZWFkeVN0YXRlP3QudmlkZW8mJnQudmlkZW8udXBkYXRpbmd8fHQuYXVkaW8mJnQuYXVkaW8udXBkYXRpbmc/dGhpcy5faGFzUGVuZGluZ0Vvcz0hMDoodGhpcy5faGFzUGVuZGluZ0Vvcz0hMSxlLmVuZE9mU3RyZWFtKCkpOmUmJiJjbG9zZWQiPT09ZS5yZWFkeVN0YXRlJiZ0aGlzLl9oYXNQZW5kaW5nU2VnbWVudHMoKSYmKHRoaXMuX2hhc1BlbmRpbmdFb3M9ITApfX0se2tleToiZ2V0TmVhcmVzdEtleWZyYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faWRyTGlzdC5nZXRMYXN0U3luY1BvaW50QmVmb3JlRHRzKGUpfX0se2tleToiY2hlY2tTb3VyY2VCdWZmZXJOdWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9ITA7Zm9yKGUgaW4gdGhpcy5fc291cmNlQnVmZmVycylpZihudWxsIT10aGlzLl9zb3VyY2VCdWZmZXJzW2VdKXt0PSExO2JyZWFrfXJldHVybiB0fX0se2tleToiX25lZWRDbGVhbnVwU291cmNlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9jb25maWcuYXV0b0NsZWFudXBTb3VyY2VCdWZmZXIpcmV0dXJuITE7aWYoIXRoaXMuY2hlY2tNZWRpYVNvdXJjZSgiX25lZWRDbGVhbnVwU291cmNlQnVmZmVyIikpcmV0dXJuITE7dmFyIGUsdD10aGlzLl9tZWRpYUVsZW1lbnQuY3VycmVudFRpbWU7Zm9yKGUgaW4gdGhpcy5fc291cmNlQnVmZmVycyl7dmFyIG49dGhpcy5fc291cmNlQnVmZmVyc1tlXTtpZihuKXtuPW4uYnVmZmVyZWQ7aWYoMTw9bi5sZW5ndGgmJnQtbi5zdGFydCgwKT49dGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwTWF4QmFja3dhcmREdXJhdGlvbilyZXR1cm4hMH19cmV0dXJuITF9fSx7a2V5OiJfZG9DbGVhbnVwU291cmNlQnVmZmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZTtpZih0aGlzLmNoZWNrTWVkaWFTb3VyY2UoIl9kb0NsZWFudXBTb3VyY2VCdWZmZXIiKSlmb3IodmFyIHQgaW4gdGhpcy5fc291cmNlQnVmZmVycyl7dmFyIG49dGhpcy5fc291cmNlQnVmZmVyc1t0XTtpZihuKXtmb3IodmFyIGk9bi5idWZmZXJlZCxyPSExLGE9MDthPGkubGVuZ3RoO2ErKyl7dmFyIHMsbz1pLnN0YXJ0KGEpLHU9aS5lbmQoYSk7bzw9ZSYmZTx1KzM/ZS1vPj10aGlzLl9jb25maWcuYXV0b0NsZWFudXBNYXhCYWNrd2FyZER1cmF0aW9uJiYocj0hMCxzPWUtdGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwTWluQmFja3dhcmREdXJhdGlvbix0aGlzLl9wZW5kaW5nUmVtb3ZlUmFuZ2VzW3RdLnB1c2goe3N0YXJ0Om8sZW5kOnN9KSk6dTxlJiYocj0hMCx0aGlzLl9wZW5kaW5nUmVtb3ZlUmFuZ2VzW3RdLnB1c2goe3N0YXJ0Om8sZW5kOnV9KSl9ciYmIW4udXBkYXRpbmcmJnRoaXMuX2RvUmVtb3ZlUmFuZ2VzKCJfZG9DbGVhbnVwU291cmNlQnVmZmVyIil9fX19LHtrZXk6Il91cGRhdGVNZWRpYVNvdXJjZUR1cmF0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy5jaGVja01lZGlhU291cmNlKCJfdXBkYXRlTWVkaWFTb3VyY2VEdXJhdGlvbiIpJiYodD10aGlzLl9zb3VyY2VCdWZmZXJzLDAhPT10aGlzLl9tZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSYmIm9wZW4iPT09dGhpcy5fbWVkaWFTb3VyY2UucmVhZHlTdGF0ZSYmKHQudmlkZW8mJnQudmlkZW8udXBkYXRpbmd8fHQuYXVkaW8mJnQuYXVkaW8udXBkYXRpbmd8fChlPXRoaXMuX21lZGlhU291cmNlLmR1cmF0aW9uLDA8KHQ9dGhpcy5fcGVuZGluZ01lZGlhRHVyYXRpb24pJiYoaXNOYU4oZSl8fGU8dCkmJihvLmRlZmF1bHQudih0aGlzLlRBRywiVXBkYXRlIE1lZGlhU291cmNlIGR1cmF0aW9uIGZyb20gIitlKyIgdG8gIit0KSx0aGlzLl9tZWRpYVNvdXJjZS5kdXJhdGlvbj10KSx0aGlzLl9yZXF1aXJlU2V0TWVkaWFEdXJhdGlvbj0hMSx0aGlzLl9wZW5kaW5nTWVkaWFEdXJhdGlvbj0wKSkpfX0se2tleToiX2RvUmVtb3ZlUmFuZ2VzIix2YWx1ZTpmdW5jdGlvbihlKXtpZih0aGlzLmNoZWNrTWVkaWFTb3VyY2UoIl9kb1JlbW92ZVJhbmdlcyIpKWZvcih2YXIgdCBpbiB0aGlzLl9wZW5kaW5nUmVtb3ZlUmFuZ2VzKWlmKHRoaXMuX3NvdXJjZUJ1ZmZlcnNbdF0mJiF0aGlzLl9zb3VyY2VCdWZmZXJzW3RdLnVwZGF0aW5nKWZvcih2YXIgbj10aGlzLl9zb3VyY2VCdWZmZXJzW3RdLGk9dGhpcy5fcGVuZGluZ1JlbW92ZVJhbmdlc1t0XTtpLmxlbmd0aCYmIW4udXBkYXRpbmc7KXt2YXIgcj1pLnNoaWZ0KCk7bi5yZW1vdmUoci5zdGFydCxyLmVuZCl9fX0se2tleToiX2RvQXBwZW5kU2VnbWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5jaGVja01lZGlhU291cmNlKCJfZG9BcHBlbmRTZWdtZW50cyIpKXt2YXIgdCxlPXRoaXMuX3BlbmRpbmdTZWdtZW50cztmb3IodCBpbiBlKWlmKHRoaXMuX3NvdXJjZUJ1ZmZlcnNbdF0mJiF0aGlzLl9zb3VyY2VCdWZmZXJzW3RdLnVwZGF0aW5nJiYwPGVbdF0ubGVuZ3RoKXt2YXIgbixpLHI9ZVt0XS5zaGlmdCgpO2lmKHIudGltZXN0YW1wT2Zmc2V0JiYobj10aGlzLl9zb3VyY2VCdWZmZXJzW3RdLnRpbWVzdGFtcE9mZnNldCxpPXIudGltZXN0YW1wT2Zmc2V0LzFlMywuMTxNYXRoLmFicyhuLWkpJiYoby5kZWZhdWx0LnYodGhpcy5UQUcsIlVwZGF0ZSBNUEVHIGF1ZGlvIHRpbWVzdGFtcE9mZnNldCBmcm9tICIrbisiIHRvICIraSksdGhpcy5fc291cmNlQnVmZmVyc1t0XS50aW1lc3RhbXBPZmZzZXQ9aSksZGVsZXRlIHIudGltZXN0YW1wT2Zmc2V0KSxyLmRhdGEmJjAhPT1yLmRhdGEuYnl0ZUxlbmd0aCl0cnl7dGhpcy5fc291cmNlQnVmZmVyc1t0XS5hcHBlbmRCdWZmZXIoci5kYXRhKSx0aGlzLl9pc0J1ZmZlckZ1bGw9ITEsInZpZGVvIj09PXQmJnIuaGFzT3duUHJvcGVydHkoImluZm8iKSYmdGhpcy5faWRyTGlzdC5hcHBlbmRBcnJheShyLmluZm8uc3luY1BvaW50cyl9Y2F0Y2goZSl7dGhpcy5fcGVuZGluZ1NlZ21lbnRzW3RdLnVuc2hpZnQociksMjI9PT1lLmNvZGU/KHRoaXMuX2lzQnVmZmVyRnVsbHx8dGhpcy5fZW1pdHRlci5lbWl0KHMuZGVmYXVsdC5CVUZGRVJfRlVMTCksdGhpcy5faXNCdWZmZXJGdWxsPSEwKTooby5kZWZhdWx0LmUodGhpcy5UQUcsZS5tZXNzYWdlLHRoaXMuX21lZGlhRWxlbWVudC5lcnJvci5tZXNzYWdlKSx0aGlzLl9lbWl0dGVyLmVtaXQocy5kZWZhdWx0LkVSUk9SLHtjb2RlOmUuY29kZSxtc2c6ZS5tZXNzYWdlfSkpfX19fX0se2tleToiX29uU291cmNlT3BlbiIsdmFsdWU6ZnVuY3Rpb24oKXtpZihvLmRlZmF1bHQudih0aGlzLlRBRywiTWVkaWFTb3VyY2Ugb25Tb3VyY2VPcGVuIiksdGhpcy5fbWVkaWFTb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigic291cmNlb3BlbiIsdGhpcy5lLm9uU291cmNlT3BlbiksMDx0aGlzLl9wZW5kaW5nU291cmNlQnVmZmVySW5pdC5sZW5ndGgpZm9yKHZhciBlPXRoaXMuX3BlbmRpbmdTb3VyY2VCdWZmZXJJbml0O2UubGVuZ3RoOyl7dmFyIHQ9ZS5zaGlmdCgpO3RoaXMuYXBwZW5kSW5pdFNlZ21lbnQodCwhMCl9dGhpcy5faGFzUGVuZGluZ1NlZ21lbnRzKCkmJnRoaXMuX2RvQXBwZW5kU2VnbWVudHMoKSx0aGlzLl9lbWl0dGVyLmVtaXQocy5kZWZhdWx0LlNPVVJDRV9PUEVOKX19LHtrZXk6Il9vblNvdXJjZUVuZGVkIix2YWx1ZTpmdW5jdGlvbigpe28uZGVmYXVsdC52KHRoaXMuVEFHLCJNZWRpYVNvdXJjZSBvblNvdXJjZUVuZGVkIiksdGhpcy5fZW1pdHRlci5lbWl0KHMuZGVmYXVsdC5TT1VSQ0VfRU5EKX19LHtrZXk6Il9vblNvdXJjZUNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe28uZGVmYXVsdC52KHRoaXMuVEFHLCJNZWRpYVNvdXJjZSBvblNvdXJjZUNsb3NlIiksdGhpcy5fbWVkaWFTb3VyY2UmJm51bGwhPXRoaXMuZSYmKHRoaXMuX21lZGlhU291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvdXJjZW9wZW4iLHRoaXMuZS5vblNvdXJjZU9wZW4pLHRoaXMuX21lZGlhU291cmNlLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNvdXJjZWVuZGVkIix0aGlzLmUub25Tb3VyY2VFbmRlZCksdGhpcy5fbWVkaWFTb3VyY2UucmVtb3ZlRXZlbnRMaXN0ZW5lcigic291cmNlY2xvc2UiLHRoaXMuZS5vblNvdXJjZUNsb3NlKSksdGhpcy5fZW1pdHRlci5lbWl0KHMuZGVmYXVsdC5TT1VSQ0VfQ0xPU0UpfX0se2tleToiX2hhc1BlbmRpbmdTZWdtZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nU2VnbWVudHM7cmV0dXJuIDA8ZS52aWRlby5sZW5ndGh8fDA8ZS5hdWRpby5sZW5ndGh9fSx7a2V5OiJfaGFzUGVuZGluZ1JlbW92ZVJhbmdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wZW5kaW5nUmVtb3ZlUmFuZ2VzO3JldHVybiAwPGUudmlkZW8ubGVuZ3RofHwwPGUuYXVkaW8ubGVuZ3RofX0se2tleToiX29uU291cmNlQnVmZmVyVXBkYXRlRW5kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX3JlcXVpcmVTZXRNZWRpYUR1cmF0aW9uP3RoaXMuX3VwZGF0ZU1lZGlhU291cmNlRHVyYXRpb24oKTp0aGlzLl9oYXNQZW5kaW5nUmVtb3ZlUmFuZ2VzKCk/dGhpcy5fZG9SZW1vdmVSYW5nZXMoIl9vblNvdXJjZUJ1ZmZlclVwZGF0ZUVuZCIpOnRoaXMuX2hhc1BlbmRpbmdTZWdtZW50cygpP3RoaXMuX2RvQXBwZW5kU2VnbWVudHMoKTp0aGlzLl9oYXNQZW5kaW5nRW9zJiZ0aGlzLmVuZE9mU3RyZWFtKCksdGhpcy5fZW1pdHRlci5lbWl0KHMuZGVmYXVsdC5VUERBVEVfRU5EKX19LHtrZXk6Il9vblNvdXJjZUJ1ZmZlckVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtvLmRlZmF1bHQuZSh0aGlzLlRBRywiU291cmNlQnVmZmVyIEVycm9yOiAiLGUpLHRoaXMuX2VtaXR0ZXIuZW1pdChzLmRlZmF1bHQuRVJST1Ise2NvZGU6ZS5jb2RlLG1zZzplLm1lc3NhZ2V9KX19XSkscj1fO2Z1bmN0aW9uIF8oZSl7KDAsaS5kZWZhdWx0KSh0aGlzLF8pLHRoaXMuVEFHPSJNU0VDb250cm9sbGVyIix0aGlzLl9jb25maWc9ZSx0aGlzLl9lbWl0dGVyPW5ldyBhLmRlZmF1bHQsdGhpcy5fY29uZmlnLmlzTGl2ZSYmbnVsbD09dGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwU291cmNlQnVmZmVyJiYodGhpcy5fY29uZmlnLmF1dG9DbGVhbnVwU291cmNlQnVmZmVyPSEwKSx0aGlzLmU9e29uU291cmNlT3Blbjp0aGlzLl9vblNvdXJjZU9wZW4uYmluZCh0aGlzKSxvblNvdXJjZUVuZGVkOnRoaXMuX29uU291cmNlRW5kZWQuYmluZCh0aGlzKSxvblNvdXJjZUNsb3NlOnRoaXMuX29uU291cmNlQ2xvc2UuYmluZCh0aGlzKSxvblNvdXJjZUJ1ZmZlckVycm9yOnRoaXMuX29uU291cmNlQnVmZmVyRXJyb3IuYmluZCh0aGlzKSxvblNvdXJjZUJ1ZmZlclVwZGF0ZUVuZDp0aGlzLl9vblNvdXJjZUJ1ZmZlclVwZGF0ZUVuZC5iaW5kKHRoaXMpfSx0aGlzLl9tZWRpYVNvdXJjZT1udWxsLHRoaXMuX21lZGlhU291cmNlT2JqZWN0VVJMPW51bGwsdGhpcy5fbWVkaWFFbGVtZW50PW51bGwsdGhpcy5faGFzQXVkaW89ITAsdGhpcy5faXNCdWZmZXJGdWxsPSExLHRoaXMuX2hhc1BlbmRpbmdFb3M9ITEsdGhpcy5fcmVxdWlyZVNldE1lZGlhRHVyYXRpb249ITEsdGhpcy5fcGVuZGluZ01lZGlhRHVyYXRpb249MCx0aGlzLl9wZW5kaW5nU291cmNlQnVmZmVySW5pdD1bXSx0aGlzLl9taW1lVHlwZXM9e3ZpZGVvOm51bGwsYXVkaW86bnVsbH0sdGhpcy5fc291cmNlQnVmZmVycz17dmlkZW86bnVsbCxhdWRpbzpudWxsfSx0aGlzLl9sYXN0SW5pdFNlZ21lbnRzPXt2aWRlbzpudWxsLGF1ZGlvOm51bGx9LHRoaXMuX3BlbmRpbmdTZWdtZW50cz17dmlkZW86W10sYXVkaW86W119LHRoaXMuX3BlbmRpbmdSZW1vdmVSYW5nZXM9e3ZpZGVvOltdLGF1ZGlvOltdfSx0aGlzLl9pZHJMaXN0PW5ldyBkLklEUlNhbXBsZUxpc3R9dC5kZWZhdWx0PXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWMobigxNCkpLHI9YyhuKDIzKSksYT1jKG4oMTIpKSxzPWMobigxKSksbz1jKG4oMikpLHU9YyhuKDEzKSksZD1jKG4oNDMpKSxsPW4oNzIpLGg9big3KTtmdW5jdGlvbiBjKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX0oMCxvLmRlZmF1bHQpKF8sW3trZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFFbGVtZW50JiYodGhpcy51bmxvYWQoKSx0aGlzLmRldGFjaE1lZGlhRWxlbWVudCgpKSx0aGlzLmU9bnVsbCx0aGlzLl9tZWRpYURhdGFTb3VyY2U9bnVsbCx0aGlzLl9lbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycygpLHRoaXMuX2VtaXR0ZXI9bnVsbH19LHtrZXk6Im9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXM7ZT09PWQuZGVmYXVsdC5NRURJQV9JTkZPP251bGwhPXRoaXMuX21lZGlhRWxlbWVudCYmMCE9PXRoaXMuX21lZGlhRWxlbWVudC5yZWFkeVN0YXRlJiZpLmRlZmF1bHQucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtuLl9lbWl0dGVyLmVtaXQoZC5kZWZhdWx0Lk1FRElBX0lORk8sbi5tZWRpYUluZm8pfSk6ZT09PWQuZGVmYXVsdC5TVEFUSVNUSUNTX0lORk8mJm51bGwhPXRoaXMuX21lZGlhRWxlbWVudCYmMCE9PXRoaXMuX21lZGlhRWxlbWVudC5yZWFkeVN0YXRlJiZpLmRlZmF1bHQucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtuLl9lbWl0dGVyLmVtaXQoZC5kZWZhdWx0LlNUQVRJU1RJQ1NfSU5GTyxuLnN0YXRpc3RpY3NJbmZvKX0pLHRoaXMuX2VtaXR0ZXIuYWRkTGlzdGVuZXIoZSx0KX19LHtrZXk6Im9mZiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9lbWl0dGVyLnJlbW92ZUxpc3RlbmVyKGUsdCl9fSx7a2V5OiJhdHRhY2hNZWRpYUVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCh0aGlzLl9tZWRpYUVsZW1lbnQ9ZSkuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVkbWV0YWRhdGEiLHRoaXMuZS5vbnZMb2FkZWRNZXRhZGF0YSksbnVsbCE9dGhpcy5fcGVuZGluZ1NlZWtUaW1lKXRyeXtlLmN1cnJlbnRUaW1lPXRoaXMuX3BlbmRpbmdTZWVrVGltZSx0aGlzLl9wZW5kaW5nU2Vla1RpbWU9bnVsbH1jYXRjaChlKXt9fX0se2tleToiZGV0YWNoTWVkaWFFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX21lZGlhRWxlbWVudCYmKHRoaXMuX21lZGlhRWxlbWVudC5zcmM9IiIsdGhpcy5fbWVkaWFFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgic3JjIiksdGhpcy5fbWVkaWFFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWRlZG1ldGFkYXRhIix0aGlzLmUub252TG9hZGVkTWV0YWRhdGEpLHRoaXMuX21lZGlhRWxlbWVudD1udWxsKSxudWxsIT10aGlzLl9zdGF0aXN0aWNzUmVwb3J0ZXImJih3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9zdGF0aXN0aWNzUmVwb3J0ZXIpLHRoaXMuX3N0YXRpc3RpY3NSZXBvcnRlcj1udWxsKX19LHtrZXk6ImxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX21lZGlhRWxlbWVudCl0aHJvdyBuZXcgaC5JbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkhUTUxNZWRpYUVsZW1lbnQgbXVzdCBiZSBhdHRhY2hlZCBiZWZvcmUgbG9hZCgpISIpO3RoaXMuX21lZGlhRWxlbWVudC5zcmM9dGhpcy5fbWVkaWFEYXRhU291cmNlLnVybCwwPHRoaXMuX21lZGlhRWxlbWVudC5yZWFkeVN0YXRlJiYodGhpcy5fbWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lPTApLHRoaXMuX21lZGlhRWxlbWVudC5wcmVsb2FkPSJhdXRvIix0aGlzLl9tZWRpYUVsZW1lbnQubG9hZCgpLHRoaXMuX3N0YXRpc3RpY3NSZXBvcnRlcj13aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fcmVwb3J0U3RhdGlzdGljc0luZm8uYmluZCh0aGlzKSx0aGlzLl9jb25maWcuc3RhdGlzdGljc0luZm9SZXBvcnRJbnRlcnZhbCl9fSx7a2V5OiJ1bmxvYWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFFbGVtZW50JiYodGhpcy5fbWVkaWFFbGVtZW50LnNyYz0iIix0aGlzLl9tZWRpYUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCJzcmMiKSksbnVsbCE9dGhpcy5fc3RhdGlzdGljc1JlcG9ydGVyJiYod2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fc3RhdGlzdGljc1JlcG9ydGVyKSx0aGlzLl9zdGF0aXN0aWNzUmVwb3J0ZXI9bnVsbCl9fSx7a2V5OiJwbGF5Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYUVsZW1lbnQucGxheSgpfX0se2tleToicGF1c2UiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fbWVkaWFFbGVtZW50LnBhdXNlKCl9fSx7a2V5OiJfb252TG9hZGVkTWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe251bGwhPXRoaXMuX3BlbmRpbmdTZWVrVGltZSYmKHRoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZT10aGlzLl9wZW5kaW5nU2Vla1RpbWUsdGhpcy5fcGVuZGluZ1NlZWtUaW1lPW51bGwpLHRoaXMuX2VtaXR0ZXIuZW1pdChkLmRlZmF1bHQuTUVESUFfSU5GTyx0aGlzLm1lZGlhSW5mbyl9fSx7a2V5OiJfcmVwb3J0U3RhdGlzdGljc0luZm8iLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fZW1pdHRlci5lbWl0KGQuZGVmYXVsdC5TVEFUSVNUSUNTX0lORk8sdGhpcy5zdGF0aXN0aWNzSW5mbyl9fSx7a2V5OiJ0eXBlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHlwZX19LHtrZXk6ImJ1ZmZlcmVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFFbGVtZW50LmJ1ZmZlcmVkfX0se2tleToiZHVyYXRpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYUVsZW1lbnQuZHVyYXRpb259fSx7a2V5OiJ2b2x1bWUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYUVsZW1lbnQudm9sdW1lfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbWVkaWFFbGVtZW50LnZvbHVtZT1lfX0se2tleToibXV0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZWRpYUVsZW1lbnQubXV0ZWR9LHNldDpmdW5jdGlvbihlKXt0aGlzLl9tZWRpYUVsZW1lbnQubXV0ZWQ9ZX19LHtrZXk6ImN1cnJlbnRUaW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWVkaWFFbGVtZW50P3RoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZTowfSxzZXQ6ZnVuY3Rpb24oZSl7dGhpcy5fbWVkaWFFbGVtZW50P3RoaXMuX21lZGlhRWxlbWVudC5jdXJyZW50VGltZT1lOnRoaXMuX3BlbmRpbmdTZWVrVGltZT1lfX0se2tleToibWVkaWFJbmZvIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT17bWltZVR5cGU6KHRoaXMuX21lZGlhRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxBdWRpb0VsZW1lbnQ/ImF1ZGlvLyI6InZpZGVvLyIpK3RoaXMuX21lZGlhRGF0YVNvdXJjZS50eXBlfTtyZXR1cm4gdGhpcy5fbWVkaWFFbGVtZW50JiYoZS5kdXJhdGlvbj1NYXRoLmZsb29yKDFlMyp0aGlzLl9tZWRpYUVsZW1lbnQuZHVyYXRpb24pLHRoaXMuX21lZGlhRWxlbWVudCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQmJihlLndpZHRoPXRoaXMuX21lZGlhRWxlbWVudC52aWRlb1dpZHRoLGUuaGVpZ2h0PXRoaXMuX21lZGlhRWxlbWVudC52aWRlb0hlaWdodCkpLGV9fSx7a2V5OiJzdGF0aXN0aWNzSW5mbyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9e3BsYXllclR5cGU6dGhpcy5fdHlwZSx1cmw6dGhpcy5fbWVkaWFEYXRhU291cmNlLnVybH07aWYoISh0aGlzLl9tZWRpYUVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MVmlkZW9FbGVtZW50KSlyZXR1cm4gZTt2YXIgdCxuPSEwLGk9MCxyPTA7cmV0dXJuIHRoaXMuX21lZGlhRWxlbWVudC5nZXRWaWRlb1BsYXliYWNrUXVhbGl0eT8oaT0odD10aGlzLl9tZWRpYUVsZW1lbnQuZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKSkudG90YWxWaWRlb0ZyYW1lcyxyPXQuZHJvcHBlZFZpZGVvRnJhbWVzKTpudWxsIT10aGlzLl9tZWRpYUVsZW1lbnQud2Via2l0RGVjb2RlZEZyYW1lQ291bnQ/KGk9dGhpcy5fbWVkaWFFbGVtZW50LndlYmtpdERlY29kZWRGcmFtZUNvdW50LHI9dGhpcy5fbWVkaWFFbGVtZW50LndlYmtpdERyb3BwZWRGcmFtZUNvdW50KTpuPSExLG4mJihlLmRlY29kZWRGcmFtZXM9aSxlLmRyb3BwZWRGcmFtZXM9ciksZX19XSksbz1fO2Z1bmN0aW9uIF8oZSx0KXtpZigoMCxzLmRlZmF1bHQpKHRoaXMsXyksdGhpcy5UQUc9Ik5hdGl2ZVBsYXllciIsdGhpcy5fdHlwZT0iTmF0aXZlUGxheWVyIix0aGlzLl9lbWl0dGVyPW5ldyB1LmRlZmF1bHQsdGhpcy5fY29uZmlnPSgwLGwuY3JlYXRlRGVmYXVsdENvbmZpZykoKSwib2JqZWN0Ij09PSh2b2lkIDA9PT10PyJ1bmRlZmluZWQiOigwLGEuZGVmYXVsdCkodCkpJiYoMCxyLmRlZmF1bHQpKHRoaXMuX2NvbmZpZyx0KSwiZmx2Ij09PWUudHlwZS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBoLkludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiTmF0aXZlUGxheWVyIGRvZXMndCBzdXBwb3J0IGZsdiBNZWRpYURhdGFTb3VyY2UgaW5wdXQhIik7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2VnbWVudHMiKSl0aHJvdyBuZXcgaC5JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIk5hdGl2ZVBsYXllcigiK2UudHlwZSsiKSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwYXJ0IHBsYXliYWNrISIpO3RoaXMuZT17b252TG9hZGVkTWV0YWRhdGE6dGhpcy5fb252TG9hZGVkTWV0YWRhdGEuYmluZCh0aGlzKX0sdGhpcy5fcGVuZGluZ1NlZWtUaW1lPW51bGwsdGhpcy5fc3RhdGlzdGljc1JlcG9ydGVyPW51bGwsdGhpcy5fbWVkaWFEYXRhU291cmNlPWUsdGhpcy5fbWVkaWFFbGVtZW50PW51bGx9dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPXIobigxKSk7ZnVuY3Rpb24gcihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19KDAscihuKDIpKS5kZWZhdWx0KShhLFt7a2V5OiJfc3RhcnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5fY2hlY2tTeXN0ZW0oKSx0aGlzLl9jaGVja1BsYXRmb3JtKCksdGhpcy5fY2hlY2tFbmdpbmUoKSx0aGlzLl9jaGVja1N1cHBvcnRlcigpLHRoaXMuX2NoZWNrU2hlbGwoKX19LHtrZXk6Il9jaGVja1VhIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXN0KHRoaXMuX3VhKX19LHtrZXk6Il9nZXRWZXJzaW9uIix2YWx1ZTpmdW5jdGlvbihlKXtlPWUuZXhlYyh0aGlzLl91YSk7cmV0dXJuIGU/ZS5zaGlmdCgpLnNwbGl0KC9cc3xcL3w6L2dpKS5wb3AoKTpudWxsfX0se2tleToiX2NoZWNrU3lzdGVtIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj10aGlzLl9jaGVja1VhLmJpbmQodGhpcyksZT1be3N5czoid2luZG93cyIscmU6L3dpbmRvd3N8d2luMzJ8d2luNjR8d293MzJ8d293NjQvZ2l9LHtzeXM6Im9zeCIscmU6L21hY2ludG9zaHxtYWNpbnRlbC9naX0se3N5czoibGludXgiLHJlOi94MTEvZ2l9LHtzeXM6ImFuZHJvaWQiLHJlOi9hbmRyb2lkfGFkci9naX0se3N5czoiaW9zIixyZTovaW9zfGlwaG9uZXxpcGFkfGl3YXRjaC9naX1dLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5yZSl9KTt0aGlzLl9zeXN0ZW09ZT9lLnN5czp2b2lkIDAsdGhpcy5fc3lzdGVtQnl0ZT1uKC93aW4zMnx3b3czMnx4MzIvZ2kpPzMyOjY0O3ZhciBpPVt7c3lzOiJvc3giLHJlOi9vcyB4IFtcZCgufF8pXSsvZ2l9LHtzeXM6ImFuZHJvaWQiLHJlOi9hbmRyb2lkIFtcZCgufF8pXSsvZ2l9LHtzeXM6ImlvcyIscmU6L29zIFtcZCgufF8pXSsvZ2l9XS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlLnN5cz09PXQuX3N5c3RlbX0pOyJ3aW5kb3dzIj09PXRoaXMuX3N5c3RlbT8oZT1be3ZzOiIyMDAwIixyZTovd2luZG93cyBudCA1LjB8d2luZG93cyAyMDAwL2dpfSx7dnM6InhwIixyZTovd2luZG93cyBudCA1LjF8d2luZG93cyAyMDAwL2dpfSx7dnM6IjIwMDMiLHJlOi93aW5kb3dzIG50IDUuMnx3aW5kb3dzIDIwMDMvZ2l9LHt2czoidmlzdGEiLHJlOi93aW5kb3dzIG50IDYuMHx3aW5kb3dzIHZpc3RhL2dpfSx7dnM6IjciLHJlOi93aW5kb3dzIG50IDYuMXx3aW5kb3dzIDcvZ2l9LHt2czoiOCIscmU6L3dpbmRvd3MgbnQgNi4yfHdpbmRvd3MgOC9naX0se3ZzOiI4LjEiLHJlOi93aW5kb3dzIG50IDYuM3x3aW5kb3dzIDguMS9naX0se3ZzOiIxMCIscmU6L3dpbmRvd3MgbnQgMTAuMHx3aW5kb3dzIDEwL2dpfV0uZmluZChmdW5jdGlvbihlKXtyZXR1cm4gbihlLnJlKX0pLHRoaXMuX3N5c3RlbVZlcnNpb249ZT9lLnZzOnZvaWQgMCk6dGhpcy5fc3lzdGVtVmVyc2lvbj1pP3RoaXMuX2dldFZlcnNpb24oaS5yZSk6dm9pZCAwfX0se2tleToiX2NoZWNrUGxhdGZvcm0iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztbImlvcyIsImFuZHJvaWQiXS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dC5fc3lzdGVtfSk/dGhpcy5fcGxhdGZvcm09Im1vYmlsZSI6dGhpcy5fcGxhdGZvcm09ImRlc2t0b3AifX0se2tleToiX2NoZWNrRW5naW5lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NoZWNrVWEuYmluZCh0aGlzKSxlPVt7ZW5nOiJ3ZWJraXQiLHJlOi9hcHBsZXdlYmtpdC9naSx2cmU6L2FwcGxld2Via2l0XC9bXGQoLnxfKV0rL2dpfSx7ZW5nOiJwcmVzdG8iLHJlOi9wcmVzdG8vZ2ksdnJlOi9wcmVzdG9cL1tcZCgufF8pXSsvZ2l9LHtlbmc6InRyaWRlbnQiLHJlOi90cmlkZW50fGNvbXBhdGlibGV8bXNpZS9naSx2cmU6Lyh0cmlkZW50fGNvbXBhdGlibGV8bXNpZSlcL1tcZCgufF8pXSsvZ2l9LHtlbmc6ImdlY2tvIixyZTovZ2Vja298ZmlyZWZveC9naSx2cmU6LyhnZWNrb3xmaXJlZm94KVwvW1xkKC58XyldKy9naX1dLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5yZSl9KTtlJiYodGhpcy5fZW5naW5lPWUuZW5nLHRoaXMuX2VuZ2luZVZlcnNpb249dGhpcy5fZ2V0VmVyc2lvbihlLnZyZSkpfX0se2tleToiX2NoZWNrU3VwcG9ydGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NoZWNrVWEuYmluZCh0aGlzKSxlPXRoaXMuX3N5c3RlbSxuPXRoaXMuX2VuZ2luZTsiYW5kcm9pZCIhPT1lfHwid2Via2l0IiE9PW4/IndlYmtpdCI9PT1uPyhlPVt7c3A6ImVkZ2UiLHJlOi9lZGdlL2dpLHZyZTovZWRnZVwvW1xkKC58XyldKy9naX0se3NwOiJvcGVyYSIscmU6L29wci9naSx2cmU6L29wclwvW1xkKC58XyldKy9naX0se3NwOiJjaHJvbWUiLHJlOi9jaHJvbWV8Y3Jpb3MvZ2ksdnJlOi8oY2hyb21lfGNyaW9zKVwvW1xkKC58XyldKy9naX0se3NwOiJzYWZhcmkiLHJlOi9zYWZhcmkvZ2ksdnJlOi92ZXJzaW9uXC9bXGQoLnxfKV0rL2dpfV0uZmluZChmdW5jdGlvbihlKXtyZXR1cm4gdChlLnJlKX0pKSYmKHRoaXMuX3N1cHBvcnRlcj1lLnNwLHRoaXMuX3N1cHBvcnRlclZlcnNpb249dGhpcy5fZ2V0VmVyc2lvbihlLnZyZSkpOiJwcmVzdG8iPT09bj8odGhpcy5zdXBwb3J0ZXI9Im9wZXJhIix0aGlzLl9zdXBwb3J0ZXJWZXJzaW9uPXRoaXMuX2dldFZlcnNpb24oL29wZXJhXC9bXGQoLnxfKV0rL2dpKSk6InRyaWRlbnQiPT09bj8odGhpcy5fc3VwcG9ydGVyPSJpZSIsdGhpcy5fc3VwcG9ydGVyVmVyc2lvbj10aGlzLl9nZXRWZXJzaW9uKC9ydjpbXGQoLnxfKV0rL2dpKSk6ImdlY2tvIj09PW4mJih0aGlzLl9zdXBwb3J0ZXI9ImZpcmVmb3giLHRoaXMuX3N1cHBvcnRlclZlcnNpb249dGhpcy5fZ2V0VmVyc2lvbigvKHJ2OnxmaXJlZm94XC8pW1xkKC58XyldKy9naSkpOihuPXRoaXMuX3VhLm1hdGNoKC9jaHJvbWVcL1xkK1tcLlxkK10rL2dpKSkmJihuPW4ucG9wKCkuc3BsaXQoIi8iKSx0aGlzLl9zdXBwb3J0ZXJWZXJzaW9uPW4ucG9wKCksdGhpcy5fc3VwcG9ydGVyPW4ucG9wKCkpfX0se2tleToiX2NoZWNrU2hlbGwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLl9jaGVja1VhLmJpbmQodGhpcyksbj10aGlzLl9zeXN0ZW0saT10aGlzLl9lbmdpbmU7ImFuZHJvaWQiIT09biYmImxpbnV4IiE9PW58fCJ3ZWJraXQiIT09aT8oZT1be3NsOiJ3ZUNoYXQiLHJlOi9taWNyb21lc3Nlbmdlci9naSx2cmU6L21pY3JvbWVzc2VuZ2VyXC9bXGQoLnxfKV0rL2dpfSx7c2w6InFxIixyZTovcXFicm93c2VyL2dpLHZyZTovbWljcm9tZXNzZW5nZXJcL1tcZCgufF8pXSsvZ2l9LHtzbDoidWMiLHJlOi91Y2Jyb3dzZXIvZ2ksdnJlOi91Y2Jyb3dzZXJcL1tcZCgufF8pXSsvZ2l9LHtzbDoiYmFpZHUiLHJlOi9iYWlkdShib3hhcHB8YnJvd3NlcikvZ2ksdnJlOi9iYWlkdShib3hhcHB8YnJvd3NlcilcL1tcZCgufF8pXSsvZ2l9XS5maW5kKGZ1bmN0aW9uKGUpe3JldHVybiB0KGUucmUpfSkpJiYodGhpcy5fc2hlbGw9ZS5zbCx0aGlzLl9zaGVsbFZlcnNpb249dGhpcy5fZ2V0VmVyc2lvbihlLnZyZSkpOihlPXRoaXMuX3VhLm1hdGNoKC9bXHd8XC9dK0Jyb3dzZXJcL1xkK1tcLlxkK10rL2dpKSkmJihlPWUucG9wKCkuc3BsaXQoIi8iKSx0aGlzLl9zaGVsbFZlcnNpb249ZS5wb3AoKSx0aGlzLl9zaGVsbD1lLnBvcCgpKX19LHtrZXk6InN5c3RlbSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5c3RlbX19LHtrZXk6InN5c3RlbVZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeXN0ZW1WZXJzaW9ufX0se2tleToic3lzdGVtQnl0ZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N5c3RlbUJ5dGV9fSx7a2V5OiJwbGF0Zm9ybSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtfX0se2tleToiZW5naW5lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5naW5lfX0se2tleToiZW5naW5lVmVyc2lvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZ2luZVZlcnNpb259fSx7a2V5OiJzdXBwb3J0ZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdXBwb3J0ZXJ9fSx7a2V5OiJzdXBwb3J0ZXJWZXJzaW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3VwcG9ydGVyVmVyc2lvbn19LHtrZXk6InNoZWxsIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2hlbGx9fSx7a2V5OiJzaGVsbFZlcnNpb24iLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zaGVsbFZlcnNpb259fV0pLG49YTtmdW5jdGlvbiBhKCl7KDAsaS5kZWZhdWx0KSh0aGlzLGEpLHRoaXMuX3VhPXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksdGhpcy5fc3lzdGVtPXZvaWQgMCx0aGlzLl9zeXN0ZW1WZXJzaW9uPXZvaWQgMCx0aGlzLl9zeXN0ZW1CeXRlPXZvaWQgMCx0aGlzLl9wbGF0Zm9ybT12b2lkIDAsdGhpcy5fZW5naW5lPXZvaWQgMCx0aGlzLl9lbmdpbmVWZXJzaW9uPXZvaWQgMCx0aGlzLl9zdXBwb3J0ZXI9dm9pZCAwLHRoaXMuX3N1cHBvcnRlclZlcnNpb249dm9pZCAwLHRoaXMuX3NoZWxsPXZvaWQgMCx0aGlzLl9zaGVsbFZlcnNpb249dm9pZCAwLHRoaXMuX3N0YXJ0KCl9dC5kZWZhdWx0PW59LGZ1bmN0aW9uKGUpe2UuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im5hbWUiOiJoNXBsYXllciIsInZlcnNpb24iOiIyLjEuM2J1aWxkMjAyNDA5MDYiLCJkZXNjcmlwdGlvbiI6InBsYXllciBmb3IgaDUgcGFnZSB3aXRob3V0IHBsdWdpbiIsIm1haW4iOiIuL2Rpc3QvaDVwbGF5ZXIubWluLmpzIiwic2NyaXB0cyI6eyJzdGFydCI6IndlYnBhY2sgLS1jb25maWcgYnVpbGQvd2VicGFjay5kZXYuanMgLS13YXRjaCIsImRldiI6IndlYnBhY2stZGV2LXNlcnZlciAtLWNvbmZpZyBidWlsZC93ZWJwYWNrLmRldi5qcyIsImRldjpodHRwcyI6IndlYnBhY2stZGV2LXNlcnZlciAtLWNvbmZpZyBidWlsZC93ZWJwYWNrLmRldi5qcyAtLWh0dHBzIC0tY29vcCIsImJ1aWxkIjoibnBtIHJ1biBwcm9kICYmIG5wbSBydW4gYmFja3VwIiwiYnVpbGQ6ZGV2Ijoid2VicGFjayAtLWNvbmZpZyBidWlsZC93ZWJwYWNrLmRldi5qcyIsInByb2QiOiJ3ZWJwYWNrIC0tY29uZmlnIGJ1aWxkL3dlYnBhY2sucHJvZC5qcyIsImJhY2t1cCI6IndlYnBhY2sgLS1jb25maWcgYnVpbGQvd2VicGFjay5iYWNrdXAuanMiLCJodHRwIjoibm9kZSBkZXYvaHR0cC5qcyIsImh0dHBzIjoibm9kZSBkZXYvaHR0cHMuanMiLCJwcmVpbnN0YWxsIjoibm9kZSAuL2Jpbi9wcmVpbnN0YWxsLmpzIiwicG9zdGluc3RhbGwiOiJub2RlIC4vYmluL3Bvc3RpbnN0YWxsLmpzIiwicHJldW5pbnN0YWxsIjoibm9kZSAuL2Jpbi9wcmV1bmluc3RhbGwuanMiLCJwcmVwdWJsaXNoT25seSI6Im5wbSBydW4gcHJvZCJ9LCJhdXRob3IiOiJoZXpodWVuIiwibGljZW5zZSI6Ik1JVCIsImRlcGVuZGVuY2llcyI6eyJjaGFsayI6Il40LjEuMiIsImlucXVpcmVyIjoiXjguMi4wIiwic2hlbGxqcyI6Il4wLjguNCIsIndzIjoiXjguOC4xIn0sImRldkRlcGVuZGVuY2llcyI6eyJAYmFiZWwvcG9seWZpbGwiOiJeNy4xMi4xIiwiYmFiZWwtY29yZSI6Il42LjI2LjMiLCJiYWJlbC1lc2xpbnQiOiJeOC4yLjYiLCJiYWJlbC1sb2FkZXIiOiJeNy4xLjUiLCJiYWJlbC1wbHVnaW4tc3ludGF4LWR5bmFtaWMtaW1wb3J0IjoiXjYuMTguMCIsImJhYmVsLXBsdWdpbi10cmFuc2Zvcm0tcnVudGltZSI6Il42LjIzLjAiLCJiYWJlbC1wcmVzZXQtZW52IjoiXjEuNy4wIiwiYmFiZWwtcHJlc2V0LWVzMjAxNSI6Il42LjI0LjEiLCJiYWJlbC1ydW50aW1lIjoiXjYuMjYuMCIsImNvcHktd2VicGFjay1wbHVnaW4iOiJeNC41LjIiLCJjc3MtbG9hZGVyIjoiXjEuMC4wIiwiZXM2LXByb21pc2UiOiJeNC4yLjgiLCJlc2xpbnQiOiJeNS4xLjAiLCJlc2xpbnQtbG9hZGVyIjoiXjIuMS4wIiwiaHRtbC1sb2FkZXIiOiJeMC41LjUiLCJqcXVlcnkiOiJeMy42LjAiLCJqc29uLWxvYWRlciI6Il4wLjUuNyIsImxlc3MiOiJeMy43LjEiLCJsZXNzLWxvYWRlciI6Il40LjEuMCIsIm1pbWUiOiJeMi41LjIiLCJtb21lbnQiOiJeMi4zMC4xIiwic3R5bGUtbG9hZGVyIjoiXjAuMjEuMCIsInVnbGlmeWpzLXdlYnBhY2stcGx1Z2luIjoiXjIuMi4wIiwidXJsLWxvYWRlciI6Il4xLjAuMSIsInV1aWQiOiJeMy4zLjMiLCJ3ZWJwYWNrIjoiXjQuMTYuMSIsIndlYnBhY2stY2xpIjoiXjMuMS4wIiwid2VicGFjay1kZXYtc2VydmVyIjoiXjMuMTEuMiIsIndlYnBhY2stbWVyZ2UiOiJeNS43LjMiLCJ3ZWJ3b3JraWZ5IjoiXjEuNS4wIiwid2Vid29ya2lmeS13ZWJwYWNrIjoiXjIuMS41In0sInB1Ymxpc2hDb25maWciOnsicmVnaXN0cnkiOiJodHRwczovL2FmLmhpa3Zpc2lvbi5jb20uY24vYXJ0aWZhY3RvcnkvYXBpL25wbS9ucG0tZnNkbWRlcHQvIiwiYWNjZXNzIjoicHVibGljIn0sImZpbGVzIjpbImRpc3QiLCJiaW4iXX0nKX1dLGE9e30sci5tPW4sci5jPWEsci5kPWZ1bmN0aW9uKGUsdCxuKXtyLm8oZSx0KXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7ZW51bWVyYWJsZTohMCxnZXQ6bn0pfSxyLnI9ZnVuY3Rpb24oZSl7InVuZGVmaW5lZCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sci50PWZ1bmN0aW9uKHQsZSl7aWYoMSZlJiYodD1yKHQpKSw4JmUpcmV0dXJuIHQ7aWYoNCZlJiYib2JqZWN0Ij09dHlwZW9mIHQmJnQmJnQuX19lc01vZHVsZSlyZXR1cm4gdDt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHIucihuKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6dH0pLDImZSYmInN0cmluZyIhPXR5cGVvZiB0KWZvcih2YXIgaSBpbiB0KXIuZChuLGksZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19LmJpbmQobnVsbCxpKSk7cmV0dXJuIG59LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPSIiLHIoci5zPTI0Nik7ZnVuY3Rpb24gcihlKXtpZihhW2VdKXJldHVybiBhW2VdLmV4cG9ydHM7dmFyIHQ9YVtlXT17aTplLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIG5bZV0uY2FsbCh0LmV4cG9ydHMsdCx0LmV4cG9ydHMsciksdC5sPSEwLHQuZXhwb3J0c312YXIgbixhfSk7",typeof document>"u"?require("url").pathToFileURL(__filename).href:TZ&&TZ.tagName.toUpperCase()==="SCRIPT"&&TZ.src||new URL("GVideo/index.js",document.baseURI).href).href}catch{K="./h5player.min.js"}S.src=K,S.async=!0,S.onload=()=>{console.log("h5player.min.js加载成功"),I()},S.onerror=()=>{console.error("h5player.min.js加载失败"),R(new Error("加载h5player.min.js失败"))},document.head.appendChild(S)}),Y=()=>{new HX(b.baseUrl,b.appKey,b.appSecret).request({url:"/artemis/api/video/v1/cameras/previewURLs",data:{cameraIndexCode:b.channelCode,streamType:b.streamType,protocol:"ws",transmode:1,expand:"transcode=0"}}).then(I=>{i.value=0,clearTimeout(u.value),m.value=I.data.data.url,X()}).catch(I=>{console.error("获取WebSocket地址失败:",I),m.value="ws://localhost:8080/test-ws",X()})},X=()=>{requestAnimationFrame(()=>{G.value=new window.JSPlugin({szId:c.value,szBasePath:"./",bSupporDoubleClickFull:!1,iMaxSplit:1,iCurrentSplit:1,openDebug:!0}),G.value.JS_Play(m.value,{playURL:m.value,mode:0,keepDecoder:0},G.value.currentWindowIndex).then(()=>{s.value="",i.value=0}).catch(I=>{console.error("播放失败:",I)}),W()})},i=r.ref(0),a=r.ref(3),u=r.ref(null),s=r.ref(""),W=()=>{G.value.JS_SetWindowControlCallback({pluginErrorHandler:(I,R,S)=>{if(u.value&&clearTimeout(u.value),i.value>=a.value){s.value="视频加载失败",setTimeout(()=>{s.value=""},1e3);return}i.value++,s.value=`第${i.value}次重试`,u.value=setTimeout(()=>{h(),x(),G.value=null,Y()},1e3)}})},h=()=>{try{G.value.JS_Stop(0).then(()=>{console.log("stop realplay success")},I=>{console.error(I)})}catch(I){console.error(I)}},p=()=>{G.value.JS_StopRealPlayAll().then(()=>{console.log("stopAllPlay success")},I=>{console.error(I)})},x=()=>{G.value.JS_SetInterruptTime(3).then(()=>{console.info("断流执行成功!")},R=>{console.info(R)})},L=()=>{Z("double-click",{isPlayVideo:!0,channel_code:b.channelCode,channel_name:b.videoName})};return r.onMounted(()=>{V().then(()=>{Y()}).catch(I=>{s.value="播放器加载失败"})}),r.onBeforeUnmount(()=>{u.value&&(i.value=0,clearTimeout(u.value)),G.value&&(p(),x(),G.value=null)}),(I,R)=>(r.openBlock(),r.createElementBlock("div",{class:"g-video-container",onDblclick:L},[r.createElementVNode("div",{id:c.value,class:"g-video-window"},null,8,zX),r.withDirectives(r.createElementVNode("p",{class:"g-video-window-tips"},r.toDisplayString(s.value),513),[[r.vShow,s.value]])],32))}},nl=Bb._export_sfc(gX,[["__scopeId","data-v-dd57b116"]]);nl.install=l=>{l.component(nl.name,nl)};exports.GVideo=nl;exports.default=nl;