serve-sim 0.1.20 → 0.1.22

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.
package/dist/serve-sim.js CHANGED
@@ -1,21 +1,21 @@
1
1
  #!/usr/bin/env node
2
- var sS=Object.defineProperty;var iS=(_)=>_;function CS(_,e){this[_]=iS.bind(null,e)}var We=(_,e)=>{for(var t in e)sS(_,t,{get:e[t],enumerable:!0,configurable:!0,set:CS.bind(e,t)})};var j_=(_,e)=>()=>(_&&(e=_(_=0)),e);var w_="Accessibility unavailable on this simulator.";function fS(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function TS(_,e){return Math.abs(_.x-e.x)<0.5&&Math.abs(_.y-e.y)<0.5&&Math.abs(_.width-e.width)<0.5&&Math.abs(_.height-e.height)<0.5}function ES(_){let e=fS(_),t=[],S=(i,s)=>{if(t.length>=J_)return;let C=i.frame;if(!TS(C,e))t.push({id:i.AXUniqueId??s,path:s,label:i.AXLabel??"",value:i.AXValue??"",role:i.role_description,type:i.type,enabled:i.enabled!==!1,frame:C});for(let r=0;r<i.children.length&&t.length<J_;r++)S(i.children[r],`${s}.${r}`)};for(let i=0;i<_.length&&t.length<J_;i++)S(_[i],String(i));return{screen:{width:e.width,height:e.height},elements:t}}async function FS(_){let e=new AbortController,t=setTimeout(()=>e.abort(),BS);try{let S=await fetch(`http://127.0.0.1:${_}/ax`,{signal:e.signal});if(S.status===503)return{screen:{width:1,height:1},elements:[],errors:[w_]};if(!S.ok)throw Error(`HTTP ${S.status} ${S.statusText}`);return ES(await S.json())}finally{clearTimeout(t)}}function pS(_){return _?.errors?.includes(w_)??!1}function lS(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function vS(_){let e=[];try{let t=await FS(_);if(t.errors?.length)return t;if(!lS(t))throw Error(`helper returned ${t.elements.length} elements in ${t.screen.width}x${t.screen.height} AX space`);return{...t,errors:e}}catch(t){let S=t,i=S.cause?.code??S.code,s=S.message||String(t),C=i==="ECONNREFUSED"||i==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(s);e.push(C?w_:s)}return{screen:{width:1,height:1},elements:[],errors:e}}function uS(_){return`data: ${JSON.stringify(_)}
2
+ var oS=Object.defineProperty;var nS=(_)=>_;function yS(_,e){this[_]=nS.bind(null,e)}var Me=(_,e)=>{for(var t in e)oS(_,t,{get:e[t],enumerable:!0,configurable:!0,set:yS.bind(e,t)})};var J_=(_,e)=>()=>(_&&(e=_(_=0)),e);var H_="Accessibility unavailable on this simulator.";function vS(_){return _[0]?.frame??{x:0,y:0,width:1,height:1}}function lS(_,e){return Math.abs(_.x-e.x)<0.5&&Math.abs(_.y-e.y)<0.5&&Math.abs(_.width-e.width)<0.5&&Math.abs(_.height-e.height)<0.5}function uS(_){let e=vS(_),t=[],S=(i,s)=>{if(t.length>=Z_)return;let C=i.frame;if(!lS(C,e))t.push({id:i.AXUniqueId??s,path:s,label:i.AXLabel??"",value:i.AXValue??"",role:i.role_description,type:i.type,enabled:i.enabled!==!1,frame:C});for(let r=0;r<i.children.length&&t.length<Z_;r++)S(i.children[r],`${s}.${r}`)};for(let i=0;i<_.length&&t.length<Z_;i++)S(_[i],String(i));return{screen:{width:e.width,height:e.height},elements:t}}async function OS(_){let e=new AbortController,t=setTimeout(()=>e.abort(),FS);try{let S=await fetch(`http://127.0.0.1:${_}/ax`,{signal:e.signal});if(S.status===503)return{screen:{width:1,height:1},elements:[],errors:[H_]};if(!S.ok)throw Error(`HTTP ${S.status} ${S.statusText}`);return uS(await S.json())}finally{clearTimeout(t)}}function dS(_){return _?.errors?.includes(H_)??!1}function gS(_){return _.elements.length>0&&_.screen.width>1&&_.screen.height>1}async function wS(_){let e=[];try{let t=await OS(_);if(t.errors?.length)return t;if(!gS(t))throw Error(`helper returned ${t.elements.length} elements in ${t.screen.width}x${t.screen.height} AX space`);return{...t,errors:e}}catch(t){let S=t,i=S.cause?.code??S.code,s=S.message||String(t),C=i==="ECONNREFUSED"||i==="ECONNRESET"||/unable to connect|fetch failed|ECONNREFUSED/i.test(s);e.push(C?H_:s)}return{screen:{width:1,height:1},elements:[],errors:e}}function hS(_){return`data: ${JSON.stringify(_)}
3
3
 
4
- `}function bS({port:_}){let e=new Set,t=null,S=null,i=Q_,s=!1,C=_,$=()=>{if(e.size===0||t)return;t=setTimeout(r,i)},r=async()=>{if(t=null,s||e.size===0){$();return}s=!0;try{let o=await vS(C),y=uS(o);if(y!==S){for(let n of e)n.write(y);i=Q_}else i=Math.min(i*2,RS);if(S=y,pS(o))i=DS}finally{s=!1,$()}};return{setPort(o){if(o===C)return;if(C=o,S=null,i=Q_,t)clearTimeout(t),t=null;r()},addClient(o){if(e.add(o),S)o.write(S);return r(),()=>{if(e.delete(o),e.size===0&&t)clearTimeout(t),t=null}}}}function qe(){let _=new Map;return{get(e,t){let S=_.get(e);if(S)return S.setPort(t),S;let i=bS({port:t});return _.set(e,i),i}}}var BS=3500,J_=500,Q_=500,RS=2000,DS=15000;var Xe=()=>{};var Tt={};We(Tt,{startCdpServer:()=>js,startBunCdpServer:()=>ei,listTargets:()=>ti,listDevices:()=>Dt});import{createRequire as OS}from"node:module";import*as Ye from"node:net";import*as St from"node:net";import{spawnSync as JS}from"node:child_process";import*as Ct from"node:tls";import*as nt from"node:http";function hS(_){return this[_]}function Ge(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&amp;":e==="<"?"&lt;":e===">"?"&gt;":e==="'"?"&apos;":"&quot;")}function qS(_){let e="";for(let t=0;t<_.length;t++)e+=String.fromCharCode(_[t]);return btoa(e)}function XS(_){let e=atob(_.replace(/\s+/g,"")),t=new Uint8Array(e.length);for(let S=0;S<e.length;S++)t[S]=e.charCodeAt(S);return t}function Se(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${Ge(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${e}<integer>${_}</integer>`;return`${e}<real>${_}</real>`}if(typeof _==="bigint")return`${e}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${e}<data>${qS(_)}</data>`;if(_ instanceof Date)return`${e}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${e}<array/>`;let i=_.map((s)=>Se(s,e+"\t")).join(`
4
+ `}function HS({port:_}){let e=new Set,t=null,S=null,i=Q_,s=!1,C=_,A=()=>{if(e.size===0||t)return;t=setTimeout(r,i)},r=async()=>{if(t=null,s||e.size===0){A();return}s=!0;try{let n=await wS(C),y=hS(n);if(y!==S){for(let o of e)o.write(y);i=Q_}else i=Math.min(i*2,bS);if(S=y,dS(n))i=pS}finally{s=!1,A()}};return{setPort(n){if(n===C)return;if(C=n,S=null,i=Q_,t)clearTimeout(t),t=null;r()},addClient(n){if(e.add(n),S)n.write(S);return r(),()=>{if(e.delete(n),e.size===0&&t)clearTimeout(t),t=null}}}}function qe(){let _=new Map;return{get(e,t){let S=_.get(e);if(S)return S.setPort(t),S;let i=HS({port:t});return _.set(e,i),i}}}var FS=3500,Z_=500,Q_=500,bS=2000,pS=15000;var Xe=()=>{};var Ft={};Me(Ft,{startCdpServer:()=>ei,startBunCdpServer:()=>ri,listTargets:()=>$i,listDevices:()=>ft});import{createRequire as NS}from"node:module";import*as et from"node:net";import*as it from"node:net";import{spawnSync as ts}from"node:child_process";import*as $t from"node:tls";import*as at from"node:http";function PS(_){return this[_]}function Ke(_){return _.replace(/[&<>'"]/g,(e)=>e==="&"?"&amp;":e==="<"?"&lt;":e===">"?"&gt;":e==="'"?"&apos;":"&quot;")}function xS(_){let e="";for(let t=0;t<_.length;t++)e+=String.fromCharCode(_[t]);return btoa(e)}function zS(_){let e=atob(_.replace(/\s+/g,"")),t=new Uint8Array(e.length);for(let S=0;S<e.length;S++)t[S]=e.charCodeAt(S);return t}function se(_,e){if(_===null||_===void 0)return`${e}<string></string>`;if(typeof _==="boolean")return`${e}<${_?"true":"false"}/>`;if(typeof _==="string")return`${e}<string>${Ke(_)}</string>`;if(typeof _==="number"){if(Number.isInteger(_))return`${e}<integer>${_}</integer>`;return`${e}<real>${_}</real>`}if(typeof _==="bigint")return`${e}<integer>${_.toString()}</integer>`;if(_ instanceof Uint8Array)return`${e}<data>${xS(_)}</data>`;if(_ instanceof Date)return`${e}<date>${_.toISOString().replace(/\.\d+Z$/,"Z")}</date>`;if(Array.isArray(_)){if(_.length===0)return`${e}<array/>`;let i=_.map((s)=>se(s,e+"\t")).join(`
5
5
  `);return`${e}<array>
6
6
  ${i}
7
- ${e}</array>`}let t=Object.keys(_);if(t.length===0)return`${e}<dict/>`;let S=t.map((i)=>`${e} <key>${Ge(i)}</key>
8
- `+Se(_[i],e+"\t")).join(`
7
+ ${e}</array>`}let t=Object.keys(_);if(t.length===0)return`${e}<dict/>`;let S=t.map((i)=>`${e} <key>${Ke(i)}</key>
8
+ `+se(_[i],e+"\t")).join(`
9
9
  `);return`${e}<dict>
10
10
  ${S}
11
- ${e}</dict>`}function oe(_){let e=Se(_,"");return new TextEncoder().encode(MS+e+US)}class _t{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
12
- `||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let t=this.src[this.pos++];if(t==="[")e++;else if(t==="]")e--;else if(t===">"&&e===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let _=this.src.indexOf(">",this.pos);if(_<0)throw Error("unterminated tag");let e=this.src.slice(this.pos+1,_);this.pos=_+1;let t=e.startsWith("/"),S=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:S,isClose:t}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function se(_,e){let t=(S)=>{let i=_.nextTag();if(!i||!i.isClose||i.name!==S)throw Error(`expected </${S}>`)};switch(e){case"true":case"false":throw Error(`<${e}> must be self-closing`);case"string":case"key":{let S=_.readText();return t(e),S}case"integer":{let S=_.readText().trim();if(t("integer"),/^-?\d+$/.test(S)&&Math.abs(Number(S))<=Number.MAX_SAFE_INTEGER)return Number(S);return BigInt(S)}case"real":{let S=Number(_.readText().trim());return t("real"),S}case"data":{let S=XS(_.readText());return t("data"),S}case"date":{let S=new Date(_.readText().trim());return t("date"),S}case"array":{let S=[];while(!0){let i=_.nextTag();if(!i)throw Error("unterminated <array>");if(i.isClose&&i.name==="array")return S;S.push(i.selfClose?ie(i.name):se(_,i.name))}}case"dict":{let S={};while(!0){let i=_.nextTag();if(!i)throw Error("unterminated <dict>");if(i.isClose&&i.name==="dict")return S;if(i.name!=="key")throw Error(`expected <key>, got <${i.name}>`);let s=_.readText();t("key");let C=_.nextTag();if(!C)throw Error("unterminated <dict>");S[s]=C.selfClose?ie(C.name):se(_,C.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function ie(_){if(_==="true")return!0;if(_==="false")return!1;if(_==="string")return"";if(_==="data")return new Uint8Array(0);if(_==="array")return[];if(_==="dict")return{};throw Error(`self-closing <${_}/> not supported`)}function h_(_){let e=typeof _==="string"?_:new TextDecoder().decode(_),t=new _t(e);while(!0){let i=t.nextTag();if(!i)throw Error("no <plist> root");if(i.name==="plist"&&!i.isClose)break}let S=t.nextTag();if(!S)throw Error("empty plist");return S.selfClose?ie(S.name):se(t,S.name)}function S_(_,e,t){let S=0;for(let i=0;i<t;i++)S=S*256+_[e+i];return S}function IS(_){if(_.length<41)throw Error("bplist too short");let e=new TextDecoder().decode(_.slice(0,8));if(e!=="bplist00")throw Error(`bad magic: ${e}`);let t=_.length-32,S=_[t+6],i=_[t+7],s=S_(_,t+8,8),C=S_(_,t+16,8),$=S_(_,t+24,8),r=Array(s);for(let n=0;n<s;n++)r[n]=S_(_,$+n*S,S);function o(n){return S_(_,n,i)}function y(n){let f=r[n],u=_[f],v=u>>4,O=u&15;function p(l){if(O!==15)return{len:O,next:l};let F=_[l];if((F&240)!==16)throw Error("expected int marker for length");let D=1<<(F&15);return{len:S_(_,l+1,D),next:l+1+D}}switch(v){case 0:if(O===0)return null;if(O===8)return!1;if(O===9)return!0;if(O===15)return null;throw Error(`unknown singleton ${O}`);case 1:{let l=1<<O,F=S_(_,f+1,l);if(l===8&&F>Number.MAX_SAFE_INTEGER)return BigInt(F);return F}case 2:{let l=1<<O,F=new DataView(_.buffer,_.byteOffset+f+1,l);return l===4?F.getFloat32(0,!1):F.getFloat64(0,!1)}case 3:{let F=new DataView(_.buffer,_.byteOffset+f+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+F*1000)}case 4:{let{len:l,next:F}=p(f+1);return _.slice(F,F+l)}case 5:{let{len:l,next:F}=p(f+1);return new TextDecoder("ascii").decode(_.slice(F,F+l))}case 6:{let{len:l,next:F}=p(f+1),D=_.slice(F,F+l*2),R=new Uint8Array(D.length);for(let E=0;E<D.length;E+=2)R[E]=D[E+1],R[E+1]=D[E];return new TextDecoder("utf-16le").decode(R)}case 10:{let{len:l,next:F}=p(f+1),D=[];for(let R=0;R<l;R++)D.push(y(o(F+R*i)));return D}case 13:{let{len:l,next:F}=p(f+1),D={};for(let R=0;R<l;R++){let E=y(o(F+R*i)),a=y(o(F+(l+R)*i));if(typeof E!=="string")throw Error(`non-string dict key: ${typeof E}`);D[E]=a}return D}default:throw Error(`unknown bplist marker 0x${u.toString(16)} at ${f}`)}}return y(C)}function GS(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return IS(_)}return h_(_)}class H_{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(_){if(_.length===0)return;this.chunks.push(_),this.size+=_.length,this.drain()}close(_){this.closed=!0,this.closeErr=_??null;for(let e of this.waiters)e.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((e,t)=>{if(this.closed&&this.size<_){t(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:e,reject:t}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),e=new Uint8Array(_.n),t=0;while(t<_.n){let S=this.chunks[0],i=_.n-t;if(S.length<=i)e.set(S,t),t+=S.length,this.chunks.shift();else e.set(S.subarray(0,i),t),this.chunks[0]=S.subarray(i),t+=i}this.size-=_.n,_.resolve(e)}}}function ne(_,e){let t=(s)=>{e.push(new Uint8Array(s.buffer,s.byteOffset,s.byteLength))},S=()=>e.close(),i=(s)=>e.close(s);return _.on("data",t),_.on("close",S),_.on("error",i),()=>{_.off("data",t),_.off("close",S),_.off("error",i)}}async function ye(){let _=new H_;return new Promise((e,t)=>{let S=Ye.createConnection({path:xS}),i=(s)=>{_.close(s),t(s)};S.once("error",i),S.once("connect",()=>{S.off("error",i);let s=ne(S,_);e({socket:S,stream:_,detach:s})})})}async function zS(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(t-4)).slice(12)}function jS(_,e,t){let S=16+t.length,i=new Uint8Array(16),s=new DataView(i.buffer);s.setUint32(0,S,!0),s.setUint32(4,kS,!0),s.setUint32(8,KS,!0),s.setUint32(12,e,!0),_.write(i),_.write(t)}async function ae(_,e,t,S){let i=oe({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...S});jS(_,t,i);let s=await zS(e);return h_(s)}async function et(){let{socket:_,stream:e}=await ye();try{return(await ae(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function tt(_){let{socket:e,stream:t}=await ye();try{let i=(await ae(e,t,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!i)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return h_(i)}finally{e.end()}}async function ke(_,e){let{socket:t,stream:S,detach:i}=await ye(),s=(e&255)<<8|e>>8&255,C=await ae(t,S,1,{MessageType:"Connect",DeviceID:_,PortNumber:s});if(C.MessageType!=="Result"||C.Number!==0){t.end();let $=C.Number??"?";throw Error(`Connect to device ${_} port ${e} failed (code ${$})`)}return{socket:t,stream:S,detach:i}}async function st(){let _=JS("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let e=_.stdout.toString("utf8"),t=new Map;for(let S of e.split(`
13
- `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(S))continue;if(!S.startsWith("webinspec"))continue;let i=S.split(/\s+/),s=Number(i[1]),C=i[i.length-1];if(C)t.set(C,s)}return Array.from(t,([S,i])=>({socketPath:S,pid:i}))}async function it(_){let e=new H_;return new Promise((t,S)=>{let i=St.createConnection({path:_}),s=(C)=>{e.close(C),S(C)};i.once("error",s),i.once("connect",()=>{i.off("error",s),ne(i,e),t({socket:i,stream:e})})})}async function Z_(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return h_(S)}function Y_(_,e){let t=oe({Label:"inspect-webkit",...e}),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function _e(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function xe(_,e,t,S){return new Promise((i,s)=>{e();let C=new H_,$=Ct.connect({socket:_,cert:Buffer.from(t.HostCertificate),key:Buffer.from(t.HostPrivateKey),ca:Buffer.from(t.RootCertificate),rejectUnauthorized:!1}),r=(o)=>{z(`${S} tls error:`,o),C.close(o),s(o)};$.once("error",r),$.once("secureConnect",()=>{z(`${S} tls handshake complete`),$.off("error",r);let o=ne($,C);i({socket:$,stream:C,detach:o})})})}class V_{socket;stream;pair;udid;deviceID;detach;constructor(_,e,t,S,i,s){this.socket=_,this.stream=e,this.pair=t,this.udid=S,this.deviceID=i,this.detach=s}static async open(_,e){z("connecting usbmux tunnel to lockdown port",Ke);let{socket:t,stream:S,detach:i}=await ke(_.DeviceID,Ke),s=new V_(t,S,e,_.Properties.SerialNumber,_.DeviceID,i);z("sending QueryType"),Y_(t,{Request:"QueryType"});let C=await Z_(S);if(z("QueryType reply:",C),_e(C,"QueryType"),C.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(C.Type)}`);return s}async startSession(){z("StartSession with HostID",this.pair.HostID),Y_(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await Z_(this.stream);if(z("StartSession reply:",_),_e(_,"StartSession"),_.EnableSessionSSL){z("upgrading to TLS");let e=await xe(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,z("TLS upgrade complete")}}async startService(_){z("StartService",_),Y_(this.socket,{Request:"StartService",Service:_});let e=await Z_(this.stream);return z("StartService reply:",e),_e(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){z("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:t,detach:S}=await ke(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:t};let i=await xe(e,S,this.pair,"service");return{socket:i.socket,stream:i.stream}}close(){this.socket.end()}}async function QS(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return GS(S)}function ZS(_,e){let t=oe(e),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function YS(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(t)=>t.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class F_{socket;stream;connectionId=YS();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let t=await QS(e);for(let S of[...this.subscribers])try{S(t)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((t,S)=>{let i=setTimeout(()=>{s(),S(Error(`timeout waiting for ${_} after ${e}ms`))},e),s=this.subscribe((C)=>{if(C.__selector===_)clearTimeout(i),s(),t(C)})})}send(_,e){ZS(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let t=_.__argument.WIRApplicationDictionaryKey??{},S=[];for(let[i,s]of Object.entries(t)){let C=s;S.push({appId:i,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey,isProxy:Boolean(C.WIRIsApplicationProxyKey),isActive:Boolean(C.WIRIsApplicationActiveKey),hostAppId:C.WIRHostApplicationIdentifierKey})}return S}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let S=e.__argument.WIRListingKey??{},i=[];for(let s of Object.values(S)){let C=s;i.push({pageId:Number(C.WIRPageIdentifierKey??0),title:C.WIRTitleKey??"",url:C.WIRURLKey??"",type:C.WIRTypeKey??""})}return i}get connection(){return this.connectionId}forwardSocketSetup(_,e,t){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,t,S){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t,WIRSocketDataKey:S})}forwardDidClose(_,e,t){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class ce{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor(_,e,t,S,i){this.ws=_,this.wi=e,this.appId=t,this.pageId=S,this.senderKey=i}addMessageFilter(_,e){let t=this.filters.get(_);if(!t)this.filters.set(_,t=[]);t.push(e)}callTarget(_,e={}){return new Promise((t,S)=>{let i=--this.requestId;this.adapterRequestMap.set(i,{resolve:t,reject:S}),this.sendRaw(JSON.stringify({id:i,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let t=`tools::${e.method}`,S=this.filters.get(t),i=e;if(S)for(let s of S){if(!i)break;i=await s(i)}if(i)this.sendRaw(JSON.stringify(i))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let s=e.params?.targetInfo;if(s?.type==="page"&&!this.innerTargetId)this.innerTargetId=s.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let s=e.params?.newTargetId;if(typeof s==="string")this.innerTargetId=s;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let s=e.params?.message;if(typeof s==="string")return this.onMessageFromTarget(s);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let s=this.adapterRequestMap.get(e.id);if(s){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)s.reject(e.error);else s.resolve(e.result??{});return}let C=this.toolRequestMap.get(e.id);if(C){this.toolRequestMap.delete(e.id);let $=`target::${C}`;if("error"in e&&this.filters.has("target::error"))$="target::error";let r=this.filters.get($);if(!r)return this.sendToTools(_);let o=e;for(let y of r){if(!o)break;o=await y(o)}if(o)this.sendToTools(JSON.stringify(o));return}return this.sendToTools(_)}let t=`target::${e.method}`,S=this.filters.get(t);if(!S)return this.sendToTools(_);let i=e;for(let s of S){if(!i)break;i=await s(i)}if(i)this.sendToTools(JSON.stringify(i))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let t=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!t){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let S={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(S));return}if(!this.innerTargetId&&e&&!t){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let S=this.outgoingQueue;this.outgoingQueue=[];for(let i of S)this.writeFrame(i)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function es(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function H(_,e,t){return _.fireResultToTools(e.id,t),Promise.resolve(null)}function ts(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(t)=>H(_,t,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(t)=>H(_,t,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(t)=>H(_,t,{})),_.addMessageFilter("target::Debugger.enable",(t)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(t)}),_.addMessageFilter("target::Debugger.scriptParsed",(t)=>{if(t.params?.scriptId)e.lastScriptEval.value=String(t.params.scriptId);return Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(t)=>{let S=t.params??{};return t.params={location:S.location,options:S.condition?{condition:S.condition}:{}},Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(t)=>{let S=t.params??{};return t.params={lineNumber:S.lineNumber,url:S.url,urlRegex:S.urlRegex,columnNumber:S.columnNumber,options:S.condition?{condition:S.condition}:{}},Promise.resolve(t)});for(let t of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${t}`,(S)=>Promise.resolve(S));_.addMessageFilter("target::Debugger.paused",(t)=>{let S=t.params?.callFrames;if(Array.isArray(S))for(let i of S){if(i.functionName==null&&typeof i.name==="string")i.functionName=i.name;if(!i.location&&i.sourceCodeLocation)i.location={scriptId:String(i.sourceCodeLocation.scriptId??""),lineNumber:i.sourceCodeLocation.lineNumber??0,columnNumber:i.sourceCodeLocation.columnNumber??0};if(Array.isArray(i.scopeChain)){for(let s of i.scopeChain)if(!s.object&&s.value)s.object=s.value}}return Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(t)=>H(_,t,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(t)=>H(_,t,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(t)=>{return Promise.resolve(t)})}function Ss(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(t)=>{let S=t.params?.context;if(S){if(!S.origin)S.origin=S.name??"";let i=Number(S.id),s=!!(S.isPageContext||S.type==="normal");if(Number.isFinite(i)&&i>0){if(!e.pageExecCtx.id||s&&!e.pageExecCtx.isPage)e.pageExecCtx.id=i,e.pageExecCtx.isPage=s}if(S.frameId)S.auxData={frameId:S.frameId,isDefault:!0},delete S.frameId}return Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.evaluate",(t)=>{let S=t.params;if(!S)return Promise.resolve(t);if("silent"in S)S.doNotPauseOnExceptionsAndMuteConsole=!!S.silent,delete S.silent;if("userGesture"in S)S.emulateUserGesture=!!S.userGesture,delete S.userGesture;return Promise.resolve(t)}),_.addMessageFilter("target::Runtime.evaluate",(t)=>{let S=t.result;if(S?.wasThrown){if(S.result)S.result.subtype="error";S.exceptionDetails={exceptionId:0,text:S.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:S.result}}return Promise.resolve(t)}),_.addMessageFilter("target::Runtime.getProperties",(t)=>{let S=t.result;if(!S)return Promise.resolve(t);let i=Array.isArray(S.result)?S.result:Array.isArray(S.properties)?S.properties:null;if(i)S.result=i.filter((s)=>s.isOwn||s.nativeGetter).map((s)=>({...s,isOwn:!0})),delete S.properties;if(Array.isArray(S.internalProperties))S.internalProperties=S.internalProperties.map((s)=>({name:s.name,value:s.value}));return Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.compileScript",(t)=>H(_,t,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(t)=>H(_,t,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(t)=>H(_,t,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(t)=>H(_,t,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(t)=>H(_,t,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(t)=>{return t.method="Console.clearMessages",Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(t)=>H(_,t,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(t)=>H(_,t,{})),_.addMessageFilter("tools::Runtime.releaseObject",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.callFunctionOn",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.queryObjects",(t)=>Promise.resolve(t)),_.addMessageFilter("target::Debugger.globalObjectCleared",(t)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function ss(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(t)=>H(_,t,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(t)=>H(_,t,{})),_.addMessageFilter("tools::Log.clear",(t)=>{return t.method="Console.clearMessages",Promise.resolve(t)}),_.addMessageFilter("tools::Log.disable",(t)=>{return t.method="Console.disable",Promise.resolve(t)}),_.addMessageFilter("tools::Log.enable",(t)=>{return t.method="Console.enable",Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.enable",(t)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(t)}),_.addMessageFilter("target::Console.messageAdded",(t)=>{let S=t.params?.message??{},s=(Array.isArray(S.stackTrace)?S.stackTrace:Array.isArray(S.stackTrace?.callFrames)?S.stackTrace.callFrames:[]).map((r)=>({functionName:r.functionName??"",scriptId:r.scriptId??"",url:r.url??"",lineNumber:Number(r.lineNumber??0),columnNumber:Number(r.columnNumber??0)})),C=s.length?{callFrames:s}:void 0,$=Date.now();if(S.source==="console-api"){let r=S.type==="log"?S.level??"log":S.type??"log",o=is(r),y=Array.isArray(S.parameters)&&S.parameters.length>0?S.parameters:[{type:"string",value:String(S.text??"")}],n={type:o,args:y,executionContextId:e.pageExecCtx.id||1,timestamp:$,stackTrace:C};return e.lastConsoleApiCalled.value=n,_.fireEventToTools("Runtime.consoleAPICalled",n),Promise.resolve(null)}if(S.source==="javascript"&&S.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:$,exceptionDetails:{exceptionId:0,text:String(S.text??"Uncaught"),lineNumber:Number(S.line??0),columnNumber:Number(S.column??0),scriptId:e.lastScriptEval.value,url:S.url,stackTrace:C,exception:{type:"string",value:String(S.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:S.source??"other",level:Cs(S.level??S.type??"log"),text:String(S.text??""),timestamp:$,url:S.url,lineNumber:S.line,stackTrace:C,networkRequestId:S.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let t=e.lastConsoleApiCalled.value;if(t)_.fireEventToTools("Runtime.consoleAPICalled",{...t,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function is(_){switch(_){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return _;default:return"log"}}function Cs(_){switch(_){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function rs(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(t)=>H(_,t,{})),_.addMessageFilter("tools::DOM.setInspectMode",(t)=>{if(t.method="DOM.setInspectModeEnabled",t.params)t.params.enabled=t.params.mode==="searchForNode",delete t.params.mode,delete t.params.highlightConfig;return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.setInspectedNode",(t)=>{return t.method="Console.addInspectedNode",Promise.resolve(t)}),_.addMessageFilter("tools::DOM.performSearch",(t)=>{if(t.params)t.params={query:t.params.query,caseSensitive:!!t.params.caseSensitive};return Promise.resolve(t)}),_.addMessageFilter("target::DOM.performSearch",(t)=>{let S=t.result?.searchId;if(typeof S==="string")e.add(S);return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.discardSearchResults",(t)=>{let S=t.params?.searchId;if(typeof S==="string")e.delete(S);return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(t)=>{let S=t.params?.backendNodeIds??[],i=await Promise.all(S.map((s)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:s}).then((C)=>C.nodeId).catch(()=>s)));return _.fireResultToTools(t.id,{nodeIds:i}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(t)=>{return _.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:t.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(t)=>{try{let i=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${t.params?.x},${t.params?.y})`})).result?.objectId;if(!i)return _.fireResultToTools(t.id,{nodeId:0}),null;let s=await _.callTarget("DOM.requestNode",{objectId:i});_.fireResultToTools(t.id,{nodeId:s.nodeId,backendNodeId:s.nodeId})}catch(S){_.fireErrorToTools(t.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(t)=>{if(t.params&&t.params.objectGroup===void 0)delete t.params.objectGroup;return Promise.resolve(t)})}function As(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let t=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),i=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:t.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((s)=>({type:s.type,useCapture:!!s.useCapture,passive:!!s.passive,once:!!s.once,location:s.location,handler:s.handler}));_.fireResultToTools(e.id,{listeners:i})}catch(t){_.fireErrorToTools(e.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>H(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>H(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>H(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>H(_,e,{}))}function $s(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(s)=>{return s.method="Debugger.setOverlayMessage",Promise.resolve(s)}),_.addMessageFilter("tools::Page.configureOverlay",(s)=>{return s.method="Debugger.setOverlayMessage",Promise.resolve(s)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(s)=>{try{let C=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),$=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(s.id,{currentIndex:0,entries:[{id:0,url:C.result?.value??"",userTypedURL:C.result?.value??"",title:$.result?.value??"",transitionType:"link"}]})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(s)=>{return At(s.params?.frame),Promise.resolve(s)}),_.addMessageFilter("target::Page.getResourceTree",(s)=>{return Ce(s.result?.frameTree),Promise.resolve(s)}),_.addMessageFilter("tools::Page.getFrameTree",async(s)=>{if(typeof s.id!=="number")return null;try{let C=await _.callTarget("Page.getResourceTree",{}),$=$t(C?.frameTree);Ce($),_.fireResultToTools(s.id,{frameTree:$})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(s)=>{if(typeof s.id!=="number")return Promise.resolve(null);return H(_,s,{executionContextId:e.pageExecCtx.id||1})});let t=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(s)=>H(_,s,{identifier:`pptr-${t++}`})),_.addMessageFilter("tools::WebMCP.enable",(s)=>H(_,s,{})),_.addMessageFilter("tools::WebMCP.disable",(s)=>H(_,s,{})),_.addMessageFilter("tools::Page.captureScreenshot",(s)=>{return _.fireErrorToTools(s.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(s)=>H(_,s,{})),_.addMessageFilter("tools::Page.stopScreencast",(s)=>H(_,s,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(s)=>H(_,s,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(s)=>H(_,s,{}));let S="",i="0.1";_.addMessageFilter("target::Page.frameNavigated",(s)=>{let C=s.params?.frame;if(C)i=C.id??i,S=C.loaderId??S,_.fireEventToTools("Page.frameStartedLoading",{frameId:i}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"commit",timestamp:0});return Promise.resolve(s)}),_.addMessageFilter("target::Page.domContentEventFired",(s)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"DOMContentLoaded",timestamp:s.params?.timestamp??0}),Promise.resolve(s)}),_.addMessageFilter("target::Page.loadEventFired",(s)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"load",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"networkAlmostIdle",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"networkIdle",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:i}),Promise.resolve(s)})}function At(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function Ce(_){if(!_)return;if(At(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(Ce)}function $t(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map($t);return e}function os(_){_.addMessageFilter("tools::Overlay.enable",(e)=>H(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>H(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let t=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:t.highlightConfig,nodeId:t.nodeId,objectId:t.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let t=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof t.mode==="string"&&t.mode!=="none",highlightConfig:t.highlightConfig},Promise.resolve(e)})}function ns(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>H(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>H(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>H(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let t=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:t},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>H(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>H(_,e,{}))}function ee(_){switch(_){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return _;case"StyleSheet":return"Stylesheet";default:return"Other"}}function Ts(_){if(!_)return _;return{...Ds,..._,hasPostData:_.postData!=null}}function Es(_){if(!_)return _;let e=0,t=_.headers??{},S=t["Content-Length"]??t["content-length"];if(S!=null)e=Number(S)||0;return{...fs,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function Fs(_,e){if(!_)return;for(let[t,S]of Object.entries(e))if(t in _&&!(S in _))_[S]=_[t],delete _[t]}function ps(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function ls(_,e){let t=new Map,S=1024;for(let[s,C]of Object.entries(ys))_.addMessageFilter(`tools::${s}`,($)=>{return $.method=C,Promise.resolve($)});_.addMessageFilter("tools::Network.setCacheDisabled",(s)=>{if(s.params&&"cacheDisabled"in s.params)s.params={disabled:!!s.params.cacheDisabled};return Promise.resolve(s)});let i=async(s)=>{try{let C=await _.callTarget("Page.getCookies",{}),$=Array.isArray(C?.cookies)?C.cookies.map(ps):[];_.fireResultToTools(s.id,{cookies:$})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Network.getCookies",i),_.addMessageFilter("tools::Network.getAllCookies",i),_.addMessageFilter("tools::Network.setCookie",(s)=>{let C=s.params??{};return s.method="Page.setCookie",s.params={cookie:{name:C.name,value:C.value,domain:C.domain??"",path:C.path??"/",expires:C.expires??-1,session:!1,httpOnly:!!C.httpOnly,secure:!!C.secure,sameSite:C.sameSite??"None"}},Promise.resolve(s)}),_.addMessageFilter("tools::Network.setCookies",async(s)=>{let C=Array.isArray(s.params?.cookies)?s.params.cookies:[];try{await Promise.all(C.map(($)=>_.callTarget("Page.setCookie",{cookie:$}))),_.fireResultToTools(s.id,{})}catch($){_.fireErrorToTools(s.id,{message:$?.message??String($)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(s)=>{let C=s.params??{},$=C.url??`https://${(C.domain??"").replace(/^\./,"")}${C.path??"/"}`;return s.method="Page.deleteCookie",s.params={cookieName:C.name,url:$},Promise.resolve(s)}),_.addMessageFilter("tools::Network.deleteCookie",(s)=>{return s.method="Page.deleteCookie",Promise.resolve(s)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(s)=>{try{let C=await _.callTarget("Page.getCookies",{}),$=Array.isArray(C?.cookies)?C.cookies:[];await Promise.all($.map((r)=>_.callTarget("Page.deleteCookie",{cookieName:r.name,url:`${r.secure?"https":"http"}://${(r.domain??"").replace(/^\./,"")}${r.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(s.id,{})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(s)=>H(_,s,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(s)=>H(_,s,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(s)=>H(_,s,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(s)=>H(_,s,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(s)=>H(_,s,{})),_.addMessageFilter("tools::Network.getResponseBody",async(s)=>{let C=s.params?.requestId,$=typeof C==="string"?t.get(C):void 0;if(!$)return _.fireErrorToTools(s.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;try{let r=await _.callTarget("Network.loadResource",{frameId:$.frameId,url:$.url}),o=String(r?.content??""),y=String(r?.mimeType??""),n=/^(text\/|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))/.test(y),f=n?o:Buffer.from(o,"binary").toString("base64");_.fireResultToTools(s.id,{body:f,base64Encoded:!n})}catch(r){_.fireErrorToTools(s.id,{message:`Network.getResponseBody fallback (loadResource) failed: ${r?.message??String(r)}`})}return null});for(let[s,C]of Object.entries(as))_.addMessageFilter(`target::${s}`,($)=>{return Fs($.params,C),Promise.resolve($)});_.addMessageFilter("target::Network.requestWillBeSent",(s)=>{let C=s.params;if(C){if(Object.assign(C,{...cs,...C}),C.request=Ts(C.request),C.type=ee(C.type),typeof C.requestId==="string"&&typeof C.request?.url==="string"){if(t.size>=1024){let $=t.keys().next().value;if($!==void 0)t.delete($)}t.set(C.requestId,{url:C.request.url,frameId:C.frameId})}}return Promise.resolve(s)}),_.addMessageFilter("target::Network.responseReceived",(s)=>{let C=s.params;if(C)Object.assign(C,{...Bs,...C}),C.response=Es(C.response),C.type=ee(C.type);return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFinished",(s)=>{let C=s.params;if(C){let $=C.metrics?.responseBodyBytesReceived;if(typeof $==="number"&&C.encodedDataLength==null)C.encodedDataLength=$;Object.assign(C,{...Rs,...C})}return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFailed",(s)=>{let C=s.params;if(C){if(C.type=ee(C.type),!("canceled"in C))C.canceled=!1}return Promise.resolve(s)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(s)=>{if(s.method="Network.requestServedFromCache",s.params)s.params={requestId:s.params.requestId};return Promise.resolve(s)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(s)=>{let C=s.params??{};if(!e)return _.fireResultToTools(s.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let $=await _.callTarget("Network.loadResource",{frameId:C.frameId,url:C.url}),r=!!$?.content&&($?.status??0)>=200&&($?.status??0)<300,o;if(r)o=`network-resource:${C.frameId??""}:${C.url}`,e.set(o,String($.content));_.fireResultToTools(s.id,{resource:{success:r,stream:o,httpStatusCode:$?.status,headers:$?.headers,mimeType:$?.mimeType}})}catch($){_.fireResultToTools(s.id,{resource:{success:!1,netError:2,netErrorName:$?.message??"ERR_FAILED"}})}return null})}function vs(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(t)=>H(_,t,{}))}function us(_){_.addMessageFilter("target::Inspector.inspect",(e)=>{if(e.method="DOM.inspectNodeRequested",e.params)e.params.backendNodeId=e.params.object?.objectId,delete e.params.object,delete e.params.hints;return Promise.resolve(e)})}function Os(_){if(!_)return _;let e=_.origin==="inspector";return{styleSheetId:_.styleSheetId,frameId:_.frameId,sourceURL:_.sourceURL??"",origin:_.origin==="author"?"regular":_.origin,title:_.title??"",disabled:!!_.disabled,isInline:!!_.isInline,startLine:_.startLine??0,startColumn:_.startColumn??0,isMutable:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function re(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:s_(_.style),selectorList:ws(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((t)=>({text:t.text,sourceURL:t.sourceURL,source:gs[t.type]}));return e}function Hs(_){let e={lastNodeId:0},t=new Map;async function S(i,s){let C=t.get(i);if(!C)try{if(C=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:i}))?.styleSheet,C)t.set(i,C)}catch{}let $=C?.rules??[];for(let r=0;r<$.length;r++)if(bs($[r]?.style?.range,s))return{styleSheetId:i,ordinal:r};return{styleSheetId:i,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(i)=>{return _.fireResultToTools(i.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(i)=>{if(i.params?.header)i.params.header=Os(i.params.header);return Promise.resolve(i)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(i)=>{let s=i.result;if(s)i.result={inlineStyle:s_(s.inlineStyle),attributesStyle:s_(s.attributesStyle)};return Promise.resolve(i)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(i)=>{if(typeof i.params?.nodeId==="number")e.lastNodeId=i.params.nodeId;try{let[s,C]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:i.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:i.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(i.id,{inlineStyle:s_(s?.inlineStyle),attributesStyle:s_(s?.attributesStyle),matchedCSSRules:Be(C?.matchedCSSRules),pseudoElements:Ns(C?.pseudoElements),inherited:hs(C?.inherited),cssKeyframesRules:[]})}catch(s){_.fireErrorToTools(i.id,{message:s?.message??String(s)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(i)=>{let s=i.params?.edits??[],C=[];for(let $ of s)try{let r=await S($.styleSheetId,$.range),o=await _.callTarget("CSS.setStyleText",{styleId:r,text:$.text});C.push(s_(o?.style)),t.delete($.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:$.styleSheetId})}catch{C.push(null)}return _.fireResultToTools(i.id,{styles:C}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(i)=>{let{styleSheetId:s,range:C,selector:$}=i.params??{};try{let r=await S(s,C);i.params={ruleId:r,selector:$}}catch(r){return _.fireErrorToTools(i.id,{message:r?.message??String(r)}),null}return i}),_.addMessageFilter("target::CSS.setRuleSelector",(i)=>{if(i.result?.rule)i.result={rule:re(i.result.rule)};return Promise.resolve(i)}),_.addMessageFilter("tools::CSS.addRule",async(i)=>{let s=i.params??{},C=String(s.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let $=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:s.styleSheetId,selector:C});_.fireResultToTools(i.id,{rule:re($?.rule)})}catch($){_.fireErrorToTools(i.id,{message:$?.message??String($)})}return null})}function ms(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>H(_,e,Vs)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>H(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>H(_,e,{}))}function Ws(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Ps(_){let e=async(t)=>{let S=t.params??{},i=Ws(S.type);if(!i)return _.fireResultToTools(t.id,{}),null;let s=i==="click"?["mousedown","click","mouseup"]:[i];try{for(let C of s){let $={x:Number(S.x)||0,y:Number(S.y)||0,modifiers:Number(S.modifiers)||0,button:S.button??"none",type:C},r=`(${Ls}, __sd_simulate(${JSON.stringify($)}))`;await _.callTarget("Runtime.evaluate",{expression:r})}_.fireResultToTools(t.id,{})}catch(C){_.fireErrorToTools(t.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(t)=>{return _.fireResultToTools(t.id,{}),Promise.resolve(null)})}function Us(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(t)=>{let S=String(t.params?.handle??""),i=Number(t.params?.size)||Ms,s=Number(t.params?.offset)||0,C=e.get(S);if(C===void 0)return _.fireResultToTools(t.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let $=C.slice(s,s+i),r=s+i>=C.length;return _.fireResultToTools(t.id,{data:$,eof:r,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(t)=>{return e.delete(String(t.params?.handle??"")),_.fireResultToTools(t.id,{}),Promise.resolve(null)}),e}function qs(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>H(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>H(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let t=e.params??{},S=t.nodeId??t.backendNodeId;if(typeof S!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let s=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:S}))?.properties??{},C={nodeId:String(S),ignored:Boolean(s.ignored),role:s.role?{type:"role",value:String(s.role)}:void 0,name:s.label?{type:"computedString",value:String(s.label)}:void 0,backendDOMNodeId:S,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[C]})}catch(i){_.fireResultToTools(e.id,{nodes:[]})}return null})}function Gs(_){for(let[t,S]of Object.entries(Is))_.addMessageFilter(`tools::${t}`,(i)=>H(_,i,S));for(let t of Xs)for(let S of["enable","disable"])_.addMessageFilter(`tools::${t}.${S}`,(i)=>H(_,i,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[t,S]of e)_.addMessageFilter(`tools::${t}`,(i)=>H(_,i,S))}function ot(_){let e=es();Gs(_);let t=Us(_);ts(_,e),Ss(_,e),ss(_,e),rs(_),As(_),$s(_,e),os(_),ns(_),ls(_,t),vs(_),us(_),Hs(_),ms(_),Ps(_),qs(_)}function yt(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function y_(_){return _.replace(/[&<>"']/g,(e)=>ks[e])}function at(_){return nt.createServer((e,t)=>{let S=new URL(e.url??"/","http://placeholder"),i=e.headers.host??"";if(S.pathname==="/json/version"){let s=typeof _.version==="function"?_.version(i):_.version;return te(t,s)}if(S.pathname==="/json"||S.pathname==="/json/list")return te(t,_.listTargets(i));if(S.pathname==="/json/protocol")return te(t,{});if(S.pathname==="/")return Ks(t,_,i);t.writeHead(404,{"content-type":"text/plain"}),t.end("not found")})}function te(_,e,t=200){_.writeHead(t,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function Ks(_,e,t){let S=e.listTargets(t),i=S.map((r)=>`<li><strong>${y_(r.title||r.url||r.id)}</strong><br><small>${y_(r.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${y_(r.devtoolsFrontendUrl)}</code></li>`).join(""),s=`inspect-webkit${e.brand?` (${e.brand})`:""}`,C=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${y_(t)}</code>.</p>`,$=`<!doctype html><meta charset=utf-8><title>${y_(s)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${y_(s)} — ${S.length} target${S.length===1?"":"s"}</h1>`+C+`<ul>${i}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';_.writeHead(200,{"content-type":"text/html; charset=utf-8"}),_.end($)}function ct(_,e,t){return new Promise((S,i)=>{_.once("error",i);let s=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:t,host:s,ipv6Only:!1},()=>{_.off("error",i),S()})})}function Bt(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,t=(r,o)=>e?`\x1B[${r}m${o}\x1B[0m`:o,S=(r)=>t("1",r),i=(r)=>t("2",r),s=(r)=>t("36",r),C=(r)=>t("32",r),$=`http://${_.host}:${_.port}`;console.error(`${C("●")} ${S(`${_.brand} CDP`)} ${s($)}`),console.error(` ${i("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${i("vscode")} "type": "chrome", "port": ${_.port}`)}function xs(_,e){let t=!!process.env.INSPECT_WEBKIT_DEBUG,S=new Map,i=!1,s=!1,C=!1,$=new Map,r=null;function o(D){if(_.readyState!==1)return;let R=JSON.stringify(D);if(t)console.error(`[browser] tools<< ${R.slice(0,240)}`);_.send(R)}function y(D,R){let E={method:D,params:R};if(r)E.sessionId=r;o(E)}function n(D,R){return{targetId:D.targetId,type:D.type==="page"?"page":D.type||"other",title:D.title||"",url:D.url||"",attached:R,canAccessOpener:!1,browserContextId:"default"}}function f(D){for(let R of S.values())if(R.targetId===D)return!0;return!1}function u(D,R){let E=e.listEntries().find((T)=>T.targetId===D);if(!E)return null;let a=crypto.randomUUID(),A=(T)=>{let d;try{d=JSON.parse(T)}catch{return}d.sessionId=a,o(d)},B=e.createPageSession(D,A);if(!B)return null;return S.set(a,{handle:B,targetId:D}),y("Target.attachedToTarget",{sessionId:a,targetInfo:n(E,!0),waitingForDebugger:R}),{sessionId:a,entry:E}}function v(D){let R=S.get(D);if(!R)return!1;try{R.handle.close()}catch{}return S.delete(D),y("Target.detachedFromTarget",{sessionId:D,targetId:R.targetId}),!0}function O(){let D=e.listEntries(),R=new Set;for(let E of D){R.add(E.targetId);let a=$.get(E.targetId);if(!a){if($.set(E.targetId,E),i)y("Target.targetCreated",{targetInfo:n(E,f(E.targetId))});if(s&&!f(E.targetId))u(E.targetId,C)}else if(a.title!==E.title||a.url!==E.url){if($.set(E.targetId,E),i)y("Target.targetInfoChanged",{targetInfo:n(E,f(E.targetId))})}}for(let E of[...$.keys()]){if(R.has(E))continue;$.delete(E);for(let[a,A]of S)if(A.targetId===E)v(a);if(i)y("Target.targetDestroyed",{targetId:E})}}let p=setInterval(O,e.refreshMs??1000);function l(D,R){if(D)R.sessionId=D;o(R)}function F(D,R){let{id:E,method:a}=D,A=D.params??{};switch(a){case"Browser.getVersion":return l(R,{id:E,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!r)r=crypto.randomUUID();return l(R,{id:E,result:{sessionId:r}})}case"Target.setDiscoverTargets":{if(i=!!A.discover,i)for(let B of e.listEntries())$.set(B.targetId,B),y("Target.targetCreated",{targetInfo:n(B,f(B.targetId))});if(typeof E==="number")l(R,{id:E,result:{}});return}case"Target.getTargets":{let B=e.listEntries().map((T)=>n(T,f(T.targetId)));return l(R,{id:E,result:{targetInfos:B}})}case"Target.setAutoAttach":{if(s=!!A.autoAttach,C=!!A.waitForDebuggerOnStart,s){for(let B of e.listEntries())if(!f(B.targetId))u(B.targetId,C)}if(typeof E==="number")l(R,{id:E,result:{}});return}case"Target.attachToTarget":{for(let[T,d]of S)if(d.targetId===A.targetId){if(typeof E==="number")l(R,{id:E,result:{sessionId:T}});return}let B=u(A.targetId,!1);if(!B){if(typeof E==="number")l(R,{id:E,error:{code:-32000,message:"No target with given id found"}});return}if(typeof E==="number")l(R,{id:E,result:{sessionId:B.sessionId}});return}case"Target.detachFromTarget":{if(v(A.sessionId),typeof E==="number")l(R,{id:E,result:{}});return}case"Target.sendMessageToTarget":{let B=S.get(A.sessionId);if(B)B.handle.onMessageFromTools(A.message);if(typeof E==="number")l(R,{id:E,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof E==="number")l(R,{id:E,result:{}});return;case"Target.getBrowserContexts":{if(typeof E==="number")l(R,{id:E,result:{browserContextIds:["default"]}});return}}if(typeof E==="number")l(R,{id:E,error:{code:-32601,message:`Browser-level method '${a??"?"}' not implemented`}})}_.on("message",(D,R)=>{let E=R?new TextDecoder().decode(D):D.toString();if(t)console.error(`[browser] tools>> ${E.slice(0,240)}`);let a;try{a=JSON.parse(E)}catch{return}if(typeof a.sessionId==="string"){if(a.sessionId===r){let T={...a};return delete T.sessionId,F(T,a.sessionId)}let A=S.get(a.sessionId);if(!A){if(typeof a.id==="number")o({id:a.id,sessionId:a.sessionId,error:{code:-32000,message:`Session ${a.sessionId} not found`}});return}let B={...a};delete B.sessionId,A.handle.onMessageFromTools(JSON.stringify(B));return}F(a,void 0)}),_.on("close",()=>{clearInterval(p);for(let[,D]of S)try{D.handle.close()}catch{}S.clear()})}async function js(_={}){let e=_.port??9222,t=_.host??"localhost",S=await Js();if(S.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let i=new Map,s=new WeakMap,C=new Map;for(let p of S)C.set(p,[]),s.set(p,new Set),p.wi.subscribe((l)=>{let{__selector:F,__argument:D}=l;if(!F||!D)return;if(F==="_rpc_reportConnectedApplicationList:"){let R=D.WIRApplicationDictionaryKey??{},E=Object.entries(R).map(([A,B])=>({appId:A,bundleId:B.WIRApplicationBundleIdentifierKey,name:B.WIRApplicationNameKey??B.WIRApplicationBundleIdentifierKey??A,isProxy:Boolean(B.WIRIsApplicationProxyKey)}));C.set(p,E);let a=s.get(p);for(let A of E){if(A.isProxy||a.has(A.appId))continue;a.add(A.appId),p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:A.appId})}}else if(F==="_rpc_applicationConnected:"){let R=D,E=C.get(p)??[];if(!E.find((a)=>a.appId===R.WIRApplicationIdentifierKey))E.push({appId:R.WIRApplicationIdentifierKey,bundleId:R.WIRApplicationBundleIdentifierKey,name:R.WIRApplicationNameKey??R.WIRApplicationBundleIdentifierKey,isProxy:Boolean(R.WIRIsApplicationProxyKey)}),C.set(p,E);if(!R.WIRIsApplicationProxyKey){let a=s.get(p);if(!a.has(R.WIRApplicationIdentifierKey))a.add(R.WIRApplicationIdentifierKey),p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:R.WIRApplicationIdentifierKey})}}else if(F==="_rpc_applicationDisconnected:"){let R=C.get(p)??[];C.set(p,R.filter((E)=>E.appId!==D.WIRApplicationIdentifierKey)),i.delete(`${p.id}:${D.WIRApplicationIdentifierKey}`)}else if(F==="_rpc_applicationSentListing:"){let R=D.WIRApplicationIdentifierKey,E=D.WIRListingKey??{},a=new Map;for(let[A,B]of Object.entries(E))a.set(A,{pageId:Number(B.WIRPageIdentifierKey??0),title:B.WIRTitleKey??"",url:B.WIRURLKey??"",type:B.WIRTypeKey??""});i.set(`${p.id}:${R}`,a)}}),p.wi.send("_rpc_reportIdentifier:",{}),p.wi.send("_rpc_getConnectedApplications:",{});let $=setInterval(()=>{for(let p of S){let l=C.get(p)??[];for(let F of l){if(F.isProxy)continue;p.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:F.appId})}}},zs),r=new Map;function o(){let p=[];for(let l of S){let F=C.get(l)??[];for(let D of F){if(D.isProxy)continue;let R=i.get(`${l.id}:${D.appId}`);if(!R)continue;for(let E of R.values())p.push({targetId:`${l.id}:${D.appId}:${E.pageId}`,source:l,appId:D.appId,appName:D.name,bundleId:D.bundleId,pageId:E.pageId,title:E.title,url:E.url,type:E.type})}}return p}let y=crypto.randomUUID(),n=at({brand:"",version:(p)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${p}/devtools/browser/${y}`}),listTargets:(p)=>o().map((l)=>yt({reqHost:p,id:l.targetId,description:`${l.source.label}${l.bundleId?` (${l.bundleId})`:""}`,title:l.title||l.appName,url:/^https?:/i.test(l.url)?l.url:"about:blank",type:je(l.type)}))}),f=new rt.default({noServer:!0}),u=`/devtools/browser/${y}`;n.on("upgrade",(p,l,F)=>{let D=new URL(p.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${D.pathname}`),D.pathname===u){f.handleUpgrade(p,l,F,(E)=>{xs(E,{listEntries:()=>o().map((a)=>({targetId:a.targetId,type:je(a.type),title:a.title||a.appName,url:a.url})),createPageSession:(a,A)=>{let B=o().find((T)=>T.targetId===a);if(!B)return null;return v(B,A)}})});return}if(!D.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${D.pathname}`),l.destroy();return}let R=decodeURIComponent(D.pathname.slice(15));f.handleUpgrade(p,l,F,(E)=>{O(E,R)})});function v(p,l){let F=crypto.randomUUID(),R=new ce({readyState:1,send:(A)=>l(A)},p.source.wi,p.appId,p.pageId,F);ot(R),r.set(F,R);let E=!!process.env.INSPECT_WEBKIT_DEBUG,a=p.source.wi.subscribe((A)=>{if(A.__selector!=="_rpc_applicationSentData:")return;let B=A.__argument;if(!B)return;if(B.WIRDestinationKey&&B.WIRDestinationKey!==F)return;if(B.WIRApplicationIdentifierKey!==p.appId)return;if(B.WIRPageIdentifierKey!==void 0&&Number(B.WIRPageIdentifierKey)!==p.pageId)return;let T=B.WIRMessageDataKey??B.WIRSocketDataKey;if(!T)return;let d=typeof T==="string"?T:new TextDecoder().decode(T);if(E)console.error(`[cdp] target>> ${d.slice(0,240)}`);R.onMessageFromTarget(d)});return p.source.wi.forwardSocketSetup(p.appId,p.pageId,F),console.error(`# devtools attached: ${p.source.label} :: ${p.appName} :: ${p.title||p.url}`),{onMessageFromTools(A){if(E)console.error(`[cdp] tools>> ${A.slice(0,300)}`);R.onMessageFromTools(A)},close(){a();try{R.wi.forwardDidClose(R.appId,R.pageId,R.senderKey)}catch{}r.delete(R.senderKey)}}}function O(p,l){let F=o().find((R)=>R.targetId===l);if(!F){console.error(`# ws closed: unknown target ${l} (known: ${o().map((R)=>R.targetId).join(", ")||"none"})`),p.close(1011,`unknown target ${l}`);return}let D=v(F,(R)=>{if(p.readyState===1)p.send(R)});p.on("message",(R,E)=>{let a=E?new TextDecoder().decode(R):R.toString();D.onMessageFromTools(a)}),p.on("close",()=>D.close())}return await ct(n,t,e),Bt({brand:"safari",host:t,port:e}),{stop(){clearInterval($),f.close(),n.close();for(let p of S)try{p.wi.close(),p.lockdown?.close()}catch{}},getTargets(){return o()}}}async function Js(){let[_,e]=await Promise.all([Qs(),Ys()]);return[..._,...e]}async function Qs(){let _=[];try{_=await et()}catch(t){return console.error(`warn: usbmux: ${t.message}`),[]}return(await Promise.all(_.map(Zs))).filter((t)=>t!==null)}async function Zs(_){try{let e=await tt(_.Properties.SerialNumber),t=await V_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new F_(i,s);return await C.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:C,lockdown:t}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function Ys(){let _=[];try{_=await st()}catch(t){return console.error(`warn: simulator discovery: ${t.message}`),[]}return(await Promise.all(_.map(_i))).filter((t)=>t!==null)}async function _i(_){try{let{socket:e,stream:t}=await it(_.socketPath),S=new F_(e,t);return await S.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:S}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function je(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Rt{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new ze(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,t)=>{this.ws.once("open",()=>e()),this.ws.once("error",(S)=>t(S))}),this.ws.on("message",(e,t)=>{let S=t?new TextDecoder().decode(e):e.toString();for(let i of this.handlers)i(S)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,t,S){if(this.ws.readyState!==ze.OPEN)return;this.ws.send(new TextDecoder().decode(S))}forwardDidClose(_,e,t){}close(){try{this.ws.close()}catch{}}}async function ei(_){let e=_.port??9223,t=_.host??"localhost",{upstreams:S}=_,i=at({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:($)=>S.map((r)=>yt({reqHost:$,id:encodeURIComponent(r.url),description:r.label??"bun",title:r.label??r.url,url:r.url,type:"node"}))}),s=new rt.default({noServer:!0});i.on("upgrade",($,r,o)=>{let y=new URL($.url??"/","http://placeholder");if(!y.pathname.startsWith("/devtools/page/")){r.destroy();return}let n=decodeURIComponent(y.pathname.slice(15)),f=S.find((u)=>u.url===n);if(!f){r.destroy();return}s.handleUpgrade($,r,o,(u)=>{C(u,f).catch((v)=>{console.error(`# bun attach failed: ${v.message}`);try{u.close(1011,v.message)}catch{}})})});async function C($,r){let o=!!process.env.INSPECT_WEBKIT_DEBUG,y=new Rt(r.url);await y.ready();let n=crypto.randomUUID(),f=new ce($,y,"bun",0,n);ot(f);let u=y.onFrame((v)=>{if(o)console.error(`[bun] target>> ${v.slice(0,240)}`);f.onMessageFromTarget(v)});$.on("message",(v,O)=>{let p=O?new TextDecoder().decode(v):v.toString();if(o)console.error(`[bun] tools>> ${p.slice(0,300)}`);f.onMessageFromTools(p)}),$.on("close",()=>{u(),y.close()}),console.error(`# devtools attached: ${r.label??r.url}`)}return await ct(i,t,e),Bt({brand:"bun",host:t,port:e}),{stop(){s.close(),i.close()},getTargets(){return S.slice()}}}async function Dt(){return et()}async function ti(){let[_,e]=await Promise.all([Si(),si()]);return[..._.flat(),...e.flat()]}async function Si(){let _=await Dt();return Promise.all(_.map(ii))}async function si(){let _=await st();return Promise.all(_.map(Ci))}async function ii(_){let e=null;try{return e=await ri(_),await ft(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(t){return console.error(`warn: ${_.Properties.SerialNumber}: ${t.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function Ci(_){let e=null;try{let{socket:t,stream:S}=await it(_.socketPath);return e=new F_(t,S),await e.reportIdentifier(),await ft(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(t){return console.error(`warn: simulator (${_.socketPath}): ${t.message}`),[]}finally{e?.close()}}async function ri(_){let e=await tt(_.Properties.SerialNumber),t=await V_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new F_(i,s);return await C.reportIdentifier(),{client:C,lockdown:t}}async function ft(_,e){let t=(await _.listApplications()).filter((s)=>!s.isProxy),S=await Promise.all(t.map((s)=>_.getListing(s.appId))),i=[];for(let s=0;s<t.length;s++){let C=t[s];for(let $ of S[s])i.push({...e,appId:C.appId,appName:C.name??C.bundleId??C.appId,bundleId:C.bundleId,pageId:$.pageId,title:$.title,url:$.url,type:$.type})}return i}var dS,gS,Ie,wS,NS,HS,VS,__=(_,e,t)=>{var S=_!=null&&typeof _==="object";if(S){var i=e?HS??=new WeakMap:VS??=new WeakMap,s=i.get(_);if(s)return s}t=_!=null?dS(gS(_)):{};let C=e||!_||!_.__esModule?Ie(t,"default",{value:_,enumerable:!0}):t;for(let $ of wS(_))if(!NS.call(C,$))Ie(C,$,{get:hS.bind(_,$),enumerable:!0});if(S)i.set(_,C);return C},x=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),G,e_,N_,mS,T_,E_,Je,Qe,LS,Ae,$e,WS,Ze,PS,MS=`<?xml version="1.0" encoding="UTF-8"?>
11
+ ${e}</dict>`}function ne(_){let e=se(_,"");return new TextEncoder().encode(kS+e+KS)}class tt{src;pos=0;constructor(_){this.src=_}skip(){while(this.pos<this.src.length){let _=this.src[this.pos];if(_===" "||_==="\t"||_===`
12
+ `||_==="\r")this.pos++;else if(this.src.startsWith("<!--",this.pos)){let e=this.src.indexOf("-->",this.pos+4);if(e<0)throw Error("unterminated comment");this.pos=e+3}else if(this.src.startsWith("<?",this.pos)){let e=this.src.indexOf("?>",this.pos+2);if(e<0)throw Error("unterminated processing instruction");this.pos=e+2}else if(this.src.startsWith("<!DOCTYPE",this.pos)){let e=0;while(this.pos<this.src.length){let t=this.src[this.pos++];if(t==="[")e++;else if(t==="]")e--;else if(t===">"&&e===0)break}}else break}}nextTag(){if(this.skip(),this.pos>=this.src.length)return null;if(this.src[this.pos]!=="<")throw Error(`expected '<' at ${this.pos}`);let _=this.src.indexOf(">",this.pos);if(_<0)throw Error("unterminated tag");let e=this.src.slice(this.pos+1,_);this.pos=_+1;let t=e.startsWith("/"),S=e.endsWith("/");return{name:e.replace(/^\/?/,"").replace(/\/$/,"").trim().split(/\s+/)[0],selfClose:S,isClose:t}}readText(){let _=this.src.indexOf("<",this.pos),e=_<0?this.src.slice(this.pos):this.src.slice(this.pos,_);return this.pos=_<0?this.src.length:_,e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&apos;/g,"'").replace(/&amp;/g,"&")}}function ie(_,e){let t=(S)=>{let i=_.nextTag();if(!i||!i.isClose||i.name!==S)throw Error(`expected </${S}>`)};switch(e){case"true":case"false":throw Error(`<${e}> must be self-closing`);case"string":case"key":{let S=_.readText();return t(e),S}case"integer":{let S=_.readText().trim();if(t("integer"),/^-?\d+$/.test(S)&&Math.abs(Number(S))<=Number.MAX_SAFE_INTEGER)return Number(S);return BigInt(S)}case"real":{let S=Number(_.readText().trim());return t("real"),S}case"data":{let S=zS(_.readText());return t("data"),S}case"date":{let S=new Date(_.readText().trim());return t("date"),S}case"array":{let S=[];while(!0){let i=_.nextTag();if(!i)throw Error("unterminated <array>");if(i.isClose&&i.name==="array")return S;S.push(i.selfClose?Ce(i.name):ie(_,i.name))}}case"dict":{let S={};while(!0){let i=_.nextTag();if(!i)throw Error("unterminated <dict>");if(i.isClose&&i.name==="dict")return S;if(i.name!=="key")throw Error(`expected <key>, got <${i.name}>`);let s=_.readText();t("key");let C=_.nextTag();if(!C)throw Error("unterminated <dict>");S[s]=C.selfClose?Ce(C.name):ie(_,C.name)}}default:throw Error(`unknown plist tag <${e}>`)}}function Ce(_){if(_==="true")return!0;if(_==="false")return!1;if(_==="string")return"";if(_==="data")return new Uint8Array(0);if(_==="array")return[];if(_==="dict")return{};throw Error(`self-closing <${_}/> not supported`)}function V_(_){let e=typeof _==="string"?_:new TextDecoder().decode(_),t=new tt(e);while(!0){let i=t.nextTag();if(!i)throw Error("no <plist> root");if(i.name==="plist"&&!i.isClose)break}let S=t.nextTag();if(!S)throw Error("empty plist");return S.selfClose?Ce(S.name):ie(t,S.name)}function S_(_,e,t){let S=0;for(let i=0;i<t;i++)S=S*256+_[e+i];return S}function jS(_){if(_.length<41)throw Error("bplist too short");let e=new TextDecoder().decode(_.slice(0,8));if(e!=="bplist00")throw Error(`bad magic: ${e}`);let t=_.length-32,S=_[t+6],i=_[t+7],s=S_(_,t+8,8),C=S_(_,t+16,8),A=S_(_,t+24,8),r=Array(s);for(let o=0;o<s;o++)r[o]=S_(_,A+o*S,S);function n(o){return S_(_,o,i)}function y(o){let B=r[o],l=_[B],v=l>>4,O=l&15;function E(b){if(O!==15)return{len:O,next:b};let p=_[b];if((p&240)!==16)throw Error("expected int marker for length");let T=1<<(p&15);return{len:S_(_,b+1,T),next:b+1+T}}switch(v){case 0:if(O===0)return null;if(O===8)return!1;if(O===9)return!0;if(O===15)return null;throw Error(`unknown singleton ${O}`);case 1:{let b=1<<O,p=S_(_,B+1,b);if(b===8&&p>Number.MAX_SAFE_INTEGER)return BigInt(p);return p}case 2:{let b=1<<O,p=new DataView(_.buffer,_.byteOffset+B+1,b);return b===4?p.getFloat32(0,!1):p.getFloat64(0,!1)}case 3:{let p=new DataView(_.buffer,_.byteOffset+B+1,8).getFloat64(0,!1);return new Date(Date.UTC(2001,0,1)+p*1000)}case 4:{let{len:b,next:p}=E(B+1);return _.slice(p,p+b)}case 5:{let{len:b,next:p}=E(B+1);return new TextDecoder("ascii").decode(_.slice(p,p+b))}case 6:{let{len:b,next:p}=E(B+1),T=_.slice(p,p+b*2),D=new Uint8Array(T.length);for(let f=0;f<T.length;f+=2)D[f]=T[f+1],D[f+1]=T[f];return new TextDecoder("utf-16le").decode(D)}case 10:{let{len:b,next:p}=E(B+1),T=[];for(let D=0;D<b;D++)T.push(y(n(p+D*i)));return T}case 13:{let{len:b,next:p}=E(B+1),T={};for(let D=0;D<b;D++){let f=y(n(p+D*i)),a=y(n(p+(b+D)*i));if(typeof f!=="string")throw Error(`non-string dict key: ${typeof f}`);T[f]=a}return T}default:throw Error(`unknown bplist marker 0x${l.toString(16)} at ${B}`)}}return y(C)}function JS(_){if(_.length>=8){if(new TextDecoder().decode(_.slice(0,8))==="bplist00")return jS(_)}return V_(_)}class m_{chunks=[];size=0;waiters=[];closed=!1;closeErr=null;push(_){if(_.length===0)return;this.chunks.push(_),this.size+=_.length,this.drain()}close(_){this.closed=!0,this.closeErr=_??null;for(let e of this.waiters)e.reject(_??Error("stream closed"));this.waiters=[]}read(_){return new Promise((e,t)=>{if(this.closed&&this.size<_){t(this.closeErr??Error("stream closed"));return}this.waiters.push({n:_,resolve:e,reject:t}),this.drain()})}drain(){while(this.waiters.length>0&&this.waiters[0].n<=this.size){let _=this.waiters.shift(),e=new Uint8Array(_.n),t=0;while(t<_.n){let S=this.chunks[0],i=_.n-t;if(S.length<=i)e.set(S,t),t+=S.length,this.chunks.shift();else e.set(S.subarray(0,i),t),this.chunks[0]=S.subarray(i),t+=i}this.size-=_.n,_.resolve(e)}}}function ye(_,e){let t=(s)=>{e.push(new Uint8Array(s.buffer,s.byteOffset,s.byteLength))},S=()=>e.close(),i=(s)=>e.close(s);return _.on("data",t),_.on("close",S),_.on("error",i),()=>{_.off("data",t),_.off("close",S),_.off("error",i)}}async function ae(){let _=new m_;return new Promise((e,t)=>{let S=et.createConnection({path:YS}),i=(s)=>{_.close(s),t(s)};S.once("error",i),S.once("connect",()=>{S.off("error",i);let s=ye(S,_);e({socket:S,stream:_,detach:s})})})}async function _s(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!0);return(await _.read(t-4)).slice(12)}function es(_,e,t){let S=16+t.length,i=new Uint8Array(16),s=new DataView(i.buffer);s.setUint32(0,S,!0),s.setUint32(4,ZS,!0),s.setUint32(8,QS,!0),s.setUint32(12,e,!0),_.write(i),_.write(t)}async function ce(_,e,t,S){let i=ne({ClientVersionString:"inspect-webkit-1.0",ProgName:"inspect-webkit",kLibUSBMuxVersion:3,...S});es(_,t,i);let s=await _s(e);return V_(s)}async function St(){let{socket:_,stream:e}=await ae();try{return(await ce(_,e,1,{MessageType:"ListDevices"})).DeviceList??[]}finally{_.end()}}async function st(_){let{socket:e,stream:t}=await ae();try{let i=(await ce(e,t,1,{MessageType:"ReadPairRecord",PairRecordID:_})).PairRecordData;if(!i)throw Error(`no pair record for ${_} — pair the device first (open Finder/iTunes, tap "Trust")`);return V_(i)}finally{e.end()}}async function xe(_,e){let{socket:t,stream:S,detach:i}=await ae(),s=(e&255)<<8|e>>8&255,C=await ce(t,S,1,{MessageType:"Connect",DeviceID:_,PortNumber:s});if(C.MessageType!=="Result"||C.Number!==0){t.end();let A=C.Number??"?";throw Error(`Connect to device ${_} port ${e} failed (code ${A})`)}return{socket:t,stream:S,detach:i}}async function Ct(){let _=ts("lsof",["-U"],{stdio:["ignore","pipe","ignore"]});if(_.status!==0||!_.stdout)return[];let e=_.stdout.toString("utf8"),t=new Map;for(let S of e.split(`
13
+ `)){if(!/com\.apple\.webinspectord_sim\.socket\b/.test(S))continue;if(!S.startsWith("webinspec"))continue;let i=S.split(/\s+/),s=Number(i[1]),C=i[i.length-1];if(C)t.set(C,s)}return Array.from(t,([S,i])=>({socketPath:S,pid:i}))}async function rt(_){let e=new m_;return new Promise((t,S)=>{let i=it.createConnection({path:_}),s=(C)=>{e.close(C),S(C)};i.once("error",s),i.once("connect",()=>{i.off("error",s),ye(i,e),t({socket:i,stream:e})})})}async function Y_(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return V_(S)}function _e(_,e){let t=ne({Label:"inspect-webkit",...e}),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function ee(_,e){if(_.Error)throw Error(`lockdown ${e} error: ${String(_.Error)}`);if(_.Request!==e)throw Error(`lockdown expected Request=${e}, got ${String(_.Request)}`)}function je(_,e,t,S){return new Promise((i,s)=>{e();let C=new m_,A=$t.connect({socket:_,cert:Buffer.from(t.HostCertificate),key:Buffer.from(t.HostPrivateKey),ca:Buffer.from(t.RootCertificate),rejectUnauthorized:!1}),r=(n)=>{z(`${S} tls error:`,n),C.close(n),s(n)};A.once("error",r),A.once("secureConnect",()=>{z(`${S} tls handshake complete`),A.off("error",r);let n=ye(A,C);i({socket:A,stream:C,detach:n})})})}class L_{socket;stream;pair;udid;deviceID;detach;constructor(_,e,t,S,i,s){this.socket=_,this.stream=e,this.pair=t,this.udid=S,this.deviceID=i,this.detach=s}static async open(_,e){z("connecting usbmux tunnel to lockdown port",ze);let{socket:t,stream:S,detach:i}=await xe(_.DeviceID,ze),s=new L_(t,S,e,_.Properties.SerialNumber,_.DeviceID,i);z("sending QueryType"),_e(t,{Request:"QueryType"});let C=await Y_(S);if(z("QueryType reply:",C),ee(C,"QueryType"),C.Type!=="com.apple.mobile.lockdown")throw Error(`unexpected lockdown Type: ${String(C.Type)}`);return s}async startSession(){z("StartSession with HostID",this.pair.HostID),_e(this.socket,{Request:"StartSession",HostID:this.pair.HostID,SystemBUID:this.pair.SystemBUID});let _=await Y_(this.stream);if(z("StartSession reply:",_),ee(_,"StartSession"),_.EnableSessionSSL){z("upgrading to TLS");let e=await je(this.socket,this.detach,this.pair,"lockdown");this.socket=e.socket,this.stream=e.stream,this.detach=e.detach,z("TLS upgrade complete")}}async startService(_){z("StartService",_),_e(this.socket,{Request:"StartService",Service:_});let e=await Y_(this.stream);return z("StartService reply:",e),ee(e,"StartService"),{port:e.Port,enableServiceSSL:Boolean(e.EnableServiceSSL),service:_}}async connectService(_){z("connecting service tunnel to port",_.port,"ssl=",_.enableServiceSSL);let{socket:e,stream:t,detach:S}=await xe(this.deviceID,_.port);if(!_.enableServiceSSL)return{socket:e,stream:t};let i=await je(e,S,this.pair,"service");return{socket:i.socket,stream:i.stream}}close(){this.socket.end()}}async function Ss(_){let e=await _.read(4),t=new DataView(e.buffer,e.byteOffset,4).getUint32(0,!1),S=await _.read(t);return JS(S)}function ss(_,e){let t=ne(e),S=new Uint8Array(4);new DataView(S.buffer).setUint32(0,t.length,!1),_.write(S),_.write(t)}function is(){let _=crypto.getRandomValues(new Uint8Array(16));_[6]=_[6]&15|64,_[8]=_[8]&63|128;let e=Array.from(_,(t)=>t.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}class b_{socket;stream;connectionId=is();subscribers=new Set;reading;constructor(_,e){this.socket=_,this.stream=e,this.reading=(async()=>{try{while(!e.closed){let t=await Ss(e);for(let S of[...this.subscribers])try{S(t)}catch{}}}catch{}})()}subscribe(_){return this.subscribers.add(_),()=>this.subscribers.delete(_)}waitFor(_,e=5000){return new Promise((t,S)=>{let i=setTimeout(()=>{s(),S(Error(`timeout waiting for ${_} after ${e}ms`))},e),s=this.subscribe((C)=>{if(C.__selector===_)clearTimeout(i),s(),t(C)})})}send(_,e){ss(this.socket,{__selector:_,__argument:{WIRConnectionIdentifierKey:this.connectionId,...e}})}async reportIdentifier(){this.send("_rpc_reportIdentifier:",{})}async listApplications(){this.send("_rpc_getConnectedApplications:",{});let _=await this.waitFor("_rpc_reportConnectedApplicationList:",3000).catch(()=>null);if(!_)return[];let t=_.__argument.WIRApplicationDictionaryKey??{},S=[];for(let[i,s]of Object.entries(t)){let C=s;S.push({appId:i,bundleId:C.WIRApplicationBundleIdentifierKey,name:C.WIRApplicationNameKey,isProxy:Boolean(C.WIRIsApplicationProxyKey),isActive:Boolean(C.WIRIsApplicationActiveKey),hostAppId:C.WIRHostApplicationIdentifierKey})}return S}async getListing(_){this.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:_});let e=await this.waitFor("_rpc_applicationSentListing:",3000).catch(()=>null);if(!e)return[];let S=e.__argument.WIRListingKey??{},i=[];for(let s of Object.values(S)){let C=s;i.push({pageId:Number(C.WIRPageIdentifierKey??0),title:C.WIRTitleKey??"",url:C.WIRURLKey??"",type:C.WIRTypeKey??""})}return i}get connection(){return this.connectionId}forwardSocketSetup(_,e,t){this.send("_rpc_forwardSocketSetup:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t,WIRAutomaticallyPause:!1})}forwardSocketData(_,e,t,S){this.send("_rpc_forwardSocketData:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t,WIRSocketDataKey:S})}forwardDidClose(_,e,t){this.send("_rpc_forwardDidClose:",{WIRApplicationIdentifierKey:_,WIRPageIdentifierKey:e,WIRSenderKey:t})}onMessage(_){return this.subscribe(_)}close(){this.socket.end()}}class Re{ws;wi;appId;pageId;senderKey;filters=new Map;toolRequestMap=new Map;adapterRequestMap=new Map;requestId=0;innerTargetId=null;wrappedAckIds=new Set;outgoingQueue=[];sawAnyTargetCreated=!1;constructor(_,e,t,S,i){this.ws=_,this.wi=e,this.appId=t,this.pageId=S,this.senderKey=i}addMessageFilter(_,e){let t=this.filters.get(_);if(!t)this.filters.set(_,t=[]);t.push(e)}callTarget(_,e={}){return new Promise((t,S)=>{let i=--this.requestId;this.adapterRequestMap.set(i,{resolve:t,reject:S}),this.sendRaw(JSON.stringify({id:i,method:_,params:e}))})}fireEventToTools(_,e){this.sendToTools(JSON.stringify({method:_,params:e}))}fireResultToTools(_,e){this.sendToTools(JSON.stringify({id:_,result:e}))}fireErrorToTools(_,e){this.sendToTools(JSON.stringify({id:_,error:{code:e.code??-32000,message:e.message}}))}replyEmpty(_){if(typeof _.id==="number")this.fireResultToTools(_.id,{});return Promise.resolve(null)}async onMessageFromTools(_){let e;try{e=JSON.parse(_)}catch{return}if(typeof e.method==="string"&&typeof e.id==="number")this.toolRequestMap.set(e.id,e.method);let t=`tools::${e.method}`,S=this.filters.get(t),i=e;if(S)for(let s of S){if(!i)break;i=await s(i)}if(i)this.sendRaw(JSON.stringify(i))}async onMessageFromTarget(_){let e;try{e=JSON.parse(_)}catch{return}if(e.method==="Target.targetCreated"){this.sawAnyTargetCreated=!0;let s=e.params?.targetInfo;if(s?.type==="page"&&!this.innerTargetId)this.innerTargetId=s.targetId,this.flushQueue();return}if(e.method==="Target.didCommitProvisionalTarget"){let s=e.params?.newTargetId;if(typeof s==="string")this.innerTargetId=s;return}if(e.method==="Target.targetDestroyed")return;if(e.method==="Target.dispatchMessageFromTarget"){let s=e.params?.message;if(typeof s==="string")return this.onMessageFromTarget(s);return}if(typeof e.id==="number"&&this.wrappedAckIds.has(e.id)){this.wrappedAckIds.delete(e.id);return}if(typeof e.id==="number"){let s=this.adapterRequestMap.get(e.id);if(s){if(this.adapterRequestMap.delete(e.id),"error"in e&&e.error)s.reject(e.error);else s.resolve(e.result??{});return}let C=this.toolRequestMap.get(e.id);if(C){this.toolRequestMap.delete(e.id);let A=`target::${C}`;if("error"in e&&this.filters.has("target::error"))A="target::error";let r=this.filters.get(A);if(!r)return this.sendToTools(_);let n=e;for(let y of r){if(!n)break;n=await y(n)}if(n)this.sendToTools(JSON.stringify(n));return}return this.sendToTools(_)}let t=`target::${e.method}`,S=this.filters.get(t);if(!S)return this.sendToTools(_);let i=e;for(let s of S){if(!i)break;i=await s(i)}if(i)this.sendToTools(JSON.stringify(i))}sendRaw(_){let e=null;try{e=JSON.parse(_)}catch{}let t=e&&typeof e.method==="string"&&e.method.startsWith("Target.");if(this.innerTargetId&&e&&!t){if(typeof e.id==="number")this.wrappedAckIds.add(e.id);let S={id:e.id,method:"Target.sendMessageToTarget",params:{id:e.id,message:_,targetId:this.innerTargetId}};this.writeFrame(JSON.stringify(S));return}if(!this.innerTargetId&&e&&!t){if(this.outgoingQueue.push(_),this.outgoingQueue.length===1)setTimeout(()=>{if(!this.innerTargetId&&!this.sawAnyTargetCreated&&this.outgoingQueue.length>0){let S=this.outgoingQueue;this.outgoingQueue=[];for(let i of S)this.writeFrame(i)}},250);return}this.writeFrame(_)}flushQueue(){if(this.outgoingQueue.length===0)return;let _=this.outgoingQueue;this.outgoingQueue=[];for(let e of _)this.sendRaw(e)}writeFrame(_){this.wi.forwardSocketData(this.appId,this.pageId,this.senderKey,new TextEncoder().encode(_))}sendToTools(_){if(this.ws.readyState===1)this.ws.send(_)}}function rs(){return{lastScriptEval:{value:""},pageExecCtx:{id:0,isPage:!1},lastConsoleApiCalled:{value:null}}}function N(_,e,t){return _.fireResultToTools(e.id,t),Promise.resolve(null)}function $s(_,e){_.addMessageFilter("tools::Debugger.canSetScriptSource",(t)=>N(_,t,{result:!1})),_.addMessageFilter("tools::Debugger.setBlackboxPatterns",(t)=>N(_,t,{})),_.addMessageFilter("tools::Debugger.setAsyncCallStackDepth",(t)=>N(_,t,{})),_.addMessageFilter("target::Debugger.enable",(t)=>{return _.callTarget("Debugger.setBreakpointsActive",{active:!0}).catch(()=>{}),_.callTarget("Debugger.setPauseOnDebuggerStatements",{enabled:!0}).catch(()=>{}),Promise.resolve(t)}),_.addMessageFilter("target::Debugger.scriptParsed",(t)=>{if(t.params?.scriptId)e.lastScriptEval.value=String(t.params.scriptId);return Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBreakpoint",(t)=>{let S=t.params??{};return t.params={location:S.location,options:S.condition?{condition:S.condition}:{}},Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBreakpointByUrl",(t)=>{let S=t.params??{};return t.params={lineNumber:S.lineNumber,url:S.url,urlRegex:S.urlRegex,columnNumber:S.columnNumber,options:S.condition?{condition:S.condition}:{}},Promise.resolve(t)});for(let t of["removeBreakpoint","continueToLocation","stepInto","stepOver","stepOut","resume","pause","getScriptSource","evaluateOnCallFrame"])_.addMessageFilter(`tools::Debugger.${t}`,(S)=>Promise.resolve(S));_.addMessageFilter("target::Debugger.paused",(t)=>{let S=t.params?.callFrames;if(Array.isArray(S))for(let i of S){if(i.functionName==null&&typeof i.name==="string")i.functionName=i.name;if(!i.location&&i.sourceCodeLocation)i.location={scriptId:String(i.sourceCodeLocation.scriptId??""),lineNumber:i.sourceCodeLocation.lineNumber??0,columnNumber:i.sourceCodeLocation.columnNumber??0};if(Array.isArray(i.scopeChain)){for(let s of i.scopeChain)if(!s.object&&s.value)s.object=s.value}}return Promise.resolve(t)}),_.addMessageFilter("tools::Debugger.setBlackboxedRanges",(t)=>N(_,t,{})),_.addMessageFilter("tools::Debugger.setSkipAllPauses",(t)=>N(_,t,{})),_.addMessageFilter("tools::Debugger.setPauseOnExceptions",(t)=>{return Promise.resolve(t)})}function As(_,e){_.addMessageFilter("target::Runtime.executionContextCreated",(t)=>{let S=t.params?.context;if(S){if(!S.origin)S.origin=S.name??"";let i=Number(S.id),s=!!(S.isPageContext||S.type==="normal");if(Number.isFinite(i)&&i>0){if(!e.pageExecCtx.id||s&&!e.pageExecCtx.isPage)e.pageExecCtx.id=i,e.pageExecCtx.isPage=s}if(S.frameId)S.auxData={frameId:S.frameId,isDefault:!0},delete S.frameId}return Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.evaluate",(t)=>{let S=t.params;if(!S)return Promise.resolve(t);if("silent"in S)S.doNotPauseOnExceptionsAndMuteConsole=!!S.silent,delete S.silent;if("userGesture"in S)S.emulateUserGesture=!!S.userGesture,delete S.userGesture;return Promise.resolve(t)}),_.addMessageFilter("target::Runtime.evaluate",(t)=>{let S=t.result;if(S?.wasThrown){if(S.result)S.result.subtype="error";S.exceptionDetails={exceptionId:0,text:S.result?.description??"Uncaught",url:"",scriptId:e.lastScriptEval.value,lineNumber:0,columnNumber:0,stackTrace:{callFrames:[{functionName:"",scriptId:e.lastScriptEval.value,url:"",lineNumber:0,columnNumber:0}]},exception:S.result}}return Promise.resolve(t)}),_.addMessageFilter("target::Runtime.getProperties",(t)=>{let S=t.result;if(!S)return Promise.resolve(t);let i=Array.isArray(S.result)?S.result:Array.isArray(S.properties)?S.properties:null;if(i)S.result=i.filter((s)=>s.isOwn||s.nativeGetter).map((s)=>({...s,isOwn:!0})),delete S.properties;if(Array.isArray(S.internalProperties))S.internalProperties=S.internalProperties.map((s)=>({name:s.name,value:s.value}));return Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.compileScript",(t)=>N(_,t,{scriptId:null,exceptionDetails:null})),_.addMessageFilter("tools::Runtime.globalLexicalScopeNames",(t)=>N(_,t,{names:[]})),_.addMessageFilter("tools::Runtime.terminateExecution",(t)=>N(_,t,{})),_.addMessageFilter("tools::Runtime.getIsolateId",(t)=>N(_,t,{id:"inspect-webkit"})),_.addMessageFilter("tools::Runtime.getHeapUsage",(t)=>N(_,t,{usedSize:0,totalSize:0})),_.addMessageFilter("tools::Runtime.discardConsoleEntries",(t)=>{return t.method="Console.clearMessages",Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.runIfWaitingForDebugger",(t)=>N(_,t,{})),_.addMessageFilter("tools::Runtime.setAsyncCallStackDepth",(t)=>N(_,t,{})),_.addMessageFilter("tools::Runtime.releaseObject",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.releaseObjectGroup",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.callFunctionOn",(t)=>Promise.resolve(t)),_.addMessageFilter("tools::Runtime.queryObjects",(t)=>Promise.resolve(t)),_.addMessageFilter("target::Debugger.globalObjectCleared",(t)=>{return _.fireEventToTools("Runtime.executionContextsCleared",{}),Promise.resolve(null)})}function os(_,e){_.addMessageFilter("tools::Log.startViolationsReport",(t)=>N(_,t,{})),_.addMessageFilter("tools::Log.stopViolationsReport",(t)=>N(_,t,{})),_.addMessageFilter("tools::Log.clear",(t)=>{return t.method="Console.clearMessages",Promise.resolve(t)}),_.addMessageFilter("tools::Log.disable",(t)=>{return t.method="Console.disable",Promise.resolve(t)}),_.addMessageFilter("tools::Log.enable",(t)=>{return t.method="Console.enable",Promise.resolve(t)}),_.addMessageFilter("tools::Runtime.enable",(t)=>{return _.callTarget("Console.enable",{}).catch(()=>{}),Promise.resolve(t)}),_.addMessageFilter("target::Console.messageAdded",(t)=>{let S=t.params?.message??{},s=(Array.isArray(S.stackTrace)?S.stackTrace:Array.isArray(S.stackTrace?.callFrames)?S.stackTrace.callFrames:[]).map((r)=>({functionName:r.functionName??"",scriptId:r.scriptId??"",url:r.url??"",lineNumber:Number(r.lineNumber??0),columnNumber:Number(r.columnNumber??0)})),C=s.length?{callFrames:s}:void 0,A=Date.now();if(S.source==="console-api"){let r=S.type==="log"?S.level??"log":S.type??"log",n=ns(r),y=Array.isArray(S.parameters)&&S.parameters.length>0?S.parameters:[{type:"string",value:String(S.text??"")}],o={type:n,args:y,executionContextId:e.pageExecCtx.id||1,timestamp:A,stackTrace:C};return e.lastConsoleApiCalled.value=o,_.fireEventToTools("Runtime.consoleAPICalled",o),Promise.resolve(null)}if(S.source==="javascript"&&S.level==="error")return _.fireEventToTools("Runtime.exceptionThrown",{timestamp:A,exceptionDetails:{exceptionId:0,text:String(S.text??"Uncaught"),lineNumber:Number(S.line??0),columnNumber:Number(S.column??0),scriptId:e.lastScriptEval.value,url:S.url,stackTrace:C,exception:{type:"string",value:String(S.text??"")}}}),Promise.resolve(null);return _.fireEventToTools("Log.entryAdded",{entry:{source:S.source??"other",level:ys(S.level??S.type??"log"),text:String(S.text??""),timestamp:A,url:S.url,lineNumber:S.line,stackTrace:C,networkRequestId:S.networkRequestId}}),Promise.resolve(null)}),_.addMessageFilter("target::Console.messagesCleared",()=>{return _.fireEventToTools("Log.entriesCleared",{}),_.fireEventToTools("Runtime.consoleAPICalled",{type:"clear",args:[],executionContextId:e.pageExecCtx.id||1,timestamp:Date.now()}),e.lastConsoleApiCalled.value=null,Promise.resolve(null)}),_.addMessageFilter("target::Console.messageRepeatCountUpdated",()=>{let t=e.lastConsoleApiCalled.value;if(t)_.fireEventToTools("Runtime.consoleAPICalled",{...t,timestamp:Date.now()});return Promise.resolve(null)}),_.addMessageFilter("target::Console.heapSnapshot",()=>Promise.resolve(null))}function ns(_){switch(_){case"warn":case"warning":return"warning";case"log":case"info":case"error":case"debug":case"dir":case"dirxml":case"table":case"trace":case"clear":case"assert":case"profile":case"profileEnd":case"count":case"timeEnd":case"startGroup":case"startGroupCollapsed":case"endGroup":return _;default:return"log"}}function ys(_){switch(_){case"log":case"debug":return"verbose";case"info":return"info";case"warn":case"warning":return"warning";case"error":return"error";default:return"info"}}function as(_){let e=new Set;_.addMessageFilter("tools::DOM.enable",(t)=>N(_,t,{})),_.addMessageFilter("tools::DOM.setInspectMode",(t)=>{if(t.method="DOM.setInspectModeEnabled",t.params)t.params.enabled=t.params.mode==="searchForNode",delete t.params.mode,delete t.params.highlightConfig;return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.setInspectedNode",(t)=>{return t.method="Console.addInspectedNode",Promise.resolve(t)}),_.addMessageFilter("tools::DOM.performSearch",(t)=>{if(t.params)t.params={query:t.params.query,caseSensitive:!!t.params.caseSensitive};return Promise.resolve(t)}),_.addMessageFilter("target::DOM.performSearch",(t)=>{let S=t.result?.searchId;if(typeof S==="string")e.add(S);return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.discardSearchResults",(t)=>{let S=t.params?.searchId;if(typeof S==="string")e.delete(S);return Promise.resolve(t)}),_.addMessageFilter("tools::DOM.pushNodesByBackendIdsToFrontend",async(t)=>{let S=t.params?.backendNodeIds??[],i=await Promise.all(S.map((s)=>_.callTarget("DOM.pushNodeByBackendIdToFrontend",{backendNodeId:s}).then((C)=>C.nodeId).catch(()=>s)));return _.fireResultToTools(t.id,{nodeIds:i}),null}),_.addMessageFilter("tools::DOM.getBoxModel",(t)=>{return _.callTarget("DOM.highlightNode",{highlightConfig:{showInfo:!0,contentColor:{r:111,g:168,b:220,a:0.66},paddingColor:{r:147,g:196,b:125,a:0.55},borderColor:{r:255,g:229,b:153,a:0.66},marginColor:{r:246,g:178,b:107,a:0.66}},nodeId:t.params?.nodeId}).catch(()=>{}),Promise.resolve(null)}),_.addMessageFilter("tools::DOM.getNodeForLocation",async(t)=>{try{let i=(await _.callTarget("Runtime.evaluate",{expression:`document.elementFromPoint(${t.params?.x},${t.params?.y})`})).result?.objectId;if(!i)return _.fireResultToTools(t.id,{nodeId:0}),null;let s=await _.callTarget("DOM.requestNode",{objectId:i});_.fireResultToTools(t.id,{nodeId:s.nodeId,backendNodeId:s.nodeId})}catch(S){_.fireErrorToTools(t.id,{message:S?.message??String(S)})}return null}),_.addMessageFilter("tools::DOM.resolveNode",(t)=>{if(t.params&&t.params.objectGroup===void 0)delete t.params.objectGroup;return Promise.resolve(t)})}function cs(_){_.addMessageFilter("tools::DOMDebugger.getEventListeners",async(e)=>{try{let t=await _.callTarget("DOM.requestNode",{objectId:e.params?.objectId}),i=((await _.callTarget("DOM.getEventListenersForNode",{nodeId:t.nodeId,objectGroup:"event-listeners-panel"})).listeners??[]).map((s)=>({type:s.type,useCapture:!!s.useCapture,passive:!!s.passive,once:!!s.once,location:s.location,handler:s.handler}));_.fireResultToTools(e.id,{listeners:i})}catch(t){_.fireErrorToTools(e.id,{message:t?.message??String(t)})}return null}),_.addMessageFilter("tools::DOMDebugger.setXHRBreakpoint",(e)=>N(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeXHRBreakpoint",(e)=>N(_,e,{})),_.addMessageFilter("tools::DOMDebugger.setEventListenerBreakpoint",(e)=>N(_,e,{})),_.addMessageFilter("tools::DOMDebugger.removeEventListenerBreakpoint",(e)=>N(_,e,{}))}function Rs(_,e){_.addMessageFilter("tools::Page.setOverlayMessage",(s)=>{return s.method="Debugger.setOverlayMessage",Promise.resolve(s)}),_.addMessageFilter("tools::Page.configureOverlay",(s)=>{return s.method="Debugger.setOverlayMessage",Promise.resolve(s)}),_.addMessageFilter("tools::Page.getNavigationHistory",async(s)=>{try{let C=await _.callTarget("Runtime.evaluate",{expression:"window.location.href"}),A=await _.callTarget("Runtime.evaluate",{expression:"document.title"});_.fireResultToTools(s.id,{currentIndex:0,entries:[{id:0,url:C.result?.value??"",userTypedURL:C.result?.value??"",title:A.result?.value??"",transitionType:"link"}]})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("target::Page.frameNavigated",(s)=>{return ot(s.params?.frame),Promise.resolve(s)}),_.addMessageFilter("target::Page.getResourceTree",(s)=>{return re(s.result?.frameTree),Promise.resolve(s)}),_.addMessageFilter("tools::Page.getFrameTree",async(s)=>{if(typeof s.id!=="number")return null;try{let C=await _.callTarget("Page.getResourceTree",{}),A=nt(C?.frameTree);re(A),_.fireResultToTools(s.id,{frameTree:A})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Page.createIsolatedWorld",(s)=>{if(typeof s.id!=="number")return Promise.resolve(null);return N(_,s,{executionContextId:e.pageExecCtx.id||1})});let t=1;_.addMessageFilter("tools::Page.addScriptToEvaluateOnNewDocument",(s)=>N(_,s,{identifier:`pptr-${t++}`})),_.addMessageFilter("tools::WebMCP.enable",(s)=>N(_,s,{})),_.addMessageFilter("tools::WebMCP.disable",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.captureScreenshot",(s)=>{return _.fireErrorToTools(s.id,{message:"Page.captureScreenshot not supported by Safari"}),Promise.resolve(null)}),_.addMessageFilter("tools::Page.startScreencast",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.stopScreencast",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.screencastFrameAck",(s)=>N(_,s,{})),_.addMessageFilter("tools::Page.setLifecycleEventsEnabled",(s)=>N(_,s,{}));let S="",i="0.1";_.addMessageFilter("target::Page.frameNavigated",(s)=>{let C=s.params?.frame;if(C)i=C.id??i,S=C.loaderId??S,_.fireEventToTools("Page.frameStartedLoading",{frameId:i}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"init",timestamp:0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"commit",timestamp:0});return Promise.resolve(s)}),_.addMessageFilter("target::Page.domContentEventFired",(s)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"DOMContentLoaded",timestamp:s.params?.timestamp??0}),Promise.resolve(s)}),_.addMessageFilter("target::Page.loadEventFired",(s)=>{return _.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"load",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"networkAlmostIdle",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.lifecycleEvent",{frameId:i,loaderId:S,name:"networkIdle",timestamp:s.params?.timestamp??0}),_.fireEventToTools("Page.frameStoppedLoading",{frameId:i}),Promise.resolve(s)})}function ot(_){if(!_)return;if(!_.securityOrigin)try{_.securityOrigin=new URL(_.url??"").origin}catch{_.securityOrigin="://"}if(!_.mimeType)_.mimeType="text/html"}function re(_){if(!_)return;if(ot(_.frame),Array.isArray(_.childFrames))_.childFrames.forEach(re)}function nt(_){if(!_)return _;let e={frame:_.frame};if(Array.isArray(_.childFrames))e.childFrames=_.childFrames.map(nt);return e}function Bs(_){_.addMessageFilter("tools::Overlay.enable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Overlay.disable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Overlay.highlightNode",(e)=>{let t=e.params??{};return e.method="DOM.highlightNode",e.params={highlightConfig:t.highlightConfig,nodeId:t.nodeId,objectId:t.objectId},Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightFrame",(e)=>{return e.method="DOM.highlightFrame",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightQuad",(e)=>{return e.method="DOM.highlightQuad",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.highlightRect",(e)=>{return e.method="DOM.highlightRect",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.hideHighlight",(e)=>{return e.method="DOM.hideHighlight",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Overlay.setInspectMode",(e)=>{let t=e.params??{};return e.method="DOM.setInspectModeEnabled",e.params={enabled:typeof t.mode==="string"&&t.mode!=="none",highlightConfig:t.highlightConfig},Promise.resolve(e)})}function Ds(_){_.addMessageFilter("tools::Emulation.canEmulate",(e)=>N(_,e,{result:!0})),_.addMessageFilter("tools::Emulation.setTouchEmulationEnabled",(e)=>{return e.method="Page.setTouchEmulationEnabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setScriptExecutionDisabled",(e)=>{return e.method="Page.setScriptExecutionDisabled",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setEmulatedMedia",(e)=>{return e.method="Page.setEmulatedMedia",Promise.resolve(e)}),_.addMessageFilter("tools::Rendering.setShowPaintRects",(e)=>{return e.method="Page.setShowPaintRects",Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setDeviceMetricsOverride",(e)=>N(_,e,{})),_.addMessageFilter("tools::Emulation.clearDeviceMetricsOverride",(e)=>N(_,e,{})),_.addMessageFilter("tools::Emulation.setUserAgentOverride",(e)=>{let t=e.params?.userAgent??"";return e.method="Page.overrideUserAgent",e.params={value:t},Promise.resolve(e)}),_.addMessageFilter("tools::Emulation.setFocusEmulationEnabled",(e)=>N(_,e,{})),_.addMessageFilter("tools::Emulation.setDefaultBackgroundColorOverride",(e)=>N(_,e,{}))}function te(_){switch(_){case"Document":case"Image":case"Font":case"Script":case"XHR":case"Fetch":case"Ping":case"WebSocket":return _;case"StyleSheet":return"Stylesheet";default:return"Other"}}function ls(_){if(!_)return _;return{...ps,..._,hasPostData:_.postData!=null}}function us(_){if(!_)return _;let e=0,t=_.headers??{},S=t["Content-Length"]??t["content-length"];if(S!=null)e=Number(S)||0;return{...vs,..._,fromDiskCache:_.source==="disk-cache",fromServiceWorker:_.source==="service-worker",encodedDataLength:e}}function Os(_,e){if(!_)return;for(let[t,S]of Object.entries(e))if(t in _&&!(S in _))_[S]=_[t],delete _[t]}function ds(_){let e=typeof _.size==="number"?_.size:(_.name?.length??0)+(_.value?.length??0);return{name:_.name,value:_.value,domain:_.domain,path:_.path,expires:_.expires??-1,size:e,httpOnly:!!_.httpOnly,secure:!!_.secure,session:!!_.session,..._.sameSite?{sameSite:_.sameSite}:{}}}function gs(_,e){let t=new Map,S=1024;for(let[s,C]of Object.entries(Ts))_.addMessageFilter(`tools::${s}`,(A)=>{return A.method=C,Promise.resolve(A)});_.addMessageFilter("tools::Network.setCacheDisabled",(s)=>{if(s.params&&"cacheDisabled"in s.params)s.params={disabled:!!s.params.cacheDisabled};return Promise.resolve(s)});let i=async(s)=>{try{let C=await _.callTarget("Page.getCookies",{}),A=Array.isArray(C?.cookies)?C.cookies.map(ds):[];_.fireResultToTools(s.id,{cookies:A})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Network.getCookies",i),_.addMessageFilter("tools::Network.getAllCookies",i),_.addMessageFilter("tools::Network.setCookie",(s)=>{let C=s.params??{};return s.method="Page.setCookie",s.params={cookie:{name:C.name,value:C.value,domain:C.domain??"",path:C.path??"/",expires:C.expires??-1,session:!1,httpOnly:!!C.httpOnly,secure:!!C.secure,sameSite:C.sameSite??"None"}},Promise.resolve(s)}),_.addMessageFilter("tools::Network.setCookies",async(s)=>{let C=Array.isArray(s.params?.cookies)?s.params.cookies:[];try{await Promise.all(C.map((A)=>_.callTarget("Page.setCookie",{cookie:A}))),_.fireResultToTools(s.id,{})}catch(A){_.fireErrorToTools(s.id,{message:A?.message??String(A)})}return null}),_.addMessageFilter("tools::Network.deleteCookies",(s)=>{let C=s.params??{},A=C.url??`https://${(C.domain??"").replace(/^\./,"")}${C.path??"/"}`;return s.method="Page.deleteCookie",s.params={cookieName:C.name,url:A},Promise.resolve(s)}),_.addMessageFilter("tools::Network.deleteCookie",(s)=>{return s.method="Page.deleteCookie",Promise.resolve(s)}),_.addMessageFilter("tools::Network.clearBrowserCookies",async(s)=>{try{let C=await _.callTarget("Page.getCookies",{}),A=Array.isArray(C?.cookies)?C.cookies:[];await Promise.all(A.map((r)=>_.callTarget("Page.deleteCookie",{cookieName:r.name,url:`${r.secure?"https":"http"}://${(r.domain??"").replace(/^\./,"")}${r.path??"/"}`}).catch(()=>{}))),_.fireResultToTools(s.id,{})}catch(C){_.fireErrorToTools(s.id,{message:C?.message??String(C)})}return null}),_.addMessageFilter("tools::Network.canEmulateNetworkConditions",(s)=>N(_,s,{result:!1})),_.addMessageFilter("tools::Network.setExtraHTTPHeaders",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.setBlockedURLs",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.emulateNetworkConditions",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.setMonitoringXHREnabled",(s)=>N(_,s,{})),_.addMessageFilter("tools::Network.getResponseBody",async(s)=>{let C=s.params?.requestId,A=typeof C==="string"?t.get(C):void 0;if(!A)return _.fireErrorToTools(s.id,{message:"Network.getResponseBody: requestId not tracked (only requests observed via requestWillBeSent are recoverable)"}),null;try{let r=await _.callTarget("Network.loadResource",{frameId:A.frameId,url:A.url}),n=String(r?.content??""),y=String(r?.mimeType??""),o=/^(text\/|application\/(json|xml|javascript|ecmascript|x-www-form-urlencoded))/.test(y),B=o?n:Buffer.from(n,"binary").toString("base64");_.fireResultToTools(s.id,{body:B,base64Encoded:!o})}catch(r){_.fireErrorToTools(s.id,{message:`Network.getResponseBody fallback (loadResource) failed: ${r?.message??String(r)}`})}return null});for(let[s,C]of Object.entries(fs))_.addMessageFilter(`target::${s}`,(A)=>{return Os(A.params,C),Promise.resolve(A)});_.addMessageFilter("target::Network.requestWillBeSent",(s)=>{let C=s.params;if(C){if(Object.assign(C,{...Es,...C}),C.request=ls(C.request),C.type=te(C.type),typeof C.requestId==="string"&&typeof C.request?.url==="string"){if(t.size>=1024){let A=t.keys().next().value;if(A!==void 0)t.delete(A)}t.set(C.requestId,{url:C.request.url,frameId:C.frameId})}}return Promise.resolve(s)}),_.addMessageFilter("target::Network.responseReceived",(s)=>{let C=s.params;if(C)Object.assign(C,{...Fs,...C}),C.response=us(C.response),C.type=te(C.type);return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFinished",(s)=>{let C=s.params;if(C){let A=C.metrics?.responseBodyBytesReceived;if(typeof A==="number"&&C.encodedDataLength==null)C.encodedDataLength=A;Object.assign(C,{...bs,...C})}return Promise.resolve(s)}),_.addMessageFilter("target::Network.loadingFailed",(s)=>{let C=s.params;if(C){if(C.type=te(C.type),!("canceled"in C))C.canceled=!1}return Promise.resolve(s)}),_.addMessageFilter("target::Network.requestServedFromMemoryCache",(s)=>{if(s.method="Network.requestServedFromCache",s.params)s.params={requestId:s.params.requestId};return Promise.resolve(s)}),_.addMessageFilter("tools::Network.loadNetworkResource",async(s)=>{let C=s.params??{};if(!e)return _.fireResultToTools(s.id,{resource:{success:!1,netError:1,netErrorName:"ERR_NOT_IMPLEMENTED"}}),null;try{let A=await _.callTarget("Network.loadResource",{frameId:C.frameId,url:C.url}),r=!!A?.content&&(A?.status??0)>=200&&(A?.status??0)<300,n;if(r)n=`network-resource:${C.frameId??""}:${C.url}`,e.set(n,String(A.content));_.fireResultToTools(s.id,{resource:{success:r,stream:n,httpStatusCode:A?.status,headers:A?.headers,mimeType:A?.mimeType}})}catch(A){_.fireResultToTools(s.id,{resource:{success:!1,netError:2,netErrorName:A?.message??"ERR_FAILED"}})}return null})}function ws(_){for(let e of["Target.setAutoAttach","Target.setDiscoverTargets","Target.setRemoteLocations"])_.addMessageFilter(`tools::${e}`,(t)=>N(_,t,{}))}function hs(_){_.addMessageFilter("target::Inspector.inspect",(e)=>{if(e.method="DOM.inspectNodeRequested",e.params)e.params.backendNodeId=e.params.object?.objectId,delete e.params.object,delete e.params.hints;return Promise.resolve(e)})}function Ns(_){if(!_)return _;let e=_.origin==="inspector";return{styleSheetId:_.styleSheetId,frameId:_.frameId,sourceURL:_.sourceURL??"",origin:_.origin==="author"?"regular":_.origin,title:_.title??"",disabled:!!_.disabled,isInline:!!_.isInline,startLine:_.startLine??0,startColumn:_.startColumn??0,isMutable:e,isConstructed:e,length:_.length??0,endLine:_.endLine??0,endColumn:_.endColumn??0,hasSourceURL:!!_.sourceURL}}function $e(_){if(!_)return _;let e={origin:_.origin==="author"?"regular":_.origin,style:s_(_.style),selectorList:Ls(_.selectorList)};if(_.ruleId?.styleSheetId)e.styleSheetId=_.ruleId.styleSheetId;if(Array.isArray(_.groupings))e.media=_.groupings.map((t)=>({text:t.text,sourceURL:t.sourceURL,source:ms[t.type]}));return e}function Ms(_){let e={lastNodeId:0},t=new Map;async function S(i,s){let C=t.get(i);if(!C)try{if(C=(await _.callTarget("CSS.getStyleSheet",{styleSheetId:i}))?.styleSheet,C)t.set(i,C)}catch{}let A=C?.rules??[];for(let r=0;r<A.length;r++)if(Hs(A[r]?.style?.range,s))return{styleSheetId:i,ordinal:r};return{styleSheetId:i,ordinal:0}}_.addMessageFilter("tools::CSS.enable",(i)=>{return _.fireResultToTools(i.id,{}),Promise.resolve(null)}),_.addMessageFilter("target::CSS.styleSheetAdded",(i)=>{if(i.params?.header)i.params.header=Ns(i.params.header);return Promise.resolve(i)}),_.addMessageFilter("target::CSS.getInlineStylesForNode",(i)=>{let s=i.result;if(s)i.result={inlineStyle:s_(s.inlineStyle),attributesStyle:s_(s.attributesStyle)};return Promise.resolve(i)}),_.addMessageFilter("tools::CSS.getMatchedStylesForNode",async(i)=>{if(typeof i.params?.nodeId==="number")e.lastNodeId=i.params.nodeId;try{let[s,C]=await Promise.all([_.callTarget("CSS.getInlineStylesForNode",{nodeId:i.params.nodeId}),_.callTarget("CSS.getMatchedStylesForNode",{nodeId:i.params.nodeId,includePseudo:!0,includeInherited:!0})]);_.fireResultToTools(i.id,{inlineStyle:s_(s?.inlineStyle),attributesStyle:s_(s?.attributesStyle),matchedCSSRules:Be(C?.matchedCSSRules),pseudoElements:Ws(C?.pseudoElements),inherited:Ps(C?.inherited),cssKeyframesRules:[]})}catch(s){_.fireErrorToTools(i.id,{message:s?.message??String(s)})}return null}),_.addMessageFilter("tools::CSS.setStyleTexts",async(i)=>{let s=i.params?.edits??[],C=[];for(let A of s)try{let r=await S(A.styleSheetId,A.range),n=await _.callTarget("CSS.setStyleText",{styleId:r,text:A.text});C.push(s_(n?.style)),t.delete(A.styleSheetId),_.fireEventToTools("CSS.styleSheetChanged",{styleSheetId:A.styleSheetId})}catch{C.push(null)}return _.fireResultToTools(i.id,{styles:C}),null}),_.addMessageFilter("tools::CSS.setRuleSelector",async(i)=>{let{styleSheetId:s,range:C,selector:A}=i.params??{};try{let r=await S(s,C);i.params={ruleId:r,selector:A}}catch(r){return _.fireErrorToTools(i.id,{message:r?.message??String(r)}),null}return i}),_.addMessageFilter("target::CSS.setRuleSelector",(i)=>{if(i.result?.rule)i.result={rule:$e(i.result.rule)};return Promise.resolve(i)}),_.addMessageFilter("tools::CSS.addRule",async(i)=>{let s=i.params??{},C=String(s.ruleText??"").trim().replace(/\{\s*\}\s*$/,"").trim();try{let A=await _.callTarget("CSS.addRule",{contextNodeId:e.lastNodeId,styleSheetId:s.styleSheetId,selector:C});_.fireResultToTools(i.id,{rule:$e(A?.rule)})}catch(A){_.fireErrorToTools(i.id,{message:A?.message??String(A)})}return null})}function Is(_){_.addMessageFilter("tools::Browser.getVersion",(e)=>N(_,e,Us)),_.addMessageFilter("tools::Browser.getWindowForTarget",(e)=>N(_,e,{windowId:1,bounds:{}})),_.addMessageFilter("tools::Browser.setWindowBounds",(e)=>N(_,e,{}))}function qs(_){switch(_){case"mousePressed":return"mousedown";case"mouseReleased":return"click";case"mouseMoved":return"mousemove";default:return null}}function Xs(_){let e=async(t)=>{let S=t.params??{},i=qs(S.type);if(!i)return _.fireResultToTools(t.id,{}),null;let s=i==="click"?["mousedown","click","mouseup"]:[i];try{for(let C of s){let A={x:Number(S.x)||0,y:Number(S.y)||0,modifiers:Number(S.modifiers)||0,button:S.button??"none",type:C},r=`(${Gs}, __sd_simulate(${JSON.stringify(A)}))`;await _.callTarget("Runtime.evaluate",{expression:r})}_.fireResultToTools(t.id,{})}catch(C){_.fireErrorToTools(t.id,{message:C?.message??String(C)})}return null};_.addMessageFilter("tools::Input.dispatchMouseEvent",e),_.addMessageFilter("tools::Input.emulateTouchFromMouseEvent",e),_.addMessageFilter("tools::Input.setIgnoreInputEvents",(t)=>{return _.fireResultToTools(t.id,{}),Promise.resolve(null)})}function Ks(_){let e=new Map;return _.addMessageFilter("tools::IO.read",(t)=>{let S=String(t.params?.handle??""),i=Number(t.params?.size)||ks,s=Number(t.params?.offset)||0,C=e.get(S);if(C===void 0)return _.fireResultToTools(t.id,{data:"",eof:!0,base64Encoded:!1}),Promise.resolve(null);let A=C.slice(s,s+i),r=s+i>=C.length;return _.fireResultToTools(t.id,{data:A,eof:r,base64Encoded:!1}),Promise.resolve(null)}),_.addMessageFilter("tools::IO.close",(t)=>{return e.delete(String(t.params?.handle??"")),_.fireResultToTools(t.id,{}),Promise.resolve(null)}),e}function xs(_){_.addMessageFilter("tools::Accessibility.enable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Accessibility.disable",(e)=>N(_,e,{})),_.addMessageFilter("tools::Accessibility.getPartialAXTree",async(e)=>{let t=e.params??{},S=t.nodeId??t.backendNodeId;if(typeof S!=="number")return _.fireResultToTools(e.id,{nodes:[]}),null;try{let s=(await _.callTarget("DOM.getAccessibilityPropertiesForNode",{nodeId:S}))?.properties??{},C={nodeId:String(S),ignored:Boolean(s.ignored),role:s.role?{type:"role",value:String(s.role)}:void 0,name:s.label?{type:"computedString",value:String(s.label)}:void 0,backendDOMNodeId:S,childIds:[],properties:[]};_.fireResultToTools(e.id,{nodes:[C]})}catch(i){_.fireResultToTools(e.id,{nodes:[]})}return null})}function Js(_){for(let[t,S]of Object.entries(js))_.addMessageFilter(`tools::${t}`,(i)=>N(_,i,S));for(let t of zs)for(let S of["enable","disable"])_.addMessageFilter(`tools::${t}.${S}`,(i)=>N(_,i,{}));let e=[["Autofill.setAddresses",{}],["Storage.getStorageKey",{storageKey:""}],["Storage.trackCacheStorageForOrigin",{}],["Storage.trackIndexedDBForOrigin",{}],["Storage.untrackCacheStorageForOrigin",{}],["Storage.untrackIndexedDBForOrigin",{}],["Storage.getCookies",{cookies:[]}],["ServiceWorker.unregister",{}]];for(let[t,S]of e)_.addMessageFilter(`tools::${t}`,(i)=>N(_,i,S))}function yt(_){let e=rs();Js(_);let t=Ks(_);$s(_,e),As(_,e),os(_,e),as(_),cs(_),Rs(_,e),Bs(_),Ds(_),gs(_,t),ws(_),hs(_),Ms(_),Is(_),Xs(_),xs(_)}function ct(_){let e=`${_.reqHost}/devtools/page/${_.id}`;return{description:_.description,devtoolsFrontendUrl:`devtools://devtools/bundled/inspector.html?ws=${e}`,devtoolsFrontendUrlCompat:`devtools://devtools/bundled/inspector.html?ws=${e}`,id:_.id,title:_.title,type:_.type,url:_.url,webSocketDebuggerUrl:`ws://${e}`,faviconUrl:""}}function c_(_){return _.replace(/[&<>"']/g,(e)=>Zs[e])}function Rt(_){return at.createServer((e,t)=>{let S=new URL(e.url??"/","http://placeholder"),i=e.headers.host??"";if(S.pathname==="/json/version"){let s=typeof _.version==="function"?_.version(i):_.version;return Se(t,s)}if(S.pathname==="/json"||S.pathname==="/json/list")return Se(t,_.listTargets(i));if(S.pathname==="/json/protocol")return Se(t,{});if(S.pathname==="/")return Qs(t,_,i);t.writeHead(404,{"content-type":"text/plain"}),t.end("not found")})}function Se(_,e,t=200){_.writeHead(t,{"content-type":"application/json; charset=utf-8"}),_.end(JSON.stringify(e))}function Qs(_,e,t){let S=e.listTargets(t),i=S.map((r)=>`<li><strong>${c_(r.title||r.url||r.id)}</strong><br><small>${c_(r.url)}</small><br><small>copy &amp; paste into Chrome's address bar:</small><br><code style="user-select:all">${c_(r.devtoolsFrontendUrl)}</code></li>`).join(""),s=`inspect-webkit${e.brand?` (${e.brand})`:""}`,C=e.indexNote??'<p>Open <code style="display:inline;padding:1px 4px">chrome://inspect</code> → <em>Configure…</em> → add '+`<code style="display:inline;padding:1px 4px">${c_(t)}</code>.</p>`,A=`<!doctype html><meta charset=utf-8><title>${c_(s)}</title><style>body{font:14px -apple-system,sans-serif;max-width:760px;margin:2em auto;padding:0 1em}code{display:block;background:#f4f4f4;padding:.5em;border-radius:4px;word-break:break-all;margin:.4em 0 1em}li{margin-bottom:1.5em;list-style:none}</style><h1>${c_(s)} — ${S.length} target${S.length===1?"":"s"}</h1>`+C+`<ul>${i}</ul>`+'<hr><p>JSON: <a href="/json/list">/json/list</a> · <a href="/json/version">/json/version</a></p>';_.writeHead(200,{"content-type":"text/html; charset=utf-8"}),_.end(A)}function Bt(_,e,t){return new Promise((S,i)=>{_.once("error",i);let s=e==="localhost"||e==="::1"||e==="127.0.0.1"?"::":e;_.listen({port:t,host:s,ipv6Only:!1},()=>{_.off("error",i),S()})})}function Dt(_){let e=!process.env.NO_COLOR&&process.stderr.isTTY===!0,t=(r,n)=>e?`\x1B[${r}m${n}\x1B[0m`:n,S=(r)=>t("1",r),i=(r)=>t("2",r),s=(r)=>t("36",r),C=(r)=>t("32",r),A=`http://${_.host}:${_.port}`;console.error(`${C("●")} ${S(`${_.brand} CDP`)} ${s(A)}`),console.error(` ${i("chrome")} chrome://inspect → ${_.host}:${_.port}`),console.error(` ${i("vscode")} "type": "chrome", "port": ${_.port}`)}function Ys(_,e){let t=!!process.env.INSPECT_WEBKIT_DEBUG,S=new Map,i=!1,s=!1,C=!1,A=new Map,r=null;function n(T){if(_.readyState!==1)return;let D=JSON.stringify(T);if(t)console.error(`[browser] tools<< ${D.slice(0,240)}`);_.send(D)}function y(T,D){let f={method:T,params:D};if(r)f.sessionId=r;n(f)}function o(T,D){return{targetId:T.targetId,type:T.type==="page"?"page":T.type||"other",title:T.title||"",url:T.url||"",attached:D,canAccessOpener:!1,browserContextId:"default"}}function B(T){for(let D of S.values())if(D.targetId===T)return!0;return!1}function l(T,D){let f=e.listEntries().find((F)=>F.targetId===T);if(!f)return null;let a=crypto.randomUUID(),$=(F)=>{let d;try{d=JSON.parse(F)}catch{return}d.sessionId=a,n(d)},R=e.createPageSession(T,$);if(!R)return null;return S.set(a,{handle:R,targetId:T}),y("Target.attachedToTarget",{sessionId:a,targetInfo:o(f,!0),waitingForDebugger:D}),{sessionId:a,entry:f}}function v(T){let D=S.get(T);if(!D)return!1;try{D.handle.close()}catch{}return S.delete(T),y("Target.detachedFromTarget",{sessionId:T,targetId:D.targetId}),!0}function O(){let T=e.listEntries(),D=new Set;for(let f of T){D.add(f.targetId);let a=A.get(f.targetId);if(!a){if(A.set(f.targetId,f),i)y("Target.targetCreated",{targetInfo:o(f,B(f.targetId))});if(s&&!B(f.targetId))l(f.targetId,C)}else if(a.title!==f.title||a.url!==f.url){if(A.set(f.targetId,f),i)y("Target.targetInfoChanged",{targetInfo:o(f,B(f.targetId))})}}for(let f of[...A.keys()]){if(D.has(f))continue;A.delete(f);for(let[a,$]of S)if($.targetId===f)v(a);if(i)y("Target.targetDestroyed",{targetId:f})}}let E=setInterval(O,e.refreshMs??1000);function b(T,D){if(T)D.sessionId=T;n(D)}function p(T,D){let{id:f,method:a}=T,$=T.params??{};switch(a){case"Browser.getVersion":return b(D,{id:f,result:{protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"@",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""}});case"Target.attachToBrowserTarget":{if(!r)r=crypto.randomUUID();return b(D,{id:f,result:{sessionId:r}})}case"Target.setDiscoverTargets":{if(i=!!$.discover,i)for(let R of e.listEntries())A.set(R.targetId,R),y("Target.targetCreated",{targetInfo:o(R,B(R.targetId))});if(typeof f==="number")b(D,{id:f,result:{}});return}case"Target.getTargets":{let R=e.listEntries().map((F)=>o(F,B(F.targetId)));return b(D,{id:f,result:{targetInfos:R}})}case"Target.setAutoAttach":{if(s=!!$.autoAttach,C=!!$.waitForDebuggerOnStart,s){for(let R of e.listEntries())if(!B(R.targetId))l(R.targetId,C)}if(typeof f==="number")b(D,{id:f,result:{}});return}case"Target.attachToTarget":{for(let[F,d]of S)if(d.targetId===$.targetId){if(typeof f==="number")b(D,{id:f,result:{sessionId:F}});return}let R=l($.targetId,!1);if(!R){if(typeof f==="number")b(D,{id:f,error:{code:-32000,message:"No target with given id found"}});return}if(typeof f==="number")b(D,{id:f,result:{sessionId:R.sessionId}});return}case"Target.detachFromTarget":{if(v($.sessionId),typeof f==="number")b(D,{id:f,result:{}});return}case"Target.sendMessageToTarget":{let R=S.get($.sessionId);if(R)R.handle.onMessageFromTools($.message);if(typeof f==="number")b(D,{id:f,result:{}});return}case"Target.setRemoteLocations":case"Target.exposeDevToolsProtocol":case"Target.activateTarget":case"Target.closeTarget":if(typeof f==="number")b(D,{id:f,result:{}});return;case"Target.getBrowserContexts":{if(typeof f==="number")b(D,{id:f,result:{browserContextIds:["default"]}});return}}if(typeof f==="number")b(D,{id:f,error:{code:-32601,message:`Browser-level method '${a??"?"}' not implemented`}})}_.on("message",(T,D)=>{let f=D?new TextDecoder().decode(T):T.toString();if(t)console.error(`[browser] tools>> ${f.slice(0,240)}`);let a;try{a=JSON.parse(f)}catch{return}if(typeof a.sessionId==="string"){if(a.sessionId===r){let F={...a};return delete F.sessionId,p(F,a.sessionId)}let $=S.get(a.sessionId);if(!$){if(typeof a.id==="number")n({id:a.id,sessionId:a.sessionId,error:{code:-32000,message:`Session ${a.sessionId} not found`}});return}let R={...a};delete R.sessionId,$.handle.onMessageFromTools(JSON.stringify(R));return}p(a,void 0)}),_.on("close",()=>{clearInterval(E);for(let[,T]of S)try{T.handle.close()}catch{}S.clear()})}async function ei(_={}){let e=_.port??9222,t=_.host??"localhost",S=await ti();if(S.length===0)console.error("warn: no inspectable sources found (no devices, no simulators)."),console.error(" The server will still run; new targets will appear if you start one.");let i=new Map,s=new WeakMap,C=new Map;for(let E of S)C.set(E,[]),s.set(E,new Set),E.wi.subscribe((b)=>{let{__selector:p,__argument:T}=b;if(!p||!T)return;if(p==="_rpc_reportConnectedApplicationList:"){let D=T.WIRApplicationDictionaryKey??{},f=Object.entries(D).map(([$,R])=>({appId:$,bundleId:R.WIRApplicationBundleIdentifierKey,name:R.WIRApplicationNameKey??R.WIRApplicationBundleIdentifierKey??$,isProxy:Boolean(R.WIRIsApplicationProxyKey)}));C.set(E,f);let a=s.get(E);for(let $ of f){if($.isProxy||a.has($.appId))continue;a.add($.appId),E.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:$.appId})}}else if(p==="_rpc_applicationConnected:"){let D=T,f=C.get(E)??[];if(!f.find((a)=>a.appId===D.WIRApplicationIdentifierKey))f.push({appId:D.WIRApplicationIdentifierKey,bundleId:D.WIRApplicationBundleIdentifierKey,name:D.WIRApplicationNameKey??D.WIRApplicationBundleIdentifierKey,isProxy:Boolean(D.WIRIsApplicationProxyKey)}),C.set(E,f);if(!D.WIRIsApplicationProxyKey){let a=s.get(E);if(!a.has(D.WIRApplicationIdentifierKey))a.add(D.WIRApplicationIdentifierKey),E.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:D.WIRApplicationIdentifierKey})}}else if(p==="_rpc_applicationDisconnected:"){let D=C.get(E)??[];C.set(E,D.filter((f)=>f.appId!==T.WIRApplicationIdentifierKey)),i.delete(`${E.id}:${T.WIRApplicationIdentifierKey}`)}else if(p==="_rpc_applicationSentListing:"){let D=T.WIRApplicationIdentifierKey,f=T.WIRListingKey??{},a=new Map;for(let[$,R]of Object.entries(f))a.set($,{pageId:Number(R.WIRPageIdentifierKey??0),title:R.WIRTitleKey??"",url:R.WIRURLKey??"",type:R.WIRTypeKey??""});i.set(`${E.id}:${D}`,a)}}),E.wi.send("_rpc_reportIdentifier:",{}),E.wi.send("_rpc_getConnectedApplications:",{});let A=setInterval(()=>{for(let E of S){let b=C.get(E)??[];for(let p of b){if(p.isProxy)continue;E.wi.send("_rpc_forwardGetListing:",{WIRApplicationIdentifierKey:p.appId})}}},_i),r=new Map;function n(){let E=[];for(let b of S){let p=C.get(b)??[];for(let T of p){if(T.isProxy)continue;let D=i.get(`${b.id}:${T.appId}`);if(!D)continue;for(let f of D.values())E.push({targetId:`${b.id}:${T.appId}:${f.pageId}`,source:b,appId:T.appId,appName:T.name,bundleId:T.bundleId,pageId:f.pageId,title:f.title,url:f.url,type:f.type})}}return E}let y=crypto.randomUUID(),o=Rt({brand:"",version:(E)=>({Browser:"Safari/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit","WebKit-Version":"605.1.15",webSocketDebuggerUrl:`ws://${E}/devtools/browser/${y}`}),listTargets:(E)=>n().map((b)=>ct({reqHost:E,id:b.targetId,description:`${b.source.label}${b.bundleId?` (${b.bundleId})`:""}`,title:b.title||b.appName,url:/^https?:/i.test(b.url)?b.url:"about:blank",type:Ze(b.type)}))}),B=new At.default({noServer:!0}),l=`/devtools/browser/${y}`;o.on("upgrade",(E,b,p)=>{let T=new URL(E.url??"/","http://placeholder");if(console.error(`# ws upgrade: ${T.pathname}`),T.pathname===l){B.handleUpgrade(E,b,p,(f)=>{Ys(f,{listEntries:()=>n().map((a)=>({targetId:a.targetId,type:Ze(a.type),title:a.title||a.appName,url:a.url})),createPageSession:(a,$)=>{let R=n().find((F)=>F.targetId===a);if(!R)return null;return v(R,$)}})});return}if(!T.pathname.startsWith("/devtools/page/")){console.error(`# ws upgrade rejected: unknown path ${T.pathname}`),b.destroy();return}let D=decodeURIComponent(T.pathname.slice(15));B.handleUpgrade(E,b,p,(f)=>{O(f,D)})});function v(E,b){let p=crypto.randomUUID(),D=new Re({readyState:1,send:($)=>b($)},E.source.wi,E.appId,E.pageId,p);yt(D),r.set(p,D);let f=!!process.env.INSPECT_WEBKIT_DEBUG,a=E.source.wi.subscribe(($)=>{if($.__selector!=="_rpc_applicationSentData:")return;let R=$.__argument;if(!R)return;if(R.WIRDestinationKey&&R.WIRDestinationKey!==p)return;if(R.WIRApplicationIdentifierKey!==E.appId)return;if(R.WIRPageIdentifierKey!==void 0&&Number(R.WIRPageIdentifierKey)!==E.pageId)return;let F=R.WIRMessageDataKey??R.WIRSocketDataKey;if(!F)return;let d=typeof F==="string"?F:new TextDecoder().decode(F);if(f)console.error(`[cdp] target>> ${d.slice(0,240)}`);D.onMessageFromTarget(d)});return E.source.wi.forwardSocketSetup(E.appId,E.pageId,p),console.error(`# devtools attached: ${E.source.label} :: ${E.appName} :: ${E.title||E.url}`),{onMessageFromTools($){if(f)console.error(`[cdp] tools>> ${$.slice(0,300)}`);D.onMessageFromTools($)},close(){a();try{D.wi.forwardDidClose(D.appId,D.pageId,D.senderKey)}catch{}r.delete(D.senderKey)}}}function O(E,b){let p=n().find((D)=>D.targetId===b);if(!p){console.error(`# ws closed: unknown target ${b} (known: ${n().map((D)=>D.targetId).join(", ")||"none"})`),E.close(1011,`unknown target ${b}`);return}let T=v(p,(D)=>{if(E.readyState===1)E.send(D)});E.on("message",(D,f)=>{let a=f?new TextDecoder().decode(D):D.toString();T.onMessageFromTools(a)}),E.on("close",()=>T.close())}return await Bt(o,t,e),Dt({brand:"safari",host:t,port:e}),{stop(){clearInterval(A),B.close(),o.close();for(let E of S)try{E.wi.close(),E.lockdown?.close()}catch{}},getTargets(){return n()}}}async function ti(){let[_,e]=await Promise.all([Si(),ii()]);return[..._,...e]}async function Si(){let _=[];try{_=await St()}catch(t){return console.error(`warn: usbmux: ${t.message}`),[]}return(await Promise.all(_.map(si))).filter((t)=>t!==null)}async function si(_){try{let e=await st(_.Properties.SerialNumber),t=await L_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new b_(i,s);return await C.reportIdentifier(),{kind:"device",id:`device:${_.Properties.SerialNumber}`,label:`device:${_.Properties.SerialNumber.slice(0,8)}`,wi:C,lockdown:t}}catch(e){return console.error(`warn: device ${_.Properties.SerialNumber}: ${e.message}`),null}}async function ii(){let _=[];try{_=await Ct()}catch(t){return console.error(`warn: simulator discovery: ${t.message}`),[]}return(await Promise.all(_.map(Ci))).filter((t)=>t!==null)}async function Ci(_){try{let{socket:e,stream:t}=await rt(_.socketPath),S=new b_(e,t);return await S.reportIdentifier(),{kind:"simulator",id:`sim:${_.pid}`,label:`sim:${_.pid}`,wi:S}}catch(e){return console.error(`warn: simulator ${_.socketPath}: ${e.message}`),null}}function Ze(_){switch(_){case"WIRTypeServiceWorker":return"service_worker";case"WIRTypeWorker":case"WIRTypeJavaScript":return"worker";default:return"page"}}class Tt{url;ws;handlers=new Set;openPromise;constructor(_){this.url=_,this.ws=new Je(_),this.ws.binaryType="nodebuffer",this.openPromise=new Promise((e,t)=>{this.ws.once("open",()=>e()),this.ws.once("error",(S)=>t(S))}),this.ws.on("message",(e,t)=>{let S=t?new TextDecoder().decode(e):e.toString();for(let i of this.handlers)i(S)})}ready(){return this.openPromise}onFrame(_){return this.handlers.add(_),()=>this.handlers.delete(_)}forwardSocketData(_,e,t,S){if(this.ws.readyState!==Je.OPEN)return;this.ws.send(new TextDecoder().decode(S))}forwardDidClose(_,e,t){}close(){try{this.ws.close()}catch{}}}async function ri(_){let e=_.port??9223,t=_.host??"localhost",{upstreams:S}=_,i=Rt({brand:"bun",version:{Browser:"Bun/inspect-webkit","Protocol-Version":"1.3","User-Agent":"Bun (via inspect-webkit)","WebKit-Version":"605.1.15"},listTargets:(A)=>S.map((r)=>ct({reqHost:A,id:encodeURIComponent(r.url),description:r.label??"bun",title:r.label??r.url,url:r.url,type:"node"}))}),s=new At.default({noServer:!0});i.on("upgrade",(A,r,n)=>{let y=new URL(A.url??"/","http://placeholder");if(!y.pathname.startsWith("/devtools/page/")){r.destroy();return}let o=decodeURIComponent(y.pathname.slice(15)),B=S.find((l)=>l.url===o);if(!B){r.destroy();return}s.handleUpgrade(A,r,n,(l)=>{C(l,B).catch((v)=>{console.error(`# bun attach failed: ${v.message}`);try{l.close(1011,v.message)}catch{}})})});async function C(A,r){let n=!!process.env.INSPECT_WEBKIT_DEBUG,y=new Tt(r.url);await y.ready();let o=crypto.randomUUID(),B=new Re(A,y,"bun",0,o);yt(B);let l=y.onFrame((v)=>{if(n)console.error(`[bun] target>> ${v.slice(0,240)}`);B.onMessageFromTarget(v)});A.on("message",(v,O)=>{let E=O?new TextDecoder().decode(v):v.toString();if(n)console.error(`[bun] tools>> ${E.slice(0,300)}`);B.onMessageFromTools(E)}),A.on("close",()=>{l(),y.close()}),console.error(`# devtools attached: ${r.label??r.url}`)}return await Bt(i,t,e),Dt({brand:"bun",host:t,port:e}),{stop(){s.close(),i.close()},getTargets(){return S.slice()}}}async function ft(){return St()}async function $i(){let[_,e]=await Promise.all([Ai(),oi()]);return[..._.flat(),...e.flat()]}async function Ai(){let _=await ft();return Promise.all(_.map(ni))}async function oi(){let _=await Ct();return Promise.all(_.map(yi))}async function ni(_){let e=null;try{return e=await ai(_),await Et(e.client,{source:"device",udid:_.Properties.SerialNumber,deviceID:_.DeviceID})}catch(t){return console.error(`warn: ${_.Properties.SerialNumber}: ${t.message}`),[]}finally{e?.client.close(),e?.lockdown.close()}}async function yi(_){let e=null;try{let{socket:t,stream:S}=await rt(_.socketPath);return e=new b_(t,S),await e.reportIdentifier(),await Et(e,{source:"simulator",udid:`sim:${_.pid}`})}catch(t){return console.error(`warn: simulator (${_.socketPath}): ${t.message}`),[]}finally{e?.close()}}async function ai(_){let e=await st(_.Properties.SerialNumber),t=await L_.open(_,e);await t.startSession();let S=await t.startService("com.apple.webinspector"),{socket:i,stream:s}=await t.connectService(S),C=new b_(i,s);return await C.reportIdentifier(),{client:C,lockdown:t}}async function Et(_,e){let t=(await _.listApplications()).filter((s)=>!s.isProxy),S=await Promise.all(t.map((s)=>_.getListing(s.appId))),i=[];for(let s=0;s<t.length;s++){let C=t[s];for(let A of S[s])i.push({...e,appId:C.appId,appName:C.name??C.bundleId??C.appId,bundleId:C.bundleId,pageId:A.pageId,title:A.title,url:A.url,type:A.type})}return i}var VS,mS,ke,LS,WS,MS,US,__=(_,e,t)=>{var S=_!=null&&typeof _==="object";if(S){var i=e?MS??=new WeakMap:US??=new WeakMap,s=i.get(_);if(s)return s}t=_!=null?VS(mS(_)):{};let C=e||!_||!_.__esModule?ke(t,"default",{value:_,enumerable:!0}):t;for(let A of LS(_))if(!WS.call(C,A))ke(C,A,{get:PS.bind(_,A),enumerable:!0});if(S)i.set(_,C);return C},x=(_,e)=>()=>(e||_((e={exports:{}}).exports,e),e.exports),X,e_,N_,IS,E_,F_,Qe,Ye,GS,Ae,oe,qS,_t,XS,kS=`<?xml version="1.0" encoding="UTF-8"?>
14
14
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
15
15
  <plist version="1.0">
16
- `,US=`
16
+ `,KS=`
17
17
  </plist>
18
- `,kS=1,KS=8,xS="/var/run/usbmuxd",Ke=62078,z=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},TC,EC,FC,pC,lC,vC,_s,rt,ze,ys,as,cs,Bs,Rs,Ds,fs,bs=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,ds=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},s_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(ds):[]},gs,ws=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},Be=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:re(e.rule)})):[],Ns=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:Be(e.matches)})):[],hs=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:s_(e.inlineStyle),matchedCSSRules:Be(e.matchedCSSRules)})):[],Vs,Ls=`
18
+ `,ZS=1,QS=8,YS="/var/run/usbmuxd",ze=62078,z=(..._)=>{if(process.env.INSPECT_WEBKIT_DEBUG)console.error("[lockdown]",..._)},dC,gC,wC,hC,HC,NC,Cs,At,Je,Ts,fs,Es,Fs,bs,ps,vs,Hs=(_,e)=>!!_&&!!e&&_.startLine===e.startLine&&_.endLine===e.endLine&&_.startColumn===e.startColumn&&_.endColumn===e.endColumn,Vs=(_)=>_&&{name:_.name,value:_.value,text:_.text,implicit:_.implicit,parsedOk:_.parsedOk!==!1,important:!!_.priority,disabled:_.status==="disabled",range:_.range},s_=(_)=>_&&{styleSheetId:_.styleId?.styleSheetId,cssText:_.cssText,range:_.range,shorthandEntries:_.shorthandEntries??[],cssProperties:Array.isArray(_.cssProperties)?_.cssProperties.map(Vs):[]},ms,Ls=(_)=>_&&{text:_.text,selectors:Array.isArray(_.selectors)?_.selectors.map((e)=>({text:e.text,range:e.range??_.range})):[]},Be=(_)=>Array.isArray(_)?_.map((e)=>({matchingSelectors:e.matchingSelectors,rule:$e(e.rule)})):[],Ws=(_)=>Array.isArray(_)?_.map((e)=>({pseudoType:e.pseudoId,matches:Be(e.matches)})):[],Ps=(_)=>Array.isArray(_)?_.map((e)=>({inlineStyle:s_(e.inlineStyle),matchedCSSRules:Be(e.matchedCSSRules)})):[],Us,Gs=`
19
19
  function __sd_simulate(p){
20
20
  var el = document.elementFromPoint(p.x, p.y);
21
21
  if (!el) return false;
@@ -30,32 +30,35 @@ function __sd_simulate(p){
30
30
  });
31
31
  el.dispatchEvent(ev);
32
32
  return true;
33
- }`,Ms=65536,Xs,Is,ks,zs=1500;var Et=j_(()=>{dS=Object.create,gS=Object.getPrototypeOf,Ie=Object.defineProperty,wS=Object.getOwnPropertyNames,NS=Object.prototype.hasOwnProperty;G=OS(import.meta.url),e_=x((_,e)=>{var t=["nodebuffer","arraybuffer","fragments"],S=typeof Blob<"u";if(S)t.push("blob");e.exports={BINARY_TYPES:t,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:S,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),N_=x((_,e)=>{var{EMPTY_BUFFER:t}=e_(),S=Buffer[Symbol.species];function i(o,y){if(o.length===0)return t;if(o.length===1)return o[0];let n=Buffer.allocUnsafe(y),f=0;for(let u=0;u<o.length;u++){let v=o[u];n.set(v,f),f+=v.length}if(f<y)return new S(n.buffer,n.byteOffset,f);return n}function s(o,y,n,f,u){for(let v=0;v<u;v++)n[f+v]=o[v]^y[v&3]}function C(o,y){for(let n=0;n<o.length;n++)o[n]^=y[n&3]}function $(o){if(o.length===o.buffer.byteLength)return o.buffer;return o.buffer.slice(o.byteOffset,o.byteOffset+o.length)}function r(o){if(r.readOnly=!0,Buffer.isBuffer(o))return o;let y;if(o instanceof ArrayBuffer)y=new S(o);else if(ArrayBuffer.isView(o))y=new S(o.buffer,o.byteOffset,o.byteLength);else y=Buffer.from(o),r.readOnly=!1;return y}if(e.exports={concat:i,mask:s,toArrayBuffer:$,toBuffer:r,unmask:C},!process.env.WS_NO_BUFFER_UTIL)try{let o=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(y,n,f,u,v){if(v<48)s(y,n,f,u,v);else o.mask(y,n,f,u,v)},e.exports.unmask=function(y,n){if(y.length<32)C(y,n);else o.unmask(y,n)}}catch(o){}}),mS=x((_,e)=>{var t=Symbol("kDone"),S=Symbol("kRun");class i{constructor(s){this[t]=()=>{this.pending--,this[S]()},this.concurrency=s||1/0,this.jobs=[],this.pending=0}add(s){this.jobs.push(s),this[S]()}[S](){if(this.pending===this.concurrency)return;if(this.jobs.length){let s=this.jobs.shift();this.pending++,s(this[t])}}}e.exports=i}),T_=x((_,e)=>{var t=G("zlib"),S=N_(),i=mS(),{kStatusCode:s}=e_(),C=Buffer[Symbol.species],$=Buffer.from([0,0,255,255]),r=Symbol("permessage-deflate"),o=Symbol("total-length"),y=Symbol("callback"),n=Symbol("buffers"),f=Symbol("error"),u;class v{constructor(F){if(this._options=F||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!u){let D=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;u=new i(D)}}static get extensionName(){return"permessage-deflate"}offer(){let F={};if(this._options.serverNoContextTakeover)F.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)F.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)F.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)F.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)F.client_max_window_bits=!0;return F}accept(F){return F=this.normalizeParams(F),this.params=this._isServer?this.acceptAsServer(F):this.acceptAsClient(F),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let F=this._deflate[y];if(this._deflate.close(),this._deflate=null,F)F(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(F){let D=this._options,R=F.find((E)=>{if(D.serverNoContextTakeover===!1&&E.server_no_context_takeover||E.server_max_window_bits&&(D.serverMaxWindowBits===!1||typeof D.serverMaxWindowBits==="number"&&D.serverMaxWindowBits>E.server_max_window_bits)||typeof D.clientMaxWindowBits==="number"&&!E.client_max_window_bits)return!1;return!0});if(!R)throw Error("None of the extension offers can be accepted");if(D.serverNoContextTakeover)R.server_no_context_takeover=!0;if(D.clientNoContextTakeover)R.client_no_context_takeover=!0;if(typeof D.serverMaxWindowBits==="number")R.server_max_window_bits=D.serverMaxWindowBits;if(typeof D.clientMaxWindowBits==="number")R.client_max_window_bits=D.clientMaxWindowBits;else if(R.client_max_window_bits===!0||D.clientMaxWindowBits===!1)delete R.client_max_window_bits;return R}acceptAsClient(F){let D=F[0];if(this._options.clientNoContextTakeover===!1&&D.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!D.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")D.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&D.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return D}normalizeParams(F){return F.forEach((D)=>{Object.keys(D).forEach((R)=>{let E=D[R];if(E.length>1)throw Error(`Parameter "${R}" must have only a single value`);if(E=E[0],R==="client_max_window_bits"){if(E!==!0){let a=+E;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${R}": ${E}`);E=a}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${R}": ${E}`)}else if(R==="server_max_window_bits"){let a=+E;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${R}": ${E}`);E=a}else if(R==="client_no_context_takeover"||R==="server_no_context_takeover"){if(E!==!0)throw TypeError(`Invalid value for parameter "${R}": ${E}`)}else throw Error(`Unknown parameter "${R}"`);D[R]=E})}),F}decompress(F,D,R){u.add((E)=>{this._decompress(F,D,(a,A)=>{E(),R(a,A)})})}compress(F,D,R){u.add((E)=>{this._compress(F,D,(a,A)=>{E(),R(a,A)})})}_decompress(F,D,R){let E=this._isServer?"client":"server";if(!this._inflate){let a=`${E}_max_window_bits`,A=typeof this.params[a]!=="number"?t.Z_DEFAULT_WINDOWBITS:this.params[a];this._inflate=t.createInflateRaw({...this._options.zlibInflateOptions,windowBits:A}),this._inflate[r]=this,this._inflate[o]=0,this._inflate[n]=[],this._inflate.on("error",l),this._inflate.on("data",p)}if(this._inflate[y]=R,this._inflate.write(F),D)this._inflate.write($);this._inflate.flush(()=>{let a=this._inflate[f];if(a){this._inflate.close(),this._inflate=null,R(a);return}let A=S.concat(this._inflate[n],this._inflate[o]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[o]=0,this._inflate[n]=[],D&&this.params[`${E}_no_context_takeover`])this._inflate.reset();R(null,A)})}_compress(F,D,R){let E=this._isServer?"server":"client";if(!this._deflate){let a=`${E}_max_window_bits`,A=typeof this.params[a]!=="number"?t.Z_DEFAULT_WINDOWBITS:this.params[a];this._deflate=t.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:A}),this._deflate[o]=0,this._deflate[n]=[],this._deflate.on("data",O)}this._deflate[y]=R,this._deflate.write(F),this._deflate.flush(t.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let a=S.concat(this._deflate[n],this._deflate[o]);if(D)a=new C(a.buffer,a.byteOffset,a.length-4);if(this._deflate[y]=null,this._deflate[o]=0,this._deflate[n]=[],D&&this.params[`${E}_no_context_takeover`])this._deflate.reset();R(null,a)})}}e.exports=v;function O(F){this[n].push(F),this[o]+=F.length}function p(F){if(this[o]+=F.length,this[r]._maxPayload<1||this[o]<=this[r]._maxPayload){this[n].push(F);return}this[f]=RangeError("Max payload size exceeded"),this[f].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[f][s]=1009,this.removeListener("data",p),this.reset()}function l(F){if(this[r]._inflate=null,this[f]){this[y](this[f]);return}F[s]=1007,this[y](F)}}),E_=x((_,e)=>{var{isUtf8:t}=G("buffer"),{hasBlob:S}=e_(),i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function s(r){return r>=1000&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3000&&r<=4999}function C(r){let o=r.length,y=0;while(y<o)if((r[y]&128)===0)y++;else if((r[y]&224)===192){if(y+1===o||(r[y+1]&192)!==128||(r[y]&254)===192)return!1;y+=2}else if((r[y]&240)===224){if(y+2>=o||(r[y+1]&192)!==128||(r[y+2]&192)!==128||r[y]===224&&(r[y+1]&224)===128||r[y]===237&&(r[y+1]&224)===160)return!1;y+=3}else if((r[y]&248)===240){if(y+3>=o||(r[y+1]&192)!==128||(r[y+2]&192)!==128||(r[y+3]&192)!==128||r[y]===240&&(r[y+1]&240)===128||r[y]===244&&r[y+1]>143||r[y]>244)return!1;y+=4}else return!1;return!0}function $(r){return S&&typeof r==="object"&&typeof r.arrayBuffer==="function"&&typeof r.type==="string"&&typeof r.stream==="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}if(e.exports={isBlob:$,isValidStatusCode:s,isValidUTF8:C,tokenChars:i},t)e.exports.isValidUTF8=function(r){return r.length<24?C(r):t(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(o){return o.length<32?C(o):r(o)}}catch(r){}}),Je=x((_,e)=>{var{Writable:t}=G("stream"),S=T_(),{BINARY_TYPES:i,EMPTY_BUFFER:s,kStatusCode:C,kWebSocket:$}=e_(),{concat:r,toArrayBuffer:o,unmask:y}=N_(),{isValidStatusCode:n,isValidUTF8:f}=E_(),u=Buffer[Symbol.species],v=0,O=1,p=2,l=3,F=4,D=5,R=6;class E extends t{constructor(a={}){super();this._allowSynchronousEvents=a.allowSynchronousEvents!==void 0?a.allowSynchronousEvents:!0,this._binaryType=a.binaryType||i[0],this._extensions=a.extensions||{},this._isServer=!!a.isServer,this._maxPayload=a.maxPayload|0,this._skipUTF8Validation=!!a.skipUTF8Validation,this[$]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=v}_write(a,A,B){if(this._opcode===8&&this._state==v)return B();this._bufferedBytes+=a.length,this._buffers.push(a),this.startLoop(B)}consume(a){if(this._bufferedBytes-=a,a===this._buffers[0].length)return this._buffers.shift();if(a<this._buffers[0].length){let B=this._buffers[0];return this._buffers[0]=new u(B.buffer,B.byteOffset+a,B.length-a),new u(B.buffer,B.byteOffset,a)}let A=Buffer.allocUnsafe(a);do{let B=this._buffers[0],T=A.length-a;if(a>=B.length)A.set(this._buffers.shift(),T);else A.set(new Uint8Array(B.buffer,B.byteOffset,a),T),this._buffers[0]=new u(B.buffer,B.byteOffset+a,B.length-a);a-=B.length}while(a>0);return A}startLoop(a){this._loop=!0;do switch(this._state){case v:this.getInfo(a);break;case O:this.getPayloadLength16(a);break;case p:this.getPayloadLength64(a);break;case l:this.getMask();break;case F:this.getData(a);break;case D:case R:this._loop=!1;return}while(this._loop);if(!this._errored)a()}getInfo(a){if(this._bufferedBytes<2){this._loop=!1;return}let A=this.consume(2);if((A[0]&48)!==0){let T=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");a(T);return}let B=(A[0]&64)===64;if(B&&!this._extensions[S.extensionName]){let T=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(T);return}if(this._fin=(A[0]&128)===128,this._opcode=A[0]&15,this._payloadLength=A[1]&127,this._opcode===0){if(B){let T=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(T);return}if(!this._fragmented){let T=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");a(T);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let T=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");a(T);return}this._compressed=B}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let T=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");a(T);return}if(B){let T=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(T);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let T=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");a(T);return}}else{let T=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");a(T);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=(A[1]&128)===128,this._isServer){if(!this._masked){let T=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");a(T);return}}else if(this._masked){let T=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");a(T);return}if(this._payloadLength===126)this._state=O;else if(this._payloadLength===127)this._state=p;else this.haveLength(a)}getPayloadLength16(a){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(a)}getPayloadLength64(a){if(this._bufferedBytes<8){this._loop=!1;return}let A=this.consume(8),B=A.readUInt32BE(0);if(B>Math.pow(2,21)-1){let T=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");a(T);return}this._payloadLength=B*Math.pow(2,32)+A.readUInt32BE(4),this.haveLength(a)}haveLength(a){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let A=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");a(A);return}}if(this._masked)this._state=l;else this._state=F}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=F}getData(a){let A=s;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if(A=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)y(A,this._mask)}if(this._opcode>7){this.controlMessage(A,a);return}if(this._compressed){this._state=D,this.decompress(A,a);return}if(A.length)this._messageLength=this._totalPayloadLength,this._fragments.push(A);this.dataMessage(a)}decompress(a,A){this._extensions[S.extensionName].decompress(a,this._fin,(T,d)=>{if(T)return A(T);if(d.length){if(this._messageLength+=d.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let g=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");A(g);return}this._fragments.push(d)}if(this.dataMessage(A),this._state===v)this.startLoop(A)})}dataMessage(a){if(!this._fin){this._state=v;return}let A=this._messageLength,B=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let T;if(this._binaryType==="nodebuffer")T=r(B,A);else if(this._binaryType==="arraybuffer")T=o(r(B,A));else if(this._binaryType==="blob")T=new Blob(B);else T=B;if(this._allowSynchronousEvents)this.emit("message",T,!0),this._state=v;else this._state=R,setImmediate(()=>{this.emit("message",T,!0),this._state=v,this.startLoop(a)})}else{let T=r(B,A);if(!this._skipUTF8Validation&&!f(T)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");a(d);return}if(this._state===D||this._allowSynchronousEvents)this.emit("message",T,!1),this._state=v;else this._state=R,setImmediate(()=>{this.emit("message",T,!1),this._state=v,this.startLoop(a)})}}controlMessage(a,A){if(this._opcode===8){if(a.length===0)this._loop=!1,this.emit("conclude",1005,s),this.end();else{let B=a.readUInt16BE(0);if(!n(B)){let d=this.createError(RangeError,`invalid status code ${B}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");A(d);return}let T=new u(a.buffer,a.byteOffset+2,a.length-2);if(!this._skipUTF8Validation&&!f(T)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");A(d);return}this._loop=!1,this.emit("conclude",B,T),this.end()}this._state=v;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",a),this._state=v;else this._state=R,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",a),this._state=v,this.startLoop(A)})}createError(a,A,B,T,d){this._loop=!1,this._errored=!0;let g=new a(B?`Invalid WebSocket frame: ${A}`:A);return Error.captureStackTrace(g,this.createError),g.code=d,g[C]=T,g}}e.exports=E}),Qe=x((_,e)=>{var{Duplex:t}=G("stream"),{randomFillSync:S}=G("crypto"),i=T_(),{EMPTY_BUFFER:s,kWebSocket:C,NOOP:$}=e_(),{isBlob:r,isValidStatusCode:o}=E_(),{mask:y,toBuffer:n}=N_(),f=Symbol("kByteLength"),u=Buffer.alloc(4),v=8192,O,p=v,l=0,F=1,D=2;class R{constructor(A,B,T){if(this._extensions=B||{},T)this._generateMask=T,this._maskBuffer=Buffer.alloc(4);this._socket=A,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=l,this.onerror=$,this[C]=void 0}static frame(A,B){let T,d=!1,g=2,V=!1;if(B.mask){if(T=B.maskBuffer||u,B.generateMask)B.generateMask(T);else{if(p===v){if(O===void 0)O=Buffer.alloc(v);S(O,0,v),p=0}T[0]=O[p++],T[1]=O[p++],T[2]=O[p++],T[3]=O[p++]}V=(T[0]|T[1]|T[2]|T[3])===0,g=6}let m;if(typeof A==="string")if((!B.mask||V)&&B[f]!==void 0)m=B[f];else A=Buffer.from(A),m=A.length;else m=A.length,d=B.mask&&B.readOnly&&!V;let q=m;if(m>=65536)g+=8,q=127;else if(m>125)g+=2,q=126;let L=Buffer.allocUnsafe(d?m+g:g);if(L[0]=B.fin?B.opcode|128:B.opcode,B.rsv1)L[0]|=64;if(L[1]=q,q===126)L.writeUInt16BE(m,2);else if(q===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!B.mask)return[L,A];if(L[1]|=128,L[g-4]=T[0],L[g-3]=T[1],L[g-2]=T[2],L[g-1]=T[3],V)return[L,A];if(d)return y(A,T,L,g,m),[L];return y(A,T,A,0,m),[L,A]}close(A,B,T,d){let g;if(A===void 0)g=s;else if(typeof A!=="number"||!o(A))throw TypeError("First argument must be a valid error code number");else if(B===void 0||!B.length)g=Buffer.allocUnsafe(2),g.writeUInt16BE(A,0);else{let m=Buffer.byteLength(B);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(g=Buffer.allocUnsafe(2+m),g.writeUInt16BE(A,0),typeof B==="string")g.write(B,2);else g.set(B,2)}let V={[f]:g.length,fin:!0,generateMask:this._generateMask,mask:T,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==l)this.enqueue([this.dispatch,g,!1,V,d]);else this.sendFrame(R.frame(g,V),d)}ping(A,B,T){let d,g;if(typeof A==="string")d=Buffer.byteLength(A),g=!1;else if(r(A))d=A.size,g=!1;else A=n(A),d=A.length,g=n.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[f]:d,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:9,readOnly:g,rsv1:!1};if(r(A))if(this._state!==l)this.enqueue([this.getBlobData,A,!1,V,T]);else this.getBlobData(A,!1,V,T);else if(this._state!==l)this.enqueue([this.dispatch,A,!1,V,T]);else this.sendFrame(R.frame(A,V),T)}pong(A,B,T){let d,g;if(typeof A==="string")d=Buffer.byteLength(A),g=!1;else if(r(A))d=A.size,g=!1;else A=n(A),d=A.length,g=n.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[f]:d,fin:!0,generateMask:this._generateMask,mask:B,maskBuffer:this._maskBuffer,opcode:10,readOnly:g,rsv1:!1};if(r(A))if(this._state!==l)this.enqueue([this.getBlobData,A,!1,V,T]);else this.getBlobData(A,!1,V,T);else if(this._state!==l)this.enqueue([this.dispatch,A,!1,V,T]);else this.sendFrame(R.frame(A,V),T)}send(A,B,T){let d=this._extensions[i.extensionName],g=B.binary?2:1,V=B.compress,m,q;if(typeof A==="string")m=Buffer.byteLength(A),q=!1;else if(r(A))m=A.size,q=!1;else A=n(A),m=A.length,q=n.readOnly;if(this._firstFragment){if(this._firstFragment=!1,V&&d&&d.params[d._isServer?"server_no_context_takeover":"client_no_context_takeover"])V=m>=d._threshold;this._compress=V}else V=!1,g=0;if(B.fin)this._firstFragment=!0;let L={[f]:m,fin:B.fin,generateMask:this._generateMask,mask:B.mask,maskBuffer:this._maskBuffer,opcode:g,readOnly:q,rsv1:V};if(r(A))if(this._state!==l)this.enqueue([this.getBlobData,A,this._compress,L,T]);else this.getBlobData(A,this._compress,L,T);else if(this._state!==l)this.enqueue([this.dispatch,A,this._compress,L,T]);else this.dispatch(A,this._compress,L,T)}getBlobData(A,B,T,d){this._bufferedBytes+=T[f],this._state=D,A.arrayBuffer().then((g)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(E,this,m,d);return}this._bufferedBytes-=T[f];let V=n(g);if(!B)this._state=l,this.sendFrame(R.frame(V,T),d),this.dequeue();else this.dispatch(V,B,T,d)}).catch((g)=>{process.nextTick(a,this,g,d)})}dispatch(A,B,T,d){if(!B){this.sendFrame(R.frame(A,T),d);return}let g=this._extensions[i.extensionName];this._bufferedBytes+=T[f],this._state=F,g.compress(A,T.fin,(V,m)=>{if(this._socket.destroyed){let q=Error("The socket was closed while data was being compressed");E(this,q,d);return}this._bufferedBytes-=T[f],this._state=l,T.readOnly=!1,this.sendFrame(R.frame(m,T),d),this.dequeue()})}dequeue(){while(this._state===l&&this._queue.length){let A=this._queue.shift();this._bufferedBytes-=A[3][f],Reflect.apply(A[0],this,A.slice(1))}}enqueue(A){this._bufferedBytes+=A[3][f],this._queue.push(A)}sendFrame(A,B){if(A.length===2)this._socket.cork(),this._socket.write(A[0]),this._socket.write(A[1],B),this._socket.uncork();else this._socket.write(A[0],B)}}e.exports=R;function E(A,B,T){if(typeof T==="function")T(B);for(let d=0;d<A._queue.length;d++){let g=A._queue[d],V=g[g.length-1];if(typeof V==="function")V(B)}}function a(A,B,T){E(A,B,T),A.onerror(B)}}),LS=x((_,e)=>{var{kForOnEventAttribute:t,kListener:S}=e_(),i=Symbol("kCode"),s=Symbol("kData"),C=Symbol("kError"),$=Symbol("kMessage"),r=Symbol("kReason"),o=Symbol("kTarget"),y=Symbol("kType"),n=Symbol("kWasClean");class f{constructor(F){this[o]=null,this[y]=F}get target(){return this[o]}get type(){return this[y]}}Object.defineProperty(f.prototype,"target",{enumerable:!0}),Object.defineProperty(f.prototype,"type",{enumerable:!0});class u extends f{constructor(F,D={}){super(F);this[i]=D.code===void 0?0:D.code,this[r]=D.reason===void 0?"":D.reason,this[n]=D.wasClean===void 0?!1:D.wasClean}get code(){return this[i]}get reason(){return this[r]}get wasClean(){return this[n]}}Object.defineProperty(u.prototype,"code",{enumerable:!0}),Object.defineProperty(u.prototype,"reason",{enumerable:!0}),Object.defineProperty(u.prototype,"wasClean",{enumerable:!0});class v extends f{constructor(F,D={}){super(F);this[C]=D.error===void 0?null:D.error,this[$]=D.message===void 0?"":D.message}get error(){return this[C]}get message(){return this[$]}}Object.defineProperty(v.prototype,"error",{enumerable:!0}),Object.defineProperty(v.prototype,"message",{enumerable:!0});class O extends f{constructor(F,D={}){super(F);this[s]=D.data===void 0?null:D.data}get data(){return this[s]}}Object.defineProperty(O.prototype,"data",{enumerable:!0});var p={addEventListener(F,D,R={}){for(let a of this.listeners(F))if(!R[t]&&a[S]===D&&!a[t])return;let E;if(F==="message")E=function(A,B){let T=new O("message",{data:B?A:A.toString()});T[o]=this,l(D,this,T)};else if(F==="close")E=function(A,B){let T=new u("close",{code:A,reason:B.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});T[o]=this,l(D,this,T)};else if(F==="error")E=function(A){let B=new v("error",{error:A,message:A.message});B[o]=this,l(D,this,B)};else if(F==="open")E=function(){let A=new f("open");A[o]=this,l(D,this,A)};else return;if(E[t]=!!R[t],E[S]=D,R.once)this.once(F,E);else this.on(F,E)},removeEventListener(F,D){for(let R of this.listeners(F))if(R[S]===D&&!R[t]){this.removeListener(F,R);break}}};e.exports={CloseEvent:u,ErrorEvent:v,Event:f,EventTarget:p,MessageEvent:O};function l(F,D,R){if(typeof F==="object"&&F.handleEvent)F.handleEvent.call(F,R);else F.call(D,R)}}),Ae=x((_,e)=>{var{tokenChars:t}=E_();function S(C,$,r){if(C[$]===void 0)C[$]=[r];else C[$].push(r)}function i(C){let $=Object.create(null),r=Object.create(null),o=!1,y=!1,n=!1,f,u,v=-1,O=-1,p=-1,l=0;for(;l<C.length;l++)if(O=C.charCodeAt(l),f===void 0)if(p===-1&&t[O]===1){if(v===-1)v=l}else if(l!==0&&(O===32||O===9)){if(p===-1&&v!==-1)p=l}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${l}`);if(p===-1)p=l;let D=C.slice(v,p);if(O===44)S($,D,r),r=Object.create(null);else f=D;v=p=-1}else throw SyntaxError(`Unexpected character at index ${l}`);else if(u===void 0)if(p===-1&&t[O]===1){if(v===-1)v=l}else if(O===32||O===9){if(p===-1&&v!==-1)p=l}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${l}`);if(p===-1)p=l;if(S(r,C.slice(v,p),!0),O===44)S($,f,r),r=Object.create(null),f=void 0;v=p=-1}else if(O===61&&v!==-1&&p===-1)u=C.slice(v,l),v=p=-1;else throw SyntaxError(`Unexpected character at index ${l}`);else if(y){if(t[O]!==1)throw SyntaxError(`Unexpected character at index ${l}`);if(v===-1)v=l;else if(!o)o=!0;y=!1}else if(n)if(t[O]===1){if(v===-1)v=l}else if(O===34&&v!==-1)n=!1,p=l;else if(O===92)y=!0;else throw SyntaxError(`Unexpected character at index ${l}`);else if(O===34&&C.charCodeAt(l-1)===61)n=!0;else if(p===-1&&t[O]===1){if(v===-1)v=l}else if(v!==-1&&(O===32||O===9)){if(p===-1)p=l}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${l}`);if(p===-1)p=l;let D=C.slice(v,p);if(o)D=D.replace(/\\/g,""),o=!1;if(S(r,u,D),O===44)S($,f,r),r=Object.create(null),f=void 0;u=void 0,v=p=-1}else throw SyntaxError(`Unexpected character at index ${l}`);if(v===-1||n||O===32||O===9)throw SyntaxError("Unexpected end of input");if(p===-1)p=l;let F=C.slice(v,p);if(f===void 0)S($,F,r);else{if(u===void 0)S(r,F,!0);else if(o)S(r,u,F.replace(/\\/g,""));else S(r,u,F);S($,f,r)}return $}function s(C){return Object.keys(C).map(($)=>{let r=C[$];if(!Array.isArray(r))r=[r];return r.map((o)=>{return[$].concat(Object.keys(o).map((y)=>{let n=o[y];if(!Array.isArray(n))n=[n];return n.map((f)=>f===!0?y:`${y}=${f}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:s,parse:i}}),$e=x((_,e)=>{var t=G("events"),S=G("https"),i=G("http"),s=G("net"),C=G("tls"),{randomBytes:$,createHash:r}=G("crypto"),{Duplex:o,Readable:y}=G("stream"),{URL:n}=G("url"),f=T_(),u=Je(),v=Qe(),{isBlob:O}=E_(),{BINARY_TYPES:p,CLOSE_TIMEOUT:l,EMPTY_BUFFER:F,GUID:D,kForOnEventAttribute:R,kListener:E,kStatusCode:a,kWebSocket:A,NOOP:B}=e_(),{EventTarget:{addEventListener:T,removeEventListener:d}}=LS(),{format:g,parse:V}=Ae(),{toBuffer:m}=N_(),q=Symbol("kAborted"),L=[8,13],U=["CONNECTING","OPEN","CLOSING","CLOSED"],J=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class w extends t{constructor(c,b,h){super();if(this._binaryType=p[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=F,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=w.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,c!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,b===void 0)b=[];else if(!Array.isArray(b))if(typeof b==="object"&&b!==null)h=b,b=[];else b=[b];Z(this,c,b,h)}else this._autoPong=h.autoPong,this._closeTimeout=h.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(c){if(!p.includes(c))return;if(this._binaryType=c,this._receiver)this._receiver._binaryType=c}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(c,b,h){let W=new u({allowSynchronousEvents:h.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation}),N=new v(c,this._extensions,h.generateMask);if(this._receiver=W,this._sender=N,this._socket=c,W[A]=this,N[A]=this,c[A]=this,W.on("conclude",Jt),W.on("drain",Qt),W.on("error",Zt),W.on("message",Yt),W.on("ping",_S),W.on("pong",eS),N.onerror=tS,c.setTimeout)c.setTimeout(0);if(c.setNoDelay)c.setNoDelay();if(b.length>0)c.unshift(b);c.on("close",de),c.on("data",u_),c.on("end",ge),c.on("error",we),this._readyState=w.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=w.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[f.extensionName])this._extensions[f.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=w.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(c,b){if(this.readyState===w.CLOSED)return;if(this.readyState===w.CONNECTING){K(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===w.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=w.CLOSING,this._sender.close(c,b,!this._isServer,(h)=>{if(h)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),Oe(this)}pause(){if(this.readyState===w.CONNECTING||this.readyState===w.CLOSED)return;this._paused=!0,this._socket.pause()}ping(c,b,h){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")h=c,c=b=void 0;else if(typeof b==="function")h=b,b=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==w.OPEN){K_(this,c,h);return}if(b===void 0)b=!this._isServer;this._sender.ping(c||F,b,h)}pong(c,b,h){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")h=c,c=b=void 0;else if(typeof b==="function")h=b,b=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==w.OPEN){K_(this,c,h);return}if(b===void 0)b=!this._isServer;this._sender.pong(c||F,b,h)}resume(){if(this.readyState===w.CONNECTING||this.readyState===w.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(c,b,h){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof b==="function")h=b,b={};if(typeof c==="number")c=c.toString();if(this.readyState!==w.OPEN){K_(this,c,h);return}let W={binary:typeof c!=="string",mask:!this._isServer,compress:!0,fin:!0,...b};if(!this._extensions[f.extensionName])W.compress=!1;this._sender.send(c||F,W,h)}terminate(){if(this.readyState===w.CLOSED)return;if(this.readyState===w.CONNECTING){K(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=w.CLOSING,this._socket.destroy()}}Object.defineProperty(w,"CONNECTING",{enumerable:!0,value:U.indexOf("CONNECTING")}),Object.defineProperty(w.prototype,"CONNECTING",{enumerable:!0,value:U.indexOf("CONNECTING")}),Object.defineProperty(w,"OPEN",{enumerable:!0,value:U.indexOf("OPEN")}),Object.defineProperty(w.prototype,"OPEN",{enumerable:!0,value:U.indexOf("OPEN")}),Object.defineProperty(w,"CLOSING",{enumerable:!0,value:U.indexOf("CLOSING")}),Object.defineProperty(w.prototype,"CLOSING",{enumerable:!0,value:U.indexOf("CLOSING")}),Object.defineProperty(w,"CLOSED",{enumerable:!0,value:U.indexOf("CLOSED")}),Object.defineProperty(w.prototype,"CLOSED",{enumerable:!0,value:U.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((c)=>{Object.defineProperty(w.prototype,c,{enumerable:!0})}),["open","error","close","message"].forEach((c)=>{Object.defineProperty(w.prototype,`on${c}`,{enumerable:!0,get(){for(let b of this.listeners(c))if(b[R])return b[E];return null},set(b){for(let h of this.listeners(c))if(h[R]){this.removeListener(c,h);break}if(typeof b!=="function")return;this.addEventListener(c,b,{[R]:!0})}})}),w.prototype.addEventListener=T,w.prototype.removeEventListener=d,e.exports=w;function Z(c,b,h,W){let N={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:l,protocolVersion:L[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...W,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(c._autoPong=N.autoPong,c._closeTimeout=N.closeTimeout,!L.includes(N.protocolVersion))throw RangeError(`Unsupported protocol version: ${N.protocolVersion} (supported versions: ${L.join(", ")})`);let M;if(b instanceof n)M=b;else try{M=new n(b)}catch{throw SyntaxError(`Invalid URL: ${b}`)}if(M.protocol==="http:")M.protocol="ws:";else if(M.protocol==="https:")M.protocol="wss:";c._url=M.href;let r_=M.protocol==="wss:",A_=M.protocol==="ws+unix:",c_;if(M.protocol!=="ws:"&&!r_&&!A_)c_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(A_&&!M.pathname)c_="The URL's pathname is empty";else if(M.hash)c_="The URL contains a fragment identifier";if(c_){let P=SyntaxError(c_);if(c._redirects===0)throw P;else{t_(c,P);return}}let Ne=r_?443:80,he=$(16).toString("base64"),He=r_?S.request:i.request,B_=new Set,R_;if(N.createConnection=N.createConnection||(r_?k_:G_),N.defaultPort=N.defaultPort||Ne,N.port=M.port||Ne,N.host=M.hostname.startsWith("[")?M.hostname.slice(1,-1):M.hostname,N.headers={...N.headers,"Sec-WebSocket-Version":N.protocolVersion,"Sec-WebSocket-Key":he,Connection:"Upgrade",Upgrade:"websocket"},N.path=M.pathname+M.search,N.timeout=N.handshakeTimeout,N.perMessageDeflate)R_=new f({...N.perMessageDeflate,isServer:!1,maxPayload:N.maxPayload}),N.headers["Sec-WebSocket-Extensions"]=g({[f.extensionName]:R_.offer()});if(h.length){for(let P of h){if(typeof P!=="string"||!J.test(P)||B_.has(P))throw SyntaxError("An invalid or duplicated subprotocol was specified");B_.add(P)}N.headers["Sec-WebSocket-Protocol"]=h.join(",")}if(N.origin)if(N.protocolVersion<13)N.headers["Sec-WebSocket-Origin"]=N.origin;else N.headers.Origin=N.origin;if(M.username||M.password)N.auth=`${M.username}:${M.password}`;if(A_){let P=N.path.split(":");N.socketPath=P[0],N.path=P[1]}let I;if(N.followRedirects){if(c._redirects===0){c._originalIpc=A_,c._originalSecure=r_,c._originalHostOrSocketPath=A_?N.socketPath:M.host;let P=W&&W.headers;if(W={...W,headers:{}},P)for(let[k,$_]of Object.entries(P))W.headers[k.toLowerCase()]=$_}else if(c.listenerCount("redirect")===0){let P=A_?c._originalIpc?N.socketPath===c._originalHostOrSocketPath:!1:c._originalIpc?!1:M.host===c._originalHostOrSocketPath;if(!P||c._originalSecure&&!r_){if(delete N.headers.authorization,delete N.headers.cookie,!P)delete N.headers.host;N.auth=void 0}}if(N.auth&&!W.headers.authorization)W.headers.authorization="Basic "+Buffer.from(N.auth).toString("base64");if(I=c._req=He(N),c._redirects)c.emit("redirect",c.url,I)}else I=c._req=He(N);if(N.timeout)I.on("timeout",()=>{K(c,I,"Opening handshake has timed out")});if(I.on("error",(P)=>{if(I===null||I[q])return;I=c._req=null,t_(c,P)}),I.on("response",(P)=>{let k=P.headers.location,$_=P.statusCode;if(k&&N.followRedirects&&$_>=300&&$_<400){if(++c._redirects>N.maxRedirects){K(c,I,"Maximum redirects exceeded");return}I.abort();let D_;try{D_=new n(k,b)}catch(Ve){let o_=SyntaxError(`Invalid URL: ${k}`);t_(c,o_);return}Z(c,D_,h,W)}else if(!c.emit("unexpected-response",I,P))K(c,I,`Unexpected server response: ${P.statusCode}`)}),I.on("upgrade",(P,k,$_)=>{if(c.emit("upgrade",P),c.readyState!==w.CONNECTING)return;I=c._req=null;let D_=P.headers.upgrade;if(D_===void 0||D_.toLowerCase()!=="websocket"){K(c,k,"Invalid Upgrade header");return}let Ve=r("sha1").update(he+D).digest("base64");if(P.headers["sec-websocket-accept"]!==Ve){K(c,k,"Invalid Sec-WebSocket-Accept header");return}let o_=P.headers["sec-websocket-protocol"],f_;if(o_!==void 0){if(!B_.size)f_="Server sent a subprotocol but none was requested";else if(!B_.has(o_))f_="Server sent an invalid subprotocol"}else if(B_.size)f_="Server sent no subprotocol";if(f_){K(c,k,f_);return}if(o_)c._protocol=o_;let me=P.headers["sec-websocket-extensions"];if(me!==void 0){if(!R_){K(c,k,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let x_;try{x_=V(me)}catch(z_){K(c,k,"Invalid Sec-WebSocket-Extensions header");return}let Le=Object.keys(x_);if(Le.length!==1||Le[0]!==f.extensionName){K(c,k,"Server indicated an extension that was not requested");return}try{R_.accept(x_[f.extensionName])}catch(z_){K(c,k,"Invalid Sec-WebSocket-Extensions header");return}c._extensions[f.extensionName]=R_}c.setSocket(k,$_,{allowSynchronousEvents:N.allowSynchronousEvents,generateMask:N.generateMask,maxPayload:N.maxPayload,skipUTF8Validation:N.skipUTF8Validation})}),N.finishRequest)N.finishRequest(I,c);else I.end()}function t_(c,b){c._readyState=w.CLOSING,c._errorEmitted=!0,c.emit("error",b),c.emitClose()}function G_(c){return c.path=c.socketPath,s.connect(c)}function k_(c){if(c.path=void 0,!c.servername&&c.servername!=="")c.servername=s.isIP(c.host)?"":c.host;return C.connect(c)}function K(c,b,h){c._readyState=w.CLOSING;let W=Error(h);if(Error.captureStackTrace(W,K),b.setHeader){if(b[q]=!0,b.abort(),b.socket&&!b.socket.destroyed)b.socket.destroy();process.nextTick(t_,c,W)}else b.destroy(W),b.once("error",c.emit.bind(c,"error")),b.once("close",c.emitClose.bind(c))}function K_(c,b,h){if(b){let W=O(b)?b.size:m(b).length;if(c._socket)c._sender._bufferedBytes+=W;else c._bufferedAmount+=W}if(h){let W=Error(`WebSocket is not open: readyState ${c.readyState} (${U[c.readyState]})`);process.nextTick(h,W)}}function Jt(c,b){let h=this[A];if(h._closeFrameReceived=!0,h._closeMessage=b,h._closeCode=c,h._socket[A]===void 0)return;if(h._socket.removeListener("data",u_),process.nextTick(be,h._socket),c===1005)h.close();else h.close(c,b)}function Qt(){let c=this[A];if(!c.isPaused)c._socket.resume()}function Zt(c){let b=this[A];if(b._socket[A]!==void 0)b._socket.removeListener("data",u_),process.nextTick(be,b._socket),b.close(c[a]);if(!b._errorEmitted)b._errorEmitted=!0,b.emit("error",c)}function ue(){this[A].emitClose()}function Yt(c,b){this[A].emit("message",c,b)}function _S(c){let b=this[A];if(b._autoPong)b.pong(c,!this._isServer,B);b.emit("ping",c)}function eS(c){this[A].emit("pong",c)}function be(c){c.resume()}function tS(c){let b=this[A];if(b.readyState===w.CLOSED)return;if(b.readyState===w.OPEN)b._readyState=w.CLOSING,Oe(b);if(this._socket.end(),!b._errorEmitted)b._errorEmitted=!0,b.emit("error",c)}function Oe(c){c._closeTimer=setTimeout(c._socket.destroy.bind(c._socket),c._closeTimeout)}function de(){let c=this[A];if(this.removeListener("close",de),this.removeListener("data",u_),this.removeListener("end",ge),c._readyState=w.CLOSING,!this._readableState.endEmitted&&!c._closeFrameReceived&&!c._receiver._writableState.errorEmitted&&this._readableState.length!==0){let b=this.read(this._readableState.length);c._receiver.write(b)}if(c._receiver.end(),this[A]=void 0,clearTimeout(c._closeTimer),c._receiver._writableState.finished||c._receiver._writableState.errorEmitted)c.emitClose();else c._receiver.on("error",ue),c._receiver.on("finish",ue)}function u_(c){if(!this[A]._receiver.write(c))this.pause()}function ge(){let c=this[A];c._readyState=w.CLOSING,c._receiver.end(),this.end()}function we(){let c=this[A];if(this.removeListener("error",we),this.on("error",B),c)c._readyState=w.CLOSING,this.destroy()}}),WS=x((_,e)=>{var t=$e(),{Duplex:S}=G("stream");function i(r){r.emit("close")}function s(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function C(r){if(this.removeListener("error",C),this.destroy(),this.listenerCount("error")===0)this.emit("error",r)}function $(r,o){let y=!0,n=new S({...o,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(u,v){let O=!v&&n._readableState.objectMode?u.toString():u;if(!n.push(O))r.pause()}),r.once("error",function(u){if(n.destroyed)return;y=!1,n.destroy(u)}),r.once("close",function(){if(n.destroyed)return;n.push(null)}),n._destroy=function(f,u){if(r.readyState===r.CLOSED){u(f),process.nextTick(i,n);return}let v=!1;if(r.once("error",function(p){v=!0,u(p)}),r.once("close",function(){if(!v)u(f);process.nextTick(i,n)}),y)r.terminate()},n._final=function(f){if(r.readyState===r.CONNECTING){r.once("open",function(){n._final(f)});return}if(r._socket===null)return;if(r._socket._writableState.finished){if(f(),n._readableState.endEmitted)n.destroy()}else r._socket.once("finish",function(){f()}),r.close()},n._read=function(){if(r.isPaused)r.resume()},n._write=function(f,u,v){if(r.readyState===r.CONNECTING){r.once("open",function(){n._write(f,u,v)});return}r.send(f,v)},n.on("end",s),n.on("error",C),n}e.exports=$}),Ze=x((_,e)=>{var{tokenChars:t}=E_();function S(i){let s=new Set,C=-1,$=-1,r=0;for(r;r<i.length;r++){let y=i.charCodeAt(r);if($===-1&&t[y]===1){if(C===-1)C=r}else if(r!==0&&(y===32||y===9)){if($===-1&&C!==-1)$=r}else if(y===44){if(C===-1)throw SyntaxError(`Unexpected character at index ${r}`);if($===-1)$=r;let n=i.slice(C,$);if(s.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);s.add(n),C=$=-1}else throw SyntaxError(`Unexpected character at index ${r}`)}if(C===-1||$!==-1)throw SyntaxError("Unexpected end of input");let o=i.slice(C,r);if(s.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);return s.add(o),s}e.exports={parse:S}}),PS=x((_,e)=>{var t=G("events"),S=G("http"),{Duplex:i}=G("stream"),{createHash:s}=G("crypto"),C=Ae(),$=T_(),r=Ze(),o=$e(),{CLOSE_TIMEOUT:y,GUID:n,kWebSocket:f}=e_(),u=/^[+/0-9A-Za-z]{22}==$/,v=0,O=1,p=2;class l extends t{constructor(A,B){super();if(A={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:y,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:o,...A},A.port==null&&!A.server&&!A.noServer||A.port!=null&&(A.server||A.noServer)||A.server&&A.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if(A.port!=null)this._server=S.createServer((T,d)=>{let g=S.STATUS_CODES[426];d.writeHead(426,{"Content-Length":g.length,"Content-Type":"text/plain"}),d.end(g)}),this._server.listen(A.port,A.host,A.backlog,B);else if(A.server)this._server=A.server;if(this._server){let T=this.emit.bind(this,"connection");this._removeListeners=F(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(d,g,V)=>{this.handleUpgrade(d,g,V,T)}})}if(A.perMessageDeflate===!0)A.perMessageDeflate={};if(A.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=A,this._state=v}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close(A){if(this._state===p){if(A)this.once("close",()=>{A(Error("The server is not running"))});process.nextTick(D,this);return}if(A)this.once("close",A);if(this._state===O)return;if(this._state=O,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(D,this);else this._shouldEmitClose=!0;else process.nextTick(D,this)}else{let B=this._server;this._removeListeners(),this._removeListeners=this._server=null,B.close(()=>{D(this)})}}shouldHandle(A){if(this.options.path){let B=A.url.indexOf("?");if((B!==-1?A.url.slice(0,B):A.url)!==this.options.path)return!1}return!0}handleUpgrade(A,B,T,d){B.on("error",R);let g=A.headers["sec-websocket-key"],V=A.headers.upgrade,m=+A.headers["sec-websocket-version"];if(A.method!=="GET"){a(this,A,B,405,"Invalid HTTP method");return}if(V===void 0||V.toLowerCase()!=="websocket"){a(this,A,B,400,"Invalid Upgrade header");return}if(g===void 0||!u.test(g)){a(this,A,B,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){a(this,A,B,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle(A)){E(B,400);return}let q=A.headers["sec-websocket-protocol"],L=new Set;if(q!==void 0)try{L=r.parse(q)}catch(w){a(this,A,B,400,"Invalid Sec-WebSocket-Protocol header");return}let U=A.headers["sec-websocket-extensions"],J={};if(this.options.perMessageDeflate&&U!==void 0){let w=new $({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let Z=C.parse(U);if(Z[$.extensionName])w.accept(Z[$.extensionName]),J[$.extensionName]=w}catch(Z){a(this,A,B,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let w={origin:A.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!(A.socket.authorized||A.socket.encrypted),req:A};if(this.options.verifyClient.length===2){this.options.verifyClient(w,(Z,t_,G_,k_)=>{if(!Z)return E(B,t_||401,G_,k_);this.completeUpgrade(J,g,L,A,B,T,d)});return}if(!this.options.verifyClient(w))return E(B,401)}this.completeUpgrade(J,g,L,A,B,T,d)}completeUpgrade(A,B,T,d,g,V,m){if(!g.readable||!g.writable)return g.destroy();if(g[f])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>v)return E(g,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${s("sha1").update(B+n).digest("base64")}`],U=new this.options.WebSocket(null,void 0,this.options);if(T.size){let J=this.options.handleProtocols?this.options.handleProtocols(T,d):T.values().next().value;if(J)L.push(`Sec-WebSocket-Protocol: ${J}`),U._protocol=J}if(A[$.extensionName]){let J=A[$.extensionName].params,w=C.format({[$.extensionName]:[J]});L.push(`Sec-WebSocket-Extensions: ${w}`),U._extensions=A}if(this.emit("headers",L,d),g.write(L.concat(`\r
33
+ }`,ks=65536,zs,js,Zs,_i=1500;var bt=J_(()=>{VS=Object.create,mS=Object.getPrototypeOf,ke=Object.defineProperty,LS=Object.getOwnPropertyNames,WS=Object.prototype.hasOwnProperty;X=NS(import.meta.url),e_=x((_,e)=>{var t=["nodebuffer","arraybuffer","fragments"],S=typeof Blob<"u";if(S)t.push("blob");e.exports={BINARY_TYPES:t,CLOSE_TIMEOUT:30000,EMPTY_BUFFER:Buffer.alloc(0),GUID:"258EAFA5-E914-47DA-95CA-C5AB0DC85B11",hasBlob:S,kForOnEventAttribute:Symbol("kIsForOnEventAttribute"),kListener:Symbol("kListener"),kStatusCode:Symbol("status-code"),kWebSocket:Symbol("websocket"),NOOP:()=>{}}}),N_=x((_,e)=>{var{EMPTY_BUFFER:t}=e_(),S=Buffer[Symbol.species];function i(n,y){if(n.length===0)return t;if(n.length===1)return n[0];let o=Buffer.allocUnsafe(y),B=0;for(let l=0;l<n.length;l++){let v=n[l];o.set(v,B),B+=v.length}if(B<y)return new S(o.buffer,o.byteOffset,B);return o}function s(n,y,o,B,l){for(let v=0;v<l;v++)o[B+v]=n[v]^y[v&3]}function C(n,y){for(let o=0;o<n.length;o++)n[o]^=y[o&3]}function A(n){if(n.length===n.buffer.byteLength)return n.buffer;return n.buffer.slice(n.byteOffset,n.byteOffset+n.length)}function r(n){if(r.readOnly=!0,Buffer.isBuffer(n))return n;let y;if(n instanceof ArrayBuffer)y=new S(n);else if(ArrayBuffer.isView(n))y=new S(n.buffer,n.byteOffset,n.byteLength);else y=Buffer.from(n),r.readOnly=!1;return y}if(e.exports={concat:i,mask:s,toArrayBuffer:A,toBuffer:r,unmask:C},!process.env.WS_NO_BUFFER_UTIL)try{let n=(()=>{throw Error("Cannot require module bufferutil")})();e.exports.mask=function(y,o,B,l,v){if(v<48)s(y,o,B,l,v);else n.mask(y,o,B,l,v)},e.exports.unmask=function(y,o){if(y.length<32)C(y,o);else n.unmask(y,o)}}catch(n){}}),IS=x((_,e)=>{var t=Symbol("kDone"),S=Symbol("kRun");class i{constructor(s){this[t]=()=>{this.pending--,this[S]()},this.concurrency=s||1/0,this.jobs=[],this.pending=0}add(s){this.jobs.push(s),this[S]()}[S](){if(this.pending===this.concurrency)return;if(this.jobs.length){let s=this.jobs.shift();this.pending++,s(this[t])}}}e.exports=i}),E_=x((_,e)=>{var t=X("zlib"),S=N_(),i=IS(),{kStatusCode:s}=e_(),C=Buffer[Symbol.species],A=Buffer.from([0,0,255,255]),r=Symbol("permessage-deflate"),n=Symbol("total-length"),y=Symbol("callback"),o=Symbol("buffers"),B=Symbol("error"),l;class v{constructor(p){if(this._options=p||{},this._threshold=this._options.threshold!==void 0?this._options.threshold:1024,this._maxPayload=this._options.maxPayload|0,this._isServer=!!this._options.isServer,this._deflate=null,this._inflate=null,this.params=null,!l){let T=this._options.concurrencyLimit!==void 0?this._options.concurrencyLimit:10;l=new i(T)}}static get extensionName(){return"permessage-deflate"}offer(){let p={};if(this._options.serverNoContextTakeover)p.server_no_context_takeover=!0;if(this._options.clientNoContextTakeover)p.client_no_context_takeover=!0;if(this._options.serverMaxWindowBits)p.server_max_window_bits=this._options.serverMaxWindowBits;if(this._options.clientMaxWindowBits)p.client_max_window_bits=this._options.clientMaxWindowBits;else if(this._options.clientMaxWindowBits==null)p.client_max_window_bits=!0;return p}accept(p){return p=this.normalizeParams(p),this.params=this._isServer?this.acceptAsServer(p):this.acceptAsClient(p),this.params}cleanup(){if(this._inflate)this._inflate.close(),this._inflate=null;if(this._deflate){let p=this._deflate[y];if(this._deflate.close(),this._deflate=null,p)p(Error("The deflate stream was closed while data was being processed"))}}acceptAsServer(p){let T=this._options,D=p.find((f)=>{if(T.serverNoContextTakeover===!1&&f.server_no_context_takeover||f.server_max_window_bits&&(T.serverMaxWindowBits===!1||typeof T.serverMaxWindowBits==="number"&&T.serverMaxWindowBits>f.server_max_window_bits)||typeof T.clientMaxWindowBits==="number"&&!f.client_max_window_bits)return!1;return!0});if(!D)throw Error("None of the extension offers can be accepted");if(T.serverNoContextTakeover)D.server_no_context_takeover=!0;if(T.clientNoContextTakeover)D.client_no_context_takeover=!0;if(typeof T.serverMaxWindowBits==="number")D.server_max_window_bits=T.serverMaxWindowBits;if(typeof T.clientMaxWindowBits==="number")D.client_max_window_bits=T.clientMaxWindowBits;else if(D.client_max_window_bits===!0||T.clientMaxWindowBits===!1)delete D.client_max_window_bits;return D}acceptAsClient(p){let T=p[0];if(this._options.clientNoContextTakeover===!1&&T.client_no_context_takeover)throw Error('Unexpected parameter "client_no_context_takeover"');if(!T.client_max_window_bits){if(typeof this._options.clientMaxWindowBits==="number")T.client_max_window_bits=this._options.clientMaxWindowBits}else if(this._options.clientMaxWindowBits===!1||typeof this._options.clientMaxWindowBits==="number"&&T.client_max_window_bits>this._options.clientMaxWindowBits)throw Error('Unexpected or invalid parameter "client_max_window_bits"');return T}normalizeParams(p){return p.forEach((T)=>{Object.keys(T).forEach((D)=>{let f=T[D];if(f.length>1)throw Error(`Parameter "${D}" must have only a single value`);if(f=f[0],D==="client_max_window_bits"){if(f!==!0){let a=+f;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${D}": ${f}`);f=a}else if(!this._isServer)throw TypeError(`Invalid value for parameter "${D}": ${f}`)}else if(D==="server_max_window_bits"){let a=+f;if(!Number.isInteger(a)||a<8||a>15)throw TypeError(`Invalid value for parameter "${D}": ${f}`);f=a}else if(D==="client_no_context_takeover"||D==="server_no_context_takeover"){if(f!==!0)throw TypeError(`Invalid value for parameter "${D}": ${f}`)}else throw Error(`Unknown parameter "${D}"`);T[D]=f})}),p}decompress(p,T,D){l.add((f)=>{this._decompress(p,T,(a,$)=>{f(),D(a,$)})})}compress(p,T,D){l.add((f)=>{this._compress(p,T,(a,$)=>{f(),D(a,$)})})}_decompress(p,T,D){let f=this._isServer?"client":"server";if(!this._inflate){let a=`${f}_max_window_bits`,$=typeof this.params[a]!=="number"?t.Z_DEFAULT_WINDOWBITS:this.params[a];this._inflate=t.createInflateRaw({...this._options.zlibInflateOptions,windowBits:$}),this._inflate[r]=this,this._inflate[n]=0,this._inflate[o]=[],this._inflate.on("error",b),this._inflate.on("data",E)}if(this._inflate[y]=D,this._inflate.write(p),T)this._inflate.write(A);this._inflate.flush(()=>{let a=this._inflate[B];if(a){this._inflate.close(),this._inflate=null,D(a);return}let $=S.concat(this._inflate[o],this._inflate[n]);if(this._inflate._readableState.endEmitted)this._inflate.close(),this._inflate=null;else if(this._inflate[n]=0,this._inflate[o]=[],T&&this.params[`${f}_no_context_takeover`])this._inflate.reset();D(null,$)})}_compress(p,T,D){let f=this._isServer?"server":"client";if(!this._deflate){let a=`${f}_max_window_bits`,$=typeof this.params[a]!=="number"?t.Z_DEFAULT_WINDOWBITS:this.params[a];this._deflate=t.createDeflateRaw({...this._options.zlibDeflateOptions,windowBits:$}),this._deflate[n]=0,this._deflate[o]=[],this._deflate.on("data",O)}this._deflate[y]=D,this._deflate.write(p),this._deflate.flush(t.Z_SYNC_FLUSH,()=>{if(!this._deflate)return;let a=S.concat(this._deflate[o],this._deflate[n]);if(T)a=new C(a.buffer,a.byteOffset,a.length-4);if(this._deflate[y]=null,this._deflate[n]=0,this._deflate[o]=[],T&&this.params[`${f}_no_context_takeover`])this._deflate.reset();D(null,a)})}}e.exports=v;function O(p){this[o].push(p),this[n]+=p.length}function E(p){if(this[n]+=p.length,this[r]._maxPayload<1||this[n]<=this[r]._maxPayload){this[o].push(p);return}this[B]=RangeError("Max payload size exceeded"),this[B].code="WS_ERR_UNSUPPORTED_MESSAGE_LENGTH",this[B][s]=1009,this.removeListener("data",E),this.reset()}function b(p){if(this[r]._inflate=null,this[B]){this[y](this[B]);return}p[s]=1007,this[y](p)}}),F_=x((_,e)=>{var{isUtf8:t}=X("buffer"),{hasBlob:S}=e_(),i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1,1,1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,0];function s(r){return r>=1000&&r<=1014&&r!==1004&&r!==1005&&r!==1006||r>=3000&&r<=4999}function C(r){let n=r.length,y=0;while(y<n)if((r[y]&128)===0)y++;else if((r[y]&224)===192){if(y+1===n||(r[y+1]&192)!==128||(r[y]&254)===192)return!1;y+=2}else if((r[y]&240)===224){if(y+2>=n||(r[y+1]&192)!==128||(r[y+2]&192)!==128||r[y]===224&&(r[y+1]&224)===128||r[y]===237&&(r[y+1]&224)===160)return!1;y+=3}else if((r[y]&248)===240){if(y+3>=n||(r[y+1]&192)!==128||(r[y+2]&192)!==128||(r[y+3]&192)!==128||r[y]===240&&(r[y+1]&240)===128||r[y]===244&&r[y+1]>143||r[y]>244)return!1;y+=4}else return!1;return!0}function A(r){return S&&typeof r==="object"&&typeof r.arrayBuffer==="function"&&typeof r.type==="string"&&typeof r.stream==="function"&&(r[Symbol.toStringTag]==="Blob"||r[Symbol.toStringTag]==="File")}if(e.exports={isBlob:A,isValidStatusCode:s,isValidUTF8:C,tokenChars:i},t)e.exports.isValidUTF8=function(r){return r.length<24?C(r):t(r)};else if(!process.env.WS_NO_UTF_8_VALIDATE)try{let r=(()=>{throw Error("Cannot require module utf-8-validate")})();e.exports.isValidUTF8=function(n){return n.length<32?C(n):r(n)}}catch(r){}}),Qe=x((_,e)=>{var{Writable:t}=X("stream"),S=E_(),{BINARY_TYPES:i,EMPTY_BUFFER:s,kStatusCode:C,kWebSocket:A}=e_(),{concat:r,toArrayBuffer:n,unmask:y}=N_(),{isValidStatusCode:o,isValidUTF8:B}=F_(),l=Buffer[Symbol.species],v=0,O=1,E=2,b=3,p=4,T=5,D=6;class f extends t{constructor(a={}){super();this._allowSynchronousEvents=a.allowSynchronousEvents!==void 0?a.allowSynchronousEvents:!0,this._binaryType=a.binaryType||i[0],this._extensions=a.extensions||{},this._isServer=!!a.isServer,this._maxPayload=a.maxPayload|0,this._skipUTF8Validation=!!a.skipUTF8Validation,this[A]=void 0,this._bufferedBytes=0,this._buffers=[],this._compressed=!1,this._payloadLength=0,this._mask=void 0,this._fragmented=0,this._masked=!1,this._fin=!1,this._opcode=0,this._totalPayloadLength=0,this._messageLength=0,this._fragments=[],this._errored=!1,this._loop=!1,this._state=v}_write(a,$,R){if(this._opcode===8&&this._state==v)return R();this._bufferedBytes+=a.length,this._buffers.push(a),this.startLoop(R)}consume(a){if(this._bufferedBytes-=a,a===this._buffers[0].length)return this._buffers.shift();if(a<this._buffers[0].length){let R=this._buffers[0];return this._buffers[0]=new l(R.buffer,R.byteOffset+a,R.length-a),new l(R.buffer,R.byteOffset,a)}let $=Buffer.allocUnsafe(a);do{let R=this._buffers[0],F=$.length-a;if(a>=R.length)$.set(this._buffers.shift(),F);else $.set(new Uint8Array(R.buffer,R.byteOffset,a),F),this._buffers[0]=new l(R.buffer,R.byteOffset+a,R.length-a);a-=R.length}while(a>0);return $}startLoop(a){this._loop=!0;do switch(this._state){case v:this.getInfo(a);break;case O:this.getPayloadLength16(a);break;case E:this.getPayloadLength64(a);break;case b:this.getMask();break;case p:this.getData(a);break;case T:case D:this._loop=!1;return}while(this._loop);if(!this._errored)a()}getInfo(a){if(this._bufferedBytes<2){this._loop=!1;return}let $=this.consume(2);if(($[0]&48)!==0){let F=this.createError(RangeError,"RSV2 and RSV3 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_2_3");a(F);return}let R=($[0]&64)===64;if(R&&!this._extensions[S.extensionName]){let F=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(F);return}if(this._fin=($[0]&128)===128,this._opcode=$[0]&15,this._payloadLength=$[1]&127,this._opcode===0){if(R){let F=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(F);return}if(!this._fragmented){let F=this.createError(RangeError,"invalid opcode 0",!0,1002,"WS_ERR_INVALID_OPCODE");a(F);return}this._opcode=this._fragmented}else if(this._opcode===1||this._opcode===2){if(this._fragmented){let F=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");a(F);return}this._compressed=R}else if(this._opcode>7&&this._opcode<11){if(!this._fin){let F=this.createError(RangeError,"FIN must be set",!0,1002,"WS_ERR_EXPECTED_FIN");a(F);return}if(R){let F=this.createError(RangeError,"RSV1 must be clear",!0,1002,"WS_ERR_UNEXPECTED_RSV_1");a(F);return}if(this._payloadLength>125||this._opcode===8&&this._payloadLength===1){let F=this.createError(RangeError,`invalid payload length ${this._payloadLength}`,!0,1002,"WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH");a(F);return}}else{let F=this.createError(RangeError,`invalid opcode ${this._opcode}`,!0,1002,"WS_ERR_INVALID_OPCODE");a(F);return}if(!this._fin&&!this._fragmented)this._fragmented=this._opcode;if(this._masked=($[1]&128)===128,this._isServer){if(!this._masked){let F=this.createError(RangeError,"MASK must be set",!0,1002,"WS_ERR_EXPECTED_MASK");a(F);return}}else if(this._masked){let F=this.createError(RangeError,"MASK must be clear",!0,1002,"WS_ERR_UNEXPECTED_MASK");a(F);return}if(this._payloadLength===126)this._state=O;else if(this._payloadLength===127)this._state=E;else this.haveLength(a)}getPayloadLength16(a){if(this._bufferedBytes<2){this._loop=!1;return}this._payloadLength=this.consume(2).readUInt16BE(0),this.haveLength(a)}getPayloadLength64(a){if(this._bufferedBytes<8){this._loop=!1;return}let $=this.consume(8),R=$.readUInt32BE(0);if(R>Math.pow(2,21)-1){let F=this.createError(RangeError,"Unsupported WebSocket frame: payload length > 2^53 - 1",!1,1009,"WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH");a(F);return}this._payloadLength=R*Math.pow(2,32)+$.readUInt32BE(4),this.haveLength(a)}haveLength(a){if(this._payloadLength&&this._opcode<8){if(this._totalPayloadLength+=this._payloadLength,this._totalPayloadLength>this._maxPayload&&this._maxPayload>0){let $=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");a($);return}}if(this._masked)this._state=b;else this._state=p}getMask(){if(this._bufferedBytes<4){this._loop=!1;return}this._mask=this.consume(4),this._state=p}getData(a){let $=s;if(this._payloadLength){if(this._bufferedBytes<this._payloadLength){this._loop=!1;return}if($=this.consume(this._payloadLength),this._masked&&(this._mask[0]|this._mask[1]|this._mask[2]|this._mask[3])!==0)y($,this._mask)}if(this._opcode>7){this.controlMessage($,a);return}if(this._compressed){this._state=T,this.decompress($,a);return}if($.length)this._messageLength=this._totalPayloadLength,this._fragments.push($);this.dataMessage(a)}decompress(a,$){this._extensions[S.extensionName].decompress(a,this._fin,(F,d)=>{if(F)return $(F);if(d.length){if(this._messageLength+=d.length,this._messageLength>this._maxPayload&&this._maxPayload>0){let g=this.createError(RangeError,"Max payload size exceeded",!1,1009,"WS_ERR_UNSUPPORTED_MESSAGE_LENGTH");$(g);return}this._fragments.push(d)}if(this.dataMessage($),this._state===v)this.startLoop($)})}dataMessage(a){if(!this._fin){this._state=v;return}let $=this._messageLength,R=this._fragments;if(this._totalPayloadLength=0,this._messageLength=0,this._fragmented=0,this._fragments=[],this._opcode===2){let F;if(this._binaryType==="nodebuffer")F=r(R,$);else if(this._binaryType==="arraybuffer")F=n(r(R,$));else if(this._binaryType==="blob")F=new Blob(R);else F=R;if(this._allowSynchronousEvents)this.emit("message",F,!0),this._state=v;else this._state=D,setImmediate(()=>{this.emit("message",F,!0),this._state=v,this.startLoop(a)})}else{let F=r(R,$);if(!this._skipUTF8Validation&&!B(F)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");a(d);return}if(this._state===T||this._allowSynchronousEvents)this.emit("message",F,!1),this._state=v;else this._state=D,setImmediate(()=>{this.emit("message",F,!1),this._state=v,this.startLoop(a)})}}controlMessage(a,$){if(this._opcode===8){if(a.length===0)this._loop=!1,this.emit("conclude",1005,s),this.end();else{let R=a.readUInt16BE(0);if(!o(R)){let d=this.createError(RangeError,`invalid status code ${R}`,!0,1002,"WS_ERR_INVALID_CLOSE_CODE");$(d);return}let F=new l(a.buffer,a.byteOffset+2,a.length-2);if(!this._skipUTF8Validation&&!B(F)){let d=this.createError(Error,"invalid UTF-8 sequence",!0,1007,"WS_ERR_INVALID_UTF8");$(d);return}this._loop=!1,this.emit("conclude",R,F),this.end()}this._state=v;return}if(this._allowSynchronousEvents)this.emit(this._opcode===9?"ping":"pong",a),this._state=v;else this._state=D,setImmediate(()=>{this.emit(this._opcode===9?"ping":"pong",a),this._state=v,this.startLoop($)})}createError(a,$,R,F,d){this._loop=!1,this._errored=!0;let g=new a(R?`Invalid WebSocket frame: ${$}`:$);return Error.captureStackTrace(g,this.createError),g.code=d,g[C]=F,g}}e.exports=f}),Ye=x((_,e)=>{var{Duplex:t}=X("stream"),{randomFillSync:S}=X("crypto"),i=E_(),{EMPTY_BUFFER:s,kWebSocket:C,NOOP:A}=e_(),{isBlob:r,isValidStatusCode:n}=F_(),{mask:y,toBuffer:o}=N_(),B=Symbol("kByteLength"),l=Buffer.alloc(4),v=8192,O,E=v,b=0,p=1,T=2;class D{constructor($,R,F){if(this._extensions=R||{},F)this._generateMask=F,this._maskBuffer=Buffer.alloc(4);this._socket=$,this._firstFragment=!0,this._compress=!1,this._bufferedBytes=0,this._queue=[],this._state=b,this.onerror=A,this[C]=void 0}static frame($,R){let F,d=!1,g=2,V=!1;if(R.mask){if(F=R.maskBuffer||l,R.generateMask)R.generateMask(F);else{if(E===v){if(O===void 0)O=Buffer.alloc(v);S(O,0,v),E=0}F[0]=O[E++],F[1]=O[E++],F[2]=O[E++],F[3]=O[E++]}V=(F[0]|F[1]|F[2]|F[3])===0,g=6}let m;if(typeof $==="string")if((!R.mask||V)&&R[B]!==void 0)m=R[B];else $=Buffer.from($),m=$.length;else m=$.length,d=R.mask&&R.readOnly&&!V;let I=m;if(m>=65536)g+=8,I=127;else if(m>125)g+=2,I=126;let L=Buffer.allocUnsafe(d?m+g:g);if(L[0]=R.fin?R.opcode|128:R.opcode,R.rsv1)L[0]|=64;if(L[1]=I,I===126)L.writeUInt16BE(m,2);else if(I===127)L[2]=L[3]=0,L.writeUIntBE(m,4,6);if(!R.mask)return[L,$];if(L[1]|=128,L[g-4]=F[0],L[g-3]=F[1],L[g-2]=F[2],L[g-1]=F[3],V)return[L,$];if(d)return y($,F,L,g,m),[L];return y($,F,$,0,m),[L,$]}close($,R,F,d){let g;if($===void 0)g=s;else if(typeof $!=="number"||!n($))throw TypeError("First argument must be a valid error code number");else if(R===void 0||!R.length)g=Buffer.allocUnsafe(2),g.writeUInt16BE($,0);else{let m=Buffer.byteLength(R);if(m>123)throw RangeError("The message must not be greater than 123 bytes");if(g=Buffer.allocUnsafe(2+m),g.writeUInt16BE($,0),typeof R==="string")g.write(R,2);else g.set(R,2)}let V={[B]:g.length,fin:!0,generateMask:this._generateMask,mask:F,maskBuffer:this._maskBuffer,opcode:8,readOnly:!1,rsv1:!1};if(this._state!==b)this.enqueue([this.dispatch,g,!1,V,d]);else this.sendFrame(D.frame(g,V),d)}ping($,R,F){let d,g;if(typeof $==="string")d=Buffer.byteLength($),g=!1;else if(r($))d=$.size,g=!1;else $=o($),d=$.length,g=o.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[B]:d,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:9,readOnly:g,rsv1:!1};if(r($))if(this._state!==b)this.enqueue([this.getBlobData,$,!1,V,F]);else this.getBlobData($,!1,V,F);else if(this._state!==b)this.enqueue([this.dispatch,$,!1,V,F]);else this.sendFrame(D.frame($,V),F)}pong($,R,F){let d,g;if(typeof $==="string")d=Buffer.byteLength($),g=!1;else if(r($))d=$.size,g=!1;else $=o($),d=$.length,g=o.readOnly;if(d>125)throw RangeError("The data size must not be greater than 125 bytes");let V={[B]:d,fin:!0,generateMask:this._generateMask,mask:R,maskBuffer:this._maskBuffer,opcode:10,readOnly:g,rsv1:!1};if(r($))if(this._state!==b)this.enqueue([this.getBlobData,$,!1,V,F]);else this.getBlobData($,!1,V,F);else if(this._state!==b)this.enqueue([this.dispatch,$,!1,V,F]);else this.sendFrame(D.frame($,V),F)}send($,R,F){let d=this._extensions[i.extensionName],g=R.binary?2:1,V=R.compress,m,I;if(typeof $==="string")m=Buffer.byteLength($),I=!1;else if(r($))m=$.size,I=!1;else $=o($),m=$.length,I=o.readOnly;if(this._firstFragment){if(this._firstFragment=!1,V&&d&&d.params[d._isServer?"server_no_context_takeover":"client_no_context_takeover"])V=m>=d._threshold;this._compress=V}else V=!1,g=0;if(R.fin)this._firstFragment=!0;let L={[B]:m,fin:R.fin,generateMask:this._generateMask,mask:R.mask,maskBuffer:this._maskBuffer,opcode:g,readOnly:I,rsv1:V};if(r($))if(this._state!==b)this.enqueue([this.getBlobData,$,this._compress,L,F]);else this.getBlobData($,this._compress,L,F);else if(this._state!==b)this.enqueue([this.dispatch,$,this._compress,L,F]);else this.dispatch($,this._compress,L,F)}getBlobData($,R,F,d){this._bufferedBytes+=F[B],this._state=T,$.arrayBuffer().then((g)=>{if(this._socket.destroyed){let m=Error("The socket was closed while the blob was being read");process.nextTick(f,this,m,d);return}this._bufferedBytes-=F[B];let V=o(g);if(!R)this._state=b,this.sendFrame(D.frame(V,F),d),this.dequeue();else this.dispatch(V,R,F,d)}).catch((g)=>{process.nextTick(a,this,g,d)})}dispatch($,R,F,d){if(!R){this.sendFrame(D.frame($,F),d);return}let g=this._extensions[i.extensionName];this._bufferedBytes+=F[B],this._state=p,g.compress($,F.fin,(V,m)=>{if(this._socket.destroyed){let I=Error("The socket was closed while data was being compressed");f(this,I,d);return}this._bufferedBytes-=F[B],this._state=b,F.readOnly=!1,this.sendFrame(D.frame(m,F),d),this.dequeue()})}dequeue(){while(this._state===b&&this._queue.length){let $=this._queue.shift();this._bufferedBytes-=$[3][B],Reflect.apply($[0],this,$.slice(1))}}enqueue($){this._bufferedBytes+=$[3][B],this._queue.push($)}sendFrame($,R){if($.length===2)this._socket.cork(),this._socket.write($[0]),this._socket.write($[1],R),this._socket.uncork();else this._socket.write($[0],R)}}e.exports=D;function f($,R,F){if(typeof F==="function")F(R);for(let d=0;d<$._queue.length;d++){let g=$._queue[d],V=g[g.length-1];if(typeof V==="function")V(R)}}function a($,R,F){f($,R,F),$.onerror(R)}}),GS=x((_,e)=>{var{kForOnEventAttribute:t,kListener:S}=e_(),i=Symbol("kCode"),s=Symbol("kData"),C=Symbol("kError"),A=Symbol("kMessage"),r=Symbol("kReason"),n=Symbol("kTarget"),y=Symbol("kType"),o=Symbol("kWasClean");class B{constructor(p){this[n]=null,this[y]=p}get target(){return this[n]}get type(){return this[y]}}Object.defineProperty(B.prototype,"target",{enumerable:!0}),Object.defineProperty(B.prototype,"type",{enumerable:!0});class l extends B{constructor(p,T={}){super(p);this[i]=T.code===void 0?0:T.code,this[r]=T.reason===void 0?"":T.reason,this[o]=T.wasClean===void 0?!1:T.wasClean}get code(){return this[i]}get reason(){return this[r]}get wasClean(){return this[o]}}Object.defineProperty(l.prototype,"code",{enumerable:!0}),Object.defineProperty(l.prototype,"reason",{enumerable:!0}),Object.defineProperty(l.prototype,"wasClean",{enumerable:!0});class v extends B{constructor(p,T={}){super(p);this[C]=T.error===void 0?null:T.error,this[A]=T.message===void 0?"":T.message}get error(){return this[C]}get message(){return this[A]}}Object.defineProperty(v.prototype,"error",{enumerable:!0}),Object.defineProperty(v.prototype,"message",{enumerable:!0});class O extends B{constructor(p,T={}){super(p);this[s]=T.data===void 0?null:T.data}get data(){return this[s]}}Object.defineProperty(O.prototype,"data",{enumerable:!0});var E={addEventListener(p,T,D={}){for(let a of this.listeners(p))if(!D[t]&&a[S]===T&&!a[t])return;let f;if(p==="message")f=function($,R){let F=new O("message",{data:R?$:$.toString()});F[n]=this,b(T,this,F)};else if(p==="close")f=function($,R){let F=new l("close",{code:$,reason:R.toString(),wasClean:this._closeFrameReceived&&this._closeFrameSent});F[n]=this,b(T,this,F)};else if(p==="error")f=function($){let R=new v("error",{error:$,message:$.message});R[n]=this,b(T,this,R)};else if(p==="open")f=function(){let $=new B("open");$[n]=this,b(T,this,$)};else return;if(f[t]=!!D[t],f[S]=T,D.once)this.once(p,f);else this.on(p,f)},removeEventListener(p,T){for(let D of this.listeners(p))if(D[S]===T&&!D[t]){this.removeListener(p,D);break}}};e.exports={CloseEvent:l,ErrorEvent:v,Event:B,EventTarget:E,MessageEvent:O};function b(p,T,D){if(typeof p==="object"&&p.handleEvent)p.handleEvent.call(p,D);else p.call(T,D)}}),Ae=x((_,e)=>{var{tokenChars:t}=F_();function S(C,A,r){if(C[A]===void 0)C[A]=[r];else C[A].push(r)}function i(C){let A=Object.create(null),r=Object.create(null),n=!1,y=!1,o=!1,B,l,v=-1,O=-1,E=-1,b=0;for(;b<C.length;b++)if(O=C.charCodeAt(b),B===void 0)if(E===-1&&t[O]===1){if(v===-1)v=b}else if(b!==0&&(O===32||O===9)){if(E===-1&&v!==-1)E=b}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${b}`);if(E===-1)E=b;let T=C.slice(v,E);if(O===44)S(A,T,r),r=Object.create(null);else B=T;v=E=-1}else throw SyntaxError(`Unexpected character at index ${b}`);else if(l===void 0)if(E===-1&&t[O]===1){if(v===-1)v=b}else if(O===32||O===9){if(E===-1&&v!==-1)E=b}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${b}`);if(E===-1)E=b;if(S(r,C.slice(v,E),!0),O===44)S(A,B,r),r=Object.create(null),B=void 0;v=E=-1}else if(O===61&&v!==-1&&E===-1)l=C.slice(v,b),v=E=-1;else throw SyntaxError(`Unexpected character at index ${b}`);else if(y){if(t[O]!==1)throw SyntaxError(`Unexpected character at index ${b}`);if(v===-1)v=b;else if(!n)n=!0;y=!1}else if(o)if(t[O]===1){if(v===-1)v=b}else if(O===34&&v!==-1)o=!1,E=b;else if(O===92)y=!0;else throw SyntaxError(`Unexpected character at index ${b}`);else if(O===34&&C.charCodeAt(b-1)===61)o=!0;else if(E===-1&&t[O]===1){if(v===-1)v=b}else if(v!==-1&&(O===32||O===9)){if(E===-1)E=b}else if(O===59||O===44){if(v===-1)throw SyntaxError(`Unexpected character at index ${b}`);if(E===-1)E=b;let T=C.slice(v,E);if(n)T=T.replace(/\\/g,""),n=!1;if(S(r,l,T),O===44)S(A,B,r),r=Object.create(null),B=void 0;l=void 0,v=E=-1}else throw SyntaxError(`Unexpected character at index ${b}`);if(v===-1||o||O===32||O===9)throw SyntaxError("Unexpected end of input");if(E===-1)E=b;let p=C.slice(v,E);if(B===void 0)S(A,p,r);else{if(l===void 0)S(r,p,!0);else if(n)S(r,l,p.replace(/\\/g,""));else S(r,l,p);S(A,B,r)}return A}function s(C){return Object.keys(C).map((A)=>{let r=C[A];if(!Array.isArray(r))r=[r];return r.map((n)=>{return[A].concat(Object.keys(n).map((y)=>{let o=n[y];if(!Array.isArray(o))o=[o];return o.map((B)=>B===!0?y:`${y}=${B}`).join("; ")})).join("; ")}).join(", ")}).join(", ")}e.exports={format:s,parse:i}}),oe=x((_,e)=>{var t=X("events"),S=X("https"),i=X("http"),s=X("net"),C=X("tls"),{randomBytes:A,createHash:r}=X("crypto"),{Duplex:n,Readable:y}=X("stream"),{URL:o}=X("url"),B=E_(),l=Qe(),v=Ye(),{isBlob:O}=F_(),{BINARY_TYPES:E,CLOSE_TIMEOUT:b,EMPTY_BUFFER:p,GUID:T,kForOnEventAttribute:D,kListener:f,kStatusCode:a,kWebSocket:$,NOOP:R}=e_(),{EventTarget:{addEventListener:F,removeEventListener:d}}=GS(),{format:g,parse:V}=Ae(),{toBuffer:m}=N_(),I=Symbol("kAborted"),L=[8,13],U=["CONNECTING","OPEN","CLOSING","CLOSED"],J=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class w extends t{constructor(c,u,H){super();if(this._binaryType=E[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=p,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=w.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,c!==null){if(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,u===void 0)u=[];else if(!Array.isArray(u))if(typeof u==="object"&&u!==null)H=u,u=[];else u=[u];Q(this,c,u,H)}else this._autoPong=H.autoPong,this._closeTimeout=H.closeTimeout,this._isServer=!0}get binaryType(){return this._binaryType}set binaryType(c){if(!E.includes(c))return;if(this._binaryType=c,this._receiver)this._receiver._binaryType=c}get bufferedAmount(){if(!this._socket)return this._bufferedAmount;return this._socket._writableState.length+this._sender._bufferedBytes}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(c,u,H){let W=new l({allowSynchronousEvents:H.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:H.maxPayload,skipUTF8Validation:H.skipUTF8Validation}),h=new v(c,this._extensions,H.generateMask);if(this._receiver=W,this._sender=h,this._socket=c,W[$]=this,h[$]=this,c[$]=this,W.on("conclude",tS),W.on("drain",SS),W.on("error",sS),W.on("message",iS),W.on("ping",CS),W.on("pong",rS),h.onerror=$S,c.setTimeout)c.setTimeout(0);if(c.setNoDelay)c.setNoDelay();if(u.length>0)c.unshift(u);c.on("close",we),c.on("data",O_),c.on("end",he),c.on("error",He),this._readyState=w.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=w.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}if(this._extensions[B.extensionName])this._extensions[B.extensionName].cleanup();this._receiver.removeAllListeners(),this._readyState=w.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(c,u){if(this.readyState===w.CLOSED)return;if(this.readyState===w.CONNECTING){K(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===w.CLOSING){if(this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted))this._socket.end();return}this._readyState=w.CLOSING,this._sender.close(c,u,!this._isServer,(H)=>{if(H)return;if(this._closeFrameSent=!0,this._closeFrameReceived||this._receiver._writableState.errorEmitted)this._socket.end()}),ge(this)}pause(){if(this.readyState===w.CONNECTING||this.readyState===w.CLOSED)return;this._paused=!0,this._socket.pause()}ping(c,u,H){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")H=c,c=u=void 0;else if(typeof u==="function")H=u,u=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==w.OPEN){x_(this,c,H);return}if(u===void 0)u=!this._isServer;this._sender.ping(c||p,u,H)}pong(c,u,H){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof c==="function")H=c,c=u=void 0;else if(typeof u==="function")H=u,u=void 0;if(typeof c==="number")c=c.toString();if(this.readyState!==w.OPEN){x_(this,c,H);return}if(u===void 0)u=!this._isServer;this._sender.pong(c||p,u,H)}resume(){if(this.readyState===w.CONNECTING||this.readyState===w.CLOSED)return;if(this._paused=!1,!this._receiver._writableState.needDrain)this._socket.resume()}send(c,u,H){if(this.readyState===w.CONNECTING)throw Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof u==="function")H=u,u={};if(typeof c==="number")c=c.toString();if(this.readyState!==w.OPEN){x_(this,c,H);return}let W={binary:typeof c!=="string",mask:!this._isServer,compress:!0,fin:!0,...u};if(!this._extensions[B.extensionName])W.compress=!1;this._sender.send(c||p,W,H)}terminate(){if(this.readyState===w.CLOSED)return;if(this.readyState===w.CONNECTING){K(this,this._req,"WebSocket was closed before the connection was established");return}if(this._socket)this._readyState=w.CLOSING,this._socket.destroy()}}Object.defineProperty(w,"CONNECTING",{enumerable:!0,value:U.indexOf("CONNECTING")}),Object.defineProperty(w.prototype,"CONNECTING",{enumerable:!0,value:U.indexOf("CONNECTING")}),Object.defineProperty(w,"OPEN",{enumerable:!0,value:U.indexOf("OPEN")}),Object.defineProperty(w.prototype,"OPEN",{enumerable:!0,value:U.indexOf("OPEN")}),Object.defineProperty(w,"CLOSING",{enumerable:!0,value:U.indexOf("CLOSING")}),Object.defineProperty(w.prototype,"CLOSING",{enumerable:!0,value:U.indexOf("CLOSING")}),Object.defineProperty(w,"CLOSED",{enumerable:!0,value:U.indexOf("CLOSED")}),Object.defineProperty(w.prototype,"CLOSED",{enumerable:!0,value:U.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((c)=>{Object.defineProperty(w.prototype,c,{enumerable:!0})}),["open","error","close","message"].forEach((c)=>{Object.defineProperty(w.prototype,`on${c}`,{enumerable:!0,get(){for(let u of this.listeners(c))if(u[D])return u[f];return null},set(u){for(let H of this.listeners(c))if(H[D]){this.removeListener(c,H);break}if(typeof u!=="function")return;this.addEventListener(c,u,{[D]:!0})}})}),w.prototype.addEventListener=F,w.prototype.removeEventListener=d,e.exports=w;function Q(c,u,H,W){let h={allowSynchronousEvents:!0,autoPong:!0,closeTimeout:b,protocolVersion:L[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...W,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(c._autoPong=h.autoPong,c._closeTimeout=h.closeTimeout,!L.includes(h.protocolVersion))throw RangeError(`Unsupported protocol version: ${h.protocolVersion} (supported versions: ${L.join(", ")})`);let M;if(u instanceof o)M=u;else try{M=new o(u)}catch{throw SyntaxError(`Invalid URL: ${u}`)}if(M.protocol==="http:")M.protocol="ws:";else if(M.protocol==="https:")M.protocol="wss:";c._url=M.href;let A_=M.protocol==="wss:",o_=M.protocol==="ws+unix:",R_;if(M.protocol!=="ws:"&&!A_&&!o_)R_=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`;else if(o_&&!M.pathname)R_="The URL's pathname is empty";else if(M.hash)R_="The URL contains a fragment identifier";if(R_){let P=SyntaxError(R_);if(c._redirects===0)throw P;else{t_(c,P);return}}let Ne=A_?443:80,Ve=A(16).toString("base64"),me=A_?S.request:i.request,B_=new Set,D_;if(h.createConnection=h.createConnection||(A_?K_:k_),h.defaultPort=h.defaultPort||Ne,h.port=M.port||Ne,h.host=M.hostname.startsWith("[")?M.hostname.slice(1,-1):M.hostname,h.headers={...h.headers,"Sec-WebSocket-Version":h.protocolVersion,"Sec-WebSocket-Key":Ve,Connection:"Upgrade",Upgrade:"websocket"},h.path=M.pathname+M.search,h.timeout=h.handshakeTimeout,h.perMessageDeflate)D_=new B({...h.perMessageDeflate,isServer:!1,maxPayload:h.maxPayload}),h.headers["Sec-WebSocket-Extensions"]=g({[B.extensionName]:D_.offer()});if(H.length){for(let P of H){if(typeof P!=="string"||!J.test(P)||B_.has(P))throw SyntaxError("An invalid or duplicated subprotocol was specified");B_.add(P)}h.headers["Sec-WebSocket-Protocol"]=H.join(",")}if(h.origin)if(h.protocolVersion<13)h.headers["Sec-WebSocket-Origin"]=h.origin;else h.headers.Origin=h.origin;if(M.username||M.password)h.auth=`${M.username}:${M.password}`;if(o_){let P=h.path.split(":");h.socketPath=P[0],h.path=P[1]}let q;if(h.followRedirects){if(c._redirects===0){c._originalIpc=o_,c._originalSecure=A_,c._originalHostOrSocketPath=o_?h.socketPath:M.host;let P=W&&W.headers;if(W={...W,headers:{}},P)for(let[k,n_]of Object.entries(P))W.headers[k.toLowerCase()]=n_}else if(c.listenerCount("redirect")===0){let P=o_?c._originalIpc?h.socketPath===c._originalHostOrSocketPath:!1:c._originalIpc?!1:M.host===c._originalHostOrSocketPath;if(!P||c._originalSecure&&!A_){if(delete h.headers.authorization,delete h.headers.cookie,!P)delete h.headers.host;h.auth=void 0}}if(h.auth&&!W.headers.authorization)W.headers.authorization="Basic "+Buffer.from(h.auth).toString("base64");if(q=c._req=me(h),c._redirects)c.emit("redirect",c.url,q)}else q=c._req=me(h);if(h.timeout)q.on("timeout",()=>{K(c,q,"Opening handshake has timed out")});if(q.on("error",(P)=>{if(q===null||q[I])return;q=c._req=null,t_(c,P)}),q.on("response",(P)=>{let k=P.headers.location,n_=P.statusCode;if(k&&h.followRedirects&&n_>=300&&n_<400){if(++c._redirects>h.maxRedirects){K(c,q,"Maximum redirects exceeded");return}q.abort();let T_;try{T_=new o(k,u)}catch(Le){let y_=SyntaxError(`Invalid URL: ${k}`);t_(c,y_);return}Q(c,T_,H,W)}else if(!c.emit("unexpected-response",q,P))K(c,q,`Unexpected server response: ${P.statusCode}`)}),q.on("upgrade",(P,k,n_)=>{if(c.emit("upgrade",P),c.readyState!==w.CONNECTING)return;q=c._req=null;let T_=P.headers.upgrade;if(T_===void 0||T_.toLowerCase()!=="websocket"){K(c,k,"Invalid Upgrade header");return}let Le=r("sha1").update(Ve+T).digest("base64");if(P.headers["sec-websocket-accept"]!==Le){K(c,k,"Invalid Sec-WebSocket-Accept header");return}let y_=P.headers["sec-websocket-protocol"],f_;if(y_!==void 0){if(!B_.size)f_="Server sent a subprotocol but none was requested";else if(!B_.has(y_))f_="Server sent an invalid subprotocol"}else if(B_.size)f_="Server sent no subprotocol";if(f_){K(c,k,f_);return}if(y_)c._protocol=y_;let We=P.headers["sec-websocket-extensions"];if(We!==void 0){if(!D_){K(c,k,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let z_;try{z_=V(We)}catch(j_){K(c,k,"Invalid Sec-WebSocket-Extensions header");return}let Pe=Object.keys(z_);if(Pe.length!==1||Pe[0]!==B.extensionName){K(c,k,"Server indicated an extension that was not requested");return}try{D_.accept(z_[B.extensionName])}catch(j_){K(c,k,"Invalid Sec-WebSocket-Extensions header");return}c._extensions[B.extensionName]=D_}c.setSocket(k,n_,{allowSynchronousEvents:h.allowSynchronousEvents,generateMask:h.generateMask,maxPayload:h.maxPayload,skipUTF8Validation:h.skipUTF8Validation})}),h.finishRequest)h.finishRequest(q,c);else q.end()}function t_(c,u){c._readyState=w.CLOSING,c._errorEmitted=!0,c.emit("error",u),c.emitClose()}function k_(c){return c.path=c.socketPath,s.connect(c)}function K_(c){if(c.path=void 0,!c.servername&&c.servername!=="")c.servername=s.isIP(c.host)?"":c.host;return C.connect(c)}function K(c,u,H){c._readyState=w.CLOSING;let W=Error(H);if(Error.captureStackTrace(W,K),u.setHeader){if(u[I]=!0,u.abort(),u.socket&&!u.socket.destroyed)u.socket.destroy();process.nextTick(t_,c,W)}else u.destroy(W),u.once("error",c.emit.bind(c,"error")),u.once("close",c.emitClose.bind(c))}function x_(c,u,H){if(u){let W=O(u)?u.size:m(u).length;if(c._socket)c._sender._bufferedBytes+=W;else c._bufferedAmount+=W}if(H){let W=Error(`WebSocket is not open: readyState ${c.readyState} (${U[c.readyState]})`);process.nextTick(H,W)}}function tS(c,u){let H=this[$];if(H._closeFrameReceived=!0,H._closeMessage=u,H._closeCode=c,H._socket[$]===void 0)return;if(H._socket.removeListener("data",O_),process.nextTick(de,H._socket),c===1005)H.close();else H.close(c,u)}function SS(){let c=this[$];if(!c.isPaused)c._socket.resume()}function sS(c){let u=this[$];if(u._socket[$]!==void 0)u._socket.removeListener("data",O_),process.nextTick(de,u._socket),u.close(c[a]);if(!u._errorEmitted)u._errorEmitted=!0,u.emit("error",c)}function Oe(){this[$].emitClose()}function iS(c,u){this[$].emit("message",c,u)}function CS(c){let u=this[$];if(u._autoPong)u.pong(c,!this._isServer,R);u.emit("ping",c)}function rS(c){this[$].emit("pong",c)}function de(c){c.resume()}function $S(c){let u=this[$];if(u.readyState===w.CLOSED)return;if(u.readyState===w.OPEN)u._readyState=w.CLOSING,ge(u);if(this._socket.end(),!u._errorEmitted)u._errorEmitted=!0,u.emit("error",c)}function ge(c){c._closeTimer=setTimeout(c._socket.destroy.bind(c._socket),c._closeTimeout)}function we(){let c=this[$];if(this.removeListener("close",we),this.removeListener("data",O_),this.removeListener("end",he),c._readyState=w.CLOSING,!this._readableState.endEmitted&&!c._closeFrameReceived&&!c._receiver._writableState.errorEmitted&&this._readableState.length!==0){let u=this.read(this._readableState.length);c._receiver.write(u)}if(c._receiver.end(),this[$]=void 0,clearTimeout(c._closeTimer),c._receiver._writableState.finished||c._receiver._writableState.errorEmitted)c.emitClose();else c._receiver.on("error",Oe),c._receiver.on("finish",Oe)}function O_(c){if(!this[$]._receiver.write(c))this.pause()}function he(){let c=this[$];c._readyState=w.CLOSING,c._receiver.end(),this.end()}function He(){let c=this[$];if(this.removeListener("error",He),this.on("error",R),c)c._readyState=w.CLOSING,this.destroy()}}),qS=x((_,e)=>{var t=oe(),{Duplex:S}=X("stream");function i(r){r.emit("close")}function s(){if(!this.destroyed&&this._writableState.finished)this.destroy()}function C(r){if(this.removeListener("error",C),this.destroy(),this.listenerCount("error")===0)this.emit("error",r)}function A(r,n){let y=!0,o=new S({...n,autoDestroy:!1,emitClose:!1,objectMode:!1,writableObjectMode:!1});return r.on("message",function(l,v){let O=!v&&o._readableState.objectMode?l.toString():l;if(!o.push(O))r.pause()}),r.once("error",function(l){if(o.destroyed)return;y=!1,o.destroy(l)}),r.once("close",function(){if(o.destroyed)return;o.push(null)}),o._destroy=function(B,l){if(r.readyState===r.CLOSED){l(B),process.nextTick(i,o);return}let v=!1;if(r.once("error",function(E){v=!0,l(E)}),r.once("close",function(){if(!v)l(B);process.nextTick(i,o)}),y)r.terminate()},o._final=function(B){if(r.readyState===r.CONNECTING){r.once("open",function(){o._final(B)});return}if(r._socket===null)return;if(r._socket._writableState.finished){if(B(),o._readableState.endEmitted)o.destroy()}else r._socket.once("finish",function(){B()}),r.close()},o._read=function(){if(r.isPaused)r.resume()},o._write=function(B,l,v){if(r.readyState===r.CONNECTING){r.once("open",function(){o._write(B,l,v)});return}r.send(B,v)},o.on("end",s),o.on("error",C),o}e.exports=A}),_t=x((_,e)=>{var{tokenChars:t}=F_();function S(i){let s=new Set,C=-1,A=-1,r=0;for(r;r<i.length;r++){let y=i.charCodeAt(r);if(A===-1&&t[y]===1){if(C===-1)C=r}else if(r!==0&&(y===32||y===9)){if(A===-1&&C!==-1)A=r}else if(y===44){if(C===-1)throw SyntaxError(`Unexpected character at index ${r}`);if(A===-1)A=r;let o=i.slice(C,A);if(s.has(o))throw SyntaxError(`The "${o}" subprotocol is duplicated`);s.add(o),C=A=-1}else throw SyntaxError(`Unexpected character at index ${r}`)}if(C===-1||A!==-1)throw SyntaxError("Unexpected end of input");let n=i.slice(C,r);if(s.has(n))throw SyntaxError(`The "${n}" subprotocol is duplicated`);return s.add(n),s}e.exports={parse:S}}),XS=x((_,e)=>{var t=X("events"),S=X("http"),{Duplex:i}=X("stream"),{createHash:s}=X("crypto"),C=Ae(),A=E_(),r=_t(),n=oe(),{CLOSE_TIMEOUT:y,GUID:o,kWebSocket:B}=e_(),l=/^[+/0-9A-Za-z]{22}==$/,v=0,O=1,E=2;class b extends t{constructor($,R){super();if($={allowSynchronousEvents:!0,autoPong:!0,maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!1,handleProtocols:null,clientTracking:!0,closeTimeout:y,verifyClient:null,noServer:!1,backlog:null,server:null,host:null,path:null,port:null,WebSocket:n,...$},$.port==null&&!$.server&&!$.noServer||$.port!=null&&($.server||$.noServer)||$.server&&$.noServer)throw TypeError('One and only one of the "port", "server", or "noServer" options must be specified');if($.port!=null)this._server=S.createServer((F,d)=>{let g=S.STATUS_CODES[426];d.writeHead(426,{"Content-Length":g.length,"Content-Type":"text/plain"}),d.end(g)}),this._server.listen($.port,$.host,$.backlog,R);else if($.server)this._server=$.server;if(this._server){let F=this.emit.bind(this,"connection");this._removeListeners=p(this._server,{listening:this.emit.bind(this,"listening"),error:this.emit.bind(this,"error"),upgrade:(d,g,V)=>{this.handleUpgrade(d,g,V,F)}})}if($.perMessageDeflate===!0)$.perMessageDeflate={};if($.clientTracking)this.clients=new Set,this._shouldEmitClose=!1;this.options=$,this._state=v}address(){if(this.options.noServer)throw Error('The server is operating in "noServer" mode');if(!this._server)return null;return this._server.address()}close($){if(this._state===E){if($)this.once("close",()=>{$(Error("The server is not running"))});process.nextTick(T,this);return}if($)this.once("close",$);if(this._state===O)return;if(this._state=O,this.options.noServer||this.options.server){if(this._server)this._removeListeners(),this._removeListeners=this._server=null;if(this.clients)if(!this.clients.size)process.nextTick(T,this);else this._shouldEmitClose=!0;else process.nextTick(T,this)}else{let R=this._server;this._removeListeners(),this._removeListeners=this._server=null,R.close(()=>{T(this)})}}shouldHandle($){if(this.options.path){let R=$.url.indexOf("?");if((R!==-1?$.url.slice(0,R):$.url)!==this.options.path)return!1}return!0}handleUpgrade($,R,F,d){R.on("error",D);let g=$.headers["sec-websocket-key"],V=$.headers.upgrade,m=+$.headers["sec-websocket-version"];if($.method!=="GET"){a(this,$,R,405,"Invalid HTTP method");return}if(V===void 0||V.toLowerCase()!=="websocket"){a(this,$,R,400,"Invalid Upgrade header");return}if(g===void 0||!l.test(g)){a(this,$,R,400,"Missing or invalid Sec-WebSocket-Key header");return}if(m!==13&&m!==8){a(this,$,R,400,"Missing or invalid Sec-WebSocket-Version header",{"Sec-WebSocket-Version":"13, 8"});return}if(!this.shouldHandle($)){f(R,400);return}let I=$.headers["sec-websocket-protocol"],L=new Set;if(I!==void 0)try{L=r.parse(I)}catch(w){a(this,$,R,400,"Invalid Sec-WebSocket-Protocol header");return}let U=$.headers["sec-websocket-extensions"],J={};if(this.options.perMessageDeflate&&U!==void 0){let w=new A({...this.options.perMessageDeflate,isServer:!0,maxPayload:this.options.maxPayload});try{let Q=C.parse(U);if(Q[A.extensionName])w.accept(Q[A.extensionName]),J[A.extensionName]=w}catch(Q){a(this,$,R,400,"Invalid or unacceptable Sec-WebSocket-Extensions header");return}}if(this.options.verifyClient){let w={origin:$.headers[`${m===8?"sec-websocket-origin":"origin"}`],secure:!!($.socket.authorized||$.socket.encrypted),req:$};if(this.options.verifyClient.length===2){this.options.verifyClient(w,(Q,t_,k_,K_)=>{if(!Q)return f(R,t_||401,k_,K_);this.completeUpgrade(J,g,L,$,R,F,d)});return}if(!this.options.verifyClient(w))return f(R,401)}this.completeUpgrade(J,g,L,$,R,F,d)}completeUpgrade($,R,F,d,g,V,m){if(!g.readable||!g.writable)return g.destroy();if(g[B])throw Error("server.handleUpgrade() was called more than once with the same socket, possibly due to a misconfiguration");if(this._state>v)return f(g,503);let L=["HTTP/1.1 101 Switching Protocols","Upgrade: websocket","Connection: Upgrade",`Sec-WebSocket-Accept: ${s("sha1").update(R+o).digest("base64")}`],U=new this.options.WebSocket(null,void 0,this.options);if(F.size){let J=this.options.handleProtocols?this.options.handleProtocols(F,d):F.values().next().value;if(J)L.push(`Sec-WebSocket-Protocol: ${J}`),U._protocol=J}if($[A.extensionName]){let J=$[A.extensionName].params,w=C.format({[A.extensionName]:[J]});L.push(`Sec-WebSocket-Extensions: ${w}`),U._extensions=$}if(this.emit("headers",L,d),g.write(L.concat(`\r
34
34
  `).join(`\r
35
- `)),g.removeListener("error",R),U.setSocket(g,V,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(U),U.on("close",()=>{if(this.clients.delete(U),this._shouldEmitClose&&!this.clients.size)process.nextTick(D,this)});m(U,d)}}e.exports=l;function F(A,B){for(let T of Object.keys(B))A.on(T,B[T]);return function(){for(let d of Object.keys(B))A.removeListener(d,B[d])}}function D(A){A._state=p,A.emit("close")}function R(){this.destroy()}function E(A,B,T,d){T=T||S.STATUS_CODES[B],d={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(T),...d},A.once("finish",A.destroy),A.end(`HTTP/1.1 ${B} ${S.STATUS_CODES[B]}\r
35
+ `)),g.removeListener("error",D),U.setSocket(g,V,{allowSynchronousEvents:this.options.allowSynchronousEvents,maxPayload:this.options.maxPayload,skipUTF8Validation:this.options.skipUTF8Validation}),this.clients)this.clients.add(U),U.on("close",()=>{if(this.clients.delete(U),this._shouldEmitClose&&!this.clients.size)process.nextTick(T,this)});m(U,d)}}e.exports=b;function p($,R){for(let F of Object.keys(R))$.on(F,R[F]);return function(){for(let d of Object.keys(R))$.removeListener(d,R[d])}}function T($){$._state=E,$.emit("close")}function D(){this.destroy()}function f($,R,F,d){F=F||S.STATUS_CODES[R],d={Connection:"close","Content-Type":"text/html","Content-Length":Buffer.byteLength(F),...d},$.once("finish",$.destroy),$.end(`HTTP/1.1 ${R} ${S.STATUS_CODES[R]}\r
36
36
  `+Object.keys(d).map((g)=>`${g}: ${d[g]}`).join(`\r
37
37
  `)+`\r
38
38
  \r
39
- `+T)}function a(A,B,T,d,g,V){if(A.listenerCount("wsClientError")){let m=Error(g);Error.captureStackTrace(m,a),A.emit("wsClientError",m,T,B)}else E(T,d,g,V)}});TC=__(WS(),1),EC=__(Ae(),1),FC=__(T_(),1),pC=__(Je(),1),lC=__(Qe(),1),vC=__(Ze(),1),_s=__($e(),1),rt=__(PS(),1),ze=_s.default;ys={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},as={"Network.requestWillBeSent":{walltime:"wallTime"}},cs={hasUserGesture:!1,redirectHasExtraInfo:!1},Bs={hasExtraInfo:!1},Rs={encodedDataLength:0,shouldReportCorbBlocking:!1},Ds={initialPriority:"Medium",referrerPolicy:"origin"},fs={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};gs={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Vs={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};Xs=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],Is={"Inspector.enable":{},"Inspector.disable":{},"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};ks={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var ut={};We(ut,{simMiddleware:()=>gi,selectServeSimState:()=>C_});import{readdirSync as Ai,readFileSync as $i,existsSync as oi,unlinkSync as Ft}from"fs";import{execSync as ni,spawn as pt,exec as yi,execFile as ai}from"child_process";import{tmpdir as ci}from"os";import{join as fe}from"path";import{createServer as Bi}from"net";function Fi(_){return!Ei.test(_)}function pi(_,e){if(fi.has(e))return Promise.resolve(!0);return new Promise((t)=>{ai("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(S,i)=>{if(S)return t(!1);let s=i.trim();if(!s)return t(!1);for(let C of Ti)if(oi(fe(s,C)))return t(!0);t(!1)})})}function li(){let _=Date.now();if(L_.booted&&_-L_.at<1500)return L_.booted;try{let e=ni("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(e),S=new Set;for(let i of Object.values(t.devices))for(let s of i)if(s.state==="Booted")S.add(s.udid);return L_={at:_,booted:S},S}catch{return null}}function a_(){let _;try{_=Ai(lt).filter((S)=>S.startsWith("server-")&&S.endsWith(".json"))}catch{return[]}let e=li(),t=[];for(let S of _){let i=fe(lt,S);try{let s=JSON.parse($i(i,"utf-8"));try{process.kill(s.pid,0)}catch{try{Ft(i)}catch{}continue}if(e&&!e.has(s.device)){try{process.kill(s.pid,"SIGTERM")}catch{}try{Ft(i)}catch{}continue}t.push(s)}catch{}}return t}function C_(_,e){if(e)return _.find((t)=>t.device===e)??null;return _[0]??null}function vi(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function W_(_,e,t){return`${`${_}${e}`}?device=${encodeURIComponent(t)}`}async function ui(_){return new Promise((e)=>{let t=Bi();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_,"127.0.0.1")})}async function vt(_){let e=`http://127.0.0.1:${_}`;try{let t=await fetch(`${e}/json/version`);if(!t.ok)return null;if((await t.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((C)=>C.id.startsWith("sim:")).map((C)=>{let r=C.id.split(":")[1],o=C.description?.match(/\(([^)]+)\)/)?.[1];return{id:C.id,title:C.title||C.url||"Untitled",url:/^https?:/i.test(C.url)?C.url:"about:blank",type:C.type||"page",udid:r,bundleId:o}})}}}catch{return null}}async function Re(){if(i_)try{return await(await i_).listTargets(),i_}catch{i_=null}return i_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (Et(),Tt));for(let e=m_;e<m_+50;e++){if(!await ui(e)){let t=await vt(e);if(t)return t;continue}try{let t=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return t.getTargets().filter((S)=>S.source?.kind==="simulator").map((S)=>({id:S.targetId,title:S.title||S.appName||S.url||"Untitled",url:/^https?:/i.test(S.url)?S.url:"about:blank",type:S.type||"page",appName:S.appName,bundleId:S.bundleId,udid:S.source?.id,inUseByOtherInspector:!!S.inUseByOtherInspector}))},highlightTarget:t.highlightTarget?.bind(t),releaseHighlight:t.releaseHighlight?.bind(t)}}catch(t){if(t?.code==="EADDRINUSE"){let S=await vt(e);if(S)return S;continue}throw t}}throw Error(`No available inspect-webkit port found in ${m_}-${m_+49}`)})().catch((_)=>{throw i_=null,_}),i_}function bi(_,e,t){let S=new URL(`${_}/inspector.html`,"http://serve-sim.local");return S.searchParams.set("ws",`${e}/devtools/page/${t}`),`${S.pathname}${S.search}`}function Oi(_,e){return`127.0.0.1:${e}`}function di(){if(!De)De=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciBUMix3LGM1LEk4LHAxLHA1LGw1LGE1LGUyLE0yLF8yLGk1LHE1LEM1LFo1LG81LGsyPXt9LEEyPVtdLFQ4PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksTDI9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBSMShDLFope2Zvcih2YXIgRyBpbiBaKUNbR109WltHXTtyZXR1cm4gQ31mdW5jdGlvbiBYNShDKXtDJiZDLnBhcmVudE5vZGUmJkMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChDKX1mdW5jdGlvbiBTMShDLFosRyl7dmFyIEoscSxYLFk9e307Zm9yKFggaW4gWilYPT0ia2V5Ij9KPVpbWF06WD09InJlZiI/cT1aW1hdOllbWF09WltYXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJihZLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz9UMi5jYWxsKGFyZ3VtZW50cywyKTpHKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFggaW4gQy5kZWZhdWx0UHJvcHMpWVtYXT09PXZvaWQgMCYmKFlbWF09Qy5kZWZhdWx0UHJvcHNbWF0pO3JldHVybiBXMihDLFksSixxLG51bGwpfWZ1bmN0aW9uIFcyKEMsWixHLEoscSl7dmFyIFg9e3R5cGU6Qyxwcm9wczpaLGtleTpHLHJlZjpKLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpxPT1udWxsPysrYzU6cSxfX2k6LTEsX191OjB9O3JldHVybiBxPT1udWxsJiZ3LnZub2RlIT1udWxsJiZ3LnZub2RlKFgpLFh9ZnVuY3Rpb24gWDEoQyl7cmV0dXJuIEMuY2hpbGRyZW59ZnVuY3Rpb24gTDEoQyxaKXt0aGlzLnByb3BzPUMsdGhpcy5jb250ZXh0PVp9ZnVuY3Rpb24gQzIoQyxaKXtpZihaPT1udWxsKXJldHVybiBDLl9fP0MyKEMuX18sQy5fX2krMSk6bnVsbDtmb3IodmFyIEc7WjxDLl9fay5sZW5ndGg7WisrKWlmKChHPUMuX19rW1pdKSE9bnVsbCYmRy5fX2UhPW51bGwpcmV0dXJuIEcuX19lO3JldHVybiB0eXBlb2YgQy50eXBlPT0iZnVuY3Rpb24iP0MyKEMpOm51bGx9ZnVuY3Rpb24gRTgoQyl7aWYoQy5fX1AmJkMuX19kKXt2YXIgWj1DLl9fdixHPVouX19lLEo9W10scT1bXSxYPVIxKHt9LFopO1guX192PVouX192KzEsdy52bm9kZSYmdy52bm9kZShYKSxRNShDLl9fUCxYLFosQy5fX24sQy5fX1AubmFtZXNwYWNlVVJJLDMyJlouX191P1tHXTpudWxsLEosRz09bnVsbD9DMihaKTpHLCEhKDMyJlouX191KSxxKSxYLl9fdj1aLl9fdixYLl9fLl9fa1tYLl9faV09WCx0NShKLFgscSksWi5fX2U9Wi5fXz1udWxsLFguX19lIT1HJiZyNShYKX19ZnVuY3Rpb24gcjUoQyl7aWYoKEM9Qy5fXykhPW51bGwmJkMuX19jIT1udWxsKXJldHVybiBDLl9fZT1DLl9fYy5iYXNlPW51bGwsQy5fX2suc29tZShmdW5jdGlvbihaKXtpZihaIT1udWxsJiZaLl9fZSE9bnVsbClyZXR1cm4gQy5fX2U9Qy5fX2MuYmFzZT1aLl9fZX0pLHI1KEMpfWZ1bmN0aW9uIEc1KEMpeyghQy5fX2QmJihDLl9fZD0hMCkmJnAxLnB1c2goQykmJiFJMi5fX3IrK3x8cDUhPXcuZGVib3VuY2VSZW5kZXJpbmcpJiYoKHA1PXcuZGVib3VuY2VSZW5kZXJpbmcpfHxsNSkoSTIpfWZ1bmN0aW9uIEkyKCl7dHJ5e2Zvcih2YXIgQyxaPTE7cDEubGVuZ3RoOylwMS5sZW5ndGg+WiYmcDEuc29ydChhNSksQz1wMS5zaGlmdCgpLFo9cDEubGVuZ3RoLEU4KEMpfWZpbmFsbHl7cDEubGVuZ3RoPUkyLl9fcj0wfX1mdW5jdGlvbiBzNShDLFosRyxKLHEsWCxZLCQsXyxWLEIpe3ZhciBMLEgsRCxQLEssTixVLFc9SiYmSi5fX2t8fEEyLHk9Wi5sZW5ndGg7Zm9yKF89dzgoRyxaLFcsXyx5KSxMPTA7TDx5O0wrKykoRD1HLl9fa1tMXSkhPW51bGwmJihIPUQuX19pIT0tMSYmV1tELl9faV18fGsyLEQuX19pPUwsTj1RNShDLEQsSCxxLFgsWSwkLF8sVixCKSxQPUQuX19lLEQucmVmJiZILnJlZiE9RC5yZWYmJihILnJlZiYmWTUoSC5yZWYsbnVsbCxEKSxCLnB1c2goRC5yZWYsRC5fX2N8fFAsRCkpLEs9PW51bGwmJlAhPW51bGwmJihLPVApLChVPSEhKDQmRC5fX3UpKXx8SC5fX2s9PT1ELl9faz8oXz1uNShELF8sQyxVKSxVJiZILl9fZSYmKEguX19lPW51bGwpKTp0eXBlb2YgRC50eXBlPT0iZnVuY3Rpb24iJiZOIT09dm9pZCAwP189TjpQJiYoXz1QLm5leHRTaWJsaW5nKSxELl9fdSY9LTcpO3JldHVybiBHLl9fZT1LLF99ZnVuY3Rpb24gdzgoQyxaLEcsSixxKXt2YXIgWCxZLCQsXyxWLEI9Ry5sZW5ndGgsTD1CLEg9MDtmb3IoQy5fX2s9QXJyYXkocSksWD0wO1g8cTtYKyspKFk9WltYXSkhPW51bGwmJnR5cGVvZiBZIT0iYm9vbGVhbiImJnR5cGVvZiBZIT0iZnVuY3Rpb24iPyh0eXBlb2YgWT09InN0cmluZyJ8fHR5cGVvZiBZPT0ibnVtYmVyInx8dHlwZW9mIFk9PSJiaWdpbnQifHxZLmNvbnN0cnVjdG9yPT1TdHJpbmc/WT1DLl9fa1tYXT1XMihudWxsLFksbnVsbCxudWxsLG51bGwpOkwyKFkpP1k9Qy5fX2tbWF09VzIoWDEse2NoaWxkcmVuOll9LG51bGwsbnVsbCxudWxsKTpZLmNvbnN0cnVjdG9yPT09dm9pZCAwJiZZLl9fYj4wP1k9Qy5fX2tbWF09VzIoWS50eXBlLFkucHJvcHMsWS5rZXksWS5yZWY/WS5yZWY6bnVsbCxZLl9fdik6Qy5fX2tbWF09WSxfPVgrSCxZLl9fPUMsWS5fX2I9Qy5fX2IrMSwkPW51bGwsKFY9WS5fX2k9UzgoWSxHLF8sTCkpIT0tMSYmKEwtLSwoJD1HW1ZdKSYmKCQuX191fD0yKSksJD09bnVsbHx8JC5fX3Y9PW51bGw/KFY9PS0xJiYocT5CP0gtLTpxPEImJkgrKyksdHlwZW9mIFkudHlwZSE9ImZ1bmN0aW9uIiYmKFkuX191fD00KSk6ViE9XyYmKFY9PV8tMT9ILS06Vj09XysxP0grKzooVj5fP0gtLTpIKyssWS5fX3V8PTQpKSk6Qy5fX2tbWF09bnVsbDtpZihMKWZvcihYPTA7WDxCO1grKykoJD1HW1hdKSE9bnVsbCYmKDImJC5fX3UpPT0wJiYoJC5fX2U9PUomJihKPUMyKCQpKSxDMygkLCQpKTtyZXR1cm4gSn1mdW5jdGlvbiBuNShDLFosRyxKKXt2YXIgcSxYO2lmKHR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihxPUMuX19rLFg9MDtxJiZYPHEubGVuZ3RoO1grKylxW1hdJiYocVtYXS5fXz1DLFo9bjUocVtYXSxaLEcsSikpO3JldHVybiBafUMuX19lIT1aJiYoSiYmKFomJkMudHlwZSYmIVoucGFyZW50Tm9kZSYmKFo9QzIoQykpLEcuaW5zZXJ0QmVmb3JlKEMuX19lLFp8fG51bGwpKSxaPUMuX19lKTtkbyBaPVomJloubmV4dFNpYmxpbmc7d2hpbGUoWiE9bnVsbCYmWi5ub2RlVHlwZT09OCk7cmV0dXJuIFp9ZnVuY3Rpb24gajEoQyxaKXtyZXR1cm4gWj1afHxbXSxDPT1udWxsfHx0eXBlb2YgQz09ImJvb2xlYW4ifHwoTDIoQyk/Qy5zb21lKGZ1bmN0aW9uKEcpe2oxKEcsWil9KTpaLnB1c2goQykpLFp9ZnVuY3Rpb24gUzgoQyxaLEcsSil7dmFyIHEsWCxZLCQ9Qy5rZXksXz1DLnR5cGUsVj1aW0ddLEI9ViE9bnVsbCYmKDImVi5fX3UpPT0wO2lmKFY9PT1udWxsJiYkPT1udWxsfHxCJiYkPT1WLmtleSYmXz09Vi50eXBlKXJldHVybiBHO2lmKEo+KEI/MTowKSl7Zm9yKHE9Ry0xLFg9RysxO3E+PTB8fFg8Wi5sZW5ndGg7KWlmKChWPVpbWT1xPj0wP3EtLTpYKytdKSE9bnVsbCYmKDImVi5fX3UpPT0wJiYkPT1WLmtleSYmXz09Vi50eXBlKXJldHVybiBZfXJldHVybi0xfWZ1bmN0aW9uIHU1KEMsWixHKXtaWzBdPT0iLSI/Qy5zZXRQcm9wZXJ0eShaLEc9PW51bGw/IiI6Ryk6Q1taXT1HPT1udWxsPyIiOnR5cGVvZiBHIT0ibnVtYmVyInx8VDgudGVzdChaKT9HOkcrInB4In1mdW5jdGlvbiBQMihDLFosRyxKLHEpe3ZhciBYLFk7QzppZihaPT0ic3R5bGUiKWlmKHR5cGVvZiBHPT0ic3RyaW5nIilDLnN0eWxlLmNzc1RleHQ9RztlbHNle2lmKHR5cGVvZiBKPT0ic3RyaW5nIiYmKEMuc3R5bGUuY3NzVGV4dD1KPSIiKSxKKWZvcihaIGluIEopRyYmWiBpbiBHfHx1NShDLnN0eWxlLFosIiIpO2lmKEcpZm9yKFogaW4gRylKJiZHW1pdPT1KW1pdfHx1NShDLnN0eWxlLFosR1taXSl9ZWxzZSBpZihaWzBdPT0ibyImJlpbMV09PSJuIilYPVohPShaPVoucmVwbGFjZShpNSwiJDEiKSksWT1aLnRvTG93ZXJDYXNlKCksWj1ZIGluIEN8fFo9PSJvbkZvY3VzT3V0Inx8Wj09Im9uRm9jdXNJbiI/WS5zbGljZSgyKTpaLnNsaWNlKDIpLEMubHx8KEMubD17fSksQy5sW1orWF09RyxHP0o/R1tfMl09SltfMl06KEdbXzJdPXE1LEMuYWRkRXZlbnRMaXN0ZW5lcihaLFg/WjU6QzUsWCkpOkMucmVtb3ZlRXZlbnRMaXN0ZW5lcihaLFg/WjU6QzUsWCk7ZWxzZXtpZihxPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKVo9Wi5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihaIT0id2lkdGgiJiZaIT0iaGVpZ2h0IiYmWiE9ImhyZWYiJiZaIT0ibGlzdCImJlohPSJmb3JtIiYmWiE9InRhYkluZGV4IiYmWiE9ImRvd25sb2FkIiYmWiE9InJvd1NwYW4iJiZaIT0iY29sU3BhbiImJlohPSJyb2xlIiYmWiE9InBvcG92ZXIiJiZaIGluIEMpdHJ5e0NbWl09Rz09bnVsbD8iIjpHO2JyZWFrIEN9Y2F0Y2goJCl7fXR5cGVvZiBHPT0iZnVuY3Rpb24ifHwoRz09bnVsbHx8Rz09PSExJiZaWzRdIT0iLSI/Qy5yZW1vdmVBdHRyaWJ1dGUoWik6Qy5zZXRBdHRyaWJ1dGUoWixaPT0icG9wb3ZlciImJkc9PTE/IiI6RykpfX1mdW5jdGlvbiBkNShDKXtyZXR1cm4gZnVuY3Rpb24oWil7aWYodGhpcy5sKXt2YXIgRz10aGlzLmxbWi50eXBlK0NdO2lmKFpbTTJdPT1udWxsKVpbTTJdPXE1Kys7ZWxzZSBpZihaW00yXTxHW18yXSlyZXR1cm47cmV0dXJuIEcody5ldmVudD93LmV2ZW50KFopOlopfX19ZnVuY3Rpb24gUTUoQyxaLEcsSixxLFgsWSwkLF8sVil7dmFyIEIsTCxILEQsUCxLLE4sVSxXLHksRSxmLGssdixyLGE9Wi50eXBlO2lmKFouY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JkcuX191JiYoXz0hISgzMiZHLl9fdSksWD1bJD1aLl9fZT1HLl9fZV0pLChCPXcuX19iKSYmQihaKTtDOmlmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXRyeXtpZihVPVoucHJvcHMsVz1hLnByb3RvdHlwZSYmYS5wcm90b3R5cGUucmVuZGVyLHk9KEI9YS5jb250ZXh0VHlwZSkmJkpbQi5fX2NdLEU9Qj95P3kucHJvcHMudmFsdWU6Qi5fXzpKLEcuX19jP049KEw9Wi5fX2M9Ry5fX2MpLl9fPUwuX19FOihXP1ouX19jPUw9bmV3IGEoVSxFKTooWi5fX2M9TD1uZXcgTDEoVSxFKSxMLmNvbnN0cnVjdG9yPWEsTC5yZW5kZXI9eTgpLHkmJnkuc3ViKEwpLEwuc3RhdGV8fChMLnN0YXRlPXt9KSxMLl9fbj1KLEg9TC5fX2Q9ITAsTC5fX2g9W10sTC5fc2I9W10pLFcmJkwuX19zPT1udWxsJiYoTC5fX3M9TC5zdGF0ZSksVyYmYS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihMLl9fcz09TC5zdGF0ZSYmKEwuX19zPVIxKHt9LEwuX19zKSksUjEoTC5fX3MsYS5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoVSxMLl9fcykpKSxEPUwucHJvcHMsUD1MLnN0YXRlLEwuX192PVosSClXJiZhLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmTC5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJkwuY29tcG9uZW50V2lsbE1vdW50KCksVyYmTC5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmTC5fX2gucHVzaChMLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKFcmJmEuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZVIT09RCYmTC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZMLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoVSxFKSxaLl9fdj09Ry5fX3Z8fCFMLl9fZSYmTC5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJkwuc2hvdWxkQ29tcG9uZW50VXBkYXRlKFUsTC5fX3MsRSk9PT0hMSl7Wi5fX3YhPUcuX192JiYoTC5wcm9wcz1VLEwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEpLFouX19lPUcuX19lLFouX19rPUcuX19rLFouX19rLnNvbWUoZnVuY3Rpb24obil7biYmKG4uX189Wil9KSxBMi5wdXNoLmFwcGx5KEwuX19oLEwuX3NiKSxMLl9zYj1bXSxMLl9faC5sZW5ndGgmJlkucHVzaChMKTticmVhayBDfUwuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmTC5jb21wb25lbnRXaWxsVXBkYXRlKFUsTC5fX3MsRSksVyYmTC5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJkwuX19oLnB1c2goZnVuY3Rpb24oKXtMLmNvbXBvbmVudERpZFVwZGF0ZShELFAsSyl9KX1pZihMLmNvbnRleHQ9RSxMLnByb3BzPVUsTC5fX1A9QyxMLl9fZT0hMSxmPXcuX19yLGs9MCxXKUwuc3RhdGU9TC5fX3MsTC5fX2Q9ITEsZiYmZihaKSxCPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEEyLnB1c2guYXBwbHkoTC5fX2gsTC5fc2IpLEwuX3NiPVtdO2Vsc2UgZG8gTC5fX2Q9ITEsZiYmZihaKSxCPUwucmVuZGVyKEwucHJvcHMsTC5zdGF0ZSxMLmNvbnRleHQpLEwuc3RhdGU9TC5fX3M7d2hpbGUoTC5fX2QmJisrazwyNSk7TC5zdGF0ZT1MLl9fcyxMLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKEo9UjEoUjEoe30sSiksTC5nZXRDaGlsZENvbnRleHQoKSkpLFcmJiFIJiZMLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoSz1MLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEQsUCkpLHY9QiE9bnVsbCYmQi50eXBlPT09WDEmJkIua2V5PT1udWxsP2U1KEIucHJvcHMuY2hpbGRyZW4pOkIsJD1zNShDLEwyKHYpP3Y6W3ZdLFosRyxKLHEsWCxZLCQsXyxWKSxMLmJhc2U9Wi5fX2UsWi5fX3UmPS0xNjEsTC5fX2gubGVuZ3RoJiZZLnB1c2goTCksTiYmKEwuX19FPUwuX189bnVsbCl9Y2F0Y2gobil7aWYoWi5fX3Y9bnVsbCxffHxYIT1udWxsKWlmKG4udGhlbil7Zm9yKFouX191fD1fPzE2MDoxMjg7JCYmJC5ub2RlVHlwZT09OCYmJC5uZXh0U2libGluZzspJD0kLm5leHRTaWJsaW5nO1hbWC5pbmRleE9mKCQpXT1udWxsLFouX19lPSR9ZWxzZXtmb3Iocj1YLmxlbmd0aDtyLS07KVg1KFhbcl0pO0o1KFopfWVsc2UgWi5fX2U9Ry5fX2UsWi5fX2s9Ry5fX2ssbi50aGVufHxKNShaKTt3Ll9fZShuLFosRyl9ZWxzZSBYPT1udWxsJiZaLl9fdj09Ry5fX3Y/KFouX19rPUcuX19rLFouX19lPUcuX19lKTokPVouX19lPWI4KEcuX19lLFosRyxKLHEsWCxZLF8sVik7cmV0dXJuKEI9dy5kaWZmZWQpJiZCKFopLDEyOCZaLl9fdT92b2lkIDA6JH1mdW5jdGlvbiBKNShDKXtDJiYoQy5fX2MmJihDLl9fYy5fX2U9ITApLEMuX19rJiZDLl9fay5zb21lKEo1KSl9ZnVuY3Rpb24gdDUoQyxaLEcpe2Zvcih2YXIgSj0wO0o8Ry5sZW5ndGg7SisrKVk1KEdbSl0sR1srK0pdLEdbKytKXSk7dy5fX2MmJncuX19jKFosQyksQy5zb21lKGZ1bmN0aW9uKHEpe3RyeXtDPXEuX19oLHEuX19oPVtdLEMuc29tZShmdW5jdGlvbihYKXtYLmNhbGwocSl9KX1jYXRjaChYKXt3Ll9fZShYLHEuX192KX19KX1mdW5jdGlvbiBlNShDKXtyZXR1cm4gdHlwZW9mIEMhPSJvYmplY3QifHxDPT1udWxsfHxDLl9fYj4wP0M6TDIoQyk/Qy5tYXAoZTUpOlIxKHt9LEMpfWZ1bmN0aW9uIGI4KEMsWixHLEoscSxYLFksJCxfKXt2YXIgVixCLEwsSCxELFAsSyxOPUcucHJvcHN8fGsyLFU9Wi5wcm9wcyxXPVoudHlwZTtpZihXPT0ic3ZnIj9xPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6Vz09Im1hdGgiP3E9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOnF8fChxPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksWCE9bnVsbCl7Zm9yKFY9MDtWPFgubGVuZ3RoO1YrKylpZigoRD1YW1ZdKSYmInNldEF0dHJpYnV0ZSJpbiBEPT0hIVcmJihXP0QubG9jYWxOYW1lPT1XOkQubm9kZVR5cGU9PTMpKXtDPUQsWFtWXT1udWxsO2JyZWFrfX1pZihDPT1udWxsKXtpZihXPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShVKTtDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhxLFcsVS5pcyYmVSksJCYmKHcuX19tJiZ3Ll9fbShaLFgpLCQ9ITEpLFg9bnVsbH1pZihXPT1udWxsKU49PT1VfHwkJiZDLmRhdGE9PVV8fChDLmRhdGE9VSk7ZWxzZXtpZihYPVgmJlQyLmNhbGwoQy5jaGlsZE5vZGVzKSwhJCYmWCE9bnVsbClmb3IoTj17fSxWPTA7VjxDLmF0dHJpYnV0ZXMubGVuZ3RoO1YrKylOWyhEPUMuYXR0cmlidXRlc1tWXSkubmFtZV09RC52YWx1ZTtmb3IoViBpbiBOKUQ9TltWXSxWPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0w9RDpWPT0iY2hpbGRyZW4ifHwoViBpbiBVKXx8Vj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gVSl8fFY9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBVKXx8UDIoQyxWLG51bGwsRCxxKTtmb3IoViBpbiBVKUQ9VVtWXSxWPT0iY2hpbGRyZW4iP0g9RDpWPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0I9RDpWPT0idmFsdWUiP1A9RDpWPT0iY2hlY2tlZCI/Sz1EOiQmJnR5cGVvZiBEIT0iZnVuY3Rpb24ifHxOW1ZdPT09RHx8UDIoQyxWLEQsTltWXSxxKTtpZihCKSR8fEwmJihCLl9faHRtbD09TC5fX2h0bWx8fEIuX19odG1sPT1DLmlubmVySFRNTCl8fChDLmlubmVySFRNTD1CLl9faHRtbCksWi5fX2s9W107ZWxzZSBpZihMJiYoQy5pbm5lckhUTUw9IiIpLHM1KFoudHlwZT09InRlbXBsYXRlIj9DLmNvbnRlbnQ6QyxMMihIKT9IOltIXSxaLEcsSixXPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOnEsWCxZLFg/WFswXTpHLl9fayYmQzIoRywwKSwkLF8pLFghPW51bGwpZm9yKFY9WC5sZW5ndGg7Vi0tOylYNShYW1ZdKTskfHwoVj0idmFsdWUiLFc9PSJwcm9ncmVzcyImJlA9PW51bGw/Qy5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6UCE9bnVsbCYmKFAhPT1DW1ZdfHxXPT0icHJvZ3Jlc3MiJiYhUHx8Vz09Im9wdGlvbiImJlAhPU5bVl0pJiZQMihDLFYsUCxOW1ZdLHEpLFY9ImNoZWNrZWQiLEshPW51bGwmJkshPUNbVl0mJlAyKEMsVixLLE5bVl0scSkpfXJldHVybiBDfWZ1bmN0aW9uIFk1KEMsWixHKXt0cnl7aWYodHlwZW9mIEM9PSJmdW5jdGlvbiIpe3ZhciBKPXR5cGVvZiBDLl9fdT09ImZ1bmN0aW9uIjtKJiZDLl9fdSgpLEomJlo9PW51bGx8fChDLl9fdT1DKFopKX1lbHNlIEMuY3VycmVudD1afWNhdGNoKHEpe3cuX19lKHEsRyl9fWZ1bmN0aW9uIEMzKEMsWixHKXt2YXIgSixxO2lmKHcudW5tb3VudCYmdy51bm1vdW50KEMpLChKPUMucmVmKSYmKEouY3VycmVudCYmSi5jdXJyZW50IT1DLl9fZXx8WTUoSixudWxsLFopKSwoSj1DLl9fYykhPW51bGwpe2lmKEouY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e0ouY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChYKXt3Ll9fZShYLFopfUouYmFzZT1KLl9fUD1udWxsfWlmKEo9Qy5fX2spZm9yKHE9MDtxPEoubGVuZ3RoO3ErKylKW3FdJiZDMyhKW3FdLFosR3x8dHlwZW9mIEMudHlwZSE9ImZ1bmN0aW9uIik7R3x8WDUoQy5fX2UpLEMuX19jPUMuX189Qy5fX2U9dm9pZCAwfWZ1bmN0aW9uIHk4KEMsWixHKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihDLEcpfWZ1bmN0aW9uIEUyKEMsWixHKXt2YXIgSixxLFgsWTtaPT1kb2N1bWVudCYmKFo9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSx3Ll9fJiZ3Ll9fKEMsWikscT0oSj10eXBlb2YgRz09ImZ1bmN0aW9uIik/bnVsbDpHJiZHLl9fa3x8Wi5fX2ssWD1bXSxZPVtdLFE1KFosQz0oIUomJkd8fFopLl9faz1TMShYMSxudWxsLFtDXSkscXx8azIsazIsWi5uYW1lc3BhY2VVUkksIUomJkc/W0ddOnE/bnVsbDpaLmZpcnN0Q2hpbGQ/VDIuY2FsbChaLmNoaWxkTm9kZXMpOm51bGwsWCwhSiYmRz9HOnE/cS5fX2U6Wi5maXJzdENoaWxkLEosWSksdDUoWCxDLFkpfWZ1bmN0aW9uIGgxKEMpe2Z1bmN0aW9uIFooRyl7dmFyIEoscTtyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChKPW5ldyBTZXQsKHE9e30pW1ouX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIHF9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtKPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFgpe3RoaXMucHJvcHMudmFsdWUhPVgudmFsdWUmJkouZm9yRWFjaChmdW5jdGlvbihZKXtZLl9fZT0hMCxHNShZKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihYKXtKLmFkZChYKTt2YXIgWT1YLmNvbXBvbmVudFdpbGxVbm1vdW50O1guY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtKJiZKLmRlbGV0ZShYKSxZJiZZLmNhbGwoWCl9fSksRy5jaGlsZHJlbn1yZXR1cm4gWi5fX2M9Il9fY0MiK281KyssWi5fXz1DLFouUHJvdmlkZXI9Wi5fX2w9KFouQ29uc3VtZXI9ZnVuY3Rpb24oRyxKKXtyZXR1cm4gRy5jaGlsZHJlbihKKX0pLmNvbnRleHRUeXBlPVosWn1UMj1BMi5zbGljZSx3PXtfX2U6ZnVuY3Rpb24oQyxaLEcsSil7Zm9yKHZhciBxLFgsWTtaPVouX187KWlmKChxPVouX19jKSYmIXEuX18pdHJ5e2lmKChYPXEuY29uc3RydWN0b3IpJiZYLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKHEuc2V0U3RhdGUoWC5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoQykpLFk9cS5fX2QpLHEuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihxLmNvbXBvbmVudERpZENhdGNoKEMsSnx8e30pLFk9cS5fX2QpLFkpcmV0dXJuIHEuX19FPXF9Y2F0Y2goJCl7Qz0kfXRocm93IEN9fSxjNT0wLEk4PWZ1bmN0aW9uKEMpe3JldHVybiBDIT1udWxsJiZDLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxMMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oQyxaKXt2YXIgRztHPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1SMSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmKEM9QyhSMSh7fSxHKSx0aGlzLnByb3BzKSksQyYmUjEoRyxDKSxDIT1udWxsJiZ0aGlzLl9fdiYmKFomJnRoaXMuX3NiLnB1c2goWiksRzUodGhpcykpfSxMMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oQyl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxDJiZ0aGlzLl9faC5wdXNoKEMpLEc1KHRoaXMpKX0sTDEucHJvdG90eXBlLnJlbmRlcj1YMSxwMT1bXSxsNT10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsYTU9ZnVuY3Rpb24oQyxaKXtyZXR1cm4gQy5fX3YuX19iLVouX192Ll9fYn0sSTIuX19yPTAsZTI9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxNMj0iX19kIitlMixfMj0iX19hIitlMixpNT0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxxNT0wLEM1PWQ1KCExKSxaNT1kNSghMCksbzU9MDt2YXIgWjIsUTEsJDUsWjMsSzI9MCxWMz1bXSxWMT13LEczPVYxLl9fYixKMz1WMS5fX3IscTM9VjEuZGlmZmVkLFgzPVYxLl9fYyxRMz1WMS51bm1vdW50LFkzPVYxLl9fO2Z1bmN0aW9uIFMyKEMsWil7VjEuX19oJiZWMS5fX2goUTEsQyxLMnx8WiksSzI9MDt2YXIgRz1RMS5fX0h8fChRMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiBDPj1HLl9fLmxlbmd0aCYmRy5fXy5wdXNoKHt9KSxHLl9fW0NdfWZ1bmN0aW9uIEkoQyl7cmV0dXJuIEsyPTEsXzUoTDMsQyl9ZnVuY3Rpb24gXzUoQyxaLEcpe3ZhciBKPVMyKFoyKyssMik7aWYoSi50PUMsIUouX19jJiYoSi5fXz1bRz9HKFopOkwzKHZvaWQgMCxaKSxmdW5jdGlvbigkKXt2YXIgXz1KLl9fTj9KLl9fTlswXTpKLl9fWzBdLFY9Si50KF8sJCk7XyE9PVYmJihKLl9fTj1bVixKLl9fWzFdXSxKLl9fYy5zZXRTdGF0ZSh7fSkpfV0sSi5fX2M9UTEsIVExLl9fZikpe3ZhciBxPWZ1bmN0aW9uKCQsXyxWKXtpZighSi5fX2MuX19IKXJldHVybiEwO3ZhciBCPUouX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuIEguX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihIKXtyZXR1cm4hSC5fX059KSlyZXR1cm4hWHx8WC5jYWxsKHRoaXMsJCxfLFYpO3ZhciBMPUouX19jLnByb3BzIT09JDtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKEgpe2lmKEguX19OKXt2YXIgRD1ILl9fWzBdO0guX189SC5fX04sSC5fX049dm9pZCAwLEQhPT1ILl9fWzBdJiYoTD0hMCl9fSksWCYmWC5jYWxsKHRoaXMsJCxfLFYpfHxMfTtRMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpYLGNvbXBvbmVudFdpbGxVcGRhdGU6WX09UTE7UTEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbigkLF8sVil7aWYodGhpcy5fX2Upe3ZhciBCPVg7WD12b2lkIDAscSgkLF8sViksWD1CfVkmJlkuY2FsbCh0aGlzLCQsXyxWKX0sUTEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPXF9cmV0dXJuIEouX19OfHxKLl9ffWZ1bmN0aW9uIGIoQyxaKXt2YXIgRz1TMihaMisrLDMpOyFWMS5fX3MmJl8zKEcuX19ILFopJiYoRy5fXz1DLEcudT1aLFExLl9fSC5fX2gucHVzaChHKSl9ZnVuY3Rpb24gUihDKXtyZXR1cm4gSzI9NSxFMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OkN9fSxbXSl9ZnVuY3Rpb24gRTEoQyxaKXt2YXIgRz1TMihaMisrLDcpO3JldHVybiBfMyhHLl9fSCxaKSYmKEcuX189QygpLEcuX19IPVosRy5fX2g9QyksRy5fX31mdW5jdGlvbiBoKEMsWil7cmV0dXJuIEsyPTgsRTEoZnVuY3Rpb24oKXtyZXR1cm4gQ30sWil9ZnVuY3Rpb24gdTEoQyl7dmFyIFo9UTEuY29udGV4dFtDLl9fY10sRz1TMihaMisrLDkpO3JldHVybiBHLmM9QyxaPyhHLl9fPT1udWxsJiYoRy5fXz0hMCxaLnN1YihRMSkpLFoucHJvcHMudmFsdWUpOkMuX199ZnVuY3Rpb24gUjgoKXtmb3IodmFyIEM7Qz1WMy5zaGlmdCgpOyl7dmFyIFo9Qy5fX0g7aWYoQy5fX1AmJlopdHJ5e1ouX19oLnNvbWUodzIpLFouX19oLnNvbWUoVjUpLFouX19oPVtdfWNhdGNoKEcpe1ouX19oPVtdLFYxLl9fZShHLEMuX192KX19fVYxLl9fYj1mdW5jdGlvbihDKXtRMT1udWxsLEczJiZHMyhDKX0sVjEuX189ZnVuY3Rpb24oQyxaKXtDJiZaLl9fayYmWi5fX2suX19tJiYoQy5fX209Wi5fX2suX19tKSxZMyYmWTMoQyxaKX0sVjEuX19yPWZ1bmN0aW9uKEMpe0ozJiZKMyhDKSxaMj0wO3ZhciBaPShRMT1DLl9fYykuX19IO1omJigkNT09PVExPyhaLl9faD1bXSxRMS5fX2g9W10sWi5fXy5zb21lKGZ1bmN0aW9uKEcpe0cuX19OJiYoRy5fXz1HLl9fTiksRy51PUcuX19OPXZvaWQgMH0pKTooWi5fX2guc29tZSh3MiksWi5fX2guc29tZShWNSksWi5fX2g9W10sWjI9MCkpLCQ1PVExfSxWMS5kaWZmZWQ9ZnVuY3Rpb24oQyl7cTMmJnEzKEMpO3ZhciBaPUMuX19jO1omJlouX19IJiYoWi5fX0guX19oLmxlbmd0aCYmKFYzLnB1c2goWikhPT0xJiZaMz09PVYxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChaMz1WMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxqOCkoUjgpKSxaLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEcpe0cudSYmKEcuX19IPUcudSksRy51PXZvaWQgMH0pKSwkNT1RMT1udWxsfSxWMS5fX2M9ZnVuY3Rpb24oQyxaKXtaLnNvbWUoZnVuY3Rpb24oRyl7dHJ5e0cuX19oLnNvbWUodzIpLEcuX19oPUcuX19oLmZpbHRlcihmdW5jdGlvbihKKXtyZXR1cm4hSi5fX3x8VjUoSil9KX1jYXRjaChKKXtaLnNvbWUoZnVuY3Rpb24ocSl7cS5fX2gmJihxLl9faD1bXSl9KSxaPVtdLFYxLl9fZShKLEcuX192KX19KSxYMyYmWDMoQyxaKX0sVjEudW5tb3VudD1mdW5jdGlvbihDKXtRMyYmUTMoQyk7dmFyIFosRz1DLl9fYztHJiZHLl9fSCYmKEcuX19ILl9fLnNvbWUoZnVuY3Rpb24oSil7dHJ5e3cyKEopfWNhdGNoKHEpe1o9cX19KSxHLl9fSD12b2lkIDAsWiYmVjEuX19lKFosRy5fX3YpKX07dmFyICQzPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gajgoQyl7dmFyIFosRz1mdW5jdGlvbigpe2NsZWFyVGltZW91dChKKSwkMyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoWiksc2V0VGltZW91dChDKX0sSj1zZXRUaW1lb3V0KEcsMzUpOyQzJiYoWj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoRykpfWZ1bmN0aW9uIHcyKEMpe3ZhciBaPVExLEc9Qy5fX2M7dHlwZW9mIEc9PSJmdW5jdGlvbiImJihDLl9fYz12b2lkIDAsRygpKSxRMT1afWZ1bmN0aW9uIFY1KEMpe3ZhciBaPVExO0MuX19jPUMuX18oKSxRMT1afWZ1bmN0aW9uIF8zKEMsWil7cmV0dXJuIUN8fEMubGVuZ3RoIT09Wi5sZW5ndGh8fFouc29tZShmdW5jdGlvbihHLEope3JldHVybiBHIT09Q1tKXX0pfWZ1bmN0aW9uIEwzKEMsWil7cmV0dXJuIHR5cGVvZiBaPT0iZnVuY3Rpb24iP1ooQyk6Wn1mdW5jdGlvbiBwOChDLFope2Zvcih2YXIgRyBpbiBaKUNbR109WltHXTtyZXR1cm4gQ31mdW5jdGlvbiBLMyhDLFope2Zvcih2YXIgRyBpbiBDKWlmKEchPT0iX19zb3VyY2UiJiYhKEcgaW4gWikpcmV0dXJuITA7Zm9yKHZhciBKIGluIFopaWYoSiE9PSJfX3NvdXJjZSImJkNbSl0hPT1aW0pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEIzKEMsWil7dGhpcy5wcm9wcz1DLHRoaXMuY29udGV4dD1afShCMy5wcm90b3R5cGU9bmV3IEwxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxCMy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKEMsWil7cmV0dXJuIEszKHRoaXMucHJvcHMsQyl8fEszKHRoaXMuc3RhdGUsWil9O3ZhciBIMz13Ll9fYjt3Ll9fYj1mdW5jdGlvbihDKXtDLnR5cGUmJkMudHlwZS5fX2YmJkMucmVmJiYoQy5wcm9wcy5yZWY9Qy5yZWYsQy5yZWY9bnVsbCksSDMmJkgzKEMpfTt2YXIgdTg9dy5fX2U7dy5fX2U9ZnVuY3Rpb24oQyxaLEcsSil7aWYoQy50aGVuKXtmb3IodmFyIHEsWD1aO1g9WC5fXzspaWYoKHE9WC5fX2MpJiZxLl9fYylyZXR1cm4gWi5fX2U9PW51bGwmJihaLl9fZT1HLl9fZSxaLl9faz1HLl9faykscS5fX2MoQyxaKX11OChDLFosRyxKKX07dmFyIEQzPXcudW5tb3VudDtmdW5jdGlvbiBQMyhDLFosRyl7cmV0dXJuIEMmJihDLl9fYyYmQy5fX2MuX19IJiYoQy5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oSil7dHlwZW9mIEouX19jPT0iZnVuY3Rpb24iJiZKLl9fYygpfSksQy5fX2MuX19IPW51bGwpLChDPXA4KHt9LEMpKS5fX2MhPW51bGwmJihDLl9fYy5fX1A9PT1HJiYoQy5fX2MuX19QPVopLEMuX19jLl9fZT0hMCxDLl9fYz1udWxsKSxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKEope3JldHVybiBQMyhKLFosRyl9KSksQ31mdW5jdGlvbiBNMyhDLFosRyl7cmV0dXJuIEMmJkcmJihDLl9fdj1udWxsLEMuX19rPUMuX19rJiZDLl9fay5tYXAoZnVuY3Rpb24oSil7cmV0dXJuIE0zKEosWixHKX0pLEMuX19jJiZDLl9fYy5fX1A9PT1aJiYoQy5fX2UmJkcuYXBwZW5kQ2hpbGQoQy5fX2UpLEMuX19jLl9fZT0hMCxDLl9fYy5fX1A9RykpLEN9ZnVuY3Rpb24gTDUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24gVzMoQyl7dmFyIFo9Qy5fXyYmQy5fXy5fX2M7cmV0dXJuIFomJlouX19hJiZaLl9fYShDKX1mdW5jdGlvbiBiMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfXcudW5tb3VudD1mdW5jdGlvbihDKXt2YXIgWj1DLl9fYztaJiYoWi5fX3o9ITApLFomJlouX19SJiZaLl9fUigpLFomJjMyJkMuX191JiYoQy50eXBlPW51bGwpLEQzJiZEMyhDKX0sKEw1LnByb3RvdHlwZT1uZXcgTDEpLl9fYz1mdW5jdGlvbihDLFope3ZhciBHPVouX19jLEo9dGhpcztKLm89PW51bGwmJihKLm89W10pLEouby5wdXNoKEcpO3ZhciBxPVczKEouX192KSxYPSExLFk9ZnVuY3Rpb24oKXtYfHxKLl9fenx8KFg9ITAsRy5fX1I9bnVsbCxxP3EoXyk6XygpKX07Ry5fX1I9WTt2YXIgJD1HLl9fUDtHLl9fUD1udWxsO3ZhciBfPWZ1bmN0aW9uKCl7aWYoIS0tSi5fX3Upe2lmKEouc3RhdGUuX19hKXt2YXIgVj1KLnN0YXRlLl9fYTtKLl9fdi5fX2tbMF09TTMoVixWLl9fYy5fX1AsVi5fX2MuX19PKX12YXIgQjtmb3IoSi5zZXRTdGF0ZSh7X19hOkouX19iPW51bGx9KTtCPUouby5wb3AoKTspQi5fX1A9JCxCLmZvcmNlVXBkYXRlKCl9fTtKLl9fdSsrfHwzMiZaLl9fdXx8Si5zZXRTdGF0ZSh7X19hOkouX19iPUouX192Ll9fa1swXX0pLEMudGhlbihZLFkpfSxMNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LEw1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQyxaKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgRz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxKPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPVAzKHRoaXMuX19iLEcsSi5fX089Si5fX1ApfXRoaXMuX19iPW51bGx9dmFyIHE9Wi5fX2EmJlMxKFgxLG51bGwsQy5mYWxsYmFjayk7cmV0dXJuIHEmJihxLl9fdSY9LTMzKSxbUzEoWDEsbnVsbCxaLl9fYT9udWxsOkMuY2hpbGRyZW4pLHFdfTt2YXIgTjM9ZnVuY3Rpb24oQyxaLEcpe2lmKCsrR1sxXT09PUdbMF0mJkMubC5kZWxldGUoWiksQy5wcm9wcy5yZXZlYWxPcmRlciYmKEMucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCFDLmwuc2l6ZSkpZm9yKEc9Qy5pO0c7KXtmb3IoO0cubGVuZ3RoPjM7KUcucG9wKCkoKTtpZihHWzFdPEdbMF0pYnJlYWs7Qy5pPUc9R1syXX19OyhiMi5wcm90b3R5cGU9bmV3IEwxKS5fX2E9ZnVuY3Rpb24oQyl7dmFyIFo9dGhpcyxHPVczKFouX192KSxKPVoubC5nZXQoQyk7cmV0dXJuIEpbMF0rKyxmdW5jdGlvbihxKXt2YXIgWD1mdW5jdGlvbigpe1oucHJvcHMucmV2ZWFsT3JkZXI/KEoucHVzaChxKSxOMyhaLEMsSikpOnEoKX07Rz9HKFgpOlgoKX19LGIyLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQyl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIFo9ajEoQy5jaGlsZHJlbik7Qy5yZXZlYWxPcmRlciYmQy5yZXZlYWxPcmRlclswXT09PSJiIiYmWi5yZXZlcnNlKCk7Zm9yKHZhciBHPVoubGVuZ3RoO0ctLTspdGhpcy5sLnNldChaW0ddLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiBDLmNoaWxkcmVufSxiMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPWIyLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBDPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oWixHKXtOMyhDLEcsWil9KX07dmFyIGQ4PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLGM4PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxsOD0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLGE4PS9bQS1aMC05XS9nLGk4PXR5cGVvZiBkb2N1bWVudDwidSIsbzg9ZnVuY3Rpb24oQyl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KEMpfTtmdW5jdGlvbiBrMyhDLFosRyl7cmV0dXJuIFouX19rPT1udWxsJiYoWi50ZXh0Q29udGVudD0iIiksRTIoQyxaKSx0eXBlb2YgRz09ImZ1bmN0aW9uIiYmRygpLEM/Qy5fX2M6bnVsbH1MMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbihDKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoTDEucHJvdG90eXBlLEMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrQ119LHNldDpmdW5jdGlvbihaKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxDLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Wn0pfX0pfSk7dmFyIEYzPXcuZXZlbnQ7dy5ldmVudD1mdW5jdGlvbihDKXtyZXR1cm4gRjMmJihDPUYzKEMpKSxDLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LEMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LEMuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sQy5uYXRpdmVFdmVudD1DfTt2YXIgQTMscjg9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LFUzPXcudm5vZGU7dy52bm9kZT1mdW5jdGlvbihDKXt0eXBlb2YgQy50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oWil7dmFye3Byb3BzOkcsdHlwZTpKfT1aLHE9e30sWD1KLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciBZIGluIEcpe3ZhciAkPUdbWV07aWYoIShZPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gRykmJiQ9PW51bGx8fGk4JiZZPT09ImNoaWxkcmVuIiYmSj09PSJub3NjcmlwdCJ8fFk9PT0iY2xhc3MifHxZPT09ImNsYXNzTmFtZSIpKXt2YXIgXz1ZLnRvTG93ZXJDYXNlKCk7WT09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gRyYmRy52YWx1ZT09bnVsbD9ZPSJ2YWx1ZSI6WT09PSJkb3dubG9hZCImJiQ9PT0hMD8kPSIiOl89PT0idHJhbnNsYXRlIiYmJD09PSJubyI/JD0hMTpfWzBdPT09Im8iJiZfWzFdPT09Im4iP189PT0ib25kb3VibGVjbGljayI/WT0ib25kYmxjbGljayI6XyE9PSJvbmNoYW5nZSJ8fEohPT0iaW5wdXQiJiZKIT09InRleHRhcmVhInx8bzgoRy50eXBlKT9fPT09Im9uZm9jdXMiP1k9Im9uZm9jdXNpbiI6Xz09PSJvbmJsdXIiP1k9Im9uZm9jdXNvdXQiOmw4LnRlc3QoWSkmJihZPV8pOl89WT0ib25pbnB1dCI6WCYmYzgudGVzdChZKT9ZPVkucmVwbGFjZShhOCwiLSQmIikudG9Mb3dlckNhc2UoKTokPT09bnVsbCYmKCQ9dm9pZCAwKSxfPT09Im9uaW5wdXQiJiZxW1k9X10mJihZPSJvbmlucHV0Q2FwdHVyZSIpLHFbWV09JH19Sj09InNlbGVjdCImJihxLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KHEudmFsdWUpJiYocS52YWx1ZT1qMShHLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YucHJvcHMuc2VsZWN0ZWQ9cS52YWx1ZS5pbmRleE9mKFYucHJvcHMudmFsdWUpIT0tMX0pKSxxLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKHEudmFsdWU9ajEoRy5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPXEubXVsdGlwbGU/cS5kZWZhdWx0VmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTE6cS5kZWZhdWx0VmFsdWU9PVYucHJvcHMudmFsdWV9KSkpLEcuY2xhc3MmJiFHLmNsYXNzTmFtZT8ocS5jbGFzcz1HLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjbGFzc05hbWUiLHI4KSk6Ry5jbGFzc05hbWUmJihxLmNsYXNzPXEuY2xhc3NOYW1lPUcuY2xhc3NOYW1lKSxaLnByb3BzPXF9KEMpLEMuJCR0eXBlb2Y9ZDgsVTMmJlUzKEMpfTt2YXIgTzM9dy5fX3I7dy5fX3I9ZnVuY3Rpb24oQyl7TzMmJk8zKEMpLEEzPUMuX19jfTt2YXIgejM9dy5kaWZmZWQ7dy5kaWZmZWQ9ZnVuY3Rpb24oQyl7ejMmJnozKEMpO3Zhcntwcm9wczpaLF9fZTpHfT1DO0chPW51bGwmJkMudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBaJiZaLnZhbHVlIT09Ry52YWx1ZSYmKEcudmFsdWU9Wi52YWx1ZT09bnVsbD8iIjpaLnZhbHVlKSxBMz1udWxsfTtmdW5jdGlvbiBJMyhDKXtyZXR1cm4hIUMuX19rJiYoRTIobnVsbCxDKSwhMCl9ZnVuY3Rpb24gVDMoQyl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihaKXtrMyhaLEMpfSx1bm1vdW50OmZ1bmN0aW9uKCl7STMoQyl9fX12YXIgRTM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiB3MyhDKXtsZXQgWj1bXSxHPW5ldyBNYXA7Zm9yKGxldCBKIG9mIEMpe2xldCBxPUouYXBwTmFtZXx8Si5idW5kbGVJZHx8IlVua25vd24iLFg9Si5idW5kbGVJZHx8cSxZPUcuZ2V0KFgpO2lmKCFZKVk9e2tleTpYLGFwcE5hbWU6cSxidW5kbGVJZDpKLmJ1bmRsZUlkLHRhcmdldHM6W119LEcuc2V0KFgsWSksWi5wdXNoKFgpO1kudGFyZ2V0cy5wdXNoKEopfXJldHVybiBaLm1hcCgoSik9PkcuZ2V0KEopKX1mdW5jdGlvbiBtMyhDLFope2Zvcih2YXIgRyBpbiBaKUNbR109WltHXTtyZXR1cm4gQ31mdW5jdGlvbiBINShDLFope2Zvcih2YXIgRyBpbiBDKWlmKEchPT0iX19zb3VyY2UiJiYhKEcgaW4gWikpcmV0dXJuITA7Zm9yKHZhciBKIGluIFopaWYoSiE9PSJfX3NvdXJjZSImJkNbSl0hPT1aW0pdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFMzKEMsWil7dGhpcy5wcm9wcz1DLHRoaXMuY29udGV4dD1afWZ1bmN0aW9uIEIyKEMsWil7ZnVuY3Rpb24gRyhxKXt2YXIgWD10aGlzLnByb3BzLnJlZjtyZXR1cm4gWCE9cS5yZWYmJlgmJih0eXBlb2YgWD09ImZ1bmN0aW9uIj9YKG51bGwpOlguY3VycmVudD1udWxsKSxaPyFaKHRoaXMucHJvcHMscSl8fFghPXEucmVmOkg1KHRoaXMucHJvcHMscSl9ZnVuY3Rpb24gSihxKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9RyxTMShDLHEpfXJldHVybiBKLmRpc3BsYXlOYW1lPSJNZW1vKCIrKEMuZGlzcGxheU5hbWV8fEMubmFtZSkrIikiLEouX19mPUoucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsSi50eXBlPUMsSn0oUzMucHJvdG90eXBlPW5ldyBMMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsUzMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihDLFope3JldHVybiBINSh0aGlzLnByb3BzLEMpfHxINSh0aGlzLnN0YXRlLFopfTt2YXIgYjM9dy5fX2I7dy5fX2I9ZnVuY3Rpb24oQyl7Qy50eXBlJiZDLnR5cGUuX19mJiZDLnJlZiYmKEMucHJvcHMucmVmPUMucmVmLEMucmVmPW51bGwpLGIzJiZiMyhDKX07dmFyIHM4PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIEcyKEMpe2Z1bmN0aW9uIFooRyl7dmFyIEo9bTMoe30sRyk7cmV0dXJuIGRlbGV0ZSBKLnJlZixDKEosRy5yZWZ8fG51bGwpfXJldHVybiBaLiQkdHlwZW9mPXM4LFoucmVuZGVyPUMsWi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1aLl9fZj0hMCxaLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKEMuZGlzcGxheU5hbWV8fEMubmFtZSkrIikiLFp9dmFyIG44PXcuX19lO3cuX19lPWZ1bmN0aW9uKEMsWixHLEope2lmKEMudGhlbil7Zm9yKHZhciBxLFg9WjtYPVguX187KWlmKChxPVguX19jKSYmcS5fX2MpcmV0dXJuIFouX19lPT1udWxsJiYoWi5fX2U9Ry5fX2UsWi5fX2s9Ry5fX2spLHEuX19jKEMsWil9bjgoQyxaLEcsSil9O3ZhciB5Mz13LnVubW91bnQ7ZnVuY3Rpb24geDMoQyxaLEcpe3JldHVybiBDJiYoQy5fX2MmJkMuX19jLl9fSCYmKEMuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKEope3R5cGVvZiBKLl9fYz09ImZ1bmN0aW9uIiYmSi5fX2MoKX0pLEMuX19jLl9fSD1udWxsKSwoQz1tMyh7fSxDKSkuX19jIT1udWxsJiYoQy5fX2MuX19QPT09RyYmKEMuX19jLl9fUD1aKSxDLl9fYy5fX2U9ITAsQy5fX2M9bnVsbCksQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihKKXtyZXR1cm4geDMoSixaLEcpfSkpLEN9ZnVuY3Rpb24gZjMoQyxaLEcpe3JldHVybiBDJiZHJiYoQy5fX3Y9bnVsbCxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKEope3JldHVybiBmMyhKLFosRyl9KSxDLl9fYyYmQy5fX2MuX19QPT09WiYmKEMuX19lJiZHLmFwcGVuZENoaWxkKEMuX19lKSxDLl9fYy5fX2U9ITAsQy5fX2MuX19QPUcpKSxDfWZ1bmN0aW9uIEI1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIHAzKEMpe3ZhciBaPUMuX18mJkMuX18uX19jO3JldHVybiBaJiZaLl9fYSYmWi5fX2EoQyl9ZnVuY3Rpb24geTIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH13LnVubW91bnQ9ZnVuY3Rpb24oQyl7dmFyIFo9Qy5fX2M7WiYmKFouX196PSEwKSxaJiZaLl9fUiYmWi5fX1IoKSxaJiYzMiZDLl9fdSYmKEMudHlwZT1udWxsKSx5MyYmeTMoQyl9LChCNS5wcm90b3R5cGU9bmV3IEwxKS5fX2M9ZnVuY3Rpb24oQyxaKXt2YXIgRz1aLl9fYyxKPXRoaXM7Si5vPT1udWxsJiYoSi5vPVtdKSxKLm8ucHVzaChHKTt2YXIgcT1wMyhKLl9fdiksWD0hMSxZPWZ1bmN0aW9uKCl7WHx8Si5fX3p8fChYPSEwLEcuX19SPW51bGwscT9xKF8pOl8oKSl9O0cuX19SPVk7dmFyICQ9Ry5fX1A7Ry5fX1A9bnVsbDt2YXIgXz1mdW5jdGlvbigpe2lmKCEtLUouX191KXtpZihKLnN0YXRlLl9fYSl7dmFyIFY9Si5zdGF0ZS5fX2E7Si5fX3YuX19rWzBdPWYzKFYsVi5fX2MuX19QLFYuX19jLl9fTyl9dmFyIEI7Zm9yKEouc2V0U3RhdGUoe19fYTpKLl9fYj1udWxsfSk7Qj1KLm8ucG9wKCk7KUIuX19QPSQsQi5mb3JjZVVwZGF0ZSgpfX07Si5fX3UrK3x8MzImWi5fX3V8fEouc2V0U3RhdGUoe19fYTpKLl9fYj1KLl9fdi5fX2tbMF19KSxDLnRoZW4oWSxZKX0sQjUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSxCNS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMsWil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksSj10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT14Myh0aGlzLl9fYixHLEouX19PPUouX19QKX10aGlzLl9fYj1udWxsfXZhciBxPVouX19hJiZTMShYMSxudWxsLEMuZmFsbGJhY2spO3JldHVybiBxJiYocS5fX3UmPS0zMyksW1MxKFgxLG51bGwsWi5fX2E/bnVsbDpDLmNoaWxkcmVuKSxxXX07dmFyIFIzPWZ1bmN0aW9uKEMsWixHKXtpZigrK0dbMV09PT1HWzBdJiZDLmwuZGVsZXRlKFopLEMucHJvcHMucmV2ZWFsT3JkZXImJihDLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhQy5sLnNpemUpKWZvcihHPUMuaTtHOyl7Zm9yKDtHLmxlbmd0aD4zOylHLnBvcCgpKCk7aWYoR1sxXTxHWzBdKWJyZWFrO0MuaT1HPUdbMl19fTsoeTIucHJvdG90eXBlPW5ldyBMMSkuX19hPWZ1bmN0aW9uKEMpe3ZhciBaPXRoaXMsRz1wMyhaLl9fdiksSj1aLmwuZ2V0KEMpO3JldHVybiBKWzBdKyssZnVuY3Rpb24ocSl7dmFyIFg9ZnVuY3Rpb24oKXtaLnByb3BzLnJldmVhbE9yZGVyPyhKLnB1c2gocSksUjMoWixDLEopKTpxKCl9O0c/RyhYKTpYKCl9fSx5Mi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBaPWoxKEMuY2hpbGRyZW4pO0MucmV2ZWFsT3JkZXImJkMucmV2ZWFsT3JkZXJbMF09PT0iYiImJloucmV2ZXJzZSgpO2Zvcih2YXIgRz1aLmxlbmd0aDtHLS07KXRoaXMubC5zZXQoWltHXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gQy5jaGlsZHJlbn0seTIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT15Mi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFosRyl7UjMoQyxHLFopfSl9O3ZhciB0OD10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxlOD0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8sQzk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxaOT0vW0EtWjAtOV0vZyxHOT10eXBlb2YgZG9jdW1lbnQ8InUiLEo5PWZ1bmN0aW9uKEMpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChDKX07TDEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwxLnByb3RvdHlwZSxDLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iK0NdfSxzZXQ6ZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsQyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlp9KX19KX0pO3ZhciBqMz13LmV2ZW50O3cuZXZlbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGozJiYoQz1qMyhDKSksQy5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxDLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxDLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LEMubmF0aXZlRXZlbnQ9Q307dmFyIHUzLHE5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxoMz13LnZub2RlO3cudm5vZGU9ZnVuY3Rpb24oQyl7dHlwZW9mIEMudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFope3Zhcntwcm9wczpHLHR5cGU6Sn09WixxPXt9LFg9Si5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgWSBpbiBHKXt2YXIgJD1HW1ldO2lmKCEoWT09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEcpJiYkPT1udWxsfHxHOSYmWT09PSJjaGlsZHJlbiImJko9PT0ibm9zY3JpcHQifHxZPT09ImNsYXNzInx8WT09PSJjbGFzc05hbWUiKSl7dmFyIF89WS50b0xvd2VyQ2FzZSgpO1k9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEcmJkcudmFsdWU9PW51bGw/WT0idmFsdWUiOlk9PT0iZG93bmxvYWQiJiYkPT09ITA/JD0iIjpfPT09InRyYW5zbGF0ZSImJiQ9PT0ibm8iPyQ9ITE6X1swXT09PSJvIiYmX1sxXT09PSJuIj9fPT09Im9uZG91YmxlY2xpY2siP1k9Im9uZGJsY2xpY2siOl8hPT0ib25jaGFuZ2UifHxKIT09ImlucHV0IiYmSiE9PSJ0ZXh0YXJlYSJ8fEo5KEcudHlwZSk/Xz09PSJvbmZvY3VzIj9ZPSJvbmZvY3VzaW4iOl89PT0ib25ibHVyIj9ZPSJvbmZvY3Vzb3V0IjpDOS50ZXN0KFkpJiYoWT1fKTpfPVk9Im9uaW5wdXQiOlgmJmU4LnRlc3QoWSk/WT1ZLnJlcGxhY2UoWjksIi0kJiIpLnRvTG93ZXJDYXNlKCk6JD09PW51bGwmJigkPXZvaWQgMCksXz09PSJvbmlucHV0IiYmcVtZPV9dJiYoWT0ib25pbnB1dENhcHR1cmUiKSxxW1ldPSR9fUo9PSJzZWxlY3QiJiYocS5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShxLnZhbHVlKSYmKHEudmFsdWU9ajEoRy5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPXEudmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTF9KSkscS5kZWZhdWx0VmFsdWUhPW51bGwmJihxLnZhbHVlPWoxKEcuY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1xLm11bHRpcGxlP3EuZGVmYXVsdFZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xOnEuZGVmYXVsdFZhbHVlPT1WLnByb3BzLnZhbHVlfSkpKSxHLmNsYXNzJiYhRy5jbGFzc05hbWU/KHEuY2xhc3M9Ry5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY2xhc3NOYW1lIixxOSkpOkcuY2xhc3NOYW1lJiYocS5jbGFzcz1xLmNsYXNzTmFtZT1HLmNsYXNzTmFtZSksWi5wcm9wcz1xfShDKSxDLiQkdHlwZW9mPXQ4LGgzJiZoMyhDKX07dmFyIHYzPXcuX19yO3cuX19yPWZ1bmN0aW9uKEMpe3YzJiZ2MyhDKSx1Mz1DLl9fY307dmFyIGczPXcuZGlmZmVkO3cuZGlmZmVkPWZ1bmN0aW9uKEMpe2czJiZnMyhDKTt2YXJ7cHJvcHM6WixfX2U6R309QztHIT1udWxsJiZDLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gWiYmWi52YWx1ZSE9PUcudmFsdWUmJihHLnZhbHVlPVoudmFsdWU9PW51bGw/IiI6Wi52YWx1ZSksdTM9bnVsbH07dmFyIGQxPTM7ZnVuY3Rpb24gRDUoQyl7cmV0dXJuIEM9PT0ibGFuZHNjYXBlX2xlZnQifHxDPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gSDIoQyl7cmV0dXJuISFDJiYoRDUoQy5vcmllbnRhdGlvbil8fEMud2lkdGg+Qy5oZWlnaHQpfWZ1bmN0aW9uIEoyKEMpe2lmKCFDfHxDLndpZHRoPD0wfHxDLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgWj1ENShDLm9yaWVudGF0aW9uKXx8Qy53aWR0aD5DLmhlaWdodCxHPVo/TWF0aC5tYXgoQy53aWR0aCxDLmhlaWdodCk6TWF0aC5taW4oQy53aWR0aCxDLmhlaWdodCksSj1aP01hdGgubWluKEMud2lkdGgsQy5oZWlnaHQpOk1hdGgubWF4KEMud2lkdGgsQy5oZWlnaHQpO2lmKEc9PT1DLndpZHRoJiZKPT09Qy5oZWlnaHQpcmV0dXJuIEM7cmV0dXJuey4uLkMsd2lkdGg6RyxoZWlnaHQ6Sn19ZnVuY3Rpb24gRDIoQyl7bGV0IFo9SjIoQyksRz1kMyhDPy5vcmllbnRhdGlvbiksSj1NYXRoLmFicyhHKT09PTkwLHE9ISFDJiZDLndpZHRoPkMuaGVpZ2h0LFg9Rz09PTE4MHx8SiYmIXE7cmV0dXJue2Rpc3BsYXlDb25maWc6Wixyb3RhdGlvbkRlZ3JlZXM6WD9HOjAsbmVlZHNDc3NSb3RhdGlvbjpYLGlucHV0T3JpZW50YXRpb246WD9DPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIGQzKEMpe3N3aXRjaChDKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIE4yKEMsWixHKXtzd2l0Y2goQyl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6Ryx5OjEtWn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtRyx5Olp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtWix5OjEtR307ZGVmYXVsdDpyZXR1cm57eDpaLHk6R319fWZ1bmN0aW9uIE41KEMsWil7c3dpdGNoKEMpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnN3aXRjaChaKXtjYXNlIDE6cmV0dXJuIDM7Y2FzZSA0OnJldHVybiAyO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gWn1jYXNlImxhbmRzY2FwZV9yaWdodCI6c3dpdGNoKFope2Nhc2UgMTpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDM7Y2FzZSAyOnJldHVybiA0O2Nhc2UgMzpyZXR1cm4gMTtkZWZhdWx0OnJldHVybiBafWNhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnN3aXRjaChaKXtjYXNlIDE6cmV0dXJuIDQ7Y2FzZSA0OnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMztjYXNlIDM6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gWn1kZWZhdWx0OnJldHVybiBafX12YXIgWDk9MDtmdW5jdGlvbiBRKEMsWixHLEoscSxYKXtafHwoWj17fSk7dmFyIFksJCxfPVo7aWYoInJlZiJpbiBfKWZvcigkIGluIF89e30sWikkPT0icmVmIj9ZPVpbJF06X1skXT1aWyRdO3ZhciBWPXt0eXBlOkMscHJvcHM6XyxrZXk6RyxyZWY6WSxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1YOSxfX2k6LTEsX191OjAsX19zb3VyY2U6cSxfX3NlbGY6WH07aWYodHlwZW9mIEM9PSJmdW5jdGlvbiImJihZPUMuZGVmYXVsdFByb3BzKSlmb3IoJCBpbiBZKV9bJF09PT12b2lkIDAmJihfWyRdPVlbJF0pO3JldHVybiB3LnZub2RlJiZ3LnZub2RlKFYpLFZ9dmFyIGMzPWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsUTk9MyxZOT00LCQ5PTU7ZnVuY3Rpb24gUjIoe3VybDpDLHdzVXJsOlosc3R5bGU6RyxpbWFnZVN0eWxlOkosY2xhc3NOYW1lOnEsb25Ib21lUHJlc3M6WCxvblN0cmVhbVRvdWNoOlksb25TdHJlYW1NdWx0aVRvdWNoOiQsb25TdHJlYW1CdXR0b246XyxzdWJzY3JpYmVGcmFtZTpWLHN0cmVhbUZyYW1lOkIsc3RyZWFtQ29uZmlnOkwsb25TY3JlZW5Db25maWdDaGFuZ2U6SCxoaWRlQ29udHJvbHM6RCxvblN0cmVhbWluZ0NoYW5nZTpQLGNvbm5lY3Rpb25RdWFsaXR5Okt9KXtsZXQgTj0hIVksVT1SKG51bGwpLFc9UihudWxsKSx5PVIobnVsbCksRT1SKG51bGwpLFtmLGtdPUkoITEpLFt2LHJdPUkobnVsbCksW2Esbl09SShudWxsKSxzPVIobnVsbCksZzE9UihIKTtnMS5jdXJyZW50PUg7bGV0IEsxPVIobnVsbCksW3oxLGpdPUkobnVsbCk7YigoKT0+e2xldCBPPUsxLmN1cnJlbnQ7aWYoIU98fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBGPW5ldyBSZXNpemVPYnNlcnZlcigoTSk9PntsZXQgQT1NWzBdPy5jb250ZW50UmVjdDtpZihBKWooe3dpZHRoOkEud2lkdGgsaGVpZ2h0OkEuaGVpZ2h0fSl9KTtyZXR1cm4gRi5vYnNlcnZlKE8pLCgpPT5GLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtsLHBdPUkoMCksWTE9UigwKSxbSTEsQjFdPUkoITEpLFoxPVIobnVsbCk7YigoKT0+e2lmKEs9PT0icG9vciIpe2lmKEIxKCEwKSxaMS5jdXJyZW50KWNsZWFyVGltZW91dChaMS5jdXJyZW50KTtaMS5jdXJyZW50PXNldFRpbWVvdXQoKCk9PntCMSghMSksWjEuY3VycmVudD1udWxsfSwzMDAwKX1lbHNlIGlmKEIxKCExKSxaMS5jdXJyZW50KWNsZWFyVGltZW91dChaMS5jdXJyZW50KSxaMS5jdXJyZW50PW51bGw7cmV0dXJuKCk9PntpZihaMS5jdXJyZW50KWNsZWFyVGltZW91dChaMS5jdXJyZW50KX19LFtLXSk7bGV0IEcxPWAke0N9L3N0cmVhbS5tanBlZ2A7YigoKT0+e3MuY3VycmVudD1udWxsLG4obnVsbCl9LFtDXSk7bGV0IFM9aCgoTyk9PntpZighT3x8Ty53aWR0aDw9MHx8Ty5oZWlnaHQ8PTApcmV0dXJuO2xldCBGPXMuY3VycmVudCxNPU8ub3JpZW50YXRpb249PT12b2lkIDAmJkY/Lm9yaWVudGF0aW9uP3suLi5PLG9yaWVudGF0aW9uOkYub3JpZW50YXRpb259Ok87aWYoRiYmRi53aWR0aD09PU0ud2lkdGgmJkYuaGVpZ2h0PT09TS5oZWlnaHQmJkYub3JpZW50YXRpb249PT1NLm9yaWVudGF0aW9uKXJldHVybjtzLmN1cnJlbnQ9TSxuKE0pLGcxLmN1cnJlbnQ/LihNKX0sW10pLGM9UihQKTtjLmN1cnJlbnQ9UCxiKCgpPT57Yy5jdXJyZW50Py4oZil9LFtmXSksYigoKT0+e2lmKE4mJkwpUyhMKX0sW04sTCxTXSk7bGV0IGQ9UighMSk7ZC5jdXJyZW50PWY7bGV0IGk9UihudWxsKTtiKCgpPT57aWYoIU58fCFWKXJldHVybjtsZXQgRj1zZXRUaW1lb3V0KCgpPT57aWYoIWQuY3VycmVudClyKCJTdHJlYW0gaXMgbm90IHByb2R1Y2luZyBmcmFtZXMuIFRoZSBzaW11bGF0b3IgbWF5IGhhdmUgc3RvcHBlZCDigJQgdHJ5IHJlY29ubmVjdGluZy4iKX0sNjAwMCksTT1WKChBKT0+e1kxLmN1cnJlbnQrKyxiMS5jdXJyZW50PURhdGUubm93KCk7bGV0IGc9Vy5jdXJyZW50O2lmKGcpe2lmKGkuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGkuY3VycmVudCk7aS5jdXJyZW50PUEsZy5zcmM9QX1pZighZC5jdXJyZW50KWNsZWFyVGltZW91dChGKSxrKCEwKSxyKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoRiksTT8uKCksaS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoaS5jdXJyZW50KSxpLmN1cnJlbnQ9bnVsbH19LFtOLFZdKTtsZXQgJDE9aCgoTyk9PntsZXQgRj1EMihzLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sTT1OMihGLE8ueCxPLnkpLEE9Ty5lZGdlPT09dm9pZCAwP3ZvaWQgMDpONShGLE8uZWRnZSksZz1BPT09dm9pZCAwP3t0eXBlOk8udHlwZSwuLi5NfTp7dHlwZTpPLnR5cGUsLi4uTSxlZGdlOkF9O2lmKE4pe1k/LihnKTtyZXR1cm59bGV0IG89RS5jdXJyZW50O2lmKCFvfHxvLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHExPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShnKSksZT1uZXcgVWludDhBcnJheSgxK3ExLmxlbmd0aCk7ZVswXT1ROSxlLnNldChxMSwxKSxvLnNlbmQoZSl9LFtOLFldKSxQMT1oKChPKT0+e2lmKE4pe18/LihPKTtyZXR1cm59bGV0IEY9RS5jdXJyZW50O2lmKCFGfHxGLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IE09bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246T30pKSxBPW5ldyBVaW50OEFycmF5KDErTS5sZW5ndGgpO0FbMF09WTksQS5zZXQoTSwxKSxGLnNlbmQoQSl9LFtOLF9dKSxNMT1oKChPKT0+e2xldCBGPUQyKHMuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixNPU4yKEYsTy54MSxPLnkxKSxBPU4yKEYsTy54MixPLnkyKSxnPXt0eXBlOk8udHlwZSx4MTpNLngseTE6TS55LHgyOkEueCx5MjpBLnl9O2lmKE4peyQ/LihnKTtyZXR1cm59bGV0IG89RS5jdXJyZW50O2lmKCFvfHxvLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IHExPW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShnKSksZT1uZXcgVWludDhBcnJheSgxK3ExLmxlbmd0aCk7ZVswXT0kOSxlLnNldChxMSwxKSxvLnNlbmQoZSl9LFtOLCRdKTtiKCgpPT57aWYoTilyZXR1cm47bGV0IE89bmV3IEFib3J0Q29udHJvbGxlcixGPSgpPT57ZmV0Y2goYCR7Q30vY29uZmlnYCx7c2lnbmFsOk8uc2lnbmFsfSkudGhlbigoZTEpPT5lMS5qc29uKCkpLnRoZW4oKGUxKT0+e1MoZTEpfSkuY2F0Y2goKCk9Pnt9KX07RigpO2xldCBNPXNldEludGVydmFsKEYsMTAwMCksQT1aPz9DLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixnPW5ldyBXZWJTb2NrZXQoQSk7Zy5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsRS5jdXJyZW50PWcsZy5vbm9wZW49KCk9PntrKCEwKSxyKG51bGwpfSxnLm9uY2xvc2U9KCk9PntrKCExKX0sZy5vbmVycm9yPSgpPT57cigiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksayghMSl9O2xldCBvPW5ldyBBYm9ydENvbnRyb2xsZXIscTE9c2V0SW50ZXJ2YWwoKCk9PntwKFkxLmN1cnJlbnQpLFkxLmN1cnJlbnQ9MH0sMTAwMCksZT0hMSx0MT1zZXRUaW1lb3V0KCgpPT57aWYoIWUpcigiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApO3JldHVybihhc3luYygpPT57dHJ5e2xldCB4NT0oYXdhaXQgZmV0Y2goRzEse3NpZ25hbDpvLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZigheDUpcmV0dXJuO2xldCBzMj1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoIi0tZnJhbWUiKTt3aGlsZSghMCl7bGV0e2RvbmU6QTgsdmFsdWU6bjJ9PWF3YWl0IHg1LnJlYWQoKTtpZihBOClicmVhaztpZihuMilmb3IobGV0IHQyPTA7dDI8PW4yLmxlbmd0aC1zMi5sZW5ndGg7dDIrKyl7bGV0IGY1PSEwO2ZvcihsZXQgejI9MDt6MjxzMi5sZW5ndGg7ejIrKylpZihuMlt0Mit6Ml0hPT1zMlt6Ml0pe2Y1PSExO2JyZWFrfWlmKGY1KXtpZihZMS5jdXJyZW50KyssIWUpZT0hMCxjbGVhclRpbWVvdXQodDEpfX19fWNhdGNoe319KSgpLCgpPT57by5hYm9ydCgpLE8uYWJvcnQoKSxjbGVhckludGVydmFsKE0pLGNsZWFySW50ZXJ2YWwocTEpLGNsZWFyVGltZW91dCh0MSksZy5jbG9zZSgpLEUuY3VycmVudD1udWxsfX0sW0MsRzEsTixTLFpdKTtsZXQgYjE9UigwKTtiKCgpPT57aWYoIU4pcmV0dXJuO2xldCBPPTIwMDAsRj0oKT0+e2xldCBnPWIxLmN1cnJlbnQ7aWYoIWd8fCFkLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktZz5PKWsoITEpfSxNPXNldEludGVydmFsKCgpPT57cChZMS5jdXJyZW50KSxZMS5jdXJyZW50PTAsRigpfSwxMDAwKSxBPSgpPT57aWYoIWRvY3VtZW50LmhpZGRlbilGKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixBKSwoKT0+e2NsZWFySW50ZXJ2YWwoTSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsQSl9fSxbTl0pO2xldCBpMT1oKCgpPT57cmV0dXJuIE4/Vy5jdXJyZW50OlUuY3VycmVudH0sW05dKSxIMT1oKCgpPT57cmV0dXJuIHkuY3VycmVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P2kxKCk/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpPz9udWxsfSxbaTFdKSxvMT1oKChPLEYpPT57bGV0IE09SDEoKTtpZighTSlyZXR1cm47bGV0IEE9KEYuY2xpZW50WC1NLmxlZnQpL00ud2lkdGgsZz0oRi5jbGllbnRZLU0udG9wKS9NLmhlaWdodDskMSh7dHlwZTpPLHg6QSx5Omd9KX0sW0gxLCQxXSksRDE9UighMSksVzE9UighMSksWTI9UighMSksYzE9Uih7ZHg6MCxkeTowfSksbTE9UighMSksWyQyLHIxXT1JKCExKSxWMj1SKHt4OjAuNSx5OjAuNX0pLFtUMSxOMV09SShudWxsKTtiKCgpPT57bGV0IE89KE0pPT57aWYoTS5rZXk9PT0iQWx0IilyMSghMCl9LEY9KE0pPT57aWYoTS5rZXk9PT0iQWx0Iil7aWYocjEoITEpLCFXMS5jdXJyZW50KU4xKG51bGwpfX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixPKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLEYpLCgpPT57d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLE8pLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsRil9fSxbXSksYigoKT0+e2lmKCQyJiYhVzEuY3VycmVudCl7bGV0IE89VjIuY3VycmVudDtOMSh7eDE6Ty54LHkxOk8ueSx4MjoxLU8ueCx5MjoxLU8ueX0pfWVsc2UgaWYoISQyJiYhVzEuY3VycmVudClOMShudWxsKX0sWyQyXSk7bGV0IHMxPVIobnVsbCksdzE9UighMSkseDE9UigwKSxVMj1oKChPLEYpPT57dzEuY3VycmVudD0hMDtsZXQgTT1zMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoeDEuY3VycmVudCkseDEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntNLnN0eWxlLmxlZnQ9YCR7TyoxMDB9JWAsTS5zdHlsZS50b3A9YCR7RioxMDB9JWAsTS5zdHlsZS5kaXNwbGF5PSJibG9jayJ9KX0sW10pLHQ9aCgoTyxGKT0+e2lmKCF3MS5jdXJyZW50KXJldHVybjtsZXQgTT1zMS5jdXJyZW50O2lmKE0pY2FuY2VsQW5pbWF0aW9uRnJhbWUoeDEuY3VycmVudCkseDEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntNLnN0eWxlLmxlZnQ9YCR7TyoxMDB9JWAsTS5zdHlsZS50b3A9YCR7RioxMDB9JWB9KX0sW10pLHkxPWgoKCk9Pnt3MS5jdXJyZW50PSExO2xldCBPPXMxLmN1cnJlbnQ7aWYoTyljYW5jZWxBbmltYXRpb25GcmFtZSh4MS5jdXJyZW50KSxPLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxbXSksTzI9UigwKSxmMT1SKG51bGwpLHIyPWgoKCk9PntsZXQgTz1EYXRlLm5vdygpLEY9Ty1PMi5jdXJyZW50O2lmKE8yLmN1cnJlbnQ9TyxGPDMwMCl7aWYoZjEuY3VycmVudCljbGVhclRpbWVvdXQoZjEuY3VycmVudCksZjEuY3VycmVudD1udWxsO2lmKFgpWCgpO2Vsc2UgUDEoImFwcF9zd2l0Y2hlciIpfWVsc2UgZjEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoWClYKCk7ZWxzZSBQMSgiaG9tZSIpO2YxLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW1AxLFhdKSxuMT1EMihhKSx6PW4xLmRpc3BsYXlDb25maWcsVD0oKCk9PntpZighenx8IXoxKXJldHVybiBudWxsO2lmKHoxLndpZHRoPT09MHx8ejEuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgTz1NYXRoLm1pbih6MS53aWR0aC96LndpZHRoLHoxLmhlaWdodC96LmhlaWdodCk7cmV0dXJue3dpZHRoOnoud2lkdGgqTyxoZWlnaHQ6ei5oZWlnaHQqT319KSgpLG09bjEucm90YXRpb25EZWdyZWVzLHU9bjEubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMobSk9PT05MCxKMT1KLF8xPXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOnUmJlQ/YCR7VC5oZWlnaHR9cHhgOiIxMDAlIixoZWlnaHQ6dSYmVD9gJHtULndpZHRofXB4YDoiMTAwJSIsdHJhbnNmb3JtOmB0cmFuc2xhdGUoLTUwJSwgLTUwJSkke209PT0wPyIiOmAgcm90YXRlKCR7bX1kZWcpYH1gLHRyYW5zZm9ybU9yaWdpbjoiY2VudGVyIGNlbnRlciIsY3Vyc29yOmMzLGRpc3BsYXk6ImJsb2NrIix1c2VyU2VsZWN0OiJub25lIixXZWJraXRVc2VyU2VsZWN0OiJub25lIix0b3VjaEFjdGlvbjoibm9uZSIsLi4uSiwuLi5tPT09MD97fTp7Ym9yZGVyUmFkaXVzOjAsY29ybmVyU2hhcGU6dm9pZCAwfX07cmV0dXJuIFEoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGZsZXg6MSwuLi5EP3t9Ontib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sb3ZlcmZsb3c6ImhpZGRlbiIsbWluV2lkdGg6MCxtaW5IZWlnaHQ6MCwuLi5HfSxjbGFzc05hbWU6cSxjaGlsZHJlbjpbUSgiZGl2Iix7cmVmOksxLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLGZsZXg6MSxtaW5IZWlnaHQ6MCxtaW5XaWR0aDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciJ9LGNoaWxkcmVuOlEoImRpdiIse3JlZjp5LHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUiLHdpZHRoOlQ/YCR7VC53aWR0aH1weGA6IjEwMCUiLGhlaWdodDpUP2Ake1QuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOkoxPy5ib3JkZXJSYWRpdXMsY29ybmVyU2hhcGU6SjE/LmNvcm5lclNoYXBlfSxjaGlsZHJlbjpbUSgiaW1nIix7cmVmOlUsc3JjOk4/dm9pZCAwOkcxLGRyYWdnYWJsZTohMSxvbkxvYWQ6KE8pPT57bGV0IEY9Ty5jdXJyZW50VGFyZ2V0O2lmKEYubmF0dXJhbFdpZHRoPjAmJkYubmF0dXJhbEhlaWdodD4wKVMoe3dpZHRoOkYubmF0dXJhbFdpZHRoLGhlaWdodDpGLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6Tj97ZGlzcGxheToibm9uZSJ9Ol8xfSksTiYmUSgiaW1nIix7cmVmOlcsZHJhZ2dhYmxlOiExLG9uTG9hZDooTyk9PntsZXQgRj1PLmN1cnJlbnRUYXJnZXQ7aWYoRi5uYXR1cmFsV2lkdGg+MCYmRi5uYXR1cmFsSGVpZ2h0PjApUyh7d2lkdGg6Ri5uYXR1cmFsV2lkdGgsaGVpZ2h0OkYubmF0dXJhbEhlaWdodH0pfSxzdHlsZTpfMX0pLFEoImRpdiIse3N0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsY3Vyc29yOmMzLHRvdWNoQWN0aW9uOiJub25lIn0sb25Nb3VzZURvd246KE8pPT57Ty5wcmV2ZW50RGVmYXVsdCgpO2xldCBGPUgxKCk7aWYoIUYpcmV0dXJuO2xldCBNPShPLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLEE9KE8uY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7aWYoTy5hbHRLZXkpe1cxLmN1cnJlbnQ9ITAsWTIuY3VycmVudD1PLnNoaWZ0S2V5O2xldCBnPXt4MTpNLHkxOkEseDI6MS1NLHkyOjEtQX07YzEuY3VycmVudD17ZHg6MS1NLU0sZHk6MS1BLUF9LE4xKGcpLE0xKHt0eXBlOiJiZWdpbiIsLi4uZ30pO3JldHVybn1pZihVMihNLEEpLEE+MC44OClEMS5jdXJyZW50PSEwLCQxKHt0eXBlOiJiZWdpbiIseDpNLHk6QSxlZGdlOmQxfSk7ZWxzZSBEMS5jdXJyZW50PSExLG8xKCJiZWdpbiIsTyl9LG9uTW91c2VNb3ZlOihPKT0+e2xldCBGPUgxKCk7aWYoIUYpcmV0dXJuO2xldCBNPShPLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLEE9KE8uY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7aWYoVjIuY3VycmVudD17eDpNLHk6QX0sTy5idXR0b25zPT09MCl7aWYoTy5hbHRLZXkpTjEoe3gxOk0seTE6QSx4MjoxLU0seTI6MS1BfSk7cmV0dXJufWlmKFcxLmN1cnJlbnQpe2xldCBnO2lmKFkyLmN1cnJlbnQpe2xldCBvPWMxLmN1cnJlbnQ7Zz17eDE6TSx5MTpBLHgyOk0rby5keCx5MjpBK28uZHl9fWVsc2UgZz17eDE6TSx5MTpBLHgyOjEtTSx5MjoxLUF9O04xKGcpLE0xKHt0eXBlOiJtb3ZlIiwuLi5nfSk7cmV0dXJufWlmKHQoTSxBKSxEMS5jdXJyZW50KSQxKHt0eXBlOiJtb3ZlIix4Ok0seTpBLGVkZ2U6ZDF9KTtlbHNlIG8xKCJtb3ZlIixPKX0sb25Nb3VzZVVwOihPKT0+e2lmKFcxLmN1cnJlbnQpe2xldCBGPUgxKCk7aWYoRil7bGV0IE09KE8uY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsQT0oTy5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihZMi5jdXJyZW50KXtsZXQgZz1jMS5jdXJyZW50O00xKHt0eXBlOiJlbmQiLHgxOk0seTE6QSx4MjpNK2cuZHgseTI6QStnLmR5fSl9ZWxzZSBNMSh7dHlwZToiZW5kIix4MTpNLHkxOkEseDI6MS1NLHkyOjEtQX0pfWlmKFcxLmN1cnJlbnQ9ITEsIU8uYWx0S2V5KU4xKG51bGwpO3JldHVybn1pZih5MSgpLEQxLmN1cnJlbnQpe2xldCBGPUgxKCk7aWYoRil7bGV0IE09KE8uY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsQT0oTy5jbGllbnRZLUYudG9wKS9GLmhlaWdodDskMSh7dHlwZToiZW5kIix4Ok0seTpBLGVkZ2U6ZDF9KX1EMS5jdXJyZW50PSExO3JldHVybn1vMSgiZW5kIixPKX0sb25Nb3VzZUxlYXZlOihPKT0+e2lmKFcxLmN1cnJlbnQpe2lmKFQxKU0xKHt0eXBlOiJlbmQiLC4uLlQxfSk7VzEuY3VycmVudD0hMSxOMShudWxsKTtyZXR1cm59aWYoeTEoKSxEMS5jdXJyZW50KXtsZXQgRj1IMSgpO2lmKEYpe2xldCBNPShPLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLEE9KE8uY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7JDEoe3R5cGU6ImVuZCIseDpNLHk6QSxlZGdlOmQxfSl9RDEuY3VycmVudD0hMTtyZXR1cm59aWYoTy5idXR0b25zPjApbzEoImVuZCIsTyk7TjEobnVsbCl9LG9uVG91Y2hTdGFydDooTyk9PntPLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9SDEoKTtpZighRilyZXR1cm47aWYoTy50b3VjaGVzLmxlbmd0aD49Mil7eTEoKTtsZXQgbz1PLnRvdWNoZXNbMF0scTE9Ty50b3VjaGVzWzFdLGU9e3gxOihvLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkxOihvLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0LHgyOihxMS5jbGllbnRYLUYubGVmdCkvRi53aWR0aCx5MjoocTEuY2xpZW50WS1GLnRvcCkvRi5oZWlnaHR9O2lmKCFtMS5jdXJyZW50JiYhRDEuY3VycmVudCkkMSh7dHlwZToiZW5kIix4OmUueDEseTplLnkxfSk7bTEuY3VycmVudD0hMCxXMS5jdXJyZW50PSEwLEQxLmN1cnJlbnQ9ITEsTjEoZSksTTEoe3R5cGU6ImJlZ2luIiwuLi5lfSk7cmV0dXJufWxldCBNPU8udG91Y2hlc1swXTtpZighTSlyZXR1cm47bGV0IEE9KE0uY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsZz0oTS5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZihVMihBLGcpLGc+MC44OClEMS5jdXJyZW50PSEwLCQxKHt0eXBlOiJiZWdpbiIseDpBLHk6ZyxlZGdlOmQxfSk7ZWxzZSBEMS5jdXJyZW50PSExLCQxKHt0eXBlOiJiZWdpbiIseDpBLHk6Z30pfSxvblRvdWNoTW92ZTooTyk9PntPLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9SDEoKTtpZighRilyZXR1cm47aWYobTEuY3VycmVudCYmTy50b3VjaGVzLmxlbmd0aD49Mil7bGV0IG89Ty50b3VjaGVzWzBdLHExPU8udG91Y2hlc1sxXSxlPXt4MTooby5jbGllbnRYLUYubGVmdCkvRi53aWR0aCx5MTooby5jbGllbnRZLUYudG9wKS9GLmhlaWdodCx4MjoocTEuY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgseTI6KHExLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0fTtOMShlKSxNMSh7dHlwZToibW92ZSIsLi4uZX0pO3JldHVybn1sZXQgTT1PLnRvdWNoZXNbMF07aWYoIU0pcmV0dXJuO2xldCBBPShNLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLGc9KE0uY2xpZW50WS1GLnRvcCkvRi5oZWlnaHQ7aWYodChBLGcpLEQxLmN1cnJlbnQpJDEoe3R5cGU6Im1vdmUiLHg6QSx5OmcsZWRnZTpkMX0pO2Vsc2UgJDEoe3R5cGU6Im1vdmUiLHg6QSx5Omd9KX0sb25Ub3VjaEVuZDooTyk9PntPLnByZXZlbnREZWZhdWx0KCk7bGV0IEY9SDEoKTtpZighRilyZXR1cm47aWYobTEuY3VycmVudCl7aWYoTy50b3VjaGVzLmxlbmd0aDwyKXtsZXQgbz1PLmNoYW5nZWRUb3VjaGVzWzBdLHExPVQxO2lmKG8mJnExKU0xKHt0eXBlOiJlbmQiLHgxOihvLmNsaWVudFgtRi5sZWZ0KS9GLndpZHRoLHkxOihvLmNsaWVudFktRi50b3ApL0YuaGVpZ2h0LHgyOnExLngyLHkyOnExLnkyfSk7ZWxzZSBpZihxMSlNMSh7dHlwZToiZW5kIiwuLi5xMX0pO20xLmN1cnJlbnQ9ITEsVzEuY3VycmVudD0hMSxOMShudWxsKX1yZXR1cm59bGV0IE09Ty5jaGFuZ2VkVG91Y2hlc1swXTtpZighTSlyZXR1cm47bGV0IEE9KE0uY2xpZW50WC1GLmxlZnQpL0Yud2lkdGgsZz0oTS5jbGllbnRZLUYudG9wKS9GLmhlaWdodDtpZih5MSgpLEQxLmN1cnJlbnQpJDEoe3R5cGU6ImVuZCIseDpBLHk6ZyxlZGdlOmQxfSksRDEuY3VycmVudD0hMTtlbHNlICQxKHt0eXBlOiJlbmQiLHg6QSx5Omd9KX19KSxRKCJkaXYiLHtyZWY6czEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxUMSYmUShYMSx7Y2hpbGRyZW46W1EoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmkzKFQxLngxLFQxLnkxKX0pLFEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOmkzKFQxLngyLFQxLnkyKX0pXX0pLCFmJiYhdiYmUSgiZGl2Iix7c3R5bGU6ey4uLmwzLC4uLkp8fHt9fSxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSx2JiZRKCJkaXYiLHtzdHlsZTpsMyxjaGlsZHJlbjpRKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46dn0pfSksSTEmJlEoImRpdiIse3N0eWxlOlY5LGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiNmYmJmMjQiLGZvbnRTaXplOjEzLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSJ9LGNoaWxkcmVuOiJTbG93IGNvbm5lY3Rpb24ifSl9KV19KX0pLCFEJiZRKCJkaXYiLHtzdHlsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNHB4IDhweCIsYm9yZGVyVG9wOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSJ9LGNoaWxkcmVuOltRKCJidXR0b24iLHtvbkNsaWNrOnIyLHN0eWxlOntiYWNrZ3JvdW5kOiJub25lIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMikiLGNvbG9yOiIjYWFhIixmb250U2l6ZToxMSxmb250RmFtaWx5OiJtb25vc3BhY2UiLHBhZGRpbmc6IjJweCAxMHB4IixjdXJzb3I6InBvaW50ZXIiLGJvcmRlclJhZGl1czo0fSxjaGlsZHJlbjoiSG9tZSJ9KSxRKCJzcGFuIix7c3R5bGU6e2NvbG9yOmw+MD8iIzRmNCI6IiM4ODgiLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6Nn0sY2hpbGRyZW46W0smJlEoInNwYW4iLHsiZGF0YS10ZXN0aWQiOiJxdWFsaXR5LWRvdCIsc3R5bGU6e3dpZHRoOjgsaGVpZ2h0OjgsYm9yZGVyUmFkaXVzOiI1MCUiLGRpc3BsYXk6ImlubGluZS1ibG9jayIsYmFja2dyb3VuZDpLPT09Imdvb2QiPyIjNGFkZTgwIjpLPT09ImRlZ3JhZGVkIj8iI2ZhY2MxNSI6IiNlZjQ0NDQifX0pLGwsIiBmcHMiXX0pXX0pXX0pfXZhciBWOT17cG9zaXRpb246ImFic29sdXRlIix0b3A6OCxsZWZ0OiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWCgtNTAlKSIsYmFja2dyb3VuZDoicmdiYSgwLDAsMCwwLjcpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI0cHggMTJweCIscG9pbnRlckV2ZW50czoibm9uZSJ9LGwzPXtwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuOCkifSxhMz0yMDtmdW5jdGlvbiBpMyhDLFope3JldHVybntwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6YCR7QyoxMDB9JWAsdG9wOmAke1oqMTAwfSVgLHdpZHRoOmEzLGhlaWdodDphMyxib3JkZXJSYWRpdXM6IjUwJSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSIsYm9yZGVyOiIxLjI1cHggc29saWQgcmdiYSgwLDAsMCwwLjU1KSIsYm94U2hhZG93OiIwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQ1KSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoLTUwJSwgLTUwJSkiLHBvaW50ZXJFdmVudHM6Im5vbmUifX1mdW5jdGlvbiBxMihDKXtpZighQylyZXR1cm4iaXBob25lIjtsZXQgWj1DLnRvTG93ZXJDYXNlKCk7aWYoWi5pbmNsdWRlcygiaXBhZCIpKXJldHVybiJpcGFkIjtpZihaLmluY2x1ZGVzKCJ3YXRjaCIpKXJldHVybiJ3YXRjaCI7aWYoWi5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuInZpc2lvbiI7cmV0dXJuImlwaG9uZSJ9dmFyIEExPXtpcGhvbmU6e3dpZHRoOjQyNyxoZWlnaHQ6ODgxLGJlemVsWDoxOCxiZXplbFk6MTgsaW5uZXJSYWRpdXM6NTV9LGlwYWQ6e3dpZHRoOjQzMCxoZWlnaHQ6NjA1LGJlemVsWDoxNixiZXplbFk6MTYsaW5uZXJSYWRpdXM6MTJ9LHdhdGNoOnt3aWR0aDoyNzQsaGVpZ2h0OjMyMixiZXplbFg6MTIsYmV6ZWxZOjEyLGlubmVyUmFkaXVzOjc5fSx2aXNpb246e3dpZHRoOjY0MCxoZWlnaHQ6NDAwLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6MzJ9fSxtNj1BMS5pcGhvbmUud2lkdGgseDY9QTEuaXBob25lLmhlaWdodCxmNj1BMS5pcGhvbmUuYmV6ZWxYLHA2PUExLmlwaG9uZS5iZXplbFksdTY9QTEuaXBob25lLmlubmVyUmFkaXVzLG8zPXsiaVBob25lIDE3IFBybyBNYXgiOnt3aWR0aDoxMzIwLGhlaWdodDoyODY4fSwiaVBob25lIDE3IFBybyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgMTciOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIEFpciI6e3dpZHRoOjEyNjAsaGVpZ2h0OjI3MzZ9LCJpUGhvbmUgMTYgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTYgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNiBQbHVzIjp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNiI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTZlIjp7d2lkdGg6MTE3MCxoZWlnaHQ6MjUzMn0sImlQaG9uZSAxNSBQcm8gTWF4Ijp7d2lkdGg6MTI5MCxoZWlnaHQ6Mjc5Nn0sImlQaG9uZSAxNSBQcm8iOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBob25lIDE1IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQYWQgUHJvIDEzLWluY2ggKE01KSI6e3dpZHRoOjIwNjQsaGVpZ2h0OjI3NTJ9LCJpUGFkIFBybyAxMS1pbmNoIChNNSkiOnt3aWR0aDoxNjY4LGhlaWdodDoyNDIwfSwiaVBhZCBQcm8gMTMtaW5jaCAoTTQpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE00KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIEFpciAxMy1pbmNoIChNMykiOnt3aWR0aDoyMDQ4LGhlaWdodDoyNzMyfSwiaVBhZCBBaXIgMTEtaW5jaCAoTTMpIjp7d2lkdGg6MTY0MCxoZWlnaHQ6MjM2MH0sImlQYWQgKEExNikiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCBtaW5pIChBMTcgUHJvKSI6e3dpZHRoOjE0ODgsaGVpZ2h0OjIyNjZ9LCJBcHBsZSBXYXRjaCBVbHRyYSAzICg0OW1tKSI6e3dpZHRoOjQyMixoZWlnaHQ6NTE0fSwiQXBwbGUgV2F0Y2ggVWx0cmEgMiAoNDltbSkiOnt3aWR0aDo0MTAsaGVpZ2h0OjUwMn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMSAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDZtbSkiOnt3aWR0aDo0MTYsaGVpZ2h0OjQ5Nn0sIkFwcGxlIFdhdGNoIFNlcmllcyAxMCAoNDJtbSkiOnt3aWR0aDozNzQsaGVpZ2h0OjQ0Nn0sIkFwcGxlIFdhdGNoIFNFIDMgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAzICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgV2F0Y2ggU0UgKDQ0bW0pIjp7d2lkdGg6MzY4LGhlaWdodDo0NDh9LCJBcHBsZSBXYXRjaCBTRSAoNDBtbSkiOnt3aWR0aDozMjQsaGVpZ2h0OjM5NH0sIkFwcGxlIFZpc2lvbiBQcm8iOnt3aWR0aDoxOTIwLGhlaWdodDoxMDgwfX07ZnVuY3Rpb24gajIoQyxaKXtsZXQgRz1DJiZDLndpZHRoPjAmJkMuaGVpZ2h0PjA/QzpaLEo9SjIoRyk7aWYoSilyZXR1cm5gJHtKLndpZHRofSAvICR7Si5oZWlnaHR9YDtyZXR1cm5gJHtBMS5pcGhvbmUud2lkdGgtMipBMS5pcGhvbmUuYmV6ZWxYfSAvICR7QTEuaXBob25lLmhlaWdodC0yKkExLmlwaG9uZS5iZXplbFl9YH1mdW5jdGlvbiBoMihDPSJpcGhvbmUiLFope2xldCBHPVo/bzNbWl06bnVsbDtpZihHKXJldHVybiBHO2xldCBKPUExW0NdO3JldHVybnt3aWR0aDpKLndpZHRoLTIqSi5iZXplbFgsaGVpZ2h0OkouaGVpZ2h0LTIqSi5iZXplbFl9fWZ1bmN0aW9uIHYyKEM9ImlwaG9uZSIsWil7aWYoSDIoWikpc3dpdGNoKEMpe2Nhc2UiaXBhZCI6cmV0dXJuIDcyMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtjYXNlIndhdGNoIjpyZXR1cm4gMjAwO2RlZmF1bHQ6cmV0dXJuIDYyMH1zd2l0Y2goQyl7Y2FzZSJpcGFkIjpyZXR1cm4gNDAwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7Y2FzZSJ2aXNpb24iOnJldHVybiA1ODA7ZGVmYXVsdDpyZXR1cm4gMzIwfX1mdW5jdGlvbiBnMihDPSJpcGhvbmUiLFope2xldCBHPUExW0NdLEo9Ry53aWR0aC0yKkcuYmV6ZWxYLHE9Ry5oZWlnaHQtMipHLmJlemVsWTtpZihKPHEmJkgyKFopKXJldHVybmAke0cuaW5uZXJSYWRpdXMvcSoxMDB9JSAvICR7Ry5pbm5lclJhZGl1cy9KKjEwMH0lYDtyZXR1cm5gJHtHLmlubmVyUmFkaXVzL0oqMTAwfSUgLyAke0cuaW5uZXJSYWRpdXMvcSoxMDB9JWB9dmFyIEY1PWgxKG51bGwpO2Z1bmN0aW9uIG0yKEMpe2xldCBaPXUxKEY1KTtpZighWil0aHJvdyBFcnJvcihgPFNpbXVsYXRvclRvb2xiYXIuJHtDfT4gbXVzdCBiZSByZW5kZXJlZCBpbnNpZGUgPFNpbXVsYXRvclRvb2xiYXI+YCk7cmV0dXJuIFp9dmFyIEI5PXtkaXNwbGF5OiJmbGV4IixmbGV4V3JhcDoid3JhcCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOiI0cHggMTJweCIscGFkZGluZzoiOHB4IDEycHgiLGJvcmRlclJhZGl1czoyNCxiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMSkiLGJveFNoYWRvdzoiMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKSIsbWluV2lkdGg6MjQwLHdpZHRoOiIxMDAlIn07ZnVuY3Rpb24gSDkoe2V4ZWM6QyxvblJvdGF0ZTpaLG9yaWVudGF0aW9uOkcsZGV2aWNlVWRpZDpKLGRldmljZU5hbWU6cSxkZXZpY2VSdW50aW1lOlgsc3RyZWFtaW5nOlk9ITEsZGlzYWJsZWQ6JD0hMSxjaGlsZHJlbjpfLHN0eWxlOlYsLi4uQn0pe2xldCBMPXEyKHEpLEQ9e2V4ZWM6QyxvblJvdGF0ZTpaLG9yaWVudGF0aW9uOkcsZGV2aWNlVWRpZDpKLGRldmljZU5hbWU6cSxkZXZpY2VSdW50aW1lOlgsZGV2aWNlVHlwZTpMLHN0cmVhbWluZzpZLGRpc2FibGVkOiR8fCFKfHwhWX07cmV0dXJuIFEoRjUuUHJvdmlkZXIse3ZhbHVlOkQsY2hpbGRyZW46USgiZGl2Iix7ImRhdGEtc2ltdWxhdG9yLXRvb2xiYXIiOiEwLHN0eWxlOnsuLi5COSwuLi5WfSwuLi5CLGNoaWxkcmVuOl99KX0pfXZhciBEOT17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJmbGV4LXN0YXJ0Iix0ZXh0QWxpZ246ImxlZnQiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjZmZmIixwYWRkaW5nOiIycHggNHB4IixtYXJnaW46Ii0ycHggLTRweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixtaW5XaWR0aDowLG1heFdpZHRoOiIxMDAlIixsaW5lSGVpZ2h0OjEuMixmb250RmFtaWx5OiJpbmhlcml0In0sTjk9RzIoZnVuY3Rpb24oe25hbWU6WixzdWJ0aXRsZTpHLGhpZGVDaGV2cm9uOkosc3R5bGU6cSxvbk1vdXNlRW50ZXI6WCxvbk1vdXNlTGVhdmU6WSwuLi4kfSxfKXtsZXQgVj1tMigiVGl0bGUiKSxbQixMXT1JKCExKSxIPVo/P1YuZGV2aWNlTmFtZT8/Ik5vIHNpbXVsYXRvciIsRD1HPz8oVi5kZXZpY2VSdW50aW1lP1YuZGV2aWNlUnVudGltZS5yZXBsYWNlKC9cLi8sIiAiKToi4oCUIik7cmV0dXJuIFEoImJ1dHRvbiIse3JlZjpfLHR5cGU6ImJ1dHRvbiIsImRhdGEtc2ltdWxhdG9yLXRvb2xiYXItdGl0bGUiOiEwLG9uTW91c2VFbnRlcjooUCk9PntMKCEwKSxYPy4oUCl9LG9uTW91c2VMZWF2ZTooUCk9PntMKCExKSxZPy4oUCl9LHN0eWxlOnsuLi5EOSxiYWNrZ3JvdW5kOkI/InJnYmEoMjU1LDI1NSwyNTUsMC4xKSI6InRyYW5zcGFyZW50IiwuLi5xfSwuLi4kLGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6e2Rpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiIjZmZmIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46W0gsIUomJlEoInN2ZyIse3dpZHRoOiIxMCIsaGVpZ2h0OiIxMCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSldfSksUSgic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixtYXhXaWR0aDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sY2hpbGRyZW46RH0pXX0pfSksRjk9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZmxleFNocmluazowfTtmdW5jdGlvbiBVOSh7c3R5bGU6QywuLi5afSl7cmV0dXJuIFEoImRpdiIse3N0eWxlOnsuLi5GOSwuLi5DfSwuLi5afSl9dmFyIE85PXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixwYWRkaW5nOjYsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzLCBjb2xvciAwLjE1cyJ9LHgyPUcyKGZ1bmN0aW9uKHtmb3JjZURpc2FibGVkOlosc3R5bGU6RyxkaXNhYmxlZDpKLG9uTW91c2VFbnRlcjpxLG9uTW91c2VMZWF2ZTpYLGNoaWxkcmVuOlksLi4uJH0sXyl7bGV0IFY9dTEoRjUpLEI9Snx8Wnx8Vj8uZGlzYWJsZWQsW0wsSF09SSghMSk7cmV0dXJuIFEoImJ1dHRvbiIse3JlZjpfLHR5cGU6ImJ1dHRvbiIsZGlzYWJsZWQ6Qixvbk1vdXNlRW50ZXI6KEQpPT57SCghMCkscT8uKEQpfSxvbk1vdXNlTGVhdmU6KEQpPT57SCghMSksWD8uKEQpfSxzdHlsZTp7Li4uTzksY29sb3I6Qj8icmdiYSgyNTUsMjU1LDI1NSwwLjI1KSI6InJnYmEoMjU1LDI1NSwyNTUsMC44KSIsYmFja2dyb3VuZDpMJiYhQj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLGN1cnNvcjpCPyJub3QtYWxsb3dlZCI6InBvaW50ZXIiLC4uLkd9LC4uLiQsY2hpbGRyZW46WX0pfSk7ZnVuY3Rpb24gejkoKXtyZXR1cm5bJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBzZXQgZnJvbnRtb3N0IHRvIHRydWUnLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gcGVyZm9ybSBhY3Rpb24gIkFYUmFpc2UiIG9mIChmaXJzdCB3aW5kb3cgd2hvc2UgbmFtZSBjb250YWlucyAid2F0Y2hPUyIpJywndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIGNsaWNrIG1lbnUgaXRlbSAiSG9tZSIgb2YgbWVudSAiRGV2aWNlIiBvZiBtZW51IGJhciBpdGVtICJEZXZpY2UiIG9mIG1lbnUgYmFyIDEnXS5tYXAoKFopPT5gLWUgJyR7Wn0nYCkucmVkdWNlKChaLEcpPT5gJHtafSAke0d9YCwib3Nhc2NyaXB0Iil9dmFyIFA5PXtwb3J0cmFpdDoibGFuZHNjYXBlX2xlZnQiLGxhbmRzY2FwZV9sZWZ0OiJwb3J0cmFpdF91cHNpZGVfZG93biIscG9ydHJhaXRfdXBzaWRlX2Rvd246ImxhbmRzY2FwZV9yaWdodCIsbGFuZHNjYXBlX3JpZ2h0OiJwb3J0cmFpdCJ9LE05PVEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNMyAxMC41IDEyIDNsOSA3LjVWMjBhMSAxIDAgMCAxLTEgMWgtNXYtN2gtNnY3SDRhMSAxIDAgMCAxLTEtMXoifSl9KSxXOT1RKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik0xNC41IDRoLTVMNyA3SDRhMiAyIDAgMCAwLTIgMnY5YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMlY5YTIgMiAwIDAgMC0yLTJoLTN6In0pLFEoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEzIixyOiI0In0pXX0pLGs5PVEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDEyIDEzIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsY2hpbGRyZW46USgicGF0aCIse2Q6Ik0xMC4yMzA1IDEyLjgwNzdINC40MjM4M0MzLjkyMzgzIDEyLjgwNzcgMy41NDY4OCAxMi42ODQ2IDMuMjkyOTcgMTIuNDM4NUMzLjA0Mjk3IDEyLjE5NjMgMi45MTc5NyAxMS44MTk0IDIuOTE3OTcgMTEuMzA3N1Y1LjUxMjc0QzIuOTE3OTcgNC45OTcxMSAzLjA0Mjk3IDQuNjE4MjEgMy4yOTI5NyA0LjM3NjAyQzMuNTQ2ODggNC4xMjk5MyAzLjkyMzgzIDQuMDA2ODggNC40MjM4MyA0LjAwNjg4SDEwLjIzMDVDMTAuNzM0NCA0LjAwNjg4IDExLjExMTMgNC4xMjk5MyAxMS4zNjEzIDQuMzc2MDJDMTEuNjExMyA0LjYxODIxIDExLjczNjMgNC45OTcxMSAxMS43MzYzIDUuNTEyNzRWMTEuMzA3N0MxMS43MzYzIDExLjgxOTQgMTEuNjExMyAxMi4xOTYzIDExLjM2MTMgMTIuNDM4NUMxMS4xMTEzIDEyLjY4NDYgMTAuNzM0NCAxMi44MDc3IDEwLjIzMDUgMTIuODA3N1pNMTAuMjEyOSAxMS44NjQzQzEwLjQxNiAxMS44NjQzIDEwLjU2MjUgMTEuODE5NCAxMC42NTIzIDExLjcyOTVDMTAuNzQ2MSAxMS42NDM2IDEwLjc5MyAxMS40OTcxIDEwLjc5MyAxMS4yOTAxVjUuNTI0NDZDMTAuNzkzIDUuMzE3NDMgMTAuNzQ2MSA1LjE3MDk0IDEwLjY1MjMgNS4wODUwMUMxMC41NjI1IDQuOTk1MTYgMTAuNDE2IDQuOTUwMjQgMTAuMjEyOSA0Ljk1MDI0SDQuNDQxNDFDNC4yNDIxOSA0Ljk1MDI0IDQuMDk1NyA0Ljk5NTE2IDQuMDAxOTUgNS4wODUwMUMzLjkwODIgNS4xNzA5NCAzLjg2MTMzIDUuMzE3NDMgMy44NjEzMyA1LjUyNDQ2VjExLjI5MDFDMy44NjEzMyAxMS40OTcxIDMuOTA4MiAxMS42NDM2IDQuMDAxOTUgMTEuNzI5NUM0LjA5NTcgMTEuODE5NCA0LjI0MjE5IDExLjg2NDMgNC40NDE0MSAxMS44NjQzSDEwLjIxMjlaTTIuOTE3OTcgMi41ODMwNVYwLjQxNTA4M0MyLjkxNzk3IDAuMjAwMjQgMi45ODYzMyAwLjA2OTM4MDMgMy4xMjMwNSAwLjAyMjUwNTNDMy4yNTk3NyAtMC4wMjgyNzU5IDMuNDEwMTYgMC4wMDY4ODAzMyAzLjU3NDIyIDAuMTI3OTc0TDUuMDUwNzggMS4yMTE5NkM1LjE3NTc4IDEuMzA1NzEgNS4yMzgyOCAxLjQwMTQxIDUuMjM4MjggMS40OTkwN0M1LjIzODI4IDEuNTk2NzIgNS4xNzU3OCAxLjY5MjQzIDUuMDUwNzggMS43ODYxOEwzLjU3NDIyIDIuODY0M0MzLjQxMDE2IDIuOTg1NCAzLjI1OTc3IDMuMDIyNTEgMy4xMjMwNSAyLjk3NTYzQzIuOTg2MzMgMi45MjQ4NSAyLjkxNzk3IDIuNzkzOTkgMi45MTc5NyAyLjU4MzA1Wk0zLjUzMzIgMS4xNTMzNkMzLjYyNjk1IDEuMTUzMzYgMy43MDcwMyAxLjE4NjU3IDMuNzczNDQgMS4yNTI5N0MzLjg0Mzc1IDEuMzE5MzggMy44Nzg5MSAxLjM5NzUxIDMuODc4OTEgMS40ODczNUMzLjg3ODkxIDEuNTgxMSAzLjg0Mzc1IDEuNjYzMTMgMy43NzM0NCAxLjczMzQ0QzMuNzA3MDMgMS43OTk4NSAzLjYyNjk1IDEuODMzMDUgMy41MzMyIDEuODMzMDVIMi44MDY2NEMyLjM4MDg2IDEuODMzMDUgMi4wMTE3MiAxLjkyNDg1IDEuNjk5MjIgMi4xMDg0NEMxLjM5MDYyIDIuMjg4MTMgMS4xNTIzNCAyLjUzODEzIDAuOTg0Mzc1IDIuODU4NDRDMC44MTY0MDYgMy4xNzg3NiAwLjczMjQyMiAzLjU0NTk0IDAuNzMyNDIyIDMuOTYwMDFWNC44Mzg5MUMwLjczMjQyMiA0LjkzNjU3IDAuNjk3MjY2IDUuMDIyNTEgMC42MjY5NTMgNS4wOTY3MkMwLjU1MjczNCA1LjE2NzA0IDAuNDY0ODQ0IDUuMjAyMTkgMC4zNjMyODEgNS4yMDIxOUMwLjI2NTYyNSA1LjIwMjE5IDAuMTgxNjQxIDUuMTY3MDQgMC4xMTEzMjggNS4wOTY3MkMwLjAzNzEwOTQgNS4wMjI1MSAwIDQuOTM2NTcgMCA0LjgzODkxVjMuOTYwMDFDMCAzLjQwMTQxIDAuMTE3MTg4IDIuOTExMTggMC4zNTE1NjIgMi40ODkzQzAuNTgyMDMxIDIuMDY3NDMgMC45MDgyMDMgMS43MzkzIDEuMzMwMDggMS41MDQ5M0MxLjc0ODA1IDEuMjcwNTUgMi4yMzgyOCAxLjE1MzM2IDIuODAwNzggMS4xNTMzNkgzLjUzMzJaIn0pfSksQTk9RzIoZnVuY3Rpb24oe29uQ2xpY2s6WiwuLi5HfSxKKXtsZXQgcT1tMigiSG9tZUJ1dHRvbiIpO3JldHVybiBRKHgyLHtyZWY6SiwiYXJpYS1sYWJlbCI6IkhvbWUiLG9uQ2xpY2s6KFgpPT57aWYoWj8uKFgpLFguZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYocS5kZXZpY2VUeXBlPT09IndhdGNoIilxLmV4ZWMoejkoKSk7ZWxzZSBxLmV4ZWMoInNlcnZlLXNpbSBidXR0b24gaG9tZSIpfSwuLi5HLGNoaWxkcmVuOk05fSl9KSxJOT1HMihmdW5jdGlvbih7b25DbGljazpaLC4uLkd9LEope2xldCBxPW0yKCJTY3JlZW5zaG90QnV0dG9uIik7cmV0dXJuIFEoeDIse3JlZjpKLCJhcmlhLWxhYmVsIjoiU2NyZWVuc2hvdCIsb25DbGljazooWCk9PntpZihaPy4oWCksWC5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihxLmRldmljZVVkaWQpcS5leGVjKGB4Y3J1biBzaW1jdGwgaW8gJHtxLmRldmljZVVkaWR9IHNjcmVlbnNob3Qgfi9EZXNrdG9wL3NlcnZlLXNpbS1zY3JlZW5zaG90LSQoZGF0ZSArJXMpLnBuZ2ApfSwuLi5HLGNoaWxkcmVuOlc5fSl9KSxUOT1HMihmdW5jdGlvbih7b25DbGljazpaLGZvcmNlRGlzYWJsZWQ6RywuLi5KfSxxKXtsZXQgWD1tMigiUm90YXRlQnV0dG9uIiksWT1YLmRldmljZVR5cGU9PT0id2F0Y2gifHxYLmRldmljZVR5cGU9PT0idmlzaW9uIixbJCxfXT1JKCJwb3J0cmFpdCIpO3JldHVybiBiKCgpPT57XyhYLm9yaWVudGF0aW9uPz8icG9ydHJhaXQiKX0sW1guZGV2aWNlVWRpZCxYLm9yaWVudGF0aW9uXSksUSh4Mix7cmVmOnEsImFyaWEtbGFiZWwiOiJSb3RhdGUgZGV2aWNlIixmb3JjZURpc2FibGVkOkd8fFksb25DbGljazooVik9PntpZihaPy4oViksVi5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZighWC5kZXZpY2VVZGlkfHxZKXJldHVybjtsZXQgQj1QOVtYLm9yaWVudGF0aW9uPz8kXTtpZihfKEIpLFgub25Sb3RhdGUpWC5vblJvdGF0ZShCKTtlbHNlIFguZXhlYyhgc2VydmUtc2ltIHJvdGF0ZSAke0J9IC1kICR7WC5kZXZpY2VVZGlkfWApfSwuLi5KLGNoaWxkcmVuOms5fSl9KSxPMT1IOTtPMS5UaXRsZT1OOTtPMS5BY3Rpb25zPVU5O08xLkJ1dHRvbj14MjtPMS5Ib21lQnV0dG9uPUE5O08xLlNjcmVlbnNob3RCdXR0b249STk7TzEuUm90YXRlQnV0dG9uPVQ5O2Z1bmN0aW9uIEU5KEMsWixHKXtsZXQgSj1HLmxhdCpNYXRoLlBJLzE4MCxxPShDLUcubGF0KSpNYXRoLlBJLzE4MDtyZXR1cm57eDooWi1HLmxuZykqTWF0aC5QSS8xODAqTWF0aC5jb3MoSikqNjM3MTAwMCx6Oi1xKjYzNzEwMDB9fWZ1bmN0aW9uIHc5KEMsWixHKXtsZXQgSj1HLmxhdCpNYXRoLlBJLzE4MCxxPS1aLzYzNzEwMDAqKDE4MC9NYXRoLlBJKSxYPUMvKDYzNzEwMDAqTWF0aC5jb3MoSikpKigxODAvTWF0aC5QSSk7cmV0dXJue2xhdDpHLmxhdCtxLGxuZzpHLmxuZytYfX1mdW5jdGlvbiBTOShDLFosRyxKLHEpe2xldCBYPXEqcSxZPVgqcSwkPShfLFYsQixMKT0+MC41KigyKlYrKC1fK0IpKnErKDIqXy01KlYrNCpCLUwpKlgrKC1fKzMqVi0zKkIrTCkqWSk7cmV0dXJue3g6JChDLngsWi54LEcueCxKLngpLHo6JChDLnosWi56LEcueixKLnopLHk6JChDLnksWi55LEcueSxKLnkpLHJhd0FsdDokKEMucmF3QWx0LFoucmF3QWx0LEcucmF3QWx0LEoucmF3QWx0KX19ZnVuY3Rpb24gYjkoQyxaLEcpe2lmKEMubGVuZ3RoPDIpcmV0dXJuIEMuc2xpY2UoKTtsZXQgSj1bXSxxPUMubGVuZ3RoLFg9Rz9xOnEtMTtmb3IobGV0IFk9MDtZPFg7WSsrKXtsZXQgJD1DW0c/KFktMStxKSVxOk1hdGgubWF4KDAsWS0xKV0sXz1DW1klcV0sVj1DWyhZKzEpJXFdLEI9Q1tHPyhZKzIpJXE6TWF0aC5taW4ocS0xLFkrMildLEw9Vi54LV8ueCxIPVYuei1fLnosRD1NYXRoLmh5cG90KEwsSCksUD1NYXRoLm1heCgyLE1hdGguY2VpbChEL1opKTtmb3IobGV0IEs9MDtLPFA7SysrKXtsZXQgTj1LL1A7Si5wdXNoKFM5KCQsXyxWLEIsTikpfX1pZighRylKLnB1c2goQ1txLTFdKTtyZXR1cm4gSn1mdW5jdGlvbiByMyhDKXtpZihDLndheXBvaW50cy5sZW5ndGg8Mil0aHJvdyBFcnJvcihgVHJhaWwgJHtDLmlkfSBuZWVkcyBhdCBsZWFzdCAyIHdheXBvaW50c2ApO2xldCBaPXtsYXQ6Qy53YXlwb2ludHMucmVkdWNlKChLLE4pPT5LK04ubGF0LDApL0Mud2F5cG9pbnRzLmxlbmd0aCxsbmc6Qy53YXlwb2ludHMucmVkdWNlKChLLE4pPT5LK04ubG5nLDApL0Mud2F5cG9pbnRzLmxlbmd0aH0sRz1DLndheXBvaW50cy5tYXAoKEspPT5LLmFsdD8/MCksSj1NYXRoLm1pbiguLi5HKSxxPU1hdGgubWF4KC4uLkcpLFg9Qy53YXlwb2ludHMubWFwKChLKT0+e2xldHt4Ok4sejpVfT1FOShLLmxhdCxLLmxuZyxaKSxXPUsuYWx0Pz8wO3JldHVybnt4Ok4sejpVLHk6Vy1KLHJhd0FsdDpXfX0pLFk9YjkoWCw4LCEhQy5sb29wKSwkPVtdLF89MDtmb3IobGV0IEs9MDtLPFkubGVuZ3RoO0srKyl7bGV0IE49WVtLXTtpZihLPjApe2xldCBFPVlbSy0xXTtfKz1NYXRoLmh5cG90KE4ueC1FLngsTi56LUUueixOLnktRS55KX1sZXR7bGF0OlUsbG5nOld9PXc5KE4ueCxOLnosWikseT1NYXRoLm1heCgwLE4ueSk7JC5wdXNoKHt4Ok4ueCx6Ok4ueix5LGFyYzpfLGxhdDpVLGxuZzpXfSl9bGV0IFY9MS8wLEI9LTEvMCxMPTEvMCxIPS0xLzAsRD0xLzAsUD0tMS8wO2ZvcihsZXQgSyBvZiAkKXtpZihLLng8VilWPUsueDtpZihLLng+QilCPUsueDtpZihLLno8TClMPUsuejtpZihLLno+SClIPUsuejtpZihLLnk8RClEPUsueTtpZihLLnk+UClQPUsueX1yZXR1cm57dHJhaWw6QyxvcmlnaW46Wixwb2ludHM6JCx0b3RhbERpc3RhbmNlOiRbJC5sZW5ndGgtMV0uYXJjLGJvdW5kczp7eDpbVixCXSx5OltELFBdLHo6W0wsSF19LHJhd01pbkFsdDpKLHJhd01heEFsdDpxfX1mdW5jdGlvbiBsMShDLFope2xldCBHPUMudG90YWxEaXN0YW5jZTtpZihHPT09MClyZXR1cm4gQy5wb2ludHNbMF07bGV0IEo9WjtpZihDLnRyYWlsLmxvb3ApSj0oSiVHK0cpJUc7ZWxzZXtpZihKPD0wKXJldHVybiBDLnBvaW50c1swXTtpZihKPj1HKXJldHVybiBDLnBvaW50c1tDLnBvaW50cy5sZW5ndGgtMV19bGV0IHE9MCxYPUMucG9pbnRzLmxlbmd0aC0xO3doaWxlKHErMTxYKXtsZXQgQj1xK1g+Pj4xO2lmKEMucG9pbnRzW0JdLmFyYzw9SilxPUI7ZWxzZSBYPUJ9bGV0IFk9Qy5wb2ludHNbcV0sJD1DLnBvaW50c1tYXSxfPSQuYXJjLVkuYXJjLFY9Xz09PTA/MDooSi1ZLmFyYykvXztyZXR1cm57eDpZLngrKCQueC1ZLngpKlYsejpZLnorKCQuei1ZLnopKlYseTpZLnkrKCQueS1ZLnkpKlYsYXJjOkosbGF0OlkubGF0KygkLmxhdC1ZLmxhdCkqVixsbmc6WS5sbmcrKCQubG5nLVkubG5nKSpWfX1mdW5jdGlvbiBVNShDKXtzd2l0Y2goQyl7Y2FzZSJ3YWxrIjpyZXR1cm4gMS40O2Nhc2UicnVuIjpyZXR1cm4gMztjYXNlImN5Y2xlIjpyZXR1cm4gNS41O2Nhc2UiZHJpdmUiOnJldHVybiAxMy40fX12YXIgeTk9W3tsYXQ6MzcuMzMyNzIsbG5nOi0xMjIuMDA4MzMsYWx0OjQ5fSx7bGF0OjM3LjMzMzA5LGxuZzotMTIyLjAwNzM1LGFsdDo0OH0se2xhdDozNy4zMzM3Myxsbmc6LTEyMi4wMDY2MyxhbHQ6NDl9LHtsYXQ6MzcuMzM0NTQsbG5nOi0xMjIuMDA2MjcsYWx0OjQ5fSx7bGF0OjM3LjMzNTQsbG5nOi0xMjIuMDA2MzMsYWx0OjQ5fSx7bGF0OjM3LjMzNjE4LGxuZzotMTIyLjAwNjc5LGFsdDo0NX0se2xhdDozNy4zMzY3NSxsbmc6LTEyMi4wMDc1OSxhbHQ6NDV9LHtsYXQ6MzcuMzM3MDQsbG5nOi0xMjIuMDA4NjEsYWx0OjQ2fSx7bGF0OjM3LjMzNjk4LGxuZzotMTIyLjAwOTY5LGFsdDo0OH0se2xhdDozNy4zMzY2Mixsbmc6LTEyMi4wMTA2NixhbHQ6NDh9LHtsYXQ6MzcuMzM1OTgsbG5nOi0xMjIuMDExMzgsYWx0OjQ5fSx7bGF0OjM3LjMzNTE3LGxuZzotMTIyLjAxMTc0LGFsdDo1MH0se2xhdDozNy4zMzQzMSxsbmc6LTEyMi4wMTE2OSxhbHQ6NTB9LHtsYXQ6MzcuMzMzNTQsbG5nOi0xMjIuMDExMjIsYWx0OjUwfSx7bGF0OjM3LjMzMjk2LGxuZzotMTIyLjAxMDQyLGFsdDo1MX0se2xhdDozNy4zMzI2OCxsbmc6LTEyMi4wMDk0LGFsdDo1MH1dLFI5PVt7bGF0OjM3LjgzMjEyLGxuZzotMTIyLjQ4MDY1LGFsdDozMH0se2xhdDozNy44MjkzNyxsbmc6LTEyMi40Nzk3NCxhbHQ6MzB9LHtsYXQ6MzcuODI2NDksbG5nOi0xMjIuNDc5NCxhbHQ6MzB9LHtsYXQ6MzcuODIzNjIsbG5nOi0xMjIuNDc5MDcsYWx0OjQ1fSx7bGF0OjM3LjgyMDc0LGxuZzotMTIyLjQ3ODczLGFsdDo1OX0se2xhdDozNy44MTc4Nixsbmc6LTEyMi40NzgzOSxhbHQ6NjZ9LHtsYXQ6MzcuODE0OTgsbG5nOi0xMjIuNDc4MDYsYWx0OjY2fSx7bGF0OjM3LjgxMjExLGxuZzotMTIyLjQ3NzcyLGFsdDo1OH0se2xhdDozNy44MDkyMyxsbmc6LTEyMi40NzczNCxhbHQ6NDR9LHtsYXQ6MzcuODA5NDksbG5nOi0xMjIuNDc3MyxhbHQ6NDV9LHtsYXQ6MzcuODEyMzYsbG5nOi0xMjIuNDc3NjUsYWx0OjU5fSx7bGF0OjM3LjgxNTI0LGxuZzotMTIyLjQ3Nzk4LGFsdDo2Nn0se2xhdDozNy44MTgxMixsbmc6LTEyMi40NzgzMixhbHQ6NjZ9LHtsYXQ6MzcuODIxLGxuZzotMTIyLjQ3ODY2LGFsdDo1OH0se2xhdDozNy44MjM4Nyxsbmc6LTEyMi40NzksYWx0OjQ0fSx7bGF0OjM3LjgyNjc1LGxuZzotMTIyLjQ3OTMzLGFsdDozMH0se2xhdDozNy44Mjk2Myxsbmc6LTEyMi40Nzk2NyxhbHQ6MzB9LHtsYXQ6MzcuODMyMzMsbG5nOi0xMjIuNDgwNzIsYWx0OjMwfV0sajk9W3tsYXQ6MzcuODg2NjQsbG5nOi0xMjIuNjI1OTksYWx0OjEyMX0se2xhdDozNy44ODg4Nyxsbmc6LTEyMi42MjMzMixhbHQ6MTM1fSx7bGF0OjM3Ljg5MTE1LGxuZzotMTIyLjYyMTYsYWx0OjE2NH0se2xhdDozNy44OTM1Myxsbmc6LTEyMi42MTkyMSxhbHQ6MTgwfSx7bGF0OjM3Ljg5NDY2LGxuZzotMTIyLjYxNTc3LGFsdDoyMjB9LHtsYXQ6MzcuODk2MzEsbG5nOi0xMjIuNjEyNjgsYWx0OjI3M30se2xhdDozNy44OTkxNyxsbmc6LTEyMi42MTA5OCxhbHQ6MzEzfSx7bGF0OjM3LjkwMTY2LGxuZzotMTIyLjYwODU1LGFsdDozNDJ9LHtsYXQ6MzcuOTAxOTksbG5nOi0xMjIuNjA2MDEsYWx0OjQwOH0se2xhdDozNy45MDMzOSxsbmc6LTEyMi42MDQwMSxhbHQ6NDUwfSx7bGF0OjM3LjkwNjYyLGxuZzotMTIyLjYwMjkxLGFsdDo0NDB9LHtsYXQ6MzcuOTA5NzEsbG5nOi0xMjIuNjAxNzMsYWx0OjQzMn0se2xhdDozNy45MTIxMyxsbmc6LTEyMi42MDAwNyxhbHQ6NDM2fSx7bGF0OjM3LjkxNDM5LGxuZzotMTIyLjU5NzgsYWx0OjQxMH0se2xhdDozNy45MTI4NSxsbmc6LTEyMi41OTUwNCxhbHQ6NDIyfSx7bGF0OjM3LjkxMjc0LGxuZzotMTIyLjU5MjAyLGFsdDo0MjV9LHtsYXQ6MzcuOTE1LGxuZzotMTIyLjU5MDMyLGFsdDo0MTJ9LHtsYXQ6MzcuOTE2MzcsbG5nOi0xMjIuNTg5MDMsYWx0OjQwNn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODU5NSxhbHQ6MzgyfSx7bGF0OjM3LjkxNzQsbG5nOi0xMjIuNTgzOTgsYWx0OjM3Mn0se2xhdDozNy45MTY0Mixsbmc6LTEyMi41ODIzNixhbHQ6MzUyfSx7bGF0OjM3LjkxNDgxLGxuZzotMTIyLjU4MDExLGFsdDozNDJ9XSxoOT1be2xhdDo0MC43ODIxNixsbmc6LTczLjk2MjU0LGFsdDozN30se2xhdDo0MC43ODIyMSxsbmc6LTczLjk2MDk4LGFsdDozNn0se2xhdDo0MC43ODMyOCxsbmc6LTczLjk2MDEsYWx0OjM2fSx7bGF0OjQwLjc4NDQsbG5nOi03My45NTkzLGFsdDozNn0se2xhdDo0MC43ODU1LGxuZzotNzMuOTU4NDgsYWx0OjM2fSx7bGF0OjQwLjc4NjY0LGxuZzotNzMuOTU3NzQsYWx0OjM2fSx7bGF0OjQwLjc4NzksbG5nOi03My45NTc2NCxhbHQ6MzZ9LHtsYXQ6NDAuNzg4OTgsbG5nOi03My45NTc5MixhbHQ6MzZ9LHtsYXQ6NDAuNzg4NjgsbG5nOi03My45NTk1MSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4OTcsbG5nOi03My45NjExMixhbHQ6MzZ9LHtsYXQ6NDAuNzg4MzMsbG5nOi03My45NjI1LGFsdDozN30se2xhdDo0MC43ODgyOCxsbmc6LTczLjk2NDE2LGFsdDozN30se2xhdDo0MC43ODgwNSxsbmc6LTczLjk2NTczLGFsdDozNn0se2xhdDo0MC43ODY5MSxsbmc6LTczLjk2NjM2LGFsdDozNn0se2xhdDo0MC43ODU2Nixsbmc6LTczLjk2NjY1LGFsdDozNn0se2xhdDo0MC43ODQ1OCxsbmc6LTczLjk2NjA4LGFsdDozNn0se2xhdDo0MC43ODQwMixsbmc6LTczLjk2NDU5LGFsdDozNn0se2xhdDo0MC43ODMyMixsbmc6LTczLjk2MzM0LGFsdDozN31dLHY5PVt7bGF0OjM3LjU5NjU5LGxuZzotMTIyLjUwMzE2LGFsdDo0fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41ODg3LGxuZzotMTIyLjUwNTI0LGFsdDo1MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg2MjcsbG5nOi0xMjIuNTA0MjIsYWx0OjcxfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODUwNSxsbmc6LTEyMi41MDY5OCxhbHQ6OTN9LHtsYXQ6MzcuNTg1MzksbG5nOi0xMjIuNTA1MzQsYWx0OjgyfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODc0NSxsbmc6LTEyMi41MDQ5NixhbHQ6NjB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg5NzQsbG5nOi0xMjIuNTA0MTYsYWx0OjQwfSx7bGF0OjM3LjU5MSxsbmc6LTEyMi41MDQxMyxhbHQ6Mjl9LHtsYXQ6MzcuNTkyMTIsbG5nOi0xMjIuNTA1MDgsYWx0OjIwfSx7bGF0OjM3LjU5MzI5LGxuZzotMTIyLjUwNTg4LGFsdDo5fSx7bGF0OjM3LjU5NDUyLGxuZzotMTIyLjUwNTM0LGFsdDo1fSx7bGF0OjM3LjU5NTU1LGxuZzotMTIyLjUwNDI0LGFsdDo0fV0sYTE9W3tpZDoiYXBwbGUtcGFyay1sb29wIixuYW1lOiJBcHBsZSBQYXJrIExvb3AiLGRlc2NyaXB0aW9uOiJDdXBlcnRpbm8g4oCiIGZsYXQgcmluZyByb2FkIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6eTksbG9vcDohMH0se2lkOiJnb2xkZW4tZ2F0ZSIsbmFtZToiR29sZGVuIEdhdGUgQ3Jvc3NpbmciLGRlc2NyaXB0aW9uOiJTYW4gRnJhbmNpc2NvIOKAoiBicmlkZ2Ugcm91bmQtdHJpcCIsbW9kZToicnVuIix3YXlwb2ludHM6UjksbG9vcDohMH0se2lkOiJ0YW0tcmlkZ2UiLG5hbWU6Ik10LiBUYW0gUmlkZ2UiLGRlc2NyaXB0aW9uOiJTdGluc29uIEJlYWNoIOKAoiBTdGVlcCBSYXZpbmUgKyBNYXR0IERhdmlzIGxvb3AiLG1vZGU6IndhbGsiLHdheXBvaW50czpqOSxsb29wOiEwfSx7aWQ6ImNlbnRyYWwtcGFyayIsbmFtZToiUmVzZXJ2b2lyIExvb3AiLGRlc2NyaXB0aW9uOiJDZW50cmFsIFBhcmsg4oCiIDIuNSBrbSIsbW9kZToicnVuIix3YXlwb2ludHM6aDksbG9vcDohMH0se2lkOiJwY2gtcGFjaWZpY2EiLG5hbWU6IlBhY2lmaWMgQ29hc3QgSHd5IixkZXNjcmlwdGlvbjoiUGFjaWZpY2Eg4oCiIERldmlsJ3MgU2xpZGUgcm91bmQtdHJpcCIsbW9kZToiZHJpdmUiLHdheXBvaW50czp2OSxsb29wOiEwfV07ZnVuY3Rpb24gZjIoe29wZW46Q30pe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToibGVtLWNoZXZyb24iLHN0eWxlOnt0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xNXMsIGNvbG9yIDAuMTJzIix0cmFuc2Zvcm06Qz8icm90YXRlKDE4MGRlZykiOiJyb3RhdGUoMGRlZykiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkifSxjaGlsZHJlbjpRKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KX1mdW5jdGlvbiBwMih7ZGlyOkN9KXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjkiLGhlaWdodDoiOSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLHN0eWxlOnttYXJnaW5SaWdodDozfSxjaGlsZHJlbjpDPT09InVwIj9RKCJwb2x5Z29uIix7cG9pbnRzOiIxMiw0IDIwLDE4IDQsMTgifSk6USgicG9seWdvbiIse3BvaW50czoiNCw2IDIwLDYgMTIsMjAifSl9KX1mdW5jdGlvbiBPNSgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpRKCJwb2x5Z29uIix7cG9pbnRzOiI2LDQgMjAsMTIgNiwyMCJ9KX0pfWZ1bmN0aW9uIHo1KCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJjdXJyZW50Q29sb3IiLGNoaWxkcmVuOltRKCJyZWN0Iix7eDoiNiIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSksUSgicmVjdCIse3g6IjE0Iix5OiI0Iix3aWR0aDoiNCIsaGVpZ2h0OiIxNiJ9KV19KX1mdW5jdGlvbiBQNSgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTAiLGhlaWdodDoiMTAiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpRKCJyZWN0Iix7eDoiNSIseToiNSIsd2lkdGg6IjE0IixoZWlnaHQ6IjE0IixyeDoiMS41In0pfSl9ZnVuY3Rpb24gTTUoKXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjEyIixoZWlnaHQ6IjEyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiJ9KSxRKCJwYXRoIix7ZDoiTTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDIgMTh6In0pXX0pfWZ1bmN0aW9uIFc1KCl7cmV0dXJuIFEoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0IDIgOSAxMyIsZmlsbDoiY3VycmVudENvbG9yIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOlEoInBhdGgiLHtkOiJNNi4wMDg1MiAxNC44MDU0QzUuODkxODEgMTQuOTM1IDUuNzU4MTUgMTQuOTk5OCA1LjYwNzU2IDE0Ljk5OThDNS40NTY5NiAxNS4wMDMzIDUuMzIzMyAxNC45NjEzIDUuMjA2NTkgMTQuODczN0M1LjA5MzY0IDE0Ljc4NjEgNS4wMjU4NyAxNC42NzIzIDUuMDAzMjggMTQuNTMyMkM0Ljk4NDQ2IDE0LjM5MjEgNS4wNDY1OCAxNC4yNDUgNS4xODk2NSAxNC4wOTA5TDYuOTQ1OTkgMTIuMTUyMkw3LjI0NTMgMTAuODc1NUw4LjE5OTcxIDExLjk4OTNMOC4wNTg1MyAxMi4zOTM5QzguMDIwODggMTIuNDk1NSA3Ljk4Njk5IDEyLjU3MDggNy45NTY4NyAxMi42MTk4QzcuOTMwNTIgMTIuNjY4OCA3Ljg3NDA0IDEyLjc0MDYgNy43ODc0NSAxMi44MzUyTDYuMDA4NTIgMTQuODA1NFpNMTAuMzQ1NyAxNC42NDI1TDkuMTAzMjkgMTIuMzA0NkM5LjA3Njk0IDEyLjI2MjUgOS4wNTQzNSAxMi4yMjIzIDkuMDM1NTMgMTIuMTgzN0M5LjAxNjcgMTIuMTQ1MiA4Ljk3NzE3IDEyLjA5MDkgOC45MTY5MyAxMi4wMjA5TDcuNzE5NjggMTAuNjE4MUM3LjQ5Mzc5IDEwLjM1NTQgNy4zMzc1NCAxMC4xMjk1IDcuMjUwOTUgOS45NDAzNEM3LjE2NDM1IDkuNzQ3NyA3LjEzNDI0IDkuNDk5MDEgNy4xNjA1OSA5LjE5NDI5TDcuMjYyMjQgNy45ODA2NUM3LjI2OTc3IDcuOTA3MSA3LjIzMjEyIDcuODU0NTYgNy4xNDkyOSA3LjgyMzA0QzcuMDY2NDcgNy43OTE1MSA2Ljk4NTUyIDcuODA5MDMgNi45MDY0NiA3Ljg3NTU3TDYuNDcxNjEgOC4yNDMzNEw2LjM0MTcyIDkuNjcyMzlDNi4zMjI4OSA5Ljg0NzUyIDYuMjY0NTQgOS45Nzg4NyA2LjE2NjY1IDEwLjA2NjRDNi4wNjg3NiAxMC4xNTQgNS45Mzg4NyAxMC4xOTI1IDUuNzc2OTggMTAuMTgyQzUuNjExMzIgMTAuMTc1IDUuNDgzMzEgMTAuMTE5IDUuMzkyOTUgMTAuMDEzOUM1LjMwNjM2IDkuOTA4ODIgNS4yNjg3MSA5Ljc3Mzk3IDUuMjgwMDEgOS42MDkzNUw1LjM4NzMxIDguMzA2MzlDNS40MDIzNyA4LjEyNzc2IDUuNDM4MTMgNy45NzU0IDUuNDk0NjEgNy44NDkzMUM1LjU1NDg1IDcuNzIzMjEgNS42NjAyNiA3LjU5MTg3IDUuODEwODYgNy40NTUyN0w2LjcxNDQ1IDYuNjI1MTZDNy4wMDQzNSA2LjM2MjQ3IDcuMjY5NzcgNi4xNjEwNyA3LjUxMDczIDYuMDIwOTZDNy43NTE2OCA1Ljg3NzM2IDguMDI4NDEgNS44MDU1NiA4LjM0MDkgNS44MDU1NkM4Ljc1ODggNS44MDU1NiA5LjA3ODgyIDUuOTMzNCA5LjMwMDk1IDYuMTg5MDlDOS41MjY4NSA2LjQ0NDc4IDkuNjI0NzQgNi43NjE3NiA5LjU5NDYyIDcuMTQwMDRMOS40NzYwMiA4LjczMTk1QzkuNDUzNDMgOS4wMTU2NiA5LjQxOTU1IDkuMjYyNTkgOS4zNzQzNyA5LjQ3Mjc1QzkuMzI5MTkgOS42ODI5IDkuMjUzODkgOS45Mjk4MyA5LjE0ODQ3IDEwLjIxMzVMOS4wOTIgMTAuMzYwNkw5Ljg2NTY5IDExLjM3OTlDOS45MjIxNyAxMS40NTM0IDkuOTgwNTIgMTEuNTM0IDEwLjA0MDggMTEuNjIxNkMxMC4xMDEgMTEuNzA5MSAxMC4xNTM3IDExLjc5NjcgMTAuMTk4OSAxMS44ODQzTDExLjQwNzQgMTQuMTY0NEMxMS41MDUzIDE0LjM1MDEgMTEuNTI0MSAxNC41MTEyIDExLjQ2MzkgMTQuNjQ3OEMxMS40MDM3IDE0Ljc4NDQgMTEuMzAyIDE0Ljg4MjUgMTEuMTU4OSAxNC45NDJDMTEuMDE5NiAxNS4wMDE1IDEwLjg3MDkgMTUuMDEwMyAxMC43MTI4IDE0Ljk2ODNDMTAuNTU4NCAxNC45MjYyIDEwLjQzNjEgMTQuODE3NyAxMC4zNDU3IDE0LjY0MjVaTTEyLjQwNyA3Ljk2NDg5QzEyLjU4NCA3Ljk2NDg5IDEyLjcyNyA4LjAxMDQyIDEyLjgzNjIgOC4xMDE0OUMxMi45NDU0IDguMTg5MDUgMTMgOC4zMDYzOSAxMyA4LjQ1MzVDMTMgOC42MTExMSAxMi45NDU0IDguNzMzNyAxMi44MzYyIDguODIxMjdDMTIuNzMwOCA4LjkwODgzIDEyLjU4NzcgOC45NTI2MSAxMi40MDcgOC45NTI2MUgxMS4xMzA3QzEwLjk1MzggOC45NTI2MSAxMC44MTQ1IDguOTM2ODUgMTAuNzEyOCA4LjkwNTMzQzEwLjYxMTIgOC44NzAzIDEwLjUxMzMgOC44MDcyNiAxMC40MTkxIDguNzE2MTlMMTAuMDUyMSA4LjM3OTk0TDEwLjE0MjQgNy4wNDAyMUwxMS4wMzQ3IDcuOTY0ODlIMTIuNDA3Wk05LjAwMTY0IDUuMzExNjlDOC43NzE5OCA1LjMxMTY5IDguNTYzMDMgNS4yNjA5MSA4LjM3NDc4IDUuMTU5MzNDOC4xODY1MyA1LjA1NDI2IDguMDM1OTQgNC45MTQxNSA3LjkyMjk5IDQuNzM5MDNDNy44MTM4MSA0LjU2MzkgNy43NTkyMSA0LjM2OTUgNy43NTkyMSA0LjE1NTg1QzcuNzU5MjEgMy45NDIxOSA3LjgxMzgxIDMuNzQ3OCA3LjkyMjk5IDMuNTcyNjdDOC4wMzU5NCAzLjM5NzU0IDguMTg2NTMgMy4yNTkxOSA4LjM3NDc4IDMuMTU3NjJDOC41NjMwMyAzLjA1MjU0IDguNzcxOTggMyA5LjAwMTY0IDNDOS4yMzEzIDMgOS40NDAyNiAzLjA1MjU0IDkuNjI4NSAzLjE1NzYyQzkuODE2NzUgMy4yNTkxOSA5Ljk2NTQ2IDMuMzk3NTQgMTAuMDc0NiAzLjU3MjY3QzEwLjE4NzYgMy43NDc4IDEwLjI0NDEgMy45NDIxOSAxMC4yNDQxIDQuMTU1ODVDMTAuMjQ0MSA0LjM2OTUgMTAuMTg3NiA0LjU2MzkgMTAuMDc0NiA0LjczOTAzQzkuOTY1NDYgNC45MTQxNSA5LjgxNjc1IDUuMDU0MjYgOS42Mjg1IDUuMTU5MzNDOS40NDAyNiA1LjI2MDkxIDkuMjMxMyA1LjMxMTY5IDkuMDAxNjQgNS4zMTE2OVoifSl9KX1mdW5jdGlvbiBrNSgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjI2IDEgMTIgMTQiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTMzLjI0MzcgNC41ODQ1OUMzMy4wMDA4IDQuNTg0NTkgMzIuNzgxNyA0LjUyNzI4IDMyLjU4NjYgNC40MTI2OEMzMi4zOTE1IDQuMjk0MTIgMzIuMjM0MiA0LjEzODAxIDMyLjExNDcgMy45NDQzN0MzMS45OTkyIDMuNzQ2NzcgMzEuOTQxNCAzLjUyOTQxIDMxLjk0MTQgMy4yOTIyOUMzMS45NDE0IDMuMDUxMjIgMzEuOTk5MiAyLjgzMzg3IDMyLjExNDcgMi42NDAyMkMzMi4yMzQyIDIuNDQ2NTcgMzIuMzkxNSAyLjI5MjQ1IDMyLjU4NjYgMi4xNzc4NEMzMi43ODE3IDIuMDU5MjggMzMuMDAwOCAyIDMzLjI0MzcgMkMzMy40ODI2IDIgMzMuNjk5NyAyLjA1OTI4IDMzLjg5NDggMi4xNzc4NEMzNC4wOTM5IDIuMjkyNDUgMzQuMjUxMiAyLjQ0NjU3IDM0LjM2NjcgMi42NDAyMkMzNC40ODYyIDIuODMzODcgMzQuNTQ1OSAzLjA1MTIyIDM0LjU0NTkgMy4yOTIyOUMzNC41NDU5IDMuNTI5NDEgMzQuNDg2MiAzLjc0Njc3IDM0LjM2NjcgMy45NDQzN0MzNC4yNTEyIDQuMTM4MDEgMzQuMDkzOSA0LjI5NDEyIDMzLjg5NDggNC40MTI2OEMzMy42OTk3IDQuNTI3MjggMzMuNDgyNiA0LjU4NDU5IDMzLjI0MzcgNC41ODQ1OVpNMzEuMjAwNyA5Ljc0MTkxQzMxLjA3MzMgOS42NzA3NyAzMC45NDE5IDkuNTk1NjggMzAuODA2NSA5LjUxNjY0QzMwLjY3NSA5LjQzNzYgMzAuNTU5NiA5LjM0Mjc2IDMwLjQ2IDkuMjMyMUMzMC4zNjA0IDkuMTE3NDkgMzAuMjkyNyA4Ljk3NzIgMzAuMjU2OSA4LjgxMTIyQzMwLjIyNSA4LjY0MTI4IDMwLjI0NDkgOC40Mjk4NSAzMC4zMTY2IDguMTc2OTNMMzAuODA2NSA2LjQ4MTUzQzMwLjgzODMgNi4zNjY5MiAzMC44MTg0IDYuMjc5OTggMzAuNzQ2NyA2LjIyMDdDMzAuNjc5IDYuMTU3NDcgMzAuNTk3NCA2LjEyOTgxIDMwLjUwMTggNi4xMzc3MUwyOS42NTk1IDYuMTk2OTlMMjkuNDAyNyA3LjkyMjAyQzI5LjM3ODggOC4xMDc3NyAyOS4zMTUxIDguMjQ2MDkgMjkuMjExNSA4LjMzNjk4QzI5LjEwOCA4LjQyNzg4IDI4Ljk3MjYgOC40NjU0MiAyOC44MDUzIDguNDQ5NjFDMjguNjQyIDguNDMzOCAyOC41MTg2IDguMzY2NjIgMjguNDM0OSA4LjI0ODA2QzI4LjM1MTMgOC4xMjk1IDI4LjMyMTQgNy45NzczNSAyOC4zNDUzIDcuNzkxNjFMMjguNjI2MSA1LjY4MTI2QzI4LjY1IDUuNTExMzIgMjguNzE1NyA1LjM3NDk4IDI4LjgyMzIgNS4yNzIyM0MyOC45MzA4IDUuMTY5NDggMjkuMDY4MSA1LjExMjE3IDI5LjIzNTQgNS4xMDAzMkwzMS4zMzIxIDQuOTUyMTJDMzEuODgxNyA0LjkxMjYgMzIuMzM1NyA0Ljk2OTkgMzIuNjk0MSA1LjEyNDAzQzMzLjA1MjUgNS4yNzgxNiAzMy4zNjcxIDUuNTM4OTkgMzMuNjM3OSA1LjkwNjUyTDM0LjY3MTQgNy4zMjMzTDM2LjE3MDggNi42NjUzQzM2LjMzOCA2LjU5MDIxIDM2LjQ4OTMgNi41NzQ0IDM2LjYyNDggNi42MTc4N0MzNi43NjAyIDYuNjU3MzkgMzYuODY1NyA2Ljc1MjI0IDM2Ljk0MTQgNi45MDI0MkMzNy4wMTMgNy4wNTI1OSAzNy4wMTkgNy4xOTQ4NiAzNi45NTkzIDcuMzI5MjNDMzYuOTAzNSA3LjQ2MzYgMzYuNzkyIDcuNTY4MzIgMzYuNjI0OCA3LjY0MzQxTDM0LjczMTEgOC40NzkyNUMzNC42MDM3IDguNTM4NTMgMzQuNDc0MyA4LjU1MDM5IDM0LjM0MjggOC41MTQ4MkMzNC4yMTU0IDguNDc1MyAzNC4xMTM4IDguNDAwMjEgMzQuMDM4MiA4LjI4OTU2TDMzLjM4MTEgNy4zMzUxNkMzMy4zMTM0IDcuMjQwMzEgMzMuMjI5OCA3LjE5ODgxIDMzLjEzMDIgNy4yMTA2N0MzMy4wMzA2IDcuMjIyNTMgMzIuOTY0OSA3LjI4Mzc4IDMyLjkzMzEgNy4zOTQ0NEwzMi40OTEgOC45Mjk3OEwzNC43MzExIDEwLjM4ODFDMzQuODQyNiAxMC40NTkyIDM0LjkyMjMgMTAuNTU2IDM0Ljk3MDEgMTAuNjc4NUMzNS4wMTc5IDEwLjgwMSAzNS4wMjk4IDEwLjkyNTUgMzUuMDA1OSAxMS4wNTJDMzQuOTg2IDExLjE3NDUgMzQuOTI4MiAxMS4yNzUzIDM0LjgzMjcgMTEuMzU0M0wzMi43NzE4IDEzLjA5NzFDMzIuNjA4NSAxMy4yMzU0IDMyLjQ0NTIgMTMuMjk4NyAzMi4yODE5IDEzLjI4NjhDMzIuMTIyNiAxMy4yNzUgMzEuOTkzMiAxMy4yMTM3IDMxLjg5MzcgMTMuMTAzMUMzMS43OTgxIDEyLjk5NjQgMzEuNzU0MyAxMi44NjU5IDMxLjc2MjIgMTIuNzExOEMzMS43NzAyIDEyLjU1MzcgMzEuODUzOCAxMi40MDc1IDMyLjAxMzEgMTIuMjczMUwzMy40ODg2IDExLjAxNjRMMzEuMjAwNyA5Ljc0MTkxWk0yNy4yMDQ0IDE0Ljg2MzdDMjcuMDg0OSAxNC43NTcgMjcuMDE3MiAxNC42MTg2IDI3LjAwMTMgMTQuNDQ4N0MyNi45ODkzIDE0LjI3ODggMjcuMDYxIDE0LjExNjcgMjcuMjE2MyAxMy45NjI2TDI5LjIyMzUgMTEuOTc2N0wyOS45MzQzIDkuNDgxMDhDMzAuMDQxOCA5LjYxNTQ0IDMwLjE3NTMgOS43NDU4NiAzMC4zMzQ1IDkuODcyMzJDMzAuNDk3OCA5Ljk5NDgzIDMwLjY5MyAxMC4xMTczIDMwLjkyIDEwLjIzOTlMMzEuMTE3MSAxMC4zNDY2TDMwLjMwNDcgMTIuNDMzMkMzMC4yNTI5IDEyLjU1NTcgMzAuMjA5MSAxMi42NDA3IDMwLjE3MzMgMTIuNjg4MUMzMC4xNDE0IDEyLjczNTUgMzAuMDg1NiAxMi43OTg4IDMwLjAwNiAxMi44Nzc4TDI4LjA3MDYgMTQuNzgwN0MyNy45MTkyIDE0LjkyNjkgMjcuNzYzOSAxNSAyNy42MDQ2IDE1QzI3LjQ0OTMgMTUgMjcuMzE1OSAxNC45NTQ2IDI3LjIwNDQgMTQuODYzN1oifSl9KX1mdW5jdGlvbiBBNSgpe3JldHVybiBRKCJzdmciLHt3aWR0aDoiMTQiLGhlaWdodDoiMTQiLHZpZXdCb3g6IjQ5IDMgMTYgMTIiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTU3LjAwMjggMTEuOTQ5QzU2Ljg0OCAxMS45NDkgNTYuNzE3MiAxMS44OTg3IDU2LjYxMDMgMTEuNzk4QzU2LjUwMzUgMTEuNjkzOSA1Ni40NTAxIDExLjU3MDcgNTYuNDUwMSAxMS40Mjg0VjkuMDI4NjNMNTQuNDIxNiA3LjEwNzc2QzU0LjIyMjcgNi45MjAzNSA1NC4wOTU1IDYuNjk4MjUgNTQuMDQwMyA2LjQ0MTQ0QzUzLjk4NSA2LjE4MTE2IDU0LjAxMDggNS45Mjc4MiA1NC4xMTc2IDUuNjgxNDJDNTQuMjI4MiA1LjQzODQ5IDU0LjM5NzcgNS4yNDQxNCA1NC42MjYxIDUuMDk4MzlDNTQuODU4MyA0Ljk0OTE2IDU1LjExNjIgNC44NzQ1NCA1NS4zOTk5IDQuODc0NTRINTguMTEzN0M1OC40MjMyIDQuODc0NTQgNTguNjg0OCA0Ljk3NjkyIDU4Ljg5ODUgNS4xODE2OEM1OS4xMTU5IDUuMzgyOTYgNTkuMjI0NiA1LjYyOTM2IDU5LjIyNDYgNS45MjA4N1Y3Ljc2MzY2SDYwLjg5OTNDNjEuMDUwNCA3Ljc2MzY2IDYxLjE3OTQgNy44MTM5OSA2MS4yODYyIDcuOTE0NjNDNjEuMzkzMSA4LjAxNTI3IDYxLjQ0NjUgOC4xMzg0NyA2MS40NDY1IDguMjg0MjNDNjEuNDQ2NSA4LjQyNjUxIDYxLjM5MzEgOC41NDc5OCA2MS4yODYyIDguNjQ4NjJDNjEuMTc5NCA4Ljc0OTI2IDYxLjA1MDQgOC43OTk1OCA2MC44OTkzIDguNzk5NThINTguNjcxOUM1OC41MjA5IDguNzk5NTggNTguMzkwMSA4Ljc0OTI2IDU4LjI3OTUgOC42NDg2MkM1OC4xNzI3IDguNTQ3OTggNTguMTE5MiA4LjQyNjUxIDU4LjExOTIgOC4yODQyM1Y2Ljk4ODAzQzU4LjExOTIgNi45MTg2MiA1OC4wOTkgNi44NTQ0MiA1OC4wNTg0IDYuNzk1NDJDNTguMDE3OSA2LjczMjk1IDU3Ljk0NDIgNi43MDE3MiA1Ny44MzczIDYuNzAxNzJINTYuMDYzMkM1NS45OTMyIDYuNzAxNzIgNTUuOTQ1MyA2LjcyOTQ4IDU1LjkxOTUgNi43ODUwMUM1NS44OTc0IDYuODM3MDYgNTUuOTA4NCA2Ljg4NzM5IDU1Ljk1MjYgNi45MzU5N0w1Ny40MDA3IDguNDU2MDFDNTcuNTAzOSA4LjU2MzYgNTcuNTU1NSA4LjY4MTU5IDU3LjU1NTUgOC44MDk5OVYxMS40Mjg0QzU3LjU1NTUgMTEuNTcwNyA1Ny41MDAyIDExLjY5MzkgNTcuMzg5NyAxMS43OThDNTcuMjgyOCAxMS44OTg3IDU3LjE1MzggMTEuOTQ5IDU3LjAwMjggMTEuOTQ5Wk01My4wMDEyIDE0QzUyLjU4NDggMTQgNTIuMTk0MiAxMy45MjcxIDUxLjgyOTUgMTMuNzgxNEM1MS40Njg0IDEzLjYzNTYgNTEuMTQ5NiAxMy40MzI2IDUwLjg3MzMgMTMuMTcyM0M1MC42MDA2IDEyLjkxMiA1MC4zODY5IDEyLjYxMTggNTAuMjMyMSAxMi4yNzE3QzUwLjA3NzQgMTEuOTI4MiA1MCAxMS41NjAzIDUwIDExLjE2ODFDNTAgMTAuNzc2IDUwLjA3NzQgMTAuNDA5OSA1MC4yMzIxIDEwLjA2OThDNTAuMzg2OSA5LjcyNjE4IDUwLjYwMDYgOS40MjQyNiA1MC44NzMzIDkuMTYzOThDNTEuMTQ5NiA4LjkwMzcgNTEuNDY4NCA4LjcwMDY4IDUxLjgyOTUgOC41NTQ5MkM1Mi4xOTQyIDguNDA5MTYgNTIuNTg0OCA4LjMzNjI4IDUzLjAwMTIgOC4zMzYyOEM1My40MjEyIDguMzM2MjggNTMuODExOCA4LjQwOTE2IDU0LjE3MjkgOC41NTQ5MkM1NC41Mzc3IDguNzAwNjggNTQuODU2NCA4LjkwMzcgNTUuMTI5MSA5LjE2Mzk4QzU1LjQwNTQgOS40MjQyNiA1NS42MjEgOS43MjYxOCA1NS43NzU4IDEwLjA2OThDNTUuOTMwNSAxMC40MDk5IDU2LjAwNzkgMTAuNzc2IDU2LjAwNzkgMTEuMTY4MUM1Ni4wMDc5IDExLjU2MDMgNTUuOTMwNSAxMS45MjgyIDU1Ljc3NTggMTIuMjcxN0M1NS42MjEgMTIuNjExOCA1NS40MDU0IDEyLjkxMiA1NS4xMjkxIDEzLjE3MjNDNTQuODU2NCAxMy40MzI2IDU0LjUzNzcgMTMuNjM1NiA1NC4xNzI5IDEzLjc4MTRDNTMuODExOCAxMy45MjcxIDUzLjQyMTIgMTQgNTMuMDAxMiAxNFpNNTMuMDAxMiAxMy4yNjZDNTMuNDEwMiAxMy4yNjYgNTMuNzgyMyAxMy4xNzA2IDU0LjExNzYgMTIuOTc5N0M1NC40NTY2IDEyLjc5MjMgNTQuNzI1NiAxMi41NDA3IDU0LjkyNDYgMTIuMjI0OUM1NS4xMjczIDExLjkwNTYgNTUuMjI4NiAxMS41NTM0IDU1LjIyODYgMTEuMTY4MUM1NS4yMjg2IDEwLjc4MjkgNTUuMTI3MyAxMC40MzI0IDU0LjkyNDYgMTAuMTE2NkM1NC43MjU2IDkuNzk3MzMgNTQuNDU2NiA5LjU0Mzk5IDU0LjExNzYgOS4zNTY1OUM1My43ODIzIDkuMTY1NzEgNTMuNDEwMiA5LjA3MDI4IDUzLjAwMTIgOS4wNzAyOEM1Mi41OTU5IDkuMDcwMjggNTIuMjIzNyA5LjE2NTcxIDUxLjg4NDcgOS4zNTY1OUM1MS41NDk0IDkuNTQzOTkgNTEuMjgwNCA5Ljc5NzMzIDUxLjA3NzggMTAuMTE2NkM1MC44Nzg4IDEwLjQzMjQgNTAuNzc5MyAxMC43ODI5IDUwLjc3OTMgMTEuMTY4MUM1MC43NzkzIDExLjU1MzQgNTAuODc4OCAxMS45MDU2IDUxLjA3NzggMTIuMjI0OUM1MS4yODA0IDEyLjU0MDcgNTEuNTQ5NCAxMi43OTIzIDUxLjg4NDcgMTIuOTc5N0M1Mi4yMjM3IDEzLjE3MDYgNTIuNTk1OSAxMy4yNjYgNTMuMDAxMiAxMy4yNjZaTTYyLjQ4MDEgOS42MTE2NkM2Mi4zNjIyIDkuNTE0NDkgNjIuMzAxNCA5LjQxNTU4IDYyLjI5NzcgOS4zMTQ5NEM2Mi4yOTc3IDkuMjEwODMgNjIuMzMwOCA5LjEyNDA3IDYyLjM5NzIgOS4wNTQ2NkM2Mi40NjcyIDguOTg1MjUgNjIuNTUzOCA4Ljk0NTM0IDYyLjY1NjkgOC45MzQ5M0M2Mi43NjM4IDguOTIxMDUgNjIuODY4OCA4Ljk1NTc1IDYyLjk3MiA5LjAzOTA0QzYzLjI4ODkgOS4zMDI3OSA2My41Mzk0IDkuNjE2ODcgNjMuNzIzNiA5Ljk4MTI2QzYzLjkwNzkgMTAuMzQ1NyA2NCAxMC43NDEzIDY0IDExLjE2ODFDNjQgMTEuNTYwMyA2My45MjI2IDExLjkyODIgNjMuNzY3OSAxMi4yNzE3QzYzLjYxMzEgMTIuNjExOCA2My4zOTc2IDEyLjkxMiA2My4xMjEyIDEzLjE3MjNDNjIuODQ4NSAxMy40MzI2IDYyLjUyOTggMTMuNjM1NiA2Mi4xNjUgMTMuNzgxNEM2MS44MDM5IDEzLjkyNzEgNjEuNDE1MiAxNCA2MC45OTg4IDE0QzYwLjU4MjQgMTQgNjAuMTkxOSAxMy45MjcxIDU5LjgyNzEgMTMuNzgxNEM1OS40NjIzIDEzLjYzNTYgNTkuMTQxNyAxMy40MzI2IDU4Ljg2NTQgMTMuMTcyM0M1OC41OTI3IDEyLjkxMiA1OC4zNzkgMTIuNjExOCA1OC4yMjQyIDEyLjI3MTdDNTguMDY5NSAxMS45MjgyIDU3Ljk5MjEgMTEuNTYwMyA1Ny45OTIxIDExLjE2ODFDNTcuOTkyMSAxMC45NjM0IDU4LjAxNDIgMTAuNzY1NiA1OC4wNTg0IDEwLjU3NDdDNTguMTA2MyAxMC4zODA0IDU4LjE3MjcgMTAuMTkzIDU4LjI1NzQgMTAuMDEyNUM1OC4zMDkgOS45MDE0NCA1OC4zODA4IDkuODMwMyA1OC40NzMgOS43OTkwNkM1OC41Njg4IDkuNzY0MzYgNTguNjYyNyA5Ljc2NDM2IDU4Ljc1NDggOS43OTkwNkM1OC44NTA2IDkuODMwMyA1OC45MjI1IDkuODkyNzYgNTguOTcwNCA5Ljk4NjQ3QzU5LjAxODMgMTAuMDgwMiA1OS4wMTA5IDEwLjE5ODIgNTguOTQ4MyAxMC4zNDA0QzU4LjgzMDQgMTAuNjAwNyA1OC43NzE0IDEwLjg3NjYgNTguNzcxNCAxMS4xNjgxQzU4Ljc3MTQgMTEuNTUzNCA1OC44NzA5IDExLjkwNTYgNTkuMDY5OSAxMi4yMjQ5QzU5LjI3MjUgMTIuNTQwNyA1OS41NDE1IDEyLjc5MjMgNTkuODc2OCAxMi45Nzk3QzYwLjIxNTggMTMuMTcwNiA2MC41ODk4IDEzLjI2NiA2MC45OTg4IDEzLjI2NkM2MS40MDc4IDEzLjI2NiA2MS43OCAxMy4xNzA2IDYyLjExNTMgMTIuOTc5N0M2Mi40NTA2IDEyLjc5MjMgNjIuNzE3NyAxMi41NDA3IDYyLjkxNjcgMTIuMjI0OUM2My4xMTk0IDExLjkwNTYgNjMuMjIwNyAxMS41NTM0IDYzLjIyMDcgMTEuMTY4MUM2My4yMjA3IDEwLjg1OTMgNjMuMTUyNSAxMC41NzEyIDYzLjAxNjIgMTAuMzA0QzYyLjg4MzUgMTAuMDMzMyA2Mi43MDQ4IDkuODAyNTMgNjIuNDgwMSA5LjYxMTY2Wk02MC45OTg4IDYuMjc0ODZDNjAuNzc0IDYuMjc0ODYgNjAuNTY5NSA2LjIyNDU0IDYwLjM4NTMgNi4xMjM4OUM2MC4yMDExIDYuMDE5NzggNjAuMDUzNyA1Ljg4MjcgNTkuOTQzMiA1LjcxMjY1QzU5LjgzNjMgNS41MzkxMyA1OS43ODI5IDUuMzQ2NTIgNTkuNzgyOSA1LjEzNDgzQzU5Ljc4MjkgNC45MjY2IDU5LjgzNjMgNC43Mzc0NiA1OS45NDMyIDQuNTY3NDFDNjAuMDUzNyA0LjM5Mzg5IDYwLjIwMTEgNC4yNTY4MSA2MC4zODUzIDQuMTU2MTdDNjAuNTY5NSA0LjA1MjA2IDYwLjc3NCA0IDYwLjk5ODggNEM2MS4yMTk5IDQgNjEuNDIwNyA0LjA1MjA2IDYxLjYwMTMgNC4xNTYxN0M2MS43ODE4IDQuMjU2ODEgNjEuOTI1NSA0LjM5Mzg5IDYyLjAzMjQgNC41Njc0MUM2Mi4xNDI5IDQuNzM3NDYgNjIuMTk4MiA0LjkyNjYgNjIuMTk4MiA1LjEzNDgzQzYyLjE5ODIgNS4zNDY1MiA2Mi4xNDI5IDUuNTM5MTMgNjIuMDMyNCA1LjcxMjY1QzYxLjkyNTUgNS44ODI3IDYxLjc4MTggNi4wMTk3OCA2MS42MDEzIDYuMTIzODlDNjEuNDIwNyA2LjIyNDU0IDYxLjIxOTkgNi4yNzQ4NiA2MC45OTg4IDYuMjc0ODZaIn0pfSl9ZnVuY3Rpb24gSTUoKXtyZXR1cm4gUSgic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI3MCA1IDE4IDkiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpRKCJwYXRoIix7ZDoiTTg1LjU3MiAxMi4xMDM4Qzg2LjA2IDEyLjEwMzggODYuNDIwNyAxMS45ODkyIDg2LjY1NDIgMTEuNzYwMUM4Ni44ODQ3IDExLjUyODEgODcgMTEuMTY0MSA4NyAxMC42NjgxVjEwLjExMTJDODcgOS43NjkwMSA4Ni45MjA3IDkuNDYzMDIgODYuNzYyIDkuMTkzMjlDODYuNjAzMyA4LjkyMDY1IDg2LjM3NTggOC42OTczMyA4Ni4wNzk0IDguNTIzMzFDODUuNzgwMSA4LjM0OTI5IDg1LjQyMjMgOC4yMzc2MiA4NS4wMDYyIDguMTg4MzJMODMuMDE2OCA3Ljk1MzM5TDgxLjE5ODEgNi44NDgzNUM4MC45MjI3IDYuNjgwMTMgODAuNjYwOCA2LjU0MjM3IDgwLjQxMjMgNi40MzUwNUM4MC4xNjA4IDYuMzI0ODQgNzkuODk3NCA2LjIzNzgzIDc5LjYyMTkgNi4xNzQwMkM3OS4zNDY1IDYuMTEwMjEgNzkuMDM4MiA2LjA2NTI2IDc4LjY5NjkgNi4wMzkxNUM3OC4zNTI2IDYuMDEzMDUgNzcuOTUxNCA2IDc3LjQ5MzQgNkg3Ni44MTA4Qzc2LjM4ODcgNiA3NS45OTUgNi4wNDkzMSA3NS42Mjk4IDYuMTQ3OTJDNzUuMjYxNiA2LjI0MzYzIDc0LjkxODggNi4zNzEyNSA3NC42MDE1IDYuNTMwNzZDNzQuMjgxMSA2LjY5MDI4IDczLjk4NjIgNi44NjU3NiA3My43MTY4IDcuMDU3MThDNzMuNDQ0NCA3LjI0ODYgNzMuMTk1OSA3LjQzNzEyIDcyLjk3MTQgNy42MjI3NUw3Mi4yNTc0IDcuODUzMzNDNzEuODMyMyA3Ljk4Njc0IDcxLjUxNjQgOC4xODM5NyA3MS4zMDk5IDguNDQ1QzcxLjEwMzMgOC43MDMxMyA3MSA5LjAzMzc3IDcxIDkuNDM2OTJWMTAuNjQyQzcxIDExLjE0NjcgNzEuMTE1MyAxMS41MTY1IDcxLjM0NTggMTEuNzUxNEM3MS41NzYzIDExLjk4NjMgNzEuOTM3IDEyLjEwMzggNzIuNDI4IDEyLjEwMzhINzIuNzE1NEM3Mi43MDA0IDEyLjAzNzEgNzIuNjg4NSAxMS45NzA0IDcyLjY3OTUgMTEuOTAzN0M3Mi42NzA1IDExLjgzNDEgNzIuNjY2IDExLjc2NDUgNzIuNjY2IDExLjY5NDhDNzIuNjY2IDExLjM1NTUgNzIuNzQ5OCAxMS4wNDk1IDcyLjkxNzUgMTAuNzc2OUM3My4wODUxIDEwLjUwNDIgNzMuMzExMiAxMC4yODgyIDczLjU5NTYgMTAuMTI4N0M3My44NzcgOS45NjYyMyA3NC4xOTI4IDkuODg1MDIgNzQuNTQzMSA5Ljg4NTAyQzc0Ljg5MDQgOS44ODUwMiA3NS4yMDYyIDkuOTY2MjMgNzUuNDkwNiAxMC4xMjg3Qzc1Ljc3MiAxMC4yODgyIDc1Ljk5NjUgMTAuNTA0MiA3Ni4xNjQyIDEwLjc3NjlDNzYuMzMxOCAxMS4wNDk1IDc2LjQxNTcgMTEuMzU1NSA3Ni40MTU3IDExLjY5NDhDNzYuNDE1NyAxMS43NjQ1IDc2LjQxMTIgMTEuODM0MSA3Ni40MDIyIDExLjkwMzdDNzYuMzkzMiAxMS45NzA0IDc2LjM4MjcgMTIuMDM3MSA3Ni4zNzA4IDEyLjEwMzhIODEuNjM4MkM4MS42MjAzIDEyLjAzNzEgODEuNjA4MyAxMS45NzA0IDgxLjYwMjMgMTEuOTAzN0M4MS41OTMzIDExLjgzNDEgODEuNTg4OCAxMS43NjQ1IDgxLjU4ODggMTEuNjk0OEM4MS41ODg4IDExLjM1NTUgODEuNjcyNyAxMS4wNDk1IDgxLjg0MDMgMTAuNzc2OUM4Mi4wMDUgMTAuNTA0MiA4Mi4yMjk1IDEwLjI4ODIgODIuNTEzOSAxMC4xMjg3QzgyLjc5NTMgOS45NjYyMyA4My4xMTExIDkuODg1MDIgODMuNDYxNCA5Ljg4NTAyQzgzLjgxMTcgOS44ODUwMiA4NC4xMjkgOS45NjYyMyA4NC40MTM0IDEwLjEyODdDODQuNjk0OCAxMC4yODgyIDg0LjkxOTQgMTAuNTA0MiA4NS4wODcgMTAuNzc2OUM4NS4yNTE3IDExLjA0OTUgODUuMzM0IDExLjM1NTUgODUuMzM0IDExLjY5NDhDODUuMzM0IDExLjc2NDUgODUuMzMxIDExLjgzNDEgODUuMzI1IDExLjkwMzdDODUuMzE2IDExLjk3MDQgODUuMzA0MSAxMi4wMzcxIDg1LjI4OTEgMTIuMTAzOEg4NS41NzJaTTgzLjQ2MTQgMTNDODMuNzEyOSAxMyA4My45NDA0IDEyLjk0MiA4NC4xNDQgMTIuODI2Qzg0LjM0NzYgMTIuNzEgODQuNTA5MiAxMi41NTMzIDg0LjYyOSAxMi4zNTYxQzg0Ljc0ODcgMTIuMTU4OSA4NC44MDg2IDExLjkzODUgODQuODA4NiAxMS42OTQ4Qzg0LjgwODYgMTEuNDUxMiA4NC43NDg3IDExLjIzMDggODQuNjI5IDExLjAzMzZDODQuNTA5MiAxMC44MzYzIDg0LjM0NzYgMTAuNjc5NyA4NC4xNDQgMTAuNTYzN0M4My45NDA0IDEwLjQ0NzcgODMuNzEyOSAxMC4zODk3IDgzLjQ2MTQgMTAuMzg5N0M4My4yMDY5IDEwLjM4OTcgODIuOTc3OSAxMC40NDc3IDgyLjc3NDMgMTAuNTYzN0M4Mi41NzA4IDEwLjY3OTcgODIuNDA5MSAxMC44MzYzIDgyLjI4OTQgMTEuMDMzNkM4Mi4xNjk2IDExLjIzMDggODIuMTA5NyAxMS40NTEyIDgyLjEwOTcgMTEuNjk0OEM4Mi4xMDk3IDExLjkzODUgODIuMTY5NiAxMi4xNTg5IDgyLjI4OTQgMTIuMzU2MUM4Mi40MDkxIDEyLjU1MzMgODIuNTcwOCAxMi43MSA4Mi43NzQzIDEyLjgyNkM4Mi45Nzc5IDEyLjk0MiA4My4yMDY5IDEzIDgzLjQ2MTQgMTNaTTc0LjU0MzEgMTNDNzQuNzk0NiAxMyA3NS4wMjIxIDEyLjk0MiA3NS4yMjU3IDEyLjgyNkM3NS40MjkyIDEyLjcxIDc1LjU5MDkgMTIuNTUzMyA3NS43MTA2IDEyLjM1NjFDNzUuODMwNCAxMi4xNTg5IDc1Ljg5MDMgMTEuOTM4NSA3NS44OTAzIDExLjY5NDhDNzUuODkwMyAxMS40NTEyIDc1LjgzMDQgMTEuMjMwOCA3NS43MTA2IDExLjAzMzZDNzUuNTkwOSAxMC44MzYzIDc1LjQyOTIgMTAuNjc5NyA3NS4yMjU3IDEwLjU2MzdDNzUuMDIyMSAxMC40NDc3IDc0Ljc5NDYgMTAuMzg5NyA3NC41NDMxIDEwLjM4OTdDNzQuMjg4NiAxMC4zODk3IDc0LjA1OTYgMTAuNDQ3NyA3My44NTYgMTAuNTYzN0M3My42NTI0IDEwLjY3OTcgNzMuNDkwOCAxMC44MzYzIDczLjM3MSAxMS4wMzM2QzczLjI1MTMgMTEuMjMwOCA3My4xOTE0IDExLjQ1MTIgNzMuMTkxNCAxMS42OTQ4QzczLjE5MTQgMTEuOTM4NSA3My4yNTEzIDEyLjE1ODkgNzMuMzcxIDEyLjM1NjFDNzMuNDkwOCAxMi41NTMzIDczLjY1MjQgMTIuNzEgNzMuODU2IDEyLjgyNkM3NC4wNTk2IDEyLjk0MiA3NC4yODg2IDEzIDc0LjU0MzEgMTNaIn0pfSl9dmFyIGc5PTY1MCxtOT1gCi5sZW0tdG9nZ2xlOmhvdmVyIHsgY29sb3I6ICNmZmY7IH0KLmxlbS10b2dnbGU6aG92ZXIgLmxlbS1jaGV2cm9uIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44NSkgIWltcG9ydGFudDsgfQoubGVtLXNlbGVjdDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjE2KTsgfQoubGVtLXNlbGVjdDpmb2N1cyB7IG91dGxpbmU6IG5vbmU7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjI0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsgfQoubGVtLXByaW1hcnk6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBmaWx0ZXI6IGJyaWdodG5lc3MoMS4wOCk7IH0KLmxlbS1wcmltYXJ5LW9uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjIyKSAhaW1wb3J0YW50OyBmaWx0ZXI6IG5vbmU7IH0KLmxlbS1naG9zdDpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjIpOyBjb2xvcjogI2ZmZjsgfQoubGVtLWdob3N0OmRpc2FibGVkIHsgb3BhY2l0eTogMC40OyBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9Ci5sZW0tc2VnOmhvdmVyOm5vdChbYXJpYS1wcmVzc2VkPSJ0cnVlIl0pIHsgY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC45KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KSAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDkpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xOCk7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tc3BlZWQtb246aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuODgpICFpbXBvcnRhbnQ7IGJvcmRlci1jb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBjb2xvcjogIzBhMGEwYyAhaW1wb3J0YW50OyB9Ci5sZW0tc3BlZWQ6YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjk3KTsgfQpgLFQ1PVsxLDIsNSwyMF0sczM9MTAwMCxFNT17c3RhdHVzOiJpZGxlIixhcmM6MCxlbGFwc2VkTXM6MH07ZnVuY3Rpb24gSjgoe3VkaWQ6QyxleGVjOlp9KXtsZXRbRyxKXT1JKCEwKSxbcSxYXT1JKGExWzBdLmlkKSxbWSwkXT1JKGExWzBdLm1vZGUpLFtfLFZdPUkoMSksW0IsTF09SShFNSksW0gsRF09SShudWxsKSxQPUUxKCgpPT5hMS5maW5kKChqKT0+ai5pZD09PXEpPz9hMVswXSxbcV0pLEs9RTEoKCk9PnIzKFApLFtQXSksTj1SKDApLFU9UigiaWRsZSIpLFc9UihVNShZKSpfKSx5PVIoMCksRT1SKEspLGY9UihudWxsKTtiKCgpPT57Vy5jdXJyZW50PVU1KFkpKl99LFtZLF9dKTtsZXQgaz1SKG51bGwpO2IoKCk9PntsZXQgaj1FLmN1cnJlbnQsbD1OLmN1cnJlbnQ7aWYoRS5jdXJyZW50PUssaiYmaiE9PUspay5jdXJyZW50PXA5KGosbCxLLHBlcmZvcm1hbmNlLm5vdygpKTtOLmN1cnJlbnQ9MCx5LmN1cnJlbnQ9MCxVLmN1cnJlbnQ9ImlkbGUiLGYuY3VycmVudD1udWxsLEwoRTUpfSxbS10pO2xldCB2PVIoMCkscj1SKG51bGwpLGE9UihudWxsKTtiKCgpPT57bGV0IGo9MCxsPShwKT0+e2xldCBZMT1yLmN1cnJlbnQsSTE9WTE9PW51bGw/MTY6TWF0aC5taW4oNjQscC1ZMSk7aWYoci5jdXJyZW50PXAsdi5jdXJyZW50PSh2LmN1cnJlbnQrSTEqMC4wMDAxMiklKE1hdGguUEkqMiksVS5jdXJyZW50PT09InBsYXlpbmciKXtsZXQgWjE9Vy5jdXJyZW50KkkxLzEwMDA7Ti5jdXJyZW50Kz1aMSx5LmN1cnJlbnQrPUkxO2xldCBHMT1FLmN1cnJlbnQudG90YWxEaXN0YW5jZTtpZighRS5jdXJyZW50LnRyYWlsLmxvb3AmJk4uY3VycmVudD49RzEpTi5jdXJyZW50PUcxLFUuY3VycmVudD0icGF1c2VkIixMKHtzdGF0dXM6InBhdXNlZCIsYXJjOkcxLGVsYXBzZWRNczp5LmN1cnJlbnR9KX1sZXQgQjE9YS5jdXJyZW50O2lmKEIxKXtsZXQgWjE9RS5jdXJyZW50LEcxPW51bGwsUz1rLmN1cnJlbnQ7aWYoUyl7bGV0IGM9KHAtUy5zdGFydE1zKS9nOTtpZihjPj0xKWsuY3VycmVudD1udWxsO2Vsc2V7bGV0IGQ9YzkoYyk7WjE9ZDkoUyxkKSxHMT17eDpTLnByZXZNYXJrZXIueCsoUy5uZXh0TWFya2VyLngtUy5wcmV2TWFya2VyLngpKmQseTpTLnByZXZNYXJrZXIueSsoUy5uZXh0TWFya2VyLnktUy5wcmV2TWFya2VyLnkpKmQsejpTLnByZXZNYXJrZXIueisoUy5uZXh0TWFya2VyLnotUy5wcmV2TWFya2VyLnopKmR9fX1sOShCMSxaMSxOLmN1cnJlbnQsdi5jdXJyZW50LHAsVS5jdXJyZW50PT09InBsYXlpbmciLEcxKX1qPXJlcXVlc3RBbmltYXRpb25GcmFtZShsKX07cmV0dXJuIGo9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGwpLCgpPT5jYW5jZWxBbmltYXRpb25GcmFtZShqKX0sW10pLGIoKCk9PntsZXQgaj1zZXRJbnRlcnZhbCgoKT0+e2lmKFUuY3VycmVudD09PSJwbGF5aW5nIilMKHtzdGF0dXM6InBsYXlpbmciLGFyYzpOLmN1cnJlbnQsZWxhcHNlZE1zOnkuY3VycmVudH0pfSwyNTApO3JldHVybigpPT5jbGVhckludGVydmFsKGopfSxbXSksYigoKT0+e2lmKEIuc3RhdHVzIT09InBsYXlpbmciKXJldHVybjtsZXQgaj0hMSxsPTAscD1udWxsLFkxPWFzeW5jKCk9PntpZihqfHxwKXJldHVybjtsZXQgQjE9RGF0ZS5ub3coKTtpZihCMS1sPHMzKXJldHVybjtsPUIxO2xldCBaMT1sMShFLmN1cnJlbnQsTi5jdXJyZW50KSxHMT1geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7WjEubGF0LnRvRml4ZWQoNyl9LCR7WjEubG5nLnRvRml4ZWQoNyl9YDtwPVooRzEpLnRoZW4oKFMpPT57aWYoailyZXR1cm47aWYoUy5leGl0Q29kZSE9PTApRChaOChTLnN0ZGVycil8fCJzaW1jdGwgbG9jYXRpb24gc2V0IGZhaWxlZCIpO2Vsc2UgRChudWxsKX0pLmNhdGNoKChTKT0+e2lmKCFqKUQoUyBpbnN0YW5jZW9mIEVycm9yP1MubWVzc2FnZTpTdHJpbmcoUykpfSkuZmluYWxseSgoKT0+e3A9bnVsbH0pfTtZMSgpO2xldCBJMT1zZXRJbnRlcnZhbChZMSxzMyk7cmV0dXJuKCk9PntqPSEwLGNsZWFySW50ZXJ2YWwoSTEpfX0sW0Iuc3RhdHVzLEMsWl0pO2xldCBuPWgoKCk9PntpZihVLmN1cnJlbnQ9PT0icGxheWluZyIpe1UuY3VycmVudD0icGF1c2VkIixMKChqKT0+KHsuLi5qLHN0YXR1czoicGF1c2VkIn0pKTtyZXR1cm59aWYoTi5jdXJyZW50Pj1FLmN1cnJlbnQudG90YWxEaXN0YW5jZSYmIUUuY3VycmVudC50cmFpbC5sb29wKU4uY3VycmVudD0wLHkuY3VycmVudD0wO2lmKGYuY3VycmVudD09bnVsbCl7bGV0IGo9bDEoRS5jdXJyZW50LE4uY3VycmVudCk7Zi5jdXJyZW50PXtsYXQ6ai5sYXQsbG5nOmoubG5nfX1VLmN1cnJlbnQ9InBsYXlpbmciLEwoKGopPT4oey4uLmosc3RhdHVzOiJwbGF5aW5nIixhcmM6Ti5jdXJyZW50LGVsYXBzZWRNczp5LmN1cnJlbnR9KSl9LFtdKSxzPWgoKCk9PntVLmN1cnJlbnQ9ImlkbGUiLE4uY3VycmVudD0wLHkuY3VycmVudD0wLEwoRTUpO2xldCBqPWYuY3VycmVudDtmLmN1cnJlbnQ9bnVsbDtsZXQgbD1qP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHtqLmxhdC50b0ZpeGVkKDcpfSwke2oubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgO1oobCkudGhlbigocCk9PntpZihwLmV4aXRDb2RlIT09MClEKFo4KHAuc3RkZXJyKXx8bnVsbCk7ZWxzZSBEKG51bGwpfSl9LFtaLENdKSxnMT1oKChqKT0+e1goaik7bGV0IGw9YTEuZmluZCgocCk9PnAuaWQ9PT1qKTtpZihsKSQobC5tb2RlKX0sW10pO2IoKCk9PigpPT57aWYoVS5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgaj1mLmN1cnJlbnQsbD1qP2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHtqLmxhdC50b0ZpeGVkKDcpfSwke2oubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgO1oobCkuY2F0Y2goKCk9Pnt9KX0sW1osQ10pO2xldCBLMT1CLnN0YXR1cz09PSJwbGF5aW5nIix6MT1LMT9gJHtTNShCLmFyYyl9IMK3ICR7ZTMoQi5lbGFwc2VkTXMpfWA6YCR7UzUoSy50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBRKCJkaXYiLHtzdHlsZTp7Li4ubzkscGFkZGluZzoiOHB4IDEycHggMTJweCJ9LGNoaWxkcmVuOltRKCJzdHlsZSIse2NoaWxkcmVuOm05fSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5KKChqKT0+IWopLHN0eWxlOnI5LGNsYXNzTmFtZToibGVtLXRvZ2dsZSIsImFyaWEtZXhwYW5kZWQiOkcsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTpzOSxjaGlsZHJlbjoiTG9jYXRpb24ifSksUSgic3BhbiIse3N0eWxlOm45LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6ey4uLnQ5LGJhY2tncm91bmQ6SzE/IiM0YWRlODAiOksudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OksxPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksejFdfSksUShmMix7b3BlbjpHfSldfSksRyYmUShYMSx7Y2hpbGRyZW46W1EoImRpdiIse3N0eWxlOmU5LGNoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTpDNyxjaGlsZHJlbjpbUSgic2VsZWN0Iix7dmFsdWU6cSxvbkNoYW5nZTooaik9PmcxKGoudGFyZ2V0LnZhbHVlKSxzdHlsZTpaNyxjbGFzc05hbWU6ImxlbS1zZWxlY3QiLCJhcmlhLWxhYmVsIjoiVHJhaWwiLGNoaWxkcmVuOmExLm1hcCgoaik9PlEoIm9wdGlvbiIse3ZhbHVlOmouaWQsY2hpbGRyZW46ai5uYW1lfSxqLmlkKSl9KSxRKCJzcGFuIix7c3R5bGU6RzcsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46UShmMix7b3BlbjohMX0pfSldfSksUSgiZGl2Iix7c3R5bGU6SjcsY2hpbGRyZW46UC5kZXNjcmlwdGlvbn0pXX0pLFEoImRpdiIse3N0eWxlOnE3LGNoaWxkcmVuOltRKCJjYW52YXMiLHtyZWY6YSxzdHlsZTpYN30pLFEoZjkse3ByZXBhcmVkOkt9KV19KSxRKCJkaXYiLHtzdHlsZTpRNyxjaGlsZHJlbjpbUSh3NSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTpTNShCLmFyYyl9KSxRKHc1LHtsYWJlbDoiUGFjZSIsdmFsdWU6aTkoVy5jdXJyZW50KX0pLFEodzUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTplMyhCLmVsYXBzZWRNcyl9KV19KSxRKCJkaXYiLHtzdHlsZTpfNyxjaGlsZHJlbjpbUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOm4sc3R5bGU6ey4uLkw3LGJhY2tncm91bmQ6SzE/InJnYmEoMjU1LDI1NSwyNTUsMC4xNikiOiIjMzRkMzk5Iixjb2xvcjpLMT8iI2ZmZiI6IiMwNjIwMTgifSxjbGFzc05hbWU6SzE/ImxlbS1wcmltYXJ5IGxlbS1wcmltYXJ5LW9uIjoibGVtLXByaW1hcnkiLCJhcmlhLXByZXNzZWQiOksxLHRpdGxlOksxPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltLMT9RKHo1LHt9KTpRKE81LHt9KSxRKCJzcGFuIix7Y2hpbGRyZW46SzE/IlBhdXNlIjoiUGxheSJ9KV19KSxRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6cyxzdHlsZTpLNyxjbGFzc05hbWU6ImxlbS1naG9zdCIsZGlzYWJsZWQ6Qi5zdGF0dXM9PT0iaWRsZSImJkIuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbUShQNSx7fSksUSgic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLFEoImRpdiIse3N0eWxlOkI3LGNoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTp7ZmxleDoxLG1pbldpZHRoOjB9LGNoaWxkcmVuOlEoeDkse2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOlksb25DaGFuZ2U6KGopPT4kKGopLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246UShXNSx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOlEoazUse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246UShBNSx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpRKEk1LHt9KX1dfSl9KSxRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgaj1UNS5pbmRleE9mKF8pLGw9VDVbKGorMSklVDUubGVuZ3RoXTtWKGwpfSxzdHlsZTp7Li4udTIsYmFja2dyb3VuZDpfPjE/IiNmZmYiOnUyLmJhY2tncm91bmQsYm9yZGVyQ29sb3I6Xz4xPyIjZmZmIjp1Mi5ib3JkZXJDb2xvcixjb2xvcjpfPjE/IiMwYTBhMGMiOnUyLmNvbG9yfSxjbGFzc05hbWU6Xz4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIjoibGVtLXNwZWVkIiwiYXJpYS1sYWJlbCI6YFNwZWVkICR7X33DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtffcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltRKE01LHt9KSxfPjEmJlEoInNwYW4iLHtzdHlsZTpINyxjaGlsZHJlbjpbXywiw5ciXX0pXX0pXX0pLEgmJlEoImRpdiIse3N0eWxlOkY3LGNoaWxkcmVuOkh9KV19KV19KX12YXIgdzU9QjIoZnVuY3Rpb24oe2xhYmVsOlosdmFsdWU6R30pe3JldHVybiBRKCJkaXYiLHtzdHlsZTpZNyxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6JDcsY2hpbGRyZW46Wn0pLFEoImRpdiIse3N0eWxlOlY3LGNoaWxkcmVuOkd9KV19KX0pO2Z1bmN0aW9uIHg5KHt2YWx1ZTpDLG9uQ2hhbmdlOlosb3B0aW9uczpHLGFyaWFMYWJlbDpKfSl7cmV0dXJuIFEoImRpdiIse3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6SixzdHlsZTpENyxjaGlsZHJlbjpHLm1hcCgocSk9PntsZXQgWD1xLnZhbHVlPT09QztyZXR1cm4gUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5aKHEudmFsdWUpLHN0eWxlOnsuLi5ONyxiYWNrZ3JvdW5kOlg/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJ0cmFuc3BhcmVudCIsY29sb3I6WD8iI2ZmZiI6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9LGNsYXNzTmFtZTpYPyJsZW0tc2VnIGxlbS1zZWctYWN0aXZlIjoibGVtLXNlZyIsImFyaWEtcHJlc3NlZCI6WCwiYXJpYS1sYWJlbCI6cS5pY29uP3EubGFiZWw6dm9pZCAwLHRpdGxlOnEuaWNvbj9xLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpxLmljb24/P3EubGFiZWx9LHEudmFsdWUpfSl9KX1mdW5jdGlvbiBmOSh7cHJlcGFyZWQ6Q30pe2lmKEMucmF3TWF4QWx0LUMucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIFEoWDEse2NoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTp7Li4uRzgsdG9wOjgsbGVmdDoxMH0sY2hpbGRyZW46W1EocDIse2RpcjoidXAifSksIiAiLEM4KEMucmF3TWF4QWx0KV19KSxRKCJkaXYiLHtzdHlsZTp7Li4uRzgsdG9wOjgscmlnaHQ6MTB9LGNoaWxkcmVuOltRKHAyLHtkaXI6ImRvd24ifSksIiAiLEM4KEMucmF3TWluQWx0KV19KV19KX12YXIgbjM9MTQwO2Z1bmN0aW9uIHQzKEMsWil7bGV0IEc9QXJyYXkoWik7Zm9yKGxldCBKPTA7SjxaO0orKyl7bGV0IHE9Wj09PTE/MDpKLyhaLTEpLFg9bDEoQyxxKkMudG90YWxEaXN0YW5jZSk7R1tKXT17eDpYLngseTpYLnksejpYLnp9fXJldHVybiBHfWZ1bmN0aW9uIHA5KEMsWixHLEope2xldCBxPShDLmJvdW5kcy54WzBdK0MuYm91bmRzLnhbMV0pLzIsWD0oQy5ib3VuZHMuelswXStDLmJvdW5kcy56WzFdKS8yLFk9Qy5ib3VuZHMueVswXSwkPU1hdGgubWF4KDEsQy5ib3VuZHMueFsxXS1DLmJvdW5kcy54WzBdLEMuYm91bmRzLnpbMV0tQy5ib3VuZHMuelswXSksXz0oRy5ib3VuZHMueFswXStHLmJvdW5kcy54WzFdKS8yLFY9KEcuYm91bmRzLnpbMF0rRy5ib3VuZHMuelsxXSkvMixCPUcuYm91bmRzLnlbMF0sSD1NYXRoLm1heCgxLEcuYm91bmRzLnhbMV0tRy5ib3VuZHMueFswXSxHLmJvdW5kcy56WzFdLUcuYm91bmRzLnpbMF0pLyQsUD10MyhDLG4zKS5tYXAoKGspPT4oe3g6KGsueC1xKSpIK18seTooay55LVkpKkgrQix6OihrLnotWCkqSCtWfSkpLEs9dDMoRyxuMyksTj0oQy50cmFpbC5sb29wfHxHLnRyYWlsLmxvb3ApPz8hMSxVPXU5KFAsSyxOKSxXPWwxKEMsWikseT17eDooVy54LXEpKkgrXyx5OihXLnktWSkqSCtCLHo6KFcuei1YKSpIK1Z9LEU9bDEoRywwKSxmPXt4OkUueCx5OkUueSx6OkUuen07cmV0dXJue2Zyb206Qyx0bzpHLGZyb21QdHM6UCx0b1B0czpVLHByZXZNYXJrZXI6eSxuZXh0TWFya2VyOmYsc3RhcnRNczpKfX1mdW5jdGlvbiB1OShDLFosRyl7bGV0IEo9Qy5sZW5ndGgscT0xLzAsWD0wLFk9ITEsJD1bWixbLi4uWl0ucmV2ZXJzZSgpXTtmb3IobGV0IEI9MDtCPCQubGVuZ3RoO0IrKyl7bGV0IEw9JFtCXSxIPUc/SjoxO2ZvcihsZXQgRD0wO0Q8SDtEKyspe2xldCBQPTA7Zm9yKGxldCBLPTA7SzxKO0srKyl7bGV0IE49Q1tLXSxVPUxbKEsrRCklSl0sVz1OLngtVS54LHk9Ti55LVUueSxFPU4uei1VLno7aWYoUCs9VypXK3kqeStFKkUsUD49cSlicmVha31pZihQPHEpcT1QLFg9RCxZPUI9PT0xfX1sZXQgXz1ZP1suLi5aXS5yZXZlcnNlKCk6WixWPUFycmF5KEopO2ZvcihsZXQgQj0wO0I8SjtCKyspVltCXT1fWyhCK1gpJUpdO3JldHVybiBWfWZ1bmN0aW9uIGQ5KEMsWil7bGV0IEc9Qy5mcm9tUHRzLmxlbmd0aCxKPUFycmF5KEcpLHE9MCxYPW51bGwsWT0xLzAsJD0tMS8wLF89MS8wLFY9LTEvMCxCPTEvMCxMPS0xLzA7Zm9yKGxldCBIPTA7SDxHO0grKyl7bGV0IEQ9Qy5mcm9tUHRzW0hdLFA9Qy50b1B0c1tIXSxLPUQueCsoUC54LUQueCkqWixOPUQueSsoUC55LUQueSkqWixVPUQueisoUC56LUQueikqWjtpZihYKXtsZXQgeT1LLVgueCxFPU4tWC55LGY9VS1YLno7cSs9TWF0aC5zcXJ0KHkqeStFKkUrZipmKX1sZXQgVz17eDpLLHk6Tix6OlUsYXJjOnEsbGF0OjAsbG5nOjB9O2lmKEpbSF09VyxYPVcsSzxZKVk9SztpZihLPiQpJD1LO2lmKE48XylfPU47aWYoTj5WKVY9TjtpZihVPEIpQj1VO2lmKFU+TClMPVV9cmV0dXJue3RyYWlsOkMudG8udHJhaWwsb3JpZ2luOkMudG8ub3JpZ2luLHBvaW50czpKLHRvdGFsRGlzdGFuY2U6cSxib3VuZHM6e3g6W1ksJF0seTpbXyxWXSx6OltCLExdfSxyYXdNaW5BbHQ6Qy50by5yYXdNaW5BbHQrKEMuZnJvbS5yYXdNaW5BbHQtQy50by5yYXdNaW5BbHQpKigxLVopLHJhd01heEFsdDpDLnRvLnJhd01heEFsdCsoQy5mcm9tLnJhd01heEFsdC1DLnRvLnJhd01heEFsdCkqKDEtWil9fWZ1bmN0aW9uIGM5KEMpe3JldHVybiBDPDAuNT8yKkMqQzoxLU1hdGgucG93KC0yKkMrMiwyKS8yfWZ1bmN0aW9uIGw5KEMsWixHLEoscSxYLFkpe2xldCAkPUMuZ2V0Q29udGV4dCgiMmQiKTtpZighJClyZXR1cm47bGV0e2NsaWVudFdpZHRoOl8sY2xpZW50SGVpZ2h0OlZ9PUM7aWYoXz09PTB8fFY9PT0wKXJldHVybjtsZXQgQj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLEw9TWF0aC5yb3VuZChfKkIpLEg9TWF0aC5yb3VuZChWKkIpO2lmKEMud2lkdGghPT1MfHxDLmhlaWdodCE9PUgpQy53aWR0aD1MLEMuaGVpZ2h0PUg7JC5zZXRUcmFuc2Zvcm0oQiwwLDAsQiwwLDApLCQuY2xlYXJSZWN0KDAsMCxfLFYpO2xldCBEPSQuY3JlYXRlUmFkaWFsR3JhZGllbnQoXyowLjUsViowLjU1LE1hdGgubWluKF8sVikqMC4yLF8qMC41LFYqMC41NSxNYXRoLm1heChfLFYpKjAuODUpO0QuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxELmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksJC5maWxsU3R5bGU9RCwkLmZpbGxSZWN0KDAsMCxfLFYpLGE5KCQsXyxWKTtsZXR7cG9pbnRzOlAsYm91bmRzOkt9PVo7aWYoUC5sZW5ndGg8MilyZXR1cm47bGV0IE49MjgqTWF0aC5QSS8xODAsVT1NYXRoLnNpbihOKSxXPU1hdGguY29zKE4pLHk9TWF0aC5zaW4oSiksRT1NYXRoLmNvcyhKKSxmPShLLnhbMF0rSy54WzFdKS8yLGs9KEsuelswXStLLnpbMV0pLzIsdj1LLnhbMV0tSy54WzBdLHI9Sy56WzFdLUsuelswXSxhPUsueVsxXS1LLnlbMF0sbj1NYXRoLm1heCh2LHIpKjEuMDUscz1NYXRoLm1heChyKlcrYSpVLHYqMC40KSoxLjE1LGcxPV8qMC4wOCxLMT1WKjAuMTgsejE9TWF0aC5taW4oKF8tZzEqMikvbiwoVi1LMSoyKS9zKSoxLjQ1LGo9YTwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLGEpKSxsPShTLGMsZCk9PntsZXQgaT1TLWYsJDE9ZC1rLFAxPWkqRSskMSp5LE0xPS1pKnkrJDEqRSxiMT1jKmosaTE9YjEqVy1NMSpVLEgxPWIxKlUrTTEqVztyZXR1cm57c3g6Xy8yK1AxKnoxLHN5OlYqMC41NS1pMSp6MSxkZXB0aDpIMX19LHA9MzgsWTE9UC5tYXAoKFMpPT57bGV0IGM9bChTLngsUy55LFMueiksZD1sKFMueCwwLFMueiksaT17c3g6Yy5zeCxzeTpNYXRoLm1heChkLnN5LGMuc3krcCksZGVwdGg6ZC5kZXB0aH07cmV0dXJue3A6Uyx0b3A6Yyxib3Q6aX19KTtmb3IobGV0IFM9MTtTPFkxLmxlbmd0aDtTKyspe2xldCBjPVkxW1MtMV0sZD1ZMVtTXSxpPSQuY3JlYXRlTGluZWFyR3JhZGllbnQoKGMudG9wLnN4K2QudG9wLnN4KS8yLChjLnRvcC5zeStkLnRvcC5zeSkvMiwoYy5ib3Quc3grZC5ib3Quc3gpLzIsKGMuYm90LnN5K2QuYm90LnN5KS8yKTtpLmFkZENvbG9yU3RvcCgwLCJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIiksaS5hZGRDb2xvclN0b3AoMC40NSwicmdiYSgxODAsMTgwLDE4NSwwLjI4KSIpLGkuYWRkQ29sb3JTdG9wKDAuODUsInJnYmEoNDAsNDAsNDUsMC4xOCkiKSxpLmFkZENvbG9yU3RvcCgxLCJyZ2JhKDAsMCwwLDApIiksJC5maWxsU3R5bGU9aSwkLmJlZ2luUGF0aCgpLCQubW92ZVRvKGMudG9wLnN4LGMudG9wLnN5KSwkLmxpbmVUbyhkLnRvcC5zeCxkLnRvcC5zeSksJC5saW5lVG8oZC5ib3Quc3gsZC5ib3Quc3kpLCQubGluZVRvKGMuYm90LnN4LGMuYm90LnN5KSwkLmNsb3NlUGF0aCgpLCQuZmlsbCgpfSQuc3Ryb2tlU3R5bGU9IiNmZmZmZmYiLCQubGluZVdpZHRoPTEuNiwkLmxpbmVDYXA9InJvdW5kIiwkLmxpbmVKb2luPSJyb3VuZCIsJC5iZWdpblBhdGgoKTtmb3IobGV0IFM9MDtTPFkxLmxlbmd0aDtTKyspe2xldHt0b3A6Y309WTFbU107aWYoUz09PTApJC5tb3ZlVG8oYy5zeCxjLnN5KTtlbHNlICQubGluZVRvKGMuc3gsYy5zeSl9JC5zdHJva2UoKTtsZXQgSTE9RzskLnN0cm9rZVN0eWxlPSIjZjlkMmE0IiwkLmxpbmVXaWR0aD0yLjIsJC5iZWdpblBhdGgoKTtsZXQgQjE9ITE7Zm9yKGxldCBTPTA7UzxZMS5sZW5ndGg7UysrKXtsZXR7cDpjLHRvcDpkfT1ZMVtTXTtpZihjLmFyYz5JMSlicmVhaztpZighQjEpJC5tb3ZlVG8oZC5zeCxkLnN5KSxCMT0hMDtlbHNlICQubGluZVRvKGQuc3gsZC5zeSl9aWYoQjEpJC5zdHJva2UoKTtsZXQgWjE9WT8/bDEoWixHKSxHMT1sKFoxLngsWjEueSxaMS56KTtpZihYKXtsZXQgZD1xJTI2MDAvMjYwMCxpPTQrMjIqZCwkMT0wLjIyKigxLWQpLFAxPSQuY3JlYXRlUmFkaWFsR3JhZGllbnQoRzEuc3gsRzEuc3ksaSowLjUsRzEuc3gsRzEuc3ksaSk7UDEuYWRkQ29sb3JTdG9wKDAsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSxQMS5hZGRDb2xvclN0b3AoMC43LGByZ2JhKDI1NSwyNTUsMjU1LCR7JDEudG9GaXhlZCgzKX0pYCksUDEuYWRkQ29sb3JTdG9wKDEsInJnYmEoMjU1LDI1NSwyNTUsMCkiKSwkLmZpbGxTdHlsZT1QMSwkLmJlZ2luUGF0aCgpLCQuYXJjKEcxLnN4LEcxLnN5LGksMCxNYXRoLlBJKjIpLCQuZmlsbCgpfSQuZmlsbFN0eWxlPSIjZmZmIiwkLmJlZ2luUGF0aCgpLCQuYXJjKEcxLnN4LEcxLnN5LDMuOCwwLE1hdGguUEkqMiksJC5maWxsKCl9ZnVuY3Rpb24gYTkoQyxaLEcpe0MuZmlsbFN0eWxlPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIjtmb3IobGV0IFg9NztYPEc7WCs9MTQpZm9yKGxldCBZPTc7WTxaO1krPTE0KUMuYmVnaW5QYXRoKCksQy5hcmMoWSxYLDAuNywwLE1hdGguUEkqMiksQy5maWxsKCl9ZnVuY3Rpb24gUzUoQyl7aWYoQzwxMDAwKXJldHVybmAke0MudG9GaXhlZCgwKX0gbWA7cmV0dXJuYCR7KEMvMTAwMCkudG9GaXhlZCgyKX0ga21gfWZ1bmN0aW9uIGUzKEMpe2xldCBaPU1hdGguZmxvb3IoQy8xMDAwKSxHPU1hdGguZmxvb3IoWi8zNjAwKSxKPU1hdGguZmxvb3IoWiUzNjAwLzYwKSxxPVolNjA7aWYoRz4wKXJldHVybmAke0d9OiR7Si50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHtxLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWA7cmV0dXJuYCR7Sn06JHtxLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfWB9ZnVuY3Rpb24gaTkoQyl7aWYoQzw9MClyZXR1cm4i4oCUIjtpZihDPjcpcmV0dXJuYCR7KEMqMy42KS50b0ZpeGVkKDApfSBrbS9oYDtsZXQgWj0xMDAwL0MsRz1NYXRoLmZsb29yKFovNjApLEo9TWF0aC5yb3VuZChaJTYwKTtyZXR1cm5gJHtHfToke0oudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9L2ttYH1mdW5jdGlvbiBDOChDKXtyZXR1cm5gJHtDLnRvRml4ZWQoMCl9IG1gfWZ1bmN0aW9uIFo4KEMpe2xldCBaPUMudHJpbSgpO2lmKCFaKXJldHVybiIiO2xldCBHPVoubWF0Y2goL1JlYXNvbjpccyooLispJC9tKTtpZihHKXJldHVybiBHWzFdO3JldHVybiBaLnNwbGl0KGAKYCkuc2xpY2UoLTEpWzBdPz9afXZhciBvOT17YmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjEwLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjEwfSxyOT17ZGlzcGxheToiZ3JpZCIsZ3JpZFRlbXBsYXRlQ29sdW1uczoiYXV0byAxZnIgYXV0byIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6OCxiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2VlZSIscGFkZGluZzoiMTBweCA0cHgiLG1hcmdpbjoiLThweCAtNHB4IixjdXJzb3I6InBvaW50ZXIiLHdpZHRoOiJjYWxjKDEwMCUgKyA4cHgpIix0ZXh0QWxpZ246ImxlZnQiLG1pbkhlaWdodDozNixsaW5lSGVpZ2h0OjF9LHM5PXtmb250U2l6ZToxMSxmb250V2VpZ2h0OjYwMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIix0ZXh0VHJhbnNmb3JtOiJ1cHBlcmNhc2UiLGxldHRlclNwYWNpbmc6IjAuMDhlbSIsbGluZUhlaWdodDoxLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIifSxuOT17Zm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NixqdXN0aWZ5U2VsZjoiZW5kIixsaW5lSGVpZ2h0OjF9LHQ5PXt3aWR0aDo2LGhlaWdodDo2LGJvcmRlclJhZGl1czoiNTAlIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kIDAuMnMsIGJveC1zaGFkb3cgMC4ycyJ9LGU5PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0fSxDNz17cG9zaXRpb246InJlbGF0aXZlIixkaXNwbGF5OiJibG9jayJ9LFo3PXthcHBlYXJhbmNlOiJub25lIixXZWJraXRBcHBlYXJhbmNlOiJub25lIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDQpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6Nixjb2xvcjoiI2VlZSIsZm9udFNpemU6MTIscGFkZGluZzoiNnB4IDI2cHggNnB4IDhweCIsZm9udEZhbWlseToiaW5oZXJpdCIsY3Vyc29yOiJwb2ludGVyIix3aWR0aDoiMTAwJSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjEycywgYm9yZGVyLWNvbG9yIDAuMTJzIn0sRzc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6OSx0b3A6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVZKC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIifSxKNz17Zm9udFNpemU6MTAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkifSxxNz17cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDoiMTAwJSIsYXNwZWN0UmF0aW86IjE2IC8gMTEiLGJvcmRlclJhZGl1czoxMCxvdmVyZmxvdzoiaGlkZGVuIixiYWNrZ3JvdW5kOiIjMGEwYTBjIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIn0sWDc9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGRpc3BsYXk6ImJsb2NrIn0sRzg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjY1KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44NSkiLGZvbnRTaXplOjEwLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixwYWRkaW5nOiIycHggNnB4Iixib3JkZXJSYWRpdXM6NSxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGxldHRlclNwYWNpbmc6IjAuMDJlbSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KSJ9LFE3PXtkaXNwbGF5OiJncmlkIixncmlkVGVtcGxhdGVDb2x1bW5zOiIxZnIgMWZyIDFmciIsZ2FwOjZ9LFk3PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDoyLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wMykiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wNikiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjVweCA3cHgiLG1pbldpZHRoOjB9LCQ3PXtmb250U2l6ZTo5LHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wNmVtIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjQ1KSJ9LFY3PXtmb250U2l6ZToxMixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsY29sb3I6IiNmZmYiLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LF83PXtkaXNwbGF5OiJmbGV4IixnYXA6Nn0sTDc9e2ZsZXg6MSxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDo2LHBhZGRpbmc6IjhweCAxMHB4Iixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo3LGZvbnRTaXplOjEyLGZvbnRXZWlnaHQ6NjAwLGN1cnNvcjoicG9pbnRlciIsZm9udEZhbWlseToiaW5oZXJpdCJ9LEs3PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDo2LHBhZGRpbmc6IjhweCAxMnB4Iixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6Nyxmb250U2l6ZToxMixmb250V2VpZ2h0OjUwMCxiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44NSkiLGN1cnNvcjoicG9pbnRlciIsZm9udEZhbWlseToiaW5oZXJpdCJ9LEI3PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJyb3ciLGFsaWduSXRlbXM6InN0cmV0Y2giLGdhcDo2fSx1Mj17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixnYXA6NCxwYWRkaW5nOiIwIDEwcHgiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGJvcmRlclJhZGl1czo3LGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wNCkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODUpIixjdXJzb3I6InBvaW50ZXIiLGZvbnRGYW1pbHk6ImluaGVyaXQiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NjAwLG1pbldpZHRoOjU2fSxINz17Zm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRWYXJpYW50TnVtZXJpYzoidGFidWxhci1udW1zIn0sRDc9e2Rpc3BsYXk6ImZsZXgiLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wNCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGJvcmRlclJhZGl1czo3LHBhZGRpbmc6MixnYXA6Mn0sTjc9e2ZsZXg6MSxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJvcmRlcjoibm9uZSIsYm9yZGVyUmFkaXVzOjUscGFkZGluZzoiNXB4IDhweCIsZm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsY3Vyc29yOiJwb2ludGVyIixmb250RmFtaWx5OiJpbmhlcml0Iix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kIDAuMTJzLCBjb2xvciAwLjEycyIsbWluSGVpZ2h0OjIyfSxGNz17YmFja2dyb3VuZDoicmdiYSgyNDgsMTEzLDExMywwLjA4KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNDgsMTEzLDExMywwLjIpIixjb2xvcjoiI2ZjYTVhNSIsZm9udFNpemU6MTEscGFkZGluZzoiNnB4IDhweCIsYm9yZGVyUmFkaXVzOjZ9O2Z1bmN0aW9uIFU3KEMpe2xldFtaLEddPUkobnVsbCksSj1SKG5ldyBTZXQpLHE9aCgoWCk9PntyZXR1cm4gSi5jdXJyZW50LmFkZChYKSwoKT0+e0ouY3VycmVudC5kZWxldGUoWCl9fSxbXSk7cmV0dXJuIGIoKCk9PntpZighQylyZXR1cm47bGV0IFg9bmV3IEFib3J0Q29udHJvbGxlcixZPSExLCQ9bnVsbCxfPUMucmVwbGFjZSgvXC9zdHJlYW1cLm1qcGVnJC8sIiIpLFY9KE4pPT57aWYoTi53aWR0aDw9MHx8Ti5oZWlnaHQ8PTApcmV0dXJuO0coKFUpPT5VJiZVLndpZHRoPT09Ti53aWR0aCYmVS5oZWlnaHQ9PT1OLmhlaWdodCYmVS5vcmllbnRhdGlvbj09PU4ub3JpZW50YXRpb24/VTpOKX0sQj0oKT0+e2ZldGNoKGAke199L2NvbmZpZ2Ase3NpZ25hbDpYLnNpZ25hbH0pLnRoZW4oKE4pPT5OLmpzb24oKSkudGhlbihWKS5jYXRjaCgoKT0+e30pfTtCKCk7bGV0IEw9c2V0SW50ZXJ2YWwoQiwxMDAwKSxIPW5ldyBVUkwoQyk7SC5zZWFyY2hQYXJhbXMuc2V0KCJyYXciLCIxIik7bGV0IEQ9SC50b1N0cmluZygpLFA9KCk9PntpZihZfHxYLnNpZ25hbC5hYm9ydGVkfHwkKXJldHVybjskPXNldFRpbWVvdXQoKCk9PnskPW51bGwsSygpfSwxMDAwKX0sSz1hc3luYygpPT57dHJ5e2xldCBVPShhd2FpdCBmZXRjaChELHtzaWduYWw6WC5zaWduYWx9KSkuYm9keT8uZ2V0UmVhZGVyKCk7aWYoIVUpe1AoKTtyZXR1cm59bGV0IFc9bmV3IFVpbnQ4QXJyYXkoMCk7d2hpbGUoITApe2xldHtkb25lOnksdmFsdWU6RX09YXdhaXQgVS5yZWFkKCk7aWYoeSlicmVhaztsZXQgZj1uZXcgVWludDhBcnJheShXLmxlbmd0aCtFLmxlbmd0aCk7Zi5zZXQoVyksZi5zZXQoRSxXLmxlbmd0aCksVz1mO3doaWxlKCEwKXtsZXQgaz0tMTtmb3IobGV0IHM9MDtzPFcubGVuZ3RoLTE7cysrKWlmKFdbc109PT0yNTUmJldbcysxXT09PTIxNil7az1zO2JyZWFrfWlmKGs9PT0tMSlicmVhaztsZXQgdj0tMTtmb3IobGV0IHM9aysyO3M8Vy5sZW5ndGgtMTtzKyspaWYoV1tzXT09PTI1NSYmV1tzKzFdPT09MjE3KXt2PXMrMjticmVha31pZih2PT09LTEpYnJlYWs7bGV0IHI9Vy5zbGljZShrLHYpO1c9Vy5zbGljZSh2KTtsZXQgYT1uZXcgQmxvYihbcl0se3R5cGU6ImltYWdlL2pwZWcifSksbj1VUkwuY3JlYXRlT2JqZWN0VVJMKGEpO2lmKEouY3VycmVudC5zaXplPT09MCl7VVJMLnJldm9rZU9iamVjdFVSTChuKTtjb250aW51ZX1mb3IobGV0IHMgb2YgSi5jdXJyZW50KXMobil9fX1jYXRjaHt9ZmluYWxseXtQKCl9fTtyZXR1cm4gSygpLCgpPT57aWYoWT0hMCwkKWNsZWFyVGltZW91dCgkKTtYLmFib3J0KCksY2xlYXJJbnRlcnZhbChMKX19LFtDXSkse3N1YnNjcmliZUZyYW1lOnEsZnJhbWU6bnVsbCxjb25maWc6Wn19dmFyIE83PXtLZXlBOjQsS2V5Qjo1LEtleUM6NixLZXlEOjcsS2V5RTo4LEtleUY6OSxLZXlHOjEwLEtleUg6MTEsS2V5SToxMixLZXlKOjEzLEtleUs6MTQsS2V5TDoxNSxLZXlNOjE2LEtleU46MTcsS2V5TzoxOCxLZXlQOjE5LEtleVE6MjAsS2V5UjoyMSxLZXlTOjIyLEtleVQ6MjMsS2V5VToyNCxLZXlWOjI1LEtleVc6MjYsS2V5WDoyNyxLZXlZOjI4LEtleVo6MjksRGlnaXQxOjMwLERpZ2l0MjozMSxEaWdpdDM6MzIsRGlnaXQ0OjMzLERpZ2l0NTozNCxEaWdpdDY6MzUsRGlnaXQ3OjM2LERpZ2l0ODozNyxEaWdpdDk6MzgsRGlnaXQwOjM5LEVudGVyOjQwLEVzY2FwZTo0MSxCYWNrc3BhY2U6NDIsVGFiOjQzLFNwYWNlOjQ0LE1pbnVzOjQ1LEVxdWFsOjQ2LEJyYWNrZXRMZWZ0OjQ3LEJyYWNrZXRSaWdodDo0OCxCYWNrc2xhc2g6NDksU2VtaWNvbG9uOjUxLFF1b3RlOjUyLEJhY2txdW90ZTo1MyxDb21tYTo1NCxQZXJpb2Q6NTUsU2xhc2g6NTYsQ2Fwc0xvY2s6NTcsRjE6NTgsRjI6NTksRjM6NjAsRjQ6NjEsRjU6NjIsRjY6NjMsRjc6NjQsRjg6NjUsRjk6NjYsRjEwOjY3LEYxMTo2OCxGMTI6NjksUHJpbnRTY3JlZW46NzAsU2Nyb2xsTG9jazo3MSxQYXVzZTo3MixJbnNlcnQ6NzMsSG9tZTo3NCxQYWdlVXA6NzUsRGVsZXRlOjc2LEVuZDo3NyxQYWdlRG93bjo3OCxBcnJvd1JpZ2h0Ojc5LEFycm93TGVmdDo4MCxBcnJvd0Rvd246ODEsQXJyb3dVcDo4MixOdW1Mb2NrOjgzLE51bXBhZERpdmlkZTo4NCxOdW1wYWRNdWx0aXBseTo4NSxOdW1wYWRTdWJ0cmFjdDo4NixOdW1wYWRBZGQ6ODcsTnVtcGFkRW50ZXI6ODgsTnVtcGFkMTo4OSxOdW1wYWQyOjkwLE51bXBhZDM6OTEsTnVtcGFkNDo5MixOdW1wYWQ1OjkzLE51bXBhZDY6OTQsTnVtcGFkNzo5NSxOdW1wYWQ4Ojk2LE51bXBhZDk6OTcsTnVtcGFkMDo5OCxOdW1wYWREZWNpbWFsOjk5LENvbnRyb2xMZWZ0OjIyNCxTaGlmdExlZnQ6MjI1LEFsdExlZnQ6MjI2LE1ldGFMZWZ0OjIyNyxDb250cm9sUmlnaHQ6MjI4LFNoaWZ0UmlnaHQ6MjI5LEFsdFJpZ2h0OjIzMCxNZXRhUmlnaHQ6MjMxfTtmdW5jdGlvbiB6NyhDKXtyZXR1cm4gTzdbQ10/P251bGx9ZnVuY3Rpb24gUTIoQyl7bGV0IFo9d2luZG93Ll9fU0lNX1BSRVZJRVdfXz8uYmFzZVBhdGg/PyIvIjtyZXR1cm4gWj09PSIvIj9gLyR7Q31gOmAke1p9LyR7Q31gfWZ1bmN0aW9uIFY4KEMpe3JldHVybiBDPy5lcnJvcnM/LmluY2x1ZGVzKEUzKT8/ITF9ZnVuY3Rpb24gXzgoe3NpemU6Qz0xOCxzdHJva2VXaWR0aDpaPTJ9KXtyZXR1cm4gUSgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDpDLGhlaWdodDpDLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOlosc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNMyAxMmE5IDkgMCAxIDAgOS05IDkuNzUgOS43NSAwIDAgMC02Ljc0IDIuNzRMMyA4In0pLFEoInBhdGgiLHtkOiJNMyAzdjVoNSJ9KV19KX1mdW5jdGlvbiBQNyhDKXtsZXRbWixHXT1JKG51bGwpLFtKLHFdPUkoIkFYIG9mZiIpO3JldHVybiBiKCgpPT57aWYoIUMpe0cobnVsbCkscSgiQVggb2ZmIik7cmV0dXJufUcobnVsbCkscSgiQVggd2FpdGluZyIpO2xldCBYPW5ldyBFdmVudFNvdXJjZShDKTtyZXR1cm4gWC5vbm1lc3NhZ2U9KFkpPT57dHJ5e2xldCAkPUpTT04ucGFyc2UoWS5kYXRhKTtHKCQpLHEoVjgoJCk/IkFYIHVuYXZhaWxhYmxlIjpgJHskLmVsZW1lbnRzLmxlbmd0aH0gQVggZWxlbWVudHNgKX1jYXRjaHtxKCJBWCBwYXJzZSBlcnJvciIpfX0sWC5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsKCk9PntxKCJBWCByZWNvbm5lY3RpbmciKX0pLCgpPT5YLmNsb3NlKCl9LFtDXSkse3NuYXBzaG90Olosc3RhdHVzOkp9fXZhciBMOD1oMSh7c25hcHNob3Q6bnVsbCxzdGF0dXM6IkFYIG9mZiJ9KSxLOD1oMShudWxsKTtmdW5jdGlvbiBnNSgpe3JldHVybiB1MShMOCl9ZnVuY3Rpb24gQjgoKXtsZXQgQz11MShLOCk7aWYoIUMpdGhyb3cgRXJyb3IoIkFYIHNlbGVjdGlvbiBjb250ZXh0IGlzIHVuYXZhaWxhYmxlIik7cmV0dXJuIEN9ZnVuY3Rpb24gTTcoe2VuZHBvaW50OkMsY2hpbGRyZW46Wn0pe2xldHtzbmFwc2hvdDpHLHN0YXR1czpKfT1QNyhDKSxbcSxYXT1JKG51bGwpLFtZLCRdPUkobnVsbCk7YigoKT0+e2lmKCFDKVgobnVsbCksJChudWxsKX0sW0NdKTtsZXQgXz1FMSgoKT0+KHtzbmFwc2hvdDpHLHN0YXR1czpKfSksW0csSl0pLFY9RTEoKCk9Pih7aGlnaGxpZ2h0ZWRLZXk6cSxzZWxlY3RlZEtleTpZLHNldEhpZ2hsaWdodGVkS2V5Olgsc2V0U2VsZWN0ZWRLZXk6JH0pLFtxLFldKTtyZXR1cm4gUShMOC5Qcm92aWRlcix7dmFsdWU6XyxjaGlsZHJlbjpRKEs4LlByb3ZpZGVyLHt2YWx1ZTpWLGNoaWxkcmVuOlp9KX0pfWFzeW5jIGZ1bmN0aW9uIFUxKEMpe3JldHVybihhd2FpdCBmZXRjaChRMigiZXhlYyIpLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7Y29tbWFuZDpDfSl9KSkuanNvbigpfWZ1bmN0aW9uIFc3KEMsWil7bGV0W0csSl09SShbXSksW3EsWF09SShudWxsKSxbWSwkXT1JKCExKSxfPWgoYXN5bmMoKT0+e2lmKCFDKXJldHVybjskKCEwKSxYKG51bGwpO3RyeXtsZXQgVj1hd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSksQj1hd2FpdCBWLmpzb24oKTtpZighVi5va3x8Qi5lcnJvcil0aHJvdyBFcnJvcihCLmVycm9yfHwiRmFpbGVkIHRvIGxpc3QgV2ViS2l0IHRhcmdldHMiKTtKKEIudGFyZ2V0cz8/W10pfWNhdGNoKFYpe1goViBpbnN0YW5jZW9mIEVycm9yP1YubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IFdlYktpdCBEZXZUb29scyIpfWZpbmFsbHl7JCghMSl9fSxbQ10pO3JldHVybiBiKCgpPT57aWYoIVopcmV0dXJuO18oKTtsZXQgVj1zZXRJbnRlcnZhbCgoKT0+dm9pZCBfKCksMjUwMCk7cmV0dXJuKCk9PmNsZWFySW50ZXJ2YWwoVil9LFtaLF9dKSx7dGFyZ2V0czpHLGVycm9yOnEsbG9hZGluZzpZLHJlZnJlc2g6X319ZnVuY3Rpb24gazcoQyl7bGV0IFo9Qy5jb250ZW50RG9jdW1lbnQ7aWYoIVopcmV0dXJuO2xldCBHPSgpPT57bGV0IFg9W1pdO3doaWxlKFgubGVuZ3RoKXtsZXQgWT1YLnBvcCgpLCQ9WS5xdWVyeVNlbGVjdG9yQWxsKCJbYXJpYS1sYWJlbF0sW3RpdGxlXSIpO2ZvcihsZXQgXyBvZiAkKXtsZXQgVj1fLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbCIpfHxfLnRpdGxlfHwiIjtpZigvXnRvZ2dsZSBzY3JlZW5jYXN0JC9pLnRlc3QoVikpcmV0dXJuIF99Zm9yKGxldCBfIG9mIFkucXVlcnlTZWxlY3RvckFsbCgiKiIpKWlmKF8uc2hhZG93Um9vdClYLnB1c2goXy5zaGFkb3dSb290KX1yZXR1cm4gbnVsbH0sSj0wLHE9KCk9PntKKys7bGV0IFg9RygpO2lmKFgmJlguZ2V0QXR0cmlidXRlKCJhcmlhLXByZXNzZWQiKSE9PSJmYWxzZSIpe1guY2xpY2soKTtyZXR1cm59aWYoSjwyMClzZXRUaW1lb3V0KHEsMTAwKX07cSgpfXZhciBGMj1uZXcgTWFwO2Z1bmN0aW9uIEE3KEMsWil7bGV0IEc9YCR7Q306JHtafWAsSj1GMi5nZXQoRyk7aWYoSiE9PXZvaWQgMClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEopO2xldCBxPUg4KFUxLEMsWikudGhlbigoWCk9PntsZXQgWT1YLmljb25EYXRhVXJsPz9udWxsO3JldHVybiBGMi5zZXQoRyxZKSxZfSkuY2F0Y2goKCk9PntyZXR1cm4gRjIuc2V0KEcsbnVsbCksbnVsbH0pO3JldHVybiBGMi5zZXQoRyxxKSxxfWZ1bmN0aW9uIEk3KEMsWil7bGV0W0csSl09SSh7fSkscT1FMSgoKT0+Wi5zbGljZSgpLnNvcnQoKS5qb2luKCJ8IiksW1pdKTtyZXR1cm4gYigoKT0+e2lmKCFDKXJldHVybjtsZXQgWD0hMTtmb3IobGV0IFkgb2YgWil7aWYoIVkpY29udGludWU7bGV0ICQ9YCR7Q306JHtZfWAsXz1GMi5nZXQoJCk7aWYodHlwZW9mIF89PT0ic3RyaW5nInx8Xz09PW51bGwpe0ooKFYpPT5WW1ldPT09Xz9WOnsuLi5WLFtZXTpffSk7Y29udGludWV9QTcoQyxZKS50aGVuKChWKT0+e2lmKFgpcmV0dXJuO0ooKEIpPT4oey4uLkIsW1ldOlZ9KSl9KX1yZXR1cm4oKT0+e1g9ITB9fSxbQyxxXSksR31mdW5jdGlvbiBkMihDLFope2ZldGNoKFEyKCJkZXZ0b29scy9oaWdobGlnaHQiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3RhcmdldElkOkMsb246Wn0pLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gcTgoKXtsZXQgQz1RMigiZGV2dG9vbHMvcmVsZWFzZSIpO3RyeXtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnNlbmRCZWFjb24pe2xldCBaPW5ldyBCbG9iKFsie30iXSx7dHlwZToiYXBwbGljYXRpb24vanNvbiJ9KTtpZihuYXZpZ2F0b3Iuc2VuZEJlYWNvbihDLFopKXJldHVybn19Y2F0Y2h7fWZldGNoKEMse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OiJ7fSIsa2VlcGFsaXZlOiEwfSkuY2F0Y2goKCk9Pnt9KX1mdW5jdGlvbiBUNyh7dWRpZDpDLHRhcmdldHM6WixzZWxlY3RlZDpHLG9uU2VsZWN0VGFyZ2V0Okosb25SZWZyZXNoOnF9KXtsZXQgWD13MyhaKSxZPVgubWFwKChLKT0+Sy5idW5kbGVJZCkuZmlsdGVyKChLKT0+ISFLKSwkPUk3KEMsWSksW18sVl09SSghMSksW0IsTF09SShudWxsKSxIPVIobnVsbCksRD1SKG51bGwpO2IoKCk9PntpZighXylyZXR1cm47bGV0IEs9KE4pPT57aWYoIUQuY3VycmVudClyZXR1cm47aWYoIUQuY3VycmVudC5jb250YWlucyhOLnRhcmdldCkpVighMSl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEspLCgpPT5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEspfSxbX10pLGIoKCk9PntpZihfKXJldHVybjtpZihILmN1cnJlbnQpZDIoSC5jdXJyZW50LCExKSxILmN1cnJlbnQ9bnVsbDtxOCgpfSxbX10pLGIoKCk9PntsZXQgSz0oKT0+cTgoKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBhZ2VoaWRlIixLKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiYmVmb3JldW5sb2FkIixLKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsSyksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsSyl9fSxbXSk7bGV0IFA9Rz8oRy50aXRsZXx8Ry51cmx8fEcuYXBwTmFtZXx8IlVudGl0bGVkIikuc2xpY2UoMCw5MCk6IlNlbGVjdCB0YXJnZXQiO3JldHVybiBRKCJkaXYiLHtyZWY6RCxzdHlsZTpDMS5waWNrZXJXcmFwLGNoaWxkcmVuOltRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntWKChLKT0+e2lmKCFLKXEoKTtyZXR1cm4hS30pfSxzdHlsZTpDMS5waWNrZXJCdXR0b24sImFyaWEtaGFzcG9wdXAiOiJsaXN0Ym94IiwiYXJpYS1leHBhbmRlZCI6XywiYXJpYS1sYWJlbCI6IldlYktpdCB0YXJnZXQiLGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6QzEucGlja2VyTGFiZWwsY2hpbGRyZW46UH0pLFEoInN2ZyIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOlEoInBvbHlsaW5lIix7cG9pbnRzOiI2IDkgMTIgMTUgMTggOSJ9KX0pXX0pLF8mJlEoInVsIix7cm9sZToibGlzdGJveCIsc3R5bGU6QzEucGlja2VyTGlzdCxjaGlsZHJlbjpYLm1hcCgoSyk9PntsZXQgTj1LLmJ1bmRsZUlkPyRbSy5idW5kbGVJZF06bnVsbDtyZXR1cm4gUSgibGkiLHtzdHlsZTpDMS5waWNrZXJHcm91cCxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6QzEucGlja2VyR3JvdXBIZWFkZXIsY2hpbGRyZW46W04/USgiaW1nIix7c3JjOk4sYWx0OiIiLHN0eWxlOkMxLnBpY2tlckdyb3VwSWNvbkltZ30pOlEoInNwYW4iLHtzdHlsZTpDMS5waWNrZXJHcm91cEljb25JbWcsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxRKCJzcGFuIix7c3R5bGU6QzEucGlja2VyR3JvdXBOYW1lLGNoaWxkcmVuOksuYXBwTmFtZX0pXX0pLFEoInVsIix7cm9sZToiZ3JvdXAiLHN0eWxlOkMxLnBpY2tlckdyb3VwTGlzdCxjaGlsZHJlbjpLLnRhcmdldHMubWFwKChVKT0+e2xldCBXPUc/LmlkPT09VS5pZCx5PSEhVS5pblVzZUJ5T3RoZXJJbnNwZWN0b3ImJiFXLEU9KFUudGl0bGV8fFUudXJsfHxVLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApO3JldHVybiBRKCJsaSIse3JvbGU6Im9wdGlvbiIsImFyaWEtc2VsZWN0ZWQiOlcsImFyaWEtZGlzYWJsZWQiOnksdGFiSW5kZXg6eT8tMTowLHRpdGxlOnk/IkFscmVhZHkgYmVpbmcgaW5zcGVjdGVkIGJ5IGFub3RoZXIgZGVidWdnZXIiOnZvaWQgMCxvbk1vdXNlRW50ZXI6KCk9PntpZih5KXJldHVybjtpZihILmN1cnJlbnQmJkguY3VycmVudCE9PVUuaWQpZDIoSC5jdXJyZW50LCExKTtILmN1cnJlbnQ9VS5pZCxMKFUuaWQpLGQyKFUuaWQsITApfSxvbk1vdXNlTGVhdmU6KCk9PntpZihILmN1cnJlbnQ9PT1VLmlkKWQyKFUuaWQsITEpLEguY3VycmVudD1udWxsO0woKGYpPT5mPT09VS5pZD9udWxsOmYpfSxvbkNsaWNrOigpPT57aWYoeSlyZXR1cm47SihVLmlkKSxWKCExKX0sc3R5bGU6ey4uLkMxLnBpY2tlckl0ZW0sLi4uVz9DMS5waWNrZXJJdGVtU2VsZWN0ZWQ6bnVsbCwuLi5CPT09VS5pZCYmIXk/QzEucGlja2VySXRlbUhvdmVyZWQ6bnVsbCwuLi55P0MxLnBpY2tlckl0ZW1EaXNhYmxlZDpudWxsfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOkMxLnBpY2tlckl0ZW1UaXRsZSxjaGlsZHJlbjpFfSksVS51cmwmJlUudXJsIT09ImFib3V0OmJsYW5rIiYmUSgic3BhbiIse3N0eWxlOkMxLnBpY2tlckl0ZW1VcmwsY2hpbGRyZW46VS51cmx9KV19LFUuaWQpfSl9KV19LEsua2V5KX0pfSldfSl9ZnVuY3Rpb24gRTcoQyl7dHJ5e2xldCBaPUpTT04ucGFyc2UoQyksRz1bXTtmb3IobGV0W0oscV1vZiBPYmplY3QuZW50cmllcyhaLmRldmljZXM/P3t9KSl7bGV0IFg9Si5yZXBsYWNlKC9eY29tXC5hcHBsZVwuQ29yZVNpbXVsYXRvclwuU2ltUnVudGltZVwuLywiIikucmVwbGFjZSgvLS9nLCIuIik7Zm9yKGxldCBZIG9mIHEpaWYoWS5pc0F2YWlsYWJsZSlHLnB1c2goe3VkaWQ6WS51ZGlkLG5hbWU6WS5uYW1lLHN0YXRlOlkuc3RhdGUscnVudGltZTpYfSl9cmV0dXJuIEd9Y2F0Y2h7cmV0dXJuW119fWZ1bmN0aW9uIGwyKEMpe2xldCBaPUMudG9Mb3dlckNhc2UoKTtpZihaLmluY2x1ZGVzKCJpcGhvbmUiKSlyZXR1cm4gMDtpZihaLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuIDE7aWYoWi5pbmNsdWRlcygid2F0Y2giKSlyZXR1cm4gMjtpZihaLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4gMztyZXR1cm4gNH1mdW5jdGlvbiBhMihDKXtsZXQgWj1DLnRvTG93ZXJDYXNlKCk7aWYoWi5zdGFydHNXaXRoKCJpb3MiKSlyZXR1cm4gMDtpZihaLnN0YXJ0c1dpdGgoImlwYWRvcyIpKXJldHVybiAxO2lmKFouc3RhcnRzV2l0aCgid2F0Y2hvcyIpKXJldHVybiAyO2lmKFouc3RhcnRzV2l0aCgidmlzaW9ub3MiKXx8Wi5zdGFydHNXaXRoKCJ4cm9zIikpcmV0dXJuIDM7cmV0dXJuIDR9ZnVuY3Rpb24gdzcoe2RldmljZXM6QyxzZWxlY3RlZFVkaWQ6Wixsb2FkaW5nOkcsZXJyb3I6SixzdG9wcGluZ1VkaWRzOnEsb25SZWZyZXNoOlgsb25TZWxlY3Q6WSxvblN0b3A6JCx0cmlnZ2VyOl99KXtsZXRbVixCXT1JKCExKSxMPVIobnVsbCk7YigoKT0+e2lmKCFWKXJldHVybjtsZXQgSz0oTik9PntpZighTC5jdXJyZW50Py5jb250YWlucyhOLnRhcmdldCkpQighMSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixLKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsSyl9LFtWXSk7bGV0IEg9bmV3IE1hcDtmb3IobGV0IEsgb2YgQyl7aWYoSy51ZGlkPT09Wiljb250aW51ZTtsZXQgTj1ILmdldChLLnJ1bnRpbWUpO2lmKCFOKU49W10sSC5zZXQoSy5ydW50aW1lLE4pO04ucHVzaChLKX1mb3IobGV0IEsgb2YgSC52YWx1ZXMoKSlLLnNvcnQoKE4sVSk9PmwyKE4ubmFtZSktbDIoVS5uYW1lKXx8Ti5uYW1lLmxvY2FsZUNvbXBhcmUoVS5uYW1lKSk7bGV0IEQ9Wy4uLkguZW50cmllcygpXS5zb3J0KChbS10sW05dKT0+YTIoSyktYTIoTil8fEsubG9jYWxlQ29tcGFyZShOKSksUD1DLmZpbmQoKEspPT5LLnVkaWQ9PT1aKT8/bnVsbDtyZXR1cm4gUSgiZGl2Iix7cmVmOkwsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9LGNoaWxkcmVuOltRKCJkaXYiLHtvbkNsaWNrOigpPT57aWYoIVYpWCgpO0IoKEspPT4hSyl9LGNoaWxkcmVuOl99KSxWJiZRKCJkaXYiLHtzdHlsZTp0NyxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6VTgsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9LGNoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFEoImJ1dHRvbiIse29uQ2xpY2s6KEspPT57Sy5zdG9wUHJvcGFnYXRpb24oKSxYKCl9LGRpc2FibGVkOkcsc3R5bGU6TzgsY2hpbGRyZW46Rz8iLi4uIjoiUmVmcmVzaCJ9KV19KSxKJiZRKCJkaXYiLHtzdHlsZTpqNSxjaGlsZHJlbjpKfSksUCYmUShYMSx7Y2hpbGRyZW46W1EoImRpdiIse3N0eWxlOnsuLi5oNSxjb2xvcjoiI2E1YjRmYyJ9LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6UjUoUC5zdGF0ZT09PSJCb290ZWQiPyIjNGFkZTgwIjoiIzQ0NCIpfSksUSgic3BhbiIse3N0eWxlOntmbGV4OjF9LGNoaWxkcmVuOlAubmFtZX0pXX0pLFEoImRpdiIse3N0eWxlOmU3fSldfSksQy5sZW5ndGg9PT0wJiYhRyYmIUomJlEoImRpdiIse3N0eWxlOno4LGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxELm1hcCgoW0ssTl0pPT5RKCJkaXYiLHtjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6UDgsY2hpbGRyZW46S30pLE4ubWFwKChVKT0+e2xldCBXPXEuaGFzKFUudWRpZCkseT1VLnN0YXRlPT09IkJvb3RlZCI7cmV0dXJuIFEoImRpdiIse3N0eWxlOmg1LG9uTW91c2VFbnRlcjooRSk9PkUuY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixvbk1vdXNlTGVhdmU6KEUpPT5FLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLG9uQ2xpY2s6KCk9PntZKFUpLEIoITEpfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlI1KHk/IiM0YWRlODAiOiIjNDQ0Iil9KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MX0sY2hpbGRyZW46VS5uYW1lfSkseSYmUSgic3BhbiIse3JvbGU6ImJ1dHRvbiIsb25DbGljazooRSk9PntpZihFLnN0b3BQcm9wYWdhdGlvbigpLCFXKSQoVS51ZGlkKX0sc3R5bGU6e2ZvbnRTaXplOjEwLHBhZGRpbmc6IjFweCA2cHgiLGJvcmRlclJhZGl1czo0LGNvbG9yOlc/IiM4ODgiOiIjZjg3MTcxIixiYWNrZ3JvdW5kOlc/InRyYW5zcGFyZW50IjoicmdiYSgyNDgsMTEzLDExMywwLjEpIixjdXJzb3I6Vz8iZGVmYXVsdCI6InBvaW50ZXIifSxjaGlsZHJlbjpXPyJTdG9wcGluZy4uLiI6IlN0b3AifSldfSxVLnVkaWQpfSldfSxLKSldfSldfSl9ZnVuY3Rpb24gUjUoQyl7cmV0dXJue3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6QyxmbGV4U2hyaW5rOjB9fXZhciBTNz1uZXcgU2V0KFsiaW1hZ2UvanBlZyIsImltYWdlL3BuZyIsImltYWdlL2dpZiIsImltYWdlL2hlaWMiLCJpbWFnZS9oZWlmIiwiaW1hZ2Uvd2VicCIsInZpZGVvL21wNCIsInZpZGVvL3F1aWNrdGltZSJdKSxYOD0yNjIxNDQsYjc9NTI0Mjg4MDAwO2Z1bmN0aW9uIHk3KEMpe2lmKG01KEMpPT09ImlwYSIpcmV0dXJuImlwYSI7aWYoUzcuaGFzKEMudHlwZSkpcmV0dXJuIm1lZGlhIjtyZXR1cm4gbnVsbH1mdW5jdGlvbiBSNyhDKXtsZXQgWj1uZXcgVWludDhBcnJheShDKSxHPSIiO2ZvcihsZXQgSj0wO0o8Wi5sZW5ndGg7SisrKUcrPVN0cmluZy5mcm9tQ2hhckNvZGUoWltKXSk7cmV0dXJuIGJ0b2EoRyl9ZnVuY3Rpb24gbTUoQyl7bGV0IFo9Qy5uYW1lLEc9Wi5sYXN0SW5kZXhPZigiLiIpO2lmKEc+PTApcmV0dXJuIFouc2xpY2UoRysxKS50b0xvd2VyQ2FzZSgpO2lmKEMudHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSlyZXR1cm4ibXA0IjtyZXR1cm4ianBnIn1hc3luYyBmdW5jdGlvbiBqNyhDLFosRyxKKXtpZihDLnNpemU+YjcpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IHE9Wj09PSJpcGEiPyJpcGEiOm01KEMpLFk9YC90bXAvJHtaPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtxfWA7dHJ5e2xldCAkPWF3YWl0IEMuYXJyYXlCdWZmZXIoKSxfPVI3KCQpO2ZvcihsZXQgTD0wO0w8Xy5sZW5ndGg7TCs9WDgpe2xldCBIPV8uc2xpY2UoTCxMK1g4KSxQPWF3YWl0IEcoYGJhc2ggLWMgJ2VjaG8gJHtIfSB8IGJhc2U2NCAtZCAke0w9PT0wPyI+IjoiPj4ifSAke1l9J2ApO2lmKFAuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFAuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7UC5leGl0Q29kZX0pYCl9bGV0IFY9Wj09PSJpcGEiP2B4Y3J1biBzaW1jdGwgaW5zdGFsbCAke0p9ICR7WX1gOmB4Y3J1biBzaW1jdGwgYWRkbWVkaWEgJHtKfSAke1l9YCxCPWF3YWl0IEcoVik7aWYoQi5leGl0Q29kZSE9PTApe2xldCBMPVo9PT0iaXBhIj8iaW5zdGFsbCI6ImFkZG1lZGlhIjt0aHJvdyBFcnJvcihCLnN0ZGVycnx8YCR7TH0gZmFpbGVkIChleGl0ICR7Qi5leGl0Q29kZX0pYCl9fWZpbmFsbHl7RyhgYmFzaCAtYyAncm0gLWYgJHtZfSdgKS5jYXRjaCgoKT0+e30pfX1mdW5jdGlvbiBoNygpe2xldFtDLFpdPUkoW10pLEc9aCgocSxYKT0+e2xldCBZPWNyeXB0by5yYW5kb21VVUlEKCk7cmV0dXJuIFooKCQpPT5bLi4uJCx7aWQ6WSxuYW1lOnEsa2luZDpYLHN0YXR1czoidXBsb2FkaW5nIn1dKSxZfSxbXSksSj1oKChxLFgpPT57aWYoWigoWSk9PlkubWFwKCgkKT0+JC5pZD09PXE/ey4uLiQsLi4uWH06JCkpLFguc3RhdHVzPT09InN1Y2Nlc3MifHxYLnN0YXR1cz09PSJlcnJvciIpc2V0VGltZW91dCgoKT0+e1ooKFkpPT5ZLmZpbHRlcigoJCk9PiQuaWQhPT1xKSl9LDMwMDApfSxbXSk7cmV0dXJue3RvYXN0czpDLGFkZDpHLHVwZGF0ZTpKfX1mdW5jdGlvbiB2Nyh7ZXhlYzpDLHVkaWQ6WixlbmFibGVkOkcsb25VcGxvYWRTdGFydDpKLG9uVXBsb2FkRW5kOnEsb25VbnN1cHBvcnRlZDpYfSl7bGV0W1ksJF09SSghMSksXz1SKDApLFY9aChhc3luYyhEKT0+e2lmKEQucHJldmVudERlZmF1bHQoKSxELnN0b3BQcm9wYWdhdGlvbigpLF8uY3VycmVudD0wLCQoITEpLCFHfHwhWilyZXR1cm47bGV0IFA9QXJyYXkuZnJvbShELmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoUC5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IEsgb2YgUCl7bGV0IE49eTcoSyk7aWYoIU4pe1goSyk7Y29udGludWV9bGV0IFU9SihLLm5hbWUsTik7ajcoSyxOLEMsWikudGhlbigoKT0+cShVLCEwKSkuY2F0Y2goKFcpPT5xKFUsITEsVyBpbnN0YW5jZW9mIEVycm9yP1cubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtHLFosQyxKLHEsWF0pLEI9aCgoRCk9PntpZihELnByZXZlbnREZWZhdWx0KCksRylELmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJjb3B5In0sW0ddKSxMPWgoKEQpPT57aWYoRC5wcmV2ZW50RGVmYXVsdCgpLCFHKXJldHVybjtpZihfLmN1cnJlbnQrKyxfLmN1cnJlbnQ9PT0xKSQoITApfSxbR10pLEg9aCgoRCk9PntpZihELnByZXZlbnREZWZhdWx0KCksXy5jdXJyZW50LS0sXy5jdXJyZW50PD0wKV8uY3VycmVudD0wLCQoITEpfSxbXSk7cmV0dXJue2lzRHJhZ092ZXI6WSxkcm9wWm9uZVByb3BzOntvbkRyYWdPdmVyOkIsb25EcmFnRW50ZXI6TCxvbkRyYWdMZWF2ZTpILG9uRHJvcDpWfX19ZnVuY3Rpb24gdjEoQyl7cmV0dXJuYCcke0MucmVwbGFjZSgvJy9nLCInXFwnJyIpfSdgfWFzeW5jIGZ1bmN0aW9uIEg4KEMsWixHKXtsZXQgSj1hd2FpdCBDKGB4Y3J1biBzaW1jdGwgZ2V0X2FwcF9jb250YWluZXIgJHtafSAke3YxKEcpfSBhcHBgKTtpZihKLmV4aXRDb2RlIT09MClyZXR1cm57ZXJyb3I6Si5zdGRlcnIudHJpbSgpfHwiQXBwIG5vdCBmb3VuZCBvbiBzaW11bGF0b3IifTtsZXQgcT1KLnN0ZG91dC50cmltKCk7aWYoIXEpcmV0dXJue2Vycm9yOiJFbXB0eSBhcHAgcGF0aCJ9O2xldCBYPWF3YWl0IEMoYHBsdXRpbCAtY29udmVydCBqc29uIC1vIC0gJHt2MShxKyIvSW5mby5wbGlzdCIpfWApLFk9e307aWYoWC5leGl0Q29kZT09PTApdHJ5e1k9SlNPTi5wYXJzZShYLnN0ZG91dCl9Y2F0Y2h7fWxldCAkLFY9KFk/LkNGQnVuZGxlSWNvbnM/LkNGQnVuZGxlUHJpbWFyeUljb24/P1k/LlsiQ0ZCdW5kbGVJY29uc35pcGFkIl0/LkNGQnVuZGxlUHJpbWFyeUljb24pPy5DRkJ1bmRsZUljb25GaWxlcz8/WT8uQ0ZCdW5kbGVJY29uRmlsZXM7aWYoViYmVi5sZW5ndGg+MCkkPVZbVi5sZW5ndGgtMV07ZWxzZSBpZih0eXBlb2YgWT8uQ0ZCdW5kbGVJY29uRmlsZT09PSJzdHJpbmciKSQ9WS5DRkJ1bmRsZUljb25GaWxlO2xldCBCPW51bGw7aWYoJCl7bGV0IEw9W2AkeyR9QDN4LnBuZ2AsYCR7JH1AMngucG5nYCxgJHskfS5wbmdgLGAkeyR9NjB4NjBAM3gucG5nYCxgJHskfTYweDYwQDJ4LnBuZ2BdLEQ9KGF3YWl0IEMoYGJhc2ggLWMgJHt2MShMLm1hcCgoUCk9PmBbIC1mICR7djEocSsiLyIrUCl9IF0gJiYgZWNobyAke3YxKHErIi8iK1ApfSAmJiBleGl0IDBgKS5qb2luKCI7ICIpKyI7IGV4aXQgMSIpfWApKS5zdGRvdXQudHJpbSgpO2lmKEQpe2xldCBQPWF3YWl0IEMoYGJhc2U2NCAtaSAke3YxKEQpfWApO2lmKFAuZXhpdENvZGU9PT0wKUI9YGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwke1Auc3Rkb3V0LnJlcGxhY2UoL1xzKy9nLCIiKX1gfX1yZXR1cm57YXBwUGF0aDpxLGRpc3BsYXlOYW1lOlkuQ0ZCdW5kbGVEaXNwbGF5TmFtZT8/WS5DRkJ1bmRsZU5hbWUsc2hvcnRWZXJzaW9uOlkuQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmcsYnVuZGxlVmVyc2lvbjpZLkNGQnVuZGxlVmVyc2lvbixtaW5PUzpZLk1pbmltdW1PU1ZlcnNpb24sZXhlY3V0YWJsZTpZLkNGQnVuZGxlRXhlY3V0YWJsZSxpY29uRGF0YVVybDpCfX1mdW5jdGlvbiBnNyh7dWRpZDpDLGN1cnJlbnRBcHA6Wn0pe2xldFtHLEpdPUkobnVsbCk7aWYoYigoKT0+e2lmKCFaKXtKKG51bGwpO3JldHVybn1sZXQgcT0hMTtyZXR1cm4gSih7YnVuZGxlSWQ6Wi5idW5kbGVJZCxpc1JlYWN0TmF0aXZlOlouaXNSZWFjdE5hdGl2ZSxwaWQ6Wi5waWQsbG9hZGluZzohMH0pLEg4KFUxLEMsWi5idW5kbGVJZCkudGhlbigoWCk9PntpZihxKXJldHVybjtKKHtidW5kbGVJZDpaLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Wi5pc1JlYWN0TmF0aXZlLHBpZDpaLnBpZCxsb2FkaW5nOiExLC4uLlh9KX0pLCgpPT57cT0hMH19LFtDLFo/LmJ1bmRsZUlkLFo/LnBpZCxaPy5pc1JlYWN0TmF0aXZlXSksIUcpcmV0dXJuIFEoImRpdiIse3N0eWxlOnguZW1wdHksY2hpbGRyZW46IldhaXRpbmcgZm9yIGFuIGFwcCB0byBjb21lIHRvIHRoZSBmb3JlZ3JvdW5k4oCmIn0pO3JldHVybiBRKCJkaXYiLHtzdHlsZTp4LnNlY3Rpb24sY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOnguYXBwSGVhZGVyLGNoaWxkcmVuOltHLmljb25EYXRhVXJsP1EoImltZyIse3NyYzpHLmljb25EYXRhVXJsLHN0eWxlOnguYXBwSWNvbixhbHQ6IiJ9KTpRKCJkaXYiLHtzdHlsZTp7Li4ueC5hcHBJY29uLGJhY2tncm91bmQ6IiMyYTJhMmMifX0pLFEoImRpdiIse3N0eWxlOnttaW5XaWR0aDowLGZsZXg6MX0sY2hpbGRyZW46W1EoImRpdiIse3N0eWxlOnguYXBwTmFtZSxjaGlsZHJlbjpbRy5kaXNwbGF5TmFtZT8/Ry5idW5kbGVJZCxHLmxvYWRpbmcmJlEoInNwYW4iLHtzdHlsZTp4LnNwaW5uZXIsY2hpbGRyZW46IiDigKYifSldfSksUSgiZGl2Iix7c3R5bGU6eC5hcHBCdW5kbGUsdGl0bGU6Ry5idW5kbGVJZCxjaGlsZHJlbjpHLmJ1bmRsZUlkfSldfSldfSksRy5lcnJvciYmUSgiZGl2Iix7c3R5bGU6eC5lcnJvcixjaGlsZHJlbjpHLmVycm9yfSksUSgiZGwiLHtzdHlsZTp4LmRsLGNoaWxkcmVuOltRKFgyLHtsYWJlbDoiVmVyc2lvbiIsdmFsdWU6Ry5zaG9ydFZlcnNpb24/YCR7Ry5zaG9ydFZlcnNpb259ICgke0cuYnVuZGxlVmVyc2lvbj8/IuKAlCJ9KWA6Ry5sb2FkaW5nPyLigKYiOiLigJQifSksUShYMix7bGFiZWw6Ik1pbiBpT1MiLHZhbHVlOkcubWluT1M/PyhHLmxvYWRpbmc/IuKApiI6IuKAlCIpfSksUShYMix7bGFiZWw6IkV4ZWN1dGFibGUiLHZhbHVlOkcuZXhlY3V0YWJsZT8/KEcubG9hZGluZz8i4oCmIjoi4oCUIil9KSxRKFgyLHtsYWJlbDoiUElEIix2YWx1ZTpHLnBpZCE9bnVsbD9TdHJpbmcoRy5waWQpOiLigJQifSksRy5pc1JlYWN0TmF0aXZlJiZRKFgyLHtsYWJlbDoiUmVhY3QgTmF0aXZlIix2YWx1ZToiWWVzIn0pLFEoWDIse2xhYmVsOiJBcHAgcGF0aCIsdmFsdWU6Ry5hcHBQYXRoPz8oRy5sb2FkaW5nPyLigKYiOiLigJQiKSxtb25vOiEwLGFjdGlvbjpHLmFwcFBhdGg/e3RpdGxlOiJSZXZlYWwgaW4gRmluZGVyIixvbkNsaWNrOigpPT57VTEoYG9wZW4gLVIgJHt2MShHLmFwcFBhdGgpfWApfSxpY29uOlEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiNyIseTE6IjE3Iix4MjoiMTciLHkyOiI3In0pLFEoInBvbHlsaW5lIix7cG9pbnRzOiIxMCA3IDE3IDcgMTcgMTQifSldfSl9OnZvaWQgMH0pXX0pXX0pfWZ1bmN0aW9uIFgyKHtsYWJlbDpDLHZhbHVlOlosbW9ubzpHLGFjdGlvbjpKfSl7bGV0W3EsWF09SSghMSk7cmV0dXJuIFEoImRpdiIse3N0eWxlOngucm93LG9uTW91c2VFbnRlcjooKT0+WCghMCksb25Nb3VzZUxlYXZlOigpPT5YKCExKSxjaGlsZHJlbjpbUSgiZHQiLHtzdHlsZTp4LmR0LGNoaWxkcmVuOkN9KSxRKCJkZCIse3N0eWxlOnsuLi54LmRkLGZvbnRGYW1pbHk6Rz8idWktbW9ub3NwYWNlLCBtb25vc3BhY2UiOnZvaWQgMCxmb250U2l6ZTpHPzExOjEyLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LHRpdGxlOlosY2hpbGRyZW46W1osSiYmUSgiZGl2Iix7c3R5bGU6ey4uLngucm93QWN0aW9uV3JhcCxvcGFjaXR5OnE/MTowLHRyYW5zZm9ybTpxPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWCg0cHgpIixwb2ludGVyRXZlbnRzOnE/ImF1dG8iOiJub25lIn0sY2hpbGRyZW46USgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOkoub25DbGljayx0aXRsZTpKLnRpdGxlLCJhcmlhLWxhYmVsIjpKLnRpdGxlLHN0eWxlOngucm93QWN0aW9uLGNoaWxkcmVuOkouaWNvbn0pfSldfSldfSl9dmFyIG03PVt7a2V5OiJjYW1lcmEiLGxhYmVsOiJDYW1lcmEifSx7a2V5OiJtaWNyb3Bob25lIixsYWJlbDoiTWljcm9waG9uZSJ9LHtrZXk6InBob3RvcyIsbGFiZWw6IlBob3RvcyJ9LHtrZXk6InBob3Rvcy1hZGQiLGxhYmVsOiJBZGQgdG8gUGhvdG9zIn0se2tleToiY29udGFjdHMiLGxhYmVsOiJDb250YWN0cyJ9LHtrZXk6ImNhbGVuZGFyIixsYWJlbDoiQ2FsZW5kYXIifSx7a2V5OiJyZW1pbmRlcnMiLGxhYmVsOiJSZW1pbmRlcnMifSx7a2V5OiJsb2NhdGlvbiIsbGFiZWw6IkxvY2F0aW9uIn0se2tleToibG9jYXRpb24tYWx3YXlzIixsYWJlbDoiTG9jYXRpb24gKEFsd2F5cykifSx7a2V5OiJtb3Rpb24iLGxhYmVsOiJNb3Rpb24ifSx7a2V5OiJtZWRpYS1saWJyYXJ5IixsYWJlbDoiTWVkaWEgTGlicmFyeSJ9LHtrZXk6InNpcmkiLGxhYmVsOiJTaXJpIn1dO2Z1bmN0aW9uIHg3KHt1ZGlkOkMsYnVuZGxlSWQ6Wn0pe2xldFtHLEpdPUkoe30pLFtxLFhdPUkobnVsbCksW1ksJF09SShudWxsKSxbXyxWXT1JKCExKTtiKCgpPT57Sih7fSksJChudWxsKX0sW1pdKTtsZXQgQj1oKGFzeW5jKEgsRCk9PntpZighWilyZXR1cm47bGV0IFA9YCR7SH06JHtEfWA7WChQKSwkKG51bGwpO3RyeXtsZXQgSz1hd2FpdCBVMShgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtDfSAke0R9ICR7SH0gJHt2MShaKX1gKTtpZihLLmV4aXRDb2RlIT09MCl7JChLLnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtLLmV4aXRDb2RlfSlgKTtyZXR1cm59SigoTik9Pih7Li4uTixbSF06RD09PSJyZXNldCI/dm9pZCAwOkR9KSl9ZmluYWxseXtYKG51bGwpfX0sW0MsWl0pLEw9aChhc3luYygpPT57aWYoIVopcmV0dXJuO1goIl9fYWxsX18iKSwkKG51bGwpO3RyeXtsZXQgSD1hd2FpdCBVMShgeGNydW4gc2ltY3RsIHByaXZhY3kgJHtDfSByZXNldCBhbGwgJHt2MShaKX1gKTtpZihILmV4aXRDb2RlIT09MCl7JChILnN0ZGVyci50cmltKCl8fGBzaW1jdGwgcHJpdmFjeSBmYWlsZWQgKGV4aXQgJHtILmV4aXRDb2RlfSlgKTtyZXR1cm59Sih7fSl9ZmluYWxseXtYKG51bGwpfX0sW0MsWl0pO2lmKCFaKXJldHVybiBRKCJkaXYiLHtzdHlsZTp4LmVtcHR5LGNoaWxkcmVuOiJQZXJtaXNzaW9ucyBhcHBlYXIgb25jZSBhbiBhcHAgaXMgaW4gdGhlIGZvcmVncm91bmQuIn0pO3JldHVybiBRKCJkaXYiLHtzdHlsZTp7Li4ueC5zZWN0aW9uLHBhZGRpbmc6IjhweCAxMnB4In0sY2hpbGRyZW46W1EoImJ1dHRvbiIse29uQ2xpY2s6KCk9PlYoKEgpPT4hSCksc3R5bGU6eC5wZXJtc1RvZ2dsZSwiYXJpYS1leHBhbmRlZCI6XyxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi54LnNlY3Rpb25UaXRsZSxtYXJnaW46MH0sY2hpbGRyZW46IlBlcm1pc3Npb25zIn0pLFEoInN2ZyIse3dpZHRoOiIxMSIsaGVpZ2h0OiIxMSIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIuNSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsc3R5bGU6e3RyYW5zZm9ybTpfPyJyb3RhdGUoOTBkZWcpIjoicm90YXRlKDBkZWcpIix0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4xNXMiLGZsZXhTaHJpbms6MH0sY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjkgMTggMTUgMTIgOSA2In0pfSldfSksXyYmWSYmUSgiZGl2Iix7c3R5bGU6ey4uLnguZXJyb3IsbWFyZ2luVG9wOjh9LGNoaWxkcmVuOll9KSxfJiZRKCJkaXYiLHtzdHlsZTp4LnBlcm1zU2Nyb2xsV3JhcCxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6eC5wZXJtc1Njcm9sbCxjaGlsZHJlbjptNy5tYXAoKHtrZXk6SCxsYWJlbDpEfSk9PntsZXQgUD1HW0hdO3JldHVybiBRKCJkaXYiLHtzdHlsZTp4LnBlcm1Sb3csY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp4LnBlcm1MYWJlbCxjaGlsZHJlbjpEfSksUSgiZGl2Iix7c3R5bGU6eC5wZXJtU2VnLHJvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6RCxjaGlsZHJlbjpbUShiNSx7YWN0aXZlOlA9PT0iZ3JhbnQiLHBlbmRpbmc6cT09PWAke0h9OmdyYW50YCxvbkNsaWNrOigpPT5CKEgsImdyYW50IiksdmFyaWFudDoiZ3JhbnQiLHRpdGxlOiJBbGxvdyIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46USgicG9seWxpbmUiLHtwb2ludHM6IjUgMTIgMTAgMTcgMTkgNyJ9KX0pfSksUShiNSx7YWN0aXZlOlA9PT0icmV2b2tlIixwZW5kaW5nOnE9PT1gJHtIfTpyZXZva2VgLG9uQ2xpY2s6KCk9PkIoSCwicmV2b2tlIiksdmFyaWFudDoicmV2b2tlIix0aXRsZToiRGVueSIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMyIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pLFEoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pXX0pfSksUShiNSx7YWN0aXZlOiExLHBlbmRpbmc6cT09PWAke0h9OnJlc2V0YCxvbkNsaWNrOigpPT5CKEgsInJlc2V0IiksdmFyaWFudDoicmVzZXQiLHRpdGxlOiJSZXNldCIsY2hpbGRyZW46UShfOCx7c2l6ZToxMSxzdHJva2VXaWR0aDoyLjR9KX0pXX0pXX0sSCl9KX0pLFEoImRpdiIse3N0eWxlOngucGVybXNGYWRlVG9wfSksUSgiZGl2Iix7c3R5bGU6eC5wZXJtc0ZhZGVCb3R0b219KV19KSxfJiZRKCJkaXYiLHtzdHlsZTp4LnBlcm1zRm9vdGVyLGNoaWxkcmVuOlEoImJ1dHRvbiIse29uQ2xpY2s6TCxkaXNhYmxlZDpxPT09Il9fYWxsX18iLHN0eWxlOngucmVzZXRBbGxCdG4sdGl0bGU6InhjcnVuIHNpbWN0bCBwcml2YWN5IHJlc2V0IGFsbCIsY2hpbGRyZW46cT09PSJfX2FsbF9fIj8i4oCmIjoiUmVzZXQgYWxsIn0pfSldfSl9ZnVuY3Rpb24gZjcoe2RldmljZXM6Qyxsb2FkaW5nOlosZXJyb3I6RyxvblJlZnJlc2g6Sn0pe2xldFtxLFhdPUkobnVsbCksW1ksJF09SShudWxsKSxfPWgoYXN5bmMoTCk9PntpZihxKXJldHVybjtYKEwudWRpZCksJChudWxsKTt0cnl7aWYoTC5zdGF0ZSE9PSJCb290ZWQiKXtsZXQgSz1hd2FpdCBVMShgeGNydW4gc2ltY3RsIGJvb3QgJHtMLnVkaWR9YCk7aWYoSy5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoSy5zdGRlcnJ8fCJGYWlsZWQgdG8gYm9vdCBzaW11bGF0b3IiKX1sZXQgSD1hd2FpdCBVMShgYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2ggJHtMLnVkaWR9YCk7aWYoSC5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoSC5zdGRlcnJ8fCJGYWlsZWQgdG8gc3RhcnQgc2VydmUtc2ltIik7bGV0IEQ9RGF0ZS5ub3coKSsxNTAwMCxQPWAke1EyKCJhcGkiKX0/ZGV2aWNlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KEwudWRpZCl9YDt3aGlsZShEYXRlLm5vdygpPEQpe3RyeXtsZXQgSz1hd2FpdCBmZXRjaChQLHtjYWNoZToibm8tc3RvcmUifSk7aWYoSy5vayYmYXdhaXQgSy5qc29uKCkpe2xldCBOPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO04uc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIixMLnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oTi50b1N0cmluZygpKTtyZXR1cm59fWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgoSyk9PnNldFRpbWVvdXQoSyw0MDApKX10aHJvdyBFcnJvcigic2VydmUtc2ltIHN0YXJ0ZWQgYnV0IG5vIHN0cmVhbSBzdGF0ZSBhcHBlYXJlZCIpfWNhdGNoKEgpeyQoSCBpbnN0YW5jZW9mIEVycm9yP0gubWVzc2FnZToiRmFpbGVkIHRvIHN0YXJ0IHN0cmVhbSIpLFgobnVsbCl9fSxbcV0pLFY9bmV3IE1hcDtmb3IobGV0IEwgb2YgQyl7bGV0IEg9Vi5nZXQoTC5ydW50aW1lKTtpZighSClIPVtdLFYuc2V0KEwucnVudGltZSxIKTtILnB1c2goTCl9Zm9yKGxldCBMIG9mIFYudmFsdWVzKCkpTC5zb3J0KChILEQpPT57bGV0IFA9SC5zdGF0ZT09PSJCb290ZWQiPzA6MSxLPUQuc3RhdGU9PT0iQm9vdGVkIj8wOjE7aWYoUCE9PUspcmV0dXJuIFAtSztyZXR1cm4gbDIoSC5uYW1lKS1sMihELm5hbWUpfHxILm5hbWUubG9jYWxlQ29tcGFyZShELm5hbWUpfSk7bGV0IEI9Wy4uLlYuZW50cmllcygpXS5zb3J0KChbTF0sW0hdKT0+YTIoTCktYTIoSCl8fEwubG9jYWxlQ29tcGFyZShIKSk7cmV0dXJuIFEoImRpdiIse3N0eWxlOkYxLnBhZ2UsY2hpbGRyZW46USgiZGl2Iix7c3R5bGU6RjEuZW1wdHksY2hpbGRyZW46W1EoImgxIix7c3R5bGU6RjEuZW1wdHlUaXRsZSxjaGlsZHJlbjoiTm8gc2VydmUtc2ltIHN0cmVhbSBydW5uaW5nIn0pLFEoInAiLHtzdHlsZTpGMS5lbXB0eUhpbnQsY2hpbGRyZW46WyJQaWNrIGEgc2ltdWxhdG9yIHRvIGJvb3QsIG9yIHN0YXJ0IG9uZSB5b3Vyc2VsZiB3aXRoIiwiICIsUSgiY29kZSIse3N0eWxlOkYxLmNvZGUsY2hpbGRyZW46ImJ1bnggc2VydmUtc2ltIC0tZGV0YWNoIn0pLCIuIl19KSxRKCJkaXYiLHtzdHlsZTpzNyxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6VTgsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7Zm9udFdlaWdodDo2MDB9LGNoaWxkcmVuOiJTaW11bGF0b3JzIn0pLFEoImJ1dHRvbiIse29uQ2xpY2s6SixkaXNhYmxlZDpaLHN0eWxlOk84LGNoaWxkcmVuOlo/Ii4uLiI6IlJlZnJlc2gifSldfSksRyYmUSgiZGl2Iix7c3R5bGU6ajUsY2hpbGRyZW46R30pLFkmJlEoImRpdiIse3N0eWxlOmo1LGNoaWxkcmVuOll9KSwhWiYmIUcmJkMubGVuZ3RoPT09MCYmUSgiZGl2Iix7c3R5bGU6ejgsY2hpbGRyZW46Ik5vIGF2YWlsYWJsZSBzaW11bGF0b3JzIGZvdW5kIn0pLEIubWFwKChbTCxIXSk9PlEoImRpdiIse2NoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTpQOCxjaGlsZHJlbjpMfSksSC5tYXAoKEQpPT57bGV0IFA9cT09PUQudWRpZCxLPXEhPT1udWxsJiYhUCxOPUQuc3RhdGU9PT0iQm9vdGVkIjtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLmg1LGN1cnNvcjpLPyJkZWZhdWx0IjoicG9pbnRlciIsb3BhY2l0eTpLPzAuNToxfSxvbk1vdXNlRW50ZXI6KFUpPT57aWYoIUspVS5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkifSxvbk1vdXNlTGVhdmU6KFUpPT5VLmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0idHJhbnNwYXJlbnQiLG9uQ2xpY2s6KCk9PntpZighSylfKEQpfSxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOlI1KE4/IiM0YWRlODAiOiIjNDQ0Iil9KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MSx0ZXh0QWxpZ246ImxlZnQifSxjaGlsZHJlbjpELm5hbWV9KSxRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOlA/IiNhNWI0ZmMiOiIjODg4In0sY2hpbGRyZW46UD9OPyJTdGFydGluZy4uLiI6IkJvb3RpbmcuLi4iOk4/IlN0YXJ0IHN0cmVhbSI6IkJvb3QgJiBzdHJlYW0ifSldfSxELnVkaWQpfSldfSxMKSldfSldfSl9KX1mdW5jdGlvbiBiNSh7YWN0aXZlOkMscGVuZGluZzpaLG9uQ2xpY2s6Ryx2YXJpYW50OkosdGl0bGU6cSxjaGlsZHJlbjpYfSl7bGV0IFk9Sj09PSJncmFudCI/IiM0YWRlODAiOko9PT0icmV2b2tlIj8iI2Y4NzE3MSI6IiNhNWI0ZmMiO3JldHVybiBRKCJidXR0b24iLHtvbkNsaWNrOkcsZGlzYWJsZWQ6Wix0aXRsZTpxLCJhcmlhLWxhYmVsIjpxLHN0eWxlOnsuLi54LnBlcm1CdG4sYmFja2dyb3VuZDpDP2Ake1l9MjJgOiJ0cmFuc3BhcmVudCIsY29sb3I6Qz9ZOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixvcGFjaXR5Olo/MC41OjF9LGNoaWxkcmVuOlh9KX1mdW5jdGlvbiBEOChDLFope2lmKEM9PT1aKXJldHVybiEwO2lmKEMuaWQhPT1aLmlkfHxDLnBhdGghPT1aLnBhdGh8fEMubGFiZWwhPT1aLmxhYmVsfHxDLnZhbHVlIT09Wi52YWx1ZXx8Qy5yb2xlIT09Wi5yb2xlfHxDLnR5cGUhPT1aLnR5cGV8fEMuZW5hYmxlZCE9PVouZW5hYmxlZClyZXR1cm4hMTtsZXQgRz1DLmZyYW1lLEo9Wi5mcmFtZTtyZXR1cm4gRz09PUp8fEcueD09PUoueCYmRy55PT09Si55JiZHLndpZHRoPT09Si53aWR0aCYmRy5oZWlnaHQ9PT1KLmhlaWdodH12YXIgcDc9QjIoZnVuY3Rpb24oe2VsZW1lbnQ6WixpbmRleDpHLHNjcmVlbjpKLGhpZ2hsaWdodGVkOnEsc2VsZWN0ZWQ6WCxvbkhpZ2hsaWdodDpZLG9uU2VsZWN0OiR9KXtsZXQgXz1vMihaKSxWPU44KFosRyksQj1sNyhaLmZyYW1lLEopO2lmKCFCKXJldHVybiBudWxsO2xldCBMPWE3KFYpO3JldHVybiBRKCJidXR0b24iLHt0eXBlOiJidXR0b24iLCJkYXRhLWF4LWtleSI6XywiZGF0YS1heC1pZCI6Vi5pZCwiZGF0YS1heC1wYXRoIjpWLnBhdGgsImRhdGEtYXgtbGFiZWwiOlYubGFiZWwsImRhdGEtYXgtdmFsdWUiOlYudmFsdWUsImRhdGEtYXgtcm9sZSI6Vi5yb2xlLCJkYXRhLWF4LXR5cGUiOlYudHlwZSwiZGF0YS1heC1lbmFibGVkIjpTdHJpbmcoVi5lbmFibGVkKSwiZGF0YS1heC1mcmFtZSI6RjgoVi5mcmFtZSksImRhdGEtYXgtc2VsZWN0ZWQiOlN0cmluZyhYKSwiYXJpYS1sYWJlbCI6Wi5sYWJlbHx8TCx0aXRsZTpMLG9uQ2xpY2s6KCk9PiQoXyksb25Nb3VzZUVudGVyOigpPT5ZKF8pLG9uTW91c2VMZWF2ZTooKT0+WShudWxsKSxzdHlsZTp7Li4uazEudGFyZ2V0LGxlZnQ6YCR7Qi54L0oud2lkdGgqMTAwfSVgLHRvcDpgJHtCLnkvSi5oZWlnaHQqMTAwfSVgLHdpZHRoOmAke0Iud2lkdGgvSi53aWR0aCoxMDB9JWAsaGVpZ2h0OmAke0IuaGVpZ2h0L0ouaGVpZ2h0KjEwMH0lYCxib3JkZXJDb2xvcjpYPyIjNjBhNWZhIjpxPyIjZmJiZjI0IjoiIzM0ZDM5OSIsYmFja2dyb3VuZDpYPyJyZ2JhKDk2LDE2NSwyNTAsMC4yNCkiOnE/InJnYmEoMjQ1LDE1OCwxMSwwLjI4KSI6InJnYmEoMTYsMTg1LDEyOSwwLjEyKSJ9fSl9LChDLFopPT5DLmluZGV4PT09Wi5pbmRleCYmQy5oaWdobGlnaHRlZD09PVouaGlnaGxpZ2h0ZWQmJkMuc2VsZWN0ZWQ9PT1aLnNlbGVjdGVkJiZDLm9uSGlnaGxpZ2h0PT09Wi5vbkhpZ2hsaWdodCYmQy5vblNlbGVjdD09PVoub25TZWxlY3QmJkMuc2NyZWVuLndpZHRoPT09Wi5zY3JlZW4ud2lkdGgmJkMuc2NyZWVuLmhlaWdodD09PVouc2NyZWVuLmhlaWdodCYmRDgoQy5lbGVtZW50LFouZWxlbWVudCkpO2Z1bmN0aW9uIHU3KCl7bGV0e3NuYXBzaG90OkN9PWc1KCkse2hpZ2hsaWdodGVkS2V5Olosc2VsZWN0ZWRLZXk6RyxzZXRIaWdobGlnaHRlZEtleTpKLHNldFNlbGVjdGVkS2V5OnF9PUI4KCk7aWYoIUM/LnNjcmVlbi53aWR0aHx8IUM/LnNjcmVlbi5oZWlnaHQpcmV0dXJuIG51bGw7cmV0dXJuIFEoImRpdiIse3N0eWxlOmsxLnRhcmdldHMsY2hpbGRyZW46Qy5lbGVtZW50cy5tYXAoKFgsWSk9PntsZXQgJD1vMihYKTtyZXR1cm4gUShwNyx7ZWxlbWVudDpYLGluZGV4Olksc2NyZWVuOkMuc2NyZWVuLGhpZ2hsaWdodGVkOiQ9PT1aLHNlbGVjdGVkOiQ9PT1HLG9uSGlnaGxpZ2h0Okosb25TZWxlY3Q6cX0sJCl9KX0pfXZhciBkNz1CMihmdW5jdGlvbih7ZWxlbWVudDpaLGluZGV4OkcsYWN0aXZlOkosb25IaWdobGlnaHQ6cX0pe2xldCBYPW8yKFopLFk9TjgoWixHKSwkPWAke01hdGgucm91bmQoWi5mcmFtZS53aWR0aCl9eCR7TWF0aC5yb3VuZChaLmZyYW1lLmhlaWdodCl9YCxfPVtZLmxhYmVsLFkucm9sZXx8WS50eXBlfHwiZWxlbWVudCIsJF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiDCtyAiKTtyZXR1cm4gUSgiZGl2Iix7cm9sZToibGlzdGl0ZW0iLHRhYkluZGV4OjAsImRhdGEtYXgta2V5IjpYLHRpdGxlOl8sb25Nb3VzZUVudGVyOigpPT5xKFgpLG9uTW91c2VMZWF2ZTooKT0+cShudWxsKSxvbkZvY3VzOigpPT5xKFgpLG9uQmx1cjooKT0+cShudWxsKSxzdHlsZTp7Li4uazEubGlzdEl0ZW0sLi4uSj9rMS5saXN0SXRlbUFjdGl2ZTp7fX0sY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTprMS5pdGVtVGV4dCxjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOmsxLml0ZW1MYWJlbCxjaGlsZHJlbjpaLmxhYmVsfHxaLnJvbGV8fCJVbmxhYmVsZWQifSksUSgic3BhbiIse3N0eWxlOmsxLml0ZW1NZXRhLGNoaWxkcmVuOloucm9sZXx8Wi50eXBlfHwiZWxlbWVudCJ9KV19KSxRKCJjb2RlIix7c3R5bGU6azEuaXRlbVNpemUsY2hpbGRyZW46JH0pXX0pfSwoQyxaKT0+Qy5pbmRleD09PVouaW5kZXgmJkMuYWN0aXZlPT09Wi5hY3RpdmUmJkMub25IaWdobGlnaHQ9PT1aLm9uSGlnaGxpZ2h0JiZEOChDLmVsZW1lbnQsWi5lbGVtZW50KSk7ZnVuY3Rpb24gYzcoe292ZXJsYXlFbmFibGVkOkMsb25Ub2dnbGVPdmVybGF5Olp9KXtsZXR7c25hcHNob3Q6R309ZzUoKSx7aGlnaGxpZ2h0ZWRLZXk6SixzZXRIaWdobGlnaHRlZEtleTpxfT1COCgpLFg9Rz8uZWxlbWVudHM/P1tdLFk9VjgoRyksJD1HPy5lcnJvcnM/LlswXT8/bnVsbDtyZXR1cm4gUSgiZGl2Iix7c3R5bGU6ey4uLnguc2VjdGlvbixwYWRkaW5nOiI4cHggMTJweCJ9LGNoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTprMS5wYW5lbEhlYWRlcixjaGlsZHJlbjpbUSgic3BhbiIse3N0eWxlOnsuLi54LnNlY3Rpb25UaXRsZSxtYXJnaW46MH0sY2hpbGRyZW46IkFYIFRyZWUifSksUSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOlosImFyaWEtcHJlc3NlZCI6QyxzdHlsZTprMS5vdmVybGF5VG9nZ2xlLGNoaWxkcmVuOkM/Ik92ZXJsYXkgb24iOiJFbmFibGUgb3ZlcmxheSJ9KV19KSwhQz9udWxsOlk/USgiZGl2Iix7c3R5bGU6ey4uLnguZW1wdHkscGFkZGluZzoxMn0sY2hpbGRyZW46IkFYIHVuYXZhaWxhYmxlIG9uIHRoaXMgc2ltdWxhdG9yLiJ9KTpYLmxlbmd0aD09PTA/USgiZGl2Iix7c3R5bGU6ey4uLnguZW1wdHkscGFkZGluZzoxMn0sY2hpbGRyZW46JD8/IldhaXRpbmcgZm9yIGFjY2Vzc2liaWxpdHkgZGF0YeKApiJ9KTpRKCJkaXYiLHtzdHlsZTprMS5saXN0LHJvbGU6Imxpc3QiLGNoaWxkcmVuOlgubWFwKChfLFYpPT57bGV0IEI9bzIoXyk7cmV0dXJuIFEoZDcse2VsZW1lbnQ6XyxpbmRleDpWLGFjdGl2ZTpCPT09SixvbkhpZ2hsaWdodDpxfSxCKX0pfSldfSl9ZnVuY3Rpb24gTjgoQyxaKXtsZXQgRz1DLmxhYmVsfHxDLnJvbGV8fGBlbGVtZW50ICR7WisxfWAsSj1DLnJvbGV8fEMudHlwZTtyZXR1cm57aWQ6Qy5pZCxwYXRoOkMucGF0aCxsYWJlbDpHLHZhbHVlOkMudmFsdWUscm9sZTpKLHR5cGU6Qy50eXBlLGVuYWJsZWQ6Qy5lbmFibGVkLGZyYW1lOkMuZnJhbWV9fWZ1bmN0aW9uIGw3KEMsWil7bGV0IEc9TWF0aC5tYXgoMCxDLngpLEo9TWF0aC5tYXgoMCxDLnkpLHE9TWF0aC5taW4oWi53aWR0aCxDLngrQy53aWR0aCksWD1NYXRoLm1pbihaLmhlaWdodCxDLnkrQy5oZWlnaHQpLFk9TWF0aC5tYXgoMCxxLUcpLCQ9TWF0aC5tYXgoMCxYLUopO3JldHVybiBZPjAmJiQ+MD97eDpHLHk6Six3aWR0aDpZLGhlaWdodDokfTpudWxsfWZ1bmN0aW9uIG8yKEMpe3JldHVybiBDLmlkfWZ1bmN0aW9uIGE3KEMpe3JldHVybltgQVggbGFiZWw6ICR7Qy5sYWJlbHx8IlVubGFiZWxlZCJ9YCxDLnJvbGU/YHJvbGU6ICR7Qy5yb2xlfWA6IiIsQy50eXBlP2B0eXBlOiAke0MudHlwZX1gOiIiLEMudmFsdWU/YHZhbHVlOiAke0MudmFsdWV9YDoiIixDLmlkP2BpZDogJHtDLmlkfWA6IiIsYHBhdGg6ICR7Qy5wYXRofWAsYGZyYW1lOiAke0Y4KEMuZnJhbWUpfWBdLmZpbHRlcihCb29sZWFuKS5qb2luKCI7ICIpfWZ1bmN0aW9uIEY4KEMpe3JldHVybmAke0MueH0sJHtDLnl9ICR7Qy53aWR0aH14JHtDLmhlaWdodH1gfWZ1bmN0aW9uIGk3KHtvdmVybGF5RW5hYmxlZDpDLHN0cmVhbWluZzpaLG9uVG9nZ2xlT3ZlcmxheTpHfSl7bGV0e3N0YXR1czpKfT1nNSgpLFtxLFhdPUkoITEpO3JldHVybiBRKE8xLkJ1dHRvbix7ImFyaWEtbGFiZWwiOkM/IkhpZGUgYWNjZXNzaWJpbGl0eSBvdmVybGF5IjoiU2hvdyBhY2Nlc3NpYmlsaXR5IG92ZXJsYXkiLCJhcmlhLXByZXNzZWQiOkMsdGl0bGU6SixvbkNsaWNrOkcsb25Nb3VzZUVudGVyOigpPT5YKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlgoITEpLHN0eWxlOkMmJlo/ey4uLmsxLnRvb2xiYXJCdXR0b25BY3RpdmUsLi4ucT9rMS50b29sYmFyQnV0dG9uQWN0aXZlSG92ZXI6e319OnZvaWQgMCxjaGlsZHJlbjpRKCJzdmciLHt3aWR0aDoiMTkiLGhlaWdodDoiMTkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik0zIDhWNWEyIDIgMCAwIDEgMi0yaDMifSksUSgicGF0aCIse2Q6Ik0xNiAzaDNhMiAyIDAgMCAxIDIgMnYzIn0pLFEoInBhdGgiLHtkOiJNMjEgMTZ2M2EyIDIgMCAwIDEtMiAyaC0zIn0pLFEoInBhdGgiLHtkOiJNOCAyMUg1YTIgMiAwIDAgMS0yLTJ2LTMifSksUSgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjMuNSJ9KV19KX0pfWZ1bmN0aW9uIFE4KEMsWixHLEope2xldCBxPWgoKEIpPT5NYXRoLm1heChHLE1hdGgubWluKEosQikpLFtHLEpdKSxbWCxZXT1JKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIFo7bGV0IEI9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEMpLEw9QiE9bnVsbD9OdW1iZXIoQik6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoTCk/cShMKTpafSksJD10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihKLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpKLF89TWF0aC5tYXgoRyxNYXRoLm1pbigkLFgpKSxWPWgoKEIpPT57Qi5wcmV2ZW50RGVmYXVsdCgpO2xldCBMPUIuY2xpZW50WCxIPV8sRD1CLmN1cnJlbnRUYXJnZXQ7RC5zZXRQb2ludGVyQ2FwdHVyZShCLnBvaW50ZXJJZCk7bGV0IFA9KE4pPT57bGV0IFU9cShIKyhMLU4uY2xpZW50WCkpO1koVSl9LEs9KE4pPT57RC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoTi5wb2ludGVySWQpLEQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLFApLEQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixLKSxELnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEspO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQyxTdHJpbmcocShIKyhMLU4uY2xpZW50WCkpKSl9Y2F0Y2h7fX07RC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsUCksRC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEspLEQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsSyl9LFtxLF8sQ10pO3JldHVybnt3aWR0aDpfLG9uUG9pbnRlckRvd246Vn19ZnVuY3Rpb24gWTgoe3BhbmVsV2lkdGg6Qyx2aXNpYmxlOlosb25Qb2ludGVyRG93bjpHLGFyaWFMYWJlbDpKfSl7bGV0W3EsWF09SSghMSksW1ksJF09SSghMSksXz1xfHxZLFY9MTIrQy05O3JldHVybiBRKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpKLCJhcmlhLWhpZGRlbiI6IVosb25Qb2ludGVyRG93bjooQik9PnskKCEwKSxHKEIpfSxvblBvaW50ZXJVcDooKT0+JCghMSksb25Qb2ludGVyQ2FuY2VsOigpPT4kKCExKSxvblBvaW50ZXJFbnRlcjooKT0+WCghMCksb25Qb2ludGVyTGVhdmU6KCk9PlgoITEpLHN0eWxlOntwb3NpdGlvbjoiZml4ZWQiLHRvcDoxMixib3R0b206MTIscmlnaHQ6Vix3aWR0aDoxNixjdXJzb3I6ImNvbC1yZXNpemUiLHpJbmRleDozNix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czpaPyJhdXRvIjoibm9uZSIsb3BhY2l0eTpaPzE6MCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMnMgZWFzZSJ9LGNoaWxkcmVuOltRKCJkaXYiLHtzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxib3R0b206MCxsZWZ0OiI1MCUiLHdpZHRoOjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0wLjVweCkiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LDI1NSwyNTUsMCkgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgMzAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDcwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKSIsb3BhY2l0eTpfPzE6MCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTVzIGVhc2UiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLFEoImRpdiIse3N0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOjQsaGVpZ2h0OjI4LGJvcmRlclJhZGl1czoyLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixiYWNrZ3JvdW5kOlk/IiM5YTlhOWUiOiIjNmU2ZTcyIix6SW5kZXg6MSxvcGFjaXR5Ol8/MTowLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xNXMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlIixwb2ludGVyRXZlbnRzOiJub25lIn19KV19KX1mdW5jdGlvbiBvNyh7b3BlbjpDLG9uQ2xvc2U6Wix1ZGlkOkcsY3VycmVudEFwcDpKLGF4T3ZlcmxheUVuYWJsZWQ6cSxvblRvZ2dsZUF4T3ZlcmxheTpYLHdpZHRoOll9KXtyZXR1cm4gUSgiYXNpZGUiLHtzdHlsZTp7Li4ueC5wYW5lbCx3aWR0aDpZLHRyYW5zZm9ybTpDPyJ0cmFuc2xhdGVYKDApIjoidHJhbnNsYXRlWChjYWxjKDEwMCUgKyAyNHB4KSkiLG9wYWNpdHk6Qz8xOjAscG9pbnRlckV2ZW50czpDPyJhdXRvIjoibm9uZSJ9LCJhcmlhLWhpZGRlbiI6IUMsY2hpbGRyZW46W1EoImhlYWRlciIse3N0eWxlOnguaGVhZGVyLGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6eC5oZWFkZXJUaXRsZSxjaGlsZHJlbjoiVG9vbHMifSksUSgiYnV0dG9uIix7b25DbGljazpaLHN0eWxlOnguY2xvc2VCdG4sImFyaWEtbGFiZWwiOiJDbG9zZSBwYW5lbCIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjE2IixoZWlnaHQ6IjE2Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLFEoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pXX0pfSldfSksQyYmUSgiZGl2Iix7c3R5bGU6eC5ib2R5LGNoaWxkcmVuOltRKGM3LHtvdmVybGF5RW5hYmxlZDpxLG9uVG9nZ2xlT3ZlcmxheTpYfSksUShnNyx7dWRpZDpHLGN1cnJlbnRBcHA6Sn0pLFEoeDcse3VkaWQ6RyxidW5kbGVJZDpKPy5idW5kbGVJZD8/bnVsbH0pLFEoSjgse3VkaWQ6RyxleGVjOlUxfSldfSldfSl9ZnVuY3Rpb24gcjcoe29wZW46QyxvbkNsb3NlOlosdWRpZDpHLHRhcmdldHM6SixzZWxlY3RlZFRhcmdldElkOnEsb25TZWxlY3RUYXJnZXQ6WCxsb2FkaW5nOlksZXJyb3I6JCxvblJlZnJlc2g6Xyx3aWR0aDpWfSl7bGV0IEI9cT9KLmZpbmQoKEwpPT5MLmlkPT09cSk/P251bGw6bnVsbDtyZXR1cm4gUSgiYXNpZGUiLHtzdHlsZTp7Li4uQzEucGFuZWwsd2lkdGg6Vix0cmFuc2Zvcm06Qz8idHJhbnNsYXRlWCgwKSI6InRyYW5zbGF0ZVgoY2FsYygxMDAlICsgMjRweCkpIixvcGFjaXR5OkM/MTowLHBvaW50ZXJFdmVudHM6Qz8iYXV0byI6Im5vbmUifSwiYXJpYS1oaWRkZW4iOiFDLGNoaWxkcmVuOltRKCJoZWFkZXIiLHtzdHlsZTpDMS5oZWFkZXIsY2hpbGRyZW46W0oubGVuZ3RoPjA/UShUNyx7dWRpZDpHLHRhcmdldHM6SixzZWxlY3RlZDpCLG9uU2VsZWN0VGFyZ2V0Olgsb25SZWZyZXNoOl99KTpRKCJzcGFuIix7c3R5bGU6QzEuZW1wdHlUYXJnZXQsY2hpbGRyZW46WT8iTG9va2luZyBmb3IgU2FmYXJpIGFuZCBpbnNwZWN0YWJsZSB3ZWJ2aWV3cy4uLiI6Ik5vIGluc3BlY3RhYmxlIFNhZmFyaSBvciBXS1dlYlZpZXcgdGFyZ2V0cyJ9KSxRKCJidXR0b24iLHtvbkNsaWNrOlosc3R5bGU6QzEuaWNvbkJ1dHRvbiwiYXJpYS1sYWJlbCI6IkNsb3NlIFdlYktpdCBEZXZUb29scyIsdGl0bGU6IkNsb3NlIixjaGlsZHJlbjpRKCJzdmciLHt3aWR0aDoiMTUiLGhlaWdodDoiMTUiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSksUSgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSldfSl9KV19KSxRKCJkaXYiLHtzdHlsZTpDMS5mcmFtZVdyYXAsY2hpbGRyZW46JD9RKCJkaXYiLHtzdHlsZTpDMS5tZXNzYWdlLGNoaWxkcmVuOiR9KTpCJiZDP1EoImlmcmFtZSIse3NyYzpCLmRldnRvb2xzRnJvbnRlbmRVcmwsdGl0bGU6YFdlYktpdCBEZXZUb29scyAtICR7Qi50aXRsZXx8Qi51cmx8fEIuaWR9YCxzdHlsZTpDMS5pZnJhbWUsb25Mb2FkOihMKT0+azcoTC5jdXJyZW50VGFyZ2V0KX0sQi5pZCk6USgiZGl2Iix7c3R5bGU6QzEubWVzc2FnZSxjaGlsZHJlbjpCPyJEZXZUb29scyBwYXVzZWQg4oCUIG9wZW4gdGhlIHBhbmVsIHRvIHJlYXR0YWNoLiI6Ik9wZW4gU2FmYXJpIG9yIGFuIGluc3BlY3RhYmxlIFdLV2ViVmlldyBpbiB0aGUgc2ltdWxhdG9yLiJ9KX0pXX0pfXZhciBzNz17d2lkdGg6IjEwMCUiLG1heFdpZHRoOjM2MCxtYXJnaW5Ub3A6OCxiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzo0LGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixmb250U2l6ZToxMyxjb2xvcjoiI2VlZSIsdGV4dEFsaWduOiJsZWZ0IixtYXhIZWlnaHQ6IjcwdmgiLG92ZXJmbG93WToiYXV0byIsbWluSGVpZ2h0OjB9O2Z1bmN0aW9uIG43KCl7bGV0IEM9d2luZG93Ll9fU0lNX1BSRVZJRVdfXyxbWixHXT1JKCExKSxbSixxXT1JKFtdKSxbWCxZXT1JKCExKSxbJCxfXT1JKG51bGwpLFtWLEJdPUkobmV3IFNldCksW0wsSF09SSghMSksW0QsUF09SSghMSksW0ssTl09SSghMSksW1UsV109SShudWxsKSx5PWgoYXN5bmMoKT0+e1koITApLF8obnVsbCk7dHJ5e2xldCB6PWF3YWl0IFUxKCJ4Y3J1biBzaW1jdGwgbGlzdCBkZXZpY2VzIGF2YWlsYWJsZSAtaiIpO2lmKHouZXhpdENvZGUhPT0wKXRocm93IEVycm9yKHouc3RkZXJyfHwic2ltY3RsIGxpc3QgZmFpbGVkIik7cShFNyh6LnN0ZG91dCkpfWNhdGNoKHope18oeiBpbnN0YW5jZW9mIEVycm9yP3oubWVzc2FnZToiRmFpbGVkIHRvIGxpc3QgZGV2aWNlcyIpfWZpbmFsbHl7WSghMSl9fSxbXSk7aWYoYigoKT0+e3koKX0sW3ldKSxiKCgpPT57aWYoIUM/LmxvZ3NFbmRwb2ludClyZXR1cm47bGV0IHo9bmV3IEV2ZW50U291cmNlKEMubG9nc0VuZHBvaW50KSxUPW5ldyBNYXAsbT1bIiM4YmU5ZmQiLCIjNTBmYTdiIiwiI2ZmYjg2YyIsIiNmZjc5YzYiLCIjYmQ5M2Y5IiwiI2YxZmE4YyIsIiM2MjcyYTQiLCIjZmY1NTU1IiwiIzY5ZmY5NCIsIiNkNmFjZmYiLCIjZmZmZmE1IiwiI2E0ZmZmZiIsIiNmZjZlNmUiLCIjY2FhOWZhIiwiIzVhZjc4ZSJdO2Z1bmN0aW9uIHUoTyl7bGV0IEY9VC5nZXQoTyk7aWYoIUYpe2xldCBNPTA7Zm9yKGxldCBBPTA7QTxPLmxlbmd0aDtBKyspTT0oTTw8NSktTStPLmNoYXJDb2RlQXQoQSl8MDtGPW1bTWF0aC5hYnMoTSklbS5sZW5ndGhdLFQuc2V0KE8sRil9cmV0dXJuIEZ9bGV0IEoxPSIiLF8xPSExO3JldHVybiB6Lm9ubWVzc2FnZT0oTyk9Pnt0cnl7bGV0IEY9SlNPTi5wYXJzZShPLmRhdGEpLE09Ri5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz9GLnNlbmRlckltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/IiIsQT1GLnN1YnN5c3RlbT8/IiIsZz1GLmNhdGVnb3J5Pz8iIixvPUYuZXZlbnRNZXNzYWdlPz8iIjtpZighbylyZXR1cm47aWYoTSE9PUoxKXtpZihfMSljb25zb2xlLmdyb3VwRW5kKCk7bGV0IGUxPXUoTSk7Y29uc29sZS5ncm91cENvbGxhcHNlZChgJWMke019JHtBP2AgJWMke0F9JHtnPyI6IitnOiIifWA6IiJ9YCxgY29sb3I6JHtlMX07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4uQT9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLF8xPSEwLEoxPU19bGV0IHExPShGLm1lc3NhZ2VUeXBlPz8iIikudG9Mb3dlckNhc2UoKSxlPUEmJk09PT1KMT9gJWMke2d8fEF9JWMgYDoiIix0MT1lP1siY29sb3I6Izg4ODtmb250LXN0eWxlOml0YWxpYyIsImNvbG9yOmluaGVyaXQiXTpbXTtpZihxMT09PSJmYXVsdCJ8fHExPT09ImVycm9yIiljb25zb2xlLmxvZyhgJHtlfSVjJHtvfWAsLi4udDEsImNvbG9yOiNmZjU1NTUiKTtlbHNlIGlmKHExPT09ImRlYnVnIiljb25zb2xlLmxvZyhgJHtlfSVjJHtvfWAsLi4udDEsImNvbG9yOiM2MjcyYTQiKTtlbHNlIGNvbnNvbGUubG9nKGAke2V9JWMke299YCwuLi50MSwiY29sb3I6aW5oZXJpdCIpfWNhdGNoe319LCgpPT57aWYoXzEpY29uc29sZS5ncm91cEVuZCgpO3ouY2xvc2UoKX19LFtDPy5sb2dzRW5kcG9pbnRdKSwhQylyZXR1cm4gUShmNyx7ZGV2aWNlczpKLGxvYWRpbmc6WCxlcnJvcjokLG9uUmVmcmVzaDp5fSk7bGV0IEU9Si5maW5kKCh6KT0+ei51ZGlkPT09Qy5kZXZpY2UpPz9udWxsO2IoKCk9Pntkb2N1bWVudC50aXRsZT1FPy5uYW1lP2BTaW11bGF0b3IgLSAke0UubmFtZX1gOiJTaW11bGF0b3IgUHJldmlldyJ9LFtFPy5uYW1lXSk7bGV0IGY9cTIoRT8ubmFtZSksaz1XNyhDLmRldnRvb2xzRW5kcG9pbnQ/P1EyKCJkZXZ0b29scyIpLEspO2IoKCk9PntpZighSylyZXR1cm47aWYoVSYmay50YXJnZXRzLnNvbWUoKHopPT56LmlkPT09VSkpcmV0dXJuO1coay50YXJnZXRzLmxlbmd0aD09PTE/ay50YXJnZXRzWzBdLmlkOm51bGwpfSxbSyxrLnRhcmdldHMsVV0pLGIoKCk9PntXKG51bGwpfSxbQy5kZXZpY2VdKTtsZXQgdj1VNyhDLnN0cmVhbVVybCksW3IsYV09SShudWxsKSxuPXI/P3YuY29uZmlnPz9oMihmLEU/Lm5hbWUpLHM9ZzIoZixuKSxnMT12MihmLG4pLEsxPWoyKG4pLHoxPUoyKG4pLGo9ejE/ejEud2lkdGgvejEuaGVpZ2h0OjEsbD1SKG51bGwpO2IoKCk9PntsZXQgej0hMSxUPW51bGwsbT1udWxsLHU9KCk9PntpZih6fHxUKXJldHVybjtUPXNldFRpbWVvdXQoKCk9PntUPW51bGwsSjEoKX0sMTAwMCl9LEoxPSgpPT57bGV0IF8xPW5ldyBXZWJTb2NrZXQoQy53c1VybCk7XzEuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLG09XzEsbC5jdXJyZW50PV8xLF8xLm9uY2xvc2U9KCk9PntpZihsLmN1cnJlbnQ9PT1fMSlsLmN1cnJlbnQ9bnVsbDt1KCl9LF8xLm9uZXJyb3I9KCk9PntfMS5jbG9zZSgpfX07cmV0dXJuIEoxKCksKCk9PntpZih6PSEwLFQpY2xlYXJUaW1lb3V0KFQpO2lmKGwuY3VycmVudD09PW0pbC5jdXJyZW50PW51bGw7bT8uY2xvc2UoKX19LFtDLndzVXJsXSk7bGV0IHA9aCgoeixUKT0+e2xldCBtPWwuY3VycmVudDtpZighbXx8bS5yZWFkeVN0YXRlIT09V2ViU29ja2V0Lk9QRU4pcmV0dXJuO2xldCB1PW5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeShUKSksSjE9bmV3IFVpbnQ4QXJyYXkoMSt1Lmxlbmd0aCk7SjFbMF09eixKMS5zZXQodSwxKSxtLnNlbmQoSjEpfSxbXSksWTE9aCgoeik9PnAoMyx6KSxbcF0pLEkxPWgoKHopPT5wKDUseiksW3BdKSxCMT1oKCh6KT0+cCg0LHtidXR0b246en0pLFtwXSksWjE9aCgoeik9PnthKChUKT0+VCYmVC53aWR0aD09PXoud2lkdGgmJlQuaGVpZ2h0PT09ei5oZWlnaHQmJlQub3JpZW50YXRpb249PT16Lm9yaWVudGF0aW9uP1Q6eil9LFtdKSxHMT1oKCh6KT0+e3AoNyx7b3JpZW50YXRpb246en0pfSxbcF0pO2IoKCk9PnthKG51bGwpfSxbQy5zdHJlYW1VcmxdKSxiKCgpPT57bGV0IHo9di5jb25maWc7aWYoIXopcmV0dXJuO2EoKFQpPT5UJiZULndpZHRoPT09ei53aWR0aCYmVC5oZWlnaHQ9PT16LmhlaWdodCYmVC5vcmllbnRhdGlvbj09PXoub3JpZW50YXRpb24/VDpudWxsKX0sW3YuY29uZmlnPy53aWR0aCx2LmNvbmZpZz8uaGVpZ2h0LHYuY29uZmlnPy5vcmllbnRhdGlvbl0pO2xldCBTPWgoKHosVCk9PntwKDYse3R5cGU6eix1c2FnZTpUfSl9LFtwXSksW2MsZF09SShudWxsKSxbaSwkMV09SSghMSkse3dpZHRoOlAxLG9uUG9pbnRlckRvd246TTF9PVE4KCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLE04LDI0MCw3MjApLHt3aWR0aDpiMSxvblBvaW50ZXJEb3duOmkxfT1ROCgic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixXOCw0MjAsMTQwMCksW0gxLG8xXT1JKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJXaWR0aDowKSxbRDEsVzFdPUkoKCk9PnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdy5pbm5lckhlaWdodDowKTtiKCgpPT57bGV0IHo9KCk9PntvMSh3aW5kb3cuaW5uZXJXaWR0aCksVzEod2luZG93LmlubmVySGVpZ2h0KX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLHopLCgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVzaXplIix6KX0sW10pLGIoKCk9PntsZXQgej1uZXcgRXZlbnRTb3VyY2UoQy5hcHBTdGF0ZUVuZHBvaW50Pz9RMigiYXBwc3RhdGUiKSksVD1udWxsO3JldHVybiB6Lm9ubWVzc2FnZT0obSk9Pnt0cnl7bGV0IHU9SlNPTi5wYXJzZShtLmRhdGEpO2lmKFQpY2xlYXJUaW1lb3V0KFQpO2xldCBKMT11Py5pc1JlYWN0TmF0aXZlPzA6NjAwO1Q9c2V0VGltZW91dCgoKT0+ZCh1KSxKMSl9Y2F0Y2h7fX0sKCk9PntpZihUKWNsZWFyVGltZW91dChUKTt6LmNsb3NlKCl9fSxbQy5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IFkyPWgoYXN5bmMoKT0+e1MoImRvd24iLDIyNyksYXdhaXQgbmV3IFByb21pc2UoKG0pPT5zZXRUaW1lb3V0KG0sMzApKSxTKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKG0pPT5zZXRUaW1lb3V0KG0sMzApKSxTKCJ1cCIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChtKT0+c2V0VGltZW91dChtLDMwKSksUygidXAiLDIyNyl9LFtTXSksYzE9UihudWxsKSxbbTEsJDJdPUkoMCk7YigoKT0+e2xldCB6PWMxLmN1cnJlbnQ7aWYoIXp8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBUPW5ldyBSZXNpemVPYnNlcnZlcigobSk9PntsZXQgdT1tWzBdPy5jb250ZW50UmVjdC53aWR0aD8/MDskMih1KX0pO3JldHVybiBULm9ic2VydmUoeiksKCk9PlQuZGlzY29ubmVjdCgpfSxbXSk7bGV0W3IxLFYyXT1JKCEwKSxUMT1SKCEwKTtUMS5jdXJyZW50PXIxO2xldCBOMT1SKG5ldyBTZXQpO2IoKCk9PntsZXQgej0oVCk9PntsZXQgbT0hIWMxLmN1cnJlbnQ/LmNvbnRhaW5zKFQudGFyZ2V0KTtWMihtKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix6LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHosITApfSxbXSksYigoKT0+e2lmKHIxKXJldHVybjtsZXQgej1OMS5jdXJyZW50O2lmKHouc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgVCBvZiB6KXAoNix7dHlwZToidXAiLHVzYWdlOlR9KTt6LmNsZWFyKCl9LFtyMSxwXSksYigoKT0+e2xldCB6PSh1LEoxKT0+e2lmKCFUMS5jdXJyZW50KXJldHVybjtpZih1LmNvZGU9PT0iS2V5SCImJnUubWV0YUtleSYmdS5zaGlmdEtleSl7aWYodS5wcmV2ZW50RGVmYXVsdCgpLEoxPT09ImRvd24iJiYhdS5yZXBlYXQpcCg0LHtidXR0b246ImhvbWUifSk7cmV0dXJufWlmKHUuY29kZT09PSJLZXlBIiYmdS5tZXRhS2V5JiZ1LnNoaWZ0S2V5KXtpZih1LnByZXZlbnREZWZhdWx0KCksSjE9PT0iZG93biImJiF1LnJlcGVhdClVMShgeGNydW4gc2ltY3RsIHVpICR7Qy5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChPKT0+e2xldCBGPU8uc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gVTEoYHhjcnVuIHNpbWN0bCB1aSAke0MuZGV2aWNlfSBhcHBlYXJhbmNlICR7Rn1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBfMT16Nyh1LmNvZGUpO2lmKF8xPT1udWxsKXJldHVybjtpZih1LnByZXZlbnREZWZhdWx0KCksSjE9PT0iZG93biIpTjEuY3VycmVudC5hZGQoXzEpO2Vsc2UgTjEuY3VycmVudC5kZWxldGUoXzEpO3AoNix7dHlwZTpKMSx1c2FnZTpfMX0pfSxUPSh1KT0+eih1LCJkb3duIiksbT0odSk9PnoodSwidXAiKTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsbSksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixtKX19LFtwLEMuZGV2aWNlXSk7bGV0IHMxPWgoYXN5bmMoeik9PntpZihMfHx6LnVkaWQ9PT1DLmRldmljZSlyZXR1cm47SCghMCk7dHJ5e2lmKHouc3RhdGUhPT0iQm9vdGVkIilhd2FpdCBVMShgeGNydW4gc2ltY3RsIGJvb3QgJHt6LnVkaWR9YCk7bGV0IFQ9YXdhaXQgVTEoYGJ1bnggc2VydmUtc2ltIC0tZGV0YWNoICR7ei51ZGlkfWApO2lmKFQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKFQuc3RkZXJyfHwiRmFpbGVkIHRvIHN0YXJ0IHNlcnZlLXNpbSIpO2xldCBtPW5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO20uc2VhcmNoUGFyYW1zLnNldCgiZGV2aWNlIix6LnVkaWQpLHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obS50b1N0cmluZygpKX1jYXRjaHtIKCExKX19LFtMLEMuZGV2aWNlXSksdzE9aDcoKSx4MT12Nyh7ZXhlYzpVMSx1ZGlkOkMuZGV2aWNlLGVuYWJsZWQ6WixvblVwbG9hZFN0YXJ0OncxLmFkZCxvblVwbG9hZEVuZDooeixULG0pPT53MS51cGRhdGUoeix7c3RhdHVzOlQ/InN1Y2Nlc3MiOiJlcnJvciIsbWVzc2FnZTptfSksb25VbnN1cHBvcnRlZDooeik9PntsZXQgVD13MS5hZGQoei5uYW1lLCJtZWRpYSIpO3cxLnVwZGF0ZShULHtzdGF0dXM6ImVycm9yIixtZXNzYWdlOmBVbnN1cHBvcnRlZDogJHt6LnR5cGV8fG01KHopfWB9KX19KSxVMj1oKGFzeW5jKHopPT57QigoVCk9Pm5ldyBTZXQoVCkuYWRkKHopKTt0cnl7YXdhaXQgVTEoYHhjcnVuIHNpbWN0bCBzaHV0ZG93biAke3p9YCksYXdhaXQgeSgpfWZpbmFsbHl7QigoVCk9PntsZXQgbT1uZXcgU2V0KFQpO3JldHVybiBtLmRlbGV0ZSh6KSxtfSl9fSxbeV0pLHQ9SjYoe2RlZmF1bHRXaWR0aDpnMSx2aWV3cG9ydFdpZHRoOkgxLHZpZXdwb3J0SGVpZ2h0OkQxLGFzcGVjdFJhdGlvOmosb25TdGFydDooKT0+VjIoITEpfSkseTE9Sz9iMTppP1AxOjAsTzI9MTIsZjE9MjQscjI9eTE+MD95MStmMTowLG4xPTA7aWYoeTE+MCl7bGV0IHo9SDEtTzIteTEsVD1tMT4wP01hdGgubWluKG0xLHQud2lkdGgpOnQud2lkdGgsdT1IMS8yK1QvMi0oei1mMSk7aWYodT4wKXtsZXQgSjE9Mip1O24xPUoxPD1yMj9KMTowfX1yZXR1cm4gUShNNyx7ZW5kcG9pbnQ6RD9DPy5heEVuZHBvaW50OnZvaWQgMCxjaGlsZHJlbjpRKCJkaXYiLHtzdHlsZTp7Li4uRjEucGFnZSxwYWRkaW5nUmlnaHQ6MjQrbjEsdHJhbnNpdGlvbjp0LmlzUmVzaXppbmc/Im5vbmUiOkc2fSxjaGlsZHJlbjpbUSgiZGl2Iix7c3R5bGU6ey4uLkYxLnNpbXVsYXRvclN0YWNrLHdpZHRoOnQud2lkdGgsdHJhbnNpdGlvbjp0LmlzUmVzaXppbmc/JDg6djV9LGNoaWxkcmVuOltRKE8xLHtleGVjOlUxLG9uUm90YXRlOkcxLG9yaWVudGF0aW9uOm4ub3JpZW50YXRpb24/P251bGwsZGV2aWNlVWRpZDpDLmRldmljZSxkZXZpY2VOYW1lOkU/Lm5hbWU/P251bGwsZGV2aWNlUnVudGltZTpFPy5ydW50aW1lPz9udWxsLHN0cmVhbWluZzpaLGNoaWxkcmVuOltRKHc3LHtkZXZpY2VzOkosc2VsZWN0ZWRVZGlkOkMuZGV2aWNlLGxvYWRpbmc6WCxlcnJvcjokLHN0b3BwaW5nVWRpZHM6VixvblJlZnJlc2g6eSxvblNlbGVjdDpzMSxvblN0b3A6VTIsdHJpZ2dlcjpRKE8xLlRpdGxlLHt9KX0pLFEoTzEuQWN0aW9ucyx7Y2hpbGRyZW46W2M/LmlzUmVhY3ROYXRpdmUmJlEoTzEuQnV0dG9uLHsiYXJpYS1sYWJlbCI6IlJlbG9hZCBSZWFjdCBOYXRpdmUgYnVuZGxlIix0aXRsZToiUmVsb2FkIChDbWQrUikiLG9uQ2xpY2s6KCk9PnZvaWQgWTIoKSxjaGlsZHJlbjpRKF84LHt9KX0pLFEoTzEuSG9tZUJ1dHRvbix7b25DbGljazooeik9Pnt6LnByZXZlbnREZWZhdWx0KCksQjEoImhvbWUiKX19KSxRKGk3LHtvdmVybGF5RW5hYmxlZDpELHN0cmVhbWluZzpaLG9uVG9nZ2xlT3ZlcmxheTooKT0+UCgoeik9PiF6KX0pLFEoTzEuUm90YXRlQnV0dG9uLHt0aXRsZToiUm90YXRlIGRldmljZSJ9KV19KV19KSxRKCJkaXYiLHtyZWY6YzEsc3R5bGU6e3dpZHRoOnQud2lkdGgsbWF4SGVpZ2h0OiIxMDAlIixhc3BlY3RSYXRpbzpLMSxwb3NpdGlvbjoicmVsYXRpdmUiLHRyYW5zaXRpb246dC5pc1Jlc2l6aW5nPyQ4OnY1LHdpbGxDaGFuZ2U6dC5pc1Jlc2l6aW5nPyJ3aWR0aCI6dm9pZCAwfSwuLi54MS5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOltRKFIyLHt1cmw6Qy51cmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czp0LmlzUmVzaXppbmc/Im5vbmUiOnZvaWQgMH0saW1hZ2VTdHlsZTp7Ym9yZGVyUmFkaXVzOnMsY29ybmVyU2hhcGU6InN1cGVyZWxsaXBzZSgxLjMpIn0saGlkZUNvbnRyb2xzOiEwLG9uU3RyZWFtaW5nQ2hhbmdlOkcsb25TdHJlYW1Ub3VjaDpZMSxvblN0cmVhbU11bHRpVG91Y2g6STEsb25TdHJlYW1CdXR0b246QjEsc3Vic2NyaWJlRnJhbWU6di5zdWJzY3JpYmVGcmFtZSxzdHJlYW1GcmFtZTp2LmZyYW1lLHN0cmVhbUNvbmZpZzpuLG9uU2NyZWVuQ29uZmlnQ2hhbmdlOloxfSksRCYmUSh1Nyx7fSkseDEuaXNEcmFnT3ZlciYmUSgiZGl2Iix7c3R5bGU6ey4uLkYxLmRyb3BPdmVybGF5LGJvcmRlclJhZGl1czpzfSxjaGlsZHJlbjpbUSgic3ZnIix7d2lkdGg6IjMyIixoZWlnaHQ6IjMyIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbUSgicGF0aCIse2Q6Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00In0pLFEoInBvbHlsaW5lIix7cG9pbnRzOiIxNyA4IDEyIDMgNyA4In0pLFEoImxpbmUiLHt4MToiMTIiLHkxOiIzIix4MjoiMTIiLHkyOiIxNSJ9KV19KSxRKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEzLGZvbnRXZWlnaHQ6NTAwfSxjaGlsZHJlbjoiRHJvcCBtZWRpYSBvciAuaXBhIn0pXX0pLFEoImRpdiIse3JlZjp0LmhhbmRsZVJlZixyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoaTIpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKHQubWF4V2lkdGgpLCJhcmlhLXZhbHVlbm93IjpNYXRoLnJvdW5kKHQud2lkdGgpLHRhYkluZGV4OjAsdGl0bGU6IkRyYWcgdG8gcmVzaXplIixvblBvaW50ZXJEb3duOnQub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOnQub25Qb2ludGVyTW92ZSxvblBvaW50ZXJVcDp0Lm9uUG9pbnRlckVuZCxvblBvaW50ZXJDYW5jZWw6dC5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6dC5vblBvaW50ZXJFbmQsb25LZXlEb3duOnQub25LZXlEb3duLG9uUG9pbnRlckVudGVyOigpPT50LnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT50LnNldEhhbmRsZUhvdmVyZWQoITEpLHN0eWxlOnsuLi5GMS5yZXNpemVIYW5kbGUsLi4udC5oYW5kbGVBY3RpdmU/RjEucmVzaXplSGFuZGxlQWN0aXZlOnt9fSxjaGlsZHJlbjpRKCJzdmciLHt3aWR0aDoiMTUiLGhlaWdodDoiMTUiLHZpZXdCb3g6IjAgMCAxNSAxNSIsZmlsbDoibm9uZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46W1EoInBhdGgiLHtkOiJNOSAxM0wxMyA5IixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNCIsc3Ryb2tlTGluZWNhcDoicm91bmQifSksUSgicGF0aCIse2Q6Ik01IDEzTDEzIDUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS40IixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KV19KX0pXX0pXX0pLHcxLnRvYXN0cy5sZW5ndGg+MCYmUSgiZGl2Iix7c3R5bGU6RjEudG9hc3RTdGFjayxjaGlsZHJlbjp3MS50b2FzdHMubWFwKCh6KT0+USgiZGl2Iix7c3R5bGU6RjEudG9hc3QsY2hpbGRyZW46W1EoInNwYW4iLHtzdHlsZTp7Li4uRjEuZG90LGJhY2tncm91bmQ6ei5zdGF0dXM9PT0idXBsb2FkaW5nIj8iI2E1YjRmYyI6ei5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxRKCJzcGFuIix7c3R5bGU6e2ZsZXg6MSxvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbei5zdGF0dXM9PT0idXBsb2FkaW5nIiYmKHoua2luZD09PSJpcGEiP2BJbnN0YWxsaW5nICR7ei5uYW1lfeKApmA6YFVwbG9hZGluZyAke3oubmFtZX3igKZgKSx6LnN0YXR1cz09PSJzdWNjZXNzIiYmKHoua2luZD09PSJpcGEiP2BJbnN0YWxsZWQgJHt6Lm5hbWV9YDpgQWRkZWQgJHt6Lm5hbWV9IHRvIFBob3Rvc2ApLHouc3RhdHVzPT09ImVycm9yIiYmYCR7ei5uYW1lfTogJHt6Lm1lc3NhZ2U/PyJVcGxvYWQgZmFpbGVkIn1gXX0pXX0sei5pZCkpfSksUSgiZGl2Iix7c3R5bGU6ey4uLnk1LnJhaWwsb3BhY2l0eTppfHxLPzA6MSxwb2ludGVyRXZlbnRzOml8fEs/Im5vbmUiOiJhdXRvIn0sY2hpbGRyZW46W1EoImJ1dHRvbiIse29uQ2xpY2s6KCk9PntOKCExKSwkMSgoeik9PiF6KX0sc3R5bGU6eTUuYnV0dG9uLCJhcmlhLWxhYmVsIjoiT3BlbiB0b29scyBwYW5lbCIsImFyaWEtcHJlc3NlZCI6aSx0aXRsZToiVG9vbHMiLGNoaWxkcmVuOlEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltRKCJyZWN0Iix7eDoiMyIseToiNCIsd2lkdGg6IjE4IixoZWlnaHQ6IjE2IixyeDoiMi41In0pLFEoImxpbmUiLHt4MToiMTUiLHkxOiI0Iix4MjoiMTUiLHkyOiIyMCJ9KV19KX0pLFEoImJ1dHRvbiIse29uQ2xpY2s6KCk9PnskMSghMSksTigoeik9PiF6KX0sc3R5bGU6eTUuYnV0dG9uLCJhcmlhLWxhYmVsIjoiT3BlbiBXZWJLaXQgRGV2VG9vbHMiLCJhcmlhLXByZXNzZWQiOkssdGl0bGU6IldlYktpdCBEZXZUb29scyIsY2hpbGRyZW46USgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W1EoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIxMCJ9KSxRKCJwYXRoIix7ZDoiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAifSksUSgicGF0aCIse2Q6Ik0yIDEyaDIwIn0pXX0pfSldfSksUShvNyx7b3BlbjppLG9uQ2xvc2U6KCk9PiQxKCExKSx1ZGlkOkMuZGV2aWNlLGN1cnJlbnRBcHA6YyxheE92ZXJsYXlFbmFibGVkOkQsb25Ub2dnbGVBeE92ZXJsYXk6KCk9PlAoKHopPT4heiksd2lkdGg6UDF9KSxRKFk4LHtwYW5lbFdpZHRoOlAxLHZpc2libGU6aSxvblBvaW50ZXJEb3duOk0xLGFyaWFMYWJlbDoiUmVzaXplIHRvb2xzIHBhbmVsIn0pLFEocjcse29wZW46SyxvbkNsb3NlOigpPT5OKCExKSx1ZGlkOkMuZGV2aWNlLHRhcmdldHM6ay50YXJnZXRzLHNlbGVjdGVkVGFyZ2V0SWQ6VSxvblNlbGVjdFRhcmdldDpXLGxvYWRpbmc6ay5sb2FkaW5nLGVycm9yOmsuZXJyb3Isb25SZWZyZXNoOigpPT52b2lkIGsucmVmcmVzaCgpLHdpZHRoOmIxfSksUShZOCx7cGFuZWxXaWR0aDpiMSx2aXNpYmxlOkssb25Qb2ludGVyRG93bjppMSxhcmlhTGFiZWw6IlJlc2l6ZSBXZWJLaXQgRGV2VG9vbHMgcGFuZWwifSksUSgiZGl2Iix7c3R5bGU6RjEuYmFyLGNoaWxkcmVuOlEoInNwYW4iLHtzdHlsZTp7Li4uRjEubGl2ZSxjb2xvcjpaPyIjNGFkZTgwIjoiIzY2NiJ9LGNoaWxkcmVuOltRKCJzcGFuIix7c3R5bGU6ey4uLkYxLmRvdCxiYWNrZ3JvdW5kOlo/IiM0YWRlODAiOiIjNjY2In19KSxaPyJsaXZlIjoiY29ubmVjdGluZyJdfSl9KV19KX0pfXZhciBGMT17cGFnZTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGhlaWdodDoiMTAwdmgiLGJhY2tncm91bmQ6IiMwYTBhMGEiLHBhZGRpbmc6MjQsZ2FwOjEyLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsYm94U2l6aW5nOiJib3JkZXItYm94In0sc2ltdWxhdG9yU3RhY2s6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsbWluV2lkdGg6MCx0cmFuc2l0aW9uOnY1fSxiYXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjEwLGZvbnRTaXplOjEyLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixjb2xvcjoiIzY2NiJ9LGxpdmU6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjUsdHJhbnNpdGlvbjoiY29sb3IgMC4zcyJ9LGRvdDp7d2lkdGg6NixoZWlnaHQ6Nixib3JkZXJSYWRpdXM6IjUwJSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjNzIn0sZW1wdHk6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsdGV4dEFsaWduOiJjZW50ZXIifSxlbXB0eVRpdGxlOntmb250U2l6ZToxOCxtYXJnaW46MCxjb2xvcjoiI2VlZSJ9LGVtcHR5SGludDp7Y29sb3I6IiM4ODgiLGZvbnRTaXplOjE0LG1heFdpZHRoOjQ4MH0sY29kZTp7YmFja2dyb3VuZDoiIzIyMiIscGFkZGluZzoiMnB4IDZweCIsYm9yZGVyUmFkaXVzOjQsZm9udFNpemU6MTN9LGRyb3BPdmVybGF5Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGluc2V0OjAsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGdhcDo4LGJvcmRlcjoiMnB4IGRhc2hlZCAjYTViNGZjIixiYWNrZ3JvdW5kOiJyZ2JhKDk5LDEwMiwyNDEsMC4xMikiLGJhY2tkcm9wRmlsdGVyOiJibHVyKDJweCkiLGNvbG9yOiIjYTViNGZjIixwb2ludGVyRXZlbnRzOiJub25lIix6SW5kZXg6MjB9LHJlc2l6ZUhhbmRsZTp7cG9zaXRpb246ImFic29sdXRlIixyaWdodDotMzQsYm90dG9tOjIsd2lkdGg6MjgsaGVpZ2h0OjI4LGJvcmRlclJhZGl1czoxNCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNzIpIixiYWNrZ3JvdW5kOiJyZ2JhKDI4LDI4LDMwLDAuNjIpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTQpIixib3hTaGFkb3c6IjAgOHB4IDI0cHggcmdiYSgwLDAsMCwwLjMyKSIsYmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLFdlYmtpdEJhY2tkcm9wRmlsdGVyOiJibHVyKDE4cHgpIixjdXJzb3I6Im53c2UtcmVzaXplIix0b3VjaEFjdGlvbjoibm9uZSIsb3BhY2l0eTowLjcyLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xOHMgZWFzZSwgYmFja2dyb3VuZCAwLjE4cyBlYXNlLCBib3JkZXItY29sb3IgMC4xOHMgZWFzZSwgYm94LXNoYWRvdyAwLjE4cyBlYXNlIix6SW5kZXg6MjV9LHJlc2l6ZUhhbmRsZUFjdGl2ZTp7b3BhY2l0eToxLGJhY2tncm91bmQ6InJnYmEoNDQsNDQsNDYsMC44MikiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkiLGJveFNoYWRvdzoiMCAxMHB4IDI4cHggcmdiYSgwLDAsMCwwLjQyKSwgMCAwIDAgNHB4IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkifSx0b2FzdFN0YWNrOntwb3NpdGlvbjoiZml4ZWQiLGJvdHRvbToxNixyaWdodDoxNixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo2LG1heFdpZHRoOjMyMCx6SW5kZXg6MzB9LHRvYXN0OntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4LHBhZGRpbmc6IjhweCAxMnB4IixiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6OCxjb2xvcjoiI2VlZSIsZm9udFNpemU6MTIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGJveFNoYWRvdzoiMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuNCkifX0sdDc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiJjYWxjKDEwMCUgKyA2cHgpIixsZWZ0OjAsbWluV2lkdGg6MjYwLG1heEhlaWdodDozNjAsb3ZlcmZsb3dZOiJhdXRvIixiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzo0LGJveFNoYWRvdzoiMCA4cHggMjRweCByZ2JhKDAsMCwwLDAuNSkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixmb250U2l6ZToxMyxjb2xvcjoiI2VlZSIsekluZGV4OjIwfSxVOD17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIscGFkZGluZzoiNnB4IDEwcHgiLGZvbnRTaXplOjExLGNvbG9yOiIjYWFhIn0sTzg9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjYTViNGZjIixmb250U2l6ZToxMSxjdXJzb3I6InBvaW50ZXIiLHBhZGRpbmc6MH0sajU9e3BhZGRpbmc6IjZweCAxMHB4Iixjb2xvcjoiI2Y4NzE3MSIsZm9udFNpemU6MTF9LGg1PXtkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4LHBhZGRpbmc6IjZweCAxMHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xNXMifSxlNz17aGVpZ2h0OjEsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsbWFyZ2luOiI0cHggMCJ9LHo4PXtwYWRkaW5nOjEyLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNCkiLGZvbnRTaXplOjExLHRleHRBbGlnbjoiY2VudGVyIn0sUDg9e3BhZGRpbmc6IjZweCAxMHB4IDJweCIsZm9udFNpemU6MTAsZm9udFdlaWdodDo2MDAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsdGV4dFRyYW5zZm9ybToidXBwZXJjYXNlIixsZXR0ZXJTcGFjaW5nOiIwLjA4ZW0ifSxNOD0zMjAsVzg9NzYwLGkyPTI4MCxDNj0zLFo2PTEzNiwkOD0id2lkdGggNzBtcyBsaW5lYXIiLHY1PSJ3aWR0aCAwLjI0cyBjdWJpYy1iZXppZXIoMC4yMiwgMSwgMC4zNiwgMSkiLEc2PSJwYWRkaW5nLXJpZ2h0IDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSI7ZnVuY3Rpb24gSjYoe2RlZmF1bHRXaWR0aDpDLHZpZXdwb3J0V2lkdGg6Wix2aWV3cG9ydEhlaWdodDpHLGFzcGVjdFJhdGlvOkosb25TdGFydDpxfSl7bGV0W1gsWV09SShudWxsKSxbJCxfXT1JKCExKSxbVixCXT1JKCExKSxMPVIobnVsbCksSD1SKG51bGwpLEQ9UihudWxsKSxQPWs4KEMsWixHLEopLEs9YzIoWD8/QyxDLFosRyxKKTtiKCgpPT57aWYoWD09bnVsbClyZXR1cm47bGV0IGs9YzIoWCxDLFosRyxKKTtpZihrIT09WClZKGspfSxbSixDLFgsRyxaXSksYigoKT0+e2lmKCEkKXJldHVybjtsZXQgaz1kb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcix2PWRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCxyPWRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdDtyZXR1cm4gZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3I9Im53c2UtcmVzaXplIixkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3Q9Im5vbmUiLGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD0ibm9uZSIsKCk9Pntkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj1rLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD12LGRvY3VtZW50LmJvZHkuc3R5bGUud2Via2l0VXNlclNlbGVjdD1yfX0sWyRdKTtsZXQgTj1oKChrKT0+e2xldCB2PWMyKGssQyxaLEcsSik7aWYoSC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEguY3VycmVudCk7SC5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e0guY3VycmVudD1udWxsLFkodil9KX0sW0osQyxHLFpdKSxVPWgoKCk9PntsZXQgaz1MLmN1cnJlbnQ/LnBvaW50ZXJJZDtpZihMLmN1cnJlbnQ9bnVsbCxrIT1udWxsJiZrPj0wKXtsZXQgdj1ELmN1cnJlbnQ7aWYodj8uaGFzUG9pbnRlckNhcHR1cmUoaykpdi5yZWxlYXNlUG9pbnRlckNhcHR1cmUoayl9aWYoSC5jdXJyZW50IT1udWxsKWNhbmNlbEFuaW1hdGlvbkZyYW1lKEguY3VycmVudCksSC5jdXJyZW50PW51bGw7XyghMSl9LFtdKTtiKCgpPT57cmV0dXJuKCk9PlUoKX0sW1VdKSxiKCgpPT57aWYoISQpcmV0dXJuO2xldCBrPSgpPT5VKCksdj0oKT0+e2lmKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT09PSJoaWRkZW4iKVUoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJibHVyIixrKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsaywhMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsdiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsayksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsaywhMCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLGssITApLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLHYpfX0sWyQsVV0pO2xldCBXPWgoKGspPT57bGV0IHY9TC5jdXJyZW50O2lmKCF2fHx2LnBvaW50ZXJJZCE9PWsucG9pbnRlcklkKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksay5zdG9wUHJvcGFnYXRpb24oKSxVKCl9LFtVXSkseT1oKChrKT0+e2lmKGsuYnV0dG9uIT09MClyZXR1cm47ay5wcmV2ZW50RGVmYXVsdCgpLGsuc3RvcFByb3BhZ2F0aW9uKCksay5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGsucG9pbnRlcklkKSxMLmN1cnJlbnQ9e3BvaW50ZXJJZDprLnBvaW50ZXJJZCxzdGFydFg6ay5jbGllbnRYLHN0YXJ0WTprLmNsaWVudFksc3RhcnRXaWR0aDpLfSxxKCksXyghMCl9LFtxLEtdKSxFPWgoKGspPT57bGV0IHY9TC5jdXJyZW50O2lmKCF2fHx2LnBvaW50ZXJJZCE9PWsucG9pbnRlcklkKXJldHVybjtpZihrLnByZXZlbnREZWZhdWx0KCksay5idXR0b25zIT09MSl7VSgpO3JldHVybn1sZXQgcj1rLmNsaWVudFgtdi5zdGFydFgsYT0oay5jbGllbnRZLXYuc3RhcnRZKSpKLG49di5zdGFydFdpZHRoKyhNYXRoLmFicyhyKT49TWF0aC5hYnMoYSk/cjphKTtOKG4pfSxbSixOLFVdKSxmPWgoKGspPT57bGV0IHY9ay5rZXk9PT0iQXJyb3dSaWdodCJ8fGsua2V5PT09IkFycm93RG93biI/MTprLmtleT09PSJBcnJvd0xlZnQifHxrLmtleT09PSJBcnJvd1VwIj8tMTowO2lmKHY9PT0wKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCk7bGV0IHI9ay5zaGlmdEtleT84MDoyNDtZKGMyKEsrdipyLEMsWixHLEopKX0sW0osQyxHLFosS10pO3JldHVybntoYW5kbGVSZWY6RCx3aWR0aDpLLG1heFdpZHRoOlAsaXNSZXNpemluZzokLGhhbmRsZUFjdGl2ZTpWfHwkLHNldEhhbmRsZUhvdmVyZWQ6QixvblBvaW50ZXJEb3duOnksb25Qb2ludGVyTW92ZTpFLG9uUG9pbnRlckVuZDpXLG9uS2V5RG93bjpmfX1mdW5jdGlvbiBjMihDLFosRyxKLHEpe2xldCBYPWs4KFosRyxKLHEpLFk9TWF0aC5taW4oaTIsWCk7cmV0dXJuIE1hdGgubWluKFgsTWF0aC5tYXgoWSxDKSl9ZnVuY3Rpb24gazgoQyxaLEcsSil7bGV0IHE9QypDNixYPVo+MD9NYXRoLm1heChpMixaLTQ4KTpxLFk9Rz4wJiZOdW1iZXIuaXNGaW5pdGUoSikmJko+MD9NYXRoLm1heChpMiwoRy1aNikqSik6cTtyZXR1cm4gTWF0aC5taW4ocSxYLFkpfXZhciBDMT17cGFuZWw6e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjEyLHJpZ2h0OjEyLGJvdHRvbToxMix3aWR0aDpgbWluKCR7Vzh9cHgsIGNhbGMoMTAwdncgLSAzMnB4KSlgLG1pbldpZHRoOjAsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjkyKSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjE0LGNvbG9yOiIjZWVlIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG92ZXJmbG93OiJoaWRkZW4iLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSIsYm94U2hhZG93OiIwIDEycHggNDBweCByZ2JhKDAsMCwwLDAuNTUpIixiYWNrZHJvcEZpbHRlcjoiYmx1cigxOHB4KSIsV2Via2l0QmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsekluZGV4OjM1fSxoZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCA2cHggMTJweCIsZmxleFNocmluazowfSx0aXRsZUdyb3VwOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJiYXNlbGluZSIsZ2FwOjgsbWluV2lkdGg6MH0sdGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIix3aGl0ZVNwYWNlOiJub3dyYXAifSxzdWJ0aXRsZTp7Zm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC4zOCkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxoZWFkZXJBY3Rpb25zOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH0saWNvbkJ1dHRvbjp7d2lkdGg6MjYsaGVpZ2h0OjI2LGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42OCkiLGJvcmRlclJhZGl1czo1LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowfSx0YXJnZXRCYXI6e21pbkhlaWdodDozNixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlckJvdHRvbToiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGZsZXhTaHJpbms6MH0sc2VsZWN0Ont3aWR0aDoiMTAwJSIsbWluV2lkdGg6MCxoZWlnaHQ6MjYsYmFja2dyb3VuZDoiIzFjMWMxZSIsY29sb3I6IiNlZWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo2LGZvbnRTaXplOjEyLHBhZGRpbmc6IjAgOHB4IixvdXRsaW5lOiJub25lIn0scGlja2VyV3JhcDp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDoiMTAwJSIsbWluV2lkdGg6MH0scGlja2VyQnV0dG9uOnt3aWR0aDoiMTAwJSIsbWluV2lkdGg6MCxoZWlnaHQ6MjYsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjgsYmFja2dyb3VuZDoiIzFjMWMxZSIsY29sb3I6IiNlZWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo2LGZvbnRTaXplOjEyLHBhZGRpbmc6IjAgOHB4IixjdXJzb3I6InBvaW50ZXIiLHRleHRBbGlnbjoibGVmdCJ9LHBpY2tlckxhYmVsOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAiLG1pbldpZHRoOjB9LHBpY2tlckxpc3Q6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiJjYWxjKDEwMCUgKyA0cHgpIixsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzo0LGxpc3RTdHlsZToibm9uZSIsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsYm9yZGVyUmFkaXVzOjgsYm94U2hhZG93OiIwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41KSIsbWluV2lkdGg6MjIwLG1heFdpZHRoOjM2MCxtYXhIZWlnaHQ6MzIwLG92ZXJmbG93WToiYXV0byIsekluZGV4OjUwfSxwaWNrZXJJdGVtOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLHBhZGRpbmc6IjNweCA4cHgiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44NSkiLGZvbnRTaXplOjEyLGxpbmVIZWlnaHQ6MS4zNX0scGlja2VySXRlbVNlbGVjdGVkOntiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIn0scGlja2VySXRlbUhvdmVyZWQ6e2JhY2tncm91bmQ6InJnYmEoMTAsMTMyLDI1NSwwLjIyKSJ9LHBpY2tlckl0ZW1EaXNhYmxlZDp7b3BhY2l0eTowLjQsY3Vyc29yOiJub3QtYWxsb3dlZCIsZm9udFN0eWxlOiJpdGFsaWMifSxwaWNrZXJHcm91cDp7bGlzdFN0eWxlOiJub25lIixtYXJnaW46MCxwYWRkaW5nOjB9LHBpY2tlckdyb3VwSGVhZGVyOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4LHBhZGRpbmc6IjRweCA2cHggMnB4Iixmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSJ9LHBpY2tlckdyb3VwSWNvbkltZzp7d2lkdGg6MTYsaGVpZ2h0OjE2LGJvcmRlclJhZGl1czozLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIn0scGlja2VyR3JvdXBOYW1lOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwaWNrZXJHcm91cExpc3Q6e2xpc3RTdHlsZToibm9uZSIsbWFyZ2luOjAscGFkZGluZzowLHBhZGRpbmdMZWZ0OjI2fSxwaWNrZXJJdGVtVGl0bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwaWNrZXJJdGVtVXJsOntkaXNwbGF5OiJibG9jayIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDIpIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxlbXB0eVRhcmdldDp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40OCkiLGZvbnRTaXplOjEyLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGZyYW1lV3JhcDp7ZmxleDoxLG1pbkhlaWdodDowLGJhY2tncm91bmQ6IiNmZmYiLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LGlmcmFtZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixkaXNwbGF5OiJibG9jayIsYmFja2dyb3VuZDoiI2ZmZiJ9LG1lc3NhZ2U6e2hlaWdodDoiMTAwJSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjI0LGJhY2tncm91bmQ6IiMxMTExMTMiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTgpIix0ZXh0QWxpZ246ImNlbnRlciIsZm9udFNpemU6MTN9fSx5NT17cmFpbDp7cG9zaXRpb246ImZpeGVkIix0b3A6MTIscmlnaHQ6MTIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NCxwYWRkaW5nOjQsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6MTAsYmFja2Ryb3BGaWx0ZXI6ImJsdXIoMTJweCkiLFdlYmtpdEJhY2tkcm9wRmlsdGVyOiJibHVyKDEycHgpIix0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMThzIGVhc2UiLHpJbmRleDo0MH0sYnV0dG9uOnt3aWR0aDozMCxoZWlnaHQ6MzAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6Nixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjcpIixjdXJzb3I6InBvaW50ZXIiLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xNXMgZWFzZSwgY29sb3IgMC4xNXMgZWFzZSJ9fSx4PXt0b2dnbGU6e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjE2LHJpZ2h0OjE2LHdpZHRoOjMwLGhlaWdodDozMCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo2LGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNikiLGN1cnNvcjoicG9pbnRlciIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlIix6SW5kZXg6NDB9LHBhbmVsOntwb3NpdGlvbjoiZml4ZWQiLHRvcDoxMixyaWdodDoxMixib3R0b206MTIsd2lkdGg6TTgsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMiwwLjkyKSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjE0LGNvbG9yOiIjZWVlIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLG92ZXJmbG93OiJoaWRkZW4iLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZSIsYm94U2hhZG93OiIwIDEycHggNDBweCByZ2JhKDAsMCwwLDAuNTUpIixiYWNrZHJvcEZpbHRlcjoiYmx1cigxOHB4KSIsV2Via2l0QmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLGZvbnRGYW1pbHk6Ii1hcHBsZS1zeXN0ZW0sIHN5c3RlbS11aSwgc2Fucy1zZXJpZiIsekluZGV4OjM1fSxoZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjZweCAxMHB4IDZweCAxMnB4In0saGVhZGVyVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIn0sY2xvc2VCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLGNvbG9yOiIjYWFhIixjdXJzb3I6InBvaW50ZXIiLHBhZGRpbmc6NCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJvcmRlclJhZGl1czo0fSxib2R5OntwYWRkaW5nOjE0LG92ZXJmbG93WToiYXV0byIsZmxleDoxLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjEyfSxzZWN0aW9uVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wOGVtIixtYXJnaW46IjAgMCAxMHB4In0sc2VjdGlvbjp7YmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6MTJ9LGVtcHR5OntiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBkYXNoZWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzoxNixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250U2l6ZToxMix0ZXh0QWxpZ246ImNlbnRlciJ9LGFwcEhlYWRlcjp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsbWFyZ2luQm90dG9tOjEwfSxhcHBJY29uOnt3aWR0aDo0NCxoZWlnaHQ6NDQsYm9yZGVyUmFkaXVzOjEwLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIn0sYXBwTmFtZTp7Zm9udFNpemU6MTQsZm9udFdlaWdodDo2MDAsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sYXBwQnVuZGxlOntmb250U2l6ZToxMSxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sc3Bpbm5lcjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsZm9udFdlaWdodDo0MDB9LGVycm9yOntiYWNrZ3JvdW5kOiJyZ2JhKDI0OCwxMTMsMTEzLDAuMDgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI0OCwxMTMsMTEzLDAuMikiLGNvbG9yOiIjZmNhNWE1Iixmb250U2l6ZToxMSxwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6NixtYXJnaW5Cb3R0b206MTB9LGRsOnttYXJnaW46MCxkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo2fSxyb3c6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImJhc2VsaW5lIixnYXA6OCxtaW5XaWR0aDowfSxkdDp7bWFyZ2luOjAsZm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsd2lkdGg6ODQsZmxleFNocmluazowfSxkZDp7bWFyZ2luOjAsZm9udFNpemU6MTIsY29sb3I6IiNlZWUiLGZsZXg6MSxtaW5XaWR0aDowLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LHJvd0FjdGlvbldyYXA6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAscmlnaHQ6MCxib3R0b206MCxwYWRkaW5nTGVmdDoyOCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI4LDI4LDMwLDApIDAlLCAjMWMxYzFlIDU1JSkiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UifSxwZXJtc1RvZ2dsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjYsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIscGFkZGluZzowLG1hcmdpbjowLGN1cnNvcjoicG9pbnRlciIsd2lkdGg6IjEwMCUiLHRleHRBbGlnbjoibGVmdCIsbGluZUhlaWdodDoxfSxwZXJtc1Njcm9sbFdyYXA6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbWFyZ2luVG9wOjh9LHBlcm1zU2Nyb2xsOnttYXhIZWlnaHQ6MjYwLG92ZXJmbG93WToiYXV0byIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NCxwYWRkaW5nOiI4cHggMCIsc2Nyb2xsYmFyV2lkdGg6InRoaW4ifSxwZXJtc0ZhZGVUb3A6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHJpZ2h0OjAsaGVpZ2h0OjE0LHBvaW50ZXJFdmVudHM6Im5vbmUiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMxYzFjMWUgMCUsIHJnYmEoMjgsMjgsMzAsMCkgMTAwJSkiLGJvcmRlclRvcExlZnRSYWRpdXM6MTAsYm9yZGVyVG9wUmlnaHRSYWRpdXM6MTB9LHBlcm1zRmFkZUJvdHRvbTp7cG9zaXRpb246ImFic29sdXRlIixib3R0b206MCxsZWZ0OjAscmlnaHQ6MCxoZWlnaHQ6MTQscG9pbnRlckV2ZW50czoibm9uZSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHRvcCwgIzFjMWMxZSAwJSwgcmdiYSgyOCwyOCwzMCwwKSAxMDAlKSJ9LHBlcm1zRm9vdGVyOntkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLHBhZGRpbmdUb3A6OH0scmVzZXRBbGxCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjcpIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggOHB4Iixib3JkZXJSYWRpdXM6NSxjdXJzb3I6InBvaW50ZXIiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wNGVtIn0scGVybXNMaXN0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0LG1hcmdpblRvcDo0fSxwZXJtUm93OntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6OCxwYWRkaW5nOiI0cHggMnB4In0scGVybUxhYmVsOntmb250U2l6ZToxMixjb2xvcjoiI2VlZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIixmbGV4OjEsbWluV2lkdGg6MH0scGVybVNlZzp7ZGlzcGxheToiZmxleCIsZ2FwOjIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA0KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoyfSxwZXJtQnRuOnt3aWR0aDoyNCxoZWlnaHQ6MjIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xMnMsIGNvbG9yIDAuMTJzIn0scm93QWN0aW9uOnt3aWR0aDoyMCxoZWlnaHQ6MjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6NCxjb2xvcjoiI2ZmZiIsY3Vyc29yOiJwb2ludGVyIixwYWRkaW5nOjB9fSxrMT17dGFyZ2V0czp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLG92ZXJmbG93OiJoaWRkZW4iLHBvaW50ZXJFdmVudHM6Im5vbmUiLHpJbmRleDoxMH0sdGFyZ2V0Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGJveFNpemluZzoiYm9yZGVyLWJveCIsbWluV2lkdGg6MSxtaW5IZWlnaHQ6MSxwYWRkaW5nOjAsYm9yZGVyOiIxcHggc29saWQgIzM0ZDM5OSIsYm9yZGVyUmFkaXVzOjMsY3Vyc29yOiJwb2ludGVyIixwb2ludGVyRXZlbnRzOiJhdXRvIn0scGFuZWxIZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDo4fSxvdmVybGF5VG9nZ2xlOntib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6NSxiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43KSIsY3Vyc29yOiJwb2ludGVyIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggN3B4In0sdG9vbGJhckJ1dHRvbkFjdGl2ZTp7YmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkifSx0b29sYmFyQnV0dG9uQWN0aXZlSG92ZXI6e2JhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxsaXN0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0LG1hcmdpblRvcDo4LHBhZGRpbmc6IjhweCAwIixtYXhIZWlnaHQ6MjYwLG92ZXJmbG93WToiYXV0byIsc2Nyb2xsYmFyV2lkdGg6InRoaW4ifSxsaXN0SXRlbTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjgsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDJweCIsbWluV2lkdGg6MH0sbGlzdEl0ZW1BY3RpdmU6e2JhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wNikifSxpdGVtVGV4dDp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6MixmbGV4OjEsbWluV2lkdGg6MH0saXRlbUxhYmVsOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAiLGNvbG9yOiIjZWVlIixmb250U2l6ZToxMixmb250V2VpZ2h0OjUwMH0saXRlbU1ldGE6e292ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixmb250U2l6ZToxMH0saXRlbVNpemU6e2ZsZXhTaHJpbms6MCxiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDQpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6Nixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwLHBhZGRpbmc6IjNweCA2cHgifX07VDMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKFEobjcse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return De}function gi(_){let e=(_?.basePath??"/.sim").replace(/\/+$/,"");return(t,S,i)=>{let s=t.url??"",C=s.indexOf("?"),$=C===-1?s:s.slice(0,C),r=vi(s)??_?.device??null,o=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if($===o||$.startsWith(`${o}/`)){(async()=>{let y=$===o?"inspector.html":$.slice(o.length+1);if(y.split("/").some((n)=>n==="..")){S.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),S.end("Invalid asset path");return}try{let n=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${Ri}/${y}${C===-1?"":s.slice(C)}`),f={"Cache-Control":"public, max-age=604800"},u=n.headers.get("content-type");if(u)f["Content-Type"]=u;S.writeHead(n.status,f),S.end(Buffer.from(await n.arrayBuffer()))}catch(n){S.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),S.end(n instanceof Error?n.message:"Failed to load DevTools frontend")}})();return}if($===e||$===e+"/"){let y=a_(),n=C_(y,r),f=di();if(n){let v=`<script>window.__SIM_PREVIEW__=${JSON.stringify({...n,basePath:e,logsEndpoint:W_(e,"/logs",n.device),appStateEndpoint:W_(e,"/appstate",n.device),axEndpoint:W_(e,"/ax",n.device),devtoolsEndpoint:W_(e,"/devtools",n.device)})}</script>`;f=f.replace("<!--__SIM_PREVIEW_CONFIG__-->",v)}S.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),S.end(f);return}if($===e+"/devtools"){(async()=>{let y=a_();if(!C_(y,r)){S.writeHead(404,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"No serve-sim device"}));return}try{let f=await Re(),u=await f.listTargets(),v=Oi(t.headers?.host,f.port),O=u.map((p)=>({...p,webSocketDebuggerUrl:`ws://${v}/devtools/page/${encodeURIComponent(p.id)}`,devtoolsFrontendUrl:bi(o,v,p.id)}));S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify({port:f.port,targets:O}))}catch(f){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:f instanceof Error?f.message:"Failed to start inspect-webkit"}))}})();return}if($===e+"/devtools/release"&&t.method==="POST"){let y="";t.on("data",(n)=>y+=n),t.on("end",async()=>{try{let n=y?JSON.parse(y):{};(await Re()).releaseHighlight?.(n.targetId),S.writeHead(200,{"Content-Type":"application/json"}),S.end("{}")}catch(n){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:n instanceof Error?n.message:"Failed to release"}))}});return}if($===e+"/devtools/highlight"&&t.method==="POST"){let y="";t.on("data",(n)=>y+=n),t.on("end",async()=>{try{let{targetId:n,on:f}=JSON.parse(y||"{}");if(!n){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"Missing targetId"}));return}let u=await Re();if(!u.highlightTarget){S.writeHead(501,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await u.highlightTarget(n,!!f),S.writeHead(200,{"Content-Type":"application/json"}),S.end("{}")}catch(n){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:n instanceof Error?n.message:"Failed to highlight target"}))}});return}if($===e+"/api"){let y=a_(),n=C_(y,r);S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify(n||null));return}if($===e+"/ax"){let y=a_(),n=C_(y,r);if(!n){S.writeHead(404),S.end("No serve-sim device");return}S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
39
+ `+F)}function a($,R,F,d,g,V){if($.listenerCount("wsClientError")){let m=Error(g);Error.captureStackTrace(m,a),$.emit("wsClientError",m,F,R)}else f(F,d,g,V)}});dC=__(qS(),1),gC=__(Ae(),1),wC=__(E_(),1),hC=__(Qe(),1),HC=__(Ye(),1),NC=__(_t(),1),Cs=__(oe(),1),At=__(XS(),1),Je=Cs.default;Ts={"Network.setUserAgentOverride":"Page.overrideUserAgent","Network.setCacheDisabled":"Network.setResourceCachingDisabled"},fs={"Network.requestWillBeSent":{walltime:"wallTime"}},Es={hasUserGesture:!1,redirectHasExtraInfo:!1},Fs={hasExtraInfo:!1},bs={encodedDataLength:0,shouldReportCorbBlocking:!1},ps={initialPriority:"Medium",referrerPolicy:"origin"},vs={connectionReused:!1,connectionId:0,fromDiskCache:!1,fromServiceWorker:!1,encodedDataLength:0};ms={"media-rule":"mediaRule","media-import-rule":"importRule","media-style-node":"inlineSheet","media-link-node":"linkedSheet"};Us={protocolVersion:"1.3",product:"Safari/inspect-webkit",revision:"605.1.15",userAgent:"Mozilla/5.0 (iPhone; CPU iPhone OS like Mac OS X) AppleWebKit/605.1.15 Safari/inspect-webkit",jsVersion:""};zs=["Animation","Autofill","Audits","ServiceWorker","Profiler","HeapProfiler","Storage","Tethering","Tracing","BackgroundService","FedCm","DeviceAccess","WebAuthn","Cast","Database","ApplicationCache","BackgroundFetch","DeviceOrientation","EventBreakpoints","FileSystem","HeadlessExperimental","IndexedDB","Memory","PerformanceTimeline","Performance","Preload","Schema","Security","SystemInfo","WebAudio"],js={"Inspector.enable":{},"Inspector.disable":{},"Network.setAttachDebugStack":{},"Network.emulateNetworkConditionsByRule":{ruleIds:[]},"Network.overrideNetworkState":{},"Network.clearAcceptedEncodingsOverride":{},"Network.setAcceptedEncodings":{},"Network.enableReportingApi":{},"Overlay.setShowHinge":{},"Overlay.setShowViewportSizeOnResize":{},"Overlay.setShowGridOverlays":{},"Overlay.setShowFlexOverlays":{},"Overlay.setShowScrollSnapOverlays":{},"Overlay.setShowContainerQueryOverlays":{},"Overlay.setShowIsolatedElements":{},"Overlay.setPausedInDebuggerMessage":{},"Overlay.setShowAdHighlights":{},"Overlay.setShowDebugBorders":{},"Overlay.setShowFPSCounter":{},"Overlay.setShowLayoutShiftRegions":{},"Overlay.setShowScrollBottleneckRects":{},"Overlay.setShowHitTestBorders":{},"Overlay.setShowWebVitals":{},"CSS.trackComputedStyleUpdates":{},"CSS.takeComputedStyleUpdates":{nodeIds:[]},"CSS.startRuleUsageTracking":{},"CSS.stopRuleUsageTracking":{ruleUsage:[]},"CSS.takeCoverageDelta":{coverage:[],timestamp:0},"Page.setAdBlockingEnabled":{},"Page.removeScriptToEvaluateOnNewDocument":{},"Page.setBypassCSP":{},"Page.setInterceptFileChooserDialog":{},"Page.setPrerenderingAllowed":{},"Page.setRPHRegistrationMode":{},"Page.setSPCTransactionMode":{},"Emulation.setEmulatedVisionDeficiency":{},"Emulation.setFocusEmulationEnabled":{},"Emulation.setAutoDarkModeOverride":{},"Emulation.setAutomationOverride":{},"Emulation.setLocaleOverride":{},"Emulation.setTimezoneOverride":{},"Emulation.setVisibleSize":{},"Emulation.setIdleOverride":{},"Emulation.clearIdleOverride":{},"Emulation.setGeolocationOverride":{},"Emulation.clearGeolocationOverride":{},"Emulation.setSensorOverrideEnabled":{},"Emulation.setSensorOverrideReadings":{},"Emulation.setHardwareConcurrencyOverride":{},"Emulation.setNavigatorOverrides":{},"Emulation.setPageScaleFactor":{},"Emulation.setScrollbarsHidden":{},"Emulation.setDocumentCookieDisabled":{},"DOMDebugger.setBreakOnCSPViolation":{},"Runtime.addBinding":{},"Runtime.removeBinding":{},"Debugger.setReturnValue":{},"Debugger.setBlackboxExecutionContexts":{},"Debugger.setInstrumentationBreakpoint":{},"DOM.markUndoableState":{},"DOM.undo":{},"DOM.redo":{},"DOM.copyTo":{nodeId:0},"DOM.collectClassNamesFromSubtree":{classNames:[]},"Accessibility.enable":{},"Accessibility.disable":{},"Accessibility.getFullAXTree":{nodes:[]},"Accessibility.getRootAXNode":{node:null},"Accessibility.getPartialAXTree":{nodes:[]},"Accessibility.queryAXTree":{nodes:[]},"Accessibility.getAXNodeAndAncestors":{nodes:[]},"Accessibility.getChildAXNodes":{nodes:[]}};Zs={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}});var ht={};Me(ht,{simMiddleware:()=>Pi,selectServeSimState:()=>r_,parseForegroundAppLogMessage:()=>wt,matchInstalledAppByDisplayName:()=>li});import{readdirSync as ci,readFileSync as Ri,existsSync as Bi,unlinkSync as pt}from"fs";import{execSync as $_,spawn as De,exec as Di,execFile as gt}from"child_process";import{tmpdir as Ti}from"os";import{join as Ee}from"path";import{createServer as fi}from"net";function lt(_){return!vi.test(_)}function wt(_){let e=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/.exec(_);if(!e)return null;return{bundleId:e[1],pid:parseInt(e[2],10)}}function ut(_,e){if(bi.has(e))return Promise.resolve(!0);return new Promise((t)=>{gt("xcrun",["simctl","get_app_container",_,e,"app"],{timeout:2000},(S,i)=>{if(S)return t(!1);let s=i.trim();if(!s)return t(!1);for(let C of pi)if(Bi(Ee(s,C)))return t(!0);t(!1)})})}function Ot(_){return _.trim().replace(/\s+/g," ").toLowerCase()}function li(_,e){let t=Ot(e);if(!t)return null;for(let[S,i]of Object.entries(_))if([i.CFBundleDisplayName,i.CFBundleName,i.CFBundleExecutable].filter((C)=>typeof C==="string").some((C)=>Ot(C)===t))return i.CFBundleIdentifier||S;return null}function ui(){let _=Date.now();if(p_.booted&&_-p_.at<1500)return p_.booted;try{let e=$_("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(e),S=new Set;for(let i of Object.values(t.devices))for(let s of i)if(s.state==="Booted")S.add(s.udid);return p_={at:_,booted:S},S}catch{return null}}function C_(){let _;try{_=ci(vt).filter((S)=>S.startsWith("server-")&&S.endsWith(".json"))}catch{return[]}let e=ui(),t=[];for(let S of _){let i=Ee(vt,S);try{let s=JSON.parse(Ri(i,"utf-8"));try{process.kill(s.pid,0)}catch{try{pt(i)}catch{}continue}if(e&&!e.has(s.device)){try{process.kill(s.pid,"SIGTERM")}catch{}try{pt(i)}catch{}continue}t.push(s)}catch{}}return t}function r_(_,e){if(e)return _.find((t)=>t.device===e)??null;return _[0]??null}function Oi(_){let e=_.indexOf("?");if(e===-1)return null;return new URLSearchParams(_.slice(e+1)).get("device")}function P_(_,e,t){return`${`${_}${e}`}?device=${encodeURIComponent(t)}`}async function di(_){return new Promise((e)=>{let t=fi();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_,"127.0.0.1")})}async function dt(_){let e=`http://127.0.0.1:${_}`;try{let t=await fetch(`${e}/json/version`);if(!t.ok)return null;if((await t.json()).Browser!=="Safari/inspect-webkit")return null;return{port:_,cdpUrl:e,async listTargets(){return(await(await fetch(`${e}/json/list`)).json()).filter((C)=>C.id.startsWith("sim:")).map((C)=>{let r=C.id.split(":")[1],n=C.description?.match(/\(([^)]+)\)/)?.[1];return{id:C.id,title:C.title||C.url||"Untitled",url:/^https?:/i.test(C.url)?C.url:"about:blank",type:C.type||"page",udid:r,bundleId:n}})}}}catch{return null}}async function Te(){if(i_)try{return await(await i_).listTargets(),i_}catch{i_=null}return i_=(async()=>{let{startCdpServer:_}=await Promise.resolve().then(() => (bt(),Ft));for(let e=W_;e<W_+50;e++){if(!await di(e)){let t=await dt(e);if(t)return t;continue}try{let t=await _({host:"127.0.0.1",port:e});return{port:e,cdpUrl:`http://127.0.0.1:${e}`,async listTargets(){return t.getTargets().filter((S)=>S.source?.kind==="simulator").map((S)=>({id:S.targetId,title:S.title||S.appName||S.url||"Untitled",url:/^https?:/i.test(S.url)?S.url:"about:blank",type:S.type||"page",appName:S.appName,bundleId:S.bundleId,udid:S.source?.id,inUseByOtherInspector:!!S.inUseByOtherInspector}))},highlightTarget:t.highlightTarget?.bind(t),releaseHighlight:t.releaseHighlight?.bind(t)}}catch(t){if(t?.code==="EADDRINUSE"){let S=await dt(e);if(S)return S;continue}throw t}}throw Error(`No available inspect-webkit port found in ${W_}-${W_+49}`)})().catch((_)=>{throw i_=null,_}),i_}function gi(_,e,t){let S=new URL(`${_}/inspector.html`,"http://serve-sim.local");return S.searchParams.set("ws",`${e}/devtools/page/${t}`),`${S.pathname}${S.search}`}function wi(_,e){return`127.0.0.1:${e}`}function hi(){if(!fe)fe=Buffer.from("PCFkb2N0eXBlIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xIj4KPHRpdGxlPlNpbXVsYXRvciBQcmV2aWV3PC90aXRsZT4KPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhyZWY9ImRhdGE6aW1hZ2UveC1pY29uO2Jhc2U2NCxBQUFCQUFVQUVCQUFBQUVBSUFBNEJnQUFWZ0FBQUNBZ0FBQUJBQ0FBUEFvQUFJNEdBQUF3TUFBQUFRQWdBS0VQQUFES0VBQUFnSUFBQUFFQUlBQ2NPQUFBYXlBQUFBQUFBQUFCQUNBQS9wb0FBQWRaQUFDSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQUVBQUFBQkFJQmdBQUFCL3ovMkVBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUFRb0FNQUJBQUFBQUVBQUFBUUFBQUFBT2JZeVZNQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUFvSkpSRUZVT0JHbFVzOXJFMEVVL21abWs5MU5paVd4MHRvcVZSRHhvQ0NtSUhnVVdpaWV2UFRrU2NHVENJSUhFUS8xRC9BaWluK0NKdzhxZUZERVMrMUZnZ0VWV3l5MDBDYllObW1iNXNkbXM3c3pmck90cGZjK2RuYmY3SHZ2ZTkvN1pvQWptamhjYndEMWJIZTNVRzA2N2tZdkVBR0RXMTB1T2x1ZWIzUWNoN1dKWS9YRE5RY0FkNVo2NTc1MW5PZk5VSlFTcmQxWUE0WlJUZFNFdnJhWlVvWUNwdXlZK1A3bU5XL0pBcVVBNXN1c2M4bC85R0ZGdUpNNk1QeHBZRmdvNUY1QzZqUFRScVRIMVEwL05UZmZUV05tSm5Fc3l0UGlyV0tyTGt2OVVHT2lZSEJqUkNLeDg2UkZUS0NmSWRqbkRZMjVob0FqWkduWXVYSjhIZGhJQVdvdDRTVmRPQ01zbUM0S1hQVU5hcDBFemI2QXNCeEp3WFVraGpnS3V1U2g0S2kyOExoREN0Q2pTSjFkNE1GRmdTZm5iUVV3VjR2d2FqbUJiMXNUd0ZFSzFSYjlEdU1xVFVsZktVRFE0Nnc5ZHJFZGFGYkFJVTlpY2xTZzZOdHNnNGdxanUwQXl3Mmd6WHpFTm5PZndmWTJ2YTVBMUdlRHlLVEtEeWlEVTVrRWl0MnRpRW9LVEExTHhLSEV5N0pCUWZ1b0hRYXc2b2NjcGRIUkZFeGd2YVh4ZlMyQ2w3RWtMU2hucHlBNnpNTHRhM2dwOS84YWtBSGxRa0lHOVRibmxScTFIWU9mVmY1WDdNcVI4bVJqcmRyV2tJSEE2QW1nekgySzArMTNRektPRjFZTnlqbnlaY2NmYXhxVkZRZDFKc2QyL2tGN2ZCcXJUWWxjRnZGQTBBZ3RZQW93UHYrbThhZjBzUEoxTVg5OS9oYzdFU05Lc2xEc3pnZVMreW9QM2ZCcUtsY2luM1FxTjBkLzExOFRZTy9NNkp5NXUzZ2g5c2RlUUdRdUcyTmNLNXk5QTVRai9UcEVVWTRNZlJWVnhnYzI3NzEvZkhiQk1qZ0FzQnVhT0gzNzQwa0Izek1KYnhITmRZRkJya0krYTNKZTBIczdPL1dYZ2YwRHR4bEh0SDg0aWhRSmZTYXpqUUFBQUFCSlJVNUVya0pnZ29sUVRrY05DaG9LQUFBQURVbElSRklBQUFBZ0FBQUFJQWdHQUFBQWMzcDY5QUFBQUFSblFVMUJBQUN4and2OFlRVUFBQUFnWTBoU1RRQUFlaVlBQUlDRUFBRDZBQUFBZ09nQUFIVXdBQURxWUFBQU9wZ0FBQmR3bkxwUlBBQUFBSGhsV0VsbVRVMEFLZ0FBQUFnQUJBRWFBQVVBQUFBQkFBQUFQZ0ViQUFVQUFBQUJBQUFBUmdFb0FBTUFBQUFCQUFJQUFJZHBBQVFBQUFBQkFBQUFUZ0FBQUFBQUFBQ1FBQUFBQVFBQUFKQUFBQUFCQUFPZ0FRQURBQUFBQVFBQkFBQ2dBZ0FFQUFBQUFRQUFBQ0NnQXdBRUFBQUFBUUFBQUNBQUFBQUFmZ3ZhVWdBQUFBbHdTRmx6QUFBV0pRQUFGaVVCU1ZJazhBQUFBcHhwVkZoMFdFMU1PbU52YlM1aFpHOWlaUzU0YlhBQUFBQUFBRHg0T25odGNHMWxkR0VnZUcxc2JuTTZlRDBpWVdSdlltVTZibk02YldWMFlTOGlJSGc2ZUcxd2RHczlJbGhOVUNCRGIzSmxJRFl1TUM0d0lqNEtJQ0FnUEhKa1pqcFNSRVlnZUcxc2JuTTZjbVJtUFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eE9UazVMekF5THpJeUxYSmtaaTF6ZVc1MFlYZ3Ribk1qSWo0S0lDQWdJQ0FnUEhKa1pqcEVaWE5qY21sd2RHbHZiaUJ5WkdZNllXSnZkWFE5SWlJS0lDQWdJQ0FnSUNBZ0lDQWdlRzFzYm5NNmRHbG1aajBpYUhSMGNEb3ZMMjV6TG1Ga2IySmxMbU52YlM5MGFXWm1MekV1TUM4aUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9tVjRhV1k5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdlpYaHBaaTh4TGpBdklqNEtJQ0FnSUNBZ0lDQWdQSFJwWm1ZNldGSmxjMjlzZFhScGIyNCtNVFEwUEM5MGFXWm1PbGhTWlhOdmJIVjBhVzl1UGdvZ0lDQWdJQ0FnSUNBOGRHbG1aanBaVW1WemIyeDFkR2x2Ymo0eE5EUThMM1JwWm1ZNldWSmxjMjlzZFhScGIyNCtDaUFnSUNBZ0lDQWdJRHgwYVdabU9sSmxjMjlzZFhScGIyNVZibWwwUGpJOEwzUnBabVk2VW1WemIyeDFkR2x2YmxWdWFYUStDaUFnSUNBZ0lDQWdJRHhsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0eU5UWThMMlY0YVdZNlVHbDRaV3haUkdsdFpXNXphVzl1UGdvZ0lDQWdJQ0FnSUNBOFpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtNalUyUEM5bGVHbG1PbEJwZUdWc1dFUnBiV1Z1YzJsdmJqNEtJQ0FnSUNBZ0lDQWdQR1Y0YVdZNlEyOXNiM0pUY0dGalpUNHhQQzlsZUdsbU9rTnZiRzl5VTNCaFkyVStDaUFnSUNBZ0lEd3ZjbVJtT2tSbGMyTnlhWEIwYVc5dVBnb2dJQ0E4TDNKa1pqcFNSRVkrQ2p3dmVEcDRiWEJ0WlhSaFBncnAvc2x4QUFBR2hrbEVRVlJZQ2UxV3pZOFVSUlIvVlYwOTNiUExmbVVYa0JESTdvVUVSU1ZySUFvbTNreU1GeEtQbmpRbXhJTlhUTlNMQ1RHR2kvNEZHaE1UalViQ3djQkJFMDFBQ0pKZEVrRUlBbUVGQVlGZGxtVm1kcVkvcXN2ZnIyYUc2VmtXcm5yd0pkWFZYZjNxdmQvN3JCTDVuLzVsRDZoSDZYZUgzNGtPN056LzdKKzE0TWtrTUJPdFhFVlpManJIaHJ3UVNUQUtMWkppWGs0eFk3MkZueTE4NXdxL2pFdXlMSjgzeXA1YlAvdjE2Wm05ZTdQVmRLMEs0T1ByQzd1T0xvOGN1RnhUTDlSRmF4ZEFxSVZDMXhiaE9yUEdPbDh0RkhQdURnV3BBZmRBcGJKRllZdzdVY21XOXQzWU5YNThKWWlIQU95ZnU3WHJjR1BpK3pNMVBXWmJWclJ5WW93U2E1MTBGVk1JTndhQjhrb0wvQ3RURzRDU1BPZTZFaFVGWXFSWXJOcDdyMTdmUFg2aXpBc245dWo0OFcrcXgycWpuL3kycE1lS0p2eE5qWEFwaDFzeENueHpjTDM3WHA1Ny9FNG9LeTMwV0t0WTgrbms1ei9GUFkwQ1lDVTZNanc5UFZjek8yemRDb3p6NURFQVIwQXNaUmZncjBlUGRkZU5UVWVXeGw0UERLSGh1eWZFMElabVI3cDJhaHJmRDBMUkIrQjJNdkpVM1dxbEVUenVnM0V5Q0k0M3BnSlpXMEdzb2F4TWREVnBCUzRQL2o1eTVvdUx1ZHhwQWJ6blF3aE5xS3dNYnNPVzFRRWtFa3dnNUZLQlpPNWh0bThjVURLOVJvbEdtaGY4U2VMa2hmS0JqODdFWDN6bnA0NlVURldWTERTZGhCMDNjREk2bVBCOG5VZWZCNUxNUlRrUUYwazc0UnJJNGlZc24yOWlEUW1KaFBiV2hqQ0pTbFRIQlc2RkN6UTBtVEFRQ3psRkM2T3JCVEd6cVlzZUNjQW15RHRhbWlvWlFORGYzNmJsdVhFbG13ZGhwNFZLcCtWR3M1Q2pONEVNTmFpN0FPaUZMZ2lzYWEwbFJQd3RLeC9ERllTTEdhVXAyWU9zOEd0ZGJQNGp4eVp1eU9DRkZ6Y3AyYmVWTzdyVUxwZ3RJNEdjdXRHU0t6V1J5TFQvdHozUUNRL1kwVGtrcXNCeXlGSWNUQ2FRZ2piZnlkcWYvdGtQQU5ZckQ4SUp3dTZKWWt2R2VkZmZiMXE1ZGs5SlhFRWY4TVo3cnZZR2NMQUpEY1RPTnlqS1V4MEJCQ09VWDZLSEFEZ3dPVEFWSFVZbVlqZkdqQzB6T29TYnA0WUQyWXhSRGZrTkpSZ1d2QWxLcFo0cHVZY21WRUY1SnVqTkJvM0kyME9aandVQUFheDM0eEJIV2daKzlucGZqNUJBaDdQOXZyWWxGcVZEcVJpRUJkYVJyMHhNVHFiTUs1TmF2anlYeTZHTERsN1JYbVpBZVNYcTgwREtFTUFEUGs2bzR4U1NVeUNtQjJrNXJTUTFtNW5VWUtHQjBCNkJpVWpBUkFBQnZEV0VaSHo3NlJCblFpYUhMcUFER0NQbWNRQmFLTGNjSUh6NUFFZ0NFQzBvWWd4cExFUEFwcmVFSEZoTTRQcE9FaEtFMTkxQlF3RGtSZW5BWTRIc1hxL2x5TytaV0NSMzNER2l3OXJmaXJNVkh1RHgyc3djV2k3aUNkZnpZS0psTmRUMjNXV3NoVlJib2c0S2YwUUJSQUcwRG51Y0NtVVFNVjJHVVRINlNwbjZRd0NFTklWaEFIaHBZVjVHSENqUUFvQkRnMWRJZ29WNklUZFJobkVGYnVsYTVMSDA1d09UVXBFRmZpOGdCMmtqbGNjQmFBRUFlbzNQVkFMZ1JhTU9hMkdMWklCcWVRT0JSYmRyVHY1YUxDU09BQWdhWXJpSDNiR1pXa2t6NnpGMW9SakVqaTI4VmtkcGpnQkEyWHk4OTNrQTVWY3d5d01vWi9Ob0FuVUQ3WlE1a0VCQmhud2d3SVdHa3IrWGxBd1BCakkrRk1yY2dwVmJPSDIyYlF4eFlBV3lXSWNndUI5UmtBMWpSazVmemFTQUM1bUFsUlZIWng4QVpWM0taQXRRaGdWQXBMaGJKYWhwRnFCR2ZjTTRDYkREd0pjREZXUTAwSjY4bE1rZmQranFRSzdNRjdKOW84akVtb3Evd0xCSXpsN0w1ZHgxSllNUitCR21XTEhaOTZnUFFOWklGM0ljRlJxSk4zT3BrRk9iUkVaeGZTZ0FpRVJ3cDY4bTh0MnZLZTk5MGtTWHltQnhCZVdtd0pQZzVEdDJvWkNoS0lkQ1ZFc2psM3JLRUJsVUZnV3d4TzI4RjlaNTlBR1F4dng1SmVza3dPRnhGeTcrOEdDS294U1hFNWhpa1ZIc2lHZ0JLSzBCOUFERVBkU0MyNXEzbG9IbkdSbXBRTmhQVVBwWUQzQ280UWRjWDBCbWpNUWFjcmZPbHdIQXBoNDF6aHljTVhsckZvZXBCMkVrUkNoaW5HWVJSZ3doVmFtYUt0eklob0phNzdaV3psRFlIVnpuL3dEdHNIMjJJSFRZc3pacXpZN09INXp0YVdSd1M3UTg5M002dm5YUFpSMnQyNFBhalhnRkFuNWYrN1FDeWV5SDd6cDQ1M0hNTlY2L3V2ODRrOWlNZUo0NHRuVVR5dWJSN1A1a2NPYXR6ejU0L1VLYm8vMmsvSWRvNnMxZlhpNUduL2tJaFRhTkM3NEtFU2hleTltU3k4UlRqd0o4dldObTF2T2J0YzhtU1dDeHp0MjY0V1RtQ1RuNzNsZnZQdjlEZVQvZlZ3WEFINk9UMjBlSFhqcXdVOFVidG9hVjZnVEtDeFZFMFQzU0FNYkVSQ3BJekZNUjMreE5KblFGY2ljMXJqay9ZRytmVjhmMm5mejJ4NW1sM3M3LzMvNURIdmdIYWtRU1dLMGpJVXdBQUFBQVNVVk9SSzVDWUlLSlVFNUhEUW9hQ2dBQUFBMUpTRVJTQUFBQU1BQUFBREFJQmdBQUFGY0MrWWNBQUFBRVowRk5RUUFBc1k4TC9HRUZBQUFBSUdOSVVrMEFBSG9tQUFDQWhBQUErZ0FBQUlEb0FBQjFNQUFBNm1BQUFEcVlBQUFYY0p5NlVUd0FBQUI0WlZoSlprMU5BQ29BQUFBSUFBUUJHZ0FGQUFBQUFRQUFBRDRCR3dBRkFBQUFBUUFBQUVZQktBQURBQUFBQVFBQ0FBQ0hhUUFFQUFBQUFRQUFBRTRBQUFBQUFBQUFrQUFBQUFFQUFBQ1FBQUFBQVFBRG9BRUFBd0FBQUFFQUFRQUFvQUlBQkFBQUFBRUFBQUF3b0FNQUJBQUFBQUVBQUFBd0FBQUFBQW02MUswQUFBQUpjRWhaY3dBQUZpVUFBQllsQVVsU0pQQUFBQUtjYVZSWWRGaE5URHBqYjIwdVlXUnZZbVV1ZUcxd0FBQUFBQUE4ZURwNGJYQnRaWFJoSUhodGJHNXpPbmc5SW1Ga2IySmxPbTV6T20xbGRHRXZJaUI0T25odGNIUnJQU0pZVFZBZ1EyOXlaU0EyTGpBdU1DSStDaUFnSUR4eVpHWTZVa1JHSUhodGJHNXpPbkprWmowaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1UazVPUzh3TWk4eU1pMXlaR1l0YzNsdWRHRjRMVzV6SXlJK0NpQWdJQ0FnSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUNpQWdJQ0FnSUNBZ0lDQWdJSGh0Ykc1ek9uUnBabVk5SW1oMGRIQTZMeTl1Y3k1aFpHOWlaUzVqYjIwdmRHbG1aaTh4TGpBdklnb2dJQ0FnSUNBZ0lDQWdJQ0I0Yld4dWN6cGxlR2xtUFNKb2RIUndPaTh2Ym5NdVlXUnZZbVV1WTI5dEwyVjRhV1l2TVM0d0x5SStDaUFnSUNBZ0lDQWdJRHgwYVdabU9saFNaWE52YkhWMGFXOXVQakUwTkR3dmRHbG1aanBZVW1WemIyeDFkR2x2Ymo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V1ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9sbFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFNaWE52YkhWMGFXOXVWVzVwZEQ0eVBDOTBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQakkxTmp3dlpYaHBaanBRYVhobGJGaEVhVzFsYm5OcGIyNCtDaUFnSUNBZ0lDQWdJRHhsZUdsbU9rTnZiRzl5VTNCaFkyVStNVHd2WlhocFpqcERiMnh2Y2xOd1lXTmxQZ29nSUNBZ0lDQThMM0prWmpwRVpYTmpjbWx3ZEdsdmJqNEtJQ0FnUEM5eVpHWTZVa1JHUGdvOEwzZzZlRzF3YldWMFlUNEs2ZjdKY1FBQUMrdEpSRUZVYUFYdFdWMklIV2NaZnIvNVBidG5mMDIyS1UzU2xqYjlTUk1DcFdCU1c5QkFiU0V0MUp2Y0ZoUzhLSUpDUVJTdDRJVUI5Y0tmNG9XVW9ONUpJc1ZDSU1YRzJpYUlwaWxwU2tvYTA2aHBaZFBkVFRiWjdPNDVlMmJtekkvUDg4NlozZGt6czBrS3hSdnpuWjJaYjc2ZjkzdWY5L2Y3WmtWdWxWc1MrUCtXZ1BtMDhETVJJd2YzdWxPUFArY3NMSXpiMTJ6SExNNHZtcmtTSWRhWDMxRXAzb3MyZmNmTkdSck9yblhqYk1pYVMrVFFvZTdKbDEvdWxzamNWUFdtQUV4UC82bDV3SC8waVU5Q2IvZHNhTGEyWXVzMnNhMkJvQ3RPa29vRlVCTGp5bEJKV2NjelJzWFllUjNqSkVFYnIyN3Z3anl0NHpYMVBZbURJTzJJbFY2eVRIYld5YUkzbzdOLy8vUE1jMCsxYjRUaWhnQitkZW5xbmxQUjZJL2VYN0Flbm81RVdpR1lTa1JjVHlRTXJrL2VjZkwrbU9oUTFsck1iNEFXYUJzckIyMWpvR1BTVTE1My9zWEpYWjg3bk0rdXY2OUZVMGYvZE9yYTgyKzJSMzV4L0lyeGdrNHNvQzhHTXpqSjk0MkVJZVIzbmVJNE9mbVlLcmxPcWFObGZFZGNxS0tSdEw5MWNlZndyOWVhVHA1cXk4OC9tbnI2TDYyUlh4NmRFcThMNXNtTDFXTytkc0puM0ppRnNVUWQ4UUtyK2RLbW81ZjJyRVcrRnNEQkl3ZEhUeWZyZm54ODFyaUc5Z0lCWnJEWlQzT2xuM0o4TFcyc0hYV05HN2xqUDlueTB1R1JPaEMxQVA2MStRdFBubGx5dHdldFdBd1lVYy9zZnhMWFozalZya0VoTE1VU0czZDc1NzRkVDlVQjZMblo2cTdMMXZEdTZTVVJHd1JNamZreXdsaVk2VU0xakR5MUJlYm05UG9zVldIdEtQVXBOelhTUVhpaTh4bzZXVjlKS0NodmVEZWEvOURYSlJVQWU4SDN0Y2g5c0EwQUt2MitHVEU0M2psaHlkTjMyc0pmdWhZQXpDdDRXUk5rYWN6eHkwWmUrMDlNcUJVUUdTSlVJdDRENkVKZ1JyVlVLZ0MyN2QwMmNMWnJKbUxFYnF1UE94Skh4Sk05bXl4NWdER2VraWtSNjY4V3NyelJHQWFINWpwTFRrNkpUSGN5Y2NobXVUQzlHVE94WWNlT3hzenAwNnR5UXdXQWJOdmxHY2RxZVBRT1o3V0xLQUJ0TXJJRXFTQ0pxZ25oWGw1TzY0YkJ0b1RnZW1NY0lHQ1NhMkk5RHh5NXRLVnlBU0RmTmdPeS9URlBiZ1RBODI2emc0NDRJVTJJNmJKVXVuaE5RQ3pvV3RMS2pBSkllbU80SkNXNVV2QlN2Q3UrS2tpT05aYWxERE9sUkFHaUR0Yk43TldDRTl1bXp6bjIwSVorM1ZSOUlISjlrekJuTVh2Q3VZclNoVGx0SEJDWjhETVpSYk9IZHd1eGo3OE1SdDdHK0NXWWxLdkpndk95WlZ0bWYxNktKOTlVUndDUUFVQW1BZDlwM1dyaEsrdm04ekNhM1pibTBxSkpueFVUaXFMSU1DYlRnZFdKc1NhWi8rNTJTNzV4dndVMW0xSkM2MDNIbUVXRXBsY3ZoUExoUWlZK2paZ3I5a0tZOHI4TW9yZSs5b0VXQUhCNFFKNFQzR0JMeW40WmcvWXQ2L1A2QU9naEthV2dHZ0E5TUg5WFUrU0ZyYlkwS3dyczBjSUM0M0NheHpZNGNtSnFTUm8rUkFVcktFSWlOZERQUDJjU0lNYzUwRUFNdTFlaDZiNkptaW9oS0N1dXQyVHhxR2lBSFJtSVVKMGt5SXc2aWdXOEVyMWljdi9UaC9rc0JyRUVxWXQ5RE5IbUs2c0RvMXJtZytRSWtDYWtDblBSZ0xWNHFTbWhXaTRNeWVYNVJWOHRBQ1lPRFF1UVBqV3RhYjQzZzJ1VXBaa3pna1hSemh3eDMwbkZCV29MRXFVeGNHeXVnZFhMa3lFTE54dmo2QU1OZEd2WVZoL2dZcVh4Sk5MbjF4ekJVZ0hRaGczQmlaZWx3ZTBDSFVzWlp4VzBGSURlY2luU2J5bHZadWlyN1V6R0lOVjFycEVSN0ZnYjZHQlk3RzFNbFMwR3JnaUVPcURiUmdadVJTbk9CcGJ1Ym5WdFNxT3ZHUEswS2dQa0F5b0EyTXdFcGRHQVhHczlVd0Nrd2NWWG9nb0FLQkJJRWhJYWdlMC8vOGlRM0x1dUllTURDSTlvQSs5YXlqeFJ0cndvRFBBdWkxRW1NemhickljZi9mRmNMUFB3YUI4NWdWclNRcUVWOVY1VDhhZ0FJRWhLazR2RFFuVWxGNTRHYTFJSmE5aFhhbVFoai8xcVpxZ1BRZW9QalhKdUpsMHd4ZE1YaTVwUVhsVlR5Mjg1ZlI1aVJvQnlmRmprL29jOWVmSWVSMTQ2RWN2SkdaaVZabE5NeEJnUFROV2RueW9BcUNhZW9Bb256aldRUzR2Q0xqUkFnYWhRUUJ4L0t0RVVuWE90U1B5R0JZMVFER3d2VU9DbGtDS2JVS2VBMUpFaGFndDJTSi9aQkthL3M4dVRIeDRMNWV4c0lnMFhkUERIYURXRWFUTzR5cVVDZ0JxSUFEVU9RUnpxamFIbkJLSWs0MVE1UXl5QmNMazhaeG5WRG5taWxoYVpUV0Z3bWt6Sk1EdldLajBRWko1QTFPbEJtWG5rMlh0c09UTVp3RmNBem5iUVdsOXFBWlExb0NHdHh6eWpVMG9VWkI1M01rbVFCTUxtR0FoYUFSeVNBQXF2TGRaVklHVTB5bjB1Q0FMUUdvVkFoa1UyRDl0eUczYU9sMEdQOUhFRUZ3LzVxTDlVQU5DRUdBa014WWxMa3dzMWdhdXJBRWdpQjdDODN5Y0FiRHM0cG8xTlhnd2ZzT244MXkwRVE4bm4yaVJOMWJBQ1FEdWNlQnhSYkhvUk9RaGhsb3pTaFBwTEJVQUxJN2lWTGlTdlR6QkRFNG9BakptWlRtdmpscHNTR2NBRk1VVVl0d2lKUmVpd25WU2xtaSs0N0FsOTY5Tm9PSnV5eWdHd2hTYmxJekh3UUpYeGd3RG9Ncy9kRkFENmdNWmlTaEFFaW5CSzZlS2NyU2FVSWJQWldJVCt0YnhOQUIvc24yc2prV0d3bzJFUWkwUEVPWXVnMVN1cm8xSU9qc0tnMGptWSs2TWhQRHNRaGtteENOYUdFbXBMUlFNYWhYaUFLQUdnR1hFckhkS1pxV2Y4V1doTUVQNHkyRG9YWm1URkxrS3VJSkY1a0pwRERaQjVjcC9mOUVGR1dUSms2Nkt1N3lTS1loQlhzWHVXRENCbUZ5QU1HQSt0Z09iYXJGRkJCVURIOGJJTU1aeE1FM24reEdZTFJDaGhQWjlpWlRxeFJpaHd6NlNUd2FRSVlCNzdlWmNMZ2pKTkFiYUZmWkVsNjRZY0RZVUVlM1V4aGpCQVFCSGtwb2czQlVxOFk4T1dmRHdiSXlTTERBNWlKZENqckhSTTM2MEN3QVFoTE1Ud3B3QUtFQVFRUUFPTVFqUUJMa1F6b21uUkx5QlBaV294dE1UQlhBZVowRUk0V1Qvc3lOaWdrYitkRCtRQ21OcXl3Wk5kOS9weXRXWExwWGtnNWdJS0JCeUN4UUY4MEJxRWJiNzZiZ3NIUW9DR2FnMHVLRFJ6YXI2a1ZRQjBybDVNUnh6a01tb0FKd2h1ZVQzRVpmVUJTRTIzMmoycnBvQUpyQXRRdEt3WWpGUHBTZVlpSzd0eSs1Z0RqY1J5NEoydXpDNVp5S3dEOHU1RmtjbHJzWHp4UGx2dVd1L0p6SHdxN1pBT2oxMHZwRDB4Yk9USW1Vam1PcDZNREZCcjRBRW0xWEFsSG5FdVliWFZwUUlnbkh3N0NscHBFSElvUWcrbE8zT0Y1dUZBUXBRNHFCWDJtZzlCRzA1VjhJVzVWaXJETGlUWWRLU0RrSFQwZzY1OE9FTTdSRlJCT3o3d2FEaThkQzJWQThkRHVYZEM1SUhiSFprWXNtR2FxVnhaN01vYjcwY3kyN1prY01DVmJrQk5BeHdFbUlacHNIRHFPSUwwNmxJQk1IdnVYRENjSnJQd0lmMXd4Uno0eVpWVTlyOFZ5ak03T0J5eW9zZFNaTFJLNk4zR3k4ZFhZdm5aNFFVNVBZazlESTZlQ2NZMGZGY0djYVVBQ0RsQ2ZaeUVoQVNSOHR6N2J3ajAvRlFNczhIT05JZ29MM0dodVNHWUVXTVh6WmhMTUNjMjdHVDI4bHRuS3R1aENnQ003MXBSNTd6bE5ML0U1RVF1dVpsNzVVUWlyNTFxaTJmbFoyQVAzOFJEZkZMT1J6RCtjNHZzeXVpUXE3YlBEcGR4bGdVQXRHZzA2bFhSNVBIckdIelVBNGNaTm9MOFpSakRQS1A1aCtOUjU1YThhY0lQRDBHSCtleVZleDBBU1Jlbmo5bWo2Nyt1SVJOalNiaUJzQkxESnlMZFltS25DU21HRVdOUlhoeUVDUjlNTU9vUUZCY0dWcFVnL1RRdmFDd1ZqdU5GUjdWd0htQWg4eXNGd1FGengzMUVvMmo2MkVyN1NtMkZnNVUyYWIrei80Z2RkLzVoR2VRLzlZV2NHYmdVdEdIamNpQTlXeVZJS2ZKeUFJaE1rT2xpenMwK2kyeGZOOTUzWE5uWURNN092Zi9iSXlVV2w2czlIUysvYTZWOThlMzIyTlpuWnAzbUhWOUpFa1J6bWdBbGcwdlZpeWNsbmlCaEZlOHF1YjR4UERLeW5hZTY4cmh5blRUWG9wVmx0ank0TVl2dlNOLzc1dS8zZmZYRWFpN3p0MW9Oc091ai9ZKytZaGJPdnRqd3M5aEFDdityd2x4UU9QTzJPN1A0YnYvYzkzL3p3dWRmV1d0OU5kZTFPdEh1M2ZPMW8zdk51a2UrRjV2bVE0ejFtZ2Z3aEE5TGdIODM5YXk4bGtUbFB6U1lWeTU4cFgveFgwd1JBaVMzRUEzWSs5aWd5TWFSOWdkandYdjdmdmZ0eC9sRm1ubTd0dHdJQUNlWjhXMVBiQjdiK1lNdm0rRzdIeGQ3YUV0bTNQVytiemZDeU5qSXl0QmlQUmxFUk4zLzBHUVlrUGo1aEV3eUxQSXNrWC9VTW1uRHk1SzBtd1MrMjUxdG1QWS8zZkRDWHlmZjJQZjZzZGRmbjhUNmZiQlg0NmhmZWZXWThodHRhYkE1TVRIZ3JyL1B6NXh4QkhRWDUvcGVnQytQUkIzQzFKcytXVVdGWDdmWndUWjhGODBzcTV2RlMzTkpOSDgrUEhQbWNnZk4yRTJ0TFhIMDNTcTNKSEJMQWlVSi9CY1lHc1pyMjk1WnJRQUFBQUJKUlU1RXJrSmdnb2xRVGtjTkNob0tBQUFBRFVsSVJGSUFBQUNBQUFBQWdBZ0dBQUFBd3o1aHl3QUFBQVJuUVUxQkFBQ3hqd3Y4WVFVQUFBQWdZMGhTVFFBQWVpWUFBSUNFQUFENkFBQUFnT2dBQUhVd0FBRHFZQUFBT3BnQUFCZHduTHBSUEFBQUFIaGxXRWxtVFUwQUtnQUFBQWdBQkFFYUFBVUFBQUFCQUFBQVBnRWJBQVVBQUFBQkFBQUFSZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVRnQUFBQUFBQUFDUUFBQUFBUUFBQUpBQUFBQUJBQU9nQVFBREFBQUFBUUFCQUFDZ0FnQUVBQUFBQVFBQUFJQ2dBd0FFQUFBQUFRQUFBSUFBQUFBQW1nTzgxZ0FBQUFsd1NGbHpBQUFXSlFBQUZpVUJTVklrOEFBQUFweHBWRmgwV0UxTU9tTnZiUzVoWkc5aVpTNTRiWEFBQUFBQUFEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlsaE5VQ0JEYjNKbElEWXVNQzR3SWo0S0lDQWdQSEprWmpwU1JFWWdlRzFzYm5NNmNtUm1QU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh4T1RrNUx6QXlMekl5TFhKa1ppMXplVzUwWVhndGJuTWpJajRLSUNBZ0lDQWdQSEprWmpwRVpYTmpjbWx3ZEdsdmJpQnlaR1k2WVdKdmRYUTlJaUlLSUNBZ0lDQWdJQ0FnSUNBZ2VHMXNibk02ZEdsbVpqMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzkwYVdabUx6RXVNQzhpQ2lBZ0lDQWdJQ0FnSUNBZ0lIaHRiRzV6T21WNGFXWTlJbWgwZEhBNkx5OXVjeTVoWkc5aVpTNWpiMjB2WlhocFppOHhMakF2SWo0S0lDQWdJQ0FnSUNBZ1BIUnBabVk2V0ZKbGMyOXNkWFJwYjI0K01UUTBQQzkwYVdabU9saFNaWE52YkhWMGFXOXVQZ29nSUNBZ0lDQWdJQ0E4ZEdsbVpqcFpVbVZ6YjJ4MWRHbHZiajR4TkRROEwzUnBabVk2V1ZKbGMyOXNkWFJwYjI0K0NpQWdJQ0FnSUNBZ0lEeDBhV1ptT2xKbGMyOXNkWFJwYjI1VmJtbDBQakk4TDNScFptWTZVbVZ6YjJ4MWRHbHZibFZ1YVhRK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXVVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFpSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZoRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV0VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnSUNBZ1BHVjRhV1k2UTI5c2IzSlRjR0ZqWlQ0eFBDOWxlR2xtT2tOdmJHOXlVM0JoWTJVK0NpQWdJQ0FnSUR3dmNtUm1Pa1JsYzJOeWFYQjBhVzl1UGdvZ0lDQThMM0prWmpwU1JFWStDand2ZURwNGJYQnRaWFJoUGdycC9zbHhBQUEwNWtsRVFWUjRBZTJkYVpBa3gzWGZzKytlYzYvWjJRT0xhNEVsUUFJbUtkQ0VMRktrUk5BMmd3ckxsTU1mek1PbUltelJKaDBNaDBnNS9FRmhpYklWVmppc2d3aUhlSVJOU3FBc0tpZ0xFbmpia0hpSUpnaVFPQWlBd3BKWVhBdnNpY1VlTTdPN2MvWDA0Zi92WldaMWRVLzNUTmRzTHdTU2t6TlZlYjE4NytWN0wxOW1WV1ZWTzdjWk5pV3dLWUZOQ1d4S1lGTUNteExZbE1DbUJEWWxzQ21CVFFsc1NtQlRBcHNTMkpUQXBnUTJKYkFwZ1I5OUNlUmVZbDE4cWZGenVjVFR1bHlJcytMOTJ4SjRwQnZqTk44STV5VWpvRFJqUTBqVDMzNTlCdjJMM3U5ZXpBeWhuNnRRUkRveDdsWnk0YWYydWZMUC9PcEhxN3R1dnJsYTNUbFJHUzFQbGk4MG02VjhvVnFvNXh1RlZqMlhiK1J5dVh6ZDVlcEY1eHIxdXVGYWdWVGQwd3VSWmF4Y3FYUmNqNWxRWGlyNStvV0ZCRVViWHJBUlgyeEd2S0xDWHVYMVpyRkZmYTdsV3ZWV3E1VnJ0SnFOU3FGUnFDODF4c2J5SzNQbnp0ZGFaeTRzdHc0K3RuVGt2LzdiSllIV2REUjBwRU0rWktJaHhEZ05NOVIwVk1oUWthYVFSZngwTEhhMi9JbnZmbmRQYzhldUEvbXg4UnR6b3lQWExkZGIxOVNhK1YzMWh0dldMT1NxdVVLdVhDeTYwbnpORlpvdWwyKzJYTDZKYkZ2K1VOcUdpc283WXFTVmxJVTBlUWdUMnhIU0RlV3JJMUtvS2hlbERtQW9pL0F4SGZNV2kzQWRtSWdqM1VibDFrWXNLV2tIWUxsOHE3bGx3alZtNTl4S3M5R3FpY0NTbUo1eHVlYXBWajczYkc1eDhlbld3c1hIQytkT1BYbjRuOTV5UW0yaXZSVm9yMFBvTGwrSUNobzJoWWdYeGRNSjl6K2ZlT0xHMHM3ZFA3ZGNxdno5UlZlOCtXSTl2MmNoN3dybk5ad3VhaXdzcU51TE9wYlJoRnFWcTg1SmFDYlVLTTBZZ3crcGtDZFkyaWU5dEZRUXFoSzRKQi9xWUdwc1RBckZBQlo5WTJEc0NEQ1IzcXJ5QUlkUlVFZEl3L29TblNXRmd2b3lPZW5jM0FVUGswTWlPdktvbHhqZ2htdmtjODJUdVdiOU1iZXkvSlhDMmJOZmV2WXQxeDVTRGVndnF5RkVSY0hHc0FJNDZaZko3Uk5QUHZucXd0NTk3NXR0bGYvSjJWWis2dmk4Yzg5ZmRPNnMzTzVjcmVVV05LUnFVb0xjcGgraDBreEJybmwwTE8vbVpodUpnSWZGWElKSDNJMVA1TDBCTE1qUEJFa01XeUI1U1dKeVM4R2RuMnU2cGcwRnp3SDBOS01aM1p5c3BLQnByVkRSb1RqZmJKN0pOMWYrb243cTZNZFAvSU1ERDZ1RjJZbGlrMm5TaHlFa2h0MWY4TUZzNDdmdnZudDYrcWRlLzRHWi9NaDdqOVh6Vzc5L3hybm41bHJ1N0ZMTExjcFhOcVJ3UmswTVVRR1VsVXM1TnpidURTRFdEejN1WXdERHB0TTJnRWFIQWF5bWd6SGs1Qmx5cmxET3ViSzhVNkhSbk0zWGx6NjIvRGYzM0g3cTNXOTVRVzJHN2cyR2FRRGdnc0g2SGM4OTkvcjY3ajIvZDdSZXV2WGg1NTE3L0Z6TG5WNXF1bHJ3bVdiOXF5VmdKUmhBNmNmU0FOSUNrUkhJY29yVm5LdU00eEZXN3MrZE92bkJJN2RkL1MxQkRkVUlvbXRKVTk5SU9pcS8rWWZQUC8vTytlbDluLzN1aGRLdFgzckt1WHRQTnR6eGhZWldRRnJKQ1hOZWtNTzB1bzB3KzlKdkl3L1piTGpseFlaYm1OSGxRck4wYTNQWHZzL3V1K2Y1ZDRwM0poS01ZQ2hpSElZQndJaG1MdGU2NDlUcFg1cWJuUDdrZldmeVUzOTF1T1VPemRiZGt0dzlSSWJDcmZEOFdBVzV3N3F1TzVjMGRkWnErU20zYmZxVCsrNDkvUjdKWUdoR2NLa0dnRjZ4eHNZbmp4NTkrK3pranR2dk81MnJmdk40MDUzUXFHZUszMVM4aEhDSm9kbVFON2pRZE10THVhcmJ1dVAyZlY4LytnNmg1SHJwa2ozQnBSZ0F1cVY5ODZNSEQ3MSthV3J2N1ErZXpZMTgrMlRUbmRGOHZ6bnFKWmtoaG1aTGE2aDVIVXU1RVRlOTkvWXJ2M2pvcDRYK2tqM0JSZzBBNVpzQi9QS0hQN3lyY1BVMXR4K2N6MC9kZjdMbHppeEwrWnZEZm9pcWI2UENDSmJuVzFwUGFUcllkODN0TzMvakk5T2hkc01TMzZnQlFCZjM0Mjc2NTcvNGdaTzU4aTMzSDJ1NTUrWDI0OGlQRnZKU2plR2Q4Rkxscng5ZnVzSHNhbG9UTkN2bFd5ci84QjBmOUwzWStGVEE0aTFyZ0RmMDNQcXRyMzN6TmZQVkxlL2hVdThaelZFMU9hUkxIZjFjQnVaMUVIUGI5WElGOEhOd1pRb2RPblU1UWlGRkExckRDSTE2MHhVdUZGeDFiTXQ3ZG4vNi85MzUvTHZlK0pEdzBvWE1GRFppQVBTQjBaK2ZldVVyMy91RWJ2SThmcmJsbGxkYXJpZ1c5RERra2tJMGdKeU1DZUZkcnRCTjUzSVpBTWJNZ3d6NmNxbXlhY3RDMDREV1dhV1IvTmJTZ1ZlL1YrWHYwOEY2QUlsbGt0cEdwZ0N6dE4rNDY2NGI1NHZqLy9nSHVqOTFTb3VUOUlqQzBpLzFpS1B6VXZHczFYN1lQUGVpZGJsbzFPVzJWblJidlZVY2U5c1YvLzBMTndiRlo3YmpyQjRBQW96KzF2UXRQL25XazduODl1ZG14WWl1OVhVSE02UHRDYjVIUUdDTUdrS01mVzY0Witnd1ZtQWJPcGtsTnlBN2NkUmJYMEsvQm15NkRwanVFU3pxZHZwb2ZudnU3N3ptclFJK3FNT21ac1VEVThwcUFEQ1YzNzU5ZTZVMU92bm1FM3FvYzBiMzloRW0vbWNZSVk0WUVGcDZHRWg3NFJEUFpnU2l3OGk5bkFhZ3hYdmlFU09kZ1RYVWkvZFlwcWRMalZwQlQwNjN2TmxOVFgzRW5UbXpyQ3J1RHd3Y3NrNEJ4dis3Zi9NM3Ixak9WMTV4OGp5UGNNT2RQb1E0aE1OR0k5TGhrR2JZQk9BM0JQZzRSOW5RRHVnTUUxOHZYRUV1TWdMNHRqNHBwcCt4cnh1Vkc0T2tvYjBNclVMNXBoM3YveTlYQksxSEd3dlp0YU1zSGdERTVtS21iNzdsd0tJcjdEeWpPYWhCWjlhbXNXNHR1aVlRYXpPTlBUWGowYWtXdTc2d3k2TkZlTnBzT0FnSitEbVl3dUxUeUEzajY5TVFMOU13T3ZLVWlwT3JKQ29JSWh3MUZtTmZzZjVaR0YxRGV5aWFsY0xPeXY2Zk9LQVdUNE54L1padGlDd0dRQ3REUHJwcjF3Mm5XN25pZWJsL2U4YWRpV1NiZUV6bG9vSWxFK1F5cVFYRmJ1MEptTllqNFo0aHlJNjZWSElWNkNxMlVnVzBxMVp5eG4rdFVPaVVXaGZTcm13SG5SUktYOTVWZ01JcjZzdWtudXp4S1B5Q0ZtOEZGVVl3UEp6UGlKY096SU5sbWxoWFBsOHNiSisrUVMzK3J3NkVCcXExMkZhMUQxa05BT1Q1OHVUay9ndTJneWU0c29odGd6R2NhaEM2cXJELzVNNkN1M1U2NzdielBMeFlzRjVZVDFMZFNTVUhwb2pBYVJjRmJ3bERwSkpZbWNJMkxCcTRkN1N4cEkyTUp5KzAzUDI2VmY2OW1icks5T3hmbzU4Nm13SjB5cmU1UzNHeVRsSUl6TE9NVCs0WEpBdDBVQTRjc2hnQVl1SW8xMTM1U3JaeExjbWFtOUdWRFV5eUI2Q0VCQ052bWk2Nlg3ZytwOUdpcldIQzMySTVvN3FleXVoWDNvVWVoaTBraVpCUEkwMm5RM1VrMnFzcWdzUTRRWjBrdW1pb3ZGRjJibXBYem0wZktiaUNIUFVEWjdXN1ZRWnZ1NElFamhoYldFTFdvQ200cFcxMWNzaFhxYWw4alcwMkhSaExGZ013cE5Oalk5VjZvN0JyUWV2TnBvZ1h4WE4zdndlbFRuYzVtSWV2MGhhd04xeVJjeFBhRnJVd0t5dEx5UUw4MGM1U3hZT1M2WUNMdkRMblIxeklQYVpqM05Fb1F5YmlwMGxjVjRDekZHaG9GNXA3MVZUQlBUVlhkN05hUUxObnNIc2RrTVlCbmpXREJLTzd3NUpQY2RxTmoxZmRSWWFtcVdTZ3JrQiswR0I4M2Z5V242azJjb1V0Yk9CRWNReFMyY0dHRHBUS0hUOVd3MWVONXR5MkNlZm10YkFzcTR3QVhtQ1k1a2d6VGNReXlyTWMzVHlDRTlmSkVmSEcrRkpvcEhGQUkvSXVkcDBjbTZ0S2J1TXk4bDJhNzFoQXMraWxJellOd0Uvb1l6ZS8vZkxXSENWSUp5T3Zlek1rTXRuUG9CNGdJczN0dmY2V2Fpdm5xalYxQk8zYkxVNGxOeG9RREVJWWsvTnFpa29UZDZZeUZwZldPUkJUa0FxVzdTcExWYTlPQ20vc3dPckszaVhEcElFbmlJZGQvb25rS0hmT3NCWlYwRzhXd3F3SnFNOGFiS29zdW1ycDJyOWJYWFNmby9uQTNSM1VBQktlSnZidXJlU0toWktNd09XNStiOEJoaE5rSk5RZUl5cHBaU3lkbStLanRkc0lWVjFDSWlSOGxKUjJvT3VYU2RiZGE0a21oWkpMckt5aEh3MnVCS0lCMkFoWFI0c3FMQlh6cmlSRGlMdUQ1UWN5cU01ekIwMmgwVDdLZkhsa3g1NkticzFrQ3BrTm9McDl2RndxdTFKWmJteDhWSlN6eXlsaE1EWkZLRVVKQXNYak1uazZaNk5mTVdYbUptbWxOQ2VMU0dZSS9sSXphTCtmRVNTSUw1RkdDai9LeGJBcFlyNk5VMDlaV2h1WDIwTjV0aHNZZ05BdTFWeUY2NGV5WG5BWkhja1Y2OXRIcEpVa2dDYnBVVkxhbGNoaUFJYXcxYXFXNWhkeitWa3QxTTdOTVBtc1M2T0xaR2NXbDRlQzZ4TkZZZEs4cUh6aUFVaExldDRZSXAwWWQrSVpMRWZiSGxMdVFObVJHUXh0QjFTYlJoelowUU8wcEd6NlI2Z3RhUkY0YmtXR3I0cy9BUlJ3RWVLTjZTQkxBTHl5Vk5KMk1WZFlybzFsMGFlUnlkb2dWeWdWQ3kyOThJUmllTXc1akdBM2s0UUlSYWM5Z0JtQ1RoaEkyd3RzVUVFREN6Ymczd2dabzhGSmpSWFp3azV4WGdxbWxBVXZDMmY2U2Qvc2hBZFFHWXJIVUpnT3Fjb1NtQ3AxSGFpWGpYSlo5V21YMzFsb3lXSUw2SjNiODhZb0hkdG9RQkJnTWVFb0RVNEV4QlJnK0JYVE9STVdhUXdoSWRaT21iUjdsQ2R6Y3F3elptblhXZFBHcEJTTG14UVYzN1FORVZHMTR5NEpTT3VHWFNQYTVuMEJZdUNrVWJCTkFVSVhMejJKRVFCWXJIKzBheU1mS0dVNHVDZUhPL0ZoWUJTWkxVYTdsQXZTZzUvWU9oU3lOcStSSSt0dklrK2ZhRW5ER0FQdWtYZjFkSGxzZWNxNDF4QTlBSGxUanNXQm5oQmpGaEYvd29VS1lobmdNVzMxcGlSU2xLYU1LdUszMHE0MmdLOFIwalJRTmhxT1U0QVpnc3FpQVdEUUtNMHJUZ2taSGUyajlraG5DU1lYa1pNTlJCUUROODlzQUxwVWlXL3ArazRNU01vNnBST3lRUUM4S01KZFJKU0xrdGxSeER1Q1M3cThwRU8rVGh0TlZOZVNHL0I1aUtsUy96RWdWQzZmd0d2RHJCMUZFRTgwNUF3T2FFdWtFRmt5WlF6dDF1dWtVamdFNlVkL1VENTVTT0htaVhYZ0FZeC9tcEdtQTByVGppTGxFa05RY3FCZ2hzUzk1VmJ6OGh1QTAzdmI2b1E5dzlCYjhHbGQ5R1NXRGxsQTBlcmhzb2I1Tmwzejc5TWJzOXYwTUthRVZGVHh5aTA1dDFmczE2b3RWeFpXREFOTE1BUEJMU01keWhGUlNMTUhjVjR2bU00cWdTeTVsUFFLME5ra2JvQkczdmlneklJdjc4eWxxOXJ0MnFsUTN5T0tlRXpEY0NnNkpobFZvRjhiN2ZDbXRLMEJoTU9QZmhWQVFQMVR5Zzc2UjE4eUJYQklKNFhzTTNyMkZucEp3V3RkWExLQ2gvRitJUW9QSldMNUpmWDZYOTFRY1A5aWY5NWRPNVp6dWkzdWR4SUZCTURueGhHR3g3b1dicHFZUWVsMDlHTFRmZk5relQycmQ4M0xyS28xNUZoWm14R0FzMXZ4U1I0czdXQkcxODV1SU9XVmoxYk5DTlFCU05tQnJKUzJTMXpEckV3d2JCYUJYQ0hRZjRadzFtRnN4Z1RPWnRackNQOE1ocWFaQW9KbmdCS3ZGZFJGQXdTdXBPNTkrTmFpKzhWcnNuYXZQd1Z1cG5FajVlVjYvZnJxaWFxNzg2a2w5K2pabXF2bzhXNWUwNkZORFF4QkJUc25pbWVjaVRWZlphTXgzUlh6TStrQ3c3REdTWGdBOTZhcmxPaVkwcVVaSDRlOFlHd1JLQkY0RDZBQ2dkUFdycWdDbnF3ZWdPY3hoa1JSMXBCNURiQlNhK1NxY0NpaU1CMWsySk11Z3VSZlh3Qnh2L1NLdkh2M0VKWGZUWEJVaXY3NWE2dnU4RnpOemVvckV5VjVGek1DN0Mwb0pKRVMrUzRFeU5Dc3VxdmNpbnVVeGFKT1BNSml1THNVYjRiZ2pjQ21BQnBCa0FNWmlrZVM1bEU3RWFwMC9aQVkwL3FncXlBeUd3QVlqSGVkYkpwZWhUSlZJQmhHLzNiTitlL2EzN1hwSWdVMnJPUTJ2VmIrcXFteSsvSXppMjVFNzlnWHVNMnFZWjZYWkUzbEVxNlhMejFJTXI1RDZoV2xGcEpFMzRKWW9UaG9MQjBGZzZNb2VlUUxPUjNSQU1JaXl2aERqdGdwWkZlUlZ0bDZnVXRsTTRMMUFIdlViOGdBN01iTk9rUlpLTkN4dWhaOVYybkJkN1hlYzM4eHdyN3hnbWpxRlNwNW5hSVl5T3ZPU2g1ZjcvL0ZnaCtKcTNrUnh5WjlyNEpPUmFqeE9pRkNvR1FDc1IxQ3BPc21IWjZ1M1FrTUl6NXFIT1ZCejV3VmNvdEdaWmpXUDcyb0hrQVA2K3ptREJ3anNOanhiamJqK2dEcjNLYk5FTlV3RjNmRERUcy9KaS9BWTlibEZlMllGWGVGNkFFa1hlOEZFRFhCY3BieUphRzhJNHF3QnJiR0tlQXlZUVQzRC81b0JOREdDUFNIL0ZBMGgya2RFaGlxWmYzNnVwOU1hZEl6R0E3VmdEeGp5TzRCZEsyTzRrMzVpdnN4RzYyYTYzZ3U5YXpER1puYkNEZ0x2eFg4ckJZb3VtT3RhUUFQd0lFUzJrcjMwby9jSTBFZjRycUZrbGdiNi9ySG9YM0VyNGFvVWxsL05XSzBQVDVkUTltdDM3YnlsVmQ5cERjNHpSUTNOT2JZUU1oc0FCZ1pLMWtJMmgyaEhrU05uOGhRekt6UnN3aWFSclVHZUJwc1ZSclBVK05hUzRwdlNlczhZbUpuSVdzQkpPM3grdEdabGhvR1RaNEltSkNsY1AwQWFrRjU1dzF1bE84TE1UNUxrdFZSMXdtaEErOUhrby9pQVBIMEk1OEFEUkJvWkF3UEFOc0ZrdGtBYUcvQ0VrSGlmblRwSU5mVkVkWUFyZGVkSE5DK0Y0NWVaYkVsYUhxZ3NtcG9zczNic01vQXNGVWVzT2g3ZmFZVWxPQXBwakVFYW9wOEtuVU9WYlRxR1lTbWpTa29ueEwrZFREekVjY0REOUFoRStHUEhpQnRCT3VSN2VBbDRPZ29HekN6WVFPZ0V6Q3UvdlFNQ042a0tSaGc5YjkrR0FTb0g4R0FIVnIrWTFSS1NLSzZtYXkxZ0Y4SWV1VjdaWGlPUU9hSm1sSlNYSGJtMXlFcUxCNDN1S0lIOEdWeDhXZFhBL0FvbnNCdHNnTmNCM21VVHhaSzBSQ1VIQ2lBSzhYNlFHMGlVR1lEWUFlQUxmQ2tZUmlIZHE5Z29nMk1wY1ZIVWN5SGFrT0N3Y1R5WHZoaW1ZMldBTmdMSHB4OC9kT1FLYWFEWEFYWVl4STFTTnFrRTE3YnZpOGdTSWVRajhWSk0yQTZNcjZSR1lMS3UwYytkL3VpQVVJb1VScUlBM0xRcGJJZTRTRG5EVFh5aURNYkFDdE5MZ1BOYWtXNGh3d01Nd28xdVFvbXh1bSt3RE13aE1oLzBJTndVdElPUHFlUnBhSXdsU2VFSTMxZ3JGNkpGVnRwcVVCckFZeVYrd0FZUUU1YThMaEE1T2thRDViMkJiNCtuUmJzR2lIU2p5UGRLNTViMGQ0STh0STBpcmVMSUdKeGFaZlJFSW9IOGd6RG5pamlYSU5zVW1YOFJqd1lmc2FRMlFCWUJISnBoN0tZYXZzeEMwL2V5cFZDYTdRTEIya0UzeGEraDQzMTFnNmdkTEJDNFRIRTZZclZQTEFHaUs0L3B3OHNtZkoxS3JBb2xDYTRmVnpSblVMaXNvNlNwSzZyUjl1V3hqWkhGZGwyN1dURVFnNjZDanlWcE44c2hMblk0S21tUDd6bllmcFprWWJySzdvY2xYUllHTElocENDTDRNNGt0OFMxb1VieUl4WWk4V1E5aVBpTlNzWlRhSnV4bFlGbk5nRHpBQkJVNTlHSlpOVXpVSTZSR0l4aW1oQlFPblhFRkFKREhiRVBpR3gxQUE4MStJR2tQaEEzV21vU3NtNUJUd2Naa1ZWdHh0ODVWbkM3dFBkdWwyNFFUU3U5UTY5b2JkRXhxcnVUVldtN0xFTmdYNTRwWFFpSTQzemRZUURDRDkyRVgzVUFRK0NDQTJQUWJRZWJlbmhaWmw2UHRQVmRjRGVqNDdSZTRlWTRxKzhSejRrdmRsUFg2Z1h0NVplUjZ1QktoUVVxQW1HYzJFMHJ1aDg3UTNxOUFHTnF2NUdRMlFEd0FIRUtzRUhaaHlvOGVZbUZlSFcyWFczQW9VR1NKdDhPRktNUWk5dkZxK1JVbGpKZnF4Y0xiOWhadGVPS0xTVzNiU1R2UnFSd3ZXbG1nWUZuaDNMRTRMUTRwTTBZU1ZQUkk1aGhDQmZvRUdEYVlIRHhOZzNBbWY3WjRLTHRmKzY4WHFSNVFkOUhQbkpleHFEMGpQWlV0bVE1ZWwzUVZZVEVOdlBRUHgwMDlBYnYrMHpKbWtFNDF0TEZXbTB6R3dESW9yQk1jbjJ3TTVkRlFVWVE1QmxsYWlOSm1TamtHRWZZN2hpNUFNTTFOdnNRd0U5QVlBbE81YmVQRnR6NzM3RERUZXBac3cwc0FUQkM1eVQwU05Oa0hCcFpXdTFpREU1Q3hPbHpnNTJUTmhHWm1NUVkrREw0TnIzck9LVVhYMTYrTytjdWlwZlg3cW5vS0xpN24xNXhqN3pRc084blYyU2hmcTNpNmVIdHpCQWl2bjVzUURnaDNnK29kM2xtQTZpbkZvRVE3Y2ViOFVPOWpyUnk4VlN4TENyRVdBT3VBNXRoc0Nwb1dDNGswcDZnRFdXZzl1YnQwcElFT2wvWE40dllkNjl0RXZaNFdQV0IyWFNiam5RNjQ5RUZ5djE2bVFDWmQ0bzUra2V3ZmlwR1p1WTVsY1pnMmJxNWI2dHpWMnd2dWpkZVYzVGZmcTdoN3Z6K2ludjBkRVA4Nnh2QmJPMkRwSkhWU2ZpNnB5UFZKc0hvSVZpSVpBeVpEUUQ4akNoYkNCTDNJV2k4cXhLNE9EOEJHK0U3MHFIUW91UVVDaU4rSWN5eFZJN1NEYmlNVG9BaGpWdXR6Uys1TXY2K1dKSzMwcFp6elZsYWdrVk1YWEdiZUNmRmRDNmRwbm1hcWtmWFZwQ3ZpL2xWc1ZDMTVBRnErckFEdjNreXFwMzh0OTFZY0RmdExyalBQcmJpN255OHBvOXU2QU5RdHJGRkFFTEFYek1pNnVLZXJNbTRtOFVlY0wyS01odUFkb1RwdlhxOUZDS1hOcW5QazZ3V1Jac01VMFZSZS8xRzljYWFqWFpWc1g2Z1RUTDZFVWlhK1NUVHhteWp4c29CYkpkSG1hU2JVOHNlUTFiaUdBTmVoYW1BbzNjSUZVa1VBZHQweEdHcUtlWGsyMlVHQ1RPZVVWRlVuVEVuMWFrWUJmS2ZoSkRXejZHNHV0NkZyQ25QRlBITzE1YmNYcjA5K3FtRFRUZXZLd1Y3YTBoekNEak1mTk00RW1TNmdwRStSa2UxUFM3OVdraXFmcTFrWmdQQW5hMW9KYnVpZDFEcmJOL3RFK0FWblRVRW95c3hDK1F4Q2pwRE91WWpyQWZTT2RWUlN3cldDcnZLRFVlb0lvcWhycFdYN1pIVU9ScUFmWjdGbEJLaEFobjRTQ21UV2lQWFZkWnU1V3RqdnMyU244QmFva0ZaTkFLcnR6S2xBakFSME5nTG9TUkRxT2tYUlhpNSt3MHYwemQvNUwwKzh0Q3liWkExVDJCRzRBMEIrRTRPL0JxRGR5bzNFakliQUQvcFVwVDc0bWRXbHZpbGpUNVVZWkpyM1VWdDlWMWVSdVU4bHZFRzRPdW85MGU3UjlRQWxNaXFuZkJTOC9VNjIyQUx1ZEFxeVhFZklJL3lkZU1IRHUxWmdDM1Z2WklTSk9EcGJKemc4SWxldllzTmV0V0pYWnVpZkIzMjFqWUV5d1I1V2FtUndHQUlTQ2pQMUNCRnZucWZjLy9vYk03ZDhjaVMzdm5UOXdTMExyQjlqaGlTb2ZGdHJLRk9yYWFNUmtWMXRjOGFNaHNBSG9BMUFQMjBKMng5S1VyWTBwTDlDUmF4Y1VRUFFHekNqM0hiQ3F3aXlNWFRNUnJXY3k5UXhFZzdjSGJLd25DdWlFR2I4OFVrUnRqa2tYQlVUQUpQNnhoQ1licklxbFlWeEFhSzAzV2h2YUsyYWxHV2g3R25nOENqUUhoWDJuc2RvUFZuV3ZVMUJYbFd6YXp1dHV2TDdwR1RkZmZ3ODNWWGxYWU5SOGM4RUdnS0c4WGN2K0RkOEt3aHN3RkFnSG1jUTd6M0RKRzFxT0FJQnpoSFZINnNOelJkdUtnelBCR1oyaUZQd0NqcTlnQUptQURzbzArQzVJc2JkREN2TkpkamhrRFI2Z0RXWGlFUTdGV1ZFRFJ1T2lEOHFQZEZxTldNejVSUFdac1dFMVRvcGVkTlhzcjRsQkZ3YitDdEJ5cnU0S2tWM1RDU0g1T1c5WUZZWFNZbWhEMEJuYU1CYk9CT3NNa25RVFJJZ3FrRzVVZmw5V3BEdDZ5YlNjSVhwQldmYm0rM1JhMEIyRHJkTk1WMEdTWEcrVFdXQVEwaDhoZ0VOMlpJK3lsQWVHUUEzQlRXVFdBSlZrS01ia1V3Z3dianN4ZHcwRU43eEhjQ1JWTFVHMTN4MG9adHArRFh1RFl2QUkrNkRGUUpMOGdjMEpkRURtd3J1SU5uR3JxcmlTblJIN1V3WTZLbFo0SUhUZlNkQlhyV2tMMUptQUxTQ3V4RkZOYUFpZE1FN0hKdys5UkdjaWhJQkV6ZUlQeloycXZFdXFnVGNLRUpnRDZ2Y2h5UmVVWXJ4YnY0L1FDMkNVUkxmLzRZZ2V3VUFvUGhDN0JyUmNiT1dnQmRkUjE0RXdXSi81Z1dnTEZnN2NTVkxOYjNoek9WSGlFUHJIaW5nV3ZFc2hhRnI5WmR6Yi9STk5DU2hnMFM0VVZnWDJJNXBnQmtrVFZrTmdEY2pIa0FVVE5lK2xBME5qbHhCTTVRSW0zcHF5bFVlVWEveHdOZ093QVRkR2FGakhDdlRtdnRCUWhlYWQrbUEzQUJvNWlITk9aZXpXMEtoRVVoUkV3WmJScURwRHhYL3B6dUw3VG9pVVhkaUFUb3kvMm9wUjllK1I3ZStpR1VZRzNqVjUwQmFocnduYlZuQzlmdDBLYy9wUHdHNnhxYkI0VE1ybW5idEJrQUtGSk9JM1BJYkFEY2JXSVJDT2NvYjgxZ1dnNndpbWlHQjRCL1d0ck5KTVdtTlFwTWFsSVdSU0ZMa1JVbm9xWStqQjRxd0FVd1NlV1pacmovRGcwZXNsQmxVd05JMFNBRkVaZEhITW9vdDBvU0E0WmU4Q2pTTnpjdWxZNVRqK2ZhVTdGcEwxQ0prME0wRkM1WnZhejBWVEY5aEdPclhxSGpnVkxST2lXYXVrY0FyS2Z1QjVCTkFRTnluUWJMYkFDc0FiaHVSWG53MHk5UVpZcXhoSWNpMldzZEVCVklBMlFISEIwRVAwcU5Cb0ZRQ0I1R1FsS2wxY0dQQ28yVVRoaUFEWGpjSnVWQ1pxT1gyS1BvYzE2N3RyT1JjZGxabE1yQlA2RlQrUlJpbERJRitrYk9ZcDFVUlJ0YjdZZTIzQ21zNklubDFrcmVuZExyYnkzMk9RSkRweFVDbU1VOFE4aXNUT0hJM0FiaHhrVmdvamhqcDhmSmV0Z3VSL2tjTUc1Vm9aN0lsN1E3RlkwcmdiVVdmZ3laZTVlMHpFRFVNaG9HTWZodFU3RFM4SXJBZ0xlUE5FU0pxVzZ3NERrejByMGFtRldsSzlvRUxLV1RMd2w0aENqMnRkTUFBUFExOFhJUFUyVmZDNzhrT3E0RklIYzNyYkVKRUZpUEdlcllnNVlMdXR3bGx5MWtOZ0RRRDdJR0FNNE1CTDdoVjBkVUVLeWIrdy9sUkhRSTlmcng0V0ZSWHZKOFhCQjJKU0FvVTdodlpDMVpNMEVqNHVmRkVKNGI2SFZaM1E3MlUwcmNuV3NOa2xOYmlNWmdVcjUrSXBKUFkwampzSEp6QXhIUzQ3UWVxcWpEQUFRYzRURUEvNTZnbm1Hb1BRYkFKV0hiZFpKV2UyazlPQUlqdXdIZEcwT1pEU0JlQnBvMWR2Yk45ekNjcWNLbzQwR2VvM3NSU0tFWmlCSmVtREtFSUJBLzNtbEY4TFZnWVEzQWF0OEhsWU5ER1F5QVl2WUUyb0NTOHYyWGg0UWJqMkdGdEFxNHlOTndvREF3b0xDMWVVMlMwQWprNHZ3ZmpjQ1RWeHZ4UTkrOXQ5SXRkR21ZQVkraURaWU9nbHBsYk1sSFltU3A1OGlzekkyMGFjZ0M3TXVVV09FYU1qRSs2VEF3NFNCaUFkbXU4d0J4TVVrNXdORUFiR1FyWS9Vb2kxNEdDZVI0RTVvR0tvczBFQmFMVEQ0MFllL2VLWVA3dDB0Q2hHdk52YWNoYVlGQ3RSa2s5QWFqMURDblVBUmFIU1UrQTYrZEJxQzIvdC9IU2pPMUlRUDZZNlBkTEZ0cDh2RkFqb0loeTZuSC9TRnExZzNaalVZR3dCeExSK0k4M1lzS1BNT1lEVExGTmhjcnRpbU1Lc3JBRTlLazFCOS9xREIyRHJkdkFqTEFBS3plQW11dHFjWVl5Q2tOZmw0TXNTc0FGZlBxTkI4MEFwOEp5WU1hUEdVV0JHTkJlWklVeDloWCtEUDRMeVZZbjRYQTQwbjd0MkF3TW1aN3BkMzRWUjgxc1FQTDExT1FvekVWNDhBSXZISzhhQjZBS1lDbmU4a2NIaGhKUjRtY0FyT1JlWlREWVFJMkk1SWJVdys5UUR3R3hHTHVHcmpZdXhoalZmUlVzZTJqQTVPbGZWdHdtd2VBU2NFMVJWaXN5cVhxVUJxOHZoM3dJRjA3cENHRXVrZndwZEdEUlFCcmwycHNVRG9SMnhFS0xMSkc0a3Z3eU1rdkFqRnd2VktuNGNtVWVUSDhFR2NiZ2FjVTI5UHVSVE1BMnhTS0ltQTJjdUQ1U2M2eDd5akRhOWRiTzgyU0tVRGFRdkYyZ014d2haRWd4SFRJVHdHcWtuVHdJQ3g4ZUliT1BmNjhSajJ4TFJRaEk1R1pnYW1lTjROeFQ5NEFCSXNCbUY4VnoxZ0V3clkyUGxZeUJLK0ltSU9sMkpkWVJwendIQXZURmh6TGlLMnhUcUZ2UkJIVWlneFc5ZW9Ib0dZRTZyVDNXTG9UcU1JVmpmNFpQWFZsM1NPdzVLRGZQT1VFRDIyUjEwWkM1aW1Bd2NWOUFDelRkNnczV2Fvand4R096bmNzQWdVVTU4TkVNZ0pHRUlqRWxFN3ZRRVFQdzd3Znk4MmxxeHh2Uk1EZ1dCeXlNeGNEQUs2dVBDK0lldUY2WWRuWmhBNXloU1JTdTVpeEN1VkNIVFd4SDBreUZIYlhoYVloRWgrcGdrNXZJZVNCRCtPUHJQcUN3WkpuQy92c2ZNTU1vS0I5Wk1ZS3lIUmd6eVpqWlUwOHF1U0tJV3ZJM0lScmE5dmdJUWFpTmZjaWF2b0t6TUl3eWVpaTZRaHQyMGNBQ0tJeVlTaU5BdGtLUmN4bGpvMTRDUVZjaGs4aTRaTEpEQ0dGMzE0T3RSRXY1WXVJL2VZUVFQcVBzS1QxNzBOSTRIZ0owRy9YSmxBcTg1U05iMkJKS0RZVms3UjY0aGg4VzZzS2RUd0Q4TUhqNHVFUHdmb3M1b3hOOVVuZi90VzJkZWNlTzdPaVBSWE84UkhZNVBFNkRkUThZb3JqZytLc0liTUI1SEw2VUtnWVpOUkJ1RitneXVwOVA0MWhNd0RhcVE3WkdSNEp4T1JvQXZJcVlBV1BJSUJuN2tabW9PRnpxZ2piVHduQlV3aVFPcERHS2FDbVcyZ3R5bFhHOXdIc0oxb1lWUndlVkltZzd1N1ljQ1dtWUVaSGtTRlRSSTNSRTQvdzdkTWhOcmhVbW53U29FeWR0VEE4c2NxVXIycEdQenl5RUJ6UlZuWmVWbm5zUk0xZ29XdC9hbzRoZ0NYMmhSZ3p5cXpNamJScGFIZUZ1WCtNd1BkRmFEcERaTXpxQXd3UitmUVU0QTFBaGFyd1lQNU1lK1p2T3VWN1NZbkFWSVpDZVprQ0k4QlYybVZTSUdnR0lCUmNCa2IveUZVQTE5TmVzSW9qY3dLSmdvZUlVVkNCcCtRck1VTGU1cUVlRGpGNmFIZzNya3JTL0dGcDFnZGFXNkZpSDVSTGhYU090T2lwVDdZNFZWUGpSelJLdXYzTGJ3eWR1OUJ3UDNoK3haVzFyNXdiWW1DM29LYko4eEFWQ0lYSkttY0xuUUF6WUpUZGFMUWxTUGNCVExkNDJYNkJLZ095aEluRmoxRGw2VWhVUGpEeGlMaW9SeWlTaFhrQ3ZBQUNRQmUyQUJRR0huK2E4QlhieUJhZWh0WUlLSWhkUytnRVFuWWZRQVJNZ0ZZbVBCQUthUk0rR2ZKVzdEMUdWYThNamZOQ2lkNDBZWmMyWHgxWjFKcytGeGVidHMydHFRNndUakY5Qzc5L3ZDdmlWa2JjRGgyNW1JbkdScHdjdnI4VGVyZGhtNzRBL21WdENUdXZoMENqZWhnVS82eGo4Q284OUFOMFpDVVAzVHBraFpZdFpEYUF1bFpaZXVQS0hsZWh1SDdCR09NVUR5VnRoS0pWQmQ2TEk1OG9IeUg2S3V1UVpHSXg2ejV6L1lxTm5uck5Rczl1aFFhalFCQUl3UzhDOVlVUWVRQXpBQTFoM1JTMmUrU01Fc05wZUNWTzFkbWZDVi93YW0rdVY0cmZNVmwwZS9UaFNyNXJlTzVpM1MxSUNSTXlodDA3Q25xQlF3OW16aGZjV2Yza0Mvc2Q2UU9OazM0bzB6blBlOXlDVWdJdVF6QStsRmFNcDRFMzBpT2lQejJaZCtjdk50dzNubHdPM3owVXAvQ3A5Z1lIdllDR21LYVNRVXZ2SHdicGhzb0Jvc3dHa05OZWE2TVA1Y2hGRDBJb3hRc0hhSm1uSXZMSlpTQjVzV3RYQVNZOTBLbFF3V1NoazFlUU5RK2VBQmd2TU9DUUozbmZ5dU9EQm04SE0wV1lWQlN6a1BRZUlBaFNlUzlNbjRjU1c3QzM2TjNCSzdVTFo3czIxeDA4dXVUKzh1Q2lPM3l1WVFiRlY4Y083Q3k1dDl3MDRnN3MwZXRtNHlWMzVIVGV6Y2hOODk2Qjc0ZG5LdmFEYm5XR2RBRzlGR1Y0Q1FlL0lUQzFwZWgyYW92M0gzMXJ3WjI5eU9objZ6MS93Y3d4Z2hSUzB0U1lBWmhFVTVVREpMTWFRSzZoSFpkYXJEQXdiZTdwUllOdUpxWklKdlNiTWtZcGJSUGxteEY0a0k2T0FhZUNPSEpSTmtRUnFrMEZJYmJPQTZzRXl1ZW82NU81K25xNkZsVXFsREhrNVM2WXk2T2d1ZGVPZ1VDUEJlS0loTHhIVzYrdTNaSFRieFkxM0NlL2ZkRjkrOWxsNGNwcmk3YW1BTUd5UmV2aFl3MzMvWk1YM1J1dUs3bTMvY1NvdS9uS2dqc3NJemloWHdCYldKWlFSQnorOE1aZStjb290Tk5RYkFmNHNVNnFSVm56L283SmtydE9QRHp3OUpMN3hoTkx1Z29JeWxkZjZDZXRPZkF3NUFtZWdwVTNtendGeXhpeUdvQkdZcjJoaFV2VDNCYW5IaUVwRlhjSUQ5Y0tveWlkQTdiYkM2b2dJT3RKMHJKRCtSZ0J5b2NjaG1EWHdJcTVFV0kzUXlRTmd3bjRXUXZZSXBGRzBKZllPTXdBUUtJcEFwNHF1dFRhcnJlR3I5cVpkM3YwR2J0SG5xdTV6OXcvNzA3UHQ3UUhyeHkyWS90Mm5pSFJsNUsvL25UVFBYVm13YjNqdFNQdTVWY1U5QjVpeVQxN3FtbUx0cHAwWUYxSitoT05RWFFUZFpIeUJzaFVoS0ozYlMyNEczZm4zYkhUZGZjbjl5OXFmMS9KakMrbmkzdTJoZHNESXNGYUsvRWVBeW5lYnRabUVkMHQ0aUk5Vzhoc0FGV05oUzBUcnFIWDdiUm5iZTJIa0ZoK2VhVm9iNjBnRDBabm5BSzhCNGdHc1pwcEZLcmVlZzlBVW1uekFrcWpReGE4MkpKdENoRXNYZ0hjMEZnSkJzRG94LzJiRWFvT0E4QVFHTlVUZW5tVVViOS9TdkI2YmZ2T2g1cnVPMGRVVzVwd3U2ZTgwZHJpVW5neGxpU29VN0Myb1BYV0hRODY5OU5uVys2MkEzcXo1K3E4ZStaTTNwMDgxM1FYRnYyMEFDOSs5Q2V0MjNuaDVPUFdFL0krKzlqOE9aMXp4ODgyM1I4Slo2RTY0YVprblBRcHI2bkpYaFZVR2paU25CaFM4bHYxMHVuRW1Hdk0xZlZDNUdxUU52RWVxY3dHTURzN3UrSm1tbzJGSlMySUZ2b2JIR0pDaVV0YWtaM2ZwaEhaOHU4dGVRK2d2S1NEOHBDbXJhWlhNZWZiVTJ3ZFIvQUlRQWVDeFF0d2NFbG84N3ZTZmhFb281TjExcE54ai92VVRsdEpzNklGRm91NW5Wdnk3a3J4cEduY1Bmak1rdnVMaHpUcTlVdm9yUHlaS3BaMStCRW5neEJCT3dKL0tKUyt3WDlEbmZtc0RPZUJwNXo3aFZkWE5DV1UzVjR0NEk3TjV0Mlo4eGdDM3dPZ244RFRFZkVxcGFQNEVWM203WmdvdUd2azhuZG94WC92b1VYM3B3OHU2aTRtbTBIenJpWWVDdlpTcTNnUVBIMmcvK2pYb3NBUG1lMGpSVGQvc1ZWZm1iSGZES1JHWEE0V3NoaUFJVjJhT2JuY3FqZHI1c0pOLy8xb0lTWnhvbzZmWDlDSEcyV2I2cE1wandvRWlTSkRyNHhiV3JRNzU2Y044b0RSYmRxWU1VaVFwZ2psaWUwVE1LRytvR3ZtbTY2YWtDRDlPa0EvY0dMWDFhUGFWclZWaTZ2dE9pRDgrUEVsZDk5ekJmZlk4YnFyNlkwYTNEQ2JMdm1EbG0wb2tTZXhxd1hvV0NsOFdNYjRWZ3ZickhGeXR1aysrdGVMN3FZOU5mZm1sNWZkeTNacExwL1NBbkV4NytiMFRZQkZmZExlREYrZFlhN254ekg1YVZ4KzRlZllHVTA3OXl5Nmg0K3VtS3N2cXQ2clcveEw0Mlk0aXJrdkVrTTdoVHlBbGd5YWpaVUxGMDVrZmpjb2l3RVkvZnFwN3k3cmQrcVdVQXlFK3dWVGtDcHh2eWNrb0JmbVdtNUsxbzRWZS9ldlJKQ2xhVmluS09SdW5QUWR4Uk44T3VCUm5nc2ZWdlFhTkJLdWM4K2QwdnlwZDZTdTJWcDFaYTNjY1o4WVhrM1RJNWR1MzNtODdoNDl1dXlPempUZDVNUzQ1bm90dExTWEtzL05GZ0dhUUVWTU4xV2tDS09ZT3Z1ODl3amV3RTFadG1VcnA3dDJUWGZ3eEtLOHk1SjcxYjZpdTM1WDBVM3J4N0RLOGdwNERBSmVneW5pMGFmMTFzK1JtdnVCM3Y3aHhsVkZmRURmNW5zV3NDbGpOS3JXWEh3Rk9WQkdFWk13TTdFVzVrc3p6enlZTmdCUEVNQTFRbVlEbUh2NjNxVTlqY1ljaktEa3ZrRjE4Q3FEZHFmMW84bDNINnk3ZjMxYlNVTFhyNDJkbzYzdmlhR3dFM2t2MUY0NDR3Q0FMdW13dnZNME5FK082NWRIZVhMMk8xK1ljOTg3V25QYnRpekp6UlpOcUEydDV2bWwwd1hWczA3Z0lRc2p2aXFyNFlaTzNaUXZRMER4T3BqeitiTmd2UFhrU0lYQXc3Tk1GNXhoNzk1UnJRTU9uNjVKbWN0dVFudTZkMjRiZHd2ekYwUmJENnIwNnJmZVhyY0hWdERodHdOSGRiUEozRHhLTnlQMGhwaHdrY2pIS3oxeVE3R2EyR2R1dElOdzd2Z0QzeFRtYkdGUUE0Q1dGOFhDd25LdXVYSTZyNWFpM2Q4SUJHME5kRUxnZjNqUGlrWkYzcjN5V3UzUGtjVmYxTXVsOGJjbkFtWmhDMEx2MlFkUEhnakp6U0NGMXR3N1B6bXJBZTkrNzB2bjNhTzZWTXRYeXZvZVQwRS8xZTZWeWJ6TDVSNGV3b1JxQ0h3Wkk3aWd6WVB4NVV2ckUxQ2VYT0FrRUNRWE82VWtzSHdJS3JhQk1hYWpBb1lnMThQY3Z5d2U1cVNXbVFzcWt3RUFqZUpIOWYza2FIQVdpejhiOWFvajd6blZPYzBIeGVtODBnV05zS3JXTWtWWGYrSDAvTHdlRzFsSVE0V2kzdEdnQmhCYmcxanovL0pSZUVTWW5ZODNJNWppaEFWOUdsWEE1M1JwOWNIUExMcjN2Nm5zM25pamJxUm9FY1pUMjdRWFNaclFYQm1UUTRJU2F1MUEybGJIaWwrWXJidmYvZnk4KzlQdnpMdWlsRi9rMnQxR05RcVJhelZtUTJ0Rk9IY3VFekVLNWlUdmJzSHZZUkE2dkZnK05HdjNCeDVvSnkra1UyaGh2TnFpVkhqdHp4YW5ZZEVuS2ZQNWwyYjZKMzNVME9DQUQveVpJVVM2TUpBRUEvWk1KV1ZLQ0lZSFJoaEF2clYwVENXOEc5TFJNZzNlSzcwUkEyZzF6NTk3TmpjMUxYd1lnQmRCTjNLRXFOcFFyTkVuTjMxR28rRFg3bHAwMTA0dHVldW44MjZiRm1SY3cxcVF4aU0wcTk5eXVheFgwT1VtVWlGTmlVVTFpNnNUK3ZIS3g0NnZDSGRUcTN4K2lWTUtsMlg0YTJjaFoyVHhoNUJEaUdrTUEvWnRWRklYR1RDNHNPcnVLQXNJUXVSSFp4c0FPdkJGOERSa0lLTEJPZ2lEYk11akRXTmNKYnpCaVVLQ0V2NEMzMG1aYjJ0Z0ttTlJ5UWV3YWhkbUQ2dU1aVG1RUGFCcHNUcGtNUUNRV3Y5V3poNTVzclQ5WlEzZGU5Ymo5dGpsMWNqVHhzRUtHeGZjbENBT24ybTZKL1MrR3dzaUhpMmFGeEYyNDFxR1VDcVYzUGhFeWMzTWRCcEFKd1hFTFVHYmF5KzRNVjBLMlNxZWVWVEd4bHhxcjFKSmdBWVo1QWdPa294ZGowR3BZTVFKU0VoMHVGOGFyZ29BNmdodURQNHBpWDRCLzQyM3dkRjRYcXlIQ1JaZ2FSSGhJejFmVHBVNDdHeGlMZUtKS3RZUGxWeXpjZkhja1NkRGVYK0Z4SWFwT0lzQjBNeVExNDdkOTFSbC84K2VMaFRLdTJzMjYvVG0wdHk0R3BtZ0JlTG5PRndXSDJyMGN5U3JZeHY3aGtJcERFQ1dNajZpS1dKSkUyVlhTSVJqNWNyWnZ5aG82TVE1bERtZkFrYWYwVTRhSlFtek5vUnJBbFpNeCtKZ0UwTUtkaklxZzU3YS9ZMHRSRDBnWld4M2U0QUVLa1dxazQ5VVJRUU9NVFY0bGtsNTBYS3VmdnI0RS9mcGJnVFN5TVo0VmdNd2pvNy8xVzgvZjhQcmZ2bnhRckdzbTVmcVZoZ0JnYmNrTW5FbmZUQlZtSklZRjF5LzhiS0dGdWhpR2NYVHpNZDgxY3QvMFhNOTloQ3dtdW5rSTUxSiswS1ZkYnJVaEJWUHlrUmxSZ0NLV0VhOHdXQTRZdHRBTEJwWmpHTjF6eGoycWVoZ3RDZWt3WENacXdzTVYyd3UvK0N2UC8zZlRnYklRVm9uU05lVGNBS29CSWc1WktUemk2MExwNzVSM0xIbFo3RkNMcTM2aHNDT1diWjFENlhveG9pdHZGVkp2WG90MVJzS0RJRzdkaXpRQ2dOdGN2UEtwN0VmOGVBS3F2QW9EUzlGb2RUeXBDMHZtR2dFSG5ENDU0Zy9UYjhubFRTL1BRRlNoWUtkckdvZEpRTlltVC8xallzWHVhNHlSd2FXZ1RIWm1pT0ZkcjBraUcyaGNlSFE1NzZhYnpSbVdISGJIU3ZWb0x6dUE4WFR5QVN1aEJlR2xLc1N2RWY4MDR5ZCtsT2REQ3RkMGovdE1YajRnQzJoNDJrYkQxMjgyWDBaR09zcTcrWi9HUGxoMDRCM0J0NU83VmtZTHpabWpqend4YStvSjRTNENQUzVBYzVaRFNBU2NTZS85QjhPTlJmUC9KK0tyci90STBaaUtycTVkTXlsVVRwUDJpekN5cjBScEEwQkZXSXU4UnhVbWhoS2Q1NjIxcDZGWE1EZFRhOFhENUdQYnRnZmlyd3Nlb3QyRGUzVGhWaGgrZXlYUC8vN0h6Z1VwSXF0WndwWkRRQVJRNFRyelpVTGozM3VVOW9nTXNmREMxYlM2NDRXTlVycHZ5T3RxblpsT3QydkFlVUthMVd2eHcrTjE0TzUxUHFoMDVEMHVhUytRazhzZDFRYmM4Y2UvTklkRWdQNjBOT1daQXBRY3JDUTFRREFpc3doMWpqeGhYL3pTSFB1eUIrYkY5RENiVzF0aEpacmFVd2doRGdLZlc2TjgxcTRma1RyOEl3N0ovVVllNDhTRjQ3OXIvLzlPLy95RWFXaVRvZ3poWTBhQUhPTldkM3ByL3pLeDNPMStlOVZkUysreU1KT0xBempvQmZEd0xNV0RzUm1VODJRZU81RmE1ZzB3TFZOanhCZmRwV2VLQmJtdi9lMU8zN2w0eEpUMUFXZVdSRFp3a1lNQUFvUXNtbGc1bnQzblZ3ODlNVmZMK1hyNXlyNm5BazNZRGJEOENYQVZNUVgwQTljS2ZlL3RYN3V4S05mL1BWSHYvN25YUHFaSGhSblZqNWNibFJiRU1QaXVBM1VmUGJPdDkrM2VPeWVENVhMamVVS24ybmZOQUtKWlhnQllVOXEwWGZneXJ5N2ZrOXo2ZnpoZXo3MEovLzU3ZmVxT05HQjBpK3FBZEE3Q0xJVzRCRms0L0FuMy9Ubnl5Y2YrbENsMGx5dWlsbnU1MitHUzVOQTFDajdGbDkrVGQ3ZHNMZTV2SGo4dXgvNkh4OTgwNTNJWElmSlhuRUV6VXh3R0ZxQ09FZGg1cUZQSE55eS83WmpsZTFYL0wxOHFUaWlyYU5hWldmbmpSOTlMdXNlOTVKZWk3NmNvYUpkUXJESFBnSzdlWGdaaUhGenFxb2JOc3Q2cVdSUVVaakVkT0xxYXMrMm9udkYvcHk3WmtvYnZwNzcxcTkrL04rOS9qTmlFN2VQOHMwREs4NHVaRFVpRE5NQTBGWis1dUU3RG8xT0hYaTR1dk82RzR2VnltNW1tZlJESWFPNnp1bkgxUUNpZ2JBdGJLdEcvYlY3dGIxdHYzUFRvL09QSEhuZ3ovNzlwLzdqMis2VzZGQStkLzB1V2Ztb1lSZ0dBQjRza01PTVlPNzdkNTJvblQ3MHRkRjlyMm1XeHladktGVUxlcm1KNVVaNDhyV092ZjZvRzRCMVB5MERYWXB3NjdzaXI3ZE5pcjk2Rnk0LzU2N2FYajlmbkgvbUQ3NzZzZmQvNkt1Zi9xM3ZTNEJSK2NTWjcvcXB6YXJBVmRDd0FyZ3dLSjR2NlA2Z0hhVXJmdTUzWHpWeDh6OTdWNjQ2L1pabXZyU05id3cxeEQ2dm1QTVJaS1lJTzlTQXl5aHVjL0tKMURFSllsWWJQUzVYWUxSTmFGZHVRMXVKRi9qcy9RWWxrZFpqbWxlUFRtWXZ1OSt5cGVET2E1ZXc3UWhTQlE4clViajJpTmk3Q2FQYUlUeWhwM3BiSjdWWlZQZjJ4MHYxYzduRlUzLzU5TDEvOXNlZi85Z0hIaFZlRk01K1A5dythUVphUDlLcUdqeHNzTnQ5Q1lDUG9ZNFI4Q3lYdmVDa0s5TnYvazh2bTd6aDUyOHJUbDc5dWx4cDdJWm1yaklsU0Y3ZmwyRFVtM0NRNXFQSC9DSUp2NnpWM2MyaDlCcTBRc1QrUkF4eVVXSkZLUndZQXAyd3g4dkVNWitPQWFDT0k1U1RpZWtrbGlSUThxUVVPNjl0NXhnREd6Z3hjRzFjc2w5ZVlUT0hkcU0zS3JtbE0vbkd3cUhsMlNQZmV1YkJMMzd0N2ovNHRTZUVIcVhIeFI0dW54R0JDSVlsQnV1RDhBMDFtRnlFc2RzUThBNlVqZTI4OVgyN1I2NTgvZjdTanV1dkswenN1aXBmSEwyaTVUQ0kwcVMwVU5FQ3NEUTJrUy9PenVCUndvTjlQVGptT1lBOEJQZ3ZQV0FBVWd5ZWlHM2hLSW90WnNraEtpZ3M1akVPMGhZcmpZR1FqdVZLMnErRGFmMnFUVHhpVXA4bjEzY09Xc1ZpcXprKzZocUxDL3BOajJaVFB5ZlpXczQzVjg3bjNQS1pYSFBoK09Mc3FTTnpKNTk2K3RTVDl6NTl6MTBmUFNVMCtoRVpVenFLeHdBWThTZytqdnFoS1Y4NGh5Uk1NSzBPeUlRRHhYUEkxczBiRUV0OEZ0SjFsZEc5cjZsV2QreXY1TWVueXFPVE8wcTFsVktwVlJ6UjFuNkpucGZmc1FFZWd4SDQrYzFMRENNYWhValpuOFFrUnFCc3ZJS05lUW9qb3pGTnN3Uk9hVzFHc1I4bktHb25xTDc0clgwdWN2aThTTnRZYkpSMG5URi80ZXpLeFhObmF1ZFBIMTQ2K2RTRHk5cElnM0xqUWc0MlVDeEtSdGxSNlpkTjhhSmg0WktGR0JHdEVVT0RBNlhISThxVE9KWkZ1RFJQNmJSQWYyZ0N5a3p6bmg2MXBPT0J3cVBTaVRHRVdFWWM0WlM4UENITjVPV2gwTVlhYVJHbkR3d2c1b0dPZWRLRTJNN25mdmpPM2NxUGlxVW5NUjBWSFdQcTB1M0lYNWJ3dHlYY2JycnBmRHBOcDd2emwwVVFseEZwdHlMVCtYUWFGcnJ6bDVFdGovcWxLdHlYS2wrWHFwQVhYY0dYeXZCbSswMEpiRXBnVXdLYkV0aVV3S1lFTmlXd0tZRk5DV3hLWUZNQ214TFlsTUNtQkg1MEpQRC9BYVVjdVE1N1EyS0lBQUFBQUVsRlRrU3VRbUNDaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVFBQUFBRUFDQVlBQUFCY2NxaG1BQUFBQkdkQlRVRUFBTEdQQy94aEJRQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFlR1ZZU1daTlRRQXFBQUFBQ0FBRUFSb0FCUUFBQUFFQUFBQStBUnNBQlFBQUFBRUFBQUJHQVNnQUF3QUFBQUVBQWdBQWgya0FCQUFBQUFFQUFBQk9BQUFBQUFBQUFKQUFBQUFCQUFBQWtBQUFBQUVBQTZBQkFBTUFBQUFCQUFFQUFLQUNBQVFBQUFBQkFBQUJBS0FEQUFRQUFBQUJBQUFCQUFBQUFBQzFaNkxvQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUJuV2xVV0hSWVRVdzZZMjl0TG1Ga2IySmxMbmh0Y0FBQUFBQUFQSGc2ZUcxd2JXVjBZU0I0Yld4dWN6cDRQU0poWkc5aVpUcHVjenB0WlhSaEx5SWdlRHA0YlhCMGF6MGlXRTFRSUVOdmNtVWdOaTR3TGpBaVBnb2dJQ0E4Y21SbU9sSkVSaUI0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pUGdvZ0lDQWdJQ0E4Y21SbU9rUmxjMk55YVhCMGFXOXVJSEprWmpwaFltOTFkRDBpSWdvZ0lDQWdJQ0FnSUNBZ0lDQjRiV3h1Y3pwbGVHbG1QU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDJWNGFXWXZNUzR3THlJK0NpQWdJQ0FnSUNBZ0lEeGxlR2xtT2xCcGVHVnNXRVJwYldWdWMybHZiajR5TlRZOEwyVjRhV1k2VUdsNFpXeFlSR2x0Wlc1emFXOXVQZ29nSUNBZ0lDQWdJQ0E4WlhocFpqcFFhWGhsYkZsRWFXMWxibk5wYjI0K01qVTJQQzlsZUdsbU9sQnBlR1ZzV1VScGJXVnVjMmx2Ymo0S0lDQWdJQ0FnUEM5eVpHWTZSR1Z6WTNKcGNIUnBiMjQrQ2lBZ0lEd3ZjbVJtT2xKRVJqNEtQQzk0T25odGNHMWxkR0UrQ2w2d0hoc0FBRUFBU1VSQlZIZ0I3TDE3dEc5TFZ0ZTNmdnQ5bnZmOTZOdjMzbjdjaGdhYTdzWldCSU5nVkh3Z3daWVlEUWl0S01NWGYraUl3YUFSa1dIVWtXaFFFOGVBa0JBRDBhQXlJc0pBVVFNa21nd0lBU0tTRmtUZ2RqZmR0Mi9mUjkvWGVaLzl6UGZ6blRWcjFWcjd0OC9aZTUvOSs1MTltbC90dlZiTm1uUFdyRGxuVmMycXRYN3J0MzVkdDBnTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhzUERBd2dNTER5dzhjRGM4TUxrYmpkNGpiUzU4YzQ5MDFCSFUzRHNDNzY4STFsK3Bnenp0WmtBa2ZKUU9QMDZkbzhoZjhCN1BBOGVaNE8wWU9FNzk0Mmw2U21yOVNocklCOWs2eG8vTGJWZmRpdGJ5TGVDNzY0R0RKdkkwL0RRYzJoK0V2N3VXblhEckt5Y3M3elNJWTVMU2VkTW1hNHRMT0hOMFB3Z2UweWhuYXVza2JwSFB6d01IVGRScCtNUmxqcFlId2EwRjhORFBMVzlMdjJmaFQ2WEJPODJXeEpHM01CM1dsaE1HVHlkblIrODJjT0xneVpUMU1oL2pzN3pJVDhZRDR6N0ljdVp0SzlrbjVPTUR2cXpUNWkwOGpRZGNwdVROOGoyWnA1UHVTZVVicFZzN0VoNTNlb3VuODVqY09jR1hCSysrKzkzdjN2aThyLzdxY3crKzVkTXVuSC8wa1lzWDdyL3ZRbmRtNCtMeSt0bnp5MHZMNTFmWFY4NnVyNjJjMmR5YmJHeHVkZXRMeTh1cjNXUnBWWFZYOWlaN0t4SzYzSFZMUzhxWDl2WjJrVG5aNjVZbTNkN2VaSmRzZDg4NlpPT2l4eWdVQWtWSSsyZ2lwSkxRQjdDWWs5KzVpRm0yTEJXUzN6a25wUjBkeTlMMHpKbXUyMUxoeXJWU3I2bS9ONlZ1eXJvVnpUeXFTeHVHZGNwNnU4THJmejllT0dTNmpwajNsaVp5MzU3NGxBc1FYbzViMmhYUDd1N2U3dTVrMHUzSXBkdVN0TDIzMjIxMXV6dGI5OTNYM1Z5ZTdOMTQvZFh0NjV1YjI5ZjJkbmV1VEc1ZXU3SjM4OGFsM1V0dlhONTU1ZVZMTnovMGk1ZDMvc1hmdmZyR0J6OTRRMDF1RlZYb0UvcksvYVVjRmZNUVdHRndwTXpIc0luMzJpa254YjJtTi9xMnVpZE1QdTJnMHpSZ25OYS83bHYrMGtPZjl1dC95NU5uSG4vaW1kV3o1NTlaV2xsN1c3ZXkrcVFHM0dPN1M4c1BhT3hkRUh4R2xWWTdYU1F4YlRsV05kV1o3ZGQxM05Ud1FTaURHaUFIT2JEeFFpZGNXTUI0b0dlWmZCK1BrQzE5R2crVHBmSUl5TGFuNGJQTmxnZVlBSEQrZkFTQVM1ZDd2UWFUdExTVE9OcE1PSFByMGVpUStKcGo0a2pPbUdiZGtxZnc3OE1KZjJCUzM5ei9RTmowK3F2cWFQVTBiZG94UkpXOWJtdXYyN3V1L1BKa2IrYzFSWklYSjl0YnorMXViWDU0OStxVlovZGVmZjdaNnovK1E4KzkrdGUvOFJWeDN5enR5RU1PQ2tnNjZDaXNwaWQ4VCtWTWxuc3R0VG9ubk5HYmNoNTBQY2ZaYi82KzczdjZ6ZTk5MzN2WEgzencxKzR0cmIxUGsvd2QyOTNTbzN0cjNjcTJ1RGMxMmpZMWFHN3FZRVhrMkJadWgwTmR6N0VyZUhXajY5YldGUUFVQWE2emhpZ0pIYjB2bm5hVVFQTWdCRkJLV3NJZ3dOV3lBUE1VNUQ1YWc2ODBBY0NITHNOYjZpd3JzRjI0SUZzVnlCd0FVbzdvMkVSSzNuSFpiUlk1aHMzYytFSmxKam5KZFFXM01pb3NlcmFSY2dabElZdVltbHZvbEZNR2dOZGVpMzZEeFFOQko4dlFDTkhPd1ZONm9xazlLU05tSW1WMk43dnR5ZDd1UzVOdTl4ZjN0bS8rOU43cnIvN0UxaS8rcTU5NTRZLzlybytxaHZaSERnVGNMMHMxTVNGaGdRUDFVbVh3cHo3aGtuc2x0Ym9tbkJNL2Myelplc2M3SGp6M0o3NzNYL3lxQjU5Nnl4ZnZyWjM1amR0TEs1Kzlzeks1YjFPMXJtNnFSM1ZjMThDL29RbnZ5YS91Wk1KdmthdjdPQWFUWDBJcHJ5c0FiR2piZkZWRDRocmJaclFRTHowdWNwOEtEbnlic3N3Z0wxVXJHVnJTS3pKeGhkRFNCM0JEYi9ISXlRbVZNcUZ6ckdnNDMzY3hBc0FibC9xMnN6NzFTRmxPdUpWWGFRWEFCeFVIWEFwa0EzeWhKUzV6b1FkMVhBYW5ZK3d2YUNUd0hHMEFvQy9CWmZMRXI0VkNLeFVaT0V4dmdzS1NmRExod0pDdHZUZDBoZkZ2OW01ZS96LzJYdmpsSDM3dWEvNzluKzVlZmZXS0tHd0NxWjNtWmo0d1EvUjdJclYrT3MwS3QzcVdycXZYYkd6VmNQNzJuL3oyYjMvaWZWLyt1OSsvZk9HKzM3ZlpMWC91MXRwaytaSTJkSmUxV2pQeHIydGx2OUVjVFA2YktwTXphSnhMa2xkLzVUdGF4a1QyYWtZQU9IT1dZOUpkdnJLbkFDQUdORkVtVXA5VTFyK1BIcmtmZ3VlNEtaM1J5OUFHdHk4VXNja1Z4UUZaaFJVTjQvc2ZXUElPNEkzWHNmTGdsSFVuTWpoZ25SMzlwdGVSTm9VUU9neEx2Vzk2dm1BUHZxSGViUXN0SldVbS9RSFpzcUtSOE5wcjZqTnQyU1psMXNNSEdIVURxR1dLUWVCT2pabE1FN3hFUUZpTG9MQjNjMjluYVcvbkovZXV2dkhkbC8vNVAveisxNzc1ajM1YzNPd0lxRVgzMDB6bXJXb3RMSmJUbDRyNXAwK3hScVBVa1R3UEFuZXUrcHQvNXU5OHo5cysrei80Ylg5Zzc4ejUzNys1dXZUMDY1cjByMnFGdnF4SmYxV3IvRldONyt2S0NRQ1pFd2h1YXFDdzZtOHFaOVhuTHBPMys4cmRjenBsRDdLbFBYZCtxVHQzYnFtN2NtVzN1M1pWZHdsU3MwYlpld0tVTFN1ckV3V0E1VzVUVjhlWGJoTUE3Z1V6c1dWNWVkSzkvdHFPQTBEMkEvM1g2eThvL3BVVHppQXFCMWR6b3dwT2c0emRnWTVsWGZwNWg3QzUrOUhkYTFmKzU1cy8vcjkvNTB0LzRzcy9JZ25zQ0VnRWdEWUk1TkRKM0V5bjdXUWZuRGFsR24xU1AvS2M4T1NzK2x0Zi9aZi84c08vOVk5KzNkY3VuYi80eDIrc0xUM3hzalpvcjJqaXY4RjFyWTdMT3E1d2FQSmYwd3lQSFlBbXZXYTViaVBYRzFwTmV3YXowUmJQQ3Zzck5RQzBmaml0OEVFQjRORDZFZ1dVSWhEb013Y0NBcE5mYUlJQU93UUhBdTBLQ0FiYUxqNC91WHpwMjY1OTcvL3dIUy8vdGYvc2s4SVFDRElJdElGQTZMcU9BSitxTkcyc254WUZVemNtUEFmbDNPNVB2dVBESDMzLzJUZTk2UnR2cksyODYwVk4vSmMxOFYvWGl2K2FqamQwQUYvYTNOTU9ZRS9iZmsxNExlSDBTcVlVbnVYYjVZc0FjRHNQM1YzNkhRZUFzZm9FQVA0MDh6TVlPQkFRREhRczEwQ3cvYk43TDN6aUwzM3NpNS8rdmlLQ29jVTFWUWFCZHRpZHV0MEFFK3UwSlJ5WUIvcmx3VFhYOXAvNW51OTU4bis1Zk8wN1ZwNTQ2dSs5c0x2eXJwOS91ZXQrNmZXdSs3Q0N3TFA2T091WGRFUHJGeS90ZGgrNXZOTzlxQ1gvc3ZiNFc1cjhlRDZGa2kvU3dnTzM5QUNYZ1hySVlIZG5wOXZtMEkyaGJTMG1mTVRJc2FYN1Nwc2FiN3VUbFhkTjN2VFUzM3ZMVDEvN2prZi8yMy8wWnNrVTFmY0hXS3h5N09hUXkveVdUYytUZU5vVVNuM0kwM21aYjMvYnYvdWxMNzN2clcvOXI2K3NMTC85T1UzNlQ2b1RQcW5yZmVlQ1g3dTUyMTJtazdoZ1YwcGhMdHpoYWJFRHVFTUh6cmo2aWU4QUR0QjNvdVYvU2NleVJxVjNCSnJtUEZPeGNrN2piWFBuUXpzZis4alhQL2NsNy9qSHFwNlhCTzF1SUhjQW1SL1F5dnpRVEs3VGtuSyt0cE9mS0RwNVdENytyaGRmK2M4dnZQMlp2Ly9penZMYmYwR3Iva2UwNHJQcWYwaFIrTmxMZTkzSGRLZnZOZDNHWjZ1UGdCUjJXb3hiNlBHcDRRRTlpTmp0Yk85MFcrd0lOTFYzMkJIb1BoTzdnWjNKOHR1WDMvck0zMy82UjEvNWM3S1d1Y1V3Wk9lYXU0RWNscG1MZEhmVGFRa0E2UkJ5ZE9MQWNkMVgvc2svZWZHL2VmM0tmOWM5OHVCZitPV3IzZHF6V3ZtVk93Qjg2UEtldC9xdjZMTTh0dmtwaEhxTHRQREE3RHlneXdNRmdtMEhBdTA0U3lEWTBnTmkyNXZkR21QMUxUOTE1ZHZQZitEcjlhaVZyejR6QUdSUVFMVlRNVnhSN0c2bmRNUjQ4dS85c2IveE54NzdMWC82ejM3WHpmTm4zdjloUGVMNW5DYit4M1d6aitOalYvZTZWL1JaSGgvalVUR0Z6TktZdGJWSng3R3BtNHRiK3ZpczNEaWVaWk16azcya2o4dzJ6aXo1QWFlYk4wN05qdlRZOW1MTGttN1kzWkF0WEs3TksrbkxDcVU5alVDMVM5dDhlV0hwNHRxN3o3enZON3h2OHZEalAzTGovL3BCN1ZXOXFJM1Ztc2V3SGJjNUtOL3RBSkFPSUNjNm9nOHIvOTZmL3ZidmZPTFgvYUUvOU4zWE50YS82RmxOL284cnVqTHhueU1BNkRQNFM4eDhwUlRnd294UGl3QXdZd2ZmZ2ZpN0ZRQ3NzbVk5ejVDMFM5R2VMZ3VXejYrOGZlUFRQK2Z6Tjk3eW1UOTA5VWUrVnhjSlU0UEFIVmg5NTFWUFF3REl5ViszL2F6OHYrNFBmdTEzWDlsWSsveG45UWxydStwLzR0cXVQOWFiNThSUE55OENRSHJpOU9WM05RQVVkM2oxMXhPUy9Ia1RvaUN3ZEg3NXlkVzNmc2JuVFI1NjdKOXBKNkE5N09rS0FuY3pBRENIeDVOLzhudSs3dXN1L3JaditIUGZkZTNzK2hjK3ErOW01Y3IvVVczNVg3d1JIK25kamNsUEh5OENBRjQ0bmVrMEJBQTg0MHNDaDRBK0NFd1VCRGJlOFo3M2JMLzYyai9aK3JtZjFCTXFIdmRtcDBwVEJqZlh4S3A3TjFMTzRRd0FCS0tsQng1NFlPWEwvb3YvNm0vY1BMZnhtejZrbGYvNWNyMy9VVDE3LzVJKzArZmp2YXg0TjVSZXRMbnd3R0U4NEdjSDlISDBydTRGY0lOd216c0FGelorMDhOZi8xZi9ldmZnZzF6aU11L2FBN0YzWldqZmpRQ1FocllPSUFEcy9QVVAvdngvMmoxdy9pcytvbXYrVCtoei9lZDEzYy9OdnBkMXM0OW45TE1pM2xxa2hRZE9zd2QyTmZ1M2VRS1ZUd2gwYkNrSTdEMXc3aXVmK3Q1LysvWFNXNWpUOGZIZ3ZBTkF6bUh5REFCRXhPMi8rYTkrNW5lc1B2Ym9OM3hNVC9KOVFoUC9FNzdacDBkOEY1TmY3bG1rZTlFRDdBVDRacUtEZ0o0WDJORzRYbnIwMFc5NDB6LzZtUytWUFR3eDZKMnZjdVpDT3pkVW5FK2Fad0JvRFV5RGZRL2lqLy9OYjMzTHc1LzVybTk1YWF0YlkrSy9JRWV4L1g5Ums1K3Y1bWJGK2JoazBjckNBeWZuZ1YwZUhOSjY3OHNCM1JSVVBGaGJlL3U3dnVYaGIvN3ZueTZ0NUVLWWMrTGtHaitFcEhrR2dGU0grY3pCNU9lWWZONVhmZFZmdkw2Ky9KYm50ZnEvcU1sUEFIangrcTYvcHJ1WS9QTFFJdDI3SHRCSEF6dmVDWlFnb0V2YjNUUExiem43MjcveUw4cW9uQWM1K1hPNFp6NXp1K2NWQU5JZ2NnN2FaZkp2LzgxLy9jSDNUKzYvK0h1ZTA2dWNYdFp6L1JFQTlIMTdMZjFaU1h5bklxWHlldFBucDBUS2p2aFVNQ2I3NWxUYVFoQm9kZ0k3ZkJoNDhmenZmZFAzLyt6N0JiV1hBbk0zdzQvYnpzbHBhVnhPL3NtWC9aRS84c2hENzNqbk43NjgxVTFlMXFyUDhkSjF2YmxSWCtyaDFicW5LZms1RDNRcWVxRWZCdDJUU2JyYnY4V2UwK2JyWS9tMHNjVjlkU3doczZ1MHAxZEs3V2pFOE5YaUhRMGN2VXQ2c3ZyMHAvMzVCNy9pNi83UFYvLyt0MnI1ODZKWXJLZ2ZEVktlYVpwSEFHam5DWk0vQThET2wvM1p2L0MxVzJkWDMvbkNTL0d0dnBlMFBYcFpuL1VyQnB5NnlVVlA4QjRJbmova0V3bHRWazZkamxMcFVLbTFCWHV3NVY1T0RERHNJT2REZGwxcW44cStXZEV1WUdsbjJZK1E3MmlzTDExWWZlZlpQL3pudmxZQjRMK1V5c3hGdWlaTkFaNTU4azI0R2JkQ3YrVEI1TWZRcFQvNHpYL2w2VS83cmIvOWI3MXdZM0tlWi95NTZmZWNQdko3UTkvb2d5a3JuSnBjM2JHdTd3R3M2MVZhL2k2QXZnOXdLdlU4ak85a3k2cWVteit6c2VTYlV6dy9mMnI4ZkJqOVJ6ejB3MW5ad3VwNlU2dUh2c1ovS3UycHUwZGVOaUtINC9PVk0rYytjMlhqM1BkZi8vRWYxaDB3SnlaK0hyRE1OT0c3ZVNYYXlodC9PMS93dFYvNyt6YzNsaDU3V1pQL1ZTMUJyeWdpTXZteEdNYlRlSER0bjhkcDFPOG9PdUZuMzh1UVRVZXBkeHA1MDVhOE4zTWFkVVFuOVBTbkFucWdUWnVCYmxmamZrOXo0TXo3ditZUGlNU3pBY3lQWklXZGxIbVVUdmc4NjBzQTk0MTBUcVBJdXkvL1UzL3F6YXYzUC9TQjUvWDFDRjdoOVpvYzhhcFdvVjN0cldldDBISDl4M1ZsYThReXdlQzR3dTUyUFd3cCttTVR0dHpyS1FlYWJUbkY5cUFhNDV5Zk45cVYwbHdLTE4vMzBBY3VmczJmL2g4dmZlZGZlMEZrdW9RanJjaGNxSk5QODVwdjlFOGF0dlBGZi9qcmZ1Zk9tZVVuWHRHMVArL3VlMVZPdUtUVm4ydTMwNXJvaFEyZEZMeDlENkI5b1B1MDZudzd2YkNGQTF2dTVjVGd3ZzUyQUl3aGJxdWY1clRFdlFETmZnNzlLSW0rTmJqOHhJWGYrOGQvcHdMQXQwbHY1a25HTTFrMDJ6VExBSUFScERUR0FlQnRiM3ZiMlhPUFAva1ZiUGt2eVhoZTRmM2FUVjdQSGRmVVVlWDBuZlBPY3ZaSXJxQ25UOVBiYTRRdFRCWnM0YmpYUHdWZ2dMVzIzQXYydEx1QVhVV3M1WWVlK01yenp6enpkNjQ4KzZ4bWhvUEFYRzRHTWlsbm1YTHlrOVBXN2dmKzFyZCt6dTc2K250ZjFiVS9yKzUrUXdIZ3FyN2IzektlVmhoSFdUZU50dE9xNDJIMXFyYWtUZmR3ZmkvYTRoOC8xUlRuaGlYM0Fqck5pYk4vNnRzK1J4QVQzNHVsOHJZN1ZUejVOTXNkUUdxTEVXblE3cHMvKzNOKzg3Witjdk9LVm45K3VJTlhkL084OUR3VVNZV09rL3NlQUJPL1RQNTcvUjZBOVMvMmZFcmNBeWkyc1ByZkcvWndJMUJ2SGRhUFNPOXh6WEsyVzFuNzlIZDlzYUFmMWNITlFHNEtNbmRtbW1ZMTcxTHhqR0FPQU9mT25UdXpkdUgrTDJMNzcxL3MwUTdnaWw2dHhYVmJWcGlwdFhjZ1hPTXFYdjBrZ0dCd0wraDhrTG5ZZ3IreEkyMDVpUGRld0xlMk1KZkc5d0J5RUdJTHRwK1dwQjg4angwQS9hQUJ0WHord1MvU1R6YWYxVTlQYVdtY3oyWEFyQUlBUGs2L1o5Nzl4OS8wVFUvdHJhNS8xbVU5OFVjQTRGZDcrTkVPQnVGcFQ1NHNVcEw5R2VybVRxRFgreDR3SXBWbHdIRlVXKzRoM2RPR1VkN2FNdkdBWXRqMUtTM012S2ZjUFVnajN6Y3ZmUm1nS2IrMHN2NVpELy9SYjM3Nms5L3k5YjhrclhMZXBDSGtKNjcrTEFNQW5rWHB1djEvMTIvNExlL1pYWnRjdUtwSEh2aDEzcXM2K000MERLY3hwZWZSRGM5NzBnc2dYOUlnTTcwd2didG5rblJsbTh4MitkN1pNdC9hdTJsTDJyTkhoK2gvblBaNEFtZVVwckNOT0daVVJFWHZBdlJwQUJ2K3M1TUxhNS83eGU4UjlBczZtQmFwTFBsTTFKeGxBRURwUERCbTcrTGpiLzQxbXZQeEE1M2FBVnpYVzFQb3Axa3FvZVpPSlBHcUo0eHhyNVN1WURkQXQ5eXFkMmJTYTNkb0VUbzU2QXBnc1dUczNhc0ozN2VKUHNsK1NkL2JWdUU5R0ROd3U5VFd2RHV3QXdDL3RDeWw5NlRvOGtOditseHA4ci9xOEZCVDNwb0luR1lKdlBNMGk3bVhDcFBuZ1RHcksrZlB2NWZmN2RQWC9CMEUrSFhlMDVEUW90VmtBRE5Eb0N2ajRQTm1CaGlxcDNFQzc2bmszWXFVcm5wWDRKNHl3OHFpT3YyUS9ZTlJwY3VxZmVNQUIzOWFuejhqRGlid1FIM2ZSbWwyWjc5RFVBT0tjY1Y5Z0tVekY5Z0JuTkdSOXdIYVlYYmlQVFdMQUlDM1dsODZBSC94Qno3d1lMZXkvdlpyK3NqamhsWi9EZ0tBTmdFRFppcmZyY1ExV2F0NHE0Znh1TDhjYkRXZE1oZWhnb1dVMlVINHBNODlsMEs3UElUQ3dQTng2alE4bEV2YXZ1STYycDJuMlUvZlFFdXJEQ2RDT2Zpa01RRXpKWjYzK3M0cjZUTUFCU3kxclA3d3B3RXJhODljK0xLdmVmRHlEM3puaTlJQlJkcWpWL2FFRkp4VkFFQzlnZUx2L2ExZjh1VDJaUG5oNjRwcitpRWZCNERUOUxZZjN1R2EzWjdYODJrQVl3dGQ2U2Q5RjZnN3E1QzJvbDkrNDdmaGZLa0pJOXU0ZXlUWkRobHluejVzMG9jdzNVUmZjcnFYRTlwZmtDMFRIVmZWSjllMHNPUVB4dmhudmQwL0RFZzlmU2Q3V1pFS3ltYm5yS0lMd1pNU0Y2WFpuZWtMZ3BkamdCYkZwWlhsaDgvK2UxL3lwQUlBandXalRxcUVFc0FucXRwSkI0QlcyVlRZU2ovMnpEdmZwcDlMWExucGxUOVcvNG4yUFNldEFJMmVWR0xpNndubDdyd215enN2VHJvbnowKzY4MUo0YVcxSlBjRXdHaVU2YzRSeWNTcnlBTjVwOVVlNHNaTkg1T0dRS1VUWEdWVjB4ekQ1ei9JN2xpVWQwWWFtV29KSHprZHFEZXRQSVJvMXdsTmtBbTgvdHVxZDVldDZ2dVNqK2dHWjUvVTdFbHl1RVFqd2VGd09SR1hPNEd0UDFuNENDQjVxelRMUmtvTUFnTWFhM2hPd3N2clVwNzlOcFovUWtVcGtMdFRKcGxuTlB4VE9BLy91bm52bzRiZnhJZ1FtMUpaNllYTjhZWGF5ZGgxUld2UzhvN0JxbHI2d0FlKytmNm43TEMyVlRQd3ptaWZuOVZLQWRlWDhJaXdHdWdNUGFBMTU4SkNpaFlCbmRSNjBwVUtXNzdROWRNOWQwVHpzUU4vVTNlM2R4aFo0NFdPaWIybUJ1YjQ1NmE3cGVNZjVwZTRGZmNuc3AxN1o3bDdTZXliV05OdERyaGdGc09lakRrTVJQSWQzQjJaQ29nSGxzMHUwRVBjQnRBZFZrOTZGUFBEUTIwcUxWcWZBWmoxcFRVNDZBT0MxR2xBRm96VEg4c3FaODIvbDVoOFRQNFBBYWJqKzU4b2RwUWRKQ0xiNlgvREljdmMyRGFJSGRFdm1NeC9xdXZ2UCtsTE5BNGJkQWNlK3VrWFFRZmhCTzNNbzRQempwdE5pQS9vZnhnNzA1V0JDWDFjZ2VFRWZONis5T3VrZVdsdnRmbFN2bmZyd2xkMU9QNG1vRlBzM3JyK0JYVS80N05QczFMZ3NQRXpMeUR4K1d0Yk05K1NYSXVSTGErZmVLbWs1K1ZHZ1ZRSVlsVThrblhRQVNFVlQ2Y3hYbGxmWG45aFVwM0J0UmhEZ3l6KzdzaU1ybklnMXh4Q1NDckxDSmN3ZDJjOS9lTGw3KzRXbDd1MzNkOTE3SHRIV1VrU05uMjVMOXpENDhvWnZPcFZ1b05NT2xaTC9VTXlIWTJyOTExN0RVcHZtV3ZyaEpCNkNxN0czQVE5UjhkWXNyYTVqVzI1ZFUxUXE2NkRlbm5ablN6cmVwTDQ3cDZEOXk4OTMzUmMrb2tzRC9ZNzNDM3JaN0xJNm01SEhoR2VTOHlLUnZLbUxQVDZLTW96UldhY2xLMTBhMXR6UXczSnZWbWxOQjUrYUYwMEV6U0NkZEFCb1ZVUnhLLy80NDQrZjBaWE5JNXN5aDV0cC9GcktMdGYvOHUxTXJXdTFPU1NNZnF6NnoyanlQNmtmZDM3Zm8vcStndXBlMGRPTHUzcHIwWkowMTlpeTNsTjFsMDJ6SHpLSE5LYXdWVDByY0p2NnA5Q0cxTmdtSEdBSGZpZDRxNHY4bWZxMlJ2ZXFwdEZqMnIxOTRxV3UrOXlIVjdvZmZHN1QyLzVsSmo1OG12dzdpdUJjSExBN1FMVEZ6N1VUbXgyQWxGOWFYbjJrZStLSmplNzU1N1hVVkpVT3NGb2NkNUJtR1FCUXkvNzh6Qy80Z25ON1M4djNiMnIxZEFEUUpPUFhWS3V6NzhDQUU2bGFCanplNXFiUVordTZuK3Q5Vm41KzB2V1N2cms0MFMrNzZLMVQzVXE1d0duSFIvYU1jUTJoQVU5RXphTUtTYjFxUFNGYVhPcTNENWVFVW5GVXJPTG1CYlQ2dWMyUkhlQmFIWUVaWjN6a3ZLVkZoL3MxWjNVWjk0aTJjYzhvdVAvOEczbzlaOXdWZERCbkV1eHFWN0N0bFppMk1zQVBuQ1g4ekJJS3M0MVUrL3kwdUNMQS9lYy82d3ZQWFhuK0gvQ2pZcTM1d0sycEt0NVptbFVBUU5FOHVzYys2NzNuTmQzUGMvT3ZEd0RpT0ZGVGp1WUkrMXhWTkU2c2hqMHI1T01iays1KzNSbC9RcXYva3J6RCt3cjIxQTM2K1hrSEIvZlRxS2swQTlwcFN2dlVFV0xLazdCOU40aStyODRwTUdpZlR0aUJYajVOVnpBL3JtVzNlVTNIdXZyeXFtYjIyODR2ZC85T0FZQUp4ME5BclA1OHBzT2s1NTRBWDB6bmNvL0VaU0h4bnVJdG1vTDFqcFBIbGRyajBsSjZuVjkveDdzdlhQbmhmOEN6QUtTWk5UK0xBREJXZHUrUk56MTVZVyt5dEpHVDM3bU1WVGZjdFpSSzBza1o4ZEhyTVFXQUZSRWZQcStCSSswMnRmWG5iY0FzR0RuQk14OHJmeEIrekhkWHk3TDN3T0hFQUx5cnloMis4VnVaWVNucUw3YjBYRWl2cWw5NVpvUDdBZzhvdUNzR2RGYzArSmp3VEg2K044RHFEejlqZ2U5SklKL0ZRYy9uT00zU0w5YURCckxSbGFXTmxVZTVBSFZDZ3p3SzZ1U3lXUVNBMUs0cWZlN2hSeTdvMm14VnIwYVBhelRsK1dXVVpMN2JPY3B5YStnOEgvRnBzS3dxMXlkSDhUVk5FYm0ycElQSWFnNmN5WVFzRkw2K2VOY2c3R3BUNnQvaURvSkhKaDNFTmpmOFBsdGFCUnNpSUNSeWdya0R2QkFUK2xXUi9LeG1PaStoSWFycmJEcjM0ZmhVYWtVMXVTbElvbDUwT01Ec2t4ZVFzR2wxNytLakJJQTBZMmFObjJRQUNLK0ZxZ21UNzIyY1AzZUJKMzU0N0pRZ3dMYXJmUVJ6WnRiZFFuQXFpSXZ4TXJkYkdRd2JHaFIrd2srOXp5VUwxMlFNbk9UTFRvcCtFajVUZzJqQXBONjFQSFdwOWg1U2s2eDNTUGE1c0tWT1UyMkJtQVRsN095WTFDUmdRT1kxK1lZQ0FKLy9yNWtuVm44bXZ0N1k3KzAvbndnNGFKVDZ5QkJxdGtrRGE0TENOS1RHbDgrZHpSMUEyeTRhbmFncUp4a0FXa1dCcS92V3psODhoMjA0blpXVVFKQ2RNcTQwanpJZXpJTkp6OEhYZTdYb2U4Vmd1NC8yNkFrams5NTlVMkJoKzhzQkZ6amRPdEdlVXdVU2NVSzU5RVh0ZzlKSk5WdmxWT0NnRnU4QWYweGJCdlpUU0IyVkp3aWErd084TTREeHlLUm42MjlZT1o5TThkSGZscUpGKzlndzlUaG1sVHpHSkp5Y2hwWTJMcDZqR0tYWk5UM0xBQ0RkUTNHOTZPQWNsbmoxMTZRaTE1T2FweUpsdExjeTBvbjd3S3dVVEhoL1VhYm82UTRTVE5HZFZPQTZzc0JQczJpQUhCU21jUjhmWjMyYUlkcUFZNkhUU0xmVmJNQXdLSXpGMzNtNXRXV2FzcVdGQVlrQ2FwVzhncFlWTkhEWmQ0ekJmdUwzTndTWG1maUlLZlh5aHFCUU0wMXIwaWUvRTRDZTNlbzZBWUNVWm1ZZTJCTTZuM1FBbUtya3h0bTFzMnU2RzdQR1k3UWJmQ1F6NlM3cWpzeFU1aE15N0RCaUdBem9nTU41SUlUeWlrWUZPVGdmT3JGcllWZVFaUThpNkVZRVhrVXdrUld3S2ZYNG1VSk5pd0x0MzMxT3h0S0Qwb2hTaWlQc1FaVlBHRDlzZkw4dFF6c3FuV29VU3U2K0ZFd3grKzNNaGg3dDNsbnlUc0M4bXZScytibmhSOVhvNi9oSTBHSXNYSVFacGlVMXluMm5GYzNJZGQyQTNyNndxa2VZRGt4cDRZRU1oeVdjZEFBb2JnKzNTZ203YnUzTTJzYUtBc0M2amcwRmdETXk3Wnp1dE0zQnJ3ZjZJUld0REVLQVcyRWtGSmdCbzhEc2daTjVTK3RoYXZhSkVpdElwQUJxTWRFenlzT25jWGFibkFhT1Bwd21ycmFQbGR1azgwdGpXNnhUYlQ0MUtUczJGZUhuTUY4QmZNa3BCRHM2Q1BUTCt2cHlkMEc1UHhrQUxab3Yrd1FqZ0IzQTBHY2dacHZRaFFEQXdkcS9kV0ZOTTZXYWhQWXpTU2NkQUZCeW43SmJ1NU9OaVY0RWVvMTNBZXFobWl0WDlycXIraTJBZll3ek1YRy9VUFc5QndrNUFCL0RKTHpEMHo3U3JQSUlZUEo3UWdzMnZoREhjRkRqbkZ0SW1waC9RclBvaURyd2o2Z0VFaktJaGJRakNqZ3g5c2FXSXJNZk4weCtkbTVORUlDb0ttUUZkQUJQRzhEZHVMN1RYZEp6M2F2dTZxZ0xONWQrcnNkSnlTK3JUNXpLQlczYVNaOTRNR2xWSDFud05YTjlqNm5idnI1RUFKaDVPdWtBTU5WSE96dEw2emYwUU0xMWdvQStYTCtpSHdHOXBKY0NUR1dldWNsOUE3UWZnN3dFSTQyU25RZU1OVk91SHI0RUVJWkIxRzc3V3hpaUI1bFBCUTZNWlJXMDRWbWR4djYwVlFOOTFQS1lxVlZtcEdSZm5BYTFGVThlSHF1NXp4WXh3SU5tQitZaXVBOExYM2JIcHQ1R2MxVnZwZVhiZ1o3MWtnREl6M1d0SUUzL1liRVdnZ3FmdkkydHhGVnRBVmEwL1dRSHNLM0F0SHR6d3VNbk0wOG5IUURHQ3N0OWVpeGJEemYzUXdpTVArbHd4NDByekx2c3FDOTkwSSt2SzZOd3J0NU04SG93RUpveWVycE1UZU4xQWxmS0xzejVGQnEwamU3SHRGUjNUb3NBdm5XVk1mZk15dnZWYUREMGsyWW12dGE2clVtcW5KbWFCbVV1N1FnQTBVL0ZOSlVoYzZWSFloT1ExLzdnR0FPYWcwNkpMOFhaWnlpbVJEYVpMS09HUVhDelNyTU9BT2c5bVN3dHIvQXhTMDZnV1JseldMbkZ6NTdvd0F3dGZ3OEFCWnRFS1hjQm9FMHVkbkJaUUVYWEtMaktBK0JrYWhiNi9BQjB6M0JFS0EzYVYyMUlvTm5ZOGV4anJBanoxRklDUTRVcnp4Q2R6SGVXRDFVdXN2WWpFK05jZWhESVNXUXRqVDV6RUlCWTlHMmZRQVhGSjBGTWRnSUFNSGYrbVJqNVJDQ3hoVlNxUitHa3p4TGU5czFraWR1QjFSUmFTN05PdE9WWkJvQkc0UWtmcjhZRVFuMFZjRzdEY0tKR0hWWVlPbTJqalA1WkNlaDhyLzZCc3I3akFOQUdNYi9Jd2J4Um9WLzlEWVVhSXMwOFpSdjdIT3FOODZENS9aZ0JXWVZHZDVkRzlHeHJoRDZ4WXNvZjJCTElRTFhuTW9hRXl0OEN5R3JrSE5sL0tSWTl3Yk1nc1MwbGtMUDlkNzlDOHdEUUEwR0MrWmpRdHduYXlzTFBKS0VVN2Vnb3VyUnpFeXFKUERtTnVOTlQyOGlkeW1ycnA4TGdlTFNPZHg3VUNaWE9iaXZNRTY0clFtblVYcFYrdnROdmhYdGRjd0RCbWpiMHNHb0t5YVNLSnh2N1BIam9VVU1sbjBYbVRiQUVvMHVSYisvN1ZGR0hiem5xN2VQSCtKckM1aWkyK01wd1RDRGE5am5GdWhCNG93VEc5bDlOYU5tUFZSTWYyQU45dTBLZ3N2dGF1YS9sbGNNZmRjSmRCSDM5bDQvK1loR3dNT0g0eGlvM0FuMnJvSmM4RXloMVFobkRtak16YVdna2RGWUJJSnR4ejJseThQWHJHSXpPNHlrc0U1Tnp6cmtIVERPbzR6dmh4ZmxGMXh4QURDSVNaVmRwNkdHWEpvUjVnaENnejJGempxaVE0dlB3ZERSUGpMbjNyZW8wWFVjVUxmVTFlbWlvQWFYUXVNVVh6RDVDSzZXRjI3ckhod2ZOVWJBdE1jbVJhcFRGSnhTNXo2Z2pnSXdqQTNqMkc5V1k5QnpRK0s2QWR3R0NTZHdEWUx0SzBVRkRlZlkvOUZrbGRodHRCMmdwSVFDTXNDZmYrcXdEQUJyckU0NGxmZ2F0TjdBNCsrVE5DWStONWJaelFZNDFPVlhJYTNtMmVwREFlNklyOStBUmczNi84UllUUHlxeEp1NExBdGxXTmtZYlUxUFBRSTg3VlNBUjQzdy9RNHRCRjVkOTZ1WDNVZ2JjUFhvTXFTcTFiODg5clkyeHNJUEtyZlRnMlk4SkxRSlB5QXNvK2FibDRPaEQ5eWM1b25WcUp6d3dsdzk4QXNBWTRDTkZnb0JuWDZrenIzc0FxR2NsVVZTM3psMmU4V2tlQVFDSDg2aDkzeEdDNTMwUEFKL2kzVjMxWnNBTWFtL2U3WFFHUWlnSVlGUjlGSmpIUm5PQVZUdVFvb0xMQlhiR2lmck9zcVVvcHd3ejVBa2tiR05pcmRvVDhrWlhWSzBNS1dtVWwzckpwbUl2Q2RZa2pLb2xaVUFlRlBaWHVHUE1yZVJMYTVIRGRnSHF2d3JMb3VoRExFT0d5c2xiY2dkeHFrSG1LSWtiZ2VzcTArLytDQkM4eW5FL0lMNGx1Q1JoU0c0WEVOaG1rV3hUMGMrNlJqeWFSVk1EbVhNSkFHclJZOC8yNldTbkpuS2d6cDBYb28yYzVLekxPVFNRYlRVYzhYTTBtQjZ6VlNpVitDOUg3Z0JZRWVxTm91UVJvNi83WFNVcTZPektrYnZnOW9HY1RCQVVhZ3h4aGRhVEJMa1FCTUJVMDRTZU1lVHNPL2Yxeks5aXJtVDdXRnRFMFVQY3h0Wml5ek5IT0hveSt6TmNram94TWJFcFhXRWZTYmUyUEFnQVJXL1RFYUlqNnNSczh5Y0I0SVVrWTdIZ2owQXc4MVNhb0NuYnRjY1BoUlgxWnRqNFhBS0FKb3AzQUhqVmRzcXg0ZHlUczZ6NHp3S0JjOGpZb2FVWndrRzBIOXd4b1pqSU1PZ2tJSDZzTVZZR3ZnekVTMElJQUZrM0puM0lxVEJWczM2MjFjOVdpeTRjaFJvOTJ4YzhKUHNpVUl4TTQwd2RMUDlhbWNLRVdxY3NpMzE1QU1WS2hvcVdHNmNCUnhSc2lNRjk0b1VkNDNvQkIxTjZubHRCUS92SG5ObVhLSjhCQVo2RS9RbUEvSk5TMm54d0NTQTE4ZHRTMmRHeCtyTVRaZUw3eFNDTVM4SDU4Ujh3bG5GWlFJcXp3Uk0vc2NCNENCWEowbk9XelZYOTV4UUE5T0dLUElrejAwaWNmeElXdGpKaVVzVExIa3RUcFUyMi9ucStXaWUyODB4YzVwUHJlcUpxK2hZRnQvVDVFTytLNE9VUWZvVzV5cHVGSHg3ellVYkM1S1hzTmxWMkt2Z282R3gwMEFxSFVibkNNQUFHdjFOWERIT0dza1Z1eTFObEF5UWRlQkFzUUlTdHZRcEFTRTVONElnMEhSdTB0RDE1VHk2Zm9zZllCckZVbEd4TlA5Zy9Vc1Q1Rkh6ZEFUVEtldXd4RG55VnJacWE0R2hRZDNsQ0lTOERRWm4vdmx4b3hKd29XQU02aXZod1NLQU5tM2FpalRYQzVoUUFpb2N4VEFsalozTVBJQnF3L3d6R2hPYzNDQi9RRjVIZTkrQlM5eG4zVGJxbnp1bGQ4WHJROHB5ZXRlTHVLeDVPTHordWwvOXRDSzhmQWVxMjlWcnBYYjFNY2tVakx3WmZXV1dLYkJ0VFRtWCtxUlNoT3pScE9aSXhQb1BlMU1pOHF0L2xlazJ2SFhwUnI2citwSTR0YlRsNFkwME03aGprMXFzb1p4MGt1TWNWUWhGTktWUkxKZ2hEbmg2elg4TURNZnNKaUhHNkJTbFpEcDIzbWtaWXBXcGd3elphaXo3SWRzRUhiWHBlQXdBVlNpVjZDSkRYY1h2MVYrZUJ5M2hBSGQrVkw3THI1RlI1Vm9tK3BSMXNjWnFnMmV6VFBBSUFwcFdCS1lOYUkrL1F2dFpEckU1RTlwcFU1Z2RJSDlNRS9xcG5WcnJmOVpZbHZSQnkwcDNSN2QzOGZJWDZLU056QmtZZUUzMGRRMTlqcWp6SVRyNGhGc3IrbEx6N0tYVXN1aTE5TDZwN1VUOWg5YS8xNHhVZmZHVkxyMDNYdStzSkJQeVZrVkZoMVloQWdQUndKclI5Q1NPY0N2ODBubVNaa25zQ1ZobGhkMU9jVXVQa1VMWXNHOU9zcVBZSjV3ZDF3QkJ4UzBTMGIrekp3dG1UdlBOREZPekZYZmFFTDBHRjg1aFJnMHkrM1A2VDg2Q1F4MG5qV2tUTUt0VWdReU54TkMzUHF0VjQ0bkYyMGh2SmRFQzFUWUNmdW12b1J3V1JSYUlEYzdYSUNNb0RIRGUwaC8vU3A1YTZiL3ljbGU3VDlidCtlSk5veHdFOGw4OVkxTTZ0VXZwRHIwZm8zbkp1cVh2NjNIcjNub2RYdXgvOHlQWHVlYjIxY3MzYmt4amVqZ00yVUdYMnBJSnRGVUlNMHhLV2pSSW9PU2tuem9nNnBSaWU5VG5BS1R3dDZsQk1iWVZid0ZQMEYzZGU2MU94NVVqWXVkUndQTkJvQ0k4RjgyQUhnQUR4NWRoalRESU9HRU80bW5zK1hCYjRHUUdWK2FRQWw4TkRHN01jTTNTcGc1VGFtV2VheHc1Z01QRXA2UDlFZnZLRVRrR2E1MFdBaXR5NlpsZjQvaU9mdnR6OStmZXRlTVhuYTFYNUJRL1lUa3RDLzdBaE5HTEE4YU1rSC9pTXM5MzMvTUwxN3BkZTMrcFdOVExaQmRTRE9xb1VnNzNrakI3ajhXejQxOEVoQ3lXUElFQWhlQUtLYzZ2SHRJRllnMnhiNmNUaGJBVy9GSTFrVWs3c0J1dVdIUmhrZXdhM3RLSG1xc3RLVGhEUXY0K2srZWFmY0V3QTAzU2lIYitXdXdRQjQ0V0xSY1pOenV4VWZ5UW5GWjFaUzBQQjh3a0E3WWZ2eGNDTXdrTjFEbGZLVHFUckRFdW1PMGtqOTZaVy92L3dyY3ZkTi8zcWxVNjc5MDR2VjhtaGREamhkNUdMTFNmdXVhakgwLzZqVHp2VC9lMS9zOU85b0pmYTgxWFJuUFI5THVOWStjdHV3Sk9EeXFUZVFWRXVad0tsMHdGME55NkdaQ3ZjK3pIN0dYcldPNEVHZXNWS1RsUFd1OUFDTnJhYW1kVUlDTzIzQXZHVlYzV3h0MEVOR0FsZTZjbDE0RVlIaFZMSDl3QUUrMUtqdEVTZG1TVzFOWEE4QTNvT2FaWUJBSk9jN1BDbUV5RGtVVmlPbEZtd2hKSjdpMGR0bGZuSTdxMjZ6di96djJxNVd4ZVJHM25tUFpMMHU4dU12Z1NDKy9YbXlpOTkrOW51YjMvd2t0NU92S3V2VTdEU1JTRGcvbkFFQW9BYzlBelBzbTU2cE9wVWpRK2dGazJmYnVlUVZFcEQ1TlNLaDJDWldnL2tnWG8xRVdzdzhXbXMybTNRUW9JSDBBeVdPNzRFb0MybzROa1ZlcDZCVUNJSTVQWWZPZ0VCSVNaWEpjMTY0cWRxS28zcG1IRnpWZjlaQm9EYWlGZm5VaUlZWU9DeWtNY3hrdW9rY3JiTTVEaVBuSS81L3ZBN1Y3b25kWmQvUTRqanlKZVl1NTdRbStNZCtsbnlkejI4MXYzVUoyN3FsMjAwK2ZVQk5rR0FtMVFFZ0FnRUZFb1F3QXNpVU5jSnB5UmdaRU5MMGlpUEtxVmlyVDlpVW5FL2FUOW1mNjJETUtGeDFUdlpVcVFJcGxIR1ZrcUd3UWZnMVQrNHhCSVZxTU5FcmdzUUNKVTlzV2xEc044R1ZYd0duLzFLSGZIR1Y4UmpoeEM4VkpwTjhrZVN0Ri9FQzV4TG1rc0FzQ1ZZVkt6QzBUZzNqVDJLcGRVeEJmRDJUUUpaL1o4K08rbCt4OVBDQ0Y2RGNBOG5kZ0VFenM5OWZGMEI0SVoyQVhxK1FUYnJXeFVPQWt6K1BaOFl0Sm9TeFpuOTNmRXd2dm9ZZjNtWnVaVmp4RVRubE5SRGljbThVQTVtU01aRDVrVlFHdEhVc3Y2ZW1hRjNhMThFQWdVRTZrbUVjOVZObXpHM3ZRZUEyS0RwTndCRXc3L2sramVlU1U5VHVEWEhLano1Z1Z6S0ZlckVFOWJaOVdyZjNZUlNjMGh6Q1FBWWhqMXBvTzA2cG9IWmdjakFhVVI0T21sYlBmMXJIbG5TeDM2VFRyLys5Q21STU9QTjUxZTZCL1VXMjVldTd2aVZVUkVFWWxCNjFXUHlpOCtEcHNBeEdYREJ5QkgyT1JNRzJ2N2svaG5YcVd5cUhQL0NIQ0NnOGg0VGtIeEw3azlWVUQveHcxNElpVXR0bkNNRG9PUWVIK2l0SXhQamhTSStLNXVGbVBqQzhkUW5lSTh0WUNvMWRTbk9KS21Ob25ib05wTkc5Z3VkU3dDZzJYYnllN0R1MStWUUdBLzYwaUh1U0FtT1FMRFh2VWZ2OCtQbXpkeU1PcFRHeDJmQ3JqTXk1dEd6eTkxemw3YTh3dkVsTWU2Vk04aVpDdjdDQ2lPSHlZK1R5K3dPSDBjWjhpQVYvdzF3bzBKbE1WQkxNNThMMXJWdEU3c2EzWUl1aG9MUGN1d0N5bTVBL0ZtbnZRUm94SGpoZ0FlWDVXU0g3cDJCQ05CeWQ4QXJ4MGlTN253V0p6ZUJXVFFWemMyaW1YMHk1ekpYNnAxWW1zZElaVGozdU83RVB6SDUrMTBBMyt0K1NoK2hrYnlGTTNSdm4vQVBGajJvTnhWekNiQ3M1ZDgvSkNrbjhtVlJ2bVB0RlV5d0I4NDRDR0IrRXhRb2txYjVmZCtZVXoxd0xlOCtIa3ViemFtMjIraWZBYzYwb2x6eWtWZTQxTUVuakpNTUFza0EzcmJvVk9LbEw2L0FNWGI0NGdvdkFzRzMrSjlkMTh5VDJrcjkzUmFLenlITkpRQlVPK1JJK3NaSFJSNGVZRWpTRis1ZjVYUk95TnZ6aXgwZTRBTi9NWHlxQkFCWjQzUmU3Ni9lMWlqZVljTFhQeDVqSlJCb2hkUmc4VUNXN1pIM0s2RUY0Q1NuR0dXRGdWWW9aT2JxVHcwbHdKVFNNTzdqdVRQRUFmcTV3OHRPUUhCYzY3TWVpei9MSlUvYk1tL3ZBVER4d1hNd3FabGp2dGNpMkE4Q1laaG1mUVlGbXZYRFFLcVE5ZTdNdm9OckQ0SVNhaHpNZXFLVXVRUUFqTUdabVFDSnlqajFPTWtkcUlyeGhSekprU3c2a01kOFA1VlMrb2NuQW5mM0JZQ1kvSHg3a1FuQnd6QU0zREpOWWtlQU0xSklPdVlXZnFkZnBnNjlJQlFKRVlSTDRZUXoyYUMybU5wT3JlN29uV2owQVM0NDZsQTJPZmxLUUdDY01mWTRYRis1NnltcnM2eklZa0hoSGtBK2xKTTMvK0FyMWFnMWsrUkZpMFpLc2kxWm1HRStsd0JnQitMRTlLSnlERHlPa1hRMjlSQkY1OUpwZkhQUDEvN2VFZ2p4S1pTd0U5dFkvZGtGOEc2MTlvOGZsTWlQd096VE12RERRNkloZ0dSblp5RlFmUStNOGFJWFZHVDc2V0FzTWtXZFFON0xMSkF5dDZFVE52cjUvV0xINEFHbzByYkhCcWR5Wnc5V3hnaUgwVVdlc2dnSTBIWGtkVC9yQnpzRGdnQndmdzlBaFJtbjJrOVdUbzJSenlITkpRRGs1VXdHQUl6RjBlN0xZeGlKYjl5cHlpMFRiekh3S1RmeWdJL2JSaVBtN29NeWhBQ1Fsd0RldGtvcjRwM3ZDWGdISUZ1THNaa3o2bk5Ia0k0WitNaXo0bGJtTmF0OTQ5Z0VUOXEzZy80cU04TDZsd2I5eUMrVFd5bFhjL0tLeDk2Yy9FVVk0d09RSXplSTZZTnFmakVFM3BUTG1HVlZobFJVRVRURFJGc29PZWMwbHdDUXYzcUtiV0VqQXpNbTdHSHRUZC9RU1JsUUhLMlJDRkVPVEo3RHlreStvOVJqUU13em9SdjI4aDREdjh1QXhqVlN1RkhsU3lEdFUvM0RHSW9HSHF3K3c2U2t5dm1jZkNDQ0oyRVArQ3lVdlBlRm9QZzNwYlc3NXhsVlBvRml0b051cE5UZmVIQUNrc2QwVU1MbnhJMWNZNnNnMkRWNE1qZEtVNThiaWlGT2RBRU9xaUw0L2ZYS29lVWk0KzA1alJrN2JOL29remdSdUdnMGo1T1FlUWdaY3drQTZPRU9UZU9VcDNNUG9hTlpzbXJ5eDUxYUJCZU1janAyMWltYk8ybzd4OVpORFRMUjJ4MEFocUlIT3dCR1B3OEU4WlliVHc0YUVuOU1BR0FkeFVrVkIrb1dpZlp1bThSekNLN2JpbWtaUEdmSHZWajBiM1hIeFBxSkFMcXFvbGRQRVV3clFzSGhGcnNHT2JDNmJ1UlV4WWQ1clE5LzNnTUFWNnI0WVNLeFZjMlFjZElKbVRZRndkbndTVGN5UmQ1Y0FrRGFnNEdaeW5qTjRxRnlkNTQ0NlNqTDFNbWRrWEl6UDVTMGtKR3NSNnlhMVE2VnUzTUxwL1U5VksxZ1FpLzh4dDFzRGh1dTZGbi91QWNnUENRU0U4T1R4YU9wWGdBRXNlQ2lNT1VNZlpRcXhrQXQxZlpHN0hkVXhJNXFTVVNET3VscVVCdlpsV09DZW5HNUVQWmJsb2lJOUtHVHhXY0xLbVMvMUU4RWhHQmg4ajJBd3B3TGM2TlpsUVB1cEZKZW50ZzhDVTFkVDByK1FYTG1FZ0NpQjBJRmp6RlpkeWZQQVNBcEEwaktvemR4bXN2UmxNdDA4cEhUU1hyL0dBcU1tOGRXdHY4OFQrR0VUQnNiOXNiekFCcit3bnZlUUFNdWVWUXE1K3FnREE0SHJPUkZpY2hLSWNTNjZTcXpKMVhVa1lDUmY5STBUM2dMd3BDUW1QYjB1Um92cTMvYTNlZWlhZlppWGI3eUc4VmRGNUpFNXNSbmkyL1hDbWxZT1RzQWRnZndsK1pEaVJtZDBkdTZJUi9sNXBUbUVnQndMdU91VHRZN05NNHJvV1RFUFlBaWJJNU91MFAxajE1ZHR2R2VBOThFWkpUSW9aakx3U0JsbFpySUdRelV2RHVlZVF5bW5PeGl5RlJIbXhBSWFsSVVDM0pFZzYxSDlWQlQvV2pnUU1RQmVzcEFUMEowTnF5Y2lhK1dQT0dGbi9CdEd2eGdaMlJPQUloVTR4NTFRQlVDTURUOG1OdC9aSUpqM0JJUTVwSlNIK1VGbkV1emN3a0E5U1lnbHJYSEVVMTBJQ2wxTW5wWGVWTTY2aUJISmo1emkxUmhVRDZpYmdleGU4eENsSDZvbUcxTVVmY2dFYTdqbTRCVXhnbkNNTTRacER3SE1IZ1lpSFk4Q1RSQnNqSFY4RVNKb1krQVhwRW8xYlAzQTY0WEd2WWlnSFJJTmxCUTQxd3JIeEhvWlVmRktxMEIwZ2JybjVPYjFsVTU3d3Rrc0t1VHYrb1htbkllQkFEcUNzZDJ2d1pRVkZDWkp2SmpRZXF4Mk1DYkIyd3pTVFJBZzVuY3oxbVlYVDZYQUpBVHQ3WFBUMWdkd3k1M1JPbVVjYWNlUTl6dHE2QTBqYzQ1alp0bHNISjRrRElKeXdEaEJpQitZRDMwbWdqc3dSUkFWWjI2Z3hHbVlrUUZvVTJFb1VrS0JmdlFWWnI0UkJ6UWd6WkFGV2x0cld5Z3pPVXNEdk1xUklBcVY3dG9VRG83QkpIYmNPVTBFQ1RiUW1CSW5BVnJsdHVXRUdlMU03QkFUNWc2K0ppY0JVYi9FV2pKWVp4aEl1ZzRLVWVmTE02d1NZdWVTd0RBR2pvZ0Q4bzRtSDQ3U21yNVBSbW9MRGsrQ3BFaUtkRlJpbk5MU3p6ektBZEExc2x5OGxoWUxSd2VRQ1VHdWhQQ0MyeDhRU2U1RkNzclFOVlhBTmYvN0FKcUtrSThXSVQzajFjSWx6Y0FNNi84TkI3L1BjcXpvclNUamRWV2d5MVlLckd2MjBJbTM0YW41UWRHLzl1bU1wRlRKeWEyRkVyYlBORnBWazVvY2JEejhhRnhGUGlvVkJtc21YQWx2dzRNam0wK094L2VFa3gvc2VxdlVKKy9wbElEcHBpVHkvR0hHckMvYVdpbWpmVnF6eVVBMko0MGpyWUZZeS9IVVJOMXZCb3FwM09RN1pUeUs2S2hKYzhkNVkzZ0ErVWN4NklEaFEwSXZnUW9BWURQL2YwREpySStYMmpCVFN0V0xnOThQT3VSMityRGdJNDBXSDN4MjZBbENvRUVUNTJnRjY2U3dYV2NsRElQckdzbFExT3Y5REFtVGpZeEtUM2hnV3lqaWdRR3RDU0hYT0ZvVGU5UUNSc282dkRpbzl6VXpFWENoL3lNTlRjTkNRTGNtVWNlZkNTQk0wdkZsSm0yTVUzNXVRUUFKcXdqR3hvVWJ4NW5CMEJWTGgyWUIra3d5ME40UllnNFNxWEpiRHFxSkkrSVpWNVpCSjJjNVdSQjZWdUlyMno1dFZGa2xDRVo5Z29Cem1vS1NIMk1NMjhWWWFDbGc2RE1nUFN1UjdudnFSUTh0Rmp0eURuNnlkQzNGTzJMZFdwQ1JwdmE1d0JNSzUzWDh0WCtiQ3ZlQnNaZXB3cE1MY3BYYWdsalNrclFtSUt1T0pXQlFSdG5tSlA2ekFnRlNlVytaRUtzK0hMOFpIL2dKOTgvRUkzZzZPMi9jbDVhazU5V1VZOWpWc2xCR1FjWEozTnZZaDVwTGdIQWR1bUV3L000emh1QkxFZGVvWU5JZzBGWWNFR0pjL0tQY1cyNWhhZUlxT1JiMFdBYUQ0NldIMXFXRXg3ejE0WkdnTWV3Y08yRFFMNVJaNWxBREhBVmRDSkl4YW9vQkJPZ3lNcTI3WHZxRlVUaWc2M25weDd0a2lPN3pST2ZlZFRkZjdac25jaDVUVHM1N2VaaWtIbmdDNzJLb2NYUXgrM29SRkR3elU1UkFoZk13Q2pvakx6QXhvRTBFTjhqc1AxRmtSM0p5NThCNTJmQi9MR2ZhSkF0UXdEVndXZHF3RVNkV0o1ajJnSlJZazVwTGdHQWtJdE5PZkN3cllVUGF5c2RrSjNBWUVlbUI3MkIvVkxjWnFrRFRCcmtwZUFzQ2NGbXhrQ05DY213UDBlWFBtbFFlM1NHamlaSmVROUM1ZGdCcnMzN3VqMEVIVVoyQUZ3R1VDY090djlNaTlpeXhnMHhsYlNVN0pwRHNsVjVXU2QrYldoTis5bDF2VFJoUTk4czJpRFhzUzU0WFhpK2JRZ2RQZzY5ZnRBSGRRa0FjUVNNUHNqTkhQWDJKUlJVcXJvS0FDWVFNUEU1SE5DVTh5bzN2dVRFK3h5M3RMM2pGNVA0SlNkK2xvMDNQTjhRekc4OGtOOFVqdmNpYk9JSER5QUZCam1kd01BcXp6c1NVaS9yV1BXVW4xQ0FnMVJnOUdDYlQ1RjZmcVRhL3BQTjREeklvRVRLNmxrKzBWeHRvV01kUTdKeEhta3VBUUJIdXdPd3FCanBqanFHaGE0bkdWd0sxQTVObUhaR01yTTh6bUUwcmhDU1BoUlFzU09wcWlzU2d5elRWRTU0eE1EMkRucHVMZDIyY0tZSjMrYklneGNjUjZiNEdGQ0RSTTdrajhua080TzZ3T1U5Z1d2TFM5MVp2UWp4NHZwUzk0QmVJWGEvWGlKeW4xNk5mRUc0czNyRE1KT2RpZTdKTGNGaTk0UmhBakJ4UlBLZzk0dEdKTnAwK0FxZDYyaFBDdEU4MFlweTZFcWltTEFSNVpScVF1UGEybVYxSHYzSHVNQXV4anB3SHByakFZc0FYd1NKbVB3RWd1djZTYlhMT2k1dDduVnY2R2VWWHRkeFJmQjEwUWdtN0IzNFpTVUNGM1l3a1hlMWxOTzJrNVZRUVhUYXhpNUkzbWNJNSs5WkZGMmh3YWQvODZRSTBDZWFpbURyS0JpOTVwSG1FZ0N3RGNQcW9US1RBYWNlSldVbnNIM2ozK3VmOHRKNyswUkJ5dFRDaVR2cGZOeEcydGZpZ2RPT3BOOUtqK1RaMGVDK3FZRTgwZHMvK0xHUUMvclpza2YwcXJESEw2eDJqNTliNlI0NnUrTEpmMFl2RDFsWHIvSlNWRloxOGcyVk9XS1ZaNldQZzhuaGlhL2M3ZWlVN1kxMVNoc3loOTdDWS81cDVXbXlVd2E1eDRkeVB2RWdHTlNKcnpJLzJMcXBKM1UydDNVb0tyQUxBTWZCenVDNnJpbXY4RnVMK28zRmw2L3ZkUy9wZU8zR1huZE51d2UrRUxRcW52WlNoQjBFN1pGNCs0OWNvQ1QvQ3NmT2piR0ZOOWhOb1RkbmN2alNqbEpkbUR0UExDWjE5WmZnd1NYQm5Zcy9VTUo4QW9BNktTYy9tbFJERDFSclB3Rm5TMHgwUzNxZXZJV2JhaWJwbEt0dnNzR1NIWjk1aSt0RlVMa3ZUWVBhK2dNNm5TbEVyTldDSkljT1J2L0FSMDQ1QnQ2ZzlxQUFQNG1QK1o0NnY5eTk5WUhWN3FtTGE5MGplbG5vUmUzZnoycFdNK25QNjAyb0YzU2MxNCtnS2hZNENMRGFzd3BpQmdmdGNiQ3Frbk1mWmxPSGFUcGxIemtIRDY3UURSU2NNcWNEN1UrR29uemFnQStjbEZjUXVKUXpYMUxnZ281dmVNbVRmdDZ4VHJ5c1oxc0lCR1h5WDVNeDF6WW4yZ1VzNjlKQkFVSDRxekx1VlFXQkY2OHBGMDd4UVR1TzNXNWJrV1ZYQVpXeDRZYmtXOThES0FwNFlTazk1WnVxOW9ONGl0YlZEbFVucFpnb0hmT01vNVU4TndvY21ObWU1eElBTUlHSTNvK21LR2RuSHNYRWREYU9ZaUE3SWZzQVlhMHZEZXVVT1hWYjJHVWpnSTZmMEsyS1VjSHJpUkFNSENiTklDL05vRDUxeG1iZ3Q4Zk82dWZDM25WT3EvMUtkMTdMKzBVdDV3K2VXKzRlMEN1UTd0ZlBINjFyaTg5S1RuMG1OY2QxY2lHOHhkWnNRUTRycXlkMTVsUWdrZXNnYy91Smh6WktZLzFHNUFPTFk1SGpzaXVtY09XZVpDVUg5bEVDbWk5VGhGdFdvT0M0b0tDbkgzSzI3dGhKVUdEeVg5Rng2ZVpFdXdBRmg2MnV1NndBY1hWcnFmdkk2OHZkczY5dkM4ZHVha2t5WWc4UU9uR08xWjZjSUo3bHVNR0tEOVY0aytDSXVnM3lpQ0NCK282RkhMRk4yT2NTQU9pVXVwb1UrQmk2eHVCVVJiWkhUUDdCUkp2U0ExTlF0MnoycVB5M0ZIWUN4QndUOStsNi9yMVBiSFJ2MW0rY1A2d2djRWI3ZW1oTWRGWncvYkN3WG9zdW4ranc5bGxsbG5pdjBESUtQM25JNnVSY1pQSThBQkl2OUtoZ3pGeE85ajhuQTVGbEVaTkloZVRWTzRPQzcwOG9FUGhlaG9MRWlrYTFOa2pkZldmMVduWFY0UkxoOGczdEFoUVZYNzh4Nlg3ZnV6YTYzL2lXdGU0bm50L3FmdXpqVzNyak1yKzhGSmRXUkJybXR5ZWsvWUpuV1AxeFMxNEdvRVY0TEdOQjZpWENzVklkeXhJRVBLODBsd0F3K0M1QXNleW85d0RDM1ZHWnp2QktTaEZuY1lnaFFkQ2s5R1BOQytDSlVSaVNsc3hScmxnSmFWdTIyT1lFMzVET0t0SFVqaURWc0FDMnRWb1l3VmszcTZEci9ick8vNXdIVnowSWI4ajR5emMxNGJtMlZRVHc1OXZDTVRRWnRIbDRjcUFkZ2xJWURZeFRhYkQ2WkV3ZmxWTy9FZnBZeFZ1cGhjQzB3WERUUXVxQXpudjRRRFIyTzNRVkJ3SEJRVUdqTzNjSjU4OHBJT2pnbnNIckNnUVA2ZGVZMzNMZmV2ZWIzN3JlL2ZRTFc5MFBmMlJUdXdKK2xsMEJSTUdFTWVhSmlKSldsQk45RzNjSElKcWtCazBXTlZQcWwrVkQ1UkpTSno0Q1VHQU9hUzRCQUZ0c0U1MmtBMFB0dkdNWWFGbFpIM2twQXlDUGdtdUxPY0FQeWxOTUNDeWRYSkV0VUZ1c3JmUURRUFV5WUpRQkFyYzdGaVlWUEVDTkRIVUwycko2T1VVMGRZVmtkWC94bXI0TnFLVnNWOWV2RTIycCtJaHVXZnYrRlMxNzVId001Z25UQ0tHWnRMZEtCRGxPVTNDSmF2VWJWK3VkdjQ4U2lOU2xGWFlBSytoc0s2c041QXRaOFVYR3dONUNwS2xkK1l2QXNLM3RFVHNrYmlCTU5OS1hDQWc2TGlnUVhOUnhYY1NYTG5lNmxGcnRmdlhqcTkxUGZHS3IrNmNmMnV3K2Zqa3VEZGhST0RISjFZbmxZazU2UkdPMGxaY0kzakdvREdXc3AyWGM1dVF4QWsvNjZqYjhKMFdlU3dCZ0VIb2doc2NNYzFsd0hFZWxmOWhCMUNnTmNpVE1mRHA1d3AyVXQ5dzdsanhGSWdva2JhVE1GTzdEb2hqazI3cXI5Y1pMMStJdXZwYW9GUzFyeXhxZE1lazFCR1ZrM0szT29kbW9jdGlHcGxWSmMyNHI0d0RHTVpyT3VFM0NYdmZybUM5bGlWNmxGQngxTWdIbTlsMExlWXcxQ2R6UnJtbExsd0dibXRUWENRYjZaZEFWSFU4ODFIVVAzNmNBKzdvdUc5Wlh1L2MrdXRMOTBFZTBJL2p3cHA4LzRCNEJFUndmdTUxQld5cTRyTjJZZFFsaXc1SnEzVGEzem1ramVjSzNyWGxuREhNSkFMbHF0emExOEZGTXdMblRvbVhGTmNKYVA3bzluY1k1N0lscnFob2M0aWtaNHo0SHlvNE9yTTRGNFV3RHhqd01IdjB4TmNkMXJITUtHVFhlb3FtNU91Rm53cGRqY0NOUkVkWFBBakF3TFQrYUQ1bHQ3U0k0bEt3NkdydHZleEM4eVRwU3FTa2V4REdsM2FaVytxK2lXb2NrVWppa3VBV0xHOHJFdnA0V2xjWiszRmVXQ0g0NGhzZDZkZk0vZ29FQ3dxWWl4SVJBb0k4YUhuOVlsMW9YOVhIcEs1UHVkNit0ZGU5NVpLWDdlejkzbzN2MnRWMC9RSlZCeGpzOE5SQmVSNVA0Q0RHMFZMK0kwZnFsUFlmTnMxTG1oNjEzaDN4ekNRQjR4UGNCRkFseU4wQW5EYnYyMXBZTWVGV1hvR0s1T0F6NVdTWXZLZHVpbUdOOW5MYzBWN01nUXdlZWtpWHp5aWdFZXVaQ1p4aWNBTnIxSUZJT2ZUeElxNHdSZ0F4V0IxWHpoUGNUY01Vd0xnV2dJTGM5d2hralFWbWtTazJEUXNWUy93Qkt6ek1WT2thdFVSWHNUZjhGTUdTd0QybTdNRlgrd2pZdWo5VmtWKyt3ZFFJWUFBQkFBRWxFUVZUN0ErTGYxbVhDbGo0ZFlHY3cwU2NKSzNxMjRzbkhkWS9nQ3BjS1M5MS84cmxudTMvNDcyNTIvL0tYTitQQkluVUVmempiZllnc0ZYbVJTS0dvWCtrUHRPalQwSUllUDRhbTNTc2I4NXgwZVM0QmdHc3Bic1p3ZDVaalRlR1lEMTZHYmpxOGFjUmZUeWdOVStZQWQ3NTV1TVdPTDk0bXl3UEpSdXMwemxzYThMNUVRelhkUW1NUEF0WjZKUVlCbVFZQ2Y3RURLRzBMMzBwSjZTME9FWU1rZWZ3d2lEK3JsclQ2cUsrdmc5UVd0cXVDanhwZEJoTDJGN0xoL1JSaGVtSVBUV1U4VVNUNnU3MCtBZ3ljWmJvWkJEbUNGbktaalgxOUNhTFFaNDFGUGQ3UFNVaWVIeWpTc3dJM3RDdFlVaEE0cHdjUG5ucENZL1dscnZ2cWQ2MTNENTlaNnY3eHMvdzJJMDlkU3JUN05YSVZhb0NtdjBYT3BxT2hRNTZSdVZvdVM4ajN1SDZaUTVwTEFOaVFRL2ZPNithTEl1MTFkY3hOZWZIR2RueVVkU3diMVdrZUkrUTZIQUFrbHlBelRpS0xLYkFseTJMTnN3NzBNbTRTTmRQOE1PMmxQdjVsSUgxVXRhZFhYL2twTmhtdDRhZ1Jxd0NnQUtqeDR3T0ZnWSthMGpkRHAxVHNVY1hkQVQrR05NdkRGQlZzWDRQMzUvTWxhTmgwR0JxNmxabmlFMWc0OG9FcG5oL1kwdXJQemNObEJZSTNhVGZ3MGllNzdrdWVXZTBlT0xmYS9jQXZoMjhqQ0FSc3YwdUdtMVFiTkZPYnFvQ1F0MGtFOFZVV1NPMUVOalJYZUFweUhta3VBWUN0MWk1YkxSMmJjdTZXamsxZGpCM0JQL1pGQ2ZxRzNiODZaUUJnSW5oeUZLKzVjMzBxWXdGZWFGUHlVc1YwNUkzVDdmUTAzWElGK1Q5MkF1anJ4VW1uL0tMSlFVWm5zK08yc3V3ZFFOeHBrbnJpWnZWSFdSMjA0NEhJOGlOYWZyVTEycElFMGNzSklGSUtOcTJuZ2k2b3dqZ3N4ZkFlNHdycnRBeFdsQnVrVzlmSG5ud0V0MVpyUk5SeElKeDNXQmFuVXluYkwxU3NkY1JWbWl4WnRiSEVEVGZEWTlNRTA1dmNIOUNZbmVqZXdFTVBoSnpQVjBWMkN0Ly83STQvS3ZRTldQZ2h5ejc3WHdYa0c3YkU0YWx0YTBpSnk3enNOK1lISC9IT0k4MGxBRnpWOW1wYnEvT2xTenIwc2N2cmwzZTBBeURLSHkzMS9FeDJuTzJUSCs5YzFZVFkyVkhZOWlZczVOSVpISmx5Y285ejAwTlVzcFo4S3JMeVdKL1M2WWxrb09XejVJUTRlTkFob01KbG5oZzhoWmpWRDh6OVRUcXZDaUVOUnV6bmozc0Uxa1YwMnFuUElzQmEwNkJRSjBRbEZ5QzVNcGY0bWdKc0VKVnlHeUFkUG9YTmVpZmVoWDVoeUphY2EvYVlyQk1YVlU2ZVVlSlBJVUpYV0F5ZTlFWjRwRVFWbjZ1RU9rQ3lMVzc2OC9neGp4UHo3VVFlcnJydmduS1ZmNzEyQk0vcm1lSi85dXhOM1JqTVQySHdkMytra3FqVTZ4SUtaaHRXWVhUaUc0MnIyZ0tzYWZ1L3JvVnk3NDBSdzR5S2N3a0FmanBOMXJjT3NJT09ZUlQxR0UvTUJSWkIzd2xIVGl1OEZPR3JZdys0OEkxejBKbUMzeHlKR29zMlBycFVZTU5LaDFQc2cwQzBYOGFnQ0QxN3JWOWJPUmhneTgvWFozbnpyN2YvS3BQN0ZWYkN4d3R4TlFoUkhzRmtkZlExQ3JaTjdFTUhZaCs2clROcmVOUjQrRWhuQTRXb3pNWHFWSlVoQlZJK0taUGQxWFJTR1ZJdk91N0pWRk1rcDZjRkkveDhjWXBWZUVzUERmRTQ5WDM2aEdCTDVkLzF6blU5T2JqZC9lekxPdzRDeUtHK04xL0tDVk51QWJraWdFZFZlSkI3dXdRUEFYMWVhUzRCQUVlMEJ4M0c1RDJPblV4OEJXWFhyMDRxM3FXTk5sRTBxdUNUbmpuRVFtcUFBUmppQ2hQNjlqcHpVeTVLMmZuSXJaMk5iQm5LY0NCbE8zMzlnaXdJNklESko5QXArWGt0T08vL2h5T0dlT1Jjais3cDdtQzhFekNEZ0dxSlArc1dVVk96Y1h0VG1TcFMzRWVyVUd0T0JZci9wdElLMHRPemJiUFVjYkNEcHhnWjIrZTRVV3BVMlIxQVR6OE1RMEhCeWsvN1BGWHFjRW5BUTBXYnVuZUY2eStXbmNCWGZ2YVo3cS8rNkJWL2wyQlpXd1lrdFNyU29sL1ZwcHdidC81a3dMaGkxTFJNQXBnWHlNcnhOSTN0cEhGekNRQk1XaVlIUjNvSzhDZ3BxNUxuRzFUcEZFZC80VEp2NWJzTm4wcjdOTmlVWFN4bFlDY3JtWVZodnA5VmsxSXNjVzBYVTUzcWJSQ2dSeE1YOG5YT0VRT3ROQUhxb0VSOWRsRTdNaEorRHhEQkVSRFVMbmdoOFlGWGZ0c2dpVVhvVUhhMkdIcjFiU1lYZE9DZXIrYzVZY2g2VHBPWnVvZ21vNkxFV1VkUnl6aE9LanZEZUpMTHdvekxoWmpTUXBDbHFJcisybUNFakNENTY5UnMvLzFSb2E0Tnp1cjdCVS91TG5WZitta2IzWGQvOEhvSnZCSU9QMHUzYktJdUY3aStOSk1zTk9PZVJyWUJLMGViR0QySk4yMU9VV0F1QVlEUE44dmlWUU1CRDFUZ21LT2tjRkNwRmJNdXFqT1Fpa2NITWxYSWhjQjR5dFJvOGxJc2hCQlh6MmJPVWhUYVpta1NMTTNueXptTlV6a0hVSEEweWpVZ2trc1IwTExhc3BFRjc1dUFqallTVHFORVZjcksvVEVndVNwNzNLY1ErSlFvRnJDVXdCNlVzbkxtQi9HQjc2WGVpdXR3dEFQYWs4TXJKU2UxTU1iUmZDRTJKS0ZFS0IyRlQxb3RtZXlScU5pWGFpd3FIZGY2a1krWWVSeDdTemNIbDNXWG5zZUt2L0RwdGU3LytkaG05K0hYZC9TeGRwbXRYcEg0aUR1N2huQ2pIWUtFaGI2aExCcWtGcUZMTEdwUU9aQVduRW1kWFQ2WEFJQzFPTGc2dWN6SzR4ckpkZzhuMDBrT0xGUDhnNE45Y0FKV1RudXBRK2JJS0N6bUd4WUNOZUFvekttN3QzakkxUkhYNEVrcHRVVHdtRktPMmRZQjNoUk43c28xMjZjQzEvdDhMTVNEUDdCeVprZ1oxclhVUkVwNDhpUGZCakZCUkIwMDBqWjRTSmdHU21yQVJKMXdIaTFVbFN1UXpRaFJsQmpZSnB6RGdjaXVranhaMytXQ1RGSDJUdmdTdGdFMTZ5RXQvcjJTTTFHNEI2RC9ibDFCZ1BzRFgvS085ZTViZi9LcW45SGdVaXdscFV3K3BzMVdJa1NvcEk2cVRWQ2xKSEFjbnZ3Q2dqK3BzOHZuRWdCd01CTXVEeHpGT0ozbWlGdWJHbDNGNUVkV3JRODZqMFpBb3BLUHNsTUZvbHFpYTNTb2lGc0RqWmpCSUhKN0VMUGhSb3pSQjlCZ2EyWFdha0p5czVQSFdQTW1JTG9hNXZxZklDRG1hSzVNZmtvcERBSndNRlN4RlVpK2lyZ1ZjQ1RtV3dscWFGTVVhNXNST2NKZFU2VkUwNmhaeHBNTGdhazNSR3VWd0VjeHBtWGZCTFJTU21SQnhTVlZQQ3VnMXdaMDI3cEQzeWtBOE5LU2R6KzIyajN6Z040dDhLcStQS1NaeEUzYVByRkk2VEpORTU2eG1ndEZ2WGN4Nm95Y0R6VHJJTkFMbWlrMGx3REFLbzBUT0p5VXQ5MXhGQXVaL1BTVjY2ZThLUUlndWMxQ002dE9XYVhxQXIzQkYvYWVzU0lDOEdvZVZZeklIUVQ0YkNPTmEyMkVWblVlRWJ3aEt2U3FYL0lyQjhlZDZMd0ptTXF4dm5BM2xKdUF0QjlIdE9TZGdPbzV0VUlUZDFKNXlqNkt2TmIrZ1lJSENLbHRsTlV6SFNsOGlBcjdzd095ai9JeUFLa0VrQ3BHNVI1dUtUaXhVSkR0VGxWd0tRTDVQZ0VQQyswb0NQQkVLNjllKzRLbjE3dGYrT1JWdldGWXZjRkE5OUtOVmdUbENGdmNvSTB2YkNFVFhUaG9CeWlTUzdTcFloV1J4Qm5tY3drQStZd3pSc2JFay9tREdYaDdDNm5iSm9JdDJ6SDNsd1VITmNVbUt1dFZmQkxFYmxwaDhQQkk1dHJRRUVIbnBCeFlQRDdJQ3o3R0NaS2lZeDBjVEF4ZTZyVEpza1EzTjAxRnRkQ3JNSUtHcjM4T29QQ0JKSElvTU1RUGc4WndpeW5DaXBpQ2k2RGpaRFIraUhSSXRsN1NxRUl4dTZjbnRJOFFrNm82cUpvWUFzTjJWYVpvMnFnaHk0MnBsMDNBSFAxQVkrSjNGU3JqUXhVRGRCQmdZbkw0Y2t3N0FHNjh2dWZSMWU1QlBTcDhTUzhtbmVqdWRINGFFWjBaN2Z1R0lBMDJUUVFsVUpDaTNTZzdBQmc1KzlOY0FnQ0JNWGNCTnBTeWJNTWZSMDNVb1dOY3YzZ3g1SXlraWVhT0ZUOXNGUzUxUUNhWVFDMmpWRllBVmtLNjZhVVpsNFZ3cmxPV0FkQ1B2R1NsSmtHdkNGSUdzU3dzaG5NWEFBbGFXeVpZZWdkQTFFTUl4bWNTenZjQXlQa1QyVHFNaFNUL3NYTUV6eVlOSmVQSmtvYUUzcTZHN2tsdjUwTldoYXd1QnlhWTdKRTcxRmRVTkNIT3RyOHREMm55YWVrazM4Z1R6S3ZYK0J4NlI3T1V5NEQ3ejB5NnozaDRwZnV4ai9LRklkWFFRSjlNK1NCL1Z4MnpMSjNjSHMwVkRUSlBoUkJQay9NS0FuTUpBQmhwL3dwSVB6T1dNZlk0S2VWUlArUUtFbUI4RVpod08xZXliWExxRXBSSTdwWUNSMVlLcHBtbGRoaUEyNDJLUFZGSTQ2bXF6bVlsWUJJekljbGRqNXhrbmdJVzJLUUNrN1dKY3Q0RDhBVEhnSG93MEtNOVpNUVE2eHNDS21KYmtiZUZiMVVIMnV5U2JKa3F2TWYyME5CZTQ0dmkrT0VnUGJPRnBQZWNSYklKT21rbTVyMEVoeFA1bkp3KzRQa0FQZzFnc3I1YnU0QWYrK1dibXZ6eU5VR0FxbTVmUlAzemNCSUE5d0U4c1UzSHlNQURJVk5rMCtIaGs1MTVwTGtFQUQ3RHp2RnFvNm9Eam1kaU9GaDE4VjlKT0s4dHUxam96blJxYyt0VDZvQjNmY3JpcXZKZE1qSk9Zb0xQY3BUbjVEYXVDRWs1THVya0lPRGF3WURzMnBoZ0JsQ1NNMkJRaG8xa1BWWHcwNVNLV0JwM2xwbDRCbDE4REtqQktWbDUzVW9qVmJZbHplYVVlbzZsTzFDTmtTbzdHSTd3NllJUmVsUlVTL3IzUkN3VmFqMDVJMjAxSGFYd3hVZ0NSZXNyZm5MRGhTZUNRbyt4UElvQ0NBSXU5OGh1ajQ3Z2FVRTE4dGI3VjdwemVqRXJQMnJpajdjdEgwMVVUeks0ODgrQ2h6Z1dwQ2tiQkdGRFgzUjJBREJtOXFlNUJBRDVvdzVrWU5KQkF5U28wOC9wd0t4UDJYSUFpdHlzbVNnY25yUnNPM1B3TVJSQ1AxaHowSXpFUVlyT05DUllqUEM0ZzhtcGlMeVNRNGdoVUhnSzNuekljT1hJS0pLeWF0SUNLeDd4K2tsQTZsRElyUXNNR2xuc05xanJvOGl0c3VDNTA0VE0yNlloMDdEVVZCNFEwSExvQXlNQ2JiQTloVTBTa0RMa3pNb3FYUGdXdnl1WnA2ZEhsZXh0R0dLdkJGL1N3TnFMN3RUU2V3aWpIZm5kOGt1Ylh1MFpYS0kvb0hzQWorZ3R6Ui9WTXdGK0ZvaEFRTCtJbCs1aVFoTW8rT0ZSZ2dIZFo3SENrNEJKTkF0OFVJQXcwd21mNWhNQXBEUkc0d3g3V3dBLzdwR0czODRtcW1XeTR3ckM4cEtRZWRKVWhsN3JKa3hla1VNWTdwYVdJc2s5WElyQ1pQQjVpS2lRWlFBNk1SRGlJUWhvY2hJVUtoNWg2RUFsSmVNTkZKbkNJMko4NEQ4UG5KS0hjU293K1RVUTQzTm82dUZYdEEwYW9sTWZ3M2txN1djUjlvUFRMWWtIVjdzdDVRQzVBM1E2S3N4b1JUSXA4K2s2OEswdm85WkFVRytpMFBaUEVSWmM3dUh3bkR0SFdDWTdSQW1MblpYS0NLYnp4Y05sQUxPYjd3MDhlV0c1Ky9Dck8vbzBJUHp2eHVDelJJdUlTd0JRSk1ueDRsUzA0bnNkaU01alRsY0FjM290dUN6TlR3S3czVzVKUjRDNFRVcW50R3oxVXdUazVGRkErQkxsUHFCYzJuTXVPSW9CdERCMSt4U1U3SXpvc09na2VIeGpLRVNVZ1NGTlVSWWNvSEo0Nk56QUl5OWhKQ2dsUDJEQ1JhYnBPcUd6TDZPa2dIVW9mR21raDI3NUtORGlTek5wcFpWSllabkRjOHQwVzRaYjFqNDVZaGlETDYwUnRwZGtFT2NJQ0pjVVlxQ1N6Ym5yRm94aG5ZYTRDSjFaS1NhOFNzaUdVU2Y2SjRLcjZpb2E4M05qRHJ6Q1AzR2hmQXdvZmVodVA2UGhTUjJoUmlnTGN5c0lrc3pBOVhwUVpxeHhlQ3dvbjNXYXp3NEFaM1BJR3ZkWFkveFJEY1JKS1l1T3lVbHBPVFJRVXJaRlo5QXdkVWpKa21YakVtbU9saXM2Q2JKWmRMSTRuVklQZ0I0V1E1bnNNV2lpb2xHRjVDYVFReVVsNjFGa1dNK0NOdzE2NFdIMTV6TEFDSXgybzhvRjUxM25ySnE1cUU2eHRtVXBjdVMyYVZ3SDJwaW41WjhuWFBZejBXVHhMNFdxc3hRMWJLY0hXNnlud0RFQkErdGl0UXY3V0s5akxCUnBLVlRJZWo5Rk9GOW1JVDhhY2gyQ2NySS9xbDl0OHZZZmx1eFVHbEFxOHozdUExaFdqek1kbnNLYi9Mbm9VSjVsbWtzQThBMHNHV2kvWUtpTzF1RERHSmlPcHJySFB3Q3B5SXBPREZSQnU2TVRYd05CSWJwNmtlRWhrdko2RVJWS1V1bjdhQk9xRUNuZkV4cEdtSlJuZXpGQ0hQY0xLTGpPZnJFWHd5d242NFlJblFOQWJGd0MwR0Jwa3dhMEF2RlpkTjVnb25vZCtLS25iTVRNTGFIc1lSTEtIaU81R20wVTR3WmloSGZaZzJ1b2lGL21XZHFEa3YzV2M1VkFVVHF1VG40OEtxSHhZSlZnS3Fqc0ZSNy9hekFpNno3OUtDdmZHWWhCRncyWlI1VnpyQ09hdmxJMTU4cXNiK3BBbVNEaUhjQ2NJc0JjQWdBRzJ1RUMwdkhob3NPZm1mVHBLSnhJWWxKa3dubmpSRnZ1VHhHeTNab2pqVXAwWUszWVE2QWdtNzhSVHBrQmtVR29qTU9lcnpEa1FFRU9xREt1TEhRZ3R6U0puSlJ0L2xJSGNreitZcThReU9iTFFZd2lMaThBa2VsRE1BQXc0TnhTTm5iYmhndGpkc3cwQlpGeFFLb2tuRVJpZ2dYVW53K1FuWUUrVlhYdUUzdU1USUt5TXlUWkU5OG90Y0kvenVlL0hEa0d6K2wzR2ZscGRUNEpnSmozZnd5cllzWUdaR1RBVGpYUm40TkVEdStjNXYrYzdnRTBEc05JbkplT28zellsRTR5djJTUTNCL0F0QkVaNk9pZ0xCZGE4Z1JkMHFpZ0U5dkFVZ0F4VEcyajhMZXNDU3RQTm91MDRJSVJJc1pUQVpBdUIrUTFaZzRDcXVTNFF3WkhUU3JFeDREQzBGWXlsTHg5SjJCZHFaQlFoVmRKQWFTeUkvU3cwVEZ4WEtieEtla0E5SDdPV3pCVzBraFJiQjhMd3BjdHJpMFVPVldjK0JoN3BNUkZ1YXorS2NrT1JwQzRDREFDdmEwbnB5d0s0NWMrTVl1eStQbjFlSk1RYm05RndNU3V6emN0VmJ2ZTVXOTBRUThtUGJKcDcxTXFBR0JjSHVsNUREMU9zb01ranh1d0thdUNPSlNqWkc0eml0SHg2RUdaVlgra0FMemhmdkpNSUUxd3AyVEhCcXNFQUNBbldGeUp6Z3U4T3QwVnN0endWUjVWVjkyUTEvT2wzc2JyeERqemdCT0J5VTQ1MjJVTEdsOEdpb0dKYU1zRWFCVnpGU1BIYUJpZGFLOXcxUEtCekZGbHhtZDd3RzJFT2MxSzNTcGF0QWllb1VwVmdvQ0V2VFV2Yk9EcTVZRm5MUWdrOVVHYW9Kb0JPK0RvRDhJRzM4TkFNS3MvbHdBZVJ4WnF3VWp4MklHQWpHZ3ZKampOVUxiZXlpa0FaeUFBTmVzMGwwc0FJcVVIdFF4TUI2V3ZEMnRnZFpJcU1BR1FBeTdsMlpPTk1CenJOZ3ZPZk1tdmlsRkdvV0FvV1MxWElCdXVET0xQaHAzcmxEeUlnczk0WlRrVFZYWjdOcHBDendPdjJSdGM2ZzNLaHhEY0FQU0xVSlF6Z0NNS3FLNzNrMHgraHByS0pVcEZMc1FnSWExTjFDQ0JiMkVqVC9aVW1qNUlBemRtUnpUTnBrb1ZGYldOOWlTdGhGNzlSQTNhaXdKdUsralMvMWxPZWpUb2FVb2tGenI3a0tKaCtZbHVkRUNtTGNGTVdENE5XR0dDRTVGSmJveEt3RFZ6a1poQm91c0syVHpnS1Bzb1BPQm1tZVlTQUdTbkhZWlAwaG5IdGErZC9NZ2lrWTNsbGFhQ1JRV1hPWkVvSit3eXNieE5NWm1NYXdkYVJxMWtEb2Ftb3JSQUVmQTFWMEV5UEo2eW5ta3FsRUZtQVpVL3F1ZjRjUzVXZ2lqZkIwZ1JqRUlDd1JJM29taE85Zk1Ba1FQWHNnODh3YWgvQ3gzNzRNQktzeU5ZajBiOHVGeEl1S3A2SWdxMVdGaGNicXNYRTZ2LzJ2N3YrWUNLUUdjcXk2bUE5aWV3Q3BRZEFMVHFaekF3VHphT2NERmFXaEZac3NiWC9hUEJiVjFnQjVTVU5lTjhQZ0ZBMWpzd2ttTVF1WUdqV1ZkaXF5dmhlRVI0OEFJVWVTVUx3U3BVRW5BaHRqa09KeVd1Q2dwMGY0WXhnMEhNbUo2R1hOTUxZRGh4NURSZWdvQ05GMFBMZzZRcVF5RHNCV1dTQ3J3VWRKbFJWK3I1N2pNOEdpMThUWmlQQWlGUnVXNVhMVVU0UnUxQmlZWk9PdlhPUEpSa1ZMaUZoaUhEREZPNGJxTi9yd29CTTBTUkdkU3BvSG9OM0xkcUIyWW12SFAwQXdiRmlRQ2dDUzYvYy9uZ0tpbUlYQWZWV09Hejd3WFpSb1lRL09Ud2NDa3IwTHM3OHZaUWNlWnBMZ0dndlFTd2MyUldPNW1QWXFVZGhHT1ZjT0FnVVU2YVFPWUw3UmlsVS9LVEU1OWpQa0hJYWdKS29wMUk3QWJFclVwNURWZWY3aE1EQTZLTUNjYUxPaDBaZlcxa2dJbDN3eUNwVDZ5NVlCSkg1Q2Nod2dld0RteGc5ZmNMUVJoMFlLbGtva3BNZnVHVm9aQXJXMm9LdGs2dFZpSWtUVldja0RWSSt4QnVEcGFzdXA5aklPQmtDMjRNZjQzVGZvejlrMnlxbDNxU0YxZjB1Q1I2Rmt1V3l6clZ5UzlQUnRHRzB4cGxKaTZzMldjQys0WmNLR1dZU0tsbWtZVU1Cd0dSWU9GSUZycHdYbWt1QVFDbk05azhxSXUxOXZjUnJCejdwSFpra1ljSEFVbEdsVUxMWjVSTzFnTStZT1hJYm04TXFWZzYxaldnSmhNa3c5R0Jxa2t2UWkrc1RGYS9xTU5vbmZnWGpldSthbk5VenJtS1JNTU9TT0pEVk9ybVhBZ0hBQWszelJVaUVQanVzckFFSjdjaDJSRlN4Q2xaNVJRZ1JTZWtOTWw4S28vUURjZXh3TU9MUzg1V2tZU0hUZS9IWnQyZUx6SE9kYXBsbkttVVpZQStwRWl5T3dqdkFjTXBxRFJJSGtjQUhzK2EvWWlFaFRLN05BdFhadG13QXNOUVNNaHduVUlycEdoT1BQQ0RHd1FXbFdlVjVoSUF4anVBTlBJNFJ0bGg2VXpsVERodzR5UlNUS0xpNFN4blIwUWVna3hEQUlDVGRnZktVMjdkdG9GcjVQa3F6NGdCMHUxYURJYTZzdW9aTE9YU2hsdUFRRXNsczE2d0NjdEJ5c0hGQUl1L29MSEY1T1lUZzhVN0VTczhITFM5RkJNdHI3QVpkaU5KeWdhekxJNUVCZk1SemxNclRrVTJRbHQ2Q3ljTGlvRnZGRXpTS1BjdW9JaElTVEgvbzI3aXFCYXd6ZzdtUlRwc09ySjdYQlJMdlFRUTBiVFM3cmI2WnF2NXRTdTNnbUNBekNtV1pzak40MVBoS2V6dVQ4SHpTSE1KQURqZXdSSGppMVcrUGpxaWhkVGw4T1FzZ3V6UUpCUTZZczJuVTBaU2RJZ0JRRTRoZU9DRm9HSkpQYzF6RzZ4UUtTZTVhc2U2cG5veG1TV0xsYmkzRDhuUVE4NGdSMWpmTUNVbnF4ZHFtRXg1dkFPZ1dudXdBL0MxUDAxQlVBcVZhSGhLYXREQjN5UHNuMUlGTE9MTW8wSVJEVVovZmFtd0J5OTE5cE5jSi9tT24vZDYza3FHVi9haVE2b3l5S1ZnZlNLekNvSWo3Y0xZMkZtRjdjQkJoZDJYaEw3bWlyN2UzTjZMbnhNekVRWWRxTnJtMEpBaG5NY0lSY0U1NFdIUEk3L2NSWlZacHJrRUFFOSt0cTg0UXdjNWsvZ29xVlIxRlp5R281Q2JpWEltOCtxVU9YamFwSnp0SjQ2Y1pOMkNJeEFGbDNLdHJ3cE1iT1FZenltRlVxc0dnZExCeVdqaFRGRGFFZElBRlpxVXN1QVIydm9LQU1aT1hrTzFwQXRQQnN1MEkzY0FERjlHbFlPQjZubkZLcnVRcHJVUWZHdkVnT29DeXRUa0tWWkxMVEJnYXdsakdFYnNEaWVXYzJHcXRGSldadFp5N3JFOU5HaFhoUXpyeHJzODRvMU9MOGlRYnQvUmh2amRuYzZSWU05Nnd1SlRYdlBGeDdMVTRyaTJ1YWVmRThNblJRNVNvMXFmZ3hMT2NVTTVRWUJFWmxtTnZFYUtlV1oxbWtzQXdBOTFRRk1vNVlBT2Z4NnN3cEpqVVJhT3dPWklFSjdpeWVTMUhqUXBJSENaZzFReU1rQ2ZpVFpLOFNTWE9rMXdEZ3dUT05FR2JBalBuaE9vMzQrSUNGL29KbU1Fdk1ZVmdEYktKTFYrRkJ1UjRQcWJnTkNHZi9WSEtOeDJtZncwa2JwWXZoQk9pZXhWVGNxaDhyNzZvZGh0aURpekg3SWNGa0pveExSd2d4NkFwVDhHdUZFQmY3V0o0alJjeTJORlNtQzJpV3FuUGxPaHpuS3pJc0FTN2xRQWtBREtUTjVMTjNiMTJ2QTl2UjI0OEFxWC9yYzh5dWpoVTlEU0ZQUnJFeXlEc2Q0U1R4aWVUd0RRck1tQjdRNHZ6amlPTGVsTWYzd2lPV1BucFV6d3RPbVZHNzdDV1BVb2RQTkRIMGdxekNKbUp5SEFuVjl3TVJEVTJWSUluWHdBcTJyRnFYRmdFdHRscjhxT0lMUVdhNFhwK0llNndWcDlsVnJFRG9EUC9IV29Kb09Ed1ljb1lIQnhBNUQyUWk0VzhlOVVjWlFTR2FTcVlDbU9zOVNwNGtmVksvNDJRUHEvZGtUeUkwK043Qk5iSzZDQnFHbkRQc1lRTkVDWFF1TGN0eU5jMUJwWlY0cDViOGRGbmVnakgraGttRlBvVFgrem9yOThaY2RCZXJWMEpHU1N4MDloenpKOTVZZTZsS2VPTmxFTTlLZmJnbmtPYVM0QmdBR003OXlueW5GT25WaEhNSko2SkNaL09zeDlvcE5sZzFmQ3FmVUFLR1dRYk1HTkFqYWl6NFB6OW1mM3NlcXpGWXhyL2RTc3Fac284WG5PcTh4bnl2bWUrQnhrS0o3UGlZZG54STlzNnVuQUxuSmZBa2hRVG5pK2JFSkE4THZuNWRFNlNOMXVCS3VVaDRYUSszS2paM2pEZlFKV1RWWFlVTnJSVmprdWpIQ2xra1VoRWRrdlBiWkF5WjE1UVEvMEtnV3o5SHdWS2tBdDF6WVNVK3A3VURhQldlVjhvaklucGYwb2RxN1JnYU0vOUt2QmIrdzBmb3NHUXB5WXNobWhxVU9STVpHWEVKU0ZyZ200TFZmQ0RJQzVCQUEvdENJckdjd1l5K2s0QmxJWHh5R0gralVYbkRla0xGOWwycWp0RlY3alJuRGlxQUpjVGdCT29LeXJHd3hxcTdzbnR5b3lFTXhaK0N3TDJHV2RpckxtVHg3WEthY0dsM3FuTFFRdEFzQ3lJaCs0aW1jUXVzd0VMMEVBcWtkcHpXb3J2aDhRMWxTY0FZU1UxSUNCeWNhU0lmUFVWL200anF0TXJSZkkvZlNEOE5uWTdmTDlqUTB3cFREQU5TTHJqN2pDd0tRdkZqR0JjV1hreGNmVUU1NmY4L2FOT3NGY25qM24xNEdWNE1FSzBXN3BFRXU5a3BDbi85aTFLVGNOUklFZFZOb0tRWnJKZVM0QmdCWE1GbU40T1l3N29rbkZSM1pZT2pIbE9rZGVZU0tqclppZ2ZidUIxem4rZzFCNGpVVEdJREVnbE1RZjgwcWRYT0NhQjFsQklIZ1pCblhnaU1iRU00NTY4R2h3bUc1K0tPeEZJb2NEbmZOVEJGWHhEb0NQQVBtb2lSK1pvQjN3c2Zwb0Y0QThWUWlaeUlZcXJkMnVRT0NhMFZJdEdEcTRXT1QwWEFFaEFCSkplWkdlUmVlRFUvS0tNelNQZWkxUFphbEFTejBjUEsycTI1dEdhTFcyQWRFRG9GMHNmZVp5Z2RPdHZva25aNi9vT294Vi9QTE4zZTRGL1dTNFh4aytVdFYxd0NHMDZFRS9rVExRbDJLTUsrRXBKdzYrV2FhNUJBRHN6bDFBT21GcW54ekNVanRIbFpra0tTdXJwVVBkSG1RQkxld3E0SXdzUXhGWWlhMTA3U3hqQ3NGd2V4SWVKU0NySjVGRmtjbm9pYXZjZ25JRmdJL0RNMXFjQmU5SFNHbFRLTnBGaGhNc0tuTms0QVQyRGtBTkNQVEJtYis0QVlqdVRIekpRUkM1dVF5NEJ1SEZxV1FocFdJYkJZSXR6NVc5QXFLZ1JFMk5qSXBMbGdHamtRT01Db015OVFzaXNuM1Vwb1ZXb1FhZEFoSWxFZE9sSkZaeWlpaG5wVmo5S0RiZnUwazh1eTRSZWZTYTN3UmRFZjNqcjI5M2IxelhEVUIrS3J6MHIyV05ZR1RTYWgwS1JVZVA1ZFIzenZsY0FvQmZuaWpMTWQ0bkFjUEpkbnVyN2RDV0RSbUlRNmdGdDhUQWV5S1pxVFJiZUkybnRzcTVRbFF4QW1MeURPV1ozYlRBd3c5ZkRuODZNWFdNRGc0T2MwTXdnMXBqOENESGVtV05NbDJOYTNSMzVRZ0U4U21BNnF1dVgwa3RtbHZRaVU4YldKV1FhYmxGckRQYU0yZHBsRXBLUVJQZ1FTcGt3WnNJM1lLeUJGK3BZMVEyMU5DbmdyU0M3QkFlWisxZlhJNlNwYXFjcFY2TU1QdVJQYmtRWWJFdGhUS3RDcjAwVEQyWEtmaUFwS3hPWVB0RnZqTk9lUHpJb1g1YzF0N2ZxNytxOEhOaFAvZkNwaThEZURsb3BKREh1WWNLUlUybnk0Tld6QlErK1ZsTU9PYVI1aElBTk9oam5zbDVaU3pzNjVLakdCc0RpTTdxNVhrODlQMWFpM1VWVlFQUmRwa09SUkYvbnh2MTZCWFhMejNSYU1qei9iU1ZQZFRhNENCQUZWV1BEdTNQcG9HWDdEcVFrS1BleFFZUHFGS1h0cE9QV01FQks0bjJIQUIyaXU3VUY0TUhpazc4TWhEcW80RGI0VVJ5Mndtb2FJR0ZCamxCOUlPTmxJQUZCaXJ4RFZldlhGc24yVlB4ckZpRXhpQm9Lb2d2V0xHRVBrZ0JrYnM0d2cwNURsZmFMeUtON00ydHZoSXArN3JtNE5RVTVXVkZXbGIvOVZYNVgrVXREYkNmL2NTV2RnUG1zRUxCV3lyaFJ4Qks5QzlGN0RRcThVRU9IdmpLMGFCbkJzNG5BSlNKWHpzWUIrZzRTa3AySmdhSitnd28reENpanVKUHdEZ0FTbkxiS2pQeFRDOG5zNkNmK2VKY245QW9kWGZMVEtGTmZ6dE1lS05nejk3S3FwS0VWZ3hwazZpamlrd2V5djZoU0UzWU92bEFwcHdDVXZSQlhSMEVNUWNBOUJRL1BsaVdOUE1JUnBiSEdiSjA1RDJBYUFPdWFOc0txRVNxK2tjeFNOU0h2VEJTckhWb0lJc0JacW5VTVhsMHNqRFRBeW9OcUJBOVp5Q2FwR1lVaHpLaW9uRU5PT1M1YldsY3N4cFFhMlovREhLeHVjL0p5N0VzWUVVWCsydWFPVXllajcyMjNUMzNtbDRITGp4U09aT1RFcktNUU1TNEZRTjk2SjBpZUpKVVREN2FXaHIrMUhEd3pPQTh5d0JRdmM3UFdybVh5UXh5N1hyMGhFQTdHVURKa3pyQUtCY1lzdHNwZktETnEzTFErdFdteWlpMElxTEpncGQyUGJVQmxHS2JyMExUUmxBNHg3VTVyQVNDbW9SZ010UEJVWS9LckFxYURwN0JnUWZiNmc4Y2x3Q3FMOGZGVGpNQ2pTV2doZzdMTFRsTjFKRUlDQUptcFo1bXlBaERaWkticDVBc3VGUktWT0pjcmtpWWhzbVR2TFJKNHdiZHhoQ21WcnlWSjVpalR4QmN5b0tZSE9NMEJUVmk2ZXUzaEFpZGplS04vOTJPU0RVdk1QN1RKYjd1L0M5MTYvcDVjQ2FPM2dQYS9ZUitFb3duQU0rc3RUMmRVNy80dW1uY3JVb3QzSkJ6QUp6eEpRODRxVTNsR1lDekRBQ3BybDZTSW5mS0huZXNqTGR6Yjk5N1dkOTU2eVFRTVVoNm1jbWMrTXFqaXVBU1grR0NLMFBSREZVbEE3WGt6b201b1k2VkFBWUQzY05BQ3IyaXcxUEh5Sm5VTUNWTmQrOVY5ajBBMXd1OGg0M3hLYStzN09DS1VlaE1BUENOd01RcGg4N0I3cFAzQXRBdUNFOTJnWU1jUnBLWWttOEFsNEpwOE1GZkJGVCtoaWRsNjdaWFljdWE4cWpxVXQyN3JRSzdWUWpna1ZOZzhIbEoxK0xOV1lLRks5M2lGRkl0dU9HcTJBYTNIN1Fkc0VxbE91bWJzdW1pMFUrczhpdUtBbWZYRlF6RWMwVlAvLzJrQXNCYXVmMVBqOFlmNHZnYnBaUUxEYmdrZ3pyQnowRmJud283Z0dLZUI0TG5tZnU4R0w3UE9aWDcxZ0QxY29CNWxDVjc0MUJRbFlmQVkwU1BDejF5Rldyb0tXc2dPT2g5aC9YckJ6aHY3eVdRZ1pMWDhJWWxLMjBrYjJFM0EwTDFIVWdLREQ3TllLZkF3VUFEUndCZzlTZFJSbUQvVWhDMVh5NHJRbytnNTRDbWd0dUhPSVpOUUtCNFJNdEFad1M4cmhKTW5DbnpNTk95SnNLS1ZzTmxEWDQrRXdkUHdyZThzWmlQTFhlazlMYU9zSVhBVUppa1JJVlZ3UlBmT0NTSXh6aGdFblVrbElSK0FSM3RYT3E1OVZRaEpZam1HNTdPbzQyMm5OT1lJTHVzbndNK284blBZcThmQmU3KzVVZHZkaTlkMnUwMjlETEE1QXV4MlFoNUhPbGJqeG1hU1phbzRIT2k4T1dFdDQzTUljMWpCMEJuOHltYk84OVc0ZXc3TUM5bDJEOFVrTmM0cTZBWVI1R1V0N2pFai9QVXNSRzFINlNoSXBkT2pFa2ZxM3N6ZzJvOWY3eFloZ2ZWaU82SWlNL3lHVFlNZi8wMUk0VEo0ZDFDMFRzbVVBU0Vhb2lDQVEraVlBT0J3SU5HZ3JuSFFNSCt0YTdJRG5VcURoMVFwdENoQm84UUJWK3FxQnoxbVFCTTlGWGQvbDdUNTE5cm1nWGNDRnZWQ0dKcjNDWitNV2RMRHkzZDNGenVibTdwYTdJcWJHbjdzaTFsdVJ5TXlVOUQ2RzhsYXQ3aUF1WWNQRUNERkNLTWFzQ0R1S09xR2NNNm40dG8yKzhPRGQ4NENLZ0dmdkpEUC9vRlZtdyt2eUY3NWU4dE9lcEhmdjY2YndxaUgySjhVemZobW90QW02VVREQmE1eW1vS2paQVVCMTFiaVRNRTVoTUFtQVdZbzhNRDc1Z0dGUkVoQjNHdGl5b3hoSHRpQ0djVzhoYW1yanF4MG9CY0lDc0FZZ3BJM3lVMko0NDdURWhvZVhlWFNSczMvQUlIamJrUmQveWhVVXNUWGdQTlk0MjZ3bmlRQ1RCT01uQVhuKy9UWnRyQkRvRERPRXZSU1luNktPRmZDQmJJaEhJenlJYVpCQnduQzhqQm5aUGJQRm1QZ3V1RkhHUng0MnRWazM1OWRiazd1NkZKY0VZcm9DYi9paHF3N2pUUnRDVTFkUjkxMHUyYzdicnJteE50bFZlNjZ6ZjN1aHMzQ1FRN0pSRElQdGZoQkp5NWlsWWdjWlNWY0E2Wi9nSXFhaG83NVZUNFc2NVFzZmducTZUZEl0cHZveHdjazRUQXgrVGYwQTJZcytyVUgzMzJadmVoVCs3SUo2eitKRHpNWDBCR1JZTWduUEFSYXVHZjRBczhaOHlIbm5oSmdtM21hVDRCZ1BHQU16aEl5dTkwZzJOblN0UkFib2gyTXpSRkc1NkFpUyt6Q1JvSFhvKzhMeHZOcVUxbWFoRUZwcmNhV25Rc2c0QkJtZ00xQmtYV05vL3FEVHBiWlE4QU1hWElvcXJGTTZsWlZmTVNJSmlvcEoyQ0JNWjdBYU15QTlZdFNxK2M2TWdrMlZkaXFMbHd0T01BMHNBQ1BSblk2cTlxaXg4VGY3bTdUeFA2Z2lZQmcwYjN3Znd1L0UyOUJPUDE2enZkVlUxdzBubmRHYnRmdjViTHp1Q0dkZ0hyMmpJemNhN2VuSFJ2WEYzcHJ0NVlpa0RBNVFIK1owYUVFckpWTXZ6ZjRpVFVkSk5VU0d0NnZDQ24wQ0JMbVRmOGlSSmp4UXFvL2dBdm00czY5cU92K3pYNUNYd1hGZmhXNU8rYnN2a0gvcjlyWHYzeE5YWDRjektNL1A0UFBHMWdxdHRTR1YwNVNPU3BEN25oZUNBMFdXQ2JTWnBQQU5pTG9XdHJUc0FrVmxvbVV2VmdDeGY1WkQ1MHlod2c0VEttY216VlBIa1FHWWthVFZJSFcwaURvc2VRbDUxSDF4TjRZUFNFRnhRMEh1TUZRdWIrM0ZpaGtaV0hHTTBkbHdFTVRqRW9HR1RpZllDK1hCQUNyQ25vSXFCeXFVNlVBNVA0TEpGbnVFSXUyMzArMTE1anhWOWY3aTZlblhUM240dTczbXVTdmFGUjg3SFh0clFLM3VnKytQRk5mUk51VjNmQ3FTbmE2cVI3VkQrVStkNDNyM1ZmOE14Rzk4UjlXdjBWQ0ZZVkJNN3BlUDNxVXZmNmxhWHVtcEEzZEduQVBRSi9qUWJqbGFKZlNtQ1FWa1pqTTdRb0dRWnNkYVowVUlJU0VzWWM5RlFrOGp5QURPdkVUYjhOUGVHRC9mcnhuKzZjYlAvZW43N1dmVXkvQkx5aFM0S29nMytwRTM5dGE5RFp6WkVpQ0FSc3hPaVVGSExkQS9BUUYzaXdZYVA2eHluT0l3RG9VNjRKdndaZW94K2hNRDlQUDRyUzZTQThraE91ZnNUWUNFbzZQTHhJaytTQkpaaWNnVlRMS0ZadzVIM3FDd25SZmc1Q3VocCtUeXdZVklUdVEyWEdMRnQ5SmxOT3hsd0ZCampxRkRrSXBBN0plaUtud0R2Q1l3dVRQWkNSVzZZQ2dtL0VxZlVjZ2t3T3k2SjlzNGJjaXJPQ3RrTHlnb21neGZVOHEvNlo5UlZ0OVplNkJ5OW9CZGR5djZwMnoybjcrL0xsN2U3di9zeTE3c2MrZEVQYmUvR1htNERZUkxxNVBlays4c3B1OSt6TE43ci83ZC9lN0w3d0hldmRsMzcybWU0aFZiNnFRUERveFFnRW43eTAzRjBpRUNoeTdIRi9RTVBkRTFxRzkzbkl4Tjd3ZTJrRUh6aGxiMUFvTk1DR1RwRlVVY2xYMklmK29DOUVVSWZ4VVNzM09UZjBnZi85NXlmYTJlaXlSN2lQZkhLcit5Y2Z2S2I3SU1YWGRHNlJtYjR2bEI2UC9tTER2L1FYcWRjbnloNERBaHRwOHRiczB6d0NnSzYzZDNkaVJaUkJzcnczOG5nR01qbVFNZkRpMktPUUU2ZmNFeXFyTkdWa21DMXo4VXdMVHRtQmd6WlJvdFN6UGlxU2tKYzJBcnZqaFVrZnhLN0FVMVRZekl0TjFGZGw2dm5RaVR4M0FFR0VJUTdmL1dmMktRaDRGZEtBZEU0OUJxZHl5cGtqaTVhRXFUaEExckpsalFhdWFWbjFHZlFQbnRlS0xrYnVlTVA4VC8vTnRlNzdOZmw1N3AwSnNLN1YzckpGZFp1d0tTM3pmS3dTay9xZi85eE5mVlMyMWIzL1BSdmRiL3owalc1WEFXS2lkalllN3JwUGFrbDk5ZEpxZCtXYWRnUGFCL0JPUGI5dW04cFdGTzlnQ0Foa3FoUUdnRkFLSE5BUUQ0WVVlZ1E4T2t0T3VDVjhFYjFBQzlGUEs3S0J5WC9mT2ZtQjFaOEFwVm42UC8zZlY3cnJXL0tUNkZ3aSthL2tDQXhwMFZhMjdoeTlFekVFQjRyQmdsN3EwRStkQUtBSW9EQXZtN0x6Y0g3QzJIcUlsT3hNSGhJK010ektLa3hrT2VHenpjUlJqdnNQWlRDcERJMlQ4d0RCREJMNjFyYXpJN01DNVFLVEpUa0ZVSStnd29UTVlNRFF6b0FRZkZHVGVZMHNkTXhCemJZL0QzL3pyNVFOcTdXNEpDcURrYlo4cEJZNUpQdWM5b0lhT0cvM05hRFBhT0t6Nmora1ZmOCtMWGVyVXZ5Q2J2WTkrL0pXOTNkKy9ITDNieit4cld0N0pyN0NSUm5zREZaTGFYTGtPd25IemNJcnVqL3dYVDkrdmZ0L0ZRaSs2dGVlN1o1NlVQY0NkTW53K0gyaWEzZng4dXZMdWo4dzBZM0NIYjFYTDE2dTZVc2RPL1gvYis5c2dDdzdydnArNTgzMzU4NStTR3ZKdHJCazdFaE9RRFlRd0NUQlpRcENnZ1BZVUU1VmtncEpwWkpLa1pTTFZFd3FUaWpLVUs3WUlWUkNnWTBEd1NZQ2JGbUlzdVVQWkRuSXNtVFpzaTFMU0VMU3JsYUxySlYycFYzdGgzWjNkcjduemN6TC8zZTZ6NzM5N3J6NTNQZG1aK3piTTMxUDkrbnUwNmRQOXpuZHQyL2YrMmc3MUlKOEFCYU5WMjlKZ2ZlOHhzRWFGNWNIV1dKWWN2VVZVRkQrV25hVlZpd29QNnVnVzZUOFQ3OVUxMjJPem1GYSsxV3lEQ08xSUYrbDAxY3hRbitsZmU1NUFnZWhKZURNYTFHa1lHZ3FHVHJrdG1zRm9HNk5MbmFnSzVPajE0SjVXYy9rQ0VHRVpWRmRnTG5TZUJpOGU4cDdHT2p4Q0FIQjVWUXRTc3o1dGFGQ1daQnlCaFFQaWxEZ2JFbW5SRE4wZ3Jic1Y0ME1iQjdWTVhDZ1liT0lEeUtLV3dONFlTWUVnVGI3c3dsSVdTQ1ZVVmhlMXh3U0JoT3hxMElycDh3TTlqNWRiTmJYSnRjNHM1MlVmMGpyWDVhNzNUcUU4TG5IWnJKUHljL3FjUjdQdTJrbzFWc3RGallPckQyd1lva0FlYkd1UUVOdnpLRllEYjAwczVUOXQ3dW1zcDk3VTMvMkV6Y05aZ3VhU2NlMXRCNjRTbDczMCtjbnU3THBXVWw2UVovWDBtcUFweDQ0ZjBJUXduYlZKZFJMelByVUF3YVROSXUzdnZqeW4vTDBCK2Y4T2RTRElSd2Y2YzRPeWtDSnZXeE15di9GcDJheUx6dzVxNW0vTUg2Qmh5RHY1aXYxRlR3d0J1Z3VuSStqRUF1NVRFNFJRVGJrcTZWUzNGWHhuSjJCblRZQW9XM0w5WG9oamxRMEcydFVXcFlTSnA4SVcxR2dVbGNnSHh4U1BVTTYzaGhUcEJtbTFJcGFMUS8xQ1VVNGxBbDgwTEdXMHpNNUNmSUtSeGtHQUIwUGRCck1CRll1UXNJTVNPdDhoU21icmdMWVNMS1ZpeE5RT293dzhCejZsaFJKNE11UThneDBqQkd6UG9ONVVMdjJJM3F1dFYvTGZYYjUyZVFiMWFnNG8zdjlXeDZZeWg0OVViZFozNVFmcWlydk5HQ1dQNE0wZ0hBWkdCTVlQbTR2Tkx1TGlZODlPSjg5SldQd3o3VWEyRHNzU1VnNDErNlYwZW52eXM1TmFHOUFHNFV6V2czTTF6VU54dHVDUUJoaWNwSlREQkV4RklEbGUrR0tIQVhPUXlHZlh4RXB1LzNJWTBqUCtmYU4xVXo1dFJqSzlrajVIMzV1UHZ2amIwemJoaUJIZ1RIYXdYQkhZeUJja0VSeHBYYVRUYXd5RFRzWEtTVGR4b1I0QWFybE1vL1d1TUJtbXJtTjRVNFpnQ2JwajQ1azgvM2pzdktxYlVFYlJ3djFibGwzbXJsRlo1MnRza0I1QmphVEV4dFNDcG9Ea29iSGVkamk0Qk9jWmRqQXhXbDVqMENqVlJnY3lrNmlLMzBPWXhsTVQ0MkJUQjRsaGdGVjNJa3kyeHZQeWcrMHg0QmtWdGlXbFFxRFkvUFBsNWJjTklhNk5ad0lHUEdRbndUcVlLQnovODdPOWpDenZoU2ZlLzBoOVkwMjZhV2tPdDkrdkpIZDhVU21lLzNoN0JWWE1jZ0RZUU9LRUUrOVVrTWVhekN4a2xNREVBY1hiOU8zTGpXeTMvbGFscjM5YjJYWm02N1ZJMFBOZC92RXdKQVU3cHdNd1lYSm5teFNxNEU1clFZVzRpYWhHVUFqQkNrUHdKVzdpRk0wTndZRkttUktzcU4wR2pJMjY3T3NIeG5zenZhUGRkbXluNzJQY2NuaThPa3N1L1V4UFFrWjIyc3ZBVm03SlhPTWFBajdLcTZRaVlraDFoT0JFcDNIMW5CSSt5RjdkTHV4Unl1d01mbUZtV3krZGM3MllqdGxBSnE0bExyUGQydFp5WkxUb0N3K3d0K3E4OW1Vdm1WQWhYZTBDMnFPdDhFV0I0Q0hIWkk3RFJlbDF3N0J0WkYwOWhVaGJuaGRUUEVoa1dja1V1UUo3eEpFQlNXL0RkVmd1TndrVXBUQlRqdWRSek1JY2ZsdlMxY3BOd3BOUGd3Sks0UWcwMERMNVF2a3hDQXpQb2Q1bU1tWjlYbTBoK0tQU2VsWTVqTHJuNXZSN1B5WGpleXhGNVZmSFRVa1JXU2dpMFN6d2h2ZkRQeVFadWtFaWJkeTRnOFowUllja1BmcFp6VEgvY2tqV1hib3BTejdSemRKNFhUZndhZlByOUhTbTBlRzV5N1ZiRFV3cXkvdXpHazFZS2NKSlJTT0dydUNCNXFSTUl5VW5aSTh0NVZSSEQ3aFBaeHhrRHhrRE1lMENqcWdldmRxRmRTdlBNejhmL2xDSS92NEk3b1YwVE9Cc09HcHNwS2xsWSt3S2F5NlRRYWlEU2ZSL3JiaXFzeWx5UU9ab0IvQWhlV2wxQUI0QXltWGhsZlEyU3lpa3dZZ1ovVEMrWVc1UG5YdS9KUzhPcjJ1emx6Mkc3eE5jQXpCY0xSV2dVaWQrMFBPbmZmcUhuTnhzVS9DRG1wRXNubGRBdFFnakFqYlVDT2R1RGwxbDRWemhDZXNnSlpEV3U2SzdpWG9jSnpEd0VXSU93Nlllc3FTejNCaXhsNFVVb1JCaEdKN0czbjhCODRITURNL2hleWJBQnJKRG9VeVdyYWFVQWlEeTNQc3NHUGZyVm0vS3h2VmxqNnpQb3F2QllEZDczTXMrUXVIWnJOUFB6YW56MXVGR1JFYVZPcEwvaEJ0amxzNk5lcWZSVEFEdnFXTFFySlptM1lxVHI4Rm4yWDNuRzlrRHovVHlINzI1cjdzTGEvcjArTk85YUptMzhGOVdvVm8zSEJ1WUdxMnBzZU9PbStnc2NQaEk3czFrREdBcHZkblhyZlZGeXJsbWh0RHRkY1YzL1krdE84d3JDVS96L2paK0dRVkpMdG9LOVU3SHAzTzduZ01IUXl2Lzdvc1RMWVNCcmNDaFd5UVFUU1dsRUJZY2k0UDZnY1RzSmEwNHJLZ3poalFpUzQxTjV2aUJPWGt3dHlLVERTM3phNlRCZ0JXVGY3MStiblpiaW0rVG9GbVMxcnFMY1dkM3EyMUpkcCtVYWJ6R1UxTDhzdWlpWEhCV2FYQWtHeHhEMXNSWFloYlFnRVVXcXVMbEJ3TDJCS2NxT1VYUHlvR3VVQTBvRkZncU5rc0VNTmt3WkVYQTJMbi8xV1k4dWJCUjIvOEtvekRWZzVybHVJOTlFYWNncm9FYlRCcVJQT0JDc0pzWW5GTHdHeVA0dnVPUFJ0c0hOL2xKQnNuK1ZCOFBEdjB6NXhaeWo3MjlVdlpZWDNVZ2hrUkdoaVlZSXpnTFhweGx2TVptWFNlWVpyYkR4VTEvbzNwZUtHdGVKZU5LejFZd3VBNVVzeWp4VDk4WURaNzhOaEM5czd2Rzh4ZWQzVlBOcU94d2dHaVVTMVJNRXlYWm1wMmtwQmp4ZmEwUUgyT0lXQUNDTzhZZUYwQk9uKzB3WXloR0tTTmZYRVZOQ3A1N0pVeFpJZGZpeDNiN0x1Z3d3cS85N1dwN0J2UHp0dUtDWGtzNlVNc0xnZUVnT3oxaW11Tzh6Ujc3S3FtSWg0WGhMV2QrRHB1UUFMazZJOTV0UnVkaVVXY2hNTjFLRzB1dWQwR29DV1RqZnI4dEN1Y0NVZlNDWEJ6ekhwdWxDZXRpRGpQbkhuY1pQVW9JM3FDSTE4Y1p4WnBpdWRjUkdyTndNbzM4eGxpYnRuSlFFdnlPalU0aklUVEVXUHdoa3NOUVVwVGJCc1g0SUlQcHdXZERuQlpTOUFEZXdaTXlURXNZYUNoOUpxRjJKVFNJQ1hNSGdodjZUSEllL1dNZmtBS3psSWFwVWZaR2VUTWN0cmt0bzlZM1B0c0xYdncyYVhzbkQ1cVlXKzBNYmo1czBIZUdzSmtrVWZNQllTdEFPQy83QnpIb2dYaFFCdkRUYnVnRTBJeUFsckJZUWdPbjF6TzNuOTZLbnZ6RGIzWjI3NW5JSHZsZUhjMks0WGdubnlQREFGR1lXcXVLNXVSbjVQQlgxQjhVWVlnR0FGVkFXRmtwRDlWWlRLeld5QmtJajhnWlVjbUhFOGVqaklCc2dxNi8rbTU3UGFIcDdOelV3MTdNZ0t2WVNVVVpudkNablFoTEorbkI0bFkwMDAyZ1lVOGJvRjFMZ3hYdkZnMHVMdzRQNjJvWXJTbWM2N2RCZ0JPbldHSFhZMjVTOVBjME5JYWQ2NFlIdDhLaEFZZERsMVdGM1FjbFM0cHJOdGRNd0k2Z1dET2pZQXhKVzBNT1pWa2lJSXppK1pOS0JwVDVQQXlrYTZBcGVuaXZKQUNuVERBWTdvdzVHdnBsVG1PS1lNYVpaQXd4NHlBU1hqTjFVTjJuNzhvVGVLV3dLajdJRlJibWVHNGYrUkxOWGlVWDRmNTdLTVZmTGhpU0hHWSt0YVpoZXp1dzdQWlk3cS9IUmdaVjMxNkRDaGhtZExEc1RGWURHN0RSK1pDSHFvT2l1QnRMTGdOZkxtQkxQbzRHalZsWk5ZM09pb2M3MlJNSnRCQ1FnUDZ5aVlydXZ1ZXJtZmZQRmJQZnZBMXZkbVAzZGlmWFgrZ0IvWXpMUUpzdjJKQnkyUTlLTEFqeUp3K1hOUXN6UmlnRDFKbk0zK1VDL0pnSTFvTElqT0dLRDRqNFlrWEZyTFA2RkhuSVoxellQWFV5aGk2NHVmeVFGYjZzMzZJb1dEbFErMUYyMU51Vmc4SHVoZ3NVVlFiRnVlbWRNUGNlU2R4ZE1SNU54aGNuSnVleEFDNGF4NHdqdDA0TktKZWczV0NPbDVUNDdOblF5VjFLVDFLd01tMmVUMTFjRWNSUDJCaTZwZ1Fjbkx3RmxUVlM2MFBLUnM2UEZMeEJqWVJqVWdCTXhTQ2xBRmI5Z3dDWmkzd0dJQ2U1Ym5zbWtHZG1kY1JPbFlEeTEzZFlheDVQc0d3eE1Yd2FZbXJzcnBqc01FT3JmTmExajcwekh6MlZmbWpweGQxRDYwWlVDZHdVQWllTnZ2Z1JySHRMeW80ZzlKd0FuQVQwcGlod3FhanFnbE1LcDY2bFlNL3BLTnMwS0NYSU0yM0RxekhJbjBrajJNV0hOUXluYytnMzNlMG5uM3RXL1hzOVZkM1p6L3kzYjNaOTc2cU45dXZnd3FzaE13QXFDMnMvclFJTU1Qb1cwdE9FbHA2NkdHZWxROXRabktZME9uREI1NWJ5TzQ3TXBjZGtVd1lGd05tQ09FdHROWGw0Zkp4NVRlNXFCM0lJYlFJcnEzRzBJUVl6SEVrcitISWJuMnVBSkE5bllXWlNRd0FTWWdvQ0VhQmRqdUpvK091YTNucXBTa05ldTdRdFRDVlUzTU1iclpxbFd1U1JCS2hVeDg3d1hGU3ZYbW03Wk1oUFZMaFRiU1ptU0JReStvenYwMVJ2Z2FJbklRTVJ0L0pwanc2cmhYTDVMTjBEUnlnSzRDRlk1cm5jWnFtL0lxRU9JTXBoRzNvS2RMSDdDUUM1L1NUVS9jZW1zNWV0VSszQVdNTjdjd3Y2LzUrT1c1Q2FRaHlDOENBWmVTSUdrdmhHVzJXOFVNVno1NWR6QTY5V00vKytreGRiK3lGUjQxOHVwcmJBVjd4RFlNT3FBcWhnZWNQdnNJbHg4RW9PUGkwL1lISTcrYU1KZFF4SUx3a0JhM0FFOHBzMVVGYkh1dG1yMVZMQURXZEhXRFZjUGpVVXZia2k0dlorTkNjOWdlNnM1dXU3Y2x1MEtyZ3FsRzlwYWpOVFc1L3pCbUJFUFFyOU5sQVBIdHBLVHNtbVR5cEY1aU9hTFovZVRyY3gvTjBCR1htSDFuQ2pQMEI1UzNOTUdTaEhtUVdvRiticWxVazVJc2NrR2tOUnpKOVljdC9RZjNYRnk2ZW1WeWpTRk4xYStSYk42bVRCZ0FtOFYzekYxL1FDbUI1VHN2TjN0RERVcFF0TkNFdGduSVljYUE4RzJTSGRQOTRWQWRNYnJwV1gyNlJJUmpUN3U2MDdxVG1aQkRJaXl2cURjcWFJSlJLVnhUT3l4U1kxaUh5R2JWWUlNU0ZFemxEUmJ5Uno4TkJCdFNJRDQveFFqdnNtM1BTTk83WjczNWlPcnZsTHlhem1tYTlNYjFRczNla1I1NW4rT0hESEJnQWxKQlZEM3NnRi9Ycy9LSWU1L0Y2THJ2bHRpa28yZkNXbnYxUm1VSmhWZ3M4Y2hzQXI0VUJzRWpBS1M4S2orS25nem9vaFhCcWo5bFR5SzdqeUl1RERsejc3TW5nZHlOQWF0RmJHQXNreTdzSEZGYTc5Q3U4RHorL2FMY0hQQzRia1pERzlRanYxVmVQYXEramxpM016YWhMMWZseVRBWXplb1NJOGJzZ1paK1FiSGhya1JvWUwrRmRmbkZEYzhFcTRISWdRTjBtazRDMHNHV3ozTmJqRnFLdVZBNjB5N3ZaMDRDck9lcFFVNElSa0tCcmplVzVpYlBIZlFYZ3BCeXVSbVpMK0U0YUFCZ3lwdXNubjVpU0FkQnA3OW9vd3Nmak50dWlGUy9weEprY1dneFFYdEw0K0lQMTdBTS9wN1Bsc3A4Y3FKalNMaS8zaG5YZENnVGxqNTJUVzRMbXpncE1iWll6MmhKYXhWakJRYUVZOERIdStCUXFZNWhsMUFZR3BWWXRROXFnWWx2OW9nYnZIMzFaRGRIYWRWbEtlbkcyeXhUODJEa0thV1dJNXFoQ0g2UW9OYmNPQVdxbTE2Z3lkc2dqa2pqeUJzaktJWkFJeGlEUXlmUEVNcm55eDNKUVJOYXA4M2FtdVBYQ0JVZkJES0FBckhYaGpxcENENUFyck5TSWs1UE53bTVWYUhIMUlUL0x6YmY1SmxXWWhjejU4M1gxdDdROE91aDVPekYwN0kyQU03bFpIdHBkeEUwK1FnVGxqM2d5eUR2UHlBdFhZQ3lhOTNmUjJ3b3BhMmhMeU5QcUNyV3drWXRoRXQzRzh2VHA1eDVQRGNCNkpGcVIzUkN1MHdiQW1KZzUvdlVaUGZpL3FKdnlWNENnd1NiTVhBa3QyNll1Wm5FcElkRkFEd254aHRiZGh4ZXpINzhKMzVOcE1zajI2bGFBKzF6V1V4eXVaS1loYzFCWUl0RWx3VUF4NEIxTkhlczdEVXd2NEpsVkVKU1Y5elJubUVHbE1NdDNOdkJRL0RGdGJ1bmxhVnVtLzlhZGw3Sm45WGl1aXh0WHk2djgrWkpmUTFRNEc0d3hqVXJ5UVdrVm1wUkJHaDVvRVYzTlNJQTNHdEtjUEUva1NRZ0dMNHFBd2dmV0F6M3BvRzNnUVcybHMwcEthRzk0Z1NZWG5wV1A5WWFBSFdoU3g5cEJwNERPK1hJelFMOFJEbi9LcFB3OHFrTkVHRC9iTzlDMys1eGpCUklYNVFHR291RmlFWWtoeG92MkIyTWdQUExWbjhzakVMVFNwdlEyRHdWa3ZNSjhjSXpUdFJ6SjhDM2JIL1p4alBXbGk2ZWUxdG5qbFc0ZGFpc0xySWRwcHdHQU9Wb09USDAyZituc1hHT3BmcmFydC85R0dBcmlKTFJKSjBuVC9UaG1DNXhWR0hzZ0RJMnU3QU9mbjh1dTFiR3ltNjdobTNSNmZLUmJBV2FCR2QwS1lBellLRUpSdzRaZ29CUEp4c2hXQWR3ME84TkVOTURqUUp1WjFPRjhQWWVQVGZLMVdiN3d3KzcwN1EvT1pCKzlkOUtVSHdOaGc5Q1ZYek1aTTBZWW9ERU5xWG85SHFDK2x1RmdPRWlDaDNTQWh6QnRDSW9mU1ZvY3JEdU1nTHNROU1vZG0wRHJuNlpjU1NMQjBLdGMrYjBEK2hacThHZjlKQmlNRUZoTVFPanBZQlRBaGJ3b2tzMms5c3d4NEMyeGRHa2xFOGRaKzExbWdsQUpWM2dJb1RCNUJLS1dIbVdSaUNRMG9GVHZhbEdNTVh0WTVqRUEwcFdKMDZmOUpDQmszYTlHWXN2NGRocUExWmlBK1hxalBuMnFhM0RFQk9vWjE3T09ucThNWFJwcCtSRFdzMTRKOG1VOUR2eWxUOHhtNzN2N1FQYm0xK3JWVXkzL2VmN2RKMFBBZlNHZWxRQTc3R1VIYlRvVnVLcHJrYmpxY0lzSk5sQ2NvQ0lvbmoraTBqSDA4TjA1OGNNZ3VPWCs2ZXo5bjcxb3kvNmFNdm1nREVwZmJQbzUzb2FsNkRuTWh5eVZ5aFg0UEVVMHd5MkEweUJGVlVlbkVrYVBhQ0NDZk5Gam1vNlBwTWtRNkZ0SWx4YXlDVWxlb3NpUWl0LzdEd0xJSnB6dWs2cWhoQ3BDM1VENGdnTFV3bXFBY05oTUpJME5UZnN3YXFoMDVaV0NjaXRrSWp3NGFCajFHQmNxNUxaNERFZCs0TU41Q1NuRjFSS0lic0Q1N0E5a01saWVuenVwWXNuenF3MFEyV0tXVGhrQWwwME9sK2VtbnU4Wk8yaHNJbVNHR3grRDJwVFRLQWhXMzdvb0ZxV0hxS1p3SEgwOXE4ODF2K3ZqTTlrLytjSGU3Si8rY0g5MlVHOTQ2UlJwcGx2R1RJK05iUlhBKzBpK1pHK21VTkM2M0JEY2xSMEQzQTBBQm92SGRpZ2Y3NXAvK0l0VDJWMlB6V1kxV1FJK1N1RUtDaXdmUDAzVHFJTjQ0WHd3Qnd5RE93eG00cUpGTktKSW8yUTRZQlI0U1RJSEFwU0tRZ0tFWUN6cENYbk8xUUxxdjF6UVRxR2NGMDdnSVR3cHNGeEM1YmNkUXBpQk1KNkwwZUF5Tlpsb0tXRHRLU29MTFF5azh3cFRtVmc1cFlUNmdqRk01VUhld0hFbzdrMEdGL0NibFVYT2h0M0NwQ3VBK2RtSjR6blpzTmhOcXk0S3RpSFVLUU1BYXk0YllGZjkwdW5uZWc2ODFqcUdSQk9vTFEySmJjWloxK1lGdkNPc00zT3NsRXJLdytiZlIrNWYwRHZ0QzlsYmIrekozcXpueU5jZjBHTWpuWWZuNVE2YlVaTXlIbHhOMmpaK1l2V3I1WEVhcGJIbWFJT1U1UWdyUjFwZjBHTytwL1ZJNmt0UHpXVmZlWHBlNzhQcnZRWlpoRlM1N2NTZnROVnZCVmd5bXJKSDZHMUhvWFBGVFJob1RsZkgySFFhaklBWkFnWjN6TThTM0p5WWRGeEFwRmZ5aEh3bWg5VXpwb1ZpT05LM1dHc3BoajROU3VnZmxLWStqS1JYWlhsRXlxblI5bURVYUZmQWVydXRLcy9ZeEFWeWpJaElpWGhham1TTHcycWUxOHM0RExrMkw0dFEzbDdVWWhVb3o5bUkrUXRuajBYS1J0SnJFU3pIazZTdEJUdHBBT0FJaHZIZEM2Y1BQemR3M1k4c1NzQlN6YTA3Vi9pVWdtMGFSZGxBTzBoSkcyc2FNVU5TSmg0QjNmcU5sWWxHOVFBQUdDOUpSRUZVaGV3MnZZYytyS09nSEkwZDF2MjJiUnlwUUZGR0pVUGhsTHlGZVJZOU5EU1VEUTRPNm15QlBwQXhPeHVVY0VYT3RSSGNldkNzbm1Pc2s5cTludEFqdTFtV0pYSWMzKzNuMko2RTVFcmViQWdZc0lVbm54bUNXR1ZUT09JTUtKODdDMUd1YVRTSGRCUXNkYTFremR5TWMwVk04Mjh1TEE2TUNHMWZSZWhLWVM2M2o0WmFubkQvYi9YRVR2T1NOQkVVK2YwZVBlVXh0TkJLaGt0WkpwUnV5a1FFbytNMUtGWUVJNkdRSjYwbnFXSGRvSlhXeFc0QnBmd2NYdFBEbmNWekx4NStUb1ZKNWk2Sld0MHIyRjdYYmdNQW96RHVERHVzVFIyNTgrVFk5LzNMbDd0cVBRZkpFR2FlbUZOZzQ4N0poeExGUmw0WUhNWUFXWENSRzU3NURtbFp5R2xCbm8yZm1kVHljc0pmSUZFbSt5ZHpMQk5DOFJyd0dJRGhrVVkyb3EvbVRPb3J1RFA2cGxXcWNFMUYxb3lJdWZCdk1tQjI1M3g2d0hsYVVPeFUyVmZNL2lvUXhuQlN4amtXcW5DRnFqczZ0dFE2S3VCUVJyR3djb1FYWkpMY0lOZk1tcFJhUHdnSGVMaHl6cHBMc2Z3UFN1MzVTRGVHN2RhQW1MWERTT2tTbGR0d0pLNXdMV1NTRXlCektHa2JuYXNTSVNFa1hvNHNtS1RzM1EzQllBQVdYLzdyYi80NWV3QllXcDVudGhhS0V0cmgybTBBa0FnTU95UnMvdUtoVDErNFpuSDJXSzEvOUdDdzFuU0NaOXRrVXhLVDY5S0JGbmVFcHBRUlNUMWhvMGtiUTZTcVJ6bExZTC9RYTZNcTNFT2kzTGxUT0lubEhKS0hNK0o4TUdOQkpudEpmck1HSUcwdFlSK29JV2lZbkdhVDhxc2h6WEVyWWZLTFl4MWkrYXdjS1Bud0pLKzdtRWZ5QzMrT2o5RHdKWnhIaTRvYzAxNlk5R21aY05vZlJhdThsVVVxR0ZZQTRkRmltVXFJZTZraTFlVzJNb1U4WVpWUzVNNURiWkFIblBNSUU4WEhjd0NzSVIwNWRPOGQ1Mk05clZZQVJZTnpaclllYUxjQktITUNzOTZJdWFXNWlTZTZoMFovR0ZFalB3YmhNZ2VmdCtBZzNDUUpHN3htQWtRMU9NWVVadFR6RnBCT1Z3eGxCNmt3d0M1VzJHSmdjb2NCWU04QWkwMm4rWVpjbm1HVmdQT3lNam1tQ0lSUUNKaGlFclFCcHBnZ3F5VUVaampEczRJeUpBbjZEL3pTMXVCSVMxMFJiNXF0U3Mya0p6eW53NXlLQ1NxUGJVc0E5a29zTnRVYjJvTEVtdDFLVEhONmlCV2xYQ1psRzBUZGJGT1RzOGdkU2llN21SR3hOY0IzQ1ZCK2JnTllDZFl2VER3aFN1VkhnRnNqdm9GUzdUWUF5QXhaZWQ4NVpHelZGbDcrMXFORDQ2OWlMQWVoS3VBWk5zQnJrWVZDY2lzNlJSZzYwMjRHbE1pWXRUeFdIM1hGUDJVS3R3NkNsc0VLV2VaSU9sUmcxNERCQUFURmx3RVEzOTNzTkpzU0psblhEVnBsSzNJRk1uSFlLaEo0Rm94OFUwOVJGL2VsdENYUTRvb1A4WUJiVVVFWmdWeThvV2s0NWlPcHJBeGxFaDJQUi80MjJLSW9EYmphYUltVkxjaGxVa295ZVZ3ZTZSTEZFTVZnczFuTmkxc1lBUjREbmo5MVROOUlVbmNXbnN4UkdnVGI2OXB0QU1yY3BRMnBUVDk5NTVPRDEvMjlLYzJlSXd4dVpqWWI3bTJhWFh5NWhwcEQyWmI5cWloOGV5L2czQXpBS0t1QVVMWFM0cmhaeVFybDZJSHdyQm1lN2JDSjd0MExwYlFzRzdqRVNtSk9aRkM0b1BERVRlRmh5TklkSCtLbS9MRWd5Y1JOV3kxdm9CWTREdUd0WEkzVTVSTFpTc1dYVVFhZUV4RmNCcVdWUlhPNmJaUUpwTUlKUnA1SWhkZTN1K3JMVTg4K2RPZVRTc0kyYUpzNFh6MHJhSU82alJ4QU1wdy9DYUgyWG1IVVBiTy9yUzdQUHZqQkYvYS85YjFIYW4zRFA4QVlSdm41QzFtM3dFQVVSOTVCT1lsQUV4TUFiYkpaUFdiaWkvcHMvYUZvMHg1QVRpeVU4MkdGWVdEWmJRWUFxT09tVVEveldqY2FnSmZBVTFHaU1DWml3UDRESTZHT1psd29GVnJuRk5MWks1VDBsQUNqcVBJSWVTaGp2am5yem80MU5TU3dhdTBGTHgrM2RqYlVoaGFraW5LdGhGaWtYbjVJbFljdk5vV25VWVAyL3NmY1U5KzQ0N2RmRUhGcWp5M0tJWFU2bm5CYlhDZFdBRENlaW85NE1BSnpjN05MazZjZjZMdjZoaDhJaWhTVXF0V0p2SzIyanNwdy9vakpURXdxTm9WSnN6MkF5R1pnMWt1RzhselRoaEF1RElDK3ZxTjM4amRyQUx5R1ZEaWhOcGdLSWE3QldDWHhwb3FVS2tLYlhhSW41RU5Wb2tHbndGTnFQSXBhZDFmSVpic1pybE9ackNpM0ZZSXJpS3lPb0c2K1ArQWZic0VBekowKzg4RGNIRyt3bVBQdWdaT09jVlBzRzhWYTJ3aWM4YUQ4Y1Q5bDl2aFh2Nnl2Tnl4aEFCalh4V2JXRm12MldnU1pwZkhGZ0ViTWVOVmpvUmlQOWJKOERnWkNWeTNwN1hVeW1JcmVadVZTM1BuMlBKdUJ0clJQNklXeTRWWUNQdURIbHZUR2N1QXRQNWlqTkc4TDdURWprTFI5SzBNRUdvV3NvTHA3M1c1ckM4dC9QZ1hPdHhuNGRhVGFVbVBweEZQU2pUQlVYV2U4aDcxamlMZlZkV0lGa0RMb0RmQUcxYzcrdjE5K1l1d05QLzlFZDkvd0cvbDBGd1lBeGVCVHo1dDFHeTNoZXdPMko2QksyREN6c3VoNlFtVGx3cnpnaUd6b0xub0l2OEY0Rk9sYkQwRTBPSi9WWXpXbThsUUlqNTdtZVlId2xMQnZrWUphbXJNNWJQc2NTVUdMTjJmWlZiRzB6VDRKN1BRRzhFaVpsNy93STNwSHBhcysrL2dYUC9wdW5nRFFITmNYNElwdWJtZmJPbVVBZkhnNTgzbUQ5R2JnZFAzc2tVLzF2ZnI3Mzhoc2FtOXdhZllOUno2OTJPYWFtQTRBS3huSnJNQ2pUTW9ROEp3MWwzUVZLWXpBeWhJcEo2U0dsUVRZdGZPbTVUWVNOajRpMWNCbFVZcWFuTWRjUXFYcUhlK3dLTDB5UkI2ODBWUmdJMlZXVXRsWkdOcXlRa1k3aThXY0c1NGlEZXZFSjZkUitTRVVQbEI2NmJtam41dzRjNFp2QU9CNCtsanVsbkxjTWw3dXBWTUd3UG1DYWZjMEN0OTM1djRQM1BYS2Q5NzJpOTNkUGRmd0c2Z3NoK3hUMUZ0WUJYaEZtNGVheGFOSVU4bW00WlUwWGV0TUpWY21id0hqRkoyWDlleUs1eThQanh5L0FSN1MyeVRLNVhWdm9PeE96NElSMk1udFlYenh3eXg4bWRobWY3Ny9VRjg4OWVYYjN2OEZKZW1Cb0wwRm1FK1lpdnVRcEtzOHJHQjdYQ2YzQUp4RG1QWUdtV1diZVBLVHArb1hqLzFaTi9jK2FsWllDUlJ6cXhlOExFaXQ2L2xZQVpKMUR4ZnVIZWN3WmpmZ3VNMUNwKzNReStlMDErT1o5RFk0cTlmcmFnTzlLMDBpWFFGY2FWN1dxcDhYZi9oMEdlK2pqR2dGc0VkZnJKbysrL3p0VDl6N1p5ZFZqaDVCUjJ4eFdxTFRwcDV2cHNvNDdLVHpJUWFrVVRTTzg4MjFsKy83NzdmcFlQNFp2dHpMYlVENFNLV0daVnJpY3NLcVpMT3VYRjI1UEVxRDg2Vm1pRzN1dWw0ZEc2SldKcktGdU4wcnF6S0t0azNtVytDakhYWFRIMTUxSG5ERURvT0Rlam1OSHlSaDJjODNLN3VYbHM1OC9YYnBRcGgzWFBsOXdreTVwNmZhN2pwcEFHQWVCL1FHMFVCODQveWpmM2hpNGR6UlA3SlZnTGl3dllCNHVpNXQ5UlVMcTJMZlVIS1lEeTRhMENKOXd6aktYMkd2NnEwTk1IS2xlV2xML2JRRFFyUnJoM25uaVM4eWora25oNW45OGVQNlhOM1VxV2R1ZWZDdWp4d25qeHlUb3hzQmI0WWxkT3JTU1FQZ1BIdEQwaFVBcDV4cUp6LzM3MjV0ek0wOTA2TkhJZmtaZXg3SGVZbHRocjZNTkNnR2ZYbnUwQnNFZE55V29OcmxkVjJwdGxxOTNxQnRsbk5IMmh6YllrWmdoN1VIbm5ocU5Dcmw1eWZZUitWUmZuMnUrcG5QLys0djNxb1E5LzdvUkQ1Qkt1eXRVTEJ6cnRNR2dFYmd2REZ1Qk16S1RUOTMzem41MzlMRTM4QUEySzJBTHZhZCtsQnVaMTNWQ2hTM1NYbDJGb2ViNHViYnJTM1duazFKWVBzeUQybmpiMXkvUE1wSFgvbU5SdDBDTkU0ZXV2OS9IWDMwM25QaUFuMUlaMy8weEhXbm8weDIraWxBeWp5TllzTDB4bUx4QnA3LzQzLzRoYi94bjE3NmJNK2Vneis3ekk5NHlCYjI2TUx2dlRVZDBVMHBYWWt3eXAvVWF6TjRFdDlWd2NTSTJRcG1XNGJhOWtqSSttVUh0UWRXZU9hL2QxaXp2Kzc1TVFBSDltcTZ2M2o2cy8vM3YvNGtPLzlNd3J6OVo1T2lvUGVPdDhLaGt0cnZPcjBDZ09PMFFZUjlGWURGczJYUG1YdC81VGV6aFlVVFBYb3FZTGNDTWdMZCtrNjJuY1NEUXVVcUNleENDVERZK2RqSHVIN0loWjhneHdEczM2TUpibW5oeEpjKzlxdi9ROGsrR2Zyc254b0JXdHhSNWFlQzdUQUExSU56NVM4YmdPVUxEMy8weE5Rem4vLzE3bHFqYms4RnpBRG9PYjE5M3owVXJxNlZCSGFiQkhqa042NWZjOXFuUjMzajhudjFReldqQTQzNmM0OTgvdGNmdXZNUFRxZzk2QUtUb0JzQTR1aEp4eFZmZFpqYlRnTkFoVzRFVXN1SEFHclAzL3FPZXhiT0hQbFFyNTZOOGlNWjV2V3VOQ3VCeWxVUzJHMFM0SWc3UCtXMlQ3K0ZaY292QTNCZ1hEOUtldUxJaC83a3ZlKzRXKzFCOTlaUy9tMHhBdHRsQUx3eHdMSVJRQWo0cnFOLzhLYmZYN3A0OGpOOWVrU0MzdHRYVW5WUFVLdU1nTVJUdWQwaUFWZisvVkorWnYyOVV2NnI5L08xMzlPZi9yMTN2ZWwvcXgzb0hkLzlYOHNBYkV0enQ4c0EwSmkxakVBUXh2ejh3dkZQdlAzWGxxY3ZQTkNybmRLd0NzQVE2UFhieWdoc3k0Q29Lcms4Q2ZDeG1EMjY1ejh3MXBYdDE2TStsdit2T0NDYUd0TzN2KzluZm0xK250K3FNc1ZQbGQvdi9ia0Z3TG11aEZnSHI5dHBBTHdadmdJbzd3VmdCSmFtWDN4bzRvVlAvK3RmYnN4ZWVyUlhLd0ZiQmVoWlJiZmVuZGE3QTlYR29FdXhnanRPQW54OW1sOXV2cXFrL04wTFU0OTg5a1AvNXQzSERuMXpnakV1WDU3OTBZbHRVL3BVY0ZmaUJ0dWZwamxNK1FIWFBYL3VxZG5GeVZOZkdiN2h4OTdZTTloL0RTS3p4MVh4ZmR3cjlYaXdUOGM0Ky9RTzk0Sys0MSt2NjZYaVZpMUlXN09EdzkwYXJJTTZtTUxIV09iMCt3UzczZEVXWmwvYTRpY0N0N05OL05UNFB2MTBPelAvUGkzNzhkZGNwUWxzL3RJamQzMzRsOTcxNkQyM3ZpUitFRFRLajA4My9zQzdBWEFvVk9mZGxUQUF0QXJWS1RjMFZhZnV1WmYrYW5yKzdOUDNqNzMyNzkvWU16UjRuWDA4T0ZnQktWNVl1R3kzSWFnTVFPY0g1RlpydUZJR2dFZlZ3d1BkV3U3amcrTHZaOWt2NWUrYXZmalZ6L3pPdi9vUGo5N3pDWlNmOGM3ei9yTHlnM2RkY0NqVTlyZ3JaUUJvblN1OHczS0x1eGZPSFptZGZ2YUw5NDY4L3FjUDlvMk0zb2lZTExNdXdRaXNWclJNcWozeHlnQzBSNDZkb0hJbERFQ3Zia3YzYUtmL2dINTMwbWQ5bnZOZnZVOWFmdkhVcDI5OTcwKzk1K2hEOTV4WGU1bmhVWDYvL3kvUC9vaGsyNVdmU25lQ0FZQ1AxVnhYZmZMVTRzdGYrNS8zN2ZtYjc2ejNqVjcxL1YxOGpBOVJtUkVJWHhPaThIWklyeklBcTNYVGxjZHZwd0hnK3hVam12WDNqV3JXMTA0L3lzOXUvOVU2NGJkM3VGR2ZlT0h3QnovNEwxNzdHK2ZQbnB5VlpGQjJYL1pqQU5nRDhFMC9IN1lPbGJTOTdrb2FBRnE2MmhUdUFnRmFudlBmL1BBM0I2NTU0NUdCZmRmZjNEM1FzMGUvb1JidXdiVUU2K0l0d2tqS0MzWkNqSlVCNklSVTIwTnpPd3lBZmNldlg2ZjZ0TkhIOC8xOWNjbVBBVGlvbmY3QnJ2bmp4eDc2OC8veWY5NzlsdHVrNGN6NktIeTY3UGVabjJIcXZqMEMyQ0tWSzIwQVlIczlJK0JONjVsNDRrK2ZsWG45MHNncmYyaHY5K0Rvalg1UUVBTGNpM0ZiME1uanc1VUI4SzdZZWJBVEJzQm5IM2IzQjZYNExQZE44WFdQNzgvM3I5TGhIcDd6TDAyZStzemRIL21QLy9tdWo3em5NWWFqdk0vNndQTE1mOFUyL2NvOXQ1cnlsZk4xT3U1OEFObmh3Mk9jOEhwWjJMemVGTWp3aHIvK0Z6Ny9FNFBmOWFQdnF2VVB2MjVSNGwyU1owYzc5OW9LNXNkQTJTaGNabHY0TXJlR0tUNGl5eitzbHpyQ2o0UHFOMnVkYXpHMW14eHQ0WmVJOSs3dHNhY1pGeTh5TWUxdVIxdDRzbkhod21LMnBCK0EzWXFqRkYxS3Z6TGJvL2k4eURQWXowWmYrSVFYRU0vSFBNWTE4OWNXWm8rZWVQSytEOTN5S3ovMUZ5cnF5M3RYZmhRZjRhWXovNDVSZnZHMTZ1eEwyblk3VnllZ0d3RWdieXppVTBOQWVIbndOWC8zd0t0LytzUC91SGYvamY4czYrazlpQkZZa3FneEFqdzFNS2hleFFBdzZCdENLQlJzQVloTk9MSlhCbUFUQXR2bXJCczFBR212KzREajVCNnZvcVB3K0g1K3B0MjgzdVRUbE1ObnUvRkRVbnplNVIvVGpOKzlWRDk5NmRTUmozL3V0Ly85bng0NzlKVnphaTVqRllYM0dkK1YzNDJDSzc2ejRIQ2JKZFZjbmN1Z0dYdmxZczRQRU8rR0FBT1FyZ2JjR0lCZkhyLzVGMTU5OVZ2ZTgvTzllMjk0UjliYmZ5MGZHc1VZbUJHUW1JRm1BQWliandaQkVmN3Nud1M1L0JvQ2hqTzg0cFVCeU1WeDJRSEU2NTFkRW5VVGJmS3NsZTZaOTYyeUFyQTZkR0dQaUpuZFozZi9vVmNVbnQvbjQ4QlpuMFpWL2t1OU1jd1Bkd3pvL1pSUnpmak0vTFhGK1pPVFo0NTk2b0hiZnVPVEQzL3hsaE9xbnpIS0RJL0N1MDluZlJSL1J5cS8rTXI3Z1BCT2N0WnZZc2dOZ0VOZkRhUXJBb3dCNmN1anIzL2JOUWZmK3FzLzNuZmdwcCtwOVkxOWp6NHIwSTB4V0U1V0Jia2hVQUhUZVkydXFQdUNaZzd5RVplZU0rQ0R4U1BEV2dyS1QwMDFzdWxwL1FpMWN5bGF1STBNMUpEenlsNXByOTBDak5mQ0xjREV5aC9VTGpYTkdBYVgvajZCeFlWcmxkZGI2REpDTnF2bGE4SjdwRVVCVHpJWUNSTW1PTDYzWmtvOE1kR3dXNER3ZXhNYUdFcGpkamVGVjlpT2x5dXVKM2dXNWxkNVVmNWVqU2ovbFY0TUFUL1Z6WXpQTC9iVWxyUzBYNXA2L09LSnB6NTMvKzN2dS92UVZ6LzNVbXdPaXUxS0Qwd1ZuNW5mRlIvb2JrY05FK1MzVTUzekJrVEIzYXU3N0pZQWlQSzdVY2dOUWRZN1BITHRQL2pOTjR4Yy82Ti9wM3YwMVQ5VTZ4MSt2WHA3bEJGb0JrRmRZNnNDZFl2MWhpNG9oWWRGYzBXWS9DTmErZzFySnBqVTE5dW5wOFBBSTY4NUsreVJuUTJEQWREbUZSK20wTENkNElDcW5BbGNGNkFyYmc3WHdLWGx5blNJUTlEeUpPRnlQQ2JsR1QwOXJUK2xBOTd5QU9YSDlmeWRWOGtuMVJadS9WQjg4S2I4Z3NVWHAwTFlEWUROL0NnL1NxK1pIc1hYZ2lEcldsNmVYSzVQSFowOS8rSTNqaCs2LzRFN2YvZmRoK3YxYWI3Ynp6aEVvWDNXZDZWM1NGcnFmV1E0VlBMT2NXcnFqblVwYjRRUnZFUENHQUEzQm00RUhJSjNnUS91Kzl2Lzl0cXhHOTkyVTkvK04zeHY5OUNCTjlSNmhyNHJxL1h1VjJtOVhCQ1ZYMTNtdHdxVU5JUGdGR0ljNWNkUHRUSUFxckNWY3hLdDBxNFVqcll4NEZNRGdHQk5xUlJ3NVhJbGFrcEw4NjBYcG9IUTgzeWJpYStSMTJnNlhXaHJOT3pSSXpsbTk2bkphQUNFODluZlBqS2pPT2tvUE4rZ1pNWW5ySC9VZFZHZm9uaDVlV0htK2ZucGM0ZlB2M0Q0OFdjZXV2T3ByMy8yOTA4cWxkL3Fvd2s0Wm5WWGRJZmczSmNWMzd2ZklUUjJsUE9HN1NpbVNzdzRqMEQzR0FEQzlGL1pZd1RBT2ZTOGRBNWwrclV5MkR2eStwOTh4ZUJWTjEvWHMrZFYxM1gzNzN0VlY5L3dLN3E2Ky9kMzFmcjJOR3ExNFM1RjFHdTlkdXBZcGVoQlZnRDRTUTB5WHdHZ1RPdTZqZVJabDBqN01wZ0IwRXlYR2dCVEZyWFRaczBFdWhGWUMzcGFXdGFOU0JOT1RUQjhwQzlRMUplbXBlRlNYaStUMDFGZVp2a3g3Y2lqNE16UnJBQXNIM0tYVjdpZU5aYm1hNDNsNmF5eE1MRzhPUC95MHNMMFMvTlQ1MStZdW5EeStYUEhIajl4N0xHN1R4MTk1SjZMS3NGemUwcENBdWZLN2NxZlFrOXp4WTgxMmdvZ2xBNjBQTHpqb0RkeXh6RldZaWpsazdCN2xEdjFaV05BbXVNODdHV3BnZzdEa2RiYk83U252Ly9nelVPOTQ5ODkzTFBudXVHKzBZTWpYUU5qSXowRGU0ZXk3c0doNFpHQndhR3hnZjdaK1o3K3VibGFmNjI3cDBjZks5QXFRZytndW1yYVRxcnBSMmthZ2h4STBQZERPWlRRMEYwemYxVFJXS2J1SGVIRWViWkh5K1pGeldOVGx5UlFzU2ZHRFpwQ2kwdFRYdUVSanVFSWswZnhwcndSaHlLYVlwS2ZzSmZ6ZE1VaFpuUVZOT01LVkxyUWVWbkpVcUpqajZXcm9mclVSeEtpQkN1MEh1TjBMVW1PVXJqbEpSWFR6OHd1TERVYWk0dURBOHZ6V1dOeGZ2TFMzUHpTL056c1luMTJabUhxd3N6Q3pLV3BtWW5UVXhObmowOWZQUFhNOU9uamZ6VXpNekV4cCtxNFowZHhjVlNQWXp5NE1xUGNoRjNKVStoNG9KY0J1bGZRSFBFZDdlaWozZVJTZmdtN3B3TnRERVdJMGpzT1dJNm5hZER3c2dvYVRTRE9PNVE4M3BrZUJ1SWNsc09XV0VwM1hBVTNMZ0dYZTFvaXhYbllZWnFQc1BkUDJtL2tkZVgxTVBIVXV3RndYRG51NVlEdUZUUkhmRmM0Rjg2dVlEWmhNdVdiY09wZG1WUFlTdUU5bmJKcE9LWGxZYW9takhOWURsdGlLZDF4Rld5UEJGb3BWaG5uY1dBNTdEaUhiZ1JTV0E2N0FTaVg4VGpRWFJwMjNJNkc2V0RlMFl5dXdsektQK0gxZktyb2FiaFZPYXAwdklkYlFYQ3BvMHpsT2lPQnRSVE0wMXJCRkVlNDdGM3B3YWRoajlNYThMaTBiTUFVaHNianV3Wit1d3pXdEIwZUJwYkRhK0hLZWVuRWN2NjBZejEvaWl1SE41S25YS2FLcjVRQVNyY1JsK2J6c0NzczVWdUZIZWN3elZmR2VSb1FSL3F1ZHQ5T0E1UzIwQ0hsTm5rY21JYnB1TlZ3cExrcmwzRTgwTk5TWEJwZUx6M05XNFZYbDhCNml0WXEzWEVPb2U3aGpjQnlIdWZPOFI3ZjFmRGJmWUNXMjVmR054S21jOU44YVdldmhrL3pWT0h0bFVBcjVVeHhhUmpPUE80d3hhV2NrMDUvcC9uUzlGMGIvazRaeE41NWE3VzNuTGFWTXJ0MklPeHl4dGRTek5YUzFzTDdXRmd0enk0WFY4RytON1RBZkdlRkxyZjlsMXYrTzB2YW5XdnQ1U3JxNVpidlhNczZUTGthd0JzVGNDV25qY2xwcCtYNmpsWHNuZFlSRlQrVkJDb0pWQktvSkZCSm9KSkFKWUZLQXBVRUtnbFVFcWdrVUVtZ2trQWxnVW9DbFFRcUNWUVNxQ1JRU2FDU1FDV0JTZ0tWQkNvSlZCS29KRkJKb0pKQUpZRktBcFVFS2dsVUVxZ2tVRW1na2tBbGdVb0NsUVFxQ1ZRU3FDUlFTYUNTUUNXQlNnS1ZCQ29KVkJLb0pGQkpvSkpBSllGS0FwVUVLZ2xVRXFna1VFbWdrc0RHSmZEL0FiUEhaeUY3ZWlnRkFBQUFBRWxGVGtTdVFtQ0MiPgo8c3R5bGU+KiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7Ym94LXNpemluZzpib3JkZXItYm94fWh0bWwsYm9keXttYXJnaW46MDtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59PC9zdHlsZT4KPC9oZWFkPjxib2R5Pgo8ZGl2IGlkPSJyb290Ij48L2Rpdj4KPCEtLV9fU0lNX1BSRVZJRVdfQ09ORklHX18tLT4KPHNjcmlwdCB0eXBlPSJtb2R1bGUiPnZhciB5MixSLEMzLFM4LGYxLG41LFozLEozLFE1LEUyLEYyLFgzLEs1LCQ1LFk1LHEzLFMyPXt9LGIyPVtdLGI4PS9hY2l0fGV4KD86c3xnfG58cHwkKXxycGh8Z3JpZHxvd3N8bW5jfG50d3xpbmVbY2hdfHpvb3xeb3JkfGl0ZXJhL2ksRDI9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBSMShDLFope2Zvcih2YXIgSiBpbiBaKUNbSl09WltKXTtyZXR1cm4gQ31mdW5jdGlvbiBMNShDKXtDJiZDLnBhcmVudE5vZGUmJkMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChDKX1mdW5jdGlvbiB3MShDLFosSil7dmFyIFgsRyxRLCQ9e307Zm9yKFEgaW4gWilRPT0ia2V5Ij9YPVpbUV06UT09InJlZiI/Rz1aW1FdOiRbUV09WltRXTtpZihhcmd1bWVudHMubGVuZ3RoPjImJigkLmNoaWxkcmVuPWFyZ3VtZW50cy5sZW5ndGg+Mz95Mi5jYWxsKGFyZ3VtZW50cywyKTpKKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmQy5kZWZhdWx0UHJvcHMhPW51bGwpZm9yKFEgaW4gQy5kZWZhdWx0UHJvcHMpJFtRXT09PXZvaWQgMCYmKCRbUV09Qy5kZWZhdWx0UHJvcHNbUV0pO3JldHVybiB3MihDLCQsWCxHLG51bGwpfWZ1bmN0aW9uIHcyKEMsWixKLFgsRyl7dmFyIFE9e3R5cGU6Qyxwcm9wczpaLGtleTpKLHJlZjpYLF9fazpudWxsLF9fOm51bGwsX19iOjAsX19lOm51bGwsX19jOm51bGwsY29uc3RydWN0b3I6dm9pZCAwLF9fdjpHPT1udWxsPysrQzM6RyxfX2k6LTEsX191OjB9O3JldHVybiBHPT1udWxsJiZSLnZub2RlIT1udWxsJiZSLnZub2RlKFEpLFF9ZnVuY3Rpb24gSjEoQyl7cmV0dXJuIEMuY2hpbGRyZW59ZnVuY3Rpb24gSzEoQyxaKXt0aGlzLnByb3BzPUMsdGhpcy5jb250ZXh0PVp9ZnVuY3Rpb24gcTIoQyxaKXtpZihaPT1udWxsKXJldHVybiBDLl9fP3EyKEMuX18sQy5fX2krMSk6bnVsbDtmb3IodmFyIEo7WjxDLl9fay5sZW5ndGg7WisrKWlmKChKPUMuX19rW1pdKSE9bnVsbCYmSi5fX2UhPW51bGwpcmV0dXJuIEouX19lO3JldHVybiB0eXBlb2YgQy50eXBlPT0iZnVuY3Rpb24iP3EyKEMpOm51bGx9ZnVuY3Rpb24gUjgoQyl7aWYoQy5fX1AmJkMuX19kKXt2YXIgWj1DLl9fdixKPVouX19lLFg9W10sRz1bXSxRPVIxKHt9LFopO1EuX192PVouX192KzEsUi52bm9kZSYmUi52bm9kZShRKSxCNShDLl9fUCxRLFosQy5fX24sQy5fX1AubmFtZXNwYWNlVVJJLDMyJlouX191P1tKXTpudWxsLFgsSj09bnVsbD9xMihaKTpKLCEhKDMyJlouX191KSxHKSxRLl9fdj1aLl9fdixRLl9fLl9fa1tRLl9faV09USxZMyhYLFEsRyksWi5fX2U9Wi5fXz1udWxsLFEuX19lIT1KJiZHMyhRKX19ZnVuY3Rpb24gRzMoQyl7aWYoKEM9Qy5fXykhPW51bGwmJkMuX19jIT1udWxsKXJldHVybiBDLl9fZT1DLl9fYy5iYXNlPW51bGwsQy5fX2suc29tZShmdW5jdGlvbihaKXtpZihaIT1udWxsJiZaLl9fZSE9bnVsbClyZXR1cm4gQy5fX2U9Qy5fX2MuYmFzZT1aLl9fZX0pLEczKEMpfWZ1bmN0aW9uIFY1KEMpeyghQy5fX2QmJihDLl9fZD0hMCkmJmYxLnB1c2goQykmJiFSMi5fX3IrK3x8bjUhPVIuZGVib3VuY2VSZW5kZXJpbmcpJiYoKG41PVIuZGVib3VuY2VSZW5kZXJpbmcpfHxaMykoUjIpfWZ1bmN0aW9uIFIyKCl7dHJ5e2Zvcih2YXIgQyxaPTE7ZjEubGVuZ3RoOylmMS5sZW5ndGg+WiYmZjEuc29ydChKMyksQz1mMS5zaGlmdCgpLFo9ZjEubGVuZ3RoLFI4KEMpfWZpbmFsbHl7ZjEubGVuZ3RoPVIyLl9fcj0wfX1mdW5jdGlvbiBRMyhDLFosSixYLEcsUSwkLFksXyxWLEIpe3ZhciBLLEgsRixNLEwsRCxPLFA9WCYmWC5fX2t8fGIyLEU9Wi5sZW5ndGg7Zm9yKF89eTgoSixaLFAsXyxFKSxLPTA7SzxFO0srKykoRj1KLl9fa1tLXSkhPW51bGwmJihIPUYuX19pIT0tMSYmUFtGLl9faV18fFMyLEYuX19pPUssRD1CNShDLEYsSCxHLFEsJCxZLF8sVixCKSxNPUYuX19lLEYucmVmJiZILnJlZiE9Ri5yZWYmJihILnJlZiYmSDUoSC5yZWYsbnVsbCxGKSxCLnB1c2goRi5yZWYsRi5fX2N8fE0sRikpLEw9PW51bGwmJk0hPW51bGwmJihMPU0pLChPPSEhKDQmRi5fX3UpKXx8SC5fX2s9PT1GLl9faz8oXz0kMyhGLF8sQyxPKSxPJiZILl9fZSYmKEguX19lPW51bGwpKTp0eXBlb2YgRi50eXBlPT0iZnVuY3Rpb24iJiZEIT09dm9pZCAwP189RDpNJiYoXz1NLm5leHRTaWJsaW5nKSxGLl9fdSY9LTcpO3JldHVybiBKLl9fZT1MLF99ZnVuY3Rpb24geTgoQyxaLEosWCxHKXt2YXIgUSwkLFksXyxWLEI9Si5sZW5ndGgsSz1CLEg9MDtmb3IoQy5fX2s9QXJyYXkoRyksUT0wO1E8RztRKyspKCQ9WltRXSkhPW51bGwmJnR5cGVvZiAkIT0iYm9vbGVhbiImJnR5cGVvZiAkIT0iZnVuY3Rpb24iPyh0eXBlb2YgJD09InN0cmluZyJ8fHR5cGVvZiAkPT0ibnVtYmVyInx8dHlwZW9mICQ9PSJiaWdpbnQifHwkLmNvbnN0cnVjdG9yPT1TdHJpbmc/JD1DLl9fa1tRXT13MihudWxsLCQsbnVsbCxudWxsLG51bGwpOkQyKCQpPyQ9Qy5fX2tbUV09dzIoSjEse2NoaWxkcmVuOiR9LG51bGwsbnVsbCxudWxsKTokLmNvbnN0cnVjdG9yPT09dm9pZCAwJiYkLl9fYj4wPyQ9Qy5fX2tbUV09dzIoJC50eXBlLCQucHJvcHMsJC5rZXksJC5yZWY/JC5yZWY6bnVsbCwkLl9fdik6Qy5fX2tbUV09JCxfPVErSCwkLl9fPUMsJC5fX2I9Qy5fX2IrMSxZPW51bGwsKFY9JC5fX2k9ajgoJCxKLF8sSykpIT0tMSYmKEstLSwoWT1KW1ZdKSYmKFkuX191fD0yKSksWT09bnVsbHx8WS5fX3Y9PW51bGw/KFY9PS0xJiYoRz5CP0gtLTpHPEImJkgrKyksdHlwZW9mICQudHlwZSE9ImZ1bmN0aW9uIiYmKCQuX191fD00KSk6ViE9XyYmKFY9PV8tMT9ILS06Vj09XysxP0grKzooVj5fP0gtLTpIKyssJC5fX3V8PTQpKSk6Qy5fX2tbUV09bnVsbDtpZihLKWZvcihRPTA7UTxCO1ErKykoWT1KW1FdKSE9bnVsbCYmKDImWS5fX3UpPT0wJiYoWS5fX2U9PVgmJihYPXEyKFkpKSxfMyhZLFkpKTtyZXR1cm4gWH1mdW5jdGlvbiAkMyhDLFosSixYKXt2YXIgRyxRO2lmKHR5cGVvZiBDLnR5cGU9PSJmdW5jdGlvbiIpe2ZvcihHPUMuX19rLFE9MDtHJiZRPEcubGVuZ3RoO1ErKylHW1FdJiYoR1tRXS5fXz1DLFo9JDMoR1tRXSxaLEosWCkpO3JldHVybiBafUMuX19lIT1aJiYoWCYmKFomJkMudHlwZSYmIVoucGFyZW50Tm9kZSYmKFo9cTIoQykpLEouaW5zZXJ0QmVmb3JlKEMuX19lLFp8fG51bGwpKSxaPUMuX19lKTtkbyBaPVomJloubmV4dFNpYmxpbmc7d2hpbGUoWiE9bnVsbCYmWi5ub2RlVHlwZT09OCk7cmV0dXJuIFp9ZnVuY3Rpb24geTEoQyxaKXtyZXR1cm4gWj1afHxbXSxDPT1udWxsfHx0eXBlb2YgQz09ImJvb2xlYW4ifHwoRDIoQyk/Qy5zb21lKGZ1bmN0aW9uKEope3kxKEosWil9KTpaLnB1c2goQykpLFp9ZnVuY3Rpb24gajgoQyxaLEosWCl7dmFyIEcsUSwkLFk9Qy5rZXksXz1DLnR5cGUsVj1aW0pdLEI9ViE9bnVsbCYmKDImVi5fX3UpPT0wO2lmKFY9PT1udWxsJiZZPT1udWxsfHxCJiZZPT1WLmtleSYmXz09Vi50eXBlKXJldHVybiBKO2lmKFg+KEI/MTowKSl7Zm9yKEc9Si0xLFE9SisxO0c+PTB8fFE8Wi5sZW5ndGg7KWlmKChWPVpbJD1HPj0wP0ctLTpRKytdKSE9bnVsbCYmKDImVi5fX3UpPT0wJiZZPT1WLmtleSYmXz09Vi50eXBlKXJldHVybiAkfXJldHVybi0xfWZ1bmN0aW9uIHQ1KEMsWixKKXtaWzBdPT0iLSI/Qy5zZXRQcm9wZXJ0eShaLEo9PW51bGw/IiI6Sik6Q1taXT1KPT1udWxsPyIiOnR5cGVvZiBKIT0ibnVtYmVyInx8YjgudGVzdChaKT9KOkorInB4In1mdW5jdGlvbiBUMihDLFosSixYLEcpe3ZhciBRLCQ7QzppZihaPT0ic3R5bGUiKWlmKHR5cGVvZiBKPT0ic3RyaW5nIilDLnN0eWxlLmNzc1RleHQ9SjtlbHNle2lmKHR5cGVvZiBYPT0ic3RyaW5nIiYmKEMuc3R5bGUuY3NzVGV4dD1YPSIiKSxYKWZvcihaIGluIFgpSiYmWiBpbiBKfHx0NShDLnN0eWxlLFosIiIpO2lmKEopZm9yKFogaW4gSilYJiZKW1pdPT1YW1pdfHx0NShDLnN0eWxlLFosSltaXSl9ZWxzZSBpZihaWzBdPT0ibyImJlpbMV09PSJuIilRPVohPShaPVoucmVwbGFjZShYMywiJDEiKSksJD1aLnRvTG93ZXJDYXNlKCksWj0kIGluIEN8fFo9PSJvbkZvY3VzT3V0Inx8Wj09Im9uRm9jdXNJbiI/JC5zbGljZSgyKTpaLnNsaWNlKDIpLEMubHx8KEMubD17fSksQy5sW1orUV09SixKP1g/SltGMl09WFtGMl06KEpbRjJdPUs1LEMuYWRkRXZlbnRMaXN0ZW5lcihaLFE/WTU6JDUsUSkpOkMucmVtb3ZlRXZlbnRMaXN0ZW5lcihaLFE/WTU6JDUsUSk7ZWxzZXtpZihHPT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKVo9Wi5yZXBsYWNlKC94bGluayhIfDpoKS8sImgiKS5yZXBsYWNlKC9zTmFtZSQvLCJzIik7ZWxzZSBpZihaIT0id2lkdGgiJiZaIT0iaGVpZ2h0IiYmWiE9ImhyZWYiJiZaIT0ibGlzdCImJlohPSJmb3JtIiYmWiE9InRhYkluZGV4IiYmWiE9ImRvd25sb2FkIiYmWiE9InJvd1NwYW4iJiZaIT0iY29sU3BhbiImJlohPSJyb2xlIiYmWiE9InBvcG92ZXIiJiZaIGluIEMpdHJ5e0NbWl09Sj09bnVsbD8iIjpKO2JyZWFrIEN9Y2F0Y2goWSl7fXR5cGVvZiBKPT0iZnVuY3Rpb24ifHwoSj09bnVsbHx8Sj09PSExJiZaWzRdIT0iLSI/Qy5yZW1vdmVBdHRyaWJ1dGUoWik6Qy5zZXRBdHRyaWJ1dGUoWixaPT0icG9wb3ZlciImJko9PTE/IiI6SikpfX1mdW5jdGlvbiBlNShDKXtyZXR1cm4gZnVuY3Rpb24oWil7aWYodGhpcy5sKXt2YXIgSj10aGlzLmxbWi50eXBlK0NdO2lmKFpbRTJdPT1udWxsKVpbRTJdPUs1Kys7ZWxzZSBpZihaW0UyXTxKW0YyXSlyZXR1cm47cmV0dXJuIEooUi5ldmVudD9SLmV2ZW50KFopOlopfX19ZnVuY3Rpb24gQjUoQyxaLEosWCxHLFEsJCxZLF8sVil7dmFyIEIsSyxILEYsTSxMLEQsTyxQLEUsdyxmLGssVCxTLHg9Wi50eXBlO2lmKFouY29uc3RydWN0b3IhPT12b2lkIDApcmV0dXJuIG51bGw7MTI4JkouX191JiYoXz0hISgzMiZKLl9fdSksUT1bWT1aLl9fZT1KLl9fZV0pLChCPVIuX19iKSYmQihaKTtDOmlmKHR5cGVvZiB4PT0iZnVuY3Rpb24iKXRyeXtpZihPPVoucHJvcHMsUD14LnByb3RvdHlwZSYmeC5wcm90b3R5cGUucmVuZGVyLEU9KEI9eC5jb250ZXh0VHlwZSkmJlhbQi5fX2NdLHc9Qj9FP0UucHJvcHMudmFsdWU6Qi5fXzpYLEouX19jP0Q9KEs9Wi5fX2M9Si5fX2MpLl9fPUsuX19FOihQP1ouX19jPUs9bmV3IHgoTyx3KTooWi5fX2M9Sz1uZXcgSzEoTyx3KSxLLmNvbnN0cnVjdG9yPXgsSy5yZW5kZXI9djgpLEUmJkUuc3ViKEspLEsuc3RhdGV8fChLLnN0YXRlPXt9KSxLLl9fbj1YLEg9Sy5fX2Q9ITAsSy5fX2g9W10sSy5fc2I9W10pLFAmJksuX19zPT1udWxsJiYoSy5fX3M9Sy5zdGF0ZSksUCYmeC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMhPW51bGwmJihLLl9fcz09Sy5zdGF0ZSYmKEsuX19zPVIxKHt9LEsuX19zKSksUjEoSy5fX3MseC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoTyxLLl9fcykpKSxGPUsucHJvcHMsTT1LLnN0YXRlLEsuX192PVosSClQJiZ4LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcz09bnVsbCYmSy5jb21wb25lbnRXaWxsTW91bnQhPW51bGwmJksuY29tcG9uZW50V2lsbE1vdW50KCksUCYmSy5jb21wb25lbnREaWRNb3VudCE9bnVsbCYmSy5fX2gucHVzaChLLmNvbXBvbmVudERpZE1vdW50KTtlbHNle2lmKFAmJnguZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzPT1udWxsJiZPIT09RiYmSy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIT1udWxsJiZLLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoTyx3KSxaLl9fdj09Si5fX3Z8fCFLLl9fZSYmSy5zaG91bGRDb21wb25lbnRVcGRhdGUhPW51bGwmJksuc2hvdWxkQ29tcG9uZW50VXBkYXRlKE8sSy5fX3Msdyk9PT0hMSl7Wi5fX3YhPUouX192JiYoSy5wcm9wcz1PLEsuc3RhdGU9Sy5fX3MsSy5fX2Q9ITEpLFouX19lPUouX19lLFouX19rPUouX19rLFouX19rLnNvbWUoZnVuY3Rpb24ocyl7cyYmKHMuX189Wil9KSxiMi5wdXNoLmFwcGx5KEsuX19oLEsuX3NiKSxLLl9zYj1bXSxLLl9faC5sZW5ndGgmJiQucHVzaChLKTticmVhayBDfUsuY29tcG9uZW50V2lsbFVwZGF0ZSE9bnVsbCYmSy5jb21wb25lbnRXaWxsVXBkYXRlKE8sSy5fX3MsdyksUCYmSy5jb21wb25lbnREaWRVcGRhdGUhPW51bGwmJksuX19oLnB1c2goZnVuY3Rpb24oKXtLLmNvbXBvbmVudERpZFVwZGF0ZShGLE0sTCl9KX1pZihLLmNvbnRleHQ9dyxLLnByb3BzPU8sSy5fX1A9QyxLLl9fZT0hMSxmPVIuX19yLGs9MCxQKUsuc3RhdGU9Sy5fX3MsSy5fX2Q9ITEsZiYmZihaKSxCPUsucmVuZGVyKEsucHJvcHMsSy5zdGF0ZSxLLmNvbnRleHQpLGIyLnB1c2guYXBwbHkoSy5fX2gsSy5fc2IpLEsuX3NiPVtdO2Vsc2UgZG8gSy5fX2Q9ITEsZiYmZihaKSxCPUsucmVuZGVyKEsucHJvcHMsSy5zdGF0ZSxLLmNvbnRleHQpLEsuc3RhdGU9Sy5fX3M7d2hpbGUoSy5fX2QmJisrazwyNSk7Sy5zdGF0ZT1LLl9fcyxLLmdldENoaWxkQ29udGV4dCE9bnVsbCYmKFg9UjEoUjEoe30sWCksSy5nZXRDaGlsZENvbnRleHQoKSkpLFAmJiFIJiZLLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlIT1udWxsJiYoTD1LLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKEYsTSkpLFQ9QiE9bnVsbCYmQi50eXBlPT09SjEmJkIua2V5PT1udWxsP1YzKEIucHJvcHMuY2hpbGRyZW4pOkIsWT1RMyhDLEQyKFQpP1Q6W1RdLFosSixYLEcsUSwkLFksXyxWKSxLLmJhc2U9Wi5fX2UsWi5fX3UmPS0xNjEsSy5fX2gubGVuZ3RoJiYkLnB1c2goSyksRCYmKEsuX19FPUsuX189bnVsbCl9Y2F0Y2gocyl7aWYoWi5fX3Y9bnVsbCxffHxRIT1udWxsKWlmKHMudGhlbil7Zm9yKFouX191fD1fPzE2MDoxMjg7WSYmWS5ub2RlVHlwZT09OCYmWS5uZXh0U2libGluZzspWT1ZLm5leHRTaWJsaW5nO1FbUS5pbmRleE9mKFkpXT1udWxsLFouX19lPVl9ZWxzZXtmb3IoUz1RLmxlbmd0aDtTLS07KUw1KFFbU10pO181KFopfWVsc2UgWi5fX2U9Si5fX2UsWi5fX2s9Si5fX2sscy50aGVufHxfNShaKTtSLl9fZShzLFosSil9ZWxzZSBRPT1udWxsJiZaLl9fdj09Si5fX3Y/KFouX19rPUouX19rLFouX19lPUouX19lKTpZPVouX19lPWg4KEouX19lLFosSixYLEcsUSwkLF8sVik7cmV0dXJuKEI9Ui5kaWZmZWQpJiZCKFopLDEyOCZaLl9fdT92b2lkIDA6WX1mdW5jdGlvbiBfNShDKXtDJiYoQy5fX2MmJihDLl9fYy5fX2U9ITApLEMuX19rJiZDLl9fay5zb21lKF81KSl9ZnVuY3Rpb24gWTMoQyxaLEope2Zvcih2YXIgWD0wO1g8Si5sZW5ndGg7WCsrKUg1KEpbWF0sSlsrK1hdLEpbKytYXSk7Ui5fX2MmJlIuX19jKFosQyksQy5zb21lKGZ1bmN0aW9uKEcpe3RyeXtDPUcuX19oLEcuX19oPVtdLEMuc29tZShmdW5jdGlvbihRKXtRLmNhbGwoRyl9KX1jYXRjaChRKXtSLl9fZShRLEcuX192KX19KX1mdW5jdGlvbiBWMyhDKXtyZXR1cm4gdHlwZW9mIEMhPSJvYmplY3QifHxDPT1udWxsfHxDLl9fYj4wP0M6RDIoQyk/Qy5tYXAoVjMpOlIxKHt9LEMpfWZ1bmN0aW9uIGg4KEMsWixKLFgsRyxRLCQsWSxfKXt2YXIgVixCLEssSCxGLE0sTCxEPUoucHJvcHN8fFMyLE89Wi5wcm9wcyxQPVoudHlwZTtpZihQPT0ic3ZnIj9HPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI6UD09Im1hdGgiP0c9Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiOkd8fChHPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiksUSE9bnVsbCl7Zm9yKFY9MDtWPFEubGVuZ3RoO1YrKylpZigoRj1RW1ZdKSYmInNldEF0dHJpYnV0ZSJpbiBGPT0hIVAmJihQP0YubG9jYWxOYW1lPT1QOkYubm9kZVR5cGU9PTMpKXtDPUYsUVtWXT1udWxsO2JyZWFrfX1pZihDPT1udWxsKXtpZihQPT1udWxsKXJldHVybiBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShPKTtDPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhHLFAsTy5pcyYmTyksWSYmKFIuX19tJiZSLl9fbShaLFEpLFk9ITEpLFE9bnVsbH1pZihQPT1udWxsKUQ9PT1PfHxZJiZDLmRhdGE9PU98fChDLmRhdGE9Tyk7ZWxzZXtpZihRPVEmJnkyLmNhbGwoQy5jaGlsZE5vZGVzKSwhWSYmUSE9bnVsbClmb3IoRD17fSxWPTA7VjxDLmF0dHJpYnV0ZXMubGVuZ3RoO1YrKylEWyhGPUMuYXR0cmlidXRlc1tWXSkubmFtZV09Ri52YWx1ZTtmb3IoViBpbiBEKUY9RFtWXSxWPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0s9RjpWPT0iY2hpbGRyZW4ifHwoViBpbiBPKXx8Vj09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gTyl8fFY9PSJjaGVja2VkIiYmKCJkZWZhdWx0Q2hlY2tlZCJpbiBPKXx8VDIoQyxWLG51bGwsRixHKTtmb3IoViBpbiBPKUY9T1tWXSxWPT0iY2hpbGRyZW4iP0g9RjpWPT0iZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiP0I9RjpWPT0idmFsdWUiP009RjpWPT0iY2hlY2tlZCI/TD1GOlkmJnR5cGVvZiBGIT0iZnVuY3Rpb24ifHxEW1ZdPT09Rnx8VDIoQyxWLEYsRFtWXSxHKTtpZihCKVl8fEsmJihCLl9faHRtbD09Sy5fX2h0bWx8fEIuX19odG1sPT1DLmlubmVySFRNTCl8fChDLmlubmVySFRNTD1CLl9faHRtbCksWi5fX2s9W107ZWxzZSBpZihLJiYoQy5pbm5lckhUTUw9IiIpLFEzKFoudHlwZT09InRlbXBsYXRlIj9DLmNvbnRlbnQ6QyxEMihIKT9IOltIXSxaLEosWCxQPT0iZm9yZWlnbk9iamVjdCI/Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiOkcsUSwkLFE/UVswXTpKLl9fayYmcTIoSiwwKSxZLF8pLFEhPW51bGwpZm9yKFY9US5sZW5ndGg7Vi0tOylMNShRW1ZdKTtZfHwoVj0idmFsdWUiLFA9PSJwcm9ncmVzcyImJk09PW51bGw/Qy5yZW1vdmVBdHRyaWJ1dGUoInZhbHVlIik6TSE9bnVsbCYmKE0hPT1DW1ZdfHxQPT0icHJvZ3Jlc3MiJiYhTXx8UD09Im9wdGlvbiImJk0hPURbVl0pJiZUMihDLFYsTSxEW1ZdLEcpLFY9ImNoZWNrZWQiLEwhPW51bGwmJkwhPUNbVl0mJlQyKEMsVixMLERbVl0sRykpfXJldHVybiBDfWZ1bmN0aW9uIEg1KEMsWixKKXt0cnl7aWYodHlwZW9mIEM9PSJmdW5jdGlvbiIpe3ZhciBYPXR5cGVvZiBDLl9fdT09ImZ1bmN0aW9uIjtYJiZDLl9fdSgpLFgmJlo9PW51bGx8fChDLl9fdT1DKFopKX1lbHNlIEMuY3VycmVudD1afWNhdGNoKEcpe1IuX19lKEcsSil9fWZ1bmN0aW9uIF8zKEMsWixKKXt2YXIgWCxHO2lmKFIudW5tb3VudCYmUi51bm1vdW50KEMpLChYPUMucmVmKSYmKFguY3VycmVudCYmWC5jdXJyZW50IT1DLl9fZXx8SDUoWCxudWxsLFopKSwoWD1DLl9fYykhPW51bGwpe2lmKFguY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e1guY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaChRKXtSLl9fZShRLFopfVguYmFzZT1YLl9fUD1udWxsfWlmKFg9Qy5fX2spZm9yKEc9MDtHPFgubGVuZ3RoO0crKylYW0ddJiZfMyhYW0ddLFosSnx8dHlwZW9mIEMudHlwZSE9ImZ1bmN0aW9uIik7Snx8TDUoQy5fX2UpLEMuX19jPUMuX189Qy5fX2U9dm9pZCAwfWZ1bmN0aW9uIHY4KEMsWixKKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvcihDLEopfWZ1bmN0aW9uIGoyKEMsWixKKXt2YXIgWCxHLFEsJDtaPT1kb2N1bWVudCYmKFo9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxSLl9fJiZSLl9fKEMsWiksRz0oWD10eXBlb2YgSj09ImZ1bmN0aW9uIik/bnVsbDpKJiZKLl9fa3x8Wi5fX2ssUT1bXSwkPVtdLEI1KFosQz0oIVgmJkp8fFopLl9faz13MShKMSxudWxsLFtDXSksR3x8UzIsUzIsWi5uYW1lc3BhY2VVUkksIVgmJko/W0pdOkc/bnVsbDpaLmZpcnN0Q2hpbGQ/eTIuY2FsbChaLmNoaWxkTm9kZXMpOm51bGwsUSwhWCYmSj9KOkc/Ry5fX2U6Wi5maXJzdENoaWxkLFgsJCksWTMoUSxDLCQpfWZ1bmN0aW9uIGoxKEMpe2Z1bmN0aW9uIFooSil7dmFyIFgsRztyZXR1cm4gdGhpcy5nZXRDaGlsZENvbnRleHR8fChYPW5ldyBTZXQsKEc9e30pW1ouX19jXT10aGlzLHRoaXMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIEd9LHRoaXMuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYPW51bGx9LHRoaXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKFEpe3RoaXMucHJvcHMudmFsdWUhPVEudmFsdWUmJlguZm9yRWFjaChmdW5jdGlvbigkKXskLl9fZT0hMCxWNSgkKX0pfSx0aGlzLnN1Yj1mdW5jdGlvbihRKXtYLmFkZChRKTt2YXIgJD1RLmNvbXBvbmVudFdpbGxVbm1vdW50O1EuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXtYJiZYLmRlbGV0ZShRKSwkJiYkLmNhbGwoUSl9fSksSi5jaGlsZHJlbn1yZXR1cm4gWi5fX2M9Il9fY0MiK3EzKyssWi5fXz1DLFouUHJvdmlkZXI9Wi5fX2w9KFouQ29uc3VtZXI9ZnVuY3Rpb24oSixYKXtyZXR1cm4gSi5jaGlsZHJlbihYKX0pLmNvbnRleHRUeXBlPVosWn15Mj1iMi5zbGljZSxSPXtfX2U6ZnVuY3Rpb24oQyxaLEosWCl7Zm9yKHZhciBHLFEsJDtaPVouX187KWlmKChHPVouX19jKSYmIUcuX18pdHJ5e2lmKChRPUcuY29uc3RydWN0b3IpJiZRLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciE9bnVsbCYmKEcuc2V0U3RhdGUoUS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoQykpLCQ9Ry5fX2QpLEcuY29tcG9uZW50RGlkQ2F0Y2ghPW51bGwmJihHLmNvbXBvbmVudERpZENhdGNoKEMsWHx8e30pLCQ9Ry5fX2QpLCQpcmV0dXJuIEcuX19FPUd9Y2F0Y2goWSl7Qz1ZfXRocm93IEN9fSxDMz0wLFM4PWZ1bmN0aW9uKEMpe3JldHVybiBDIT1udWxsJiZDLmNvbnN0cnVjdG9yPT09dm9pZCAwfSxLMS5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oQyxaKXt2YXIgSjtKPXRoaXMuX19zIT1udWxsJiZ0aGlzLl9fcyE9dGhpcy5zdGF0ZT90aGlzLl9fczp0aGlzLl9fcz1SMSh7fSx0aGlzLnN0YXRlKSx0eXBlb2YgQz09ImZ1bmN0aW9uIiYmKEM9QyhSMSh7fSxKKSx0aGlzLnByb3BzKSksQyYmUjEoSixDKSxDIT1udWxsJiZ0aGlzLl9fdiYmKFomJnRoaXMuX3NiLnB1c2goWiksVjUodGhpcykpfSxLMS5wcm90b3R5cGUuZm9yY2VVcGRhdGU9ZnVuY3Rpb24oQyl7dGhpcy5fX3YmJih0aGlzLl9fZT0hMCxDJiZ0aGlzLl9faC5wdXNoKEMpLFY1KHRoaXMpKX0sSzEucHJvdG90eXBlLnJlbmRlcj1KMSxmMT1bXSxaMz10eXBlb2YgUHJvbWlzZT09ImZ1bmN0aW9uIj9Qcm9taXNlLnByb3RvdHlwZS50aGVuLmJpbmQoUHJvbWlzZS5yZXNvbHZlKCkpOnNldFRpbWVvdXQsSjM9ZnVuY3Rpb24oQyxaKXtyZXR1cm4gQy5fX3YuX19iLVouX192Ll9fYn0sUjIuX19yPTAsUTU9TWF0aC5yYW5kb20oKS50b1N0cmluZyg4KSxFMj0iX19kIitRNSxGMj0iX19hIitRNSxYMz0vKFBvaW50ZXJDYXB0dXJlKSR8Q2FwdHVyZSQvaSxLNT0wLCQ1PWU1KCExKSxZNT1lNSghMCkscTM9MDt2YXIgRzIsWDEsTjUsSzMsVTI9MCxPMz1bXSxWMT1SLEwzPVYxLl9fYixCMz1WMS5fX3IsSDM9VjEuZGlmZmVkLE4zPVYxLl9fYyxGMz1WMS51bm1vdW50LEQzPVYxLl9fO2Z1bmN0aW9uIHYyKEMsWil7VjEuX19oJiZWMS5fX2goWDEsQyxVMnx8WiksVTI9MDt2YXIgSj1YMS5fX0h8fChYMS5fX0g9e19fOltdLF9faDpbXX0pO3JldHVybiBDPj1KLl9fLmxlbmd0aCYmSi5fXy5wdXNoKHt9KSxKLl9fW0NdfWZ1bmN0aW9uIEkoQyl7cmV0dXJuIFUyPTEsRDUoTTMsQyl9ZnVuY3Rpb24gRDUoQyxaLEope3ZhciBYPXYyKEcyKyssMik7aWYoWC50PUMsIVguX19jJiYoWC5fXz1bSj9KKFopOk0zKHZvaWQgMCxaKSxmdW5jdGlvbihZKXt2YXIgXz1YLl9fTj9YLl9fTlswXTpYLl9fWzBdLFY9WC50KF8sWSk7XyE9PVYmJihYLl9fTj1bVixYLl9fWzFdXSxYLl9fYy5zZXRTdGF0ZSh7fSkpfV0sWC5fX2M9WDEsIVgxLl9fZikpe3ZhciBHPWZ1bmN0aW9uKFksXyxWKXtpZighWC5fX2MuX19IKXJldHVybiEwO3ZhciBCPVguX19jLl9fSC5fXy5maWx0ZXIoZnVuY3Rpb24oSCl7cmV0dXJuIEguX19jfSk7aWYoQi5ldmVyeShmdW5jdGlvbihIKXtyZXR1cm4hSC5fX059KSlyZXR1cm4hUXx8US5jYWxsKHRoaXMsWSxfLFYpO3ZhciBLPVguX19jLnByb3BzIT09WTtyZXR1cm4gQi5zb21lKGZ1bmN0aW9uKEgpe2lmKEguX19OKXt2YXIgRj1ILl9fWzBdO0guX189SC5fX04sSC5fX049dm9pZCAwLEYhPT1ILl9fWzBdJiYoSz0hMCl9fSksUSYmUS5jYWxsKHRoaXMsWSxfLFYpfHxLfTtYMS5fX2Y9ITA7dmFye3Nob3VsZENvbXBvbmVudFVwZGF0ZTpRLGNvbXBvbmVudFdpbGxVcGRhdGU6JH09WDE7WDEuY29tcG9uZW50V2lsbFVwZGF0ZT1mdW5jdGlvbihZLF8sVil7aWYodGhpcy5fX2Upe3ZhciBCPVE7UT12b2lkIDAsRyhZLF8sViksUT1CfSQmJiQuY2FsbCh0aGlzLFksXyxWKX0sWDEuc2hvdWxkQ29tcG9uZW50VXBkYXRlPUd9cmV0dXJuIFguX19OfHxYLl9ffWZ1bmN0aW9uIHkoQyxaKXt2YXIgSj12MihHMisrLDMpOyFWMS5fX3MmJnozKEouX19ILFopJiYoSi5fXz1DLEoudT1aLFgxLl9fSC5fX2gucHVzaChKKSl9ZnVuY3Rpb24gaChDKXtyZXR1cm4gVTI9NSxFMShmdW5jdGlvbigpe3JldHVybntjdXJyZW50OkN9fSxbXSl9ZnVuY3Rpb24gRTEoQyxaKXt2YXIgSj12MihHMisrLDcpO3JldHVybiB6MyhKLl9fSCxaKSYmKEouX189QygpLEouX19IPVosSi5fX2g9QyksSi5fX31mdW5jdGlvbiBqKEMsWil7cmV0dXJuIFUyPTgsRTEoZnVuY3Rpb24oKXtyZXR1cm4gQ30sWil9ZnVuY3Rpb24gcDEoQyl7dmFyIFo9WDEuY29udGV4dFtDLl9fY10sSj12MihHMisrLDkpO3JldHVybiBKLmM9QyxaPyhKLl9fPT1udWxsJiYoSi5fXz0hMCxaLnN1YihYMSkpLFoucHJvcHMudmFsdWUpOkMuX199ZnVuY3Rpb24gbTgoKXtmb3IodmFyIEM7Qz1PMy5zaGlmdCgpOyl7dmFyIFo9Qy5fX0g7aWYoQy5fX1AmJlopdHJ5e1ouX19oLnNvbWUoaDIpLFouX19oLnNvbWUoRjUpLFouX19oPVtdfWNhdGNoKEope1ouX19oPVtdLFYxLl9fZShKLEMuX192KX19fVYxLl9fYj1mdW5jdGlvbihDKXtYMT1udWxsLEwzJiZMMyhDKX0sVjEuX189ZnVuY3Rpb24oQyxaKXtDJiZaLl9fayYmWi5fX2suX19tJiYoQy5fX209Wi5fX2suX19tKSxEMyYmRDMoQyxaKX0sVjEuX19yPWZ1bmN0aW9uKEMpe0IzJiZCMyhDKSxHMj0wO3ZhciBaPShYMT1DLl9fYykuX19IO1omJihONT09PVgxPyhaLl9faD1bXSxYMS5fX2g9W10sWi5fXy5zb21lKGZ1bmN0aW9uKEope0ouX19OJiYoSi5fXz1KLl9fTiksSi51PUouX19OPXZvaWQgMH0pKTooWi5fX2guc29tZShoMiksWi5fX2guc29tZShGNSksWi5fX2g9W10sRzI9MCkpLE41PVgxfSxWMS5kaWZmZWQ9ZnVuY3Rpb24oQyl7SDMmJkgzKEMpO3ZhciBaPUMuX19jO1omJlouX19IJiYoWi5fX0guX19oLmxlbmd0aCYmKE8zLnB1c2goWikhPT0xJiZLMz09PVYxLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KChLMz1WMS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpfHxnOCkobTgpKSxaLl9fSC5fXy5zb21lKGZ1bmN0aW9uKEope0oudSYmKEouX19IPUoudSksSi51PXZvaWQgMH0pKSxONT1YMT1udWxsfSxWMS5fX2M9ZnVuY3Rpb24oQyxaKXtaLnNvbWUoZnVuY3Rpb24oSil7dHJ5e0ouX19oLnNvbWUoaDIpLEouX19oPUouX19oLmZpbHRlcihmdW5jdGlvbihYKXtyZXR1cm4hWC5fX3x8RjUoWCl9KX1jYXRjaChYKXtaLnNvbWUoZnVuY3Rpb24oRyl7Ry5fX2gmJihHLl9faD1bXSl9KSxaPVtdLFYxLl9fZShYLEouX192KX19KSxOMyYmTjMoQyxaKX0sVjEudW5tb3VudD1mdW5jdGlvbihDKXtGMyYmRjMoQyk7dmFyIFosSj1DLl9fYztKJiZKLl9fSCYmKEouX19ILl9fLnNvbWUoZnVuY3Rpb24oWCl7dHJ5e2gyKFgpfWNhdGNoKEcpe1o9R319KSxKLl9fSD12b2lkIDAsWiYmVjEuX19lKFosSi5fX3YpKX07dmFyIFUzPXR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWU9PSJmdW5jdGlvbiI7ZnVuY3Rpb24gZzgoQyl7dmFyIFosSj1mdW5jdGlvbigpe2NsZWFyVGltZW91dChYKSxVMyYmY2FuY2VsQW5pbWF0aW9uRnJhbWUoWiksc2V0VGltZW91dChDKX0sWD1zZXRUaW1lb3V0KEosMzUpO1UzJiYoWj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoSikpfWZ1bmN0aW9uIGgyKEMpe3ZhciBaPVgxLEo9Qy5fX2M7dHlwZW9mIEo9PSJmdW5jdGlvbiImJihDLl9fYz12b2lkIDAsSigpKSxYMT1afWZ1bmN0aW9uIEY1KEMpe3ZhciBaPVgxO0MuX19jPUMuX18oKSxYMT1afWZ1bmN0aW9uIHozKEMsWil7cmV0dXJuIUN8fEMubGVuZ3RoIT09Wi5sZW5ndGh8fFouc29tZShmdW5jdGlvbihKLFgpe3JldHVybiBKIT09Q1tYXX0pfWZ1bmN0aW9uIE0zKEMsWil7cmV0dXJuIHR5cGVvZiBaPT0iZnVuY3Rpb24iP1ooQyk6Wn1mdW5jdGlvbiBkOChDLFope2Zvcih2YXIgSiBpbiBaKUNbSl09WltKXTtyZXR1cm4gQ31mdW5jdGlvbiBXMyhDLFope2Zvcih2YXIgSiBpbiBDKWlmKEohPT0iX19zb3VyY2UiJiYhKEogaW4gWikpcmV0dXJuITA7Zm9yKHZhciBYIGluIFopaWYoWCE9PSJfX3NvdXJjZSImJkNbWF0hPT1aW1hdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIFAzKEMsWil7dGhpcy5wcm9wcz1DLHRoaXMuY29udGV4dD1afShQMy5wcm90b3R5cGU9bmV3IEsxKS5pc1B1cmVSZWFjdENvbXBvbmVudD0hMCxQMy5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPWZ1bmN0aW9uKEMsWil7cmV0dXJuIFczKHRoaXMucHJvcHMsQyl8fFczKHRoaXMuc3RhdGUsWil9O3ZhciBrMz1SLl9fYjtSLl9fYj1mdW5jdGlvbihDKXtDLnR5cGUmJkMudHlwZS5fX2YmJkMucmVmJiYoQy5wcm9wcy5yZWY9Qy5yZWYsQy5yZWY9bnVsbCksazMmJmszKEMpfTt2YXIgYTg9Ui5fX2U7Ui5fX2U9ZnVuY3Rpb24oQyxaLEosWCl7aWYoQy50aGVuKXtmb3IodmFyIEcsUT1aO1E9US5fXzspaWYoKEc9US5fX2MpJiZHLl9fYylyZXR1cm4gWi5fX2U9PW51bGwmJihaLl9fZT1KLl9fZSxaLl9faz1KLl9fayksRy5fX2MoQyxaKX1hOChDLFosSixYKX07dmFyIEEzPVIudW5tb3VudDtmdW5jdGlvbiBiMyhDLFosSil7cmV0dXJuIEMmJihDLl9fYyYmQy5fX2MuX19IJiYoQy5fX2MuX19ILl9fLmZvckVhY2goZnVuY3Rpb24oWCl7dHlwZW9mIFguX19jPT0iZnVuY3Rpb24iJiZYLl9fYygpfSksQy5fX2MuX19IPW51bGwpLChDPWQ4KHt9LEMpKS5fX2MhPW51bGwmJihDLl9fYy5fX1A9PT1KJiYoQy5fX2MuX19QPVopLEMuX19jLl9fZT0hMCxDLl9fYz1udWxsKSxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBiMyhYLFosSil9KSksQ31mdW5jdGlvbiBSMyhDLFosSil7cmV0dXJuIEMmJkomJihDLl9fdj1udWxsLEMuX19rPUMuX19rJiZDLl9fay5tYXAoZnVuY3Rpb24oWCl7cmV0dXJuIFIzKFgsWixKKX0pLEMuX19jJiZDLl9fYy5fX1A9PT1aJiYoQy5fX2UmJkouYXBwZW5kQ2hpbGQoQy5fX2UpLEMuX19jLl9fZT0hMCxDLl9fYy5fX1A9SikpLEN9ZnVuY3Rpb24gVTUoKXt0aGlzLl9fdT0wLHRoaXMubz1udWxsLHRoaXMuX19iPW51bGx9ZnVuY3Rpb24geTMoQyl7dmFyIFo9Qy5fXyYmQy5fXy5fX2M7cmV0dXJuIFomJlouX19hJiZaLl9fYShDKX1mdW5jdGlvbiBtMigpe3RoaXMuaT1udWxsLHRoaXMubD1udWxsfVIudW5tb3VudD1mdW5jdGlvbihDKXt2YXIgWj1DLl9fYztaJiYoWi5fX3o9ITApLFomJlouX19SJiZaLl9fUigpLFomJjMyJkMuX191JiYoQy50eXBlPW51bGwpLEEzJiZBMyhDKX0sKFU1LnByb3RvdHlwZT1uZXcgSzEpLl9fYz1mdW5jdGlvbihDLFope3ZhciBKPVouX19jLFg9dGhpcztYLm89PW51bGwmJihYLm89W10pLFguby5wdXNoKEopO3ZhciBHPXkzKFguX192KSxRPSExLCQ9ZnVuY3Rpb24oKXtRfHxYLl9fenx8KFE9ITAsSi5fX1I9bnVsbCxHP0coXyk6XygpKX07Si5fX1I9JDt2YXIgWT1KLl9fUDtKLl9fUD1udWxsO3ZhciBfPWZ1bmN0aW9uKCl7aWYoIS0tWC5fX3Upe2lmKFguc3RhdGUuX19hKXt2YXIgVj1YLnN0YXRlLl9fYTtYLl9fdi5fX2tbMF09UjMoVixWLl9fYy5fX1AsVi5fX2MuX19PKX12YXIgQjtmb3IoWC5zZXRTdGF0ZSh7X19hOlguX19iPW51bGx9KTtCPVguby5wb3AoKTspQi5fX1A9WSxCLmZvcmNlVXBkYXRlKCl9fTtYLl9fdSsrfHwzMiZaLl9fdXx8WC5zZXRTdGF0ZSh7X19hOlguX19iPVguX192Ll9fa1swXX0pLEMudGhlbigkLCQpfSxVNS5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLm89W119LFU1LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQyxaKXtpZih0aGlzLl9fYil7aWYodGhpcy5fX3YuX19rKXt2YXIgSj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxYPXRoaXMuX192Ll9fa1swXS5fX2M7dGhpcy5fX3YuX19rWzBdPWIzKHRoaXMuX19iLEosWC5fX089WC5fX1ApfXRoaXMuX19iPW51bGx9dmFyIEc9Wi5fX2EmJncxKEoxLG51bGwsQy5mYWxsYmFjayk7cmV0dXJuIEcmJihHLl9fdSY9LTMzKSxbdzEoSjEsbnVsbCxaLl9fYT9udWxsOkMuY2hpbGRyZW4pLEddfTt2YXIgSTM9ZnVuY3Rpb24oQyxaLEope2lmKCsrSlsxXT09PUpbMF0mJkMubC5kZWxldGUoWiksQy5wcm9wcy5yZXZlYWxPcmRlciYmKEMucHJvcHMucmV2ZWFsT3JkZXJbMF0hPT0idCJ8fCFDLmwuc2l6ZSkpZm9yKEo9Qy5pO0o7KXtmb3IoO0oubGVuZ3RoPjM7KUoucG9wKCkoKTtpZihKWzFdPEpbMF0pYnJlYWs7Qy5pPUo9SlsyXX19OyhtMi5wcm90b3R5cGU9bmV3IEsxKS5fX2E9ZnVuY3Rpb24oQyl7dmFyIFo9dGhpcyxKPXkzKFouX192KSxYPVoubC5nZXQoQyk7cmV0dXJuIFhbMF0rKyxmdW5jdGlvbihHKXt2YXIgUT1mdW5jdGlvbigpe1oucHJvcHMucmV2ZWFsT3JkZXI/KFgucHVzaChHKSxJMyhaLEMsWCkpOkcoKX07Sj9KKFEpOlEoKX19LG0yLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oQyl7dGhpcy5pPW51bGwsdGhpcy5sPW5ldyBNYXA7dmFyIFo9eTEoQy5jaGlsZHJlbik7Qy5yZXZlYWxPcmRlciYmQy5yZXZlYWxPcmRlclswXT09PSJiIiYmWi5yZXZlcnNlKCk7Zm9yKHZhciBKPVoubGVuZ3RoO0otLTspdGhpcy5sLnNldChaW0pdLHRoaXMuaT1bMSwwLHRoaXMuaV0pO3JldHVybiBDLmNoaWxkcmVufSxtMi5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlPW0yLnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBDPXRoaXM7dGhpcy5sLmZvckVhY2goZnVuY3Rpb24oWixKKXtJMyhDLEosWil9KX07dmFyIG84PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iil8fDYwMTAzLGk4PS9eKD86YWNjZW50fGFsaWdubWVudHxhcmFiaWN8YmFzZWxpbmV8Y2FwfGNsaXAoPyFQYXRoVSl8Y29sb3J8ZG9taW5hbnR8ZmlsbHxmbG9vZHxmb250fGdseXBoKD8hUil8aG9yaXp8aW1hZ2UoIVMpfGxldHRlcnxsaWdodGluZ3xtYXJrZXIoPyFIfFd8VSl8b3ZlcmxpbmV8cGFpbnR8cG9pbnRlcnxzaGFwZXxzdG9wfHN0cmlrZXRocm91Z2h8c3Ryb2tlfHRleHQoPyFMKXx0cmFuc2Zvcm18dW5kZXJsaW5lfHVuaWNvZGV8dW5pdHN8dnx2ZWN0b3J8dmVydHx3b3JkfHdyaXRpbmd8eCg/IUMpKVtBLVpdLyxyOD0vXm9uKEFuaXxUcmF8VG91fEJlZm9yZUlucHxDb21wbykvLHM4PS9bQS1aMC05XS9nLG44PXR5cGVvZiBkb2N1bWVudDwidSIsdDg9ZnVuY3Rpb24oQyl7cmV0dXJuKHR5cGVvZiBTeW1ib2w8InUiJiZ0eXBlb2YgU3ltYm9sKCk9PSJzeW1ib2wiPy9maWx8Y2hlfHJhZC86L2ZpbHxjaGV8cmEvKS50ZXN0KEMpfTtmdW5jdGlvbiBqMyhDLFosSil7cmV0dXJuIFouX19rPT1udWxsJiYoWi50ZXh0Q29udGVudD0iIiksajIoQyxaKSx0eXBlb2YgSj09ImZ1bmN0aW9uIiYmSigpLEM/Qy5fX2M6bnVsbH1LMS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD0hMCxbImNvbXBvbmVudFdpbGxNb3VudCIsImNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJjb21wb25lbnRXaWxsVXBkYXRlIl0uZm9yRWFjaChmdW5jdGlvbihDKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoSzEucHJvdG90eXBlLEMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1siVU5TQUZFXyIrQ119LHNldDpmdW5jdGlvbihaKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxDLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Wn0pfX0pfSk7dmFyIFQzPVIuZXZlbnQ7Ui5ldmVudD1mdW5jdGlvbihDKXtyZXR1cm4gVDMmJihDPVQzKEMpKSxDLnBlcnNpc3Q9ZnVuY3Rpb24oKXt9LEMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jYW5jZWxCdWJibGV9LEMuaXNEZWZhdWx0UHJldmVudGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGVmYXVsdFByZXZlbnRlZH0sQy5uYXRpdmVFdmVudD1DfTt2YXIgaDMsZTg9e2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbGFzc319LEUzPVIudm5vZGU7Ui52bm9kZT1mdW5jdGlvbihDKXt0eXBlb2YgQy50eXBlPT0ic3RyaW5nIiYmZnVuY3Rpb24oWil7dmFye3Byb3BzOkosdHlwZTpYfT1aLEc9e30sUT1YLmluZGV4T2YoIi0iKT09LTE7Zm9yKHZhciAkIGluIEope3ZhciBZPUpbJF07aWYoISgkPT09InZhbHVlIiYmKCJkZWZhdWx0VmFsdWUiaW4gSikmJlk9PW51bGx8fG44JiYkPT09ImNoaWxkcmVuIiYmWD09PSJub3NjcmlwdCJ8fCQ9PT0iY2xhc3MifHwkPT09ImNsYXNzTmFtZSIpKXt2YXIgXz0kLnRvTG93ZXJDYXNlKCk7JD09PSJkZWZhdWx0VmFsdWUiJiYidmFsdWUiaW4gSiYmSi52YWx1ZT09bnVsbD8kPSJ2YWx1ZSI6JD09PSJkb3dubG9hZCImJlk9PT0hMD9ZPSIiOl89PT0idHJhbnNsYXRlIiYmWT09PSJubyI/WT0hMTpfWzBdPT09Im8iJiZfWzFdPT09Im4iP189PT0ib25kb3VibGVjbGljayI/JD0ib25kYmxjbGljayI6XyE9PSJvbmNoYW5nZSJ8fFghPT0iaW5wdXQiJiZYIT09InRleHRhcmVhInx8dDgoSi50eXBlKT9fPT09Im9uZm9jdXMiPyQ9Im9uZm9jdXNpbiI6Xz09PSJvbmJsdXIiPyQ9Im9uZm9jdXNvdXQiOnI4LnRlc3QoJCkmJigkPV8pOl89JD0ib25pbnB1dCI6USYmaTgudGVzdCgkKT8kPSQucmVwbGFjZShzOCwiLSQmIikudG9Mb3dlckNhc2UoKTpZPT09bnVsbCYmKFk9dm9pZCAwKSxfPT09Im9uaW5wdXQiJiZHWyQ9X10mJigkPSJvbmlucHV0Q2FwdHVyZSIpLEdbJF09WX19WD09InNlbGVjdCImJihHLm11bHRpcGxlJiZBcnJheS5pc0FycmF5KEcudmFsdWUpJiYoRy52YWx1ZT15MShKLmNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uKFYpe1YucHJvcHMuc2VsZWN0ZWQ9Ry52YWx1ZS5pbmRleE9mKFYucHJvcHMudmFsdWUpIT0tMX0pKSxHLmRlZmF1bHRWYWx1ZSE9bnVsbCYmKEcudmFsdWU9eTEoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPUcubXVsdGlwbGU/Ry5kZWZhdWx0VmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTE6Ry5kZWZhdWx0VmFsdWU9PVYucHJvcHMudmFsdWV9KSkpLEouY2xhc3MmJiFKLmNsYXNzTmFtZT8oRy5jbGFzcz1KLmNsYXNzLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShHLCJjbGFzc05hbWUiLGU4KSk6Si5jbGFzc05hbWUmJihHLmNsYXNzPUcuY2xhc3NOYW1lPUouY2xhc3NOYW1lKSxaLnByb3BzPUd9KEMpLEMuJCR0eXBlb2Y9bzgsRTMmJkUzKEMpfTt2YXIgdzM9Ui5fX3I7Ui5fX3I9ZnVuY3Rpb24oQyl7dzMmJnczKEMpLGgzPUMuX19jfTt2YXIgUzM9Ui5kaWZmZWQ7Ui5kaWZmZWQ9ZnVuY3Rpb24oQyl7UzMmJlMzKEMpO3Zhcntwcm9wczpaLF9fZTpKfT1DO0ohPW51bGwmJkMudHlwZT09PSJ0ZXh0YXJlYSImJiJ2YWx1ZSJpbiBaJiZaLnZhbHVlIT09Si52YWx1ZSYmKEoudmFsdWU9Wi52YWx1ZT09bnVsbD8iIjpaLnZhbHVlKSxoMz1udWxsfTtmdW5jdGlvbiB2MyhDKXtyZXR1cm4hIUMuX19rJiYoajIobnVsbCxDKSwhMCl9ZnVuY3Rpb24gbTMoQyl7cmV0dXJue3JlbmRlcjpmdW5jdGlvbihaKXtqMyhaLEMpfSx1bm1vdW50OmZ1bmN0aW9uKCl7djMoQyl9fX12YXIgZzM9IkFjY2Vzc2liaWxpdHkgdW5hdmFpbGFibGUgb24gdGhpcyBzaW11bGF0b3IuIjtmdW5jdGlvbiB4MyhDKXtsZXQgWj1bXSxKPW5ldyBNYXA7Zm9yKGxldCBYIG9mIEMpe2xldCBHPVguYXBwTmFtZXx8WC5idW5kbGVJZHx8IlVua25vd24iLFE9WC5idW5kbGVJZHx8RywkPUouZ2V0KFEpO2lmKCEkKSQ9e2tleTpRLGFwcE5hbWU6RyxidW5kbGVJZDpYLmJ1bmRsZUlkLHRhcmdldHM6W119LEouc2V0KFEsJCksWi5wdXNoKFEpOyQudGFyZ2V0cy5wdXNoKFgpfXJldHVybiBaLm1hcCgoWCk9PkouZ2V0KFgpKX1mdW5jdGlvbiBpMyhDLFope2Zvcih2YXIgSiBpbiBaKUNbSl09WltKXTtyZXR1cm4gQ31mdW5jdGlvbiBNNShDLFope2Zvcih2YXIgSiBpbiBDKWlmKEohPT0iX19zb3VyY2UiJiYhKEogaW4gWikpcmV0dXJuITA7Zm9yKHZhciBYIGluIFopaWYoWCE9PSJfX3NvdXJjZSImJkNbWF0hPT1aW1hdKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGYzKEMsWil7dGhpcy5wcm9wcz1DLHRoaXMuY29udGV4dD1afWZ1bmN0aW9uIE8yKEMsWil7ZnVuY3Rpb24gSihHKXt2YXIgUT10aGlzLnByb3BzLnJlZjtyZXR1cm4gUSE9Ry5yZWYmJlEmJih0eXBlb2YgUT09ImZ1bmN0aW9uIj9RKG51bGwpOlEuY3VycmVudD1udWxsKSxaPyFaKHRoaXMucHJvcHMsRyl8fFEhPUcucmVmOk01KHRoaXMucHJvcHMsRyl9ZnVuY3Rpb24gWChHKXtyZXR1cm4gdGhpcy5zaG91bGRDb21wb25lbnRVcGRhdGU9Six3MShDLEcpfXJldHVybiBYLmRpc3BsYXlOYW1lPSJNZW1vKCIrKEMuZGlzcGxheU5hbWV8fEMubmFtZSkrIikiLFguX19mPVgucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWC50eXBlPUMsWH0oZjMucHJvdG90eXBlPW5ldyBLMSkuaXNQdXJlUmVhY3RDb21wb25lbnQ9ITAsZjMucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbihDLFope3JldHVybiBNNSh0aGlzLnByb3BzLEMpfHxNNSh0aGlzLnN0YXRlLFopfTt2YXIgcDM9Ui5fX2I7Ui5fX2I9ZnVuY3Rpb24oQyl7Qy50eXBlJiZDLnR5cGUuX19mJiZDLnJlZiYmKEMucHJvcHMucmVmPUMucmVmLEMucmVmPW51bGwpLHAzJiZwMyhDKX07dmFyIEM5PXR5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wuZm9yJiZTeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpfHwzOTExO2Z1bmN0aW9uIFEyKEMpe2Z1bmN0aW9uIFooSil7dmFyIFg9aTMoe30sSik7cmV0dXJuIGRlbGV0ZSBYLnJlZixDKFgsSi5yZWZ8fG51bGwpfXJldHVybiBaLiQkdHlwZW9mPUM5LFoucmVuZGVyPUMsWi5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudD1aLl9fZj0hMCxaLmRpc3BsYXlOYW1lPSJGb3J3YXJkUmVmKCIrKEMuZGlzcGxheU5hbWV8fEMubmFtZSkrIikiLFp9dmFyIFo5PVIuX19lO1IuX19lPWZ1bmN0aW9uKEMsWixKLFgpe2lmKEMudGhlbil7Zm9yKHZhciBHLFE9WjtRPVEuX187KWlmKChHPVEuX19jKSYmRy5fX2MpcmV0dXJuIFouX19lPT1udWxsJiYoWi5fX2U9Si5fX2UsWi5fX2s9Si5fX2spLEcuX19jKEMsWil9WjkoQyxaLEosWCl9O3ZhciB1Mz1SLnVubW91bnQ7ZnVuY3Rpb24gcjMoQyxaLEope3JldHVybiBDJiYoQy5fX2MmJkMuX19jLl9fSCYmKEMuX19jLl9fSC5fXy5mb3JFYWNoKGZ1bmN0aW9uKFgpe3R5cGVvZiBYLl9fYz09ImZ1bmN0aW9uIiYmWC5fX2MoKX0pLEMuX19jLl9fSD1udWxsKSwoQz1pMyh7fSxDKSkuX19jIT1udWxsJiYoQy5fX2MuX19QPT09SiYmKEMuX19jLl9fUD1aKSxDLl9fYy5fX2U9ITAsQy5fX2M9bnVsbCksQy5fX2s9Qy5fX2smJkMuX19rLm1hcChmdW5jdGlvbihYKXtyZXR1cm4gcjMoWCxaLEopfSkpLEN9ZnVuY3Rpb24gczMoQyxaLEope3JldHVybiBDJiZKJiYoQy5fX3Y9bnVsbCxDLl9faz1DLl9fayYmQy5fX2subWFwKGZ1bmN0aW9uKFgpe3JldHVybiBzMyhYLFosSil9KSxDLl9fYyYmQy5fX2MuX19QPT09WiYmKEMuX19lJiZKLmFwcGVuZENoaWxkKEMuX19lKSxDLl9fYy5fX2U9ITAsQy5fX2MuX19QPUopKSxDfWZ1bmN0aW9uIHo1KCl7dGhpcy5fX3U9MCx0aGlzLm89bnVsbCx0aGlzLl9fYj1udWxsfWZ1bmN0aW9uIG4zKEMpe3ZhciBaPUMuX18mJkMuX18uX19jO3JldHVybiBaJiZaLl9fYSYmWi5fX2EoQyl9ZnVuY3Rpb24gZzIoKXt0aGlzLmk9bnVsbCx0aGlzLmw9bnVsbH1SLnVubW91bnQ9ZnVuY3Rpb24oQyl7dmFyIFo9Qy5fX2M7WiYmKFouX196PSEwKSxaJiZaLl9fUiYmWi5fX1IoKSxaJiYzMiZDLl9fdSYmKEMudHlwZT1udWxsKSx1MyYmdTMoQyl9LCh6NS5wcm90b3R5cGU9bmV3IEsxKS5fX2M9ZnVuY3Rpb24oQyxaKXt2YXIgSj1aLl9fYyxYPXRoaXM7WC5vPT1udWxsJiYoWC5vPVtdKSxYLm8ucHVzaChKKTt2YXIgRz1uMyhYLl9fdiksUT0hMSwkPWZ1bmN0aW9uKCl7UXx8WC5fX3p8fChRPSEwLEouX19SPW51bGwsRz9HKF8pOl8oKSl9O0ouX19SPSQ7dmFyIFk9Si5fX1A7Si5fX1A9bnVsbDt2YXIgXz1mdW5jdGlvbigpe2lmKCEtLVguX191KXtpZihYLnN0YXRlLl9fYSl7dmFyIFY9WC5zdGF0ZS5fX2E7WC5fX3YuX19rWzBdPXMzKFYsVi5fX2MuX19QLFYuX19jLl9fTyl9dmFyIEI7Zm9yKFguc2V0U3RhdGUoe19fYTpYLl9fYj1udWxsfSk7Qj1YLm8ucG9wKCk7KUIuX19QPVksQi5mb3JjZVVwZGF0ZSgpfX07WC5fX3UrK3x8MzImWi5fX3V8fFguc2V0U3RhdGUoe19fYTpYLl9fYj1YLl9fdi5fX2tbMF19KSxDLnRoZW4oJCwkKX0sejUucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50PWZ1bmN0aW9uKCl7dGhpcy5vPVtdfSx6NS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMsWil7aWYodGhpcy5fX2Ipe2lmKHRoaXMuX192Ll9fayl7dmFyIEo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksWD10aGlzLl9fdi5fX2tbMF0uX19jO3RoaXMuX192Ll9fa1swXT1yMyh0aGlzLl9fYixKLFguX19PPVguX19QKX10aGlzLl9fYj1udWxsfXZhciBHPVouX19hJiZ3MShKMSxudWxsLEMuZmFsbGJhY2spO3JldHVybiBHJiYoRy5fX3UmPS0zMyksW3cxKEoxLG51bGwsWi5fX2E/bnVsbDpDLmNoaWxkcmVuKSxHXX07dmFyIGMzPWZ1bmN0aW9uKEMsWixKKXtpZigrK0pbMV09PT1KWzBdJiZDLmwuZGVsZXRlKFopLEMucHJvcHMucmV2ZWFsT3JkZXImJihDLnByb3BzLnJldmVhbE9yZGVyWzBdIT09InQifHwhQy5sLnNpemUpKWZvcihKPUMuaTtKOyl7Zm9yKDtKLmxlbmd0aD4zOylKLnBvcCgpKCk7aWYoSlsxXTxKWzBdKWJyZWFrO0MuaT1KPUpbMl19fTsoZzIucHJvdG90eXBlPW5ldyBLMSkuX19hPWZ1bmN0aW9uKEMpe3ZhciBaPXRoaXMsSj1uMyhaLl9fdiksWD1aLmwuZ2V0KEMpO3JldHVybiBYWzBdKyssZnVuY3Rpb24oRyl7dmFyIFE9ZnVuY3Rpb24oKXtaLnByb3BzLnJldmVhbE9yZGVyPyhYLnB1c2goRyksYzMoWixDLFgpKTpHKCl9O0o/SihRKTpRKCl9fSxnMi5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKEMpe3RoaXMuaT1udWxsLHRoaXMubD1uZXcgTWFwO3ZhciBaPXkxKEMuY2hpbGRyZW4pO0MucmV2ZWFsT3JkZXImJkMucmV2ZWFsT3JkZXJbMF09PT0iYiImJloucmV2ZXJzZSgpO2Zvcih2YXIgSj1aLmxlbmd0aDtKLS07KXRoaXMubC5zZXQoWltKXSx0aGlzLmk9WzEsMCx0aGlzLmldKTtyZXR1cm4gQy5jaGlsZHJlbn0sZzIucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZT1nMi5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt2YXIgQz10aGlzO3RoaXMubC5mb3JFYWNoKGZ1bmN0aW9uKFosSil7YzMoQyxKLFopfSl9O3ZhciBKOT10eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLmZvciYmU3ltYm9sLmZvcigicmVhY3QuZWxlbWVudCIpfHw2MDEwMyxYOT0vXig/OmFjY2VudHxhbGlnbm1lbnR8YXJhYmljfGJhc2VsaW5lfGNhcHxjbGlwKD8hUGF0aFUpfGNvbG9yfGRvbWluYW50fGZpbGx8Zmxvb2R8Zm9udHxnbHlwaCg/IVIpfGhvcml6fGltYWdlKCFTKXxsZXR0ZXJ8bGlnaHRpbmd8bWFya2VyKD8hSHxXfFUpfG92ZXJsaW5lfHBhaW50fHBvaW50ZXJ8c2hhcGV8c3RvcHxzdHJpa2V0aHJvdWdofHN0cm9rZXx0ZXh0KD8hTCl8dHJhbnNmb3JtfHVuZGVybGluZXx1bmljb2RlfHVuaXRzfHZ8dmVjdG9yfHZlcnR8d29yZHx3cml0aW5nfHgoPyFDKSlbQS1aXS8scTk9L15vbihBbml8VHJhfFRvdXxCZWZvcmVJbnB8Q29tcG8pLyxHOT0vW0EtWjAtOV0vZyxROT10eXBlb2YgZG9jdW1lbnQ8InUiLCQ5PWZ1bmN0aW9uKEMpe3JldHVybih0eXBlb2YgU3ltYm9sPCJ1IiYmdHlwZW9mIFN5bWJvbCgpPT0ic3ltYm9sIj8vZmlsfGNoZXxyYWQvOi9maWx8Y2hlfHJhLykudGVzdChDKX07SzEucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9ITAsWyJjb21wb25lbnRXaWxsTW91bnQiLCJjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSJdLmZvckVhY2goZnVuY3Rpb24oQyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEsxLnByb3RvdHlwZSxDLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbIlVOU0FGRV8iK0NdfSxzZXQ6ZnVuY3Rpb24oWil7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsQyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlp9KX19KX0pO3ZhciBsMz1SLmV2ZW50O1IuZXZlbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGwzJiYoQz1sMyhDKSksQy5wZXJzaXN0PWZ1bmN0aW9uKCl7fSxDLmlzUHJvcGFnYXRpb25TdG9wcGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2FuY2VsQnViYmxlfSxDLmlzRGVmYXVsdFByZXZlbnRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmRlZmF1bHRQcmV2ZW50ZWR9LEMubmF0aXZlRXZlbnQ9Q307dmFyIHQzLFk5PXtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xhc3N9fSxkMz1SLnZub2RlO1Iudm5vZGU9ZnVuY3Rpb24oQyl7dHlwZW9mIEMudHlwZT09InN0cmluZyImJmZ1bmN0aW9uKFope3Zhcntwcm9wczpKLHR5cGU6WH09WixHPXt9LFE9WC5pbmRleE9mKCItIik9PS0xO2Zvcih2YXIgJCBpbiBKKXt2YXIgWT1KWyRdO2lmKCEoJD09PSJ2YWx1ZSImJigiZGVmYXVsdFZhbHVlImluIEopJiZZPT1udWxsfHxROSYmJD09PSJjaGlsZHJlbiImJlg9PT0ibm9zY3JpcHQifHwkPT09ImNsYXNzInx8JD09PSJjbGFzc05hbWUiKSl7dmFyIF89JC50b0xvd2VyQ2FzZSgpOyQ9PT0iZGVmYXVsdFZhbHVlIiYmInZhbHVlImluIEomJkoudmFsdWU9PW51bGw/JD0idmFsdWUiOiQ9PT0iZG93bmxvYWQiJiZZPT09ITA/WT0iIjpfPT09InRyYW5zbGF0ZSImJlk9PT0ibm8iP1k9ITE6X1swXT09PSJvIiYmX1sxXT09PSJuIj9fPT09Im9uZG91YmxlY2xpY2siPyQ9Im9uZGJsY2xpY2siOl8hPT0ib25jaGFuZ2UifHxYIT09ImlucHV0IiYmWCE9PSJ0ZXh0YXJlYSJ8fCQ5KEoudHlwZSk/Xz09PSJvbmZvY3VzIj8kPSJvbmZvY3VzaW4iOl89PT0ib25ibHVyIj8kPSJvbmZvY3Vzb3V0IjpxOS50ZXN0KCQpJiYoJD1fKTpfPSQ9Im9uaW5wdXQiOlEmJlg5LnRlc3QoJCk/JD0kLnJlcGxhY2UoRzksIi0kJiIpLnRvTG93ZXJDYXNlKCk6WT09PW51bGwmJihZPXZvaWQgMCksXz09PSJvbmlucHV0IiYmR1skPV9dJiYoJD0ib25pbnB1dENhcHR1cmUiKSxHWyRdPVl9fVg9PSJzZWxlY3QiJiYoRy5tdWx0aXBsZSYmQXJyYXkuaXNBcnJheShHLnZhbHVlKSYmKEcudmFsdWU9eTEoSi5jaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbihWKXtWLnByb3BzLnNlbGVjdGVkPUcudmFsdWUuaW5kZXhPZihWLnByb3BzLnZhbHVlKSE9LTF9KSksRy5kZWZhdWx0VmFsdWUhPW51bGwmJihHLnZhbHVlPXkxKEouY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24oVil7Vi5wcm9wcy5zZWxlY3RlZD1HLm11bHRpcGxlP0cuZGVmYXVsdFZhbHVlLmluZGV4T2YoVi5wcm9wcy52YWx1ZSkhPS0xOkcuZGVmYXVsdFZhbHVlPT1WLnByb3BzLnZhbHVlfSkpKSxKLmNsYXNzJiYhSi5jbGFzc05hbWU/KEcuY2xhc3M9Si5jbGFzcyxPYmplY3QuZGVmaW5lUHJvcGVydHkoRywiY2xhc3NOYW1lIixZOSkpOkouY2xhc3NOYW1lJiYoRy5jbGFzcz1HLmNsYXNzTmFtZT1KLmNsYXNzTmFtZSksWi5wcm9wcz1HfShDKSxDLiQkdHlwZW9mPUo5LGQzJiZkMyhDKX07dmFyIGEzPVIuX19yO1IuX19yPWZ1bmN0aW9uKEMpe2EzJiZhMyhDKSx0Mz1DLl9fY307dmFyIG8zPVIuZGlmZmVkO1IuZGlmZmVkPWZ1bmN0aW9uKEMpe28zJiZvMyhDKTt2YXJ7cHJvcHM6WixfX2U6Sn09QztKIT1udWxsJiZDLnR5cGU9PT0idGV4dGFyZWEiJiYidmFsdWUiaW4gWiYmWi52YWx1ZSE9PUoudmFsdWUmJihKLnZhbHVlPVoudmFsdWU9PW51bGw/IiI6Wi52YWx1ZSksdDM9bnVsbH07dmFyIHUxPTM7ZnVuY3Rpb24gVzUoQyl7cmV0dXJuIEM9PT0ibGFuZHNjYXBlX2xlZnQifHxDPT09ImxhbmRzY2FwZV9yaWdodCJ9ZnVuY3Rpb24gejIoQyl7cmV0dXJuISFDJiYoVzUoQy5vcmllbnRhdGlvbil8fEMud2lkdGg+Qy5oZWlnaHQpfWZ1bmN0aW9uICQyKEMpe2lmKCFDfHxDLndpZHRoPD0wfHxDLmhlaWdodDw9MClyZXR1cm4gbnVsbDtsZXQgWj1XNShDLm9yaWVudGF0aW9uKXx8Qy53aWR0aD5DLmhlaWdodCxKPVo/TWF0aC5tYXgoQy53aWR0aCxDLmhlaWdodCk6TWF0aC5taW4oQy53aWR0aCxDLmhlaWdodCksWD1aP01hdGgubWluKEMud2lkdGgsQy5oZWlnaHQpOk1hdGgubWF4KEMud2lkdGgsQy5oZWlnaHQpO2lmKEo9PT1DLndpZHRoJiZYPT09Qy5oZWlnaHQpcmV0dXJuIEM7cmV0dXJuey4uLkMsd2lkdGg6SixoZWlnaHQ6WH19ZnVuY3Rpb24gTTIoQyl7bGV0IFo9JDIoQyksSj1lMyhDPy5vcmllbnRhdGlvbiksWD1NYXRoLmFicyhKKT09PTkwLEc9ISFDJiZDLndpZHRoPkMuaGVpZ2h0LFE9Sj09PTE4MHx8WCYmIUc7cmV0dXJue2Rpc3BsYXlDb25maWc6Wixyb3RhdGlvbkRlZ3JlZXM6UT9KOjAsbmVlZHNDc3NSb3RhdGlvbjpRLGlucHV0T3JpZW50YXRpb246UT9DPy5vcmllbnRhdGlvbjp2b2lkIDB9fWZ1bmN0aW9uIGUzKEMpe3N3aXRjaChDKXtjYXNlImxhbmRzY2FwZV9sZWZ0IjpyZXR1cm4gOTA7Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybi05MDtjYXNlInBvcnRyYWl0X3Vwc2lkZV9kb3duIjpyZXR1cm4gMTgwO2RlZmF1bHQ6cmV0dXJuIDB9fWZ1bmN0aW9uIFcyKEMsWixKKXtzd2l0Y2goQyl7Y2FzZSJsYW5kc2NhcGVfbGVmdCI6cmV0dXJue3g6Six5OjEtWn07Y2FzZSJsYW5kc2NhcGVfcmlnaHQiOnJldHVybnt4OjEtSix5Olp9O2Nhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnJldHVybnt4OjEtWix5OjEtSn07ZGVmYXVsdDpyZXR1cm57eDpaLHk6Sn19fWZ1bmN0aW9uIFA1KEMsWil7c3dpdGNoKEMpe2Nhc2UibGFuZHNjYXBlX2xlZnQiOnN3aXRjaChaKXtjYXNlIDE6cmV0dXJuIDM7Y2FzZSA0OnJldHVybiAyO2Nhc2UgMjpyZXR1cm4gMTtjYXNlIDM6cmV0dXJuIDQ7ZGVmYXVsdDpyZXR1cm4gWn1jYXNlImxhbmRzY2FwZV9yaWdodCI6c3dpdGNoKFope2Nhc2UgMTpyZXR1cm4gMjtjYXNlIDQ6cmV0dXJuIDM7Y2FzZSAyOnJldHVybiA0O2Nhc2UgMzpyZXR1cm4gMTtkZWZhdWx0OnJldHVybiBafWNhc2UicG9ydHJhaXRfdXBzaWRlX2Rvd24iOnN3aXRjaChaKXtjYXNlIDE6cmV0dXJuIDQ7Y2FzZSA0OnJldHVybiAxO2Nhc2UgMjpyZXR1cm4gMztjYXNlIDM6cmV0dXJuIDI7ZGVmYXVsdDpyZXR1cm4gWn1kZWZhdWx0OnJldHVybiBafX12YXIgVjk9MDtmdW5jdGlvbiBxKEMsWixKLFgsRyxRKXtafHwoWj17fSk7dmFyICQsWSxfPVo7aWYoInJlZiJpbiBfKWZvcihZIGluIF89e30sWilZPT0icmVmIj8kPVpbWV06X1tZXT1aW1ldO3ZhciBWPXt0eXBlOkMscHJvcHM6XyxrZXk6SixyZWY6JCxfX2s6bnVsbCxfXzpudWxsLF9fYjowLF9fZTpudWxsLF9fYzpudWxsLGNvbnN0cnVjdG9yOnZvaWQgMCxfX3Y6LS1WOSxfX2k6LTEsX191OjAsX19zb3VyY2U6RyxfX3NlbGY6UX07aWYodHlwZW9mIEM9PSJmdW5jdGlvbiImJigkPUMuZGVmYXVsdFByb3BzKSlmb3IoWSBpbiAkKV9bWV09PT12b2lkIDAmJihfW1ldPSRbWV0pO3JldHVybiBSLnZub2RlJiZSLnZub2RlKFYpLFZ9dmFyIEM4PWB1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnJTNFJTNDY2lyY2xlIGN4PScxMicgY3k9JzEyJyByPSc5JyBmaWxsPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpJyBzdHJva2U9J3JnYmEoMCwwLDAsMC41NSknIHN0cm9rZS13aWR0aD0nMS4yNScgZmlsdGVyPSdkcm9wLXNoYWRvdygwIDFweCAycHggcmdiYSgwLDAsMCwwLjQ1KSknLyUzRSUzQy9zdmclM0UiKSAxMiAxMiwgcG9pbnRlcmAsXzk9MyxLOT00LEw5PTU7ZnVuY3Rpb24geDIoe3VybDpDLHdzVXJsOlosc3R5bGU6SixpbWFnZVN0eWxlOlgsY2xhc3NOYW1lOkcsb25Ib21lUHJlc3M6USxvblN0cmVhbVRvdWNoOiQsb25TdHJlYW1NdWx0aVRvdWNoOlksb25TdHJlYW1CdXR0b246XyxzdWJzY3JpYmVGcmFtZTpWLHN0cmVhbUZyYW1lOkIsc3RyZWFtQ29uZmlnOkssb25TY3JlZW5Db25maWdDaGFuZ2U6SCxoaWRlQ29udHJvbHM6RixvblN0cmVhbWluZ0NoYW5nZTpNLGNvbm5lY3Rpb25RdWFsaXR5Okx9KXtsZXQgRD0hISQsTz1oKG51bGwpLFA9aChudWxsKSxFPWgobnVsbCksdz1oKG51bGwpLFtmLGtdPUkoITEpLFtULFNdPUkobnVsbCksW3gsc109SShudWxsKSxsPWgobnVsbCksSDE9aChIKTtIMS5jdXJyZW50PUg7bGV0IHExPWgobnVsbCksW1AxLHZdPUkobnVsbCk7eSgoKT0+e2xldCBVPXExLmN1cnJlbnQ7aWYoIVV8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBOPW5ldyBSZXNpemVPYnNlcnZlcigoVyk9PntsZXQgQT1XWzBdPy5jb250ZW50UmVjdDtpZihBKXYoe3dpZHRoOkEud2lkdGgsaGVpZ2h0OkEuaGVpZ2h0fSl9KTtyZXR1cm4gTi5vYnNlcnZlKFUpLCgpPT5OLmRpc2Nvbm5lY3QoKX0sW10pO2xldFtpLCQxXT1JKDApLHI9aCgwKSxbbixGMV09SSghMSksQzE9aChudWxsKTt5KCgpPT57aWYoTD09PSJwb29yIil7aWYoRjEoITApLEMxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEMxLmN1cnJlbnQpO0MxLmN1cnJlbnQ9c2V0VGltZW91dCgoKT0+e0YxKCExKSxDMS5jdXJyZW50PW51bGx9LDMwMDApfWVsc2UgaWYoRjEoITEpLEMxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEMxLmN1cnJlbnQpLEMxLmN1cnJlbnQ9bnVsbDtyZXR1cm4oKT0+e2lmKEMxLmN1cnJlbnQpY2xlYXJUaW1lb3V0KEMxLmN1cnJlbnQpfX0sW0xdKTtsZXQgdD1gJHtDfS9zdHJlYW0ubWpwZWdgO3koKCk9PntsLmN1cnJlbnQ9bnVsbCxzKG51bGwpfSxbQ10pO2xldCBtPWooKFUpPT57aWYoIVV8fFUud2lkdGg8PTB8fFUuaGVpZ2h0PD0wKXJldHVybjtsZXQgTj1sLmN1cnJlbnQsVz1VLm9yaWVudGF0aW9uPT09dm9pZCAwJiZOPy5vcmllbnRhdGlvbj97Li4uVSxvcmllbnRhdGlvbjpOLm9yaWVudGF0aW9ufTpVO2lmKE4mJk4ud2lkdGg9PT1XLndpZHRoJiZOLmhlaWdodD09PVcuaGVpZ2h0JiZOLm9yaWVudGF0aW9uPT09Vy5vcmllbnRhdGlvbilyZXR1cm47bC5jdXJyZW50PVcscyhXKSxIMS5jdXJyZW50Py4oVyl9LFtdKSxkPWgoTSk7ZC5jdXJyZW50PU0seSgoKT0+e2QuY3VycmVudD8uKGYpfSxbZl0pLHkoKCk9PntpZihEJiZLKW0oSyl9LFtELEssbV0pO2xldCBwPWgoITEpO3AuY3VycmVudD1mO2xldCBlPWgobnVsbCk7eSgoKT0+e2lmKCFEfHwhVilyZXR1cm47bGV0IE49c2V0VGltZW91dCgoKT0+e2lmKCFwLmN1cnJlbnQpUygiU3RyZWFtIGlzIG5vdCBwcm9kdWNpbmcgZnJhbWVzLiBUaGUgc2ltdWxhdG9yIG1heSBoYXZlIHN0b3BwZWQg4oCUIHRyeSByZWNvbm5lY3RpbmcuIil9LDYwMDApLFc9VigoQSk9PntyLmN1cnJlbnQrKyxTMS5jdXJyZW50PURhdGUubm93KCk7bGV0IGc9UC5jdXJyZW50O2lmKGcpe2lmKGUuY3VycmVudClVUkwucmV2b2tlT2JqZWN0VVJMKGUuY3VycmVudCk7ZS5jdXJyZW50PUEsZy5zcmM9QX1pZighcC5jdXJyZW50KWNsZWFyVGltZW91dChOKSxrKCEwKSxTKG51bGwpfSk7cmV0dXJuKCk9PntpZihjbGVhclRpbWVvdXQoTiksVz8uKCksZS5jdXJyZW50KVVSTC5yZXZva2VPYmplY3RVUkwoZS5jdXJyZW50KSxlLmN1cnJlbnQ9bnVsbH19LFtELFZdKTtsZXQgWTE9aigoVSk9PntsZXQgTj1NMihsLmN1cnJlbnQpLmlucHV0T3JpZW50YXRpb24sVz1XMihOLFUueCxVLnkpLEE9VS5lZGdlPT09dm9pZCAwP3ZvaWQgMDpQNShOLFUuZWRnZSksZz1BPT09dm9pZCAwP3t0eXBlOlUudHlwZSwuLi5XfTp7dHlwZTpVLnR5cGUsLi4uVyxlZGdlOkF9O2lmKEQpeyQ/LihnKTtyZXR1cm59bGV0IHU9dy5jdXJyZW50O2lmKCF1fHx1LnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGcpKSxvPW5ldyBVaW50OEFycmF5KDErYS5sZW5ndGgpO29bMF09Xzksby5zZXQoYSwxKSx1LnNlbmQobyl9LFtELCRdKSxMMT1qKChVKT0+e2lmKEQpe18/LihVKTtyZXR1cm59bGV0IE49dy5jdXJyZW50O2lmKCFOfHxOLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IFc9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHtidXR0b246VX0pKSxBPW5ldyBVaW50OEFycmF5KDErVy5sZW5ndGgpO0FbMF09SzksQS5zZXQoVywxKSxOLnNlbmQoQSl9LFtELF9dKSxCMT1qKChVKT0+e2xldCBOPU0yKGwuY3VycmVudCkuaW5wdXRPcmllbnRhdGlvbixXPVcyKE4sVS54MSxVLnkxKSxBPVcyKE4sVS54MixVLnkyKSxnPXt0eXBlOlUudHlwZSx4MTpXLngseTE6Vy55LHgyOkEueCx5MjpBLnl9O2lmKEQpe1k/LihnKTtyZXR1cm59bGV0IHU9dy5jdXJyZW50O2lmKCF1fHx1LnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IGE9bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGcpKSxvPW5ldyBVaW50OEFycmF5KDErYS5sZW5ndGgpO29bMF09TDksby5zZXQoYSwxKSx1LnNlbmQobyl9LFtELFldKTt5KCgpPT57aWYoRClyZXR1cm47bGV0IFU9bmV3IEFib3J0Q29udHJvbGxlcixOPSgpPT57ZmV0Y2goYCR7Q30vY29uZmlnYCx7c2lnbmFsOlUuc2lnbmFsfSkudGhlbigoYjEpPT5iMS5qc29uKCkpLnRoZW4oKGIxKT0+e20oYjEpfSkuY2F0Y2goKCk9Pnt9KX07TigpO2xldCBXPXNldEludGVydmFsKE4sMTAwMCksQT1aPz9DLnJlcGxhY2UoL15odHRwLywid3MiKSsiL3dzIixnPW5ldyBXZWJTb2NrZXQoQSk7Zy5iaW5hcnlUeXBlPSJhcnJheWJ1ZmZlciIsdy5jdXJyZW50PWcsZy5vbm9wZW49KCk9PntrKCEwKSxTKG51bGwpfSxnLm9uY2xvc2U9KCk9PntrKCExKX0sZy5vbmVycm9yPSgpPT57UygiV2ViU29ja2V0IGNvbm5lY3Rpb24gZmFpbGVkIiksayghMSl9O2xldCB1PW5ldyBBYm9ydENvbnRyb2xsZXIsYT1zZXRJbnRlcnZhbCgoKT0+eyQxKHIuY3VycmVudCksci5jdXJyZW50PTB9LDEwMDApLG89ITEsSjI9c2V0VGltZW91dCgoKT0+e2lmKCFvKVMoIlN0cmVhbSBpcyBub3QgcHJvZHVjaW5nIGZyYW1lcy4gVGhlIHNpbXVsYXRvciBtYXkgaGF2ZSBzdG9wcGVkIOKAlCB0cnkgcmVjb25uZWN0aW5nLiIpfSw2MDAwKTtyZXR1cm4oYXN5bmMoKT0+e3RyeXtsZXQgWDI9KGF3YWl0IGZldGNoKHQse3NpZ25hbDp1LnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighWDIpcmV0dXJuO2xldCB4MT1uZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoIi0tZnJhbWUiKTt3aGlsZSghMCl7bGV0e2RvbmU6SDIsdmFsdWU6TjJ9PWF3YWl0IFgyLnJlYWQoKTtpZihIMilicmVhaztpZihOMilmb3IobGV0IEc1PTA7RzU8PU4yLmxlbmd0aC14MS5sZW5ndGg7RzUrKyl7bGV0IHM1PSEwO2ZvcihsZXQgSTI9MDtJMjx4MS5sZW5ndGg7STIrKylpZihOMltHNStJMl0hPT14MVtJMl0pe3M1PSExO2JyZWFrfWlmKHM1KXtpZihyLmN1cnJlbnQrKywhbylvPSEwLGNsZWFyVGltZW91dChKMil9fX19Y2F0Y2h7fX0pKCksKCk9Pnt1LmFib3J0KCksVS5hYm9ydCgpLGNsZWFySW50ZXJ2YWwoVyksY2xlYXJJbnRlcnZhbChhKSxjbGVhclRpbWVvdXQoSjIpLGcuY2xvc2UoKSx3LmN1cnJlbnQ9bnVsbH19LFtDLHQsRCxtLFpdKTtsZXQgUzE9aCgwKTt5KCgpPT57aWYoIUQpcmV0dXJuO2xldCBVPTIwMDAsTj0oKT0+e2xldCBnPVMxLmN1cnJlbnQ7aWYoIWd8fCFwLmN1cnJlbnQpcmV0dXJuO2lmKERhdGUubm93KCktZz5VKWsoITEpfSxXPXNldEludGVydmFsKCgpPT57JDEoci5jdXJyZW50KSxyLmN1cnJlbnQ9MCxOKCl9LDEwMDApLEE9KCk9PntpZighZG9jdW1lbnQuaGlkZGVuKU4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInZpc2liaWxpdHljaGFuZ2UiLEEpLCgpPT57Y2xlYXJJbnRlcnZhbChXKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixBKX19LFtEXSk7bGV0IHMxPWooKCk9PntyZXR1cm4gRD9QLmN1cnJlbnQ6Ty5jdXJyZW50fSxbRF0pLE4xPWooKCk9PntyZXR1cm4gRS5jdXJyZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKT8/czEoKT8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk/P251bGx9LFtzMV0pLG4xPWooKFUsTik9PntsZXQgVz1OMSgpO2lmKCFXKXJldHVybjtsZXQgQT0oTi5jbGllbnRYLVcubGVmdCkvVy53aWR0aCxnPShOLmNsaWVudFktVy50b3ApL1cuaGVpZ2h0O1kxKHt0eXBlOlUseDpBLHk6Z30pfSxbTjEsWTFdKSxfMT1oKCExKSx6MT1oKCExKSxjMT1oKCExKSxfMj1oKHtkeDowLGR5OjB9KSxsMT1oKCExKSxbSzIsazJdPUkoITEpLHQxPWgoe3g6MC41LHk6MC41fSksW0kxLFUxXT1JKG51bGwpO3koKCk9PntsZXQgVT0oVyk9PntpZihXLmtleT09PSJBbHQiKWsyKCEwKX0sTj0oVyk9PntpZihXLmtleT09PSJBbHQiKXtpZihrMighMSksIXoxLmN1cnJlbnQpVTEobnVsbCl9fTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLFUpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsTiksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVSksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIixOKX19LFtdKSx5KCgpPT57aWYoSzImJiF6MS5jdXJyZW50KXtsZXQgVT10MS5jdXJyZW50O1UxKHt4MTpVLngseTE6VS55LHgyOjEtVS54LHkyOjEtVS55fSl9ZWxzZSBpZighSzImJiF6MS5jdXJyZW50KVUxKG51bGwpfSxbSzJdKTtsZXQgdjE9aChudWxsKSxlMT1oKCExKSxtMT1oKDApLEMyPWooKFUsTik9PntlMS5jdXJyZW50PSEwO2xldCBXPXYxLmN1cnJlbnQ7aWYoVyljYW5jZWxBbmltYXRpb25GcmFtZShtMS5jdXJyZW50KSxtMS5jdXJyZW50PXJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e1cuc3R5bGUubGVmdD1gJHtVKjEwMH0lYCxXLnN0eWxlLnRvcD1gJHtOKjEwMH0lYCxXLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn0pfSxbXSksQTI9aigoVSxOKT0+e2lmKCFlMS5jdXJyZW50KXJldHVybjtsZXQgVz12MS5jdXJyZW50O2lmKFcpY2FuY2VsQW5pbWF0aW9uRnJhbWUobTEuY3VycmVudCksbTEuY3VycmVudD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PntXLnN0eWxlLmxlZnQ9YCR7VSoxMDB9JWAsVy5zdHlsZS50b3A9YCR7TioxMDB9JWB9KX0sW10pLGsxPWooKCk9PntlMS5jdXJyZW50PSExO2xldCBVPXYxLmN1cnJlbnQ7aWYoVSljYW5jZWxBbmltYXRpb25GcmFtZShtMS5jdXJyZW50KSxVLnN0eWxlLmRpc3BsYXk9Im5vbmUifSxbXSksTDI9aCgwKSxkMT1oKG51bGwpLFoxPWooKCk9PntsZXQgVT1EYXRlLm5vdygpLE49VS1MMi5jdXJyZW50O2lmKEwyLmN1cnJlbnQ9VSxOPDMwMCl7aWYoZDEuY3VycmVudCljbGVhclRpbWVvdXQoZDEuY3VycmVudCksZDEuY3VycmVudD1udWxsO2lmKFEpUSgpO2Vsc2UgTDEoImFwcF9zd2l0Y2hlciIpfWVsc2UgZDEuY3VycmVudD1zZXRUaW1lb3V0KCgpPT57aWYoUSlRKCk7ZWxzZSBMMSgiaG9tZSIpO2QxLmN1cnJlbnQ9bnVsbH0sMzAwKX0sW0wxLFFdKSxnMT1NMih4KSxhMT1nMS5kaXNwbGF5Q29uZmlnLFQxPSgoKT0+e2lmKCFhMXx8IVAxKXJldHVybiBudWxsO2lmKFAxLndpZHRoPT09MHx8UDEuaGVpZ2h0PT09MClyZXR1cm4gbnVsbDtsZXQgVT1NYXRoLm1pbihQMS53aWR0aC9hMS53aWR0aCxQMS5oZWlnaHQvYTEuaGVpZ2h0KTtyZXR1cm57d2lkdGg6YTEud2lkdGgqVSxoZWlnaHQ6YTEuaGVpZ2h0KlV9fSkoKSxaMj1nMS5yb3RhdGlvbkRlZ3JlZXMsQjI9ZzEubmVlZHNDc3NSb3RhdGlvbiYmTWF0aC5hYnMoWjIpPT09OTAsej1YLGI9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiI1MCUiLGxlZnQ6IjUwJSIsd2lkdGg6QjImJlQxP2Ake1QxLmhlaWdodH1weGA6IjEwMCUiLGhlaWdodDpCMiYmVDE/YCR7VDEud2lkdGh9cHhgOiIxMDAlIix0cmFuc2Zvcm06YHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSR7WjI9PT0wPyIiOmAgcm90YXRlKCR7WjJ9ZGVnKWB9YCx0cmFuc2Zvcm1PcmlnaW46ImNlbnRlciBjZW50ZXIiLGN1cnNvcjpDOCxkaXNwbGF5OiJibG9jayIsdXNlclNlbGVjdDoibm9uZSIsV2Via2l0VXNlclNlbGVjdDoibm9uZSIsdG91Y2hBY3Rpb246Im5vbmUiLC4uLlgsLi4uWjI9PT0wP3t9Ontib3JkZXJSYWRpdXM6MCxjb3JuZXJTaGFwZTp2b2lkIDB9fTtyZXR1cm4gcSgiZGl2Iix7c3R5bGU6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZmxleDoxLC4uLkY/e306e2JvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxvdmVyZmxvdzoiaGlkZGVuIixtaW5XaWR0aDowLG1pbkhlaWdodDowLC4uLkp9LGNsYXNzTmFtZTpHLGNoaWxkcmVuOltxKCJkaXYiLHtyZWY6cTEsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZmxleDoxLG1pbkhlaWdodDowLG1pbldpZHRoOjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIn0sY2hpbGRyZW46cSgiZGl2Iix7cmVmOkUsc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6VDE/YCR7VDEud2lkdGh9cHhgOiIxMDAlIixoZWlnaHQ6VDE/YCR7VDEuaGVpZ2h0fXB4YDoiMTAwJSIsb3ZlcmZsb3c6ImhpZGRlbiIsYm9yZGVyUmFkaXVzOno/LmJvcmRlclJhZGl1cyxjb3JuZXJTaGFwZTp6Py5jb3JuZXJTaGFwZX0sY2hpbGRyZW46W3EoImltZyIse3JlZjpPLHNyYzpEP3ZvaWQgMDp0LGRyYWdnYWJsZTohMSxvbkxvYWQ6KFUpPT57bGV0IE49VS5jdXJyZW50VGFyZ2V0O2lmKE4ubmF0dXJhbFdpZHRoPjAmJk4ubmF0dXJhbEhlaWdodD4wKW0oe3dpZHRoOk4ubmF0dXJhbFdpZHRoLGhlaWdodDpOLm5hdHVyYWxIZWlnaHR9KX0sc3R5bGU6RD97ZGlzcGxheToibm9uZSJ9OmJ9KSxEJiZxKCJpbWciLHtyZWY6UCxkcmFnZ2FibGU6ITEsb25Mb2FkOihVKT0+e2xldCBOPVUuY3VycmVudFRhcmdldDtpZihOLm5hdHVyYWxXaWR0aD4wJiZOLm5hdHVyYWxIZWlnaHQ+MCltKHt3aWR0aDpOLm5hdHVyYWxXaWR0aCxoZWlnaHQ6Ti5uYXR1cmFsSGVpZ2h0fSl9LHN0eWxlOmJ9KSxxKCJkaXYiLHtzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLGN1cnNvcjpDOCx0b3VjaEFjdGlvbjoibm9uZSJ9LG9uTW91c2VEb3duOihVKT0+e1UucHJldmVudERlZmF1bHQoKTtsZXQgTj1OMSgpO2lmKCFOKXJldHVybjtsZXQgVz0oVS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCxBPShVLmNsaWVudFktTi50b3ApL04uaGVpZ2h0O2lmKFUuYWx0S2V5KXt6MS5jdXJyZW50PSEwLGMxLmN1cnJlbnQ9VS5zaGlmdEtleTtsZXQgZz17eDE6Vyx5MTpBLHgyOjEtVyx5MjoxLUF9O18yLmN1cnJlbnQ9e2R4OjEtVy1XLGR5OjEtQS1BfSxVMShnKSxCMSh7dHlwZToiYmVnaW4iLC4uLmd9KTtyZXR1cm59aWYoQzIoVyxBKSxBPjAuODgpXzEuY3VycmVudD0hMCxZMSh7dHlwZToiYmVnaW4iLHg6Vyx5OkEsZWRnZTp1MX0pO2Vsc2UgXzEuY3VycmVudD0hMSxuMSgiYmVnaW4iLFUpfSxvbk1vdXNlTW92ZTooVSk9PntsZXQgTj1OMSgpO2lmKCFOKXJldHVybjtsZXQgVz0oVS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCxBPShVLmNsaWVudFktTi50b3ApL04uaGVpZ2h0O2lmKHQxLmN1cnJlbnQ9e3g6Vyx5OkF9LFUuYnV0dG9ucz09PTApe2lmKFUuYWx0S2V5KVUxKHt4MTpXLHkxOkEseDI6MS1XLHkyOjEtQX0pO3JldHVybn1pZih6MS5jdXJyZW50KXtsZXQgZztpZihjMS5jdXJyZW50KXtsZXQgdT1fMi5jdXJyZW50O2c9e3gxOlcseTE6QSx4MjpXK3UuZHgseTI6QSt1LmR5fX1lbHNlIGc9e3gxOlcseTE6QSx4MjoxLVcseTI6MS1BfTtVMShnKSxCMSh7dHlwZToibW92ZSIsLi4uZ30pO3JldHVybn1pZihBMihXLEEpLF8xLmN1cnJlbnQpWTEoe3R5cGU6Im1vdmUiLHg6Vyx5OkEsZWRnZTp1MX0pO2Vsc2UgbjEoIm1vdmUiLFUpfSxvbk1vdXNlVXA6KFUpPT57aWYoejEuY3VycmVudCl7bGV0IE49TjEoKTtpZihOKXtsZXQgVz0oVS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCxBPShVLmNsaWVudFktTi50b3ApL04uaGVpZ2h0O2lmKGMxLmN1cnJlbnQpe2xldCBnPV8yLmN1cnJlbnQ7QjEoe3R5cGU6ImVuZCIseDE6Vyx5MTpBLHgyOlcrZy5keCx5MjpBK2cuZHl9KX1lbHNlIEIxKHt0eXBlOiJlbmQiLHgxOlcseTE6QSx4MjoxLVcseTI6MS1BfSl9aWYoejEuY3VycmVudD0hMSwhVS5hbHRLZXkpVTEobnVsbCk7cmV0dXJufWlmKGsxKCksXzEuY3VycmVudCl7bGV0IE49TjEoKTtpZihOKXtsZXQgVz0oVS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCxBPShVLmNsaWVudFktTi50b3ApL04uaGVpZ2h0O1kxKHt0eXBlOiJlbmQiLHg6Vyx5OkEsZWRnZTp1MX0pfV8xLmN1cnJlbnQ9ITE7cmV0dXJufW4xKCJlbmQiLFUpfSxvbk1vdXNlTGVhdmU6KFUpPT57aWYoejEuY3VycmVudCl7aWYoSTEpQjEoe3R5cGU6ImVuZCIsLi4uSTF9KTt6MS5jdXJyZW50PSExLFUxKG51bGwpO3JldHVybn1pZihrMSgpLF8xLmN1cnJlbnQpe2xldCBOPU4xKCk7aWYoTil7bGV0IFc9KFUuY2xpZW50WC1OLmxlZnQpL04ud2lkdGgsQT0oVS5jbGllbnRZLU4udG9wKS9OLmhlaWdodDtZMSh7dHlwZToiZW5kIix4OlcseTpBLGVkZ2U6dTF9KX1fMS5jdXJyZW50PSExO3JldHVybn1pZihVLmJ1dHRvbnM+MCluMSgiZW5kIixVKTtVMShudWxsKX0sb25Ub3VjaFN0YXJ0OihVKT0+e1UucHJldmVudERlZmF1bHQoKTtsZXQgTj1OMSgpO2lmKCFOKXJldHVybjtpZihVLnRvdWNoZXMubGVuZ3RoPj0yKXtrMSgpO2xldCB1PVUudG91Y2hlc1swXSxhPVUudG91Y2hlc1sxXSxvPXt4MToodS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCx5MToodS5jbGllbnRZLU4udG9wKS9OLmhlaWdodCx4MjooYS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCx5MjooYS5jbGllbnRZLU4udG9wKS9OLmhlaWdodH07aWYoIWwxLmN1cnJlbnQmJiFfMS5jdXJyZW50KVkxKHt0eXBlOiJlbmQiLHg6by54MSx5Om8ueTF9KTtsMS5jdXJyZW50PSEwLHoxLmN1cnJlbnQ9ITAsXzEuY3VycmVudD0hMSxVMShvKSxCMSh7dHlwZToiYmVnaW4iLC4uLm99KTtyZXR1cm59bGV0IFc9VS50b3VjaGVzWzBdO2lmKCFXKXJldHVybjtsZXQgQT0oVy5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCxnPShXLmNsaWVudFktTi50b3ApL04uaGVpZ2h0O2lmKEMyKEEsZyksZz4wLjg4KV8xLmN1cnJlbnQ9ITAsWTEoe3R5cGU6ImJlZ2luIix4OkEseTpnLGVkZ2U6dTF9KTtlbHNlIF8xLmN1cnJlbnQ9ITEsWTEoe3R5cGU6ImJlZ2luIix4OkEseTpnfSl9LG9uVG91Y2hNb3ZlOihVKT0+e1UucHJldmVudERlZmF1bHQoKTtsZXQgTj1OMSgpO2lmKCFOKXJldHVybjtpZihsMS5jdXJyZW50JiZVLnRvdWNoZXMubGVuZ3RoPj0yKXtsZXQgdT1VLnRvdWNoZXNbMF0sYT1VLnRvdWNoZXNbMV0sbz17eDE6KHUuY2xpZW50WC1OLmxlZnQpL04ud2lkdGgseTE6KHUuY2xpZW50WS1OLnRvcCkvTi5oZWlnaHQseDI6KGEuY2xpZW50WC1OLmxlZnQpL04ud2lkdGgseTI6KGEuY2xpZW50WS1OLnRvcCkvTi5oZWlnaHR9O1UxKG8pLEIxKHt0eXBlOiJtb3ZlIiwuLi5vfSk7cmV0dXJufWxldCBXPVUudG91Y2hlc1swXTtpZighVylyZXR1cm47bGV0IEE9KFcuY2xpZW50WC1OLmxlZnQpL04ud2lkdGgsZz0oVy5jbGllbnRZLU4udG9wKS9OLmhlaWdodDtpZihBMihBLGcpLF8xLmN1cnJlbnQpWTEoe3R5cGU6Im1vdmUiLHg6QSx5OmcsZWRnZTp1MX0pO2Vsc2UgWTEoe3R5cGU6Im1vdmUiLHg6QSx5Omd9KX0sb25Ub3VjaEVuZDooVSk9PntVLnByZXZlbnREZWZhdWx0KCk7bGV0IE49TjEoKTtpZighTilyZXR1cm47aWYobDEuY3VycmVudCl7aWYoVS50b3VjaGVzLmxlbmd0aDwyKXtsZXQgdT1VLmNoYW5nZWRUb3VjaGVzWzBdLGE9STE7aWYodSYmYSlCMSh7dHlwZToiZW5kIix4MToodS5jbGllbnRYLU4ubGVmdCkvTi53aWR0aCx5MToodS5jbGllbnRZLU4udG9wKS9OLmhlaWdodCx4MjphLngyLHkyOmEueTJ9KTtlbHNlIGlmKGEpQjEoe3R5cGU6ImVuZCIsLi4uYX0pO2wxLmN1cnJlbnQ9ITEsejEuY3VycmVudD0hMSxVMShudWxsKX1yZXR1cm59bGV0IFc9VS5jaGFuZ2VkVG91Y2hlc1swXTtpZighVylyZXR1cm47bGV0IEE9KFcuY2xpZW50WC1OLmxlZnQpL04ud2lkdGgsZz0oVy5jbGllbnRZLU4udG9wKS9OLmhlaWdodDtpZihrMSgpLF8xLmN1cnJlbnQpWTEoe3R5cGU6ImVuZCIseDpBLHk6ZyxlZGdlOnUxfSksXzEuY3VycmVudD0hMTtlbHNlIFkxKHt0eXBlOiJlbmQiLHg6QSx5Omd9KX19KSxxKCJkaXYiLHtyZWY6djEsImRhdGEtdGVzdGlkIjoidG91Y2gtaW5kaWNhdG9yIixzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJub25lIix3aWR0aDoyNCxoZWlnaHQ6MjQsYm9yZGVyUmFkaXVzOiI1MCUiLGJhY2tncm91bmQ6InJnYmEoNTksMTMwLDI0NiwwLjUpIixib3hTaGFkb3c6IjAgMCA4cHggcmdiYSg1OSwxMzAsMjQ2LDAuMykiLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixwb2ludGVyRXZlbnRzOiJub25lIn19KSxJMSYmcShKMSx7Y2hpbGRyZW46W3EoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOlg4KEkxLngxLEkxLnkxKX0pLHEoImRpdiIseyJkYXRhLXRlc3RpZCI6ImZpbmdlci1kb3QiLHN0eWxlOlg4KEkxLngyLEkxLnkyKX0pXX0pLCFmJiYhVCYmcSgiZGl2Iix7c3R5bGU6ey4uLlo4LC4uLlh8fHt9fSxjaGlsZHJlbjpxKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4Iixmb250U2l6ZToxNH0sY2hpbGRyZW46IkNvbm5lY3RpbmcuLi4ifSl9KSxUJiZxKCJkaXYiLHtzdHlsZTpaOCxjaGlsZHJlbjpxKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjZjQ0Iixmb250U2l6ZToxNCxwYWRkaW5nOjIwLHRleHRBbGlnbjoiY2VudGVyIn0sY2hpbGRyZW46VH0pfSksbiYmcSgiZGl2Iix7c3R5bGU6QjksY2hpbGRyZW46cSgic3BhbiIse3N0eWxlOntjb2xvcjoiI2ZiYmYyNCIsZm9udFNpemU6MTMsZm9udEZhbWlseToibW9ub3NwYWNlIn0sY2hpbGRyZW46IlNsb3cgY29ubmVjdGlvbiJ9KX0pXX0pfSksIUYmJnEoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixwYWRkaW5nOiI0cHggOHB4Iixib3JkZXJUb3A6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIn0sY2hpbGRyZW46W3EoImJ1dHRvbiIse29uQ2xpY2s6WjEsc3R5bGU6e2JhY2tncm91bmQ6Im5vbmUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSIsY29sb3I6IiNhYWEiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6Im1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDEwcHgiLGN1cnNvcjoicG9pbnRlciIsYm9yZGVyUmFkaXVzOjR9LGNoaWxkcmVuOiJIb21lIn0pLHEoInNwYW4iLHtzdHlsZTp7Y29sb3I6aT4wPyIjNGY0IjoiIzg4OCIsZm9udFNpemU6MTIsZm9udEZhbWlseToibW9ub3NwYWNlIixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo2fSxjaGlsZHJlbjpbTCYmcSgic3BhbiIseyJkYXRhLXRlc3RpZCI6InF1YWxpdHktZG90IixzdHlsZTp7d2lkdGg6OCxoZWlnaHQ6OCxib3JkZXJSYWRpdXM6IjUwJSIsZGlzcGxheToiaW5saW5lLWJsb2NrIixiYWNrZ3JvdW5kOkw9PT0iZ29vZCI/IiM0YWRlODAiOkw9PT0iZGVncmFkZWQiPyIjZmFjYzE1IjoiI2VmNDQ0NCJ9fSksaSwiIGZwcyJdfSldfSldfSl9dmFyIEI5PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDo4LGxlZnQ6IjUwJSIsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC01MCUpIixiYWNrZ3JvdW5kOiJyZ2JhKDAsMCwwLDAuNykiLGJvcmRlclJhZGl1czo2LHBhZGRpbmc6IjRweCAxMnB4Iixwb2ludGVyRXZlbnRzOiJub25lIn0sWjg9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGJhY2tncm91bmQ6InJnYmEoMCwwLDAsMC44KSJ9LEo4PTIwO2Z1bmN0aW9uIFg4KEMsWil7cmV0dXJue3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDpgJHtDKjEwMH0lYCx0b3A6YCR7WioxMDB9JWAsd2lkdGg6SjgsaGVpZ2h0Oko4LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIixib3JkZXI6IjEuMjVweCBzb2xpZCByZ2JhKDAsMCwwLDAuNTUpIixib3hTaGFkb3c6IjAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNDUpIix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSJ9fWZ1bmN0aW9uIFkyKEMpe2lmKCFDKXJldHVybiJpcGhvbmUiO2xldCBaPUMudG9Mb3dlckNhc2UoKTtpZihaLmluY2x1ZGVzKCJpcGFkIikpcmV0dXJuImlwYWQiO2lmKFouaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIndhdGNoIjtpZihaLmluY2x1ZGVzKCJ2aXNpb24iKSlyZXR1cm4idmlzaW9uIjtyZXR1cm4iaXBob25lIn12YXIgQTE9e2lwaG9uZTp7d2lkdGg6NDI3LGhlaWdodDo4ODEsYmV6ZWxYOjE4LGJlemVsWToxOCxpbm5lclJhZGl1czo1NX0saXBhZDp7d2lkdGg6NDMwLGhlaWdodDo2MDUsYmV6ZWxYOjE2LGJlemVsWToxNixpbm5lclJhZGl1czoxMn0sd2F0Y2g6e3dpZHRoOjI3NCxoZWlnaHQ6MzIyLGJlemVsWDoxMixiZXplbFk6MTIsaW5uZXJSYWRpdXM6Nzl9LHZpc2lvbjp7d2lkdGg6NjQwLGhlaWdodDo0MDAsYmV6ZWxYOjEyLGJlemVsWToxMixpbm5lclJhZGl1czozMn19LFg0PUExLmlwaG9uZS53aWR0aCxxND1BMS5pcGhvbmUuaGVpZ2h0LEc0PUExLmlwaG9uZS5iZXplbFgsUTQ9QTEuaXBob25lLmJlemVsWSwkND1BMS5pcGhvbmUuaW5uZXJSYWRpdXMscTg9eyJpUGhvbmUgMTcgUHJvIE1heCI6e3dpZHRoOjEzMjAsaGVpZ2h0OjI4Njh9LCJpUGhvbmUgMTcgUHJvIjp7d2lkdGg6MTIwNixoZWlnaHQ6MjYyMn0sImlQaG9uZSAxNyI6e3dpZHRoOjEyMDYsaGVpZ2h0OjI2MjJ9LCJpUGhvbmUgQWlyIjp7d2lkdGg6MTI2MCxoZWlnaHQ6MjczNn0sImlQaG9uZSAxNiBQcm8gTWF4Ijp7d2lkdGg6MTMyMCxoZWlnaHQ6Mjg2OH0sImlQaG9uZSAxNiBQcm8iOnt3aWR0aDoxMjA2LGhlaWdodDoyNjIyfSwiaVBob25lIDE2IFBsdXMiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE2Ijp7d2lkdGg6MTE3OSxoZWlnaHQ6MjU1Nn0sImlQaG9uZSAxNmUiOnt3aWR0aDoxMTcwLGhlaWdodDoyNTMyfSwiaVBob25lIDE1IFBybyBNYXgiOnt3aWR0aDoxMjkwLGhlaWdodDoyNzk2fSwiaVBob25lIDE1IFBybyI6e3dpZHRoOjExNzksaGVpZ2h0OjI1NTZ9LCJpUGhvbmUgMTUgUGx1cyI6e3dpZHRoOjEyOTAsaGVpZ2h0OjI3OTZ9LCJpUGhvbmUgMTUiOnt3aWR0aDoxMTc5LGhlaWdodDoyNTU2fSwiaVBhZCBQcm8gMTMtaW5jaCAoTTUpIjp7d2lkdGg6MjA2NCxoZWlnaHQ6Mjc1Mn0sImlQYWQgUHJvIDExLWluY2ggKE01KSI6e3dpZHRoOjE2NjgsaGVpZ2h0OjI0MjB9LCJpUGFkIFBybyAxMy1pbmNoIChNNCkiOnt3aWR0aDoyMDY0LGhlaWdodDoyNzUyfSwiaVBhZCBQcm8gMTEtaW5jaCAoTTQpIjp7d2lkdGg6MTY2OCxoZWlnaHQ6MjQyMH0sImlQYWQgQWlyIDEzLWluY2ggKE0zKSI6e3dpZHRoOjIwNDgsaGVpZ2h0OjI3MzJ9LCJpUGFkIEFpciAxMS1pbmNoIChNMykiOnt3aWR0aDoxNjQwLGhlaWdodDoyMzYwfSwiaVBhZCAoQTE2KSI6e3dpZHRoOjE2NDAsaGVpZ2h0OjIzNjB9LCJpUGFkIG1pbmkgKEExNyBQcm8pIjp7d2lkdGg6MTQ4OCxoZWlnaHQ6MjI2Nn0sIkFwcGxlIFdhdGNoIFVsdHJhIDMgKDQ5bW0pIjp7d2lkdGg6NDIyLGhlaWdodDo1MTR9LCJBcHBsZSBXYXRjaCBVbHRyYSAyICg0OW1tKSI6e3dpZHRoOjQxMCxoZWlnaHQ6NTAyfSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDExICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Nm1tKSI6e3dpZHRoOjQxNixoZWlnaHQ6NDk2fSwiQXBwbGUgV2F0Y2ggU2VyaWVzIDEwICg0Mm1tKSI6e3dpZHRoOjM3NCxoZWlnaHQ6NDQ2fSwiQXBwbGUgV2F0Y2ggU0UgMyAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFIDMgKDQwbW0pIjp7d2lkdGg6MzI0LGhlaWdodDozOTR9LCJBcHBsZSBXYXRjaCBTRSAoNDRtbSkiOnt3aWR0aDozNjgsaGVpZ2h0OjQ0OH0sIkFwcGxlIFdhdGNoIFNFICg0MG1tKSI6e3dpZHRoOjMyNCxoZWlnaHQ6Mzk0fSwiQXBwbGUgVmlzaW9uIFBybyI6e3dpZHRoOjE5MjAsaGVpZ2h0OjEwODB9fTtmdW5jdGlvbiBmMihDLFope2xldCBKPUMmJkMud2lkdGg+MCYmQy5oZWlnaHQ+MD9DOlosWD0kMihKKTtpZihYKXJldHVybmAke1gud2lkdGh9IC8gJHtYLmhlaWdodH1gO3JldHVybmAke0ExLmlwaG9uZS53aWR0aC0yKkExLmlwaG9uZS5iZXplbFh9IC8gJHtBMS5pcGhvbmUuaGVpZ2h0LTIqQTEuaXBob25lLmJlemVsWX1gfWZ1bmN0aW9uIHAyKEM9ImlwaG9uZSIsWil7bGV0IEo9Wj9xOFtaXTpudWxsO2lmKEopcmV0dXJuIEo7bGV0IFg9QTFbQ107cmV0dXJue3dpZHRoOlgud2lkdGgtMipYLmJlemVsWCxoZWlnaHQ6WC5oZWlnaHQtMipYLmJlemVsWX19ZnVuY3Rpb24gdTIoQz0iaXBob25lIixaKXtpZih6MihaKSlzd2l0Y2goQyl7Y2FzZSJpcGFkIjpyZXR1cm4gNzIwO2Nhc2UidmlzaW9uIjpyZXR1cm4gNTgwO2Nhc2Uid2F0Y2giOnJldHVybiAyMDA7ZGVmYXVsdDpyZXR1cm4gNjIwfXN3aXRjaChDKXtjYXNlImlwYWQiOnJldHVybiA0MDA7Y2FzZSJ3YXRjaCI6cmV0dXJuIDIwMDtjYXNlInZpc2lvbiI6cmV0dXJuIDU4MDtkZWZhdWx0OnJldHVybiAzMjB9fWZ1bmN0aW9uIGMyKEM9ImlwaG9uZSIsWil7bGV0IEo9QTFbQ10sWD1KLndpZHRoLTIqSi5iZXplbFgsRz1KLmhlaWdodC0yKkouYmV6ZWxZO2lmKFg8RyYmejIoWikpcmV0dXJuYCR7Si5pbm5lclJhZGl1cy9HKjEwMH0lIC8gJHtKLmlubmVyUmFkaXVzL1gqMTAwfSVgO3JldHVybmAke0ouaW5uZXJSYWRpdXMvWCoxMDB9JSAvICR7Si5pbm5lclJhZGl1cy9HKjEwMH0lYH12YXIgazU9ajEobnVsbCk7ZnVuY3Rpb24gbDIoQyl7bGV0IFo9cDEoazUpO2lmKCFaKXRocm93IEVycm9yKGA8U2ltdWxhdG9yVG9vbGJhci4ke0N9PiBtdXN0IGJlIHJlbmRlcmVkIGluc2lkZSA8U2ltdWxhdG9yVG9vbGJhcj5gKTtyZXR1cm4gWn12YXIgRDk9e2Rpc3BsYXk6ImZsZXgiLGZsZXhXcmFwOiJ3cmFwIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6IjRweCAxMnB4IixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyUmFkaXVzOjI0LGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm94U2hhZG93OiIwIDFweCAycHggcmdiYSgwLDAsMCwwLjIpIixtaW5XaWR0aDoyNDAsd2lkdGg6IjEwMCUifTtmdW5jdGlvbiBVOSh7ZXhlYzpDLG9uUm90YXRlOlosb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlgsZGV2aWNlTmFtZTpHLGRldmljZVJ1bnRpbWU6USxzdHJlYW1pbmc6JD0hMSxkaXNhYmxlZDpZPSExLGNoaWxkcmVuOl8sc3R5bGU6ViwuLi5CfSl7bGV0IEs9WTIoRyksRj17ZXhlYzpDLG9uUm90YXRlOlosb3JpZW50YXRpb246SixkZXZpY2VVZGlkOlgsZGV2aWNlTmFtZTpHLGRldmljZVJ1bnRpbWU6USxkZXZpY2VUeXBlOkssc3RyZWFtaW5nOiQsZGlzYWJsZWQ6WXx8IVh8fCEkfTtyZXR1cm4gcShrNS5Qcm92aWRlcix7dmFsdWU6RixjaGlsZHJlbjpxKCJkaXYiLHsiZGF0YS1zaW11bGF0b3ItdG9vbGJhciI6ITAsc3R5bGU6ey4uLkQ5LC4uLlZ9LC4uLkIsY2hpbGRyZW46X30pfSl9dmFyIE85PXtkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImZsZXgtc3RhcnQiLHRleHRBbGlnbjoibGVmdCIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNmZmYiLHBhZGRpbmc6IjJweCA0cHgiLG1hcmdpbjoiLTJweCAtNHB4Iixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLG1pbldpZHRoOjAsbWF4V2lkdGg6IjEwMCUiLGxpbmVIZWlnaHQ6MS4yLGZvbnRGYW1pbHk6ImluaGVyaXQifSx6OT1RMihmdW5jdGlvbih7bmFtZTpaLHN1YnRpdGxlOkosaGlkZUNoZXZyb246WCxzdHlsZTpHLG9uTW91c2VFbnRlcjpRLG9uTW91c2VMZWF2ZTokLC4uLll9LF8pe2xldCBWPWwyKCJUaXRsZSIpLFtCLEtdPUkoITEpLEg9Wj8/Vi5kZXZpY2VOYW1lPz8iTm8gc2ltdWxhdG9yIixGPUo/PyhWLmRldmljZVJ1bnRpbWU/Vi5kZXZpY2VSdW50aW1lLnJlcGxhY2UoL1wuLywiICIpOiLigJQiKTtyZXR1cm4gcSgiYnV0dG9uIix7cmVmOl8sdHlwZToiYnV0dG9uIiwiZGF0YS1zaW11bGF0b3ItdG9vbGJhci10aXRsZSI6ITAsb25Nb3VzZUVudGVyOihNKT0+e0soITApLFE/LihNKX0sb25Nb3VzZUxlYXZlOihNKT0+e0soITEpLCQ/LihNKX0sc3R5bGU6ey4uLk85LGJhY2tncm91bmQ6Qj8icmdiYSgyNTUsMjU1LDI1NSwwLjEpIjoidHJhbnNwYXJlbnQiLC4uLkd9LC4uLlksY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjQsZm9udFNpemU6MTIsZm9udFdlaWdodDo2MDAsY29sb3I6IiNmZmYiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbSCwhWCYmcSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42KSIsZmxleFNocmluazowfSxjaGlsZHJlbjpxKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSxxKCJzcGFuIix7c3R5bGU6e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLG1heFdpZHRoOiIxMDAlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpGfSldfSl9KSxNOT17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NCxmbGV4U2hyaW5rOjB9O2Z1bmN0aW9uIFc5KHtzdHlsZTpDLC4uLlp9KXtyZXR1cm4gcSgiZGl2Iix7c3R5bGU6ey4uLk05LC4uLkN9LC4uLlp9KX12YXIgUDk9e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLHBhZGRpbmc6Nixib3JkZXJSYWRpdXM6NixjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImlubGluZS1mbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJjZW50ZXIiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuOCkiLHRyYW5zaXRpb246ImJhY2tncm91bmQtY29sb3IgMC4xNXMsIGNvbG9yIDAuMTVzIn0sZDI9UTIoZnVuY3Rpb24oe2ZvcmNlRGlzYWJsZWQ6WixzdHlsZTpKLGRpc2FibGVkOlgsb25Nb3VzZUVudGVyOkcsb25Nb3VzZUxlYXZlOlEsY2hpbGRyZW46JCwuLi5ZfSxfKXtsZXQgVj1wMShrNSksQj1YfHxafHxWPy5kaXNhYmxlZCxbSyxIXT1JKCExKTtyZXR1cm4gcSgiYnV0dG9uIix7cmVmOl8sdHlwZToiYnV0dG9uIixkaXNhYmxlZDpCLG9uTW91c2VFbnRlcjooRik9PntIKCEwKSxHPy4oRil9LG9uTW91c2VMZWF2ZTooRik9PntIKCExKSxRPy4oRil9LHN0eWxlOnsuLi5QOSxjb2xvcjpCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpIjoicmdiYSgyNTUsMjU1LDI1NSwwLjgpIixiYWNrZ3JvdW5kOksmJiFCPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiOiJ0cmFuc3BhcmVudCIsY3Vyc29yOkI/Im5vdC1hbGxvd2VkIjoicG9pbnRlciIsLi4uSn0sLi4uWSxjaGlsZHJlbjokfSl9KTtmdW5jdGlvbiBrOSgpe3JldHVyblsndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gdGVsbCBwcm9jZXNzICJTaW11bGF0b3IiIHRvIHNldCBmcm9udG1vc3QgdG8gdHJ1ZScsJ3RlbGwgYXBwbGljYXRpb24gIlN5c3RlbSBFdmVudHMiIHRvIHRlbGwgcHJvY2VzcyAiU2ltdWxhdG9yIiB0byBwZXJmb3JtIGFjdGlvbiAiQVhSYWlzZSIgb2YgKGZpcnN0IHdpbmRvdyB3aG9zZSBuYW1lIGNvbnRhaW5zICJ3YXRjaE9TIiknLCd0ZWxsIGFwcGxpY2F0aW9uICJTeXN0ZW0gRXZlbnRzIiB0byB0ZWxsIHByb2Nlc3MgIlNpbXVsYXRvciIgdG8gY2xpY2sgbWVudSBpdGVtICJIb21lIiBvZiBtZW51ICJEZXZpY2UiIG9mIG1lbnUgYmFyIGl0ZW0gIkRldmljZSIgb2YgbWVudSBiYXIgMSddLm1hcCgoWik9PmAtZSAnJHtafSdgKS5yZWR1Y2UoKFosSik9PmAke1p9ICR7Sn1gLCJvc2FzY3JpcHQiKX12YXIgQTk9e3BvcnRyYWl0OiJsYW5kc2NhcGVfbGVmdCIsbGFuZHNjYXBlX2xlZnQ6InBvcnRyYWl0X3Vwc2lkZV9kb3duIixwb3J0cmFpdF91cHNpZGVfZG93bjoibGFuZHNjYXBlX3JpZ2h0IixsYW5kc2NhcGVfcmlnaHQ6InBvcnRyYWl0In0sSTk9cSgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46cSgicGF0aCIse2Q6Ik0zIDEwLjUgMTIgM2w5IDcuNVYyMGExIDEgMCAwIDEtMSAxaC01di03aC02djdINGExIDEgMCAwIDEtMS0xeiJ9KX0pLFQ5PXEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltxKCJwYXRoIix7ZDoiTTE0LjUgNGgtNUw3IDdINGEyIDIgMCAwIDAtMiAydjlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtM3oifSkscSgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTMiLHI6IjQifSldfSksRTk9cSgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMTIgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjaGlsZHJlbjpxKCJwYXRoIix7ZDoiTTEwLjIzMDUgMTIuODA3N0g0LjQyMzgzQzMuOTIzODMgMTIuODA3NyAzLjU0Njg4IDEyLjY4NDYgMy4yOTI5NyAxMi40Mzg1QzMuMDQyOTcgMTIuMTk2MyAyLjkxNzk3IDExLjgxOTQgMi45MTc5NyAxMS4zMDc3VjUuNTEyNzRDMi45MTc5NyA0Ljk5NzExIDMuMDQyOTcgNC42MTgyMSAzLjI5Mjk3IDQuMzc2MDJDMy41NDY4OCA0LjEyOTkzIDMuOTIzODMgNC4wMDY4OCA0LjQyMzgzIDQuMDA2ODhIMTAuMjMwNUMxMC43MzQ0IDQuMDA2ODggMTEuMTExMyA0LjEyOTkzIDExLjM2MTMgNC4zNzYwMkMxMS42MTEzIDQuNjE4MjEgMTEuNzM2MyA0Ljk5NzExIDExLjczNjMgNS41MTI3NFYxMS4zMDc3QzExLjczNjMgMTEuODE5NCAxMS42MTEzIDEyLjE5NjMgMTEuMzYxMyAxMi40Mzg1QzExLjExMTMgMTIuNjg0NiAxMC43MzQ0IDEyLjgwNzcgMTAuMjMwNSAxMi44MDc3Wk0xMC4yMTI5IDExLjg2NDNDMTAuNDE2IDExLjg2NDMgMTAuNTYyNSAxMS44MTk0IDEwLjY1MjMgMTEuNzI5NUMxMC43NDYxIDExLjY0MzYgMTAuNzkzIDExLjQ5NzEgMTAuNzkzIDExLjI5MDFWNS41MjQ0NkMxMC43OTMgNS4zMTc0MyAxMC43NDYxIDUuMTcwOTQgMTAuNjUyMyA1LjA4NTAxQzEwLjU2MjUgNC45OTUxNiAxMC40MTYgNC45NTAyNCAxMC4yMTI5IDQuOTUwMjRINC40NDE0MUM0LjI0MjE5IDQuOTUwMjQgNC4wOTU3IDQuOTk1MTYgNC4wMDE5NSA1LjA4NTAxQzMuOTA4MiA1LjE3MDk0IDMuODYxMzMgNS4zMTc0MyAzLjg2MTMzIDUuNTI0NDZWMTEuMjkwMUMzLjg2MTMzIDExLjQ5NzEgMy45MDgyIDExLjY0MzYgNC4wMDE5NSAxMS43Mjk1QzQuMDk1NyAxMS44MTk0IDQuMjQyMTkgMTEuODY0MyA0LjQ0MTQxIDExLjg2NDNIMTAuMjEyOVpNMi45MTc5NyAyLjU4MzA1VjAuNDE1MDgzQzIuOTE3OTcgMC4yMDAyNCAyLjk4NjMzIDAuMDY5MzgwMyAzLjEyMzA1IDAuMDIyNTA1M0MzLjI1OTc3IC0wLjAyODI3NTkgMy40MTAxNiAwLjAwNjg4MDMzIDMuNTc0MjIgMC4xMjc5NzRMNS4wNTA3OCAxLjIxMTk2QzUuMTc1NzggMS4zMDU3MSA1LjIzODI4IDEuNDAxNDEgNS4yMzgyOCAxLjQ5OTA3QzUuMjM4MjggMS41OTY3MiA1LjE3NTc4IDEuNjkyNDMgNS4wNTA3OCAxLjc4NjE4TDMuNTc0MjIgMi44NjQzQzMuNDEwMTYgMi45ODU0IDMuMjU5NzcgMy4wMjI1MSAzLjEyMzA1IDIuOTc1NjNDMi45ODYzMyAyLjkyNDg1IDIuOTE3OTcgMi43OTM5OSAyLjkxNzk3IDIuNTgzMDVaTTMuNTMzMiAxLjE1MzM2QzMuNjI2OTUgMS4xNTMzNiAzLjcwNzAzIDEuMTg2NTcgMy43NzM0NCAxLjI1Mjk3QzMuODQzNzUgMS4zMTkzOCAzLjg3ODkxIDEuMzk3NTEgMy44Nzg5MSAxLjQ4NzM1QzMuODc4OTEgMS41ODExIDMuODQzNzUgMS42NjMxMyAzLjc3MzQ0IDEuNzMzNDRDMy43MDcwMyAxLjc5OTg1IDMuNjI2OTUgMS44MzMwNSAzLjUzMzIgMS44MzMwNUgyLjgwNjY0QzIuMzgwODYgMS44MzMwNSAyLjAxMTcyIDEuOTI0ODUgMS42OTkyMiAyLjEwODQ0QzEuMzkwNjIgMi4yODgxMyAxLjE1MjM0IDIuNTM4MTMgMC45ODQzNzUgMi44NTg0NEMwLjgxNjQwNiAzLjE3ODc2IDAuNzMyNDIyIDMuNTQ1OTQgMC43MzI0MjIgMy45NjAwMVY0LjgzODkxQzAuNzMyNDIyIDQuOTM2NTcgMC42OTcyNjYgNS4wMjI1MSAwLjYyNjk1MyA1LjA5NjcyQzAuNTUyNzM0IDUuMTY3MDQgMC40NjQ4NDQgNS4yMDIxOSAwLjM2MzI4MSA1LjIwMjE5QzAuMjY1NjI1IDUuMjAyMTkgMC4xODE2NDEgNS4xNjcwNCAwLjExMTMyOCA1LjA5NjcyQzAuMDM3MTA5NCA1LjAyMjUxIDAgNC45MzY1NyAwIDQuODM4OTFWMy45NjAwMUMwIDMuNDAxNDEgMC4xMTcxODggMi45MTExOCAwLjM1MTU2MiAyLjQ4OTNDMC41ODIwMzEgMi4wNjc0MyAwLjkwODIwMyAxLjczOTMgMS4zMzAwOCAxLjUwNDkzQzEuNzQ4MDUgMS4yNzA1NSAyLjIzODI4IDEuMTUzMzYgMi44MDA3OCAxLjE1MzM2SDMuNTMzMloifSl9KSx3OT1RMihmdW5jdGlvbih7b25DbGljazpaLC4uLkp9LFgpe2xldCBHPWwyKCJIb21lQnV0dG9uIik7cmV0dXJuIHEoZDIse3JlZjpYLCJhcmlhLWxhYmVsIjoiSG9tZSIsb25DbGljazooUSk9PntpZihaPy4oUSksUS5kZWZhdWx0UHJldmVudGVkKXJldHVybjtpZihHLmRldmljZVR5cGU9PT0id2F0Y2giKUcuZXhlYyhrOSgpKTtlbHNlIEcuZXhlYygic2VydmUtc2ltIGJ1dHRvbiBob21lIil9LC4uLkosY2hpbGRyZW46STl9KX0pLFM5PVEyKGZ1bmN0aW9uKHtvbkNsaWNrOlosLi4uSn0sWCl7bGV0IEc9bDIoIlNjcmVlbnNob3RCdXR0b24iKTtyZXR1cm4gcShkMix7cmVmOlgsImFyaWEtbGFiZWwiOiJTY3JlZW5zaG90IixvbkNsaWNrOihRKT0+e2lmKFo/LihRKSxRLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKEcuZGV2aWNlVWRpZClHLmV4ZWMoYHhjcnVuIHNpbWN0bCBpbyAke0cuZGV2aWNlVWRpZH0gc2NyZWVuc2hvdCB+L0Rlc2t0b3Avc2VydmUtc2ltLXNjcmVlbnNob3QtJChkYXRlICslcykucG5nYCl9LC4uLkosY2hpbGRyZW46VDl9KX0pLGI5PVEyKGZ1bmN0aW9uKHtvbkNsaWNrOlosZm9yY2VEaXNhYmxlZDpKLC4uLlh9LEcpe2xldCBRPWwyKCJSb3RhdGVCdXR0b24iKSwkPVEuZGV2aWNlVHlwZT09PSJ3YXRjaCJ8fFEuZGV2aWNlVHlwZT09PSJ2aXNpb24iLFtZLF9dPUkoInBvcnRyYWl0Iik7cmV0dXJuIHkoKCk9PntfKFEub3JpZW50YXRpb24/PyJwb3J0cmFpdCIpfSxbUS5kZXZpY2VVZGlkLFEub3JpZW50YXRpb25dKSxxKGQyLHtyZWY6RywiYXJpYS1sYWJlbCI6IlJvdGF0ZSBkZXZpY2UiLGZvcmNlRGlzYWJsZWQ6Snx8JCxvbkNsaWNrOihWKT0+e2lmKFo/LihWKSxWLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2lmKCFRLmRldmljZVVkaWR8fCQpcmV0dXJuO2xldCBCPUE5W1Eub3JpZW50YXRpb24/P1ldO2lmKF8oQiksUS5vblJvdGF0ZSlRLm9uUm90YXRlKEIpO2Vsc2UgUS5leGVjKGBzZXJ2ZS1zaW0gcm90YXRlICR7Qn0gLWQgJHtRLmRldmljZVVkaWR9YCl9LC4uLlgsY2hpbGRyZW46RTl9KX0pLEQxPVU5O0QxLlRpdGxlPXo5O0QxLkFjdGlvbnM9Vzk7RDEuQnV0dG9uPWQyO0QxLkhvbWVCdXR0b249dzk7RDEuU2NyZWVuc2hvdEJ1dHRvbj1TOTtEMS5Sb3RhdGVCdXR0b249Yjk7ZnVuY3Rpb24gUjkoQyxaLEope2xldCBYPUoubGF0Kk1hdGguUEkvMTgwLEc9KEMtSi5sYXQpKk1hdGguUEkvMTgwO3JldHVybnt4OihaLUoubG5nKSpNYXRoLlBJLzE4MCpNYXRoLmNvcyhYKSo2MzcxMDAwLHo6LUcqNjM3MTAwMH19ZnVuY3Rpb24geTkoQyxaLEope2xldCBYPUoubGF0Kk1hdGguUEkvMTgwLEc9LVovNjM3MTAwMCooMTgwL01hdGguUEkpLFE9Qy8oNjM3MTAwMCpNYXRoLmNvcyhYKSkqKDE4MC9NYXRoLlBJKTtyZXR1cm57bGF0OkoubGF0K0csbG5nOkoubG5nK1F9fWZ1bmN0aW9uIGo5KEMsWixKLFgsRyl7bGV0IFE9RypHLCQ9USpHLFk9KF8sVixCLEspPT4wLjUqKDIqVisoLV8rQikqRysoMipfLTUqVis0KkItSykqUSsoLV8rMypWLTMqQitLKSokKTtyZXR1cm57eDpZKEMueCxaLngsSi54LFgueCksejpZKEMueixaLnosSi56LFgueikseTpZKEMueSxaLnksSi55LFgueSkscmF3QWx0OlkoQy5yYXdBbHQsWi5yYXdBbHQsSi5yYXdBbHQsWC5yYXdBbHQpfX1mdW5jdGlvbiBoOShDLFosSil7aWYoQy5sZW5ndGg8MilyZXR1cm4gQy5zbGljZSgpO2xldCBYPVtdLEc9Qy5sZW5ndGgsUT1KP0c6Ry0xO2ZvcihsZXQgJD0wOyQ8UTskKyspe2xldCBZPUNbSj8oJC0xK0cpJUc6TWF0aC5tYXgoMCwkLTEpXSxfPUNbJCVHXSxWPUNbKCQrMSklR10sQj1DW0o/KCQrMiklRzpNYXRoLm1pbihHLTEsJCsyKV0sSz1WLngtXy54LEg9Vi56LV8ueixGPU1hdGguaHlwb3QoSyxIKSxNPU1hdGgubWF4KDIsTWF0aC5jZWlsKEYvWikpO2ZvcihsZXQgTD0wO0w8TTtMKyspe2xldCBEPUwvTTtYLnB1c2goajkoWSxfLFYsQixEKSl9fWlmKCFKKVgucHVzaChDW0ctMV0pO3JldHVybiBYfWZ1bmN0aW9uIEc4KEMpe2lmKEMud2F5cG9pbnRzLmxlbmd0aDwyKXRocm93IEVycm9yKGBUcmFpbCAke0MuaWR9IG5lZWRzIGF0IGxlYXN0IDIgd2F5cG9pbnRzYCk7bGV0IFo9e2xhdDpDLndheXBvaW50cy5yZWR1Y2UoKEwsRCk9PkwrRC5sYXQsMCkvQy53YXlwb2ludHMubGVuZ3RoLGxuZzpDLndheXBvaW50cy5yZWR1Y2UoKEwsRCk9PkwrRC5sbmcsMCkvQy53YXlwb2ludHMubGVuZ3RofSxKPUMud2F5cG9pbnRzLm1hcCgoTCk9PkwuYWx0Pz8wKSxYPU1hdGgubWluKC4uLkopLEc9TWF0aC5tYXgoLi4uSiksUT1DLndheXBvaW50cy5tYXAoKEwpPT57bGV0e3g6RCx6Ok99PVI5KEwubGF0LEwubG5nLFopLFA9TC5hbHQ/PzA7cmV0dXJue3g6RCx6Ok8seTpQLVgscmF3QWx0OlB9fSksJD1oOShRLDgsISFDLmxvb3ApLFk9W10sXz0wO2ZvcihsZXQgTD0wO0w8JC5sZW5ndGg7TCsrKXtsZXQgRD0kW0xdO2lmKEw+MCl7bGV0IHc9JFtMLTFdO18rPU1hdGguaHlwb3QoRC54LXcueCxELnotdy56LEQueS13LnkpfWxldHtsYXQ6Tyxsbmc6UH09eTkoRC54LEQueixaKSxFPU1hdGgubWF4KDAsRC55KTtZLnB1c2goe3g6RC54LHo6RC56LHk6RSxhcmM6XyxsYXQ6Tyxsbmc6UH0pfWxldCBWPTEvMCxCPS0xLzAsSz0xLzAsSD0tMS8wLEY9MS8wLE09LTEvMDtmb3IobGV0IEwgb2YgWSl7aWYoTC54PFYpVj1MLng7aWYoTC54PkIpQj1MLng7aWYoTC56PEspSz1MLno7aWYoTC56PkgpSD1MLno7aWYoTC55PEYpRj1MLnk7aWYoTC55Pk0pTT1MLnl9cmV0dXJue3RyYWlsOkMsb3JpZ2luOloscG9pbnRzOlksdG90YWxEaXN0YW5jZTpZW1kubGVuZ3RoLTFdLmFyYyxib3VuZHM6e3g6W1YsQl0seTpbRixNXSx6OltLLEhdfSxyYXdNaW5BbHQ6WCxyYXdNYXhBbHQ6R319ZnVuY3Rpb24gbzEoQyxaKXtsZXQgSj1DLnRvdGFsRGlzdGFuY2U7aWYoSj09PTApcmV0dXJuIEMucG9pbnRzWzBdO2xldCBYPVo7aWYoQy50cmFpbC5sb29wKVg9KFglSitKKSVKO2Vsc2V7aWYoWDw9MClyZXR1cm4gQy5wb2ludHNbMF07aWYoWD49SilyZXR1cm4gQy5wb2ludHNbQy5wb2ludHMubGVuZ3RoLTFdfWxldCBHPTAsUT1DLnBvaW50cy5sZW5ndGgtMTt3aGlsZShHKzE8USl7bGV0IEI9RytRPj4+MTtpZihDLnBvaW50c1tCXS5hcmM8PVgpRz1CO2Vsc2UgUT1CfWxldCAkPUMucG9pbnRzW0ddLFk9Qy5wb2ludHNbUV0sXz1ZLmFyYy0kLmFyYyxWPV89PT0wPzA6KFgtJC5hcmMpL187cmV0dXJue3g6JC54KyhZLngtJC54KSpWLHo6JC56KyhZLnotJC56KSpWLHk6JC55KyhZLnktJC55KSpWLGFyYzpYLGxhdDokLmxhdCsoWS5sYXQtJC5sYXQpKlYsbG5nOiQubG5nKyhZLmxuZy0kLmxuZykqVn19ZnVuY3Rpb24gQTUoQyl7c3dpdGNoKEMpe2Nhc2Uid2FsayI6cmV0dXJuIDEuNDtjYXNlInJ1biI6cmV0dXJuIDM7Y2FzZSJjeWNsZSI6cmV0dXJuIDUuNTtjYXNlImRyaXZlIjpyZXR1cm4gMTMuNH19dmFyIHY5PVt7bGF0OjM3LjMzMjcyLGxuZzotMTIyLjAwODMzLGFsdDo0OX0se2xhdDozNy4zMzMwOSxsbmc6LTEyMi4wMDczNSxhbHQ6NDh9LHtsYXQ6MzcuMzMzNzMsbG5nOi0xMjIuMDA2NjMsYWx0OjQ5fSx7bGF0OjM3LjMzNDU0LGxuZzotMTIyLjAwNjI3LGFsdDo0OX0se2xhdDozNy4zMzU0LGxuZzotMTIyLjAwNjMzLGFsdDo0OX0se2xhdDozNy4zMzYxOCxsbmc6LTEyMi4wMDY3OSxhbHQ6NDV9LHtsYXQ6MzcuMzM2NzUsbG5nOi0xMjIuMDA3NTksYWx0OjQ1fSx7bGF0OjM3LjMzNzA0LGxuZzotMTIyLjAwODYxLGFsdDo0Nn0se2xhdDozNy4zMzY5OCxsbmc6LTEyMi4wMDk2OSxhbHQ6NDh9LHtsYXQ6MzcuMzM2NjIsbG5nOi0xMjIuMDEwNjYsYWx0OjQ4fSx7bGF0OjM3LjMzNTk4LGxuZzotMTIyLjAxMTM4LGFsdDo0OX0se2xhdDozNy4zMzUxNyxsbmc6LTEyMi4wMTE3NCxhbHQ6NTB9LHtsYXQ6MzcuMzM0MzEsbG5nOi0xMjIuMDExNjksYWx0OjUwfSx7bGF0OjM3LjMzMzU0LGxuZzotMTIyLjAxMTIyLGFsdDo1MH0se2xhdDozNy4zMzI5Nixsbmc6LTEyMi4wMTA0MixhbHQ6NTF9LHtsYXQ6MzcuMzMyNjgsbG5nOi0xMjIuMDA5NCxhbHQ6NTB9XSxtOT1be2xhdDozNy44MzIxMixsbmc6LTEyMi40ODA2NSxhbHQ6MzB9LHtsYXQ6MzcuODI5MzcsbG5nOi0xMjIuNDc5NzQsYWx0OjMwfSx7bGF0OjM3LjgyNjQ5LGxuZzotMTIyLjQ3OTQsYWx0OjMwfSx7bGF0OjM3LjgyMzYyLGxuZzotMTIyLjQ3OTA3LGFsdDo0NX0se2xhdDozNy44MjA3NCxsbmc6LTEyMi40Nzg3MyxhbHQ6NTl9LHtsYXQ6MzcuODE3ODYsbG5nOi0xMjIuNDc4MzksYWx0OjY2fSx7bGF0OjM3LjgxNDk4LGxuZzotMTIyLjQ3ODA2LGFsdDo2Nn0se2xhdDozNy44MTIxMSxsbmc6LTEyMi40Nzc3MixhbHQ6NTh9LHtsYXQ6MzcuODA5MjMsbG5nOi0xMjIuNDc3MzQsYWx0OjQ0fSx7bGF0OjM3LjgwOTQ5LGxuZzotMTIyLjQ3NzMsYWx0OjQ1fSx7bGF0OjM3LjgxMjM2LGxuZzotMTIyLjQ3NzY1LGFsdDo1OX0se2xhdDozNy44MTUyNCxsbmc6LTEyMi40Nzc5OCxhbHQ6NjZ9LHtsYXQ6MzcuODE4MTIsbG5nOi0xMjIuNDc4MzIsYWx0OjY2fSx7bGF0OjM3LjgyMSxsbmc6LTEyMi40Nzg2NixhbHQ6NTh9LHtsYXQ6MzcuODIzODcsbG5nOi0xMjIuNDc5LGFsdDo0NH0se2xhdDozNy44MjY3NSxsbmc6LTEyMi40NzkzMyxhbHQ6MzB9LHtsYXQ6MzcuODI5NjMsbG5nOi0xMjIuNDc5NjcsYWx0OjMwfSx7bGF0OjM3LjgzMjMzLGxuZzotMTIyLjQ4MDcyLGFsdDozMH1dLGc5PVt7bGF0OjM3Ljg4NjY0LGxuZzotMTIyLjYyNTk5LGFsdDoxMjF9LHtsYXQ6MzcuODg4ODcsbG5nOi0xMjIuNjIzMzIsYWx0OjEzNX0se2xhdDozNy44OTExNSxsbmc6LTEyMi42MjE2LGFsdDoxNjR9LHtsYXQ6MzcuODkzNTMsbG5nOi0xMjIuNjE5MjEsYWx0OjE4MH0se2xhdDozNy44OTQ2Nixsbmc6LTEyMi42MTU3NyxhbHQ6MjIwfSx7bGF0OjM3Ljg5NjMxLGxuZzotMTIyLjYxMjY4LGFsdDoyNzN9LHtsYXQ6MzcuODk5MTcsbG5nOi0xMjIuNjEwOTgsYWx0OjMxM30se2xhdDozNy45MDE2Nixsbmc6LTEyMi42MDg1NSxhbHQ6MzQyfSx7bGF0OjM3LjkwMTk5LGxuZzotMTIyLjYwNjAxLGFsdDo0MDh9LHtsYXQ6MzcuOTAzMzksbG5nOi0xMjIuNjA0MDEsYWx0OjQ1MH0se2xhdDozNy45MDY2Mixsbmc6LTEyMi42MDI5MSxhbHQ6NDQwfSx7bGF0OjM3LjkwOTcxLGxuZzotMTIyLjYwMTczLGFsdDo0MzJ9LHtsYXQ6MzcuOTEyMTMsbG5nOi0xMjIuNjAwMDcsYWx0OjQzNn0se2xhdDozNy45MTQzOSxsbmc6LTEyMi41OTc4LGFsdDo0MTB9LHtsYXQ6MzcuOTEyODUsbG5nOi0xMjIuNTk1MDQsYWx0OjQyMn0se2xhdDozNy45MTI3NCxsbmc6LTEyMi41OTIwMixhbHQ6NDI1fSx7bGF0OjM3LjkxNSxsbmc6LTEyMi41OTAzMixhbHQ6NDEyfSx7bGF0OjM3LjkxNjM3LGxuZzotMTIyLjU4OTAzLGFsdDo0MDZ9LHtsYXQ6MzcuOTE0ODEsbG5nOi0xMjIuNTg1OTUsYWx0OjM4Mn0se2xhdDozNy45MTc0LGxuZzotMTIyLjU4Mzk4LGFsdDozNzJ9LHtsYXQ6MzcuOTE2NDIsbG5nOi0xMjIuNTgyMzYsYWx0OjM1Mn0se2xhdDozNy45MTQ4MSxsbmc6LTEyMi41ODAxMSxhbHQ6MzQyfV0seDk9W3tsYXQ6NDAuNzgyMTYsbG5nOi03My45NjI1NCxhbHQ6Mzd9LHtsYXQ6NDAuNzgyMjEsbG5nOi03My45NjA5OCxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjgsbG5nOi03My45NjAxLGFsdDozNn0se2xhdDo0MC43ODQ0LGxuZzotNzMuOTU5MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg1NSxsbmc6LTczLjk1ODQ4LGFsdDozNn0se2xhdDo0MC43ODY2NCxsbmc6LTczLjk1Nzc0LGFsdDozNn0se2xhdDo0MC43ODc5LGxuZzotNzMuOTU3NjQsYWx0OjM2fSx7bGF0OjQwLjc4ODk4LGxuZzotNzMuOTU3OTIsYWx0OjM2fSx7bGF0OjQwLjc4ODY4LGxuZzotNzMuOTU5NTEsYWx0OjM3fSx7bGF0OjQwLjc4ODk3LGxuZzotNzMuOTYxMTIsYWx0OjM2fSx7bGF0OjQwLjc4ODMzLGxuZzotNzMuOTYyNSxhbHQ6Mzd9LHtsYXQ6NDAuNzg4MjgsbG5nOi03My45NjQxNixhbHQ6Mzd9LHtsYXQ6NDAuNzg4MDUsbG5nOi03My45NjU3MyxhbHQ6MzZ9LHtsYXQ6NDAuNzg2OTEsbG5nOi03My45NjYzNixhbHQ6MzZ9LHtsYXQ6NDAuNzg1NjYsbG5nOi03My45NjY2NSxhbHQ6MzZ9LHtsYXQ6NDAuNzg0NTgsbG5nOi03My45NjYwOCxhbHQ6MzZ9LHtsYXQ6NDAuNzg0MDIsbG5nOi03My45NjQ1OSxhbHQ6MzZ9LHtsYXQ6NDAuNzgzMjIsbG5nOi03My45NjMzNCxhbHQ6Mzd9XSxmOT1be2xhdDozNy41OTY1OSxsbmc6LTEyMi41MDMxNixhbHQ6NH0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTIxMixsbmc6LTEyMi41MDUwOCxhbHQ6MjB9LHtsYXQ6MzcuNTkxLGxuZzotMTIyLjUwNDEzLGFsdDoyOX0se2xhdDozNy41ODk3NCxsbmc6LTEyMi41MDQxNixhbHQ6NDB9LHtsYXQ6MzcuNTg4Nyxsbmc6LTEyMi41MDUyNCxhbHQ6NTF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4NjI3LGxuZzotMTIyLjUwNDIyLGFsdDo3MX0se2xhdDozNy41ODUzOSxsbmc6LTEyMi41MDUzNCxhbHQ6ODJ9LHtsYXQ6MzcuNTg1MDUsbG5nOi0xMjIuNTA2OTgsYWx0OjkzfSx7bGF0OjM3LjU4NTM5LGxuZzotMTIyLjUwNTM0LGFsdDo4Mn0se2xhdDozNy41ODYyNyxsbmc6LTEyMi41MDQyMixhbHQ6NzF9LHtsYXQ6MzcuNTg3NDUsbG5nOi0xMjIuNTA0OTYsYWx0OjYwfSx7bGF0OjM3LjU4ODcsbG5nOi0xMjIuNTA1MjQsYWx0OjUxfSx7bGF0OjM3LjU4OTc0LGxuZzotMTIyLjUwNDE2LGFsdDo0MH0se2xhdDozNy41OTEsbG5nOi0xMjIuNTA0MTMsYWx0OjI5fSx7bGF0OjM3LjU5MjEyLGxuZzotMTIyLjUwNTA4LGFsdDoyMH0se2xhdDozNy41OTMyOSxsbmc6LTEyMi41MDU4OCxhbHQ6OX0se2xhdDozNy41OTQ1Mixsbmc6LTEyMi41MDUzNCxhbHQ6NX0se2xhdDozNy41OTU1NSxsbmc6LTEyMi41MDQyNCxhbHQ6NH1dLGkxPVt7aWQ6ImFwcGxlLXBhcmstbG9vcCIsbmFtZToiQXBwbGUgUGFyayBMb29wIixkZXNjcmlwdGlvbjoiQ3VwZXJ0aW5vIOKAoiBmbGF0IHJpbmcgcm9hZCIsbW9kZToid2FsayIsd2F5cG9pbnRzOnY5LGxvb3A6ITB9LHtpZDoiZ29sZGVuLWdhdGUiLG5hbWU6IkdvbGRlbiBHYXRlIENyb3NzaW5nIixkZXNjcmlwdGlvbjoiU2FuIEZyYW5jaXNjbyDigKIgYnJpZGdlIHJvdW5kLXRyaXAiLG1vZGU6InJ1biIsd2F5cG9pbnRzOm05LGxvb3A6ITB9LHtpZDoidGFtLXJpZGdlIixuYW1lOiJNdC4gVGFtIFJpZGdlIixkZXNjcmlwdGlvbjoiU3RpbnNvbiBCZWFjaCDigKIgU3RlZXAgUmF2aW5lICsgTWF0dCBEYXZpcyBsb29wIixtb2RlOiJ3YWxrIix3YXlwb2ludHM6ZzksbG9vcDohMH0se2lkOiJjZW50cmFsLXBhcmsiLG5hbWU6IlJlc2Vydm9pciBMb29wIixkZXNjcmlwdGlvbjoiQ2VudHJhbCBQYXJrIOKAoiAyLjUga20iLG1vZGU6InJ1biIsd2F5cG9pbnRzOng5LGxvb3A6ITB9LHtpZDoicGNoLXBhY2lmaWNhIixuYW1lOiJQYWNpZmljIENvYXN0IEh3eSIsZGVzY3JpcHRpb246IlBhY2lmaWNhIOKAoiBEZXZpbCdzIFNsaWRlIHJvdW5kLXRyaXAiLG1vZGU6ImRyaXZlIix3YXlwb2ludHM6ZjksbG9vcDohMH1dO2Z1bmN0aW9uIGEyKHtvcGVuOkN9KXtyZXR1cm4gcSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6ImxlbS1jaGV2cm9uIixzdHlsZTp7dHJhbnNpdGlvbjoidHJhbnNmb3JtIDAuMTVzLCBjb2xvciAwLjEycyIsdHJhbnNmb3JtOkM/InJvdGF0ZSgxODBkZWcpIjoicm90YXRlKDBkZWcpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIn0sY2hpbGRyZW46cSgicG9seWxpbmUiLHtwb2ludHM6IjYgOSAxMiAxNSAxOCA5In0pfSl9ZnVuY3Rpb24gbzIoe2RpcjpDfSl7cmV0dXJuIHEoInN2ZyIse3dpZHRoOiI5IixoZWlnaHQ6IjkiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixzdHlsZTp7bWFyZ2luUmlnaHQ6M30sY2hpbGRyZW46Qz09PSJ1cCI/cSgicG9seWdvbiIse3BvaW50czoiMTIsNCAyMCwxOCA0LDE4In0pOnEoInBvbHlnb24iLHtwb2ludHM6IjQsNiAyMCw2IDEyLDIwIn0pfSl9ZnVuY3Rpb24gSTUoKXtyZXR1cm4gcSgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46cSgicG9seWdvbiIse3BvaW50czoiNiw0IDIwLDEyIDYsMjAifSl9KX1mdW5jdGlvbiBUNSgpe3JldHVybiBxKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoiY3VycmVudENvbG9yIixjaGlsZHJlbjpbcSgicmVjdCIse3g6IjYiLHk6IjQiLHdpZHRoOiI0IixoZWlnaHQ6IjE2In0pLHEoInJlY3QiLHt4OiIxNCIseToiNCIsd2lkdGg6IjQiLGhlaWdodDoiMTYifSldfSl9ZnVuY3Rpb24gRTUoKXtyZXR1cm4gcSgic3ZnIix7d2lkdGg6IjEwIixoZWlnaHQ6IjEwIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6ImN1cnJlbnRDb2xvciIsY2hpbGRyZW46cSgicmVjdCIse3g6IjUiLHk6IjUiLHdpZHRoOiIxNCIsaGVpZ2h0OiIxNCIscng6IjEuNSJ9KX0pfWZ1bmN0aW9uIHc1KCl7cmV0dXJuIHEoInN2ZyIse3dpZHRoOiIxMiIsaGVpZ2h0OiIxMiIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLCJhcmlhLWhpZGRlbiI6InRydWUiLGNoaWxkcmVuOltxKCJwYXRoIix7ZDoiTTEyIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAxMiAxOHoifSkscSgicGF0aCIse2Q6Ik0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiJ9KV19KX1mdW5jdGlvbiBTNSgpe3JldHVybiBxKCJzdmciLHt3aWR0aDoiOSIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNCAyIDkgMTMiLGZpbGw6ImN1cnJlbnRDb2xvciIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpxKCJwYXRoIix7ZDoiTTYuMDA4NTIgMTQuODA1NEM1Ljg5MTgxIDE0LjkzNSA1Ljc1ODE1IDE0Ljk5OTggNS42MDc1NiAxNC45OTk4QzUuNDU2OTYgMTUuMDAzMyA1LjMyMzMgMTQuOTYxMyA1LjIwNjU5IDE0Ljg3MzdDNS4wOTM2NCAxNC43ODYxIDUuMDI1ODcgMTQuNjcyMyA1LjAwMzI4IDE0LjUzMjJDNC45ODQ0NiAxNC4zOTIxIDUuMDQ2NTggMTQuMjQ1IDUuMTg5NjUgMTQuMDkwOUw2Ljk0NTk5IDEyLjE1MjJMNy4yNDUzIDEwLjg3NTVMOC4xOTk3MSAxMS45ODkzTDguMDU4NTMgMTIuMzkzOUM4LjAyMDg4IDEyLjQ5NTUgNy45ODY5OSAxMi41NzA4IDcuOTU2ODcgMTIuNjE5OEM3LjkzMDUyIDEyLjY2ODggNy44NzQwNCAxMi43NDA2IDcuNzg3NDUgMTIuODM1Mkw2LjAwODUyIDE0LjgwNTRaTTEwLjM0NTcgMTQuNjQyNUw5LjEwMzI5IDEyLjMwNDZDOS4wNzY5NCAxMi4yNjI1IDkuMDU0MzUgMTIuMjIyMyA5LjAzNTUzIDEyLjE4MzdDOS4wMTY3IDEyLjE0NTIgOC45NzcxNyAxMi4wOTA5IDguOTE2OTMgMTIuMDIwOUw3LjcxOTY4IDEwLjYxODFDNy40OTM3OSAxMC4zNTU0IDcuMzM3NTQgMTAuMTI5NSA3LjI1MDk1IDkuOTQwMzRDNy4xNjQzNSA5Ljc0NzcgNy4xMzQyNCA5LjQ5OTAxIDcuMTYwNTkgOS4xOTQyOUw3LjI2MjI0IDcuOTgwNjVDNy4yNjk3NyA3LjkwNzEgNy4yMzIxMiA3Ljg1NDU2IDcuMTQ5MjkgNy44MjMwNEM3LjA2NjQ3IDcuNzkxNTEgNi45ODU1MiA3LjgwOTAzIDYuOTA2NDYgNy44NzU1N0w2LjQ3MTYxIDguMjQzMzRMNi4zNDE3MiA5LjY3MjM5QzYuMzIyODkgOS44NDc1MiA2LjI2NDU0IDkuOTc4ODcgNi4xNjY2NSAxMC4wNjY0QzYuMDY4NzYgMTAuMTU0IDUuOTM4ODcgMTAuMTkyNSA1Ljc3Njk4IDEwLjE4MkM1LjYxMTMyIDEwLjE3NSA1LjQ4MzMxIDEwLjExOSA1LjM5Mjk1IDEwLjAxMzlDNS4zMDYzNiA5LjkwODgyIDUuMjY4NzEgOS43NzM5NyA1LjI4MDAxIDkuNjA5MzVMNS4zODczMSA4LjMwNjM5QzUuNDAyMzcgOC4xMjc3NiA1LjQzODEzIDcuOTc1NCA1LjQ5NDYxIDcuODQ5MzFDNS41NTQ4NSA3LjcyMzIxIDUuNjYwMjYgNy41OTE4NyA1LjgxMDg2IDcuNDU1MjdMNi43MTQ0NSA2LjYyNTE2QzcuMDA0MzUgNi4zNjI0NyA3LjI2OTc3IDYuMTYxMDcgNy41MTA3MyA2LjAyMDk2QzcuNzUxNjggNS44NzczNiA4LjAyODQxIDUuODA1NTYgOC4zNDA5IDUuODA1NTZDOC43NTg4IDUuODA1NTYgOS4wNzg4MiA1LjkzMzQgOS4zMDA5NSA2LjE4OTA5QzkuNTI2ODUgNi40NDQ3OCA5LjYyNDc0IDYuNzYxNzYgOS41OTQ2MiA3LjE0MDA0TDkuNDc2MDIgOC43MzE5NUM5LjQ1MzQzIDkuMDE1NjYgOS40MTk1NSA5LjI2MjU5IDkuMzc0MzcgOS40NzI3NUM5LjMyOTE5IDkuNjgyOSA5LjI1Mzg5IDkuOTI5ODMgOS4xNDg0NyAxMC4yMTM1TDkuMDkyIDEwLjM2MDZMOS44NjU2OSAxMS4zNzk5QzkuOTIyMTcgMTEuNDUzNCA5Ljk4MDUyIDExLjUzNCAxMC4wNDA4IDExLjYyMTZDMTAuMTAxIDExLjcwOTEgMTAuMTUzNyAxMS43OTY3IDEwLjE5ODkgMTEuODg0M0wxMS40MDc0IDE0LjE2NDRDMTEuNTA1MyAxNC4zNTAxIDExLjUyNDEgMTQuNTExMiAxMS40NjM5IDE0LjY0NzhDMTEuNDAzNyAxNC43ODQ0IDExLjMwMiAxNC44ODI1IDExLjE1ODkgMTQuOTQyQzExLjAxOTYgMTUuMDAxNSAxMC44NzA5IDE1LjAxMDMgMTAuNzEyOCAxNC45NjgzQzEwLjU1ODQgMTQuOTI2MiAxMC40MzYxIDE0LjgxNzcgMTAuMzQ1NyAxNC42NDI1Wk0xMi40MDcgNy45NjQ4OUMxMi41ODQgNy45NjQ4OSAxMi43MjcgOC4wMTA0MiAxMi44MzYyIDguMTAxNDlDMTIuOTQ1NCA4LjE4OTA1IDEzIDguMzA2MzkgMTMgOC40NTM1QzEzIDguNjExMTEgMTIuOTQ1NCA4LjczMzcgMTIuODM2MiA4LjgyMTI3QzEyLjczMDggOC45MDg4MyAxMi41ODc3IDguOTUyNjEgMTIuNDA3IDguOTUyNjFIMTEuMTMwN0MxMC45NTM4IDguOTUyNjEgMTAuODE0NSA4LjkzNjg1IDEwLjcxMjggOC45MDUzM0MxMC42MTEyIDguODcwMyAxMC41MTMzIDguODA3MjYgMTAuNDE5MSA4LjcxNjE5TDEwLjA1MjEgOC4zNzk5NEwxMC4xNDI0IDcuMDQwMjFMMTEuMDM0NyA3Ljk2NDg5SDEyLjQwN1pNOS4wMDE2NCA1LjMxMTY5QzguNzcxOTggNS4zMTE2OSA4LjU2MzAzIDUuMjYwOTEgOC4zNzQ3OCA1LjE1OTMzQzguMTg2NTMgNS4wNTQyNiA4LjAzNTk0IDQuOTE0MTUgNy45MjI5OSA0LjczOTAzQzcuODEzODEgNC41NjM5IDcuNzU5MjEgNC4zNjk1IDcuNzU5MjEgNC4xNTU4NUM3Ljc1OTIxIDMuOTQyMTkgNy44MTM4MSAzLjc0NzggNy45MjI5OSAzLjU3MjY3QzguMDM1OTQgMy4zOTc1NCA4LjE4NjUzIDMuMjU5MTkgOC4zNzQ3OCAzLjE1NzYyQzguNTYzMDMgMy4wNTI1NCA4Ljc3MTk4IDMgOS4wMDE2NCAzQzkuMjMxMyAzIDkuNDQwMjYgMy4wNTI1NCA5LjYyODUgMy4xNTc2MkM5LjgxNjc1IDMuMjU5MTkgOS45NjU0NiAzLjM5NzU0IDEwLjA3NDYgMy41NzI2N0MxMC4xODc2IDMuNzQ3OCAxMC4yNDQxIDMuOTQyMTkgMTAuMjQ0MSA0LjE1NTg1QzEwLjI0NDEgNC4zNjk1IDEwLjE4NzYgNC41NjM5IDEwLjA3NDYgNC43MzkwM0M5Ljk2NTQ2IDQuOTE0MTUgOS44MTY3NSA1LjA1NDI2IDkuNjI4NSA1LjE1OTMzQzkuNDQwMjYgNS4yNjA5MSA5LjIzMTMgNS4zMTE2OSA5LjAwMTY0IDUuMzExNjlaIn0pfSl9ZnVuY3Rpb24gYjUoKXtyZXR1cm4gcSgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjE0Iix2aWV3Qm94OiIyNiAxIDEyIDE0IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46cSgicGF0aCIse2Q6Ik0zMy4yNDM3IDQuNTg0NTlDMzMuMDAwOCA0LjU4NDU5IDMyLjc4MTcgNC41MjcyOCAzMi41ODY2IDQuNDEyNjhDMzIuMzkxNSA0LjI5NDEyIDMyLjIzNDIgNC4xMzgwMSAzMi4xMTQ3IDMuOTQ0MzdDMzEuOTk5MiAzLjc0Njc3IDMxLjk0MTQgMy41Mjk0MSAzMS45NDE0IDMuMjkyMjlDMzEuOTQxNCAzLjA1MTIyIDMxLjk5OTIgMi44MzM4NyAzMi4xMTQ3IDIuNjQwMjJDMzIuMjM0MiAyLjQ0NjU3IDMyLjM5MTUgMi4yOTI0NSAzMi41ODY2IDIuMTc3ODRDMzIuNzgxNyAyLjA1OTI4IDMzLjAwMDggMiAzMy4yNDM3IDJDMzMuNDgyNiAyIDMzLjY5OTcgMi4wNTkyOCAzMy44OTQ4IDIuMTc3ODRDMzQuMDkzOSAyLjI5MjQ1IDM0LjI1MTIgMi40NDY1NyAzNC4zNjY3IDIuNjQwMjJDMzQuNDg2MiAyLjgzMzg3IDM0LjU0NTkgMy4wNTEyMiAzNC41NDU5IDMuMjkyMjlDMzQuNTQ1OSAzLjUyOTQxIDM0LjQ4NjIgMy43NDY3NyAzNC4zNjY3IDMuOTQ0MzdDMzQuMjUxMiA0LjEzODAxIDM0LjA5MzkgNC4yOTQxMiAzMy44OTQ4IDQuNDEyNjhDMzMuNjk5NyA0LjUyNzI4IDMzLjQ4MjYgNC41ODQ1OSAzMy4yNDM3IDQuNTg0NTlaTTMxLjIwMDcgOS43NDE5MUMzMS4wNzMzIDkuNjcwNzcgMzAuOTQxOSA5LjU5NTY4IDMwLjgwNjUgOS41MTY2NEMzMC42NzUgOS40Mzc2IDMwLjU1OTYgOS4zNDI3NiAzMC40NiA5LjIzMjFDMzAuMzYwNCA5LjExNzQ5IDMwLjI5MjcgOC45NzcyIDMwLjI1NjkgOC44MTEyMkMzMC4yMjUgOC42NDEyOCAzMC4yNDQ5IDguNDI5ODUgMzAuMzE2NiA4LjE3NjkzTDMwLjgwNjUgNi40ODE1M0MzMC44MzgzIDYuMzY2OTIgMzAuODE4NCA2LjI3OTk4IDMwLjc0NjcgNi4yMjA3QzMwLjY3OSA2LjE1NzQ3IDMwLjU5NzQgNi4xMjk4MSAzMC41MDE4IDYuMTM3NzFMMjkuNjU5NSA2LjE5Njk5TDI5LjQwMjcgNy45MjIwMkMyOS4zNzg4IDguMTA3NzcgMjkuMzE1MSA4LjI0NjA5IDI5LjIxMTUgOC4zMzY5OEMyOS4xMDggOC40Mjc4OCAyOC45NzI2IDguNDY1NDIgMjguODA1MyA4LjQ0OTYxQzI4LjY0MiA4LjQzMzggMjguNTE4NiA4LjM2NjYyIDI4LjQzNDkgOC4yNDgwNkMyOC4zNTEzIDguMTI5NSAyOC4zMjE0IDcuOTc3MzUgMjguMzQ1MyA3Ljc5MTYxTDI4LjYyNjEgNS42ODEyNkMyOC42NSA1LjUxMTMyIDI4LjcxNTcgNS4zNzQ5OCAyOC44MjMyIDUuMjcyMjNDMjguOTMwOCA1LjE2OTQ4IDI5LjA2ODEgNS4xMTIxNyAyOS4yMzU0IDUuMTAwMzJMMzEuMzMyMSA0Ljk1MjEyQzMxLjg4MTcgNC45MTI2IDMyLjMzNTcgNC45Njk5IDMyLjY5NDEgNS4xMjQwM0MzMy4wNTI1IDUuMjc4MTYgMzMuMzY3MSA1LjUzODk5IDMzLjYzNzkgNS45MDY1MkwzNC42NzE0IDcuMzIzM0wzNi4xNzA4IDYuNjY1M0MzNi4zMzggNi41OTAyMSAzNi40ODkzIDYuNTc0NCAzNi42MjQ4IDYuNjE3ODdDMzYuNzYwMiA2LjY1NzM5IDM2Ljg2NTcgNi43NTIyNCAzNi45NDE0IDYuOTAyNDJDMzcuMDEzIDcuMDUyNTkgMzcuMDE5IDcuMTk0ODYgMzYuOTU5MyA3LjMyOTIzQzM2LjkwMzUgNy40NjM2IDM2Ljc5MiA3LjU2ODMyIDM2LjYyNDggNy42NDM0MUwzNC43MzExIDguNDc5MjVDMzQuNjAzNyA4LjUzODUzIDM0LjQ3NDMgOC41NTAzOSAzNC4zNDI4IDguNTE0ODJDMzQuMjE1NCA4LjQ3NTMgMzQuMTEzOCA4LjQwMDIxIDM0LjAzODIgOC4yODk1NkwzMy4zODExIDcuMzM1MTZDMzMuMzEzNCA3LjI0MDMxIDMzLjIyOTggNy4xOTg4MSAzMy4xMzAyIDcuMjEwNjdDMzMuMDMwNiA3LjIyMjUzIDMyLjk2NDkgNy4yODM3OCAzMi45MzMxIDcuMzk0NDRMMzIuNDkxIDguOTI5NzhMMzQuNzMxMSAxMC4zODgxQzM0Ljg0MjYgMTAuNDU5MiAzNC45MjIzIDEwLjU1NiAzNC45NzAxIDEwLjY3ODVDMzUuMDE3OSAxMC44MDEgMzUuMDI5OCAxMC45MjU1IDM1LjAwNTkgMTEuMDUyQzM0Ljk4NiAxMS4xNzQ1IDM0LjkyODIgMTEuMjc1MyAzNC44MzI3IDExLjM1NDNMMzIuNzcxOCAxMy4wOTcxQzMyLjYwODUgMTMuMjM1NCAzMi40NDUyIDEzLjI5ODcgMzIuMjgxOSAxMy4yODY4QzMyLjEyMjYgMTMuMjc1IDMxLjk5MzIgMTMuMjEzNyAzMS44OTM3IDEzLjEwMzFDMzEuNzk4MSAxMi45OTY0IDMxLjc1NDMgMTIuODY1OSAzMS43NjIyIDEyLjcxMThDMzEuNzcwMiAxMi41NTM3IDMxLjg1MzggMTIuNDA3NSAzMi4wMTMxIDEyLjI3MzFMMzMuNDg4NiAxMS4wMTY0TDMxLjIwMDcgOS43NDE5MVpNMjcuMjA0NCAxNC44NjM3QzI3LjA4NDkgMTQuNzU3IDI3LjAxNzIgMTQuNjE4NiAyNy4wMDEzIDE0LjQ0ODdDMjYuOTg5MyAxNC4yNzg4IDI3LjA2MSAxNC4xMTY3IDI3LjIxNjMgMTMuOTYyNkwyOS4yMjM1IDExLjk3NjdMMjkuOTM0MyA5LjQ4MTA4QzMwLjA0MTggOS42MTU0NCAzMC4xNzUzIDkuNzQ1ODYgMzAuMzM0NSA5Ljg3MjMyQzMwLjQ5NzggOS45OTQ4MyAzMC42OTMgMTAuMTE3MyAzMC45MiAxMC4yMzk5TDMxLjExNzEgMTAuMzQ2NkwzMC4zMDQ3IDEyLjQzMzJDMzAuMjUyOSAxMi41NTU3IDMwLjIwOTEgMTIuNjQwNyAzMC4xNzMzIDEyLjY4ODFDMzAuMTQxNCAxMi43MzU1IDMwLjA4NTYgMTIuNzk4OCAzMC4wMDYgMTIuODc3OEwyOC4wNzA2IDE0Ljc4MDdDMjcuOTE5MiAxNC45MjY5IDI3Ljc2MzkgMTUgMjcuNjA0NiAxNUMyNy40NDkzIDE1IDI3LjMxNTkgMTQuOTU0NiAyNy4yMDQ0IDE0Ljg2MzdaIn0pfSl9ZnVuY3Rpb24gUjUoKXtyZXR1cm4gcSgic3ZnIix7d2lkdGg6IjE0IixoZWlnaHQ6IjE0Iix2aWV3Qm94OiI0OSAzIDE2IDEyIixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46cSgicGF0aCIse2Q6Ik01Ny4wMDI4IDExLjk0OUM1Ni44NDggMTEuOTQ5IDU2LjcxNzIgMTEuODk4NyA1Ni42MTAzIDExLjc5OEM1Ni41MDM1IDExLjY5MzkgNTYuNDUwMSAxMS41NzA3IDU2LjQ1MDEgMTEuNDI4NFY5LjAyODYzTDU0LjQyMTYgNy4xMDc3NkM1NC4yMjI3IDYuOTIwMzUgNTQuMDk1NSA2LjY5ODI1IDU0LjA0MDMgNi40NDE0NEM1My45ODUgNi4xODExNiA1NC4wMTA4IDUuOTI3ODIgNTQuMTE3NiA1LjY4MTQyQzU0LjIyODIgNS40Mzg0OSA1NC4zOTc3IDUuMjQ0MTQgNTQuNjI2MSA1LjA5ODM5QzU0Ljg1ODMgNC45NDkxNiA1NS4xMTYyIDQuODc0NTQgNTUuMzk5OSA0Ljg3NDU0SDU4LjExMzdDNTguNDIzMiA0Ljg3NDU0IDU4LjY4NDggNC45NzY5MiA1OC44OTg1IDUuMTgxNjhDNTkuMTE1OSA1LjM4Mjk2IDU5LjIyNDYgNS42MjkzNiA1OS4yMjQ2IDUuOTIwODdWNy43NjM2Nkg2MC44OTkzQzYxLjA1MDQgNy43NjM2NiA2MS4xNzk0IDcuODEzOTkgNjEuMjg2MiA3LjkxNDYzQzYxLjM5MzEgOC4wMTUyNyA2MS40NDY1IDguMTM4NDcgNjEuNDQ2NSA4LjI4NDIzQzYxLjQ0NjUgOC40MjY1MSA2MS4zOTMxIDguNTQ3OTggNjEuMjg2MiA4LjY0ODYyQzYxLjE3OTQgOC43NDkyNiA2MS4wNTA0IDguNzk5NTggNjAuODk5MyA4Ljc5OTU4SDU4LjY3MTlDNTguNTIwOSA4Ljc5OTU4IDU4LjM5MDEgOC43NDkyNiA1OC4yNzk1IDguNjQ4NjJDNTguMTcyNyA4LjU0Nzk4IDU4LjExOTIgOC40MjY1MSA1OC4xMTkyIDguMjg0MjNWNi45ODgwM0M1OC4xMTkyIDYuOTE4NjIgNTguMDk5IDYuODU0NDIgNTguMDU4NCA2Ljc5NTQyQzU4LjAxNzkgNi43MzI5NSA1Ny45NDQyIDYuNzAxNzIgNTcuODM3MyA2LjcwMTcySDU2LjA2MzJDNTUuOTkzMiA2LjcwMTcyIDU1Ljk0NTMgNi43Mjk0OCA1NS45MTk1IDYuNzg1MDFDNTUuODk3NCA2LjgzNzA2IDU1LjkwODQgNi44ODczOSA1NS45NTI2IDYuOTM1OTdMNTcuNDAwNyA4LjQ1NjAxQzU3LjUwMzkgOC41NjM2IDU3LjU1NTUgOC42ODE1OSA1Ny41NTU1IDguODA5OTlWMTEuNDI4NEM1Ny41NTU1IDExLjU3MDcgNTcuNTAwMiAxMS42OTM5IDU3LjM4OTcgMTEuNzk4QzU3LjI4MjggMTEuODk4NyA1Ny4xNTM4IDExLjk0OSA1Ny4wMDI4IDExLjk0OVpNNTMuMDAxMiAxNEM1Mi41ODQ4IDE0IDUyLjE5NDIgMTMuOTI3MSA1MS44Mjk1IDEzLjc4MTRDNTEuNDY4NCAxMy42MzU2IDUxLjE0OTYgMTMuNDMyNiA1MC44NzMzIDEzLjE3MjNDNTAuNjAwNiAxMi45MTIgNTAuMzg2OSAxMi42MTE4IDUwLjIzMjEgMTIuMjcxN0M1MC4wNzc0IDExLjkyODIgNTAgMTEuNTYwMyA1MCAxMS4xNjgxQzUwIDEwLjc3NiA1MC4wNzc0IDEwLjQwOTkgNTAuMjMyMSAxMC4wNjk4QzUwLjM4NjkgOS43MjYxOCA1MC42MDA2IDkuNDI0MjYgNTAuODczMyA5LjE2Mzk4QzUxLjE0OTYgOC45MDM3IDUxLjQ2ODQgOC43MDA2OCA1MS44Mjk1IDguNTU0OTJDNTIuMTk0MiA4LjQwOTE2IDUyLjU4NDggOC4zMzYyOCA1My4wMDEyIDguMzM2MjhDNTMuNDIxMiA4LjMzNjI4IDUzLjgxMTggOC40MDkxNiA1NC4xNzI5IDguNTU0OTJDNTQuNTM3NyA4LjcwMDY4IDU0Ljg1NjQgOC45MDM3IDU1LjEyOTEgOS4xNjM5OEM1NS40MDU0IDkuNDI0MjYgNTUuNjIxIDkuNzI2MTggNTUuNzc1OCAxMC4wNjk4QzU1LjkzMDUgMTAuNDA5OSA1Ni4wMDc5IDEwLjc3NiA1Ni4wMDc5IDExLjE2ODFDNTYuMDA3OSAxMS41NjAzIDU1LjkzMDUgMTEuOTI4MiA1NS43NzU4IDEyLjI3MTdDNTUuNjIxIDEyLjYxMTggNTUuNDA1NCAxMi45MTIgNTUuMTI5MSAxMy4xNzIzQzU0Ljg1NjQgMTMuNDMyNiA1NC41Mzc3IDEzLjYzNTYgNTQuMTcyOSAxMy43ODE0QzUzLjgxMTggMTMuOTI3MSA1My40MjEyIDE0IDUzLjAwMTIgMTRaTTUzLjAwMTIgMTMuMjY2QzUzLjQxMDIgMTMuMjY2IDUzLjc4MjMgMTMuMTcwNiA1NC4xMTc2IDEyLjk3OTdDNTQuNDU2NiAxMi43OTIzIDU0LjcyNTYgMTIuNTQwNyA1NC45MjQ2IDEyLjIyNDlDNTUuMTI3MyAxMS45MDU2IDU1LjIyODYgMTEuNTUzNCA1NS4yMjg2IDExLjE2ODFDNTUuMjI4NiAxMC43ODI5IDU1LjEyNzMgMTAuNDMyNCA1NC45MjQ2IDEwLjExNjZDNTQuNzI1NiA5Ljc5NzMzIDU0LjQ1NjYgOS41NDM5OSA1NC4xMTc2IDkuMzU2NTlDNTMuNzgyMyA5LjE2NTcxIDUzLjQxMDIgOS4wNzAyOCA1My4wMDEyIDkuMDcwMjhDNTIuNTk1OSA5LjA3MDI4IDUyLjIyMzcgOS4xNjU3MSA1MS44ODQ3IDkuMzU2NTlDNTEuNTQ5NCA5LjU0Mzk5IDUxLjI4MDQgOS43OTczMyA1MS4wNzc4IDEwLjExNjZDNTAuODc4OCAxMC40MzI0IDUwLjc3OTMgMTAuNzgyOSA1MC43NzkzIDExLjE2ODFDNTAuNzc5MyAxMS41NTM0IDUwLjg3ODggMTEuOTA1NiA1MS4wNzc4IDEyLjIyNDlDNTEuMjgwNCAxMi41NDA3IDUxLjU0OTQgMTIuNzkyMyA1MS44ODQ3IDEyLjk3OTdDNTIuMjIzNyAxMy4xNzA2IDUyLjU5NTkgMTMuMjY2IDUzLjAwMTIgMTMuMjY2Wk02Mi40ODAxIDkuNjExNjZDNjIuMzYyMiA5LjUxNDQ5IDYyLjMwMTQgOS40MTU1OCA2Mi4yOTc3IDkuMzE0OTRDNjIuMjk3NyA5LjIxMDgzIDYyLjMzMDggOS4xMjQwNyA2Mi4zOTcyIDkuMDU0NjZDNjIuNDY3MiA4Ljk4NTI1IDYyLjU1MzggOC45NDUzNCA2Mi42NTY5IDguOTM0OTNDNjIuNzYzOCA4LjkyMTA1IDYyLjg2ODggOC45NTU3NSA2Mi45NzIgOS4wMzkwNEM2My4yODg5IDkuMzAyNzkgNjMuNTM5NCA5LjYxNjg3IDYzLjcyMzYgOS45ODEyNkM2My45MDc5IDEwLjM0NTcgNjQgMTAuNzQxMyA2NCAxMS4xNjgxQzY0IDExLjU2MDMgNjMuOTIyNiAxMS45MjgyIDYzLjc2NzkgMTIuMjcxN0M2My42MTMxIDEyLjYxMTggNjMuMzk3NiAxMi45MTIgNjMuMTIxMiAxMy4xNzIzQzYyLjg0ODUgMTMuNDMyNiA2Mi41Mjk4IDEzLjYzNTYgNjIuMTY1IDEzLjc4MTRDNjEuODAzOSAxMy45MjcxIDYxLjQxNTIgMTQgNjAuOTk4OCAxNEM2MC41ODI0IDE0IDYwLjE5MTkgMTMuOTI3MSA1OS44MjcxIDEzLjc4MTRDNTkuNDYyMyAxMy42MzU2IDU5LjE0MTcgMTMuNDMyNiA1OC44NjU0IDEzLjE3MjNDNTguNTkyNyAxMi45MTIgNTguMzc5IDEyLjYxMTggNTguMjI0MiAxMi4yNzE3QzU4LjA2OTUgMTEuOTI4MiA1Ny45OTIxIDExLjU2MDMgNTcuOTkyMSAxMS4xNjgxQzU3Ljk5MjEgMTAuOTYzNCA1OC4wMTQyIDEwLjc2NTYgNTguMDU4NCAxMC41NzQ3QzU4LjEwNjMgMTAuMzgwNCA1OC4xNzI3IDEwLjE5MyA1OC4yNTc0IDEwLjAxMjVDNTguMzA5IDkuOTAxNDQgNTguMzgwOCA5LjgzMDMgNTguNDczIDkuNzk5MDZDNTguNTY4OCA5Ljc2NDM2IDU4LjY2MjcgOS43NjQzNiA1OC43NTQ4IDkuNzk5MDZDNTguODUwNiA5LjgzMDMgNTguOTIyNSA5Ljg5Mjc2IDU4Ljk3MDQgOS45ODY0N0M1OS4wMTgzIDEwLjA4MDIgNTkuMDEwOSAxMC4xOTgyIDU4Ljk0ODMgMTAuMzQwNEM1OC44MzA0IDEwLjYwMDcgNTguNzcxNCAxMC44NzY2IDU4Ljc3MTQgMTEuMTY4MUM1OC43NzE0IDExLjU1MzQgNTguODcwOSAxMS45MDU2IDU5LjA2OTkgMTIuMjI0OUM1OS4yNzI1IDEyLjU0MDcgNTkuNTQxNSAxMi43OTIzIDU5Ljg3NjggMTIuOTc5N0M2MC4yMTU4IDEzLjE3MDYgNjAuNTg5OCAxMy4yNjYgNjAuOTk4OCAxMy4yNjZDNjEuNDA3OCAxMy4yNjYgNjEuNzggMTMuMTcwNiA2Mi4xMTUzIDEyLjk3OTdDNjIuNDUwNiAxMi43OTIzIDYyLjcxNzcgMTIuNTQwNyA2Mi45MTY3IDEyLjIyNDlDNjMuMTE5NCAxMS45MDU2IDYzLjIyMDcgMTEuNTUzNCA2My4yMjA3IDExLjE2ODFDNjMuMjIwNyAxMC44NTkzIDYzLjE1MjUgMTAuNTcxMiA2My4wMTYyIDEwLjMwNEM2Mi44ODM1IDEwLjAzMzMgNjIuNzA0OCA5LjgwMjUzIDYyLjQ4MDEgOS42MTE2NlpNNjAuOTk4OCA2LjI3NDg2QzYwLjc3NCA2LjI3NDg2IDYwLjU2OTUgNi4yMjQ1NCA2MC4zODUzIDYuMTIzODlDNjAuMjAxMSA2LjAxOTc4IDYwLjA1MzcgNS44ODI3IDU5Ljk0MzIgNS43MTI2NUM1OS44MzYzIDUuNTM5MTMgNTkuNzgyOSA1LjM0NjUyIDU5Ljc4MjkgNS4xMzQ4M0M1OS43ODI5IDQuOTI2NiA1OS44MzYzIDQuNzM3NDYgNTkuOTQzMiA0LjU2NzQxQzYwLjA1MzcgNC4zOTM4OSA2MC4yMDExIDQuMjU2ODEgNjAuMzg1MyA0LjE1NjE3QzYwLjU2OTUgNC4wNTIwNiA2MC43NzQgNCA2MC45OTg4IDRDNjEuMjE5OSA0IDYxLjQyMDcgNC4wNTIwNiA2MS42MDEzIDQuMTU2MTdDNjEuNzgxOCA0LjI1NjgxIDYxLjkyNTUgNC4zOTM4OSA2Mi4wMzI0IDQuNTY3NDFDNjIuMTQyOSA0LjczNzQ2IDYyLjE5ODIgNC45MjY2IDYyLjE5ODIgNS4xMzQ4M0M2Mi4xOTgyIDUuMzQ2NTIgNjIuMTQyOSA1LjUzOTEzIDYyLjAzMjQgNS43MTI2NUM2MS45MjU1IDUuODgyNyA2MS43ODE4IDYuMDE5NzggNjEuNjAxMyA2LjEyMzg5QzYxLjQyMDcgNi4yMjQ1NCA2MS4yMTk5IDYuMjc0ODYgNjAuOTk4OCA2LjI3NDg2WiJ9KX0pfWZ1bmN0aW9uIHk1KCl7cmV0dXJuIHEoInN2ZyIse3dpZHRoOiIxNiIsaGVpZ2h0OiIxNCIsdmlld0JveDoiNzAgNSAxOCA5IixmaWxsOiJjdXJyZW50Q29sb3IiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46cSgicGF0aCIse2Q6Ik04NS41NzIgMTIuMTAzOEM4Ni4wNiAxMi4xMDM4IDg2LjQyMDcgMTEuOTg5MiA4Ni42NTQyIDExLjc2MDFDODYuODg0NyAxMS41MjgxIDg3IDExLjE2NDEgODcgMTAuNjY4MVYxMC4xMTEyQzg3IDkuNzY5MDEgODYuOTIwNyA5LjQ2MzAyIDg2Ljc2MiA5LjE5MzI5Qzg2LjYwMzMgOC45MjA2NSA4Ni4zNzU4IDguNjk3MzMgODYuMDc5NCA4LjUyMzMxQzg1Ljc4MDEgOC4zNDkyOSA4NS40MjIzIDguMjM3NjIgODUuMDA2MiA4LjE4ODMyTDgzLjAxNjggNy45NTMzOUw4MS4xOTgxIDYuODQ4MzVDODAuOTIyNyA2LjY4MDEzIDgwLjY2MDggNi41NDIzNyA4MC40MTIzIDYuNDM1MDVDODAuMTYwOCA2LjMyNDg0IDc5Ljg5NzQgNi4yMzc4MyA3OS42MjE5IDYuMTc0MDJDNzkuMzQ2NSA2LjExMDIxIDc5LjAzODIgNi4wNjUyNiA3OC42OTY5IDYuMDM5MTVDNzguMzUyNiA2LjAxMzA1IDc3Ljk1MTQgNiA3Ny40OTM0IDZINzYuODEwOEM3Ni4zODg3IDYgNzUuOTk1IDYuMDQ5MzEgNzUuNjI5OCA2LjE0NzkyQzc1LjI2MTYgNi4yNDM2MyA3NC45MTg4IDYuMzcxMjUgNzQuNjAxNSA2LjUzMDc2Qzc0LjI4MTEgNi42OTAyOCA3My45ODYyIDYuODY1NzYgNzMuNzE2OCA3LjA1NzE4QzczLjQ0NDQgNy4yNDg2IDczLjE5NTkgNy40MzcxMiA3Mi45NzE0IDcuNjIyNzVMNzIuMjU3NCA3Ljg1MzMzQzcxLjgzMjMgNy45ODY3NCA3MS41MTY0IDguMTgzOTcgNzEuMzA5OSA4LjQ0NUM3MS4xMDMzIDguNzAzMTMgNzEgOS4wMzM3NyA3MSA5LjQzNjkyVjEwLjY0MkM3MSAxMS4xNDY3IDcxLjExNTMgMTEuNTE2NSA3MS4zNDU4IDExLjc1MTRDNzEuNTc2MyAxMS45ODYzIDcxLjkzNyAxMi4xMDM4IDcyLjQyOCAxMi4xMDM4SDcyLjcxNTRDNzIuNzAwNCAxMi4wMzcxIDcyLjY4ODUgMTEuOTcwNCA3Mi42Nzk1IDExLjkwMzdDNzIuNjcwNSAxMS44MzQxIDcyLjY2NiAxMS43NjQ1IDcyLjY2NiAxMS42OTQ4QzcyLjY2NiAxMS4zNTU1IDcyLjc0OTggMTEuMDQ5NSA3Mi45MTc1IDEwLjc3NjlDNzMuMDg1MSAxMC41MDQyIDczLjMxMTIgMTAuMjg4MiA3My41OTU2IDEwLjEyODdDNzMuODc3IDkuOTY2MjMgNzQuMTkyOCA5Ljg4NTAyIDc0LjU0MzEgOS44ODUwMkM3NC44OTA0IDkuODg1MDIgNzUuMjA2MiA5Ljk2NjIzIDc1LjQ5MDYgMTAuMTI4N0M3NS43NzIgMTAuMjg4MiA3NS45OTY1IDEwLjUwNDIgNzYuMTY0MiAxMC43NzY5Qzc2LjMzMTggMTEuMDQ5NSA3Ni40MTU3IDExLjM1NTUgNzYuNDE1NyAxMS42OTQ4Qzc2LjQxNTcgMTEuNzY0NSA3Ni40MTEyIDExLjgzNDEgNzYuNDAyMiAxMS45MDM3Qzc2LjM5MzIgMTEuOTcwNCA3Ni4zODI3IDEyLjAzNzEgNzYuMzcwOCAxMi4xMDM4SDgxLjYzODJDODEuNjIwMyAxMi4wMzcxIDgxLjYwODMgMTEuOTcwNCA4MS42MDIzIDExLjkwMzdDODEuNTkzMyAxMS44MzQxIDgxLjU4ODggMTEuNzY0NSA4MS41ODg4IDExLjY5NDhDODEuNTg4OCAxMS4zNTU1IDgxLjY3MjcgMTEuMDQ5NSA4MS44NDAzIDEwLjc3NjlDODIuMDA1IDEwLjUwNDIgODIuMjI5NSAxMC4yODgyIDgyLjUxMzkgMTAuMTI4N0M4Mi43OTUzIDkuOTY2MjMgODMuMTExMSA5Ljg4NTAyIDgzLjQ2MTQgOS44ODUwMkM4My44MTE3IDkuODg1MDIgODQuMTI5IDkuOTY2MjMgODQuNDEzNCAxMC4xMjg3Qzg0LjY5NDggMTAuMjg4MiA4NC45MTk0IDEwLjUwNDIgODUuMDg3IDEwLjc3NjlDODUuMjUxNyAxMS4wNDk1IDg1LjMzNCAxMS4zNTU1IDg1LjMzNCAxMS42OTQ4Qzg1LjMzNCAxMS43NjQ1IDg1LjMzMSAxMS44MzQxIDg1LjMyNSAxMS45MDM3Qzg1LjMxNiAxMS45NzA0IDg1LjMwNDEgMTIuMDM3MSA4NS4yODkxIDEyLjEwMzhIODUuNTcyWk04My40NjE0IDEzQzgzLjcxMjkgMTMgODMuOTQwNCAxMi45NDIgODQuMTQ0IDEyLjgyNkM4NC4zNDc2IDEyLjcxIDg0LjUwOTIgMTIuNTUzMyA4NC42MjkgMTIuMzU2MUM4NC43NDg3IDEyLjE1ODkgODQuODA4NiAxMS45Mzg1IDg0LjgwODYgMTEuNjk0OEM4NC44MDg2IDExLjQ1MTIgODQuNzQ4NyAxMS4yMzA4IDg0LjYyOSAxMS4wMzM2Qzg0LjUwOTIgMTAuODM2MyA4NC4zNDc2IDEwLjY3OTcgODQuMTQ0IDEwLjU2MzdDODMuOTQwNCAxMC40NDc3IDgzLjcxMjkgMTAuMzg5NyA4My40NjE0IDEwLjM4OTdDODMuMjA2OSAxMC4zODk3IDgyLjk3NzkgMTAuNDQ3NyA4Mi43NzQzIDEwLjU2MzdDODIuNTcwOCAxMC42Nzk3IDgyLjQwOTEgMTAuODM2MyA4Mi4yODk0IDExLjAzMzZDODIuMTY5NiAxMS4yMzA4IDgyLjEwOTcgMTEuNDUxMiA4Mi4xMDk3IDExLjY5NDhDODIuMTA5NyAxMS45Mzg1IDgyLjE2OTYgMTIuMTU4OSA4Mi4yODk0IDEyLjM1NjFDODIuNDA5MSAxMi41NTMzIDgyLjU3MDggMTIuNzEgODIuNzc0MyAxMi44MjZDODIuOTc3OSAxMi45NDIgODMuMjA2OSAxMyA4My40NjE0IDEzWk03NC41NDMxIDEzQzc0Ljc5NDYgMTMgNzUuMDIyMSAxMi45NDIgNzUuMjI1NyAxMi44MjZDNzUuNDI5MiAxMi43MSA3NS41OTA5IDEyLjU1MzMgNzUuNzEwNiAxMi4zNTYxQzc1LjgzMDQgMTIuMTU4OSA3NS44OTAzIDExLjkzODUgNzUuODkwMyAxMS42OTQ4Qzc1Ljg5MDMgMTEuNDUxMiA3NS44MzA0IDExLjIzMDggNzUuNzEwNiAxMS4wMzM2Qzc1LjU5MDkgMTAuODM2MyA3NS40MjkyIDEwLjY3OTcgNzUuMjI1NyAxMC41NjM3Qzc1LjAyMjEgMTAuNDQ3NyA3NC43OTQ2IDEwLjM4OTcgNzQuNTQzMSAxMC4zODk3Qzc0LjI4ODYgMTAuMzg5NyA3NC4wNTk2IDEwLjQ0NzcgNzMuODU2IDEwLjU2MzdDNzMuNjUyNCAxMC42Nzk3IDczLjQ5MDggMTAuODM2MyA3My4zNzEgMTEuMDMzNkM3My4yNTEzIDExLjIzMDggNzMuMTkxNCAxMS40NTEyIDczLjE5MTQgMTEuNjk0OEM3My4xOTE0IDExLjkzODUgNzMuMjUxMyAxMi4xNTg5IDczLjM3MSAxMi4zNTYxQzczLjQ5MDggMTIuNTUzMyA3My42NTI0IDEyLjcxIDczLjg1NiAxMi44MjZDNzQuMDU5NiAxMi45NDIgNzQuMjg4NiAxMyA3NC41NDMxIDEzWiJ9KX0pfXZhciBwOT02NTAsdTk9YAoubGVtLXRvZ2dsZTpob3ZlciB7IGNvbG9yOiAjZmZmOyB9Ci5sZW0tdG9nZ2xlOmhvdmVyIC5sZW0tY2hldnJvbiB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuODUpICFpbXBvcnRhbnQ7IH0KLmxlbS1zZWxlY3Q6aG92ZXIgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDcpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4xNik7IH0KLmxlbS1zZWxlY3Q6Zm9jdXMgeyBvdXRsaW5lOiBub25lOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yNCk7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7IH0KLmxlbS1wcmltYXJ5OmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMDgpOyB9Ci5sZW0tcHJpbWFyeS1vbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4yMikgIWltcG9ydGFudDsgZmlsdGVyOiBub25lOyB9Ci5sZW0tZ2hvc3Q6aG92ZXI6bm90KDpkaXNhYmxlZCkgeyBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpOyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTsgY29sb3I6ICNmZmY7IH0KLmxlbS1naG9zdDpkaXNhYmxlZCB7IG9wYWNpdHk6IDAuNDsgY3Vyc29yOiBub3QtYWxsb3dlZDsgfQoubGVtLXNlZzpob3Zlcjpub3QoW2FyaWEtcHJlc3NlZD0idHJ1ZSJdKSB7IGNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuOSk7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNSkgIWltcG9ydGFudDsgfQoubGVtLXNwZWVkOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA5KTsgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTgpOyBjb2xvcjogI2ZmZjsgfQoubGVtLXNwZWVkLW9uOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjg4KSAhaW1wb3J0YW50OyBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsMC44OCkgIWltcG9ydGFudDsgY29sb3I6ICMwYTBhMGMgIWltcG9ydGFudDsgfQoubGVtLXNwZWVkOmFjdGl2ZSB7IHRyYW5zZm9ybTogc2NhbGUoMC45Nyk7IH0KYCxqNT1bMSwyLDUsMjBdLFE4PTEwMDAsaDU9e3N0YXR1czoiaWRsZSIsYXJjOjAsZWxhcHNlZE1zOjB9O2Z1bmN0aW9uIEI4KHt1ZGlkOkMsZXhlYzpafSl7bGV0W0osWF09SSghMCksW0csUV09SShpMVswXS5pZCksWyQsWV09SShpMVswXS5tb2RlKSxbXyxWXT1JKDEpLFtCLEtdPUkoaDUpLFtILEZdPUkobnVsbCksTT1FMSgoKT0+aTEuZmluZCgodik9PnYuaWQ9PT1HKT8/aTFbMF0sW0ddKSxMPUUxKCgpPT5HOChNKSxbTV0pLEQ9aCgwKSxPPWgoImlkbGUiKSxQPWgoQTUoJCkqXyksRT1oKDApLHc9aChMKSxmPWgobnVsbCk7eSgoKT0+e1AuY3VycmVudD1BNSgkKSpffSxbJCxfXSk7bGV0IGs9aChudWxsKTt5KCgpPT57bGV0IHY9dy5jdXJyZW50LGk9RC5jdXJyZW50O2lmKHcuY3VycmVudD1MLHYmJnYhPT1MKWsuY3VycmVudD1kOSh2LGksTCxwZXJmb3JtYW5jZS5ub3coKSk7RC5jdXJyZW50PTAsRS5jdXJyZW50PTAsTy5jdXJyZW50PSJpZGxlIixmLmN1cnJlbnQ9bnVsbCxLKGg1KX0sW0xdKTtsZXQgVD1oKDApLFM9aChudWxsKSx4PWgobnVsbCk7eSgoKT0+e2xldCB2PTAsaT0oJDEpPT57bGV0IHI9Uy5jdXJyZW50LG49cj09bnVsbD8xNjpNYXRoLm1pbig2NCwkMS1yKTtpZihTLmN1cnJlbnQ9JDEsVC5jdXJyZW50PShULmN1cnJlbnQrbiowLjAwMDEyKSUoTWF0aC5QSSoyKSxPLmN1cnJlbnQ9PT0icGxheWluZyIpe2xldCBDMT1QLmN1cnJlbnQqbi8xMDAwO0QuY3VycmVudCs9QzEsRS5jdXJyZW50Kz1uO2xldCB0PXcuY3VycmVudC50b3RhbERpc3RhbmNlO2lmKCF3LmN1cnJlbnQudHJhaWwubG9vcCYmRC5jdXJyZW50Pj10KUQuY3VycmVudD10LE8uY3VycmVudD0icGF1c2VkIixLKHtzdGF0dXM6InBhdXNlZCIsYXJjOnQsZWxhcHNlZE1zOkUuY3VycmVudH0pfWxldCBGMT14LmN1cnJlbnQ7aWYoRjEpe2xldCBDMT13LmN1cnJlbnQsdD1udWxsLG09ay5jdXJyZW50O2lmKG0pe2xldCBkPSgkMS1tLnN0YXJ0TXMpL3A5O2lmKGQ+PTEpay5jdXJyZW50PW51bGw7ZWxzZXtsZXQgcD1pOShkKTtDMT1vOShtLHApLHQ9e3g6bS5wcmV2TWFya2VyLngrKG0ubmV4dE1hcmtlci54LW0ucHJldk1hcmtlci54KSpwLHk6bS5wcmV2TWFya2VyLnkrKG0ubmV4dE1hcmtlci55LW0ucHJldk1hcmtlci55KSpwLHo6bS5wcmV2TWFya2VyLnorKG0ubmV4dE1hcmtlci56LW0ucHJldk1hcmtlci56KSpwfX19cjkoRjEsQzEsRC5jdXJyZW50LFQuY3VycmVudCwkMSxPLmN1cnJlbnQ9PT0icGxheWluZyIsdCl9dj1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaSl9O3JldHVybiB2PXJlcXVlc3RBbmltYXRpb25GcmFtZShpKSwoKT0+Y2FuY2VsQW5pbWF0aW9uRnJhbWUodil9LFtdKSx5KCgpPT57bGV0IHY9c2V0SW50ZXJ2YWwoKCk9PntpZihPLmN1cnJlbnQ9PT0icGxheWluZyIpSyh7c3RhdHVzOiJwbGF5aW5nIixhcmM6RC5jdXJyZW50LGVsYXBzZWRNczpFLmN1cnJlbnR9KX0sMjUwKTtyZXR1cm4oKT0+Y2xlYXJJbnRlcnZhbCh2KX0sW10pLHkoKCk9PntpZihCLnN0YXR1cyE9PSJwbGF5aW5nIilyZXR1cm47bGV0IHY9ITEsaT0wLCQxPW51bGwscj1hc3luYygpPT57aWYodnx8JDEpcmV0dXJuO2xldCBGMT1EYXRlLm5vdygpO2lmKEYxLWk8UTgpcmV0dXJuO2k9RjE7bGV0IEMxPW8xKHcuY3VycmVudCxELmN1cnJlbnQpLHQ9YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IHNldCAke0MxLmxhdC50b0ZpeGVkKDcpfSwke0MxLmxuZy50b0ZpeGVkKDcpfWA7JDE9Wih0KS50aGVuKChtKT0+e2lmKHYpcmV0dXJuO2lmKG0uZXhpdENvZGUhPT0wKUYoSzgobS5zdGRlcnIpfHwic2ltY3RsIGxvY2F0aW9uIHNldCBmYWlsZWQiKTtlbHNlIEYobnVsbCl9KS5jYXRjaCgobSk9PntpZighdilGKG0gaW5zdGFuY2VvZiBFcnJvcj9tLm1lc3NhZ2U6U3RyaW5nKG0pKX0pLmZpbmFsbHkoKCk9PnskMT1udWxsfSl9O3IoKTtsZXQgbj1zZXRJbnRlcnZhbChyLFE4KTtyZXR1cm4oKT0+e3Y9ITAsY2xlYXJJbnRlcnZhbChuKX19LFtCLnN0YXR1cyxDLFpdKTtsZXQgcz1qKCgpPT57aWYoTy5jdXJyZW50PT09InBsYXlpbmciKXtPLmN1cnJlbnQ9InBhdXNlZCIsSygodik9Pih7Li4udixzdGF0dXM6InBhdXNlZCJ9KSk7cmV0dXJufWlmKEQuY3VycmVudD49dy5jdXJyZW50LnRvdGFsRGlzdGFuY2UmJiF3LmN1cnJlbnQudHJhaWwubG9vcClELmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MDtpZihmLmN1cnJlbnQ9PW51bGwpe2xldCB2PW8xKHcuY3VycmVudCxELmN1cnJlbnQpO2YuY3VycmVudD17bGF0OnYubGF0LGxuZzp2LmxuZ319Ty5jdXJyZW50PSJwbGF5aW5nIixLKCh2KT0+KHsuLi52LHN0YXR1czoicGxheWluZyIsYXJjOkQuY3VycmVudCxlbGFwc2VkTXM6RS5jdXJyZW50fSkpfSxbXSksbD1qKCgpPT57Ty5jdXJyZW50PSJpZGxlIixELmN1cnJlbnQ9MCxFLmN1cnJlbnQ9MCxLKGg1KTtsZXQgdj1mLmN1cnJlbnQ7Zi5jdXJyZW50PW51bGw7bGV0IGk9dj9geGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gc2V0ICR7di5sYXQudG9GaXhlZCg3KX0sJHt2LmxuZy50b0ZpeGVkKDcpfWA6YHhjcnVuIHNpbWN0bCBsb2NhdGlvbiAke0N9IGNsZWFyYDtaKGkpLnRoZW4oKCQxKT0+e2lmKCQxLmV4aXRDb2RlIT09MClGKEs4KCQxLnN0ZGVycil8fG51bGwpO2Vsc2UgRihudWxsKX0pfSxbWixDXSksSDE9aigodik9PntRKHYpO2xldCBpPWkxLmZpbmQoKCQxKT0+JDEuaWQ9PT12KTtpZihpKVkoaS5tb2RlKX0sW10pO3koKCk9PigpPT57aWYoTy5jdXJyZW50PT09ImlkbGUiKXJldHVybjtsZXQgdj1mLmN1cnJlbnQsaT12P2B4Y3J1biBzaW1jdGwgbG9jYXRpb24gJHtDfSBzZXQgJHt2LmxhdC50b0ZpeGVkKDcpfSwke3YubG5nLnRvRml4ZWQoNyl9YDpgeGNydW4gc2ltY3RsIGxvY2F0aW9uICR7Q30gY2xlYXJgO1ooaSkuY2F0Y2goKCk9Pnt9KX0sW1osQ10pO2xldCBxMT1CLnN0YXR1cz09PSJwbGF5aW5nIixQMT1xMT9gJHttNShCLmFyYyl9IMK3ICR7VjgoQi5lbGFwc2VkTXMpfWA6YCR7bTUoTC50b3RhbERpc3RhbmNlKX0gdG90YWxgO3JldHVybiBxKCJkaXYiLHtzdHlsZTp7Li4udDkscGFkZGluZzoiOHB4IDEycHggMTJweCJ9LGNoaWxkcmVuOltxKCJzdHlsZSIse2NoaWxkcmVuOnU5fSkscSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5YKCh2KT0+IXYpLHN0eWxlOmU5LGNsYXNzTmFtZToibGVtLXRvZ2dsZSIsImFyaWEtZXhwYW5kZWQiOkosY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTpDNyxjaGlsZHJlbjoiTG9jYXRpb24ifSkscSgic3BhbiIse3N0eWxlOlo3LGNoaWxkcmVuOltxKCJzcGFuIix7c3R5bGU6ey4uLko3LGJhY2tncm91bmQ6cTE/IiM0YWRlODAiOkwudG90YWxEaXN0YW5jZT4wPyJyZ2JhKDI1NSwyNTUsMjU1LDAuMykiOiJ0cmFuc3BhcmVudCIsYm94U2hhZG93OnExPyIwIDAgNnB4IHJnYmEoNzQsMjIyLDEyOCwwLjcpIjoibm9uZSJ9fSksUDFdfSkscShhMix7b3BlbjpKfSldfSksSiYmcShKMSx7Y2hpbGRyZW46W3EoImRpdiIse3N0eWxlOlg3LGNoaWxkcmVuOltxKCJkaXYiLHtzdHlsZTpxNyxjaGlsZHJlbjpbcSgic2VsZWN0Iix7dmFsdWU6RyxvbkNoYW5nZToodik9PkgxKHYudGFyZ2V0LnZhbHVlKSxzdHlsZTpHNyxjbGFzc05hbWU6ImxlbS1zZWxlY3QiLCJhcmlhLWxhYmVsIjoiVHJhaWwiLGNoaWxkcmVuOmkxLm1hcCgodik9PnEoIm9wdGlvbiIse3ZhbHVlOnYuaWQsY2hpbGRyZW46di5uYW1lfSx2LmlkKSl9KSxxKCJzcGFuIix7c3R5bGU6UTcsImFyaWEtaGlkZGVuIjoidHJ1ZSIsY2hpbGRyZW46cShhMix7b3BlbjohMX0pfSldfSkscSgiZGl2Iix7c3R5bGU6JDcsY2hpbGRyZW46TS5kZXNjcmlwdGlvbn0pXX0pLHEoImRpdiIse3N0eWxlOlk3LGNoaWxkcmVuOltxKCJjYW52YXMiLHtyZWY6eCxzdHlsZTpWN30pLHEobDkse3ByZXBhcmVkOkx9KV19KSxxKCJkaXYiLHtzdHlsZTpfNyxjaGlsZHJlbjpbcSh2NSx7bGFiZWw6IkRpc3RhbmNlIix2YWx1ZTptNShCLmFyYyl9KSxxKHY1LHtsYWJlbDoiUGFjZSIsdmFsdWU6bjkoUC5jdXJyZW50KX0pLHEodjUse2xhYmVsOiJFbGFwc2VkIix2YWx1ZTpWOChCLmVsYXBzZWRNcyl9KV19KSxxKCJkaXYiLHtzdHlsZTpINyxjaGlsZHJlbjpbcSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOnMsc3R5bGU6ey4uLk43LGJhY2tncm91bmQ6cTE/InJnYmEoMjU1LDI1NSwyNTUsMC4xNikiOiIjMzRkMzk5Iixjb2xvcjpxMT8iI2ZmZiI6IiMwNjIwMTgifSxjbGFzc05hbWU6cTE/ImxlbS1wcmltYXJ5IGxlbS1wcmltYXJ5LW9uIjoibGVtLXByaW1hcnkiLCJhcmlhLXByZXNzZWQiOnExLHRpdGxlOnExPyJQYXVzZSI6IlBsYXkiLGNoaWxkcmVuOltxMT9xKFQ1LHt9KTpxKEk1LHt9KSxxKCJzcGFuIix7Y2hpbGRyZW46cTE/IlBhdXNlIjoiUGxheSJ9KV19KSxxKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6bCxzdHlsZTpGNyxjbGFzc05hbWU6ImxlbS1naG9zdCIsZGlzYWJsZWQ6Qi5zdGF0dXM9PT0iaWRsZSImJkIuYXJjPT09MCx0aXRsZToiU3RvcCBhbmQgY2xlYXIgc2ltdWxhdGVkIGxvY2F0aW9uIixjaGlsZHJlbjpbcShFNSx7fSkscSgic3BhbiIse2NoaWxkcmVuOiJTdG9wIn0pXX0pXX0pLHEoImRpdiIse3N0eWxlOkQ3LGNoaWxkcmVuOltxKCJkaXYiLHtzdHlsZTp7ZmxleDoxLG1pbldpZHRoOjB9LGNoaWxkcmVuOnEoYzkse2FyaWFMYWJlbDoiVHJhbnNwb3J0IG1vZGUiLHZhbHVlOiQsb25DaGFuZ2U6KHYpPT5ZKHYpLG9wdGlvbnM6W3t2YWx1ZToid2FsayIsbGFiZWw6IldhbGsiLGljb246cShTNSx7fSl9LHt2YWx1ZToicnVuIixsYWJlbDoiUnVuIixpY29uOnEoYjUse30pfSx7dmFsdWU6ImN5Y2xlIixsYWJlbDoiQ3ljbGUiLGljb246cShSNSx7fSl9LHt2YWx1ZToiZHJpdmUiLGxhYmVsOiJEcml2ZSIsaWNvbjpxKHk1LHt9KX1dfSl9KSxxKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KCk9PntsZXQgdj1qNS5pbmRleE9mKF8pLGk9ajVbKHYrMSklajUubGVuZ3RoXTtWKGkpfSxzdHlsZTp7Li4uaTIsYmFja2dyb3VuZDpfPjE/IiNmZmYiOmkyLmJhY2tncm91bmQsYm9yZGVyQ29sb3I6Xz4xPyIjZmZmIjppMi5ib3JkZXJDb2xvcixjb2xvcjpfPjE/IiMwYTBhMGMiOmkyLmNvbG9yfSxjbGFzc05hbWU6Xz4xPyJsZW0tc3BlZWQgbGVtLXNwZWVkLW9uIjoibGVtLXNwZWVkIiwiYXJpYS1sYWJlbCI6YFNwZWVkICR7X33DlyDigJQgdGFwIHRvIGN5Y2xlYCx0aXRsZTpgU3BlZWQgJHtffcOXIOKAlCB0YXAgdG8gY3ljbGVgLGNoaWxkcmVuOltxKHc1LHt9KSxfPjEmJnEoInNwYW4iLHtzdHlsZTpVNyxjaGlsZHJlbjpbXywiw5ciXX0pXX0pXX0pLEgmJnEoImRpdiIse3N0eWxlOk03LGNoaWxkcmVuOkh9KV19KV19KX12YXIgdjU9TzIoZnVuY3Rpb24oe2xhYmVsOlosdmFsdWU6Sn0pe3JldHVybiBxKCJkaXYiLHtzdHlsZTpLNyxjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6TDcsY2hpbGRyZW46Wn0pLHEoImRpdiIse3N0eWxlOkI3LGNoaWxkcmVuOkp9KV19KX0pO2Z1bmN0aW9uIGM5KHt2YWx1ZTpDLG9uQ2hhbmdlOlosb3B0aW9uczpKLGFyaWFMYWJlbDpYfSl7cmV0dXJuIHEoImRpdiIse3JvbGU6Imdyb3VwIiwiYXJpYS1sYWJlbCI6WCxzdHlsZTpPNyxjaGlsZHJlbjpKLm1hcCgoRyk9PntsZXQgUT1HLnZhbHVlPT09QztyZXR1cm4gcSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT5aKEcudmFsdWUpLHN0eWxlOnsuLi56NyxiYWNrZ3JvdW5kOlE/InJnYmEoMjU1LDI1NSwyNTUsMC4xMikiOiJ0cmFuc3BhcmVudCIsY29sb3I6UT8iI2ZmZiI6InJnYmEoMjU1LDI1NSwyNTUsMC42KSJ9LGNsYXNzTmFtZTpRPyJsZW0tc2VnIGxlbS1zZWctYWN0aXZlIjoibGVtLXNlZyIsImFyaWEtcHJlc3NlZCI6USwiYXJpYS1sYWJlbCI6Ry5pY29uP0cubGFiZWw6dm9pZCAwLHRpdGxlOkcuaWNvbj9HLmxhYmVsOnZvaWQgMCxjaGlsZHJlbjpHLmljb24/P0cubGFiZWx9LEcudmFsdWUpfSl9KX1mdW5jdGlvbiBsOSh7cHJlcGFyZWQ6Q30pe2lmKEMucmF3TWF4QWx0LUMucmF3TWluQWx0PDUpcmV0dXJuIG51bGw7cmV0dXJuIHEoSjEse2NoaWxkcmVuOltxKCJkaXYiLHtzdHlsZTp7Li4uTDgsdG9wOjgsbGVmdDoxMH0sY2hpbGRyZW46W3EobzIse2RpcjoidXAifSksIiAiLF84KEMucmF3TWF4QWx0KV19KSxxKCJkaXYiLHtzdHlsZTp7Li4uTDgsdG9wOjgscmlnaHQ6MTB9LGNoaWxkcmVuOltxKG8yLHtkaXI6ImRvd24ifSksIiAiLF84KEMucmF3TWluQWx0KV19KV19KX12YXIgJDg9MTQwO2Z1bmN0aW9uIFk4KEMsWil7bGV0IEo9QXJyYXkoWik7Zm9yKGxldCBYPTA7WDxaO1grKyl7bGV0IEc9Wj09PTE/MDpYLyhaLTEpLFE9bzEoQyxHKkMudG90YWxEaXN0YW5jZSk7SltYXT17eDpRLngseTpRLnksejpRLnp9fXJldHVybiBKfWZ1bmN0aW9uIGQ5KEMsWixKLFgpe2xldCBHPShDLmJvdW5kcy54WzBdK0MuYm91bmRzLnhbMV0pLzIsUT0oQy5ib3VuZHMuelswXStDLmJvdW5kcy56WzFdKS8yLCQ9Qy5ib3VuZHMueVswXSxZPU1hdGgubWF4KDEsQy5ib3VuZHMueFsxXS1DLmJvdW5kcy54WzBdLEMuYm91bmRzLnpbMV0tQy5ib3VuZHMuelswXSksXz0oSi5ib3VuZHMueFswXStKLmJvdW5kcy54WzFdKS8yLFY9KEouYm91bmRzLnpbMF0rSi5ib3VuZHMuelsxXSkvMixCPUouYm91bmRzLnlbMF0sSD1NYXRoLm1heCgxLEouYm91bmRzLnhbMV0tSi5ib3VuZHMueFswXSxKLmJvdW5kcy56WzFdLUouYm91bmRzLnpbMF0pL1ksTT1ZOChDLCQ4KS5tYXAoKGspPT4oe3g6KGsueC1HKSpIK18seTooay55LSQpKkgrQix6OihrLnotUSkqSCtWfSkpLEw9WTgoSiwkOCksRD0oQy50cmFpbC5sb29wfHxKLnRyYWlsLmxvb3ApPz8hMSxPPWE5KE0sTCxEKSxQPW8xKEMsWiksRT17eDooUC54LUcpKkgrXyx5OihQLnktJCkqSCtCLHo6KFAuei1RKSpIK1Z9LHc9bzEoSiwwKSxmPXt4OncueCx5OncueSx6Oncuen07cmV0dXJue2Zyb206Qyx0bzpKLGZyb21QdHM6TSx0b1B0czpPLHByZXZNYXJrZXI6RSxuZXh0TWFya2VyOmYsc3RhcnRNczpYfX1mdW5jdGlvbiBhOShDLFosSil7bGV0IFg9Qy5sZW5ndGgsRz0xLzAsUT0wLCQ9ITEsWT1bWixbLi4uWl0ucmV2ZXJzZSgpXTtmb3IobGV0IEI9MDtCPFkubGVuZ3RoO0IrKyl7bGV0IEs9WVtCXSxIPUo/WDoxO2ZvcihsZXQgRj0wO0Y8SDtGKyspe2xldCBNPTA7Zm9yKGxldCBMPTA7TDxYO0wrKyl7bGV0IEQ9Q1tMXSxPPUtbKEwrRiklWF0sUD1ELngtTy54LEU9RC55LU8ueSx3PUQuei1PLno7aWYoTSs9UCpQK0UqRSt3KncsTT49RylicmVha31pZihNPEcpRz1NLFE9RiwkPUI9PT0xfX1sZXQgXz0kP1suLi5aXS5yZXZlcnNlKCk6WixWPUFycmF5KFgpO2ZvcihsZXQgQj0wO0I8WDtCKyspVltCXT1fWyhCK1EpJVhdO3JldHVybiBWfWZ1bmN0aW9uIG85KEMsWil7bGV0IEo9Qy5mcm9tUHRzLmxlbmd0aCxYPUFycmF5KEopLEc9MCxRPW51bGwsJD0xLzAsWT0tMS8wLF89MS8wLFY9LTEvMCxCPTEvMCxLPS0xLzA7Zm9yKGxldCBIPTA7SDxKO0grKyl7bGV0IEY9Qy5mcm9tUHRzW0hdLE09Qy50b1B0c1tIXSxMPUYueCsoTS54LUYueCkqWixEPUYueSsoTS55LUYueSkqWixPPUYueisoTS56LUYueikqWjtpZihRKXtsZXQgRT1MLVEueCx3PUQtUS55LGY9Ty1RLno7Rys9TWF0aC5zcXJ0KEUqRSt3KncrZipmKX1sZXQgUD17eDpMLHk6RCx6Ok8sYXJjOkcsbGF0OjAsbG5nOjB9O2lmKFhbSF09UCxRPVAsTDwkKSQ9TDtpZihMPlkpWT1MO2lmKEQ8XylfPUQ7aWYoRD5WKVY9RDtpZihPPEIpQj1PO2lmKE8+SylLPU99cmV0dXJue3RyYWlsOkMudG8udHJhaWwsb3JpZ2luOkMudG8ub3JpZ2luLHBvaW50czpYLHRvdGFsRGlzdGFuY2U6Ryxib3VuZHM6e3g6WyQsWV0seTpbXyxWXSx6OltCLEtdfSxyYXdNaW5BbHQ6Qy50by5yYXdNaW5BbHQrKEMuZnJvbS5yYXdNaW5BbHQtQy50by5yYXdNaW5BbHQpKigxLVopLHJhd01heEFsdDpDLnRvLnJhd01heEFsdCsoQy5mcm9tLnJhd01heEFsdC1DLnRvLnJhd01heEFsdCkqKDEtWil9fWZ1bmN0aW9uIGk5KEMpe3JldHVybiBDPDAuNT8yKkMqQzoxLU1hdGgucG93KC0yKkMrMiwyKS8yfWZ1bmN0aW9uIHI5KEMsWixKLFgsRyxRLCQpe2xldCBZPUMuZ2V0Q29udGV4dCgiMmQiKTtpZighWSlyZXR1cm47bGV0e2NsaWVudFdpZHRoOl8sY2xpZW50SGVpZ2h0OlZ9PUM7aWYoXz09PTB8fFY9PT0wKXJldHVybjtsZXQgQj10eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MToxLEs9TWF0aC5yb3VuZChfKkIpLEg9TWF0aC5yb3VuZChWKkIpO2lmKEMud2lkdGghPT1LfHxDLmhlaWdodCE9PUgpQy53aWR0aD1LLEMuaGVpZ2h0PUg7WS5zZXRUcmFuc2Zvcm0oQiwwLDAsQiwwLDApLFkuY2xlYXJSZWN0KDAsMCxfLFYpO2xldCBGPVkuY3JlYXRlUmFkaWFsR3JhZGllbnQoXyowLjUsViowLjU1LE1hdGgubWluKF8sVikqMC4yLF8qMC41LFYqMC41NSxNYXRoLm1heChfLFYpKjAuODUpO0YuYWRkQ29sb3JTdG9wKDAsIiMxYTFhMWQiKSxGLmFkZENvbG9yU3RvcCgxLCIjMGEwYTBjIiksWS5maWxsU3R5bGU9RixZLmZpbGxSZWN0KDAsMCxfLFYpLHM5KFksXyxWKTtsZXR7cG9pbnRzOk0sYm91bmRzOkx9PVo7aWYoTS5sZW5ndGg8MilyZXR1cm47bGV0IEQ9MjgqTWF0aC5QSS8xODAsTz1NYXRoLnNpbihEKSxQPU1hdGguY29zKEQpLEU9TWF0aC5zaW4oWCksdz1NYXRoLmNvcyhYKSxmPShMLnhbMF0rTC54WzFdKS8yLGs9KEwuelswXStMLnpbMV0pLzIsVD1MLnhbMV0tTC54WzBdLFM9TC56WzFdLUwuelswXSx4PUwueVsxXS1MLnlbMF0scz1NYXRoLm1heChULFMpKjEuMDUsbD1NYXRoLm1heChTKlAreCpPLFQqMC40KSoxLjE1LEgxPV8qMC4wOCxxMT1WKjAuMTgsUDE9TWF0aC5taW4oKF8tSDEqMikvcywoVi1xMSoyKS9sKSoxLjQ1LHY9eDwxPzE6TWF0aC5taW4oMjQsMTQwL01hdGgubWF4KDIwLHgpKSxpPShtLGQscCk9PntsZXQgZT1tLWYsWTE9cC1rLEwxPWUqdytZMSpFLEIxPS1lKkUrWTEqdyxTMT1kKnYsczE9UzEqUC1CMSpPLE4xPVMxKk8rQjEqUDtyZXR1cm57c3g6Xy8yK0wxKlAxLHN5OlYqMC41NS1zMSpQMSxkZXB0aDpOMX19LCQxPTM4LHI9TS5tYXAoKG0pPT57bGV0IGQ9aShtLngsbS55LG0ueikscD1pKG0ueCwwLG0ueiksZT17c3g6ZC5zeCxzeTpNYXRoLm1heChwLnN5LGQuc3krJDEpLGRlcHRoOnAuZGVwdGh9O3JldHVybntwOm0sdG9wOmQsYm90OmV9fSk7Zm9yKGxldCBtPTE7bTxyLmxlbmd0aDttKyspe2xldCBkPXJbbS0xXSxwPXJbbV0sZT1ZLmNyZWF0ZUxpbmVhckdyYWRpZW50KChkLnRvcC5zeCtwLnRvcC5zeCkvMiwoZC50b3Auc3krcC50b3Auc3kpLzIsKGQuYm90LnN4K3AuYm90LnN4KS8yLChkLmJvdC5zeStwLmJvdC5zeSkvMik7ZS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIpLGUuYWRkQ29sb3JTdG9wKDAuNDUsInJnYmEoMTgwLDE4MCwxODUsMC4yOCkiKSxlLmFkZENvbG9yU3RvcCgwLjg1LCJyZ2JhKDQwLDQwLDQ1LDAuMTgpIiksZS5hZGRDb2xvclN0b3AoMSwicmdiYSgwLDAsMCwwKSIpLFkuZmlsbFN0eWxlPWUsWS5iZWdpblBhdGgoKSxZLm1vdmVUbyhkLnRvcC5zeCxkLnRvcC5zeSksWS5saW5lVG8ocC50b3Auc3gscC50b3Auc3kpLFkubGluZVRvKHAuYm90LnN4LHAuYm90LnN5KSxZLmxpbmVUbyhkLmJvdC5zeCxkLmJvdC5zeSksWS5jbG9zZVBhdGgoKSxZLmZpbGwoKX1ZLnN0cm9rZVN0eWxlPSIjZmZmZmZmIixZLmxpbmVXaWR0aD0xLjYsWS5saW5lQ2FwPSJyb3VuZCIsWS5saW5lSm9pbj0icm91bmQiLFkuYmVnaW5QYXRoKCk7Zm9yKGxldCBtPTA7bTxyLmxlbmd0aDttKyspe2xldHt0b3A6ZH09clttXTtpZihtPT09MClZLm1vdmVUbyhkLnN4LGQuc3kpO2Vsc2UgWS5saW5lVG8oZC5zeCxkLnN5KX1ZLnN0cm9rZSgpO2xldCBuPUo7WS5zdHJva2VTdHlsZT0iI2Y5ZDJhNCIsWS5saW5lV2lkdGg9Mi4yLFkuYmVnaW5QYXRoKCk7bGV0IEYxPSExO2ZvcihsZXQgbT0wO208ci5sZW5ndGg7bSsrKXtsZXR7cDpkLHRvcDpwfT1yW21dO2lmKGQuYXJjPm4pYnJlYWs7aWYoIUYxKVkubW92ZVRvKHAuc3gscC5zeSksRjE9ITA7ZWxzZSBZLmxpbmVUbyhwLnN4LHAuc3kpfWlmKEYxKVkuc3Ryb2tlKCk7bGV0IEMxPSQ/P28xKFosSiksdD1pKEMxLngsQzEueSxDMS56KTtpZihRKXtsZXQgcD1HJTI2MDAvMjYwMCxlPTQrMjIqcCxZMT0wLjIyKigxLXApLEwxPVkuY3JlYXRlUmFkaWFsR3JhZGllbnQodC5zeCx0LnN5LGUqMC41LHQuc3gsdC5zeSxlKTtMMS5hZGRDb2xvclN0b3AoMCwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLEwxLmFkZENvbG9yU3RvcCgwLjcsYHJnYmEoMjU1LDI1NSwyNTUsJHtZMS50b0ZpeGVkKDMpfSlgKSxMMS5hZGRDb2xvclN0b3AoMSwicmdiYSgyNTUsMjU1LDI1NSwwKSIpLFkuZmlsbFN0eWxlPUwxLFkuYmVnaW5QYXRoKCksWS5hcmModC5zeCx0LnN5LGUsMCxNYXRoLlBJKjIpLFkuZmlsbCgpfVkuZmlsbFN0eWxlPSIjZmZmIixZLmJlZ2luUGF0aCgpLFkuYXJjKHQuc3gsdC5zeSwzLjgsMCxNYXRoLlBJKjIpLFkuZmlsbCgpfWZ1bmN0aW9uIHM5KEMsWixKKXtDLmZpbGxTdHlsZT0icmdiYSgyNTUsMjU1LDI1NSwwLjA2KSI7Zm9yKGxldCBRPTc7UTxKO1ErPTE0KWZvcihsZXQgJD03OyQ8WjskKz0xNClDLmJlZ2luUGF0aCgpLEMuYXJjKCQsUSwwLjcsMCxNYXRoLlBJKjIpLEMuZmlsbCgpfWZ1bmN0aW9uIG01KEMpe2lmKEM8MTAwMClyZXR1cm5gJHtDLnRvRml4ZWQoMCl9IG1gO3JldHVybmAkeyhDLzEwMDApLnRvRml4ZWQoMil9IGttYH1mdW5jdGlvbiBWOChDKXtsZXQgWj1NYXRoLmZsb29yKEMvMTAwMCksSj1NYXRoLmZsb29yKFovMzYwMCksWD1NYXRoLmZsb29yKFolMzYwMC82MCksRz1aJTYwO2lmKEo+MClyZXR1cm5gJHtKfToke1gudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Ry50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gO3JldHVybmAke1h9OiR7Ry50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1gfWZ1bmN0aW9uIG45KEMpe2lmKEM8PTApcmV0dXJuIuKAlCI7aWYoQz43KXJldHVybmAkeyhDKjMuNikudG9GaXhlZCgwKX0ga20vaGA7bGV0IFo9MTAwMC9DLEo9TWF0aC5mbG9vcihaLzYwKSxYPU1hdGgucm91bmQoWiU2MCk7cmV0dXJuYCR7Sn06JHtYLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS9rbWB9ZnVuY3Rpb24gXzgoQyl7cmV0dXJuYCR7Qy50b0ZpeGVkKDApfSBtYH1mdW5jdGlvbiBLOChDKXtsZXQgWj1DLnRyaW0oKTtpZighWilyZXR1cm4iIjtsZXQgSj1aLm1hdGNoKC9SZWFzb246XHMqKC4rKSQvbSk7aWYoSilyZXR1cm4gSlsxXTtyZXR1cm4gWi5zcGxpdChgCmApLnNsaWNlKC0xKVswXT8/Wn12YXIgdDk9e2JhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGJvcmRlclJhZGl1czoxMCxkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDoxMH0sZTk9e2Rpc3BsYXk6ImdyaWQiLGdyaWRUZW1wbGF0ZUNvbHVtbnM6ImF1dG8gMWZyIGF1dG8iLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjgsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNlZWUiLHBhZGRpbmc6IjEwcHggNHB4IixtYXJnaW46Ii04cHggLTRweCIsY3Vyc29yOiJwb2ludGVyIix3aWR0aDoiY2FsYygxMDAlICsgOHB4KSIsdGV4dEFsaWduOiJsZWZ0IixtaW5IZWlnaHQ6MzYsbGluZUhlaWdodDoxfSxDNz17Zm9udFNpemU6MTEsZm9udFdlaWdodDo2MDAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsdGV4dFRyYW5zZm9ybToidXBwZXJjYXNlIixsZXR0ZXJTcGFjaW5nOiIwLjA4ZW0iLGxpbmVIZWlnaHQ6MSxkaXNwbGF5OiJpbmxpbmUtZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIn0sWjc9e2ZvbnRTaXplOjExLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjYsanVzdGlmeVNlbGY6ImVuZCIsbGluZUhlaWdodDoxfSxKNz17d2lkdGg6NixoZWlnaHQ6Nixib3JkZXJSYWRpdXM6IjUwJSIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjJzLCBib3gtc2hhZG93IDAuMnMifSxYNz17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NH0scTc9e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsZGlzcGxheToiYmxvY2sifSxHNz17YXBwZWFyYW5jZToibm9uZSIsV2Via2l0QXBwZWFyYW5jZToibm9uZSIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA0KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjYsY29sb3I6IiNlZWUiLGZvbnRTaXplOjEyLHBhZGRpbmc6IjZweCAyNnB4IDZweCA4cHgiLGZvbnRGYW1pbHk6ImluaGVyaXQiLGN1cnNvcjoicG9pbnRlciIsd2lkdGg6IjEwMCUiLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xMnMsIGJvcmRlci1jb2xvciAwLjEycyJ9LFE3PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0OjksdG9wOiI1MCUiLHRyYW5zZm9ybToidHJhbnNsYXRlWSgtNTAlKSIscG9pbnRlckV2ZW50czoibm9uZSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIn0sJDc9e2ZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDUpIn0sWTc9e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsd2lkdGg6IjEwMCUiLGFzcGVjdFJhdGlvOiIxNiAvIDExIixib3JkZXJSYWRpdXM6MTAsb3ZlcmZsb3c6ImhpZGRlbiIsYmFja2dyb3VuZDoiIzBhMGEwYyIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KSJ9LFY3PXt3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIixkaXNwbGF5OiJibG9jayJ9LEw4PXtwb3NpdGlvbjoiYWJzb2x1dGUiLGJhY2tncm91bmQ6InJnYmEoMjAsMjAsMjIsMC42NSkiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODUpIixmb250U2l6ZToxMCxmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIscGFkZGluZzoiMnB4IDZweCIsYm9yZGVyUmFkaXVzOjUsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixsZXR0ZXJTcGFjaW5nOiIwLjAyZW0iLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wNikifSxfNz17ZGlzcGxheToiZ3JpZCIsZ3JpZFRlbXBsYXRlQ29sdW1uczoiMWZyIDFmciAxZnIiLGdhcDo2fSxLNz17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6MixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDMpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIixib3JkZXJSYWRpdXM6NixwYWRkaW5nOiI1cHggN3B4IixtaW5XaWR0aDowfSxMNz17Zm9udFNpemU6OSx0ZXh0VHJhbnNmb3JtOiJ1cHBlcmNhc2UiLGxldHRlclNwYWNpbmc6IjAuMDZlbSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkifSxCNz17Zm9udFNpemU6MTIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGNvbG9yOiIjZmZmIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxINz17ZGlzcGxheToiZmxleCIsZ2FwOjZ9LE43PXtmbGV4OjEsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixnYXA6NixwYWRkaW5nOiI4cHggMTBweCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6Nyxmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjdXJzb3I6InBvaW50ZXIiLGZvbnRGYW1pbHk6ImluaGVyaXQifSxGNz17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixnYXA6NixwYWRkaW5nOiI4cHggMTJweCIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsYm9yZGVyUmFkaXVzOjcsZm9udFNpemU6MTIsZm9udFdlaWdodDo1MDAsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuODUpIixjdXJzb3I6InBvaW50ZXIiLGZvbnRGYW1pbHk6ImluaGVyaXQifSxENz17ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoicm93IixhbGlnbkl0ZW1zOiJzdHJldGNoIixnYXA6Nn0saTI9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjQscGFkZGluZzoiMCAxMHB4Iixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6NyxiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDQpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjg1KSIsY3Vyc29yOiJwb2ludGVyIixmb250RmFtaWx5OiJpbmhlcml0Iixmb250U2l6ZToxMSxmb250V2VpZ2h0OjYwMCxtaW5XaWR0aDo1Nn0sVTc9e2ZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixmb250VmFyaWFudE51bWVyaWM6InRhYnVsYXItbnVtcyJ9LE83PXtkaXNwbGF5OiJmbGV4IixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDQpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6NyxwYWRkaW5nOjIsZ2FwOjJ9LHo3PXtmbGV4OjEsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo1LHBhZGRpbmc6IjVweCA4cHgiLGZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGN1cnNvcjoicG9pbnRlciIsZm9udEZhbWlseToiaW5oZXJpdCIsdHJhbnNpdGlvbjoiYmFja2dyb3VuZCAwLjEycywgY29sb3IgMC4xMnMiLG1pbkhlaWdodDoyMn0sTTc9e2JhY2tncm91bmQ6InJnYmEoMjQ4LDExMywxMTMsMC4wOCkiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjQ4LDExMywxMTMsMC4yKSIsY29sb3I6IiNmY2E1YTUiLGZvbnRTaXplOjExLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlclJhZGl1czo2fTt2YXIgVzc9e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjEyLHJpZ2h0OjEyLGJvdHRvbToxMixtaW5XaWR0aDowLGJhY2tncm91bmQ6InJnYmEoMjAsMjAsMjIsMC45MikiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGJvcmRlclJhZGl1czoxNCxjb2xvcjoiI2VlZSIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixvdmVyZmxvdzoiaGlkZGVuIix0cmFuc2l0aW9uOiJ0cmFuc2Zvcm0gMC4yNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UiLGJveFNoYWRvdzoiMCAxMnB4IDQwcHggcmdiYSgwLDAsMCwwLjU1KSIsYmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLFdlYmtpdEJhY2tkcm9wRmlsdGVyOiJibHVyKDE4cHgpIixmb250RmFtaWx5OiItYXBwbGUtc3lzdGVtLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWYiLHpJbmRleDozNX0sUDc9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDoxMCxwYWRkaW5nOiI2cHggMTBweCA2cHggMTJweCIsZmxleFNocmluazowfSxrNz17Zm9udFNpemU6MTEsZm9udFdlaWdodDo1MDAsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41NSkifSxBNz17YmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6IiNhYWEiLGN1cnNvcjoicG9pbnRlciIscGFkZGluZzo0LGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYm9yZGVyUmFkaXVzOjQsZmxleFNocmluazowfTtmdW5jdGlvbiByMih7b3BlbjpDLHdpZHRoOlosY2hpbGRyZW46SixzdHlsZTpYfSl7cmV0dXJuIHEoImFzaWRlIix7c3R5bGU6ey4uLlc3LHdpZHRoOlosdHJhbnNmb3JtOkM/InRyYW5zbGF0ZVgoMCkiOiJ0cmFuc2xhdGVYKGNhbGMoMTAwJSArIDI0cHgpKSIsb3BhY2l0eTpDPzE6MCxwb2ludGVyRXZlbnRzOkM/ImF1dG8iOiJub25lIiwuLi5YfSwiYXJpYS1oaWRkZW4iOiFDLGNoaWxkcmVuOkp9KX1mdW5jdGlvbiBzMih7Y2hpbGRyZW46QyxzdHlsZTpafSl7cmV0dXJuIHEoImhlYWRlciIse3N0eWxlOnsuLi5QNywuLi5afSxjaGlsZHJlbjpDfSl9ZnVuY3Rpb24gZzUoe2NoaWxkcmVuOkN9KXtyZXR1cm4gcSgic3BhbiIse3N0eWxlOms3LGNoaWxkcmVuOkN9KX1mdW5jdGlvbiBuMih7b25DbGljazpDLGFyaWFMYWJlbDpaPSJDbG9zZSBwYW5lbCIsdGl0bGU6SixpY29uU2l6ZTpYPTE2fSl7cmV0dXJuIHEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpDLHN0eWxlOkE3LCJhcmlhLWxhYmVsIjpaLHRpdGxlOkosY2hpbGRyZW46cSgic3ZnIix7d2lkdGg6WCxoZWlnaHQ6WCx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W3EoImxpbmUiLHt4MToiMTgiLHkxOiI2Iix4MjoiNiIseTI6IjE4In0pLHEoImxpbmUiLHt4MToiNiIseTE6IjYiLHgyOiIxOCIseTI6IjE4In0pXX0pfSl9ZnVuY3Rpb24gSTcoQyl7bGV0W1osSl09SShudWxsKSxYPWgobmV3IFNldCksRz1qKChRKT0+e3JldHVybiBYLmN1cnJlbnQuYWRkKFEpLCgpPT57WC5jdXJyZW50LmRlbGV0ZShRKX19LFtdKTtyZXR1cm4geSgoKT0+e2lmKCFDKXJldHVybjtsZXQgUT1uZXcgQWJvcnRDb250cm9sbGVyLCQ9ITEsWT1udWxsLF89Qy5yZXBsYWNlKC9cL3N0cmVhbVwubWpwZWckLywiIiksVj0oRCk9PntpZihELndpZHRoPD0wfHxELmhlaWdodDw9MClyZXR1cm47SigoTyk9Pk8mJk8ud2lkdGg9PT1ELndpZHRoJiZPLmhlaWdodD09PUQuaGVpZ2h0JiZPLm9yaWVudGF0aW9uPT09RC5vcmllbnRhdGlvbj9POkQpfSxCPSgpPT57ZmV0Y2goYCR7X30vY29uZmlnYCx7c2lnbmFsOlEuc2lnbmFsfSkudGhlbigoRCk9PkQuanNvbigpKS50aGVuKFYpLmNhdGNoKCgpPT57fSl9O0IoKTtsZXQgSz1zZXRJbnRlcnZhbChCLDEwMDApLEg9bmV3IFVSTChDKTtILnNlYXJjaFBhcmFtcy5zZXQoInJhdyIsIjEiKTtsZXQgRj1ILnRvU3RyaW5nKCksTT0oKT0+e2lmKCR8fFEuc2lnbmFsLmFib3J0ZWR8fFkpcmV0dXJuO1k9c2V0VGltZW91dCgoKT0+e1k9bnVsbCxMKCl9LDEwMDApfSxMPWFzeW5jKCk9Pnt0cnl7bGV0IE89KGF3YWl0IGZldGNoKEYse3NpZ25hbDpRLnNpZ25hbH0pKS5ib2R5Py5nZXRSZWFkZXIoKTtpZighTyl7TSgpO3JldHVybn1sZXQgUD1uZXcgVWludDhBcnJheSgwKTt3aGlsZSghMCl7bGV0e2RvbmU6RSx2YWx1ZTp3fT1hd2FpdCBPLnJlYWQoKTtpZihFKWJyZWFrO2xldCBmPW5ldyBVaW50OEFycmF5KFAubGVuZ3RoK3cubGVuZ3RoKTtmLnNldChQKSxmLnNldCh3LFAubGVuZ3RoKSxQPWY7d2hpbGUoITApe2xldCBrPS0xO2ZvcihsZXQgbD0wO2w8UC5sZW5ndGgtMTtsKyspaWYoUFtsXT09PTI1NSYmUFtsKzFdPT09MjE2KXtrPWw7YnJlYWt9aWYoaz09PS0xKWJyZWFrO2xldCBUPS0xO2ZvcihsZXQgbD1rKzI7bDxQLmxlbmd0aC0xO2wrKylpZihQW2xdPT09MjU1JiZQW2wrMV09PT0yMTcpe1Q9bCsyO2JyZWFrfWlmKFQ9PT0tMSlicmVhaztsZXQgUz1QLnNsaWNlKGssVCk7UD1QLnNsaWNlKFQpO2xldCB4PW5ldyBCbG9iKFtTXSx7dHlwZToiaW1hZ2UvanBlZyJ9KSxzPVVSTC5jcmVhdGVPYmplY3RVUkwoeCk7aWYoWC5jdXJyZW50LnNpemU9PT0wKXtVUkwucmV2b2tlT2JqZWN0VVJMKHMpO2NvbnRpbnVlfWZvcihsZXQgbCBvZiBYLmN1cnJlbnQpbChzKX19fWNhdGNoe31maW5hbGx5e00oKX19O3JldHVybiBMKCksKCk9PntpZigkPSEwLFkpY2xlYXJUaW1lb3V0KFkpO1EuYWJvcnQoKSxjbGVhckludGVydmFsKEspfX0sW0NdKSx7c3Vic2NyaWJlRnJhbWU6RyxmcmFtZTpudWxsLGNvbmZpZzpafX12YXIgVDc9e0tleUE6NCxLZXlCOjUsS2V5Qzo2LEtleUQ6NyxLZXlFOjgsS2V5Rjo5LEtleUc6MTAsS2V5SDoxMSxLZXlJOjEyLEtleUo6MTMsS2V5SzoxNCxLZXlMOjE1LEtleU06MTYsS2V5TjoxNyxLZXlPOjE4LEtleVA6MTksS2V5UToyMCxLZXlSOjIxLEtleVM6MjIsS2V5VDoyMyxLZXlVOjI0LEtleVY6MjUsS2V5VzoyNixLZXlYOjI3LEtleVk6MjgsS2V5WjoyOSxEaWdpdDE6MzAsRGlnaXQyOjMxLERpZ2l0MzozMixEaWdpdDQ6MzMsRGlnaXQ1OjM0LERpZ2l0NjozNSxEaWdpdDc6MzYsRGlnaXQ4OjM3LERpZ2l0OTozOCxEaWdpdDA6MzksRW50ZXI6NDAsRXNjYXBlOjQxLEJhY2tzcGFjZTo0MixUYWI6NDMsU3BhY2U6NDQsTWludXM6NDUsRXF1YWw6NDYsQnJhY2tldExlZnQ6NDcsQnJhY2tldFJpZ2h0OjQ4LEJhY2tzbGFzaDo0OSxTZW1pY29sb246NTEsUXVvdGU6NTIsQmFja3F1b3RlOjUzLENvbW1hOjU0LFBlcmlvZDo1NSxTbGFzaDo1NixDYXBzTG9jazo1NyxGMTo1OCxGMjo1OSxGMzo2MCxGNDo2MSxGNTo2MixGNjo2MyxGNzo2NCxGODo2NSxGOTo2NixGMTA6NjcsRjExOjY4LEYxMjo2OSxQcmludFNjcmVlbjo3MCxTY3JvbGxMb2NrOjcxLFBhdXNlOjcyLEluc2VydDo3MyxIb21lOjc0LFBhZ2VVcDo3NSxEZWxldGU6NzYsRW5kOjc3LFBhZ2VEb3duOjc4LEFycm93UmlnaHQ6NzksQXJyb3dMZWZ0OjgwLEFycm93RG93bjo4MSxBcnJvd1VwOjgyLE51bUxvY2s6ODMsTnVtcGFkRGl2aWRlOjg0LE51bXBhZE11bHRpcGx5Ojg1LE51bXBhZFN1YnRyYWN0Ojg2LE51bXBhZEFkZDo4NyxOdW1wYWRFbnRlcjo4OCxOdW1wYWQxOjg5LE51bXBhZDI6OTAsTnVtcGFkMzo5MSxOdW1wYWQ0OjkyLE51bXBhZDU6OTMsTnVtcGFkNjo5NCxOdW1wYWQ3Ojk1LE51bXBhZDg6OTYsTnVtcGFkOTo5NyxOdW1wYWQwOjk4LE51bXBhZERlY2ltYWw6OTksQ29udHJvbExlZnQ6MjI0LFNoaWZ0TGVmdDoyMjUsQWx0TGVmdDoyMjYsTWV0YUxlZnQ6MjI3LENvbnRyb2xSaWdodDoyMjgsU2hpZnRSaWdodDoyMjksQWx0UmlnaHQ6MjMwLE1ldGFSaWdodDoyMzF9O2Z1bmN0aW9uIEU3KEMpe3JldHVybiBUN1tDXT8/bnVsbH1mdW5jdGlvbiByMShDKXtsZXQgSj13aW5kb3cuX19TSU1fUFJFVklFV19fPy5iYXNlUGF0aD8/KHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5yZXBsYWNlKC9cLyskLywiIil8fCIvIik7cmV0dXJuIEo9PT0iLyI/YC8ke0N9YDpgJHtKfS8ke0N9YH1mdW5jdGlvbiBGOChDKXtyZXR1cm4gQz8uZXJyb3JzPy5pbmNsdWRlcyhnMyk/PyExfWZ1bmN0aW9uIEQ4KHtzaXplOkM9MTgsc3Ryb2tlV2lkdGg6Wj0yfSl7cmV0dXJuIHEoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6QyxoZWlnaHQ6Qyx2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDpaLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltxKCJwYXRoIix7ZDoiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCJ9KSxxKCJwYXRoIix7ZDoiTTMgM3Y1aDUifSldfSl9ZnVuY3Rpb24gdzcoQyl7bGV0W1osSl09SShudWxsKSxbWCxHXT1JKCJBWCBvZmYiKTtyZXR1cm4geSgoKT0+e2lmKCFDKXtKKG51bGwpLEcoIkFYIG9mZiIpO3JldHVybn1KKG51bGwpLEcoIkFYIHdhaXRpbmciKTtsZXQgUT1uZXcgRXZlbnRTb3VyY2UoQyk7cmV0dXJuIFEub25tZXNzYWdlPSgkKT0+e3RyeXtsZXQgWT1KU09OLnBhcnNlKCQuZGF0YSk7SihZKSxHKEY4KFkpPyJBWCB1bmF2YWlsYWJsZSI6YCR7WS5lbGVtZW50cy5sZW5ndGh9IEFYIGVsZW1lbnRzYCl9Y2F0Y2h7RygiQVggcGFyc2UgZXJyb3IiKX19LFEuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCgpPT57RygiQVggcmVjb25uZWN0aW5nIil9KSwoKT0+US5jbG9zZSgpfSxbQ10pLHtzbmFwc2hvdDpaLHN0YXR1czpYfX12YXIgVTg9ajEoe3NuYXBzaG90Om51bGwsc3RhdHVzOiJBWCBvZmYifSksTzg9ajEobnVsbCk7ZnVuY3Rpb24gaTUoKXtyZXR1cm4gcDEoVTgpfWZ1bmN0aW9uIHo4KCl7bGV0IEM9cDEoTzgpO2lmKCFDKXRocm93IEVycm9yKCJBWCBzZWxlY3Rpb24gY29udGV4dCBpcyB1bmF2YWlsYWJsZSIpO3JldHVybiBDfWZ1bmN0aW9uIFM3KHtlbmRwb2ludDpDLGNoaWxkcmVuOlp9KXtsZXR7c25hcHNob3Q6SixzdGF0dXM6WH09dzcoQyksW0csUV09SShudWxsKSxbJCxZXT1JKG51bGwpO3koKCk9PntpZighQylRKG51bGwpLFkobnVsbCl9LFtDXSk7bGV0IF89RTEoKCk9Pih7c25hcHNob3Q6SixzdGF0dXM6WH0pLFtKLFhdKSxWPUUxKCgpPT4oe2hpZ2hsaWdodGVkS2V5Okcsc2VsZWN0ZWRLZXk6JCxzZXRIaWdobGlnaHRlZEtleTpRLHNldFNlbGVjdGVkS2V5Oll9KSxbRywkXSk7cmV0dXJuIHEoVTguUHJvdmlkZXIse3ZhbHVlOl8sY2hpbGRyZW46cShPOC5Qcm92aWRlcix7dmFsdWU6VixjaGlsZHJlbjpafSl9KX1hc3luYyBmdW5jdGlvbiBPMShDKXtyZXR1cm4oYXdhaXQgZmV0Y2gocjEoImV4ZWMiKSx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe2NvbW1hbmQ6Q30pfSkpLmpzb24oKX1mdW5jdGlvbiBiNyhDLFope2xldFtKLFhdPUkoW10pLFtHLFFdPUkobnVsbCksWyQsWV09SSghMSksXz1qKGFzeW5jKCk9PntpZighQylyZXR1cm47WSghMCksUShudWxsKTt0cnl7bGV0IFY9YXdhaXQgZmV0Y2goQyx7Y2FjaGU6Im5vLXN0b3JlIn0pLEI9YXdhaXQgVi5qc29uKCk7aWYoIVYub2t8fEIuZXJyb3IpdGhyb3cgRXJyb3IoQi5lcnJvcnx8IkZhaWxlZCB0byBsaXN0IFdlYktpdCB0YXJnZXRzIik7WChCLnRhcmdldHM/P1tdKX1jYXRjaChWKXtRKFYgaW5zdGFuY2VvZiBFcnJvcj9WLm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBXZWJLaXQgRGV2VG9vbHMiKX1maW5hbGx5e1koITEpfX0sW0NdKTtyZXR1cm4geSgoKT0+e2lmKCFaKXJldHVybjtfKCk7bGV0IFY9c2V0SW50ZXJ2YWwoKCk9PnZvaWQgXygpLDI1MDApO3JldHVybigpPT5jbGVhckludGVydmFsKFYpfSxbWixfXSkse3RhcmdldHM6SixlcnJvcjpHLGxvYWRpbmc6JCxyZWZyZXNoOl99fWZ1bmN0aW9uIFI3KEMpe2xldCBaPUMuY29udGVudERvY3VtZW50O2lmKCFaKXJldHVybjtsZXQgSj0oKT0+e2xldCBRPVtaXTt3aGlsZShRLmxlbmd0aCl7bGV0ICQ9US5wb3AoKSxZPSQucXVlcnlTZWxlY3RvckFsbCgiW2FyaWEtbGFiZWxdLFt0aXRsZV0iKTtmb3IobGV0IF8gb2YgWSl7bGV0IFY9Xy5nZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiKXx8Xy50aXRsZXx8IiI7aWYoL150b2dnbGUgc2NyZWVuY2FzdCQvaS50ZXN0KFYpKXJldHVybiBffWZvcihsZXQgXyBvZiAkLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKSlpZihfLnNoYWRvd1Jvb3QpUS5wdXNoKF8uc2hhZG93Um9vdCl9cmV0dXJuIG51bGx9LFg9MCxHPSgpPT57WCsrO2xldCBRPUooKTtpZihRJiZRLmdldEF0dHJpYnV0ZSgiYXJpYS1wcmVzc2VkIikhPT0iZmFsc2UiKXtRLmNsaWNrKCk7cmV0dXJufWlmKFg8MjApc2V0VGltZW91dChHLDEwMCl9O0coKX12YXIgUDI9bmV3IE1hcDtmdW5jdGlvbiB5NyhDLFope2xldCBKPWAke0N9OiR7Wn1gLFg9UDIuZ2V0KEopO2lmKFghPT12b2lkIDApcmV0dXJuIFByb21pc2UucmVzb2x2ZShYKTtsZXQgRz1NOChPMSxDLFopLnRoZW4oKFEpPT57bGV0ICQ9US5pY29uRGF0YVVybD8/bnVsbDtyZXR1cm4gUDIuc2V0KEosJCksJH0pLmNhdGNoKCgpPT57cmV0dXJuIFAyLnNldChKLG51bGwpLG51bGx9KTtyZXR1cm4gUDIuc2V0KEosRyksR31mdW5jdGlvbiBqNyhDLFope2xldFtKLFhdPUkoe30pLEc9RTEoKCk9Plouc2xpY2UoKS5zb3J0KCkuam9pbigifCIpLFtaXSk7cmV0dXJuIHkoKCk9PntpZighQylyZXR1cm47bGV0IFE9ITE7Zm9yKGxldCAkIG9mIFope2lmKCEkKWNvbnRpbnVlO2xldCBZPWAke0N9OiR7JH1gLF89UDIuZ2V0KFkpO2lmKHR5cGVvZiBfPT09InN0cmluZyJ8fF89PT1udWxsKXtYKChWKT0+VlskXT09PV8/Vjp7Li4uVixbJF06X30pO2NvbnRpbnVlfXk3KEMsJCkudGhlbigoVik9PntpZihRKXJldHVybjtYKChCKT0+KHsuLi5CLFskXTpWfSkpfSl9cmV0dXJuKCk9PntRPSEwfX0sW0MsR10pLEp9ZnVuY3Rpb24gdDIoQyxaKXtmZXRjaChyMSgiZGV2dG9vbHMvaGlnaGxpZ2h0Iikse21ldGhvZDoiUE9TVCIsaGVhZGVyczp7IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSxib2R5OkpTT04uc3RyaW5naWZ5KHt0YXJnZXRJZDpDLG9uOlp9KSxrZWVwYWxpdmU6ITB9KS5jYXRjaCgoKT0+e30pfWZ1bmN0aW9uIEg4KCl7bGV0IEM9cjEoImRldnRvb2xzL3JlbGVhc2UiKTt0cnl7aWYodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5zZW5kQmVhY29uKXtsZXQgWj1uZXcgQmxvYihbInt9Il0se3R5cGU6ImFwcGxpY2F0aW9uL2pzb24ifSk7aWYobmF2aWdhdG9yLnNlbmRCZWFjb24oQyxaKSlyZXR1cm59fWNhdGNoe31mZXRjaChDLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keToie30iLGtlZXBhbGl2ZTohMH0pLmNhdGNoKCgpPT57fSl9ZnVuY3Rpb24gaDcoe3VkaWQ6Qyx0YXJnZXRzOlosc2VsZWN0ZWQ6SixvblNlbGVjdFRhcmdldDpYLG9uUmVmcmVzaDpHfSl7bGV0IFE9eDMoWiksJD1RLm1hcCgoTCk9PkwuYnVuZGxlSWQpLmZpbHRlcigoTCk9PiEhTCksWT1qNyhDLCQpLFtfLFZdPUkoITEpLFtCLEtdPUkobnVsbCksSD1oKG51bGwpLEY9aChudWxsKTt5KCgpPT57aWYoIV8pcmV0dXJuO2xldCBMPShEKT0+e2lmKCFGLmN1cnJlbnQpcmV0dXJuO2lmKCFGLmN1cnJlbnQuY29udGFpbnMoRC50YXJnZXQpKVYoITEpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixMKX0sW19dKSx5KCgpPT57aWYoXylyZXR1cm47aWYoSC5jdXJyZW50KXQyKEguY3VycmVudCwhMSksSC5jdXJyZW50PW51bGw7SDgoKX0sW19dKSx5KCgpPT57bGV0IEw9KCk9Pkg4KCk7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwYWdlaGlkZSIsTCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsTCksKCk9Pnt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicGFnZWhpZGUiLEwpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJiZWZvcmV1bmxvYWQiLEwpfX0sW10pO2xldCBNPUo/KEoudGl0bGV8fEoudXJsfHxKLmFwcE5hbWV8fCJVbnRpdGxlZCIpLnNsaWNlKDAsOTApOiJTZWxlY3QgdGFyZ2V0IjtyZXR1cm4gcSgiZGl2Iix7cmVmOkYsc3R5bGU6UTEucGlja2VyV3JhcCxjaGlsZHJlbjpbcSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIixvbkNsaWNrOigpPT57VigoTCk9PntpZighTClHKCk7cmV0dXJuIUx9KX0sc3R5bGU6UTEucGlja2VyQnV0dG9uLCJhcmlhLWhhc3BvcHVwIjoibGlzdGJveCIsImFyaWEtZXhwYW5kZWQiOl8sImFyaWEtbGFiZWwiOiJXZWJLaXQgdGFyZ2V0IixjaGlsZHJlbjpbcSgic3BhbiIse3N0eWxlOlExLnBpY2tlckxhYmVsLGNoaWxkcmVuOk19KSxxKCJzdmciLHt3aWR0aDoiMTIiLGhlaWdodDoiMTIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpxKCJwb2x5bGluZSIse3BvaW50czoiNiA5IDEyIDE1IDE4IDkifSl9KV19KSxfJiZxKCJ1bCIse3JvbGU6Imxpc3Rib3giLHN0eWxlOlExLnBpY2tlckxpc3QsY2hpbGRyZW46US5tYXAoKEwpPT57bGV0IEQ9TC5idW5kbGVJZD9ZW0wuYnVuZGxlSWRdOm51bGw7cmV0dXJuIHEoImxpIix7c3R5bGU6UTEucGlja2VyR3JvdXAsY2hpbGRyZW46W3EoImRpdiIse3N0eWxlOlExLnBpY2tlckdyb3VwSGVhZGVyLGNoaWxkcmVuOltEP3EoImltZyIse3NyYzpELGFsdDoiIixzdHlsZTpRMS5waWNrZXJHcm91cEljb25JbWd9KTpxKCJzcGFuIix7c3R5bGU6UTEucGlja2VyR3JvdXBJY29uSW1nLCJhcmlhLWhpZGRlbiI6InRydWUifSkscSgic3BhbiIse3N0eWxlOlExLnBpY2tlckdyb3VwTmFtZSxjaGlsZHJlbjpMLmFwcE5hbWV9KV19KSxxKCJ1bCIse3JvbGU6Imdyb3VwIixzdHlsZTpRMS5waWNrZXJHcm91cExpc3QsY2hpbGRyZW46TC50YXJnZXRzLm1hcCgoTyk9PntsZXQgUD1KPy5pZD09PU8uaWQsRT0hIU8uaW5Vc2VCeU90aGVySW5zcGVjdG9yJiYhUCx3PShPLnRpdGxlfHxPLnVybHx8Ty5hcHBOYW1lfHwiVW50aXRsZWQiKS5zbGljZSgwLDkwKTtyZXR1cm4gcSgibGkiLHtyb2xlOiJvcHRpb24iLCJhcmlhLXNlbGVjdGVkIjpQLCJhcmlhLWRpc2FibGVkIjpFLHRhYkluZGV4OkU/LTE6MCx0aXRsZTpFPyJBbHJlYWR5IGJlaW5nIGluc3BlY3RlZCBieSBhbm90aGVyIGRlYnVnZ2VyIjp2b2lkIDAsb25Nb3VzZUVudGVyOigpPT57aWYoRSlyZXR1cm47aWYoSC5jdXJyZW50JiZILmN1cnJlbnQhPT1PLmlkKXQyKEguY3VycmVudCwhMSk7SC5jdXJyZW50PU8uaWQsSyhPLmlkKSx0MihPLmlkLCEwKX0sb25Nb3VzZUxlYXZlOigpPT57aWYoSC5jdXJyZW50PT09Ty5pZCl0MihPLmlkLCExKSxILmN1cnJlbnQ9bnVsbDtLKChmKT0+Zj09PU8uaWQ/bnVsbDpmKX0sb25DbGljazooKT0+e2lmKEUpcmV0dXJuO1goTy5pZCksVighMSl9LHN0eWxlOnsuLi5RMS5waWNrZXJJdGVtLC4uLlA/UTEucGlja2VySXRlbVNlbGVjdGVkOm51bGwsLi4uQj09PU8uaWQmJiFFP1ExLnBpY2tlckl0ZW1Ib3ZlcmVkOm51bGwsLi4uRT9RMS5waWNrZXJJdGVtRGlzYWJsZWQ6bnVsbH0sY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTpRMS5waWNrZXJJdGVtVGl0bGUsY2hpbGRyZW46d30pLE8udXJsJiZPLnVybCE9PSJhYm91dDpibGFuayImJnEoInNwYW4iLHtzdHlsZTpRMS5waWNrZXJJdGVtVXJsLGNoaWxkcmVuOk8udXJsfSldfSxPLmlkKX0pfSldfSxMLmtleSl9KX0pXX0pfWZ1bmN0aW9uIHY3KEMpe3RyeXtsZXQgWj1KU09OLnBhcnNlKEMpLEo9W107Zm9yKGxldFtYLEddb2YgT2JqZWN0LmVudHJpZXMoWi5kZXZpY2VzPz97fSkpe2xldCBRPVgucmVwbGFjZSgvXmNvbVwuYXBwbGVcLkNvcmVTaW11bGF0b3JcLlNpbVJ1bnRpbWVcLi8sIiIpLnJlcGxhY2UoLy0vZywiLiIpO2ZvcihsZXQgJCBvZiBHKWlmKCQuaXNBdmFpbGFibGUpSi5wdXNoKHt1ZGlkOiQudWRpZCxuYW1lOiQubmFtZSxzdGF0ZTokLnN0YXRlLHJ1bnRpbWU6UX0pfXJldHVybiBKfWNhdGNoe3JldHVybltdfX1mdW5jdGlvbiBaNShDKXtsZXQgWj1DLnRvTG93ZXJDYXNlKCk7aWYoWi5pbmNsdWRlcygiaXBob25lIikpcmV0dXJuIDA7aWYoWi5pbmNsdWRlcygiaXBhZCIpKXJldHVybiAxO2lmKFouaW5jbHVkZXMoIndhdGNoIikpcmV0dXJuIDI7aWYoWi5pbmNsdWRlcygidmlzaW9uIikpcmV0dXJuIDM7cmV0dXJuIDR9ZnVuY3Rpb24gSjUoQyl7bGV0IFo9Qy50b0xvd2VyQ2FzZSgpO2lmKFouc3RhcnRzV2l0aCgiaW9zIikpcmV0dXJuIDA7aWYoWi5zdGFydHNXaXRoKCJpcGFkb3MiKSlyZXR1cm4gMTtpZihaLnN0YXJ0c1dpdGgoIndhdGNob3MiKSlyZXR1cm4gMjtpZihaLnN0YXJ0c1dpdGgoInZpc2lvbm9zIil8fFouc3RhcnRzV2l0aCgieHJvcyIpKXJldHVybiAzO3JldHVybiA0fWZ1bmN0aW9uIG03KHtkZXZpY2VzOkMsc2VsZWN0ZWRVZGlkOlosbG9hZGluZzpKLGVycm9yOlgsc3RvcHBpbmdVZGlkczpHLG9uUmVmcmVzaDpRLG9uU2VsZWN0OiQsb25TdG9wOlksdHJpZ2dlcjpffSl7bGV0W1YsQl09SSghMSksSz1oKG51bGwpO3koKCk9PntpZighVilyZXR1cm47bGV0IEw9KEQpPT57aWYoIUsuY3VycmVudD8uY29udGFpbnMoRC50YXJnZXQpKUIoITEpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsTCksKCk9PndpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLEwpfSxbVl0pO2xldCBIPW5ldyBNYXA7Zm9yKGxldCBMIG9mIEMpe2lmKEwudWRpZD09PVopY29udGludWU7bGV0IEQ9SC5nZXQoTC5ydW50aW1lKTtpZighRClEPVtdLEguc2V0KEwucnVudGltZSxEKTtELnB1c2goTCl9Zm9yKGxldCBMIG9mIEgudmFsdWVzKCkpTC5zb3J0KChELE8pPT5aNShELm5hbWUpLVo1KE8ubmFtZSl8fEQubmFtZS5sb2NhbGVDb21wYXJlKE8ubmFtZSkpO2xldCBGPVsuLi5ILmVudHJpZXMoKV0uc29ydCgoW0xdLFtEXSk9Pko1KEwpLUo1KEQpfHxMLmxvY2FsZUNvbXBhcmUoRCkpLE09Qy5maW5kKChMKT0+TC51ZGlkPT09Wik/P251bGw7cmV0dXJuIHEoImRpdiIse3JlZjpLLHN0eWxlOntwb3NpdGlvbjoicmVsYXRpdmUifSxjaGlsZHJlbjpbcSgiZGl2Iix7b25DbGljazooKT0+e2lmKCFWKVEoKTtCKChMKT0+IUwpfSxjaGlsZHJlbjpffSksViYmcSgiZGl2Iix7c3R5bGU6SDYsY2hpbGRyZW46W3EoImRpdiIse3N0eWxlOkE4LGNoaWxkcmVuOltxKCJzcGFuIix7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwfSxjaGlsZHJlbjoiU2ltdWxhdG9ycyJ9KSxxKCJidXR0b24iLHtvbkNsaWNrOihMKT0+e0wuc3RvcFByb3BhZ2F0aW9uKCksUSgpfSxkaXNhYmxlZDpKLHN0eWxlOkk4LGNoaWxkcmVuOko/Ii4uLiI6IlJlZnJlc2gifSldfSksWCYmcSgiZGl2Iix7c3R5bGU6ZDUsY2hpbGRyZW46WH0pLE0mJnEoSjEse2NoaWxkcmVuOltxKCJkaXYiLHtzdHlsZTp7Li4uYTUsY29sb3I6IiNhNWI0ZmMifSxjaGlsZHJlbjpbcSgic3BhbiIse3N0eWxlOmM1KE0uc3RhdGU9PT0iQm9vdGVkIj8iIzRhZGU4MCI6IiM0NDQiKX0pLHEoInNwYW4iLHtzdHlsZTp7ZmxleDoxfSxjaGlsZHJlbjpNLm5hbWV9KV19KSxxKCJkaXYiLHtzdHlsZTpONn0pXX0pLEMubGVuZ3RoPT09MCYmIUomJiFYJiZxKCJkaXYiLHtzdHlsZTpUOCxjaGlsZHJlbjoiTm8gYXZhaWxhYmxlIHNpbXVsYXRvcnMgZm91bmQifSksRi5tYXAoKFtMLERdKT0+cSgiZGl2Iix7Y2hpbGRyZW46W3EoImRpdiIse3N0eWxlOkU4LGNoaWxkcmVuOkx9KSxELm1hcCgoTyk9PntsZXQgUD1HLmhhcyhPLnVkaWQpLEU9Ty5zdGF0ZT09PSJCb290ZWQiO3JldHVybiBxKCJkaXYiLHtzdHlsZTphNSxvbk1vdXNlRW50ZXI6KHcpPT53LmN1cnJlbnRUYXJnZXQuc3R5bGUuYmFja2dyb3VuZD0icmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsb25Nb3VzZUxlYXZlOih3KT0+dy5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9InRyYW5zcGFyZW50IixvbkNsaWNrOigpPT57JChPKSxCKCExKX0sY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTpjNShFPyIjNGFkZTgwIjoiIzQ0NCIpfSkscSgic3BhbiIse3N0eWxlOntmbGV4OjF9LGNoaWxkcmVuOk8ubmFtZX0pLEUmJnEoInNwYW4iLHtyb2xlOiJidXR0b24iLG9uQ2xpY2s6KHcpPT57aWYody5zdG9wUHJvcGFnYXRpb24oKSwhUClZKE8udWRpZCl9LHN0eWxlOntmb250U2l6ZToxMCxwYWRkaW5nOiIxcHggNnB4Iixib3JkZXJSYWRpdXM6NCxjb2xvcjpQPyIjODg4IjoiI2Y4NzE3MSIsYmFja2dyb3VuZDpQPyJ0cmFuc3BhcmVudCI6InJnYmEoMjQ4LDExMywxMTMsMC4xKSIsY3Vyc29yOlA/ImRlZmF1bHQiOiJwb2ludGVyIn0sY2hpbGRyZW46UD8iU3RvcHBpbmcuLi4iOiJTdG9wIn0pXX0sTy51ZGlkKX0pXX0sTCkpXX0pXX0pfWZ1bmN0aW9uIGM1KEMpe3JldHVybnt3aWR0aDo2LGhlaWdodDo2LGJvcmRlclJhZGl1czoiNTAlIixiYWNrZ3JvdW5kOkMsZmxleFNocmluazowfX12YXIgZzc9bmV3IFNldChbImltYWdlL2pwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9naWYiLCJpbWFnZS9oZWljIiwiaW1hZ2UvaGVpZiIsImltYWdlL3dlYnAiLCJ2aWRlby9tcDQiLCJ2aWRlby9xdWlja3RpbWUiXSkseDU9MjYyMTQ0LHg3PTUyNDI4ODAwMDtmdW5jdGlvbiBmNyhDKXtpZihyNShDKT09PSJpcGEiKXJldHVybiJpcGEiO2lmKGc3LmhhcyhDLnR5cGUpKXJldHVybiJtZWRpYSI7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcDcoQyl7bGV0IFo9bmV3IFVpbnQ4QXJyYXkoQyksSj0iIjtmb3IobGV0IFg9MDtYPFoubGVuZ3RoO1grKylKKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFpbWF0pO3JldHVybiBidG9hKEopfWZ1bmN0aW9uIHI1KEMpe2xldCBaPUMubmFtZSxKPVoubGFzdEluZGV4T2YoIi4iKTtpZihKPj0wKXJldHVybiBaLnNsaWNlKEorMSkudG9Mb3dlckNhc2UoKTtpZihDLnR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikpcmV0dXJuIm1wNCI7cmV0dXJuImpwZyJ9YXN5bmMgZnVuY3Rpb24gdTcoQyxaLEosWCxHKXtpZihDLnNpemU+eDcpdGhyb3cgRXJyb3IoIkZpbGUgdG9vIGxhcmdlIChtYXggNTAwTUIpIik7bGV0IFE9Wj09PSJpcGEiPyJpcGEiOnI1KEMpLFk9YC90bXAvJHtaPT09ImlwYSI/InNlcnZlLXNpbS1pbnN0YWxsIjoic2VydmUtc2ltLXVwbG9hZCJ9LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX0uJHtRfWA7dHJ5e0coMCk7bGV0IF89YXdhaXQgQy5hcnJheUJ1ZmZlcigpLFY9cDcoXyksQj0wO2ZvcihsZXQgRj0wO0Y8Vi5sZW5ndGg7Ris9eDUpe2xldCBNPVYuc2xpY2UoRixGK3g1KSxEPWF3YWl0IEooYGJhc2ggLWMgJ2VjaG8gJHtNfSB8IGJhc2U2NCAtZCAke0Y9PT0wPyI+IjoiPj4ifSAke1l9J2ApO2lmKEQuZXhpdENvZGUhPT0wKXRocm93IEVycm9yKEQuc3RkZXJyfHxgV3JpdGUgZmFpbGVkIChleGl0ICR7RC5leGl0Q29kZX0pYCk7bGV0IE89TWF0aC5taW4oRit4NSxWLmxlbmd0aCksUD1NYXRoLmZsb29yKE8vVi5sZW5ndGgqMTAwKTtpZihQIT09QilCPVAsRyhPL1YubGVuZ3RoKX1HKG51bGwpO2xldCBLPVo9PT0iaXBhIj9geGNydW4gc2ltY3RsIGluc3RhbGwgJHtYfSAke1l9YDpgeGNydW4gc2ltY3RsIGFkZG1lZGlhICR7WH0gJHtZfWAsSD1hd2FpdCBKKEspO2lmKEguZXhpdENvZGUhPT0wKXtsZXQgRj1aPT09ImlwYSI/Imluc3RhbGwiOiJhZGRtZWRpYSI7dGhyb3cgRXJyb3IoSC5zdGRlcnJ8fGAke0Z9IGZhaWxlZCAoZXhpdCAke0guZXhpdENvZGV9KWApfX1maW5hbGx5e0ooYGJhc2ggLWMgJ3JtIC1mICR7WX0nYCkuY2F0Y2goKCk9Pnt9KX19ZnVuY3Rpb24gYzcoKXtsZXRbQyxaXT1JKFtdKSxKPWooKFEsJCk9PntsZXQgWT1jcnlwdG8ucmFuZG9tVVVJRCgpO3JldHVybiBaKChfKT0+Wy4uLl8se2lkOlksbmFtZTpRLGtpbmQ6JCxzdGF0dXM6InVwbG9hZGluZyIscHJvZ3Jlc3M6MH1dKSxZfSxbXSksWD1qKChRLCQpPT57aWYoWigoWSk9PlkubWFwKChfKT0+Xy5pZD09PVE/ey4uLl8sLi4uJH06XykpLCQuc3RhdHVzPT09InN1Y2Nlc3MifHwkLnN0YXR1cz09PSJlcnJvciIpc2V0VGltZW91dCgoKT0+e1ooKFkpPT5ZLmZpbHRlcigoXyk9Pl8uaWQhPT1RKSl9LDMwMDApfSxbXSksRz1qKChRLCQpPT57WigoWSk9PlkubWFwKChfKT0+Xy5pZD09PVE/ey4uLl8scHJvZ3Jlc3M6JH06XykpfSxbXSk7cmV0dXJue3RvYXN0czpDLGFkZDpKLHVwZGF0ZTpYLHNldFByb2dyZXNzOkd9fWZ1bmN0aW9uIGw3KHtleGVjOkMsdWRpZDpaLGVuYWJsZWQ6SixvblVwbG9hZFN0YXJ0Olgsb25VcGxvYWRQcm9ncmVzczpHLG9uVXBsb2FkRW5kOlEsb25VbnN1cHBvcnRlZDokfSl7bGV0W1ksX109SSghMSksVj1oKDApLEI9aihhc3luYyhNKT0+e2lmKE0ucHJldmVudERlZmF1bHQoKSxNLnN0b3BQcm9wYWdhdGlvbigpLFYuY3VycmVudD0wLF8oITEpLCFKfHwhWilyZXR1cm47bGV0IEw9QXJyYXkuZnJvbShNLmRhdGFUcmFuc2Zlci5maWxlcyk7aWYoTC5sZW5ndGg9PT0wKXJldHVybjtmb3IobGV0IEQgb2YgTCl7bGV0IE89ZjcoRCk7aWYoIU8peyQoRCk7Y29udGludWV9bGV0IFA9WChELm5hbWUsTyk7dTcoRCxPLEMsWiwoRSk9PkcoUCxFKSkudGhlbigoKT0+UShQLCEwKSkuY2F0Y2goKEUpPT5RKFAsITEsRSBpbnN0YW5jZW9mIEVycm9yP0UubWVzc2FnZToiVXBsb2FkIGZhaWxlZCIpKX19LFtKLFosQyxYLEcsUSwkXSksSz1qKChNKT0+e2lmKE0ucHJldmVudERlZmF1bHQoKSxKKU0uZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9ImNvcHkifSxbSl0pLEg9aigoTSk9PntpZihNLnByZXZlbnREZWZhdWx0KCksIUopcmV0dXJuO2lmKFYuY3VycmVudCsrLFYuY3VycmVudD09PTEpXyghMCl9LFtKXSksRj1qKChNKT0+e2lmKE0ucHJldmVudERlZmF1bHQoKSxWLmN1cnJlbnQtLSxWLmN1cnJlbnQ8PTApVi5jdXJyZW50PTAsXyghMSl9LFtdKTtyZXR1cm57aXNEcmFnT3ZlcjpZLGRyb3Bab25lUHJvcHM6e29uRHJhZ092ZXI6SyxvbkRyYWdFbnRlcjpILG9uRHJhZ0xlYXZlOkYsb25Ecm9wOkJ9fX1mdW5jdGlvbiBoMShDKXtyZXR1cm5gJyR7Qy5yZXBsYWNlKC8nL2csIidcXCcnIil9J2B9YXN5bmMgZnVuY3Rpb24gTTgoQyxaLEope2xldCBYPWF3YWl0IEMoYHhjcnVuIHNpbWN0bCBnZXRfYXBwX2NvbnRhaW5lciAke1p9ICR7aDEoSil9IGFwcGApO2lmKFguZXhpdENvZGUhPT0wKXJldHVybntlcnJvcjpYLnN0ZGVyci50cmltKCl8fCJBcHAgbm90IGZvdW5kIG9uIHNpbXVsYXRvciJ9O2xldCBHPVguc3Rkb3V0LnRyaW0oKTtpZighRylyZXR1cm57ZXJyb3I6IkVtcHR5IGFwcCBwYXRoIn07bGV0IFE9YXdhaXQgQyhgcGx1dGlsIC1jb252ZXJ0IGpzb24gLW8gLSAke2gxKEcrIi9JbmZvLnBsaXN0Iil9YCksJD17fTtpZihRLmV4aXRDb2RlPT09MCl0cnl7JD1KU09OLnBhcnNlKFEuc3Rkb3V0KX1jYXRjaHt9bGV0IFksVj0oJD8uQ0ZCdW5kbGVJY29ucz8uQ0ZCdW5kbGVQcmltYXJ5SWNvbj8/JD8uWyJDRkJ1bmRsZUljb25zfmlwYWQiXT8uQ0ZCdW5kbGVQcmltYXJ5SWNvbik/LkNGQnVuZGxlSWNvbkZpbGVzPz8kPy5DRkJ1bmRsZUljb25GaWxlcztpZihWJiZWLmxlbmd0aD4wKVk9VltWLmxlbmd0aC0xXTtlbHNlIGlmKHR5cGVvZiAkPy5DRkJ1bmRsZUljb25GaWxlPT09InN0cmluZyIpWT0kLkNGQnVuZGxlSWNvbkZpbGU7bGV0IEI9bnVsbDtpZihZKXtsZXQgSz1bYCR7WX1AM3gucG5nYCxgJHtZfUAyeC5wbmdgLGAke1l9LnBuZ2AsYCR7WX02MHg2MEAzeC5wbmdgLGAke1l9NjB4NjBAMngucG5nYF0sRj0oYXdhaXQgQyhgYmFzaCAtYyAke2gxKEsubWFwKChNKT0+YFsgLWYgJHtoMShHKyIvIitNKX0gXSAmJiBlY2hvICR7aDEoRysiLyIrTSl9ICYmIGV4aXQgMGApLmpvaW4oIjsgIikrIjsgZXhpdCAxIil9YCkpLnN0ZG91dC50cmltKCk7aWYoRil7bGV0IE09YXdhaXQgQyhgYmFzZTY0IC1pICR7aDEoRil9YCk7aWYoTS5leGl0Q29kZT09PTApQj1gZGF0YTppbWFnZS9wbmc7YmFzZTY0LCR7TS5zdGRvdXQucmVwbGFjZSgvXHMrL2csIiIpfWB9fXJldHVybnthcHBQYXRoOkcsZGlzcGxheU5hbWU6JC5DRkJ1bmRsZURpc3BsYXlOYW1lPz8kLkNGQnVuZGxlTmFtZSxzaG9ydFZlcnNpb246JC5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZyxidW5kbGVWZXJzaW9uOiQuQ0ZCdW5kbGVWZXJzaW9uLG1pbk9TOiQuTWluaW11bU9TVmVyc2lvbixleGVjdXRhYmxlOiQuQ0ZCdW5kbGVFeGVjdXRhYmxlLGljb25EYXRhVXJsOkJ9fWZ1bmN0aW9uIGQ3KHt1ZGlkOkMsY3VycmVudEFwcDpafSl7bGV0W0osWF09SShudWxsKTtpZih5KCgpPT57aWYoIVope1gobnVsbCk7cmV0dXJufWxldCBHPSExO3JldHVybiBYKHtidW5kbGVJZDpaLmJ1bmRsZUlkLGlzUmVhY3ROYXRpdmU6Wi5pc1JlYWN0TmF0aXZlLHBpZDpaLnBpZCxsb2FkaW5nOiEwfSksTTgoTzEsQyxaLmJ1bmRsZUlkKS50aGVuKChRKT0+e2lmKEcpcmV0dXJuO1goe2J1bmRsZUlkOlouYnVuZGxlSWQsaXNSZWFjdE5hdGl2ZTpaLmlzUmVhY3ROYXRpdmUscGlkOloucGlkLGxvYWRpbmc6ITEsLi4uUX0pfSksKCk9PntHPSEwfX0sW0MsWj8uYnVuZGxlSWQsWj8ucGlkLFo/LmlzUmVhY3ROYXRpdmVdKSwhSilyZXR1cm4gcSgiZGl2Iix7c3R5bGU6Yy5lbXB0eSxjaGlsZHJlbjoiV2FpdGluZyBmb3IgYW4gYXBwIHRvIGNvbWUgdG8gdGhlIGZvcmVncm91bmTigKYifSk7cmV0dXJuIHEoImRpdiIse3N0eWxlOmMuc2VjdGlvbixjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6Yy5hcHBIZWFkZXIsY2hpbGRyZW46W0ouaWNvbkRhdGFVcmw/cSgiaW1nIix7c3JjOkouaWNvbkRhdGFVcmwsc3R5bGU6Yy5hcHBJY29uLGFsdDoiIn0pOnEoImRpdiIse3N0eWxlOnsuLi5jLmFwcEljb24sYmFja2dyb3VuZDoiIzJhMmEyYyJ9fSkscSgiZGl2Iix7c3R5bGU6e21pbldpZHRoOjAsZmxleDoxfSxjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6Yy5hcHBOYW1lLGNoaWxkcmVuOltKLmRpc3BsYXlOYW1lPz9KLmJ1bmRsZUlkLEoubG9hZGluZyYmcSgic3BhbiIse3N0eWxlOmMuc3Bpbm5lcixjaGlsZHJlbjoiIOKApiJ9KV19KSxxKCJkaXYiLHtzdHlsZTpjLmFwcEJ1bmRsZSx0aXRsZTpKLmJ1bmRsZUlkLGNoaWxkcmVuOkouYnVuZGxlSWR9KV19KV19KSxKLmVycm9yJiZxKCJkaXYiLHtzdHlsZTpjLmVycm9yLGNoaWxkcmVuOkouZXJyb3J9KSxxKCJkbCIse3N0eWxlOmMuZGwsY2hpbGRyZW46W3EoVjIse2xhYmVsOiJWZXJzaW9uIix2YWx1ZTpKLnNob3J0VmVyc2lvbj9gJHtKLnNob3J0VmVyc2lvbn0gKCR7Si5idW5kbGVWZXJzaW9uPz8i4oCUIn0pYDpKLmxvYWRpbmc/IuKApiI6IuKAlCJ9KSxxKFYyLHtsYWJlbDoiTWluIGlPUyIsdmFsdWU6Si5taW5PUz8/KEoubG9hZGluZz8i4oCmIjoi4oCUIil9KSxxKFYyLHtsYWJlbDoiRXhlY3V0YWJsZSIsdmFsdWU6Si5leGVjdXRhYmxlPz8oSi5sb2FkaW5nPyLigKYiOiLigJQiKX0pLHEoVjIse2xhYmVsOiJQSUQiLHZhbHVlOkoucGlkIT1udWxsP1N0cmluZyhKLnBpZCk6IuKAlCJ9KSxKLmlzUmVhY3ROYXRpdmUmJnEoVjIse2xhYmVsOiJSZWFjdCBOYXRpdmUiLHZhbHVlOiJZZXMifSkscShWMix7bGFiZWw6IkFwcCBwYXRoIix2YWx1ZTpKLmFwcFBhdGg/PyhKLmxvYWRpbmc/IuKApiI6IuKAlCIpLG1vbm86ITAsYWN0aW9uOkouYXBwUGF0aD97dGl0bGU6IlJldmVhbCBpbiBGaW5kZXIiLG9uQ2xpY2s6KCk9PntPMShgb3BlbiAtUiAke2gxKEouYXBwUGF0aCl9YCl9LGljb246cSgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi4yIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbcSgibGluZSIse3gxOiI3Iix5MToiMTciLHgyOiIxNyIseTI6IjcifSkscSgicG9seWxpbmUiLHtwb2ludHM6IjEwIDcgMTcgNyAxNyAxNCJ9KV19KX06dm9pZCAwfSldfSldfSl9ZnVuY3Rpb24gVjIoe2xhYmVsOkMsdmFsdWU6Wixtb25vOkosYWN0aW9uOlh9KXtsZXRbRyxRXT1JKCExKTtyZXR1cm4gcSgiZGl2Iix7c3R5bGU6Yy5yb3csb25Nb3VzZUVudGVyOigpPT5RKCEwKSxvbk1vdXNlTGVhdmU6KCk9PlEoITEpLGNoaWxkcmVuOltxKCJkdCIse3N0eWxlOmMuZHQsY2hpbGRyZW46Q30pLHEoImRkIix7c3R5bGU6ey4uLmMuZGQsZm9udEZhbWlseTpKPyJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSI6dm9pZCAwLGZvbnRTaXplOko/MTE6MTIscG9zaXRpb246InJlbGF0aXZlIn0sdGl0bGU6WixjaGlsZHJlbjpbWixYJiZxKCJkaXYiLHtzdHlsZTp7Li4uYy5yb3dBY3Rpb25XcmFwLG9wYWNpdHk6Rz8xOjAsdHJhbnNmb3JtOkc/InRyYW5zbGF0ZVgoMCkiOiJ0cmFuc2xhdGVYKDRweCkiLHBvaW50ZXJFdmVudHM6Rz8iYXV0byI6Im5vbmUifSxjaGlsZHJlbjpxKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6WC5vbkNsaWNrLHRpdGxlOlgudGl0bGUsImFyaWEtbGFiZWwiOlgudGl0bGUsc3R5bGU6Yy5yb3dBY3Rpb24sY2hpbGRyZW46WC5pY29ufSl9KV19KV19KX12YXIgYTc9W3trZXk6ImNhbWVyYSIsbGFiZWw6IkNhbWVyYSJ9LHtrZXk6Im1pY3JvcGhvbmUiLGxhYmVsOiJNaWNyb3Bob25lIn0se2tleToicGhvdG9zIixsYWJlbDoiUGhvdG9zIn0se2tleToicGhvdG9zLWFkZCIsbGFiZWw6IkFkZCB0byBQaG90b3MifSx7a2V5OiJjb250YWN0cyIsbGFiZWw6IkNvbnRhY3RzIn0se2tleToiY2FsZW5kYXIiLGxhYmVsOiJDYWxlbmRhciJ9LHtrZXk6InJlbWluZGVycyIsbGFiZWw6IlJlbWluZGVycyJ9LHtrZXk6ImxvY2F0aW9uIixsYWJlbDoiTG9jYXRpb24ifSx7a2V5OiJsb2NhdGlvbi1hbHdheXMiLGxhYmVsOiJMb2NhdGlvbiAoQWx3YXlzKSJ9LHtrZXk6Im1vdGlvbiIsbGFiZWw6Ik1vdGlvbiJ9LHtrZXk6Im1lZGlhLWxpYnJhcnkiLGxhYmVsOiJNZWRpYSBMaWJyYXJ5In0se2tleToic2lyaSIsbGFiZWw6IlNpcmkifV07ZnVuY3Rpb24gbzcoe3VkaWQ6QyxidW5kbGVJZDpafSl7bGV0W0osWF09SSh7fSksW0csUV09SShudWxsKSxbJCxZXT1JKG51bGwpLFtfLFZdPUkoITEpO3koKCk9PntYKHt9KSxZKG51bGwpfSxbWl0pO2xldCBCPWooYXN5bmMoSCxGKT0+e2lmKCFaKXJldHVybjtsZXQgTT1gJHtIfToke0Z9YDtRKE0pLFkobnVsbCk7dHJ5e2xldCBMPWF3YWl0IE8xKGB4Y3J1biBzaW1jdGwgcHJpdmFjeSAke0N9ICR7Rn0gJHtIfSAke2gxKFopfWApO2lmKEwuZXhpdENvZGUhPT0wKXtZKEwuc3RkZXJyLnRyaW0oKXx8YHNpbWN0bCBwcml2YWN5IGZhaWxlZCAoZXhpdCAke0wuZXhpdENvZGV9KWApO3JldHVybn1YKChEKT0+KHsuLi5ELFtIXTpGPT09InJlc2V0Ij92b2lkIDA6Rn0pKX1maW5hbGx5e1EobnVsbCl9fSxbQyxaXSksSz1qKGFzeW5jKCk9PntpZighWilyZXR1cm47USgiX19hbGxfXyIpLFkobnVsbCk7dHJ5e2xldCBIPWF3YWl0IE8xKGB4Y3J1biBzaW1jdGwgcHJpdmFjeSAke0N9IHJlc2V0IGFsbCAke2gxKFopfWApO2lmKEguZXhpdENvZGUhPT0wKXtZKEguc3RkZXJyLnRyaW0oKXx8YHNpbWN0bCBwcml2YWN5IGZhaWxlZCAoZXhpdCAke0guZXhpdENvZGV9KWApO3JldHVybn1YKHt9KX1maW5hbGx5e1EobnVsbCl9fSxbQyxaXSk7aWYoIVopcmV0dXJuIHEoImRpdiIse3N0eWxlOmMuZW1wdHksY2hpbGRyZW46IlBlcm1pc3Npb25zIGFwcGVhciBvbmNlIGFuIGFwcCBpcyBpbiB0aGUgZm9yZWdyb3VuZC4ifSk7cmV0dXJuIHEoImRpdiIse3N0eWxlOnsuLi5jLnNlY3Rpb24scGFkZGluZzoiOHB4IDEycHgifSxjaGlsZHJlbjpbcSgiYnV0dG9uIix7b25DbGljazooKT0+VigoSCk9PiFIKSxzdHlsZTpjLnBlcm1zVG9nZ2xlLCJhcmlhLWV4cGFuZGVkIjpfLGNoaWxkcmVuOltxKCJzcGFuIix7c3R5bGU6ey4uLmMuc2VjdGlvblRpdGxlLG1hcmdpbjowfSxjaGlsZHJlbjoiUGVybWlzc2lvbnMifSkscSgic3ZnIix7d2lkdGg6IjExIixoZWlnaHQ6IjExIix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMi41IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixzdHlsZTp7dHJhbnNmb3JtOl8/InJvdGF0ZSg5MGRlZykiOiJyb3RhdGUoMGRlZykiLHRyYW5zaXRpb246InRyYW5zZm9ybSAwLjE1cyIsZmxleFNocmluazowfSxjaGlsZHJlbjpxKCJwb2x5bGluZSIse3BvaW50czoiOSAxOCAxNSAxMiA5IDYifSl9KV19KSxfJiYkJiZxKCJkaXYiLHtzdHlsZTp7Li4uYy5lcnJvcixtYXJnaW5Ub3A6OH0sY2hpbGRyZW46JH0pLF8mJnEoImRpdiIse3N0eWxlOmMucGVybXNTY3JvbGxXcmFwLGNoaWxkcmVuOltxKCJkaXYiLHtzdHlsZTpjLnBlcm1zU2Nyb2xsLGNoaWxkcmVuOmE3Lm1hcCgoe2tleTpILGxhYmVsOkZ9KT0+e2xldCBNPUpbSF07cmV0dXJuIHEoImRpdiIse3N0eWxlOmMucGVybVJvdyxjaGlsZHJlbjpbcSgic3BhbiIse3N0eWxlOmMucGVybUxhYmVsLGNoaWxkcmVuOkZ9KSxxKCJkaXYiLHtzdHlsZTpjLnBlcm1TZWcscm9sZToiZ3JvdXAiLCJhcmlhLWxhYmVsIjpGLGNoaWxkcmVuOltxKGY1LHthY3RpdmU6TT09PSJncmFudCIscGVuZGluZzpHPT09YCR7SH06Z3JhbnRgLG9uQ2xpY2s6KCk9PkIoSCwiZ3JhbnQiKSx2YXJpYW50OiJncmFudCIsdGl0bGU6IkFsbG93IixjaGlsZHJlbjpxKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpxKCJwb2x5bGluZSIse3BvaW50czoiNSAxMiAxMCAxNyAxOSA3In0pfSl9KSxxKGY1LHthY3RpdmU6TT09PSJyZXZva2UiLHBlbmRpbmc6Rz09PWAke0h9OnJldm9rZWAsb25DbGljazooKT0+QihILCJyZXZva2UiKSx2YXJpYW50OiJyZXZva2UiLHRpdGxlOiJEZW55IixjaGlsZHJlbjpxKCJzdmciLHt3aWR0aDoiMTEiLGhlaWdodDoiMTEiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIzIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbcSgibGluZSIse3gxOiI2Iix5MToiNiIseDI6IjE4Iix5MjoiMTgifSkscSgibGluZSIse3gxOiIxOCIseTE6IjYiLHgyOiI2Iix5MjoiMTgifSldfSl9KSxxKGY1LHthY3RpdmU6ITEscGVuZGluZzpHPT09YCR7SH06cmVzZXRgLG9uQ2xpY2s6KCk9PkIoSCwicmVzZXQiKSx2YXJpYW50OiJyZXNldCIsdGl0bGU6IlJlc2V0IixjaGlsZHJlbjpxKEQ4LHtzaXplOjExLHN0cm9rZVdpZHRoOjIuNH0pfSldfSldfSxIKX0pfSkscSgiZGl2Iix7c3R5bGU6Yy5wZXJtc0ZhZGVUb3B9KSxxKCJkaXYiLHtzdHlsZTpjLnBlcm1zRmFkZUJvdHRvbX0pXX0pLF8mJnEoImRpdiIse3N0eWxlOmMucGVybXNGb290ZXIsY2hpbGRyZW46cSgiYnV0dG9uIix7b25DbGljazpLLGRpc2FibGVkOkc9PT0iX19hbGxfXyIsc3R5bGU6Yy5yZXNldEFsbEJ0bix0aXRsZToieGNydW4gc2ltY3RsIHByaXZhY3kgcmVzZXQgYWxsIixjaGlsZHJlbjpHPT09Il9fYWxsX18iPyLigKYiOiJSZXNldCBhbGwifSl9KV19KX1mdW5jdGlvbiBpNyh7ZGV2aWNlczpDLGxvYWRpbmc6WixlcnJvcjpKLG9uUmVmcmVzaDpYfSl7bGV0W0csUV09SShudWxsKSxbJCxZXT1JKG51bGwpLF89aihhc3luYyhLKT0+e2lmKEcpcmV0dXJuO1EoSy51ZGlkKSxZKG51bGwpO3RyeXtsZXQgSD1gJHtyMSgiYXBpIil9P2RldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChLLnVkaWQpfWAsRj0oYXN5bmMoKT0+e2xldCBQPURhdGUubm93KCkrOTAwMDA7d2hpbGUoRGF0ZS5ub3coKTxQKXt0cnl7bGV0IEU9YXdhaXQgZmV0Y2goSCx7Y2FjaGU6Im5vLXN0b3JlIn0pO2lmKEUub2smJmF3YWl0IEUuanNvbigpKXtsZXQgdz1uZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtyZXR1cm4gdy5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLEsudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbih3LnRvU3RyaW5nKCkpLCEwfX1jYXRjaHt9YXdhaXQgbmV3IFByb21pc2UoKEUpPT5zZXRUaW1lb3V0KEUsNDAwKSl9cmV0dXJuITF9KSgpLE09cjEoImdyaWQvYXBpL3N0YXJ0IiksTD1mZXRjaChNLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpLLnVkaWR9KX0pLnRoZW4oYXN5bmMoUCk9PntsZXQgRT1hd2FpdCBQLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIVAub2t8fCFFLm9rKXRocm93IEVycm9yKEUuZXJyb3I/P2BIVFRQICR7UC5zdGF0dXN9YCl9KTtpZihhd2FpdCBQcm9taXNlLnJhY2UoW0YsTC50aGVuKCgpPT4ic3RhcnRlZCIpXSk9PT0hMClyZXR1cm47aWYoYXdhaXQgRilyZXR1cm47dGhyb3cgRXJyb3IoInNlcnZlLXNpbSBzdGFydGVkIGJ1dCBubyBzdHJlYW0gc3RhdGUgYXBwZWFyZWQiKX1jYXRjaChIKXtZKEggaW5zdGFuY2VvZiBFcnJvcj9ILm1lc3NhZ2U6IkZhaWxlZCB0byBzdGFydCBzdHJlYW0iKSxRKG51bGwpfX0sW0ddKSxWPW5ldyBNYXA7Zm9yKGxldCBLIG9mIEMpe2xldCBIPVYuZ2V0KEsucnVudGltZSk7aWYoIUgpSD1bXSxWLnNldChLLnJ1bnRpbWUsSCk7SC5wdXNoKEspfWZvcihsZXQgSyBvZiBWLnZhbHVlcygpKUsuc29ydCgoSCxGKT0+e2xldCBNPUguc3RhdGU9PT0iQm9vdGVkIj8wOjEsTD1GLnN0YXRlPT09IkJvb3RlZCI/MDoxO2lmKE0hPT1MKXJldHVybiBNLUw7cmV0dXJuIFo1KEgubmFtZSktWjUoRi5uYW1lKXx8SC5uYW1lLmxvY2FsZUNvbXBhcmUoRi5uYW1lKX0pO2xldCBCPVsuLi5WLmVudHJpZXMoKV0uc29ydCgoW0tdLFtIXSk9Pko1KEspLUo1KEgpfHxLLmxvY2FsZUNvbXBhcmUoSCkpO3JldHVybiBxKCJkaXYiLHtzdHlsZTpHMS5wYWdlLGNoaWxkcmVuOnEoImRpdiIse3N0eWxlOkcxLmVtcHR5LGNoaWxkcmVuOltxKCJoMSIse3N0eWxlOkcxLmVtcHR5VGl0bGUsY2hpbGRyZW46Ik5vIHNlcnZlLXNpbSBzdHJlYW0gcnVubmluZyJ9KSxxKCJwIix7c3R5bGU6RzEuZW1wdHlIaW50LGNoaWxkcmVuOlsiUGljayBhIHNpbXVsYXRvciB0byBib290LCBvciBzdGFydCBvbmUgeW91cnNlbGYgd2l0aCIsIiAiLHEoImNvZGUiLHtzdHlsZTpHMS5jb2RlLGNoaWxkcmVuOiJidW54IHNlcnZlLXNpbSAtLWRldGFjaCJ9KSwiLiJdfSkscSgiZGl2Iix7c3R5bGU6SzYsY2hpbGRyZW46W3EoImRpdiIse3N0eWxlOkE4LGNoaWxkcmVuOltxKCJzcGFuIix7c3R5bGU6e2ZvbnRXZWlnaHQ6NjAwfSxjaGlsZHJlbjoiU2ltdWxhdG9ycyJ9KSxxKCJidXR0b24iLHtvbkNsaWNrOlgsZGlzYWJsZWQ6WixzdHlsZTpJOCxjaGlsZHJlbjpaPyIuLi4iOiJSZWZyZXNoIn0pXX0pLEomJnEoImRpdiIse3N0eWxlOmQ1LGNoaWxkcmVuOkp9KSwkJiZxKCJkaXYiLHtzdHlsZTpkNSxjaGlsZHJlbjokfSksIVomJiFKJiZDLmxlbmd0aD09PTAmJnEoImRpdiIse3N0eWxlOlQ4LGNoaWxkcmVuOiJObyBhdmFpbGFibGUgc2ltdWxhdG9ycyBmb3VuZCJ9KSxCLm1hcCgoW0ssSF0pPT5xKCJkaXYiLHtjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6RTgsY2hpbGRyZW46S30pLEgubWFwKChGKT0+e2xldCBNPUc9PT1GLnVkaWQsTD1HIT09bnVsbCYmIU0sRD1GLnN0YXRlPT09IkJvb3RlZCI7cmV0dXJuIHEoImRpdiIse3N0eWxlOnsuLi5hNSxjdXJzb3I6TD8iZGVmYXVsdCI6InBvaW50ZXIiLG9wYWNpdHk6TD8wLjU6MX0sb25Nb3VzZUVudGVyOihPKT0+e2lmKCFMKU8uY3VycmVudFRhcmdldC5zdHlsZS5iYWNrZ3JvdW5kPSJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIn0sb25Nb3VzZUxlYXZlOihPKT0+Ty5jdXJyZW50VGFyZ2V0LnN0eWxlLmJhY2tncm91bmQ9InRyYW5zcGFyZW50IixvbkNsaWNrOigpPT57aWYoIUwpXyhGKX0sY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTpjNShEPyIjNGFkZTgwIjoiIzQ0NCIpfSkscSgic3BhbiIse3N0eWxlOntmbGV4OjEsdGV4dEFsaWduOiJsZWZ0In0sY2hpbGRyZW46Ri5uYW1lfSkscSgic3BhbiIse3N0eWxlOntmb250U2l6ZToxMCxjb2xvcjpNPyIjYTViNGZjIjoiIzg4OCJ9LGNoaWxkcmVuOk0/RD8iU3RhcnRpbmcuLi4iOiJCb290aW5nLi4uIjpEPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RyZWFtIn0pXX0sRi51ZGlkKX0pXX0sSykpXX0pXX0pfSl9ZnVuY3Rpb24gZjUoe2FjdGl2ZTpDLHBlbmRpbmc6WixvbkNsaWNrOkosdmFyaWFudDpYLHRpdGxlOkcsY2hpbGRyZW46UX0pe2xldCAkPVg9PT0iZ3JhbnQiPyIjNGFkZTgwIjpYPT09InJldm9rZSI/IiNmODcxNzEiOiIjYTViNGZjIjtyZXR1cm4gcSgiYnV0dG9uIix7b25DbGljazpKLGRpc2FibGVkOlosdGl0bGU6RywiYXJpYS1sYWJlbCI6RyxzdHlsZTp7Li4uYy5wZXJtQnRuLGJhY2tncm91bmQ6Qz9gJHskfTIyYDoidHJhbnNwYXJlbnQiLGNvbG9yOkM/JDoicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsb3BhY2l0eTpaPzAuNToxfSxjaGlsZHJlbjpRfSl9ZnVuY3Rpb24gVzgoQyxaKXtpZihDPT09WilyZXR1cm4hMDtpZihDLmlkIT09Wi5pZHx8Qy5wYXRoIT09Wi5wYXRofHxDLmxhYmVsIT09Wi5sYWJlbHx8Qy52YWx1ZSE9PVoudmFsdWV8fEMucm9sZSE9PVoucm9sZXx8Qy50eXBlIT09Wi50eXBlfHxDLmVuYWJsZWQhPT1aLmVuYWJsZWQpcmV0dXJuITE7bGV0IEo9Qy5mcmFtZSxYPVouZnJhbWU7cmV0dXJuIEo9PT1YfHxKLng9PT1YLngmJkoueT09PVgueSYmSi53aWR0aD09PVgud2lkdGgmJkouaGVpZ2h0PT09WC5oZWlnaHR9dmFyIHI3PU8yKGZ1bmN0aW9uKHtlbGVtZW50OlosaW5kZXg6SixzY3JlZW46WCxoaWdobGlnaHRlZDpHLHNlbGVjdGVkOlEsb25IaWdobGlnaHQ6JCxvblNlbGVjdDpZfSl7bGV0IF89cTUoWiksVj1QOChaLEopLEI9ZTcoWi5mcmFtZSxYKTtpZighQilyZXR1cm4gbnVsbDtsZXQgSz1DNihWKTtyZXR1cm4gcSgiYnV0dG9uIix7dHlwZToiYnV0dG9uIiwiZGF0YS1heC1rZXkiOl8sImRhdGEtYXgtaWQiOlYuaWQsImRhdGEtYXgtcGF0aCI6Vi5wYXRoLCJkYXRhLWF4LWxhYmVsIjpWLmxhYmVsLCJkYXRhLWF4LXZhbHVlIjpWLnZhbHVlLCJkYXRhLWF4LXJvbGUiOlYucm9sZSwiZGF0YS1heC10eXBlIjpWLnR5cGUsImRhdGEtYXgtZW5hYmxlZCI6U3RyaW5nKFYuZW5hYmxlZCksImRhdGEtYXgtZnJhbWUiOms4KFYuZnJhbWUpLCJkYXRhLWF4LXNlbGVjdGVkIjpTdHJpbmcoUSksImFyaWEtbGFiZWwiOloubGFiZWx8fEssdGl0bGU6SyxvbkNsaWNrOigpPT5ZKF8pLG9uTW91c2VFbnRlcjooKT0+JChfKSxvbk1vdXNlTGVhdmU6KCk9PiQobnVsbCksc3R5bGU6ey4uLlcxLnRhcmdldCxsZWZ0OmAke0IueC9YLndpZHRoKjEwMH0lYCx0b3A6YCR7Qi55L1guaGVpZ2h0KjEwMH0lYCx3aWR0aDpgJHtCLndpZHRoL1gud2lkdGgqMTAwfSVgLGhlaWdodDpgJHtCLmhlaWdodC9YLmhlaWdodCoxMDB9JWAsYm9yZGVyQ29sb3I6UT8iIzYwYTVmYSI6Rz8iI2ZiYmYyNCI6IiMzNGQzOTkiLGJhY2tncm91bmQ6UT8icmdiYSg5NiwxNjUsMjUwLDAuMjQpIjpHPyJyZ2JhKDI0NSwxNTgsMTEsMC4yOCkiOiJyZ2JhKDE2LDE4NSwxMjksMC4xMikifX0pfSwoQyxaKT0+Qy5pbmRleD09PVouaW5kZXgmJkMuaGlnaGxpZ2h0ZWQ9PT1aLmhpZ2hsaWdodGVkJiZDLnNlbGVjdGVkPT09Wi5zZWxlY3RlZCYmQy5vbkhpZ2hsaWdodD09PVoub25IaWdobGlnaHQmJkMub25TZWxlY3Q9PT1aLm9uU2VsZWN0JiZDLnNjcmVlbi53aWR0aD09PVouc2NyZWVuLndpZHRoJiZDLnNjcmVlbi5oZWlnaHQ9PT1aLnNjcmVlbi5oZWlnaHQmJlc4KEMuZWxlbWVudCxaLmVsZW1lbnQpKTtmdW5jdGlvbiBzNygpe2xldHtzbmFwc2hvdDpDfT1pNSgpLHtoaWdobGlnaHRlZEtleTpaLHNlbGVjdGVkS2V5Okosc2V0SGlnaGxpZ2h0ZWRLZXk6WCxzZXRTZWxlY3RlZEtleTpHfT16OCgpO2lmKCFDPy5zY3JlZW4ud2lkdGh8fCFDPy5zY3JlZW4uaGVpZ2h0KXJldHVybiBudWxsO3JldHVybiBxKCJkaXYiLHtzdHlsZTpXMS50YXJnZXRzLGNoaWxkcmVuOkMuZWxlbWVudHMubWFwKChRLCQpPT57bGV0IFk9cTUoUSk7cmV0dXJuIHEocjcse2VsZW1lbnQ6USxpbmRleDokLHNjcmVlbjpDLnNjcmVlbixoaWdobGlnaHRlZDpZPT09WixzZWxlY3RlZDpZPT09SixvbkhpZ2hsaWdodDpYLG9uU2VsZWN0Okd9LFkpfSl9KX12YXIgbjc9TzIoZnVuY3Rpb24oe2VsZW1lbnQ6WixpbmRleDpKLGFjdGl2ZTpYLG9uSGlnaGxpZ2h0Okd9KXtsZXQgUT1xNShaKSwkPVA4KFosSiksWT1gJHtNYXRoLnJvdW5kKFouZnJhbWUud2lkdGgpfXgke01hdGgucm91bmQoWi5mcmFtZS5oZWlnaHQpfWAsXz1bJC5sYWJlbCwkLnJvbGV8fCQudHlwZXx8ImVsZW1lbnQiLFldLmZpbHRlcihCb29sZWFuKS5qb2luKCIgwrcgIik7cmV0dXJuIHEoImRpdiIse3JvbGU6Imxpc3RpdGVtIix0YWJJbmRleDowLCJkYXRhLWF4LWtleSI6USx0aXRsZTpfLG9uTW91c2VFbnRlcjooKT0+RyhRKSxvbk1vdXNlTGVhdmU6KCk9PkcobnVsbCksb25Gb2N1czooKT0+RyhRKSxvbkJsdXI6KCk9PkcobnVsbCksc3R5bGU6ey4uLlcxLmxpc3RJdGVtLC4uLlg/VzEubGlzdEl0ZW1BY3RpdmU6e319LGNoaWxkcmVuOltxKCJzcGFuIix7c3R5bGU6VzEuaXRlbVRleHQsY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTpXMS5pdGVtTGFiZWwsY2hpbGRyZW46Wi5sYWJlbHx8Wi5yb2xlfHwiVW5sYWJlbGVkIn0pLHEoInNwYW4iLHtzdHlsZTpXMS5pdGVtTWV0YSxjaGlsZHJlbjpaLnJvbGV8fFoudHlwZXx8ImVsZW1lbnQifSldfSkscSgiY29kZSIse3N0eWxlOlcxLml0ZW1TaXplLGNoaWxkcmVuOll9KV19KX0sKEMsWik9PkMuaW5kZXg9PT1aLmluZGV4JiZDLmFjdGl2ZT09PVouYWN0aXZlJiZDLm9uSGlnaGxpZ2h0PT09Wi5vbkhpZ2hsaWdodCYmVzgoQy5lbGVtZW50LFouZWxlbWVudCkpO2Z1bmN0aW9uIHQ3KHtvdmVybGF5RW5hYmxlZDpDLG9uVG9nZ2xlT3ZlcmxheTpafSl7bGV0e3NuYXBzaG90Okp9PWk1KCkse2hpZ2hsaWdodGVkS2V5Olgsc2V0SGlnaGxpZ2h0ZWRLZXk6R309ejgoKSxRPUo/LmVsZW1lbnRzPz9bXSwkPUY4KEopLFk9Sj8uZXJyb3JzPy5bMF0/P251bGw7cmV0dXJuIHEoImRpdiIse3N0eWxlOnsuLi5jLnNlY3Rpb24scGFkZGluZzoiOHB4IDEycHgifSxjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6VzEucGFuZWxIZWFkZXIsY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTp7Li4uYy5zZWN0aW9uVGl0bGUsbWFyZ2luOjB9LGNoaWxkcmVuOiJBWCBUcmVlIn0pLHEoImJ1dHRvbiIse3R5cGU6ImJ1dHRvbiIsb25DbGljazpaLCJhcmlhLXByZXNzZWQiOkMsc3R5bGU6VzEub3ZlcmxheVRvZ2dsZSxjaGlsZHJlbjpDPyJPdmVybGF5IG9uIjoiRW5hYmxlIG92ZXJsYXkifSldfSksIUM/bnVsbDokP3EoImRpdiIse3N0eWxlOnsuLi5jLmVtcHR5LHBhZGRpbmc6MTJ9LGNoaWxkcmVuOiJBWCB1bmF2YWlsYWJsZSBvbiB0aGlzIHNpbXVsYXRvci4ifSk6US5sZW5ndGg9PT0wP3EoImRpdiIse3N0eWxlOnsuLi5jLmVtcHR5LHBhZGRpbmc6MTJ9LGNoaWxkcmVuOlk/PyJXYWl0aW5nIGZvciBhY2Nlc3NpYmlsaXR5IGRhdGHigKYifSk6cSgiZGl2Iix7c3R5bGU6VzEubGlzdCxyb2xlOiJsaXN0IixjaGlsZHJlbjpRLm1hcCgoXyxWKT0+e2xldCBCPXE1KF8pO3JldHVybiBxKG43LHtlbGVtZW50Ol8saW5kZXg6VixhY3RpdmU6Qj09PVgsb25IaWdobGlnaHQ6R30sQil9KX0pXX0pfWZ1bmN0aW9uIFA4KEMsWil7bGV0IEo9Qy5sYWJlbHx8Qy5yb2xlfHxgZWxlbWVudCAke1orMX1gLFg9Qy5yb2xlfHxDLnR5cGU7cmV0dXJue2lkOkMuaWQscGF0aDpDLnBhdGgsbGFiZWw6Six2YWx1ZTpDLnZhbHVlLHJvbGU6WCx0eXBlOkMudHlwZSxlbmFibGVkOkMuZW5hYmxlZCxmcmFtZTpDLmZyYW1lfX1mdW5jdGlvbiBlNyhDLFope2xldCBKPU1hdGgubWF4KDAsQy54KSxYPU1hdGgubWF4KDAsQy55KSxHPU1hdGgubWluKFoud2lkdGgsQy54K0Mud2lkdGgpLFE9TWF0aC5taW4oWi5oZWlnaHQsQy55K0MuaGVpZ2h0KSwkPU1hdGgubWF4KDAsRy1KKSxZPU1hdGgubWF4KDAsUS1YKTtyZXR1cm4gJD4wJiZZPjA/e3g6Six5Olgsd2lkdGg6JCxoZWlnaHQ6WX06bnVsbH1mdW5jdGlvbiBxNShDKXtyZXR1cm4gQy5pZH1mdW5jdGlvbiBDNihDKXtyZXR1cm5bYEFYIGxhYmVsOiAke0MubGFiZWx8fCJVbmxhYmVsZWQifWAsQy5yb2xlP2Byb2xlOiAke0Mucm9sZX1gOiIiLEMudHlwZT9gdHlwZTogJHtDLnR5cGV9YDoiIixDLnZhbHVlP2B2YWx1ZTogJHtDLnZhbHVlfWA6IiIsQy5pZD9gaWQ6ICR7Qy5pZH1gOiIiLGBwYXRoOiAke0MucGF0aH1gLGBmcmFtZTogJHtrOChDLmZyYW1lKX1gXS5maWx0ZXIoQm9vbGVhbikuam9pbigiOyAiKX1mdW5jdGlvbiBrOChDKXtyZXR1cm5gJHtDLnh9LCR7Qy55fSAke0Mud2lkdGh9eCR7Qy5oZWlnaHR9YH1mdW5jdGlvbiBaNih7b3ZlcmxheUVuYWJsZWQ6QyxzdHJlYW1pbmc6WixvblRvZ2dsZU92ZXJsYXk6Sn0pe2xldHtzdGF0dXM6WH09aTUoKSxbRyxRXT1JKCExKTtyZXR1cm4gcShEMS5CdXR0b24seyJhcmlhLWxhYmVsIjpDPyJIaWRlIGFjY2Vzc2liaWxpdHkgb3ZlcmxheSI6IlNob3cgYWNjZXNzaWJpbGl0eSBvdmVybGF5IiwiYXJpYS1wcmVzc2VkIjpDLHRpdGxlOlgsb25DbGljazpKLG9uTW91c2VFbnRlcjooKT0+USghMCksb25Nb3VzZUxlYXZlOigpPT5RKCExKSxzdHlsZTpDJiZaP3suLi5XMS50b29sYmFyQnV0dG9uQWN0aXZlLC4uLkc/VzEudG9vbGJhckJ1dHRvbkFjdGl2ZUhvdmVyOnt9fTp2b2lkIDAsY2hpbGRyZW46cSgic3ZnIix7d2lkdGg6IjE5IixoZWlnaHQ6IjE5Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W3EoInBhdGgiLHtkOiJNMyA4VjVhMiAyIDAgMCAxIDItMmgzIn0pLHEoInBhdGgiLHtkOiJNMTYgM2gzYTIgMiAwIDAgMSAyIDJ2MyJ9KSxxKCJwYXRoIix7ZDoiTTIxIDE2djNhMiAyIDAgMCAxLTIgMmgtMyJ9KSxxKCJwYXRoIix7ZDoiTTggMjFINWEyIDIgMCAwIDEtMi0ydi0zIn0pLHEoImNpcmNsZSIse2N4OiIxMiIsY3k6IjEyIixyOiIzLjUifSldfSl9KX1mdW5jdGlvbiBKNihDKXtpZighTnVtYmVyLmlzRmluaXRlKEMpfHxDPD0wKXJldHVybiIwIEIiO2xldCBaPUMvMTA3Mzc0MTgyNDtpZihaPj0xKXJldHVybmAke1oudG9GaXhlZChaPj0xMD8wOjEpfSBHQmA7cmV0dXJuYCR7KEMvMTA0ODU3NikudG9GaXhlZCgwKX0gTUJgfWZ1bmN0aW9uIFg2KEMsWixKKXtsZXRbWCxHXT1JKG51bGwpLFtRLCRdPUkoMCk7eSgoKT0+e2lmKCFafHwhQylyZXR1cm47bGV0IF89ITEsVj1hc3luYygpPT57dHJ5e2xldCBIPWF3YWl0KGF3YWl0IGZldGNoKEMse2NhY2hlOiJuby1zdG9yZSJ9KSkuanNvbigpO2lmKCFfKUcoSC5kZXZpY2VzPz9bXSl9Y2F0Y2h7aWYoIV8pRyhbXSl9fTtWKCk7bGV0IEI9c2V0SW50ZXJ2YWwoVixKPzc1MDozMDAwKTtyZXR1cm4oKT0+e189ITAsY2xlYXJJbnRlcnZhbChCKX19LFtDLFosUSxKXSk7bGV0IFk9aigoKT0+JCgoXyk9Pl8rMSksW10pO3JldHVybntkZXZpY2VzOlgscmVmcmVzaDpZfX1mdW5jdGlvbiBxNihDLFope2xldFtKLFhdPUkobnVsbCk7cmV0dXJuIHkoKCk9PntpZighWnx8IUMpcmV0dXJuO2xldCBHPSExLFE9YXN5bmMoKT0+e3RyeXtsZXQgXz1hd2FpdChhd2FpdCBmZXRjaChDLHtjYWNoZToibm8tc3RvcmUifSkpLmpzb24oKTtpZighRylYKF8pfWNhdGNoe319O1EoKTtsZXQgJD1zZXRJbnRlcnZhbChRLDUwMDApO3JldHVybigpPT57Rz0hMCxjbGVhckludGVydmFsKCQpfX0sW0MsWl0pLEp9ZnVuY3Rpb24gRzYoe3JlcG9ydDpDfSl7aWYoIUN8fEMudG90YWxCeXRlcz09PTApcmV0dXJuIG51bGw7bGV0e2VzdGltYXRlZEFkZGl0aW9uYWw6WixhdmFpbGFibGVCeXRlczpKLHRvdGFsQnl0ZXM6WCxydW5uaW5nU2ltdWxhdG9yczpHfT1DLFE9TWF0aC5tYXgoMCxNYXRoLm1pbigxLDEtSi9YKSksJD1HK1osWT1aPT09MD8iI2U2NiI6Wjw9MT8iI2U5YTEzYiI6IiMzYjMiO3JldHVybiBxKCJkaXYiLHtzdHlsZTpNMS5jYXBhY2l0eSxjaGlsZHJlbjpbcSgic3BhbiIse3N0eWxlOnsuLi5NMS5jYXBhY2l0eURvdCxiYWNrZ3JvdW5kOll9fSkscSgic3BhbiIse2NoaWxkcmVuOltHLCIvIiwkLCIgc2ltcyJdfSkscSgic3BhbiIse3N0eWxlOntjb2xvcjoiIzY2NiJ9LGNoaWxkcmVuOiLCtyJ9KSxxKCJzcGFuIix7c3R5bGU6e2NvbG9yOiIjODg4In0sY2hpbGRyZW46W0o2KEopLCIgZnJlZSJdfSkscSgic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsc3R5bGU6TTEuY2FwYWNpdHlCYXIsY2hpbGRyZW46cSgic3BhbiIse3N0eWxlOntkaXNwbGF5OiJibG9jayIsd2lkdGg6YCR7KFEqMTAwKS50b0ZpeGVkKDEpfSVgLGhlaWdodDoiMTAwJSIsYmFja2dyb3VuZDpRPjAuOT8iI2U2NiI6UT4wLjc1PyIjZTlhMTNiIjoiIzNiMyIsdHJhbnNpdGlvbjoid2lkdGggMzAwbXMgZWFzZSwgYmFja2dyb3VuZCAzMDBtcyBlYXNlIn19KX0pXX0pfWZ1bmN0aW9uIHA1KEMsWixKLFgpe2xldCBHPWooKEIpPT5NYXRoLm1heChKLE1hdGgubWluKFgsQikpLFtKLFhdKSxbUSwkXT1JKCgpPT57aWYodHlwZW9mIHdpbmRvdz4idSIpcmV0dXJuIFo7bGV0IEI9d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKEMpLEs9QiE9bnVsbD9OdW1iZXIoQik6TmFOO3JldHVybiBOdW1iZXIuaXNGaW5pdGUoSyk/RyhLKTpafSksWT10eXBlb2Ygd2luZG93PCJ1Ij9NYXRoLm1pbihYLHdpbmRvdy5pbm5lcldpZHRoLTMyKTpYLF89TWF0aC5tYXgoSixNYXRoLm1pbihZLFEpKSxWPWooKEIpPT57Qi5wcmV2ZW50RGVmYXVsdCgpO2xldCBLPUIuY2xpZW50WCxIPV8sRj1CLmN1cnJlbnRUYXJnZXQ7Ri5zZXRQb2ludGVyQ2FwdHVyZShCLnBvaW50ZXJJZCk7bGV0IE09KEQpPT57bGV0IE89RyhIKyhLLUQuY2xpZW50WCkpOyQoTyl9LEw9KEQpPT57Ri5yZWxlYXNlUG9pbnRlckNhcHR1cmUoRC5wb2ludGVySWQpLEYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLE0pLEYucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixMKSxGLnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJjYW5jZWwiLEwpO3RyeXt3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oQyxTdHJpbmcoRyhIKyhLLUQuY2xpZW50WCkpKSl9Y2F0Y2h7fX07Ri5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsTSksRi5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLEwpLEYuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsTCl9LFtHLF8sQ10pO3JldHVybnt3aWR0aDpfLG9uUG9pbnRlckRvd246Vn19ZnVuY3Rpb24gdTUoe3BhbmVsV2lkdGg6Qyx2aXNpYmxlOlosb25Qb2ludGVyRG93bjpKLGFyaWFMYWJlbDpYfSl7bGV0W0csUV09SSghMSksWyQsWV09SSghMSksXz1HfHwkLFY9MTIrQy05O3JldHVybiBxKCJkaXYiLHtyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLW9yaWVudGF0aW9uIjoidmVydGljYWwiLCJhcmlhLWxhYmVsIjpYLCJhcmlhLWhpZGRlbiI6IVosb25Qb2ludGVyRG93bjooQik9PntZKCEwKSxKKEIpfSxvblBvaW50ZXJVcDooKT0+WSghMSksb25Qb2ludGVyQ2FuY2VsOigpPT5ZKCExKSxvblBvaW50ZXJFbnRlcjooKT0+USghMCksb25Qb2ludGVyTGVhdmU6KCk9PlEoITEpLHN0eWxlOntwb3NpdGlvbjoiZml4ZWQiLHRvcDoxMixib3R0b206MTIscmlnaHQ6Vix3aWR0aDoxNixjdXJzb3I6ImNvbC1yZXNpemUiLHpJbmRleDozNix0b3VjaEFjdGlvbjoibm9uZSIscG9pbnRlckV2ZW50czpaPyJhdXRvIjoibm9uZSIsb3BhY2l0eTpaPzE6MCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMnMgZWFzZSJ9LGNoaWxkcmVuOltxKCJkaXYiLHtzdHlsZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxib3R0b206MCxsZWZ0OiI1MCUiLHdpZHRoOjEsdHJhbnNmb3JtOiJ0cmFuc2xhdGVYKC0wLjVweCkiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYmEoMjU1LDI1NSwyNTUsMCkgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMC4yOCkgMzAlLCByZ2JhKDI1NSwyNTUsMjU1LDAuMjgpIDcwJSwgcmdiYSgyNTUsMjU1LDI1NSwwKSAxMDAlKSIsb3BhY2l0eTpfPzE6MCx0cmFuc2l0aW9uOiJvcGFjaXR5IDAuMTVzIGVhc2UiLHBvaW50ZXJFdmVudHM6Im5vbmUifX0pLHEoImRpdiIse3N0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOjQsaGVpZ2h0OjI4LGJvcmRlclJhZGl1czoyLHRyYW5zZm9ybToidHJhbnNsYXRlKC01MCUsIC01MCUpIixiYWNrZ3JvdW5kOiQ/IiM5YTlhOWUiOiIjNmU2ZTcyIix6SW5kZXg6MSxvcGFjaXR5Ol8/MTowLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xNXMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlIixwb2ludGVyRXZlbnRzOiJub25lIn19KV19KX1mdW5jdGlvbiBsNShDLFope2xldCBKPUMuaW5jbHVkZXMoIj8iKT8iJiI6Ij8iO3JldHVybmAke0N9JHtKfWRldmljZT0ke2VuY29kZVVSSUNvbXBvbmVudChaKX1gfWZ1bmN0aW9uIFE2KHtkZXZpY2U6QyxhY3RpdmU6WixwcmV2aWV3RW5kcG9pbnQ6SixzdGFydGluZzpYLHNodXR0aW5nRG93bjpHLGVycm9yOlEsb25TdGFydDokLG9uU2h1dGRvd246WX0pe2xldCBfPUMuaGVscGVyLFY9Qy5zdGF0ZT09PSJCb290ZWQiLEI9Xz8i4pePIGxpdmUiOlg/Vj8ic3RhcnRpbmcgaGVscGVy4oCmIjoiYm9vdGluZyAmIHN0YXJ0aW5n4oCmIjpHPyJzaHV0dGluZyBkb3du4oCmIjpWPyJib290ZWQgKG5vIHN0cmVhbSkiOkMuc3RhdGUudG9Mb3dlckNhc2UoKSxLPV8/IiMzYjMiOiIjODg4IixIPVo/InJnYmEoMTAsMTMyLDI1NSwwLjU1KSI6InRyYW5zcGFyZW50IixGPV8/ImEiOiJkaXYiLE09Xz97aHJlZjpsNShKLEMuZGV2aWNlKX06e307cmV0dXJuIHEoRix7Li4uTSxjbGFzc05hbWU6ImdyaWQtdGlsZSIsc3R5bGU6ey4uLk0xLnRpbGUsb3V0bGluZTpgMXB4IHNvbGlkICR7SH1gfSxjaGlsZHJlbjpbKF98fFYpJiZxKCJidXR0b24iLHt0eXBlOiJidXR0b24iLHRpdGxlOkc/IlNodXR0aW5nIGRvd27igKYiOiJTaHV0ZG93biBzaW11bGF0b3IiLCJhcmlhLWxhYmVsIjoiU2h1dGRvd24gc2ltdWxhdG9yIixvbkNsaWNrOihMKT0+e0wucHJldmVudERlZmF1bHQoKSxMLnN0b3BQcm9wYWdhdGlvbigpLFkoKX0sZGlzYWJsZWQ6RyxjbGFzc05hbWU6ImdyaWQtc2h1dGRvd24tYnRuIixzdHlsZTpNMS5zaHV0ZG93bkJ0bixjaGlsZHJlbjoiw5cifSksXz9xKCJkaXYiLHtzdHlsZTpNMS50aWxlUHJldmlldyxjaGlsZHJlbjpxKCJpbWciLHtzcmM6Xy5zdHJlYW1VcmwsYWx0OkMubmFtZSxkcmFnZ2FibGU6ITEsc3R5bGU6e21heFdpZHRoOiIxMDAlIixtYXhIZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiY29udGFpbiJ9fSl9KTpxKCJkaXYiLHtzdHlsZTpNMS50aWxlUGxhY2Vob2xkZXIsY2hpbGRyZW46W1g/cSgic3BhbiIseyJhcmlhLWhpZGRlbiI6ITAsc3R5bGU6e3dpZHRoOjIyLGhlaWdodDoyMixib3JkZXJSYWRpdXM6IjUwJSIsYm9yZGVyOiIycHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjE1KSIsYm9yZGVyVG9wQ29sb3I6InJnYmEoMTU1LDIwMSwxNTUsMC45NSkiLGFuaW1hdGlvbjoiZ3JpZC1zcGluIDAuOHMgbGluZWFyIGluZmluaXRlIn19KTpxKCJkaXYiLHtzdHlsZTp7Zm9udFNpemU6Mjgsb3BhY2l0eTowLjV9LGNoaWxkcmVuOlY/IuKWoyI6IuKWoiJ9KSxRP3EoImRpdiIse3N0eWxlOk0xLnRpbGVFcnJvcixjaGlsZHJlbjpRfSk6bnVsbCxxKCJidXR0b24iLHt0eXBlOiJidXR0b24iLG9uQ2xpY2s6KEwpPT57TC5wcmV2ZW50RGVmYXVsdCgpLEwuc3RvcFByb3BhZ2F0aW9uKCksJCgpfSxkaXNhYmxlZDpYLHN0eWxlOnsuLi5NMS50aWxlU3RhcnRCdG4sYmFja2dyb3VuZDpYPyIjMWExYTFhIjoiIzFkMmExZCIsY29sb3I6WD8iIzg4OCI6IiM5YzkiLGN1cnNvcjpYPyJkZWZhdWx0IjoicG9pbnRlciJ9LGNoaWxkcmVuOlg/Vj8iU3RhcnRpbmfigKYiOiJCb290aW5n4oCmIjpWPyJTdGFydCBzdHJlYW0iOiJCb290ICYgc3RhcnQifSldfSkscSgiZGl2Iix7c3R5bGU6TTEudGlsZUZvb3RlcixjaGlsZHJlbjpbcSgic3BhbiIse3N0eWxlOk0xLnRpbGVOYW1lLGNoaWxkcmVuOkMubmFtZX0pLHEoInNwYW4iLHtzdHlsZTp7Y29sb3I6Syx3aGl0ZVNwYWNlOiJub3dyYXAifSxjaGlsZHJlbjpbQixfP3EoInNwYW4iLHtzdHlsZTp7Y29sb3I6IiM2NjYifSxjaGlsZHJlbjpbIiA6IixfLnBvcnRdfSk6bnVsbF19KV19KV19KX1mdW5jdGlvbiAkNih7b3BlbjpDLG9uQ2xvc2U6WixjdXJyZW50VWRpZDpKLHdpZHRoOlh9KXtsZXQgRz13aW5kb3cuX19TSU1fUFJFVklFV19fLFE9Rz8uZ3JpZEFwaUVuZHBvaW50LCQ9Rz8uZ3JpZFN0YXJ0RW5kcG9pbnQsWT1HPy5ncmlkU2h1dGRvd25FbmRwb2ludCxfPUc/LmdyaWRNZW1vcnlFbmRwb2ludCxWPUc/LnByZXZpZXdFbmRwb2ludD8/Ii8iLFtCLEtdPUkoe30pLFtILEZdPUkoe30pLFtNLExdPUkoe30pLEQ9T2JqZWN0LnZhbHVlcyhCKS5zb21lKEJvb2xlYW4pfHxPYmplY3QudmFsdWVzKEgpLnNvbWUoQm9vbGVhbikse2RldmljZXM6TyxyZWZyZXNoOlB9PVg2KFEsQyxEKSxFPXE2KF8sQyksdz1qKGFzeW5jKFQsUz0yMDAwMCk9PntpZighUSlyZXR1cm4gbnVsbDtsZXQgeD1EYXRlLm5vdygpK1M7d2hpbGUoRGF0ZS5ub3coKTx4KXt0cnl7bGV0IEgxPSgoYXdhaXQoYXdhaXQgZmV0Y2goUSx7Y2FjaGU6Im5vLXN0b3JlIn0pKS5qc29uKCkpLmRldmljZXM/P1tdKS5maW5kKChxMSk9PnExLmRldmljZT09PVQmJnExLmhlbHBlcik7aWYoSDEpcmV0dXJuIEgxfWNhdGNoe31hd2FpdCBuZXcgUHJvbWlzZSgocyk9PnNldFRpbWVvdXQocyw0MDApKX1yZXR1cm4gbnVsbH0sW1FdKSxmPWooYXN5bmMoVCk9PntpZighJClyZXR1cm47SygoUyk9Pih7Li4uUyxbVF06ITB9KSksTCgoUyk9Pih7Li4uUyxbVF06bnVsbH0pKTt0cnl7bGV0IFM9YXdhaXQgZmV0Y2goJCx7bWV0aG9kOiJQT1NUIixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LGJvZHk6SlNPTi5zdHJpbmdpZnkoe3VkaWQ6VH0pfSkseD1hd2FpdCBTLmpzb24oKS5jYXRjaCgoKT0+KHt9KSk7aWYoIVMub2t8fCF4Lm9rKXtMKChsKT0+KHsuLi5sLFtUXTp4LmVycm9yPz9gSFRUUCAke1Muc3RhdHVzfWB9KSk7cmV0dXJufWlmKGF3YWl0IHcoVCkpe3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24obDUoVixUKSk7cmV0dXJufUwoKGwpPT4oey4uLmwsW1RdOiJIZWxwZXIgZGlkIG5vdCByZWdpc3RlciBpbiB0aW1lIn0pKX1jYXRjaChTKXtMKCh4KT0+KHsuLi54LFtUXTpTPy5tZXNzYWdlPz8iUmVxdWVzdCBmYWlsZWQifSkpfWZpbmFsbHl7SygoUyk9Pih7Li4uUyxbVF06ITF9KSksUCgpfX0sWyQsUCx3LFZdKTt5KCgpPT57aWYoIU98fCFKKXJldHVybjtpZihPLmZpbmQoKHgpPT54LmRldmljZT09PUopPy5oZWxwZXIpcmV0dXJuO2xldCBTPU8uZmluZCgoeCk9PnguaGVscGVyJiZ4LmRldmljZSE9PUopO3dpbmRvdy5sb2NhdGlvbi5hc3NpZ24oUz9sNShWLFMuZGV2aWNlKTpWKX0sW08sSixWXSk7bGV0IGs9aihhc3luYyhUKT0+e2lmKCFZKXJldHVybjtGKChTKT0+KHsuLi5TLFtUXTohMH0pKSxMKChTKT0+KHsuLi5TLFtUXTpudWxsfSkpO3RyeXtsZXQgUz1hd2FpdCBmZXRjaChZLHttZXRob2Q6IlBPU1QiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sYm9keTpKU09OLnN0cmluZ2lmeSh7dWRpZDpUfSl9KSx4PWF3YWl0IFMuanNvbigpLmNhdGNoKCgpPT4oe30pKTtpZighUy5va3x8IXgub2spTCgocyk9Pih7Li4ucyxbVF06eC5lcnJvcj8/YEhUVFAgJHtTLnN0YXR1c31gfSkpfWNhdGNoKFMpe0woKHgpPT4oey4uLngsW1RdOlM/Lm1lc3NhZ2U/PyJSZXF1ZXN0IGZhaWxlZCJ9KSl9ZmluYWxseXtGKChTKT0+KHsuLi5TLFtUXTohMX0pKSxQKCl9fSxbWSxQXSk7cmV0dXJuIHEocjIse29wZW46Qyx3aWR0aDpYLGNoaWxkcmVuOltxKCJzdHlsZSIse2NoaWxkcmVuOlk2fSkscShzMix7Y2hpbGRyZW46W3EoZzUse2NoaWxkcmVuOiJTaW11bGF0b3JzIn0pLHEoImRpdiIse3N0eWxlOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4fSxjaGlsZHJlbjpbcShHNix7cmVwb3J0OkV9KSxxKG4yLHtvbkNsaWNrOlp9KV19KV19KSxxKCJkaXYiLHtzdHlsZTpNMS5ib2R5LGNoaWxkcmVuOk89PT1udWxsP251bGw6Ty5sZW5ndGg9PT0wP3EoImRpdiIse3N0eWxlOk0xLmVtcHR5LGNoaWxkcmVuOiJObyBpT1Mgc2ltdWxhdG9ycyBhdmFpbGFibGUuIn0pOk8ubWFwKChUKT0+cShRNix7ZGV2aWNlOlQsYWN0aXZlOlQuZGV2aWNlPT09SixwcmV2aWV3RW5kcG9pbnQ6VixzdGFydGluZzohIUJbVC5kZXZpY2VdLHNodXR0aW5nRG93bjohIUhbVC5kZXZpY2VdLGVycm9yOk1bVC5kZXZpY2VdPz9udWxsLG9uU3RhcnQ6KCk9PmYoVC5kZXZpY2UpLG9uU2h1dGRvd246KCk9PmsoVC5kZXZpY2UpfSxULmRldmljZSkpfSldfSl9dmFyIFk2PWAKICAuZ3JpZC1zaHV0ZG93bi1idG4geyBvcGFjaXR5OiAwOyB0cmFuc2l0aW9uOiBvcGFjaXR5IDEyMG1zLCBiYWNrZ3JvdW5kIDEyMG1zLCBjb2xvciAxMjBtczsgfQogIC5ncmlkLXRpbGU6aG92ZXIgLmdyaWQtc2h1dGRvd24tYnRuIHsgb3BhY2l0eTogMTsgfQogIC5ncmlkLXNodXRkb3duLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7IGJhY2tncm91bmQ6ICM1YTFkMWQ7IGNvbG9yOiAjZmZmOyBib3JkZXItY29sb3I6ICNhMzM7IH0KICAuZ3JpZC10aWxlOmhvdmVyIHsgYm9yZGVyLWNvbG9yOiAjNTU1ICFpbXBvcnRhbnQ7IH0KICBAa2V5ZnJhbWVzIGdyaWQtc3BpbiB7IHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfSB9CmA7ZnVuY3Rpb24gVjYoe29wZW46QyxvbkNsb3NlOlosdWRpZDpKLGN1cnJlbnRBcHA6WCxheE92ZXJsYXlFbmFibGVkOkcsb25Ub2dnbGVBeE92ZXJsYXk6USx3aWR0aDokfSl7cmV0dXJuIHEocjIse29wZW46Qyx3aWR0aDokLGNoaWxkcmVuOltxKHMyLHtjaGlsZHJlbjpbcShnNSx7Y2hpbGRyZW46IlRvb2xzIn0pLHEobjIse29uQ2xpY2s6Wn0pXX0pLEMmJnEoImRpdiIse3N0eWxlOmMuYm9keSxjaGlsZHJlbjpbcSh0Nyx7b3ZlcmxheUVuYWJsZWQ6RyxvblRvZ2dsZU92ZXJsYXk6UX0pLHEoZDcse3VkaWQ6SixjdXJyZW50QXBwOlh9KSxxKG83LHt1ZGlkOkosYnVuZGxlSWQ6WD8uYnVuZGxlSWQ/P251bGx9KSxxKEI4LHt1ZGlkOkosZXhlYzpPMX0pXX0pXX0pfWZ1bmN0aW9uIF82KHtvcGVuOkMsb25DbG9zZTpaLHVkaWQ6Six0YXJnZXRzOlgsc2VsZWN0ZWRUYXJnZXRJZDpHLG9uU2VsZWN0VGFyZ2V0OlEsbG9hZGluZzokLGVycm9yOlksb25SZWZyZXNoOl8sd2lkdGg6Vn0pe2xldCBCPUc/WC5maW5kKChLKT0+Sy5pZD09PUcpPz9udWxsOm51bGw7cmV0dXJuIHEocjIse29wZW46Qyx3aWR0aDpWLGNoaWxkcmVuOltxKHMyLHtjaGlsZHJlbjpbWC5sZW5ndGg+MD9xKGg3LHt1ZGlkOkosdGFyZ2V0czpYLHNlbGVjdGVkOkIsb25TZWxlY3RUYXJnZXQ6USxvblJlZnJlc2g6X30pOnEoInNwYW4iLHtzdHlsZTpRMS5lbXB0eVRhcmdldCxjaGlsZHJlbjokPyJMb29raW5nIGZvciBTYWZhcmkgYW5kIGluc3BlY3RhYmxlIHdlYnZpZXdzLi4uIjoiTm8gaW5zcGVjdGFibGUgU2FmYXJpIG9yIFdLV2ViVmlldyB0YXJnZXRzIn0pLHEobjIse29uQ2xpY2s6WixhcmlhTGFiZWw6IkNsb3NlIFdlYktpdCBEZXZUb29scyIsdGl0bGU6IkNsb3NlIixpY29uU2l6ZToxNX0pXX0pLHEoImRpdiIse3N0eWxlOlExLmZyYW1lV3JhcCxjaGlsZHJlbjpZP3EoImRpdiIse3N0eWxlOlExLm1lc3NhZ2UsY2hpbGRyZW46WX0pOkImJkM/cSgiaWZyYW1lIix7c3JjOkIuZGV2dG9vbHNGcm9udGVuZFVybCx0aXRsZTpgV2ViS2l0IERldlRvb2xzIC0gJHtCLnRpdGxlfHxCLnVybHx8Qi5pZH1gLHN0eWxlOlExLmlmcmFtZSxvbkxvYWQ6KEspPT5SNyhLLmN1cnJlbnRUYXJnZXQpfSxCLmlkKTpxKCJkaXYiLHtzdHlsZTpRMS5tZXNzYWdlLGNoaWxkcmVuOkI/IkRldlRvb2xzIHBhdXNlZCDigJQgb3BlbiB0aGUgcGFuZWwgdG8gcmVhdHRhY2guIjoiT3BlbiBTYWZhcmkgb3IgYW4gaW5zcGVjdGFibGUgV0tXZWJWaWV3IGluIHRoZSBzaW11bGF0b3IuIn0pfSldfSl9dmFyIEs2PXt3aWR0aDoiMTAwJSIsbWF4V2lkdGg6MzYwLG1hcmdpblRvcDo4LGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czoxMCxwYWRkaW5nOjQsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEzLGNvbG9yOiIjZWVlIix0ZXh0QWxpZ246ImxlZnQiLG1heEhlaWdodDoiNzB2aCIsb3ZlcmZsb3dZOiJhdXRvIixtaW5IZWlnaHQ6MH07ZnVuY3Rpb24gTDYoKXtsZXQgQz13aW5kb3cuX19TSU1fUFJFVklFV19fLFtaLEpdPUkoITEpLFtYLEddPUkoW10pLFtRLCRdPUkoITEpLFtZLF9dPUkobnVsbCksW1YsQl09SShuZXcgU2V0KSxbSyxIXT1JKCExKSxbRixNXT1JKCExKSxbTCxEXT1JKCExKSxbTyxQXT1JKCExKSxbRSx3XT1JKG51bGwpLGY9aihhc3luYygpPT57JCghMCksXyhudWxsKTt0cnl7bGV0IHo9YXdhaXQgTzEoInhjcnVuIHNpbWN0bCBsaXN0IGRldmljZXMgYXZhaWxhYmxlIC1qIik7aWYoei5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3Ioei5zdGRlcnJ8fCJzaW1jdGwgbGlzdCBmYWlsZWQiKTtHKHY3KHouc3Rkb3V0KSl9Y2F0Y2goeil7Xyh6IGluc3RhbmNlb2YgRXJyb3I/ei5tZXNzYWdlOiJGYWlsZWQgdG8gbGlzdCBkZXZpY2VzIil9ZmluYWxseXskKCExKX19LFtdKTtpZih5KCgpPT57ZigpfSxbZl0pLHkoKCk9PntpZighQz8ubG9nc0VuZHBvaW50KXJldHVybjtsZXQgej1uZXcgRXZlbnRTb3VyY2UoQy5sb2dzRW5kcG9pbnQpLGI9bmV3IE1hcCxVPVsiIzhiZTlmZCIsIiM1MGZhN2IiLCIjZmZiODZjIiwiI2ZmNzljNiIsIiNiZDkzZjkiLCIjZjFmYThjIiwiIzYyNzJhNCIsIiNmZjU1NTUiLCIjNjlmZjk0IiwiI2Q2YWNmZiIsIiNmZmZmYTUiLCIjYTRmZmZmIiwiI2ZmNmU2ZSIsIiNjYWE5ZmEiLCIjNWFmNzhlIl07ZnVuY3Rpb24gTihnKXtsZXQgdT1iLmdldChnKTtpZighdSl7bGV0IGE9MDtmb3IobGV0IG89MDtvPGcubGVuZ3RoO28rKylhPShhPDw1KS1hK2cuY2hhckNvZGVBdChvKXwwO3U9VVtNYXRoLmFicyhhKSVVLmxlbmd0aF0sYi5zZXQoZyx1KX1yZXR1cm4gdX1sZXQgVz0iIixBPSExO3JldHVybiB6Lm9ubWVzc2FnZT0oZyk9Pnt0cnl7bGV0IHU9SlNPTi5wYXJzZShnLmRhdGEpLGE9dS5wcm9jZXNzSW1hZ2VQYXRoPy5zcGxpdCgiLyIpLnBvcCgpPz91LnNlbmRlckltYWdlUGF0aD8uc3BsaXQoIi8iKS5wb3AoKT8/IiIsbz11LnN1YnN5c3RlbT8/IiIsSjI9dS5jYXRlZ29yeT8/IiIsYjE9dS5ldmVudE1lc3NhZ2U/PyIiO2lmKCFiMSlyZXR1cm47aWYoYSE9PVcpe2lmKEEpY29uc29sZS5ncm91cEVuZCgpO2xldCBOMj1OKGEpO2NvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoYCVjJHthfSR7bz9gICVjJHtvfSR7SjI/IjoiK0oyOiIifWA6IiJ9YCxgY29sb3I6JHtOMn07Zm9udC13ZWlnaHQ6Ym9sZGAsLi4ubz9bImNvbG9yOiM4ODg7Zm9udC13ZWlnaHQ6bm9ybWFsIl06W10pLEE9ITAsVz1hfWxldCBYMj0odS5tZXNzYWdlVHlwZT8/IiIpLnRvTG93ZXJDYXNlKCkseDE9byYmYT09PVc/YCVjJHtKMnx8b30lYyBgOiIiLEgyPXgxP1siY29sb3I6Izg4ODtmb250LXN0eWxlOml0YWxpYyIsImNvbG9yOmluaGVyaXQiXTpbXTtpZihYMj09PSJmYXVsdCJ8fFgyPT09ImVycm9yIiljb25zb2xlLmxvZyhgJHt4MX0lYyR7YjF9YCwuLi5IMiwiY29sb3I6I2ZmNTU1NSIpO2Vsc2UgaWYoWDI9PT0iZGVidWciKWNvbnNvbGUubG9nKGAke3gxfSVjJHtiMX1gLC4uLkgyLCJjb2xvcjojNjI3MmE0Iik7ZWxzZSBjb25zb2xlLmxvZyhgJHt4MX0lYyR7YjF9YCwuLi5IMiwiY29sb3I6aW5oZXJpdCIpfWNhdGNoe319LCgpPT57aWYoQSljb25zb2xlLmdyb3VwRW5kKCk7ei5jbG9zZSgpfX0sW0M/LmxvZ3NFbmRwb2ludF0pLCFDKXJldHVybiBxKGk3LHtkZXZpY2VzOlgsbG9hZGluZzpRLGVycm9yOlksb25SZWZyZXNoOmZ9KTtsZXQgaz1YLmZpbmQoKHopPT56LnVkaWQ9PT1DLmRldmljZSk/P251bGw7eSgoKT0+e2RvY3VtZW50LnRpdGxlPWs/Lm5hbWU/YFNpbXVsYXRvciAtICR7ay5uYW1lfWA6IlNpbXVsYXRvciBQcmV2aWV3In0sW2s/Lm5hbWVdKTtsZXQgVD1ZMihrPy5uYW1lKSxTPWI3KEMuZGV2dG9vbHNFbmRwb2ludD8/cjEoImRldnRvb2xzIiksTCk7eSgoKT0+e2lmKCFMKXJldHVybjtpZihFJiZTLnRhcmdldHMuc29tZSgoeik9PnouaWQ9PT1FKSlyZXR1cm47dyhTLnRhcmdldHMubGVuZ3RoPT09MT9TLnRhcmdldHNbMF0uaWQ6bnVsbCl9LFtMLFMudGFyZ2V0cyxFXSkseSgoKT0+e3cobnVsbCl9LFtDLmRldmljZV0pO2xldCB4PUk3KEMuc3RyZWFtVXJsKSxbcyxsXT1JKG51bGwpLEgxPXM/P3guY29uZmlnPz9wMihULGs/Lm5hbWUpLHExPWMyKFQsSDEpLFAxPXUyKFQsSDEpLHY9ZjIoSDEpLGk9JDIoSDEpLCQxPWk/aS53aWR0aC9pLmhlaWdodDoxLHI9aChudWxsKTt5KCgpPT57bGV0IHo9ITEsYj1udWxsLFU9bnVsbCxOPSgpPT57aWYoenx8YilyZXR1cm47Yj1zZXRUaW1lb3V0KCgpPT57Yj1udWxsLFcoKX0sMTAwMCl9LFc9KCk9PntsZXQgQT1uZXcgV2ViU29ja2V0KEMud3NVcmwpO0EuYmluYXJ5VHlwZT0iYXJyYXlidWZmZXIiLFU9QSxyLmN1cnJlbnQ9QSxBLm9uY2xvc2U9KCk9PntpZihyLmN1cnJlbnQ9PT1BKXIuY3VycmVudD1udWxsO04oKX0sQS5vbmVycm9yPSgpPT57QS5jbG9zZSgpfX07cmV0dXJuIFcoKSwoKT0+e2lmKHo9ITAsYiljbGVhclRpbWVvdXQoYik7aWYoci5jdXJyZW50PT09VSlyLmN1cnJlbnQ9bnVsbDtVPy5jbG9zZSgpfX0sW0Mud3NVcmxdKTtsZXQgbj1qKCh6LGIpPT57bGV0IFU9ci5jdXJyZW50O2lmKCFVfHxVLnJlYWR5U3RhdGUhPT1XZWJTb2NrZXQuT1BFTilyZXR1cm47bGV0IE49bmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGIpKSxXPW5ldyBVaW50OEFycmF5KDErTi5sZW5ndGgpO1dbMF09eixXLnNldChOLDEpLFUuc2VuZChXKX0sW10pLEYxPWooKHopPT5uKDMseiksW25dKSxDMT1qKCh6KT0+big1LHopLFtuXSksdD1qKCh6KT0+big0LHtidXR0b246en0pLFtuXSksbT1qKCh6KT0+e2woKGIpPT5iJiZiLndpZHRoPT09ei53aWR0aCYmYi5oZWlnaHQ9PT16LmhlaWdodCYmYi5vcmllbnRhdGlvbj09PXoub3JpZW50YXRpb24/Yjp6KX0sW10pLGQ9aigoeik9PntuKDcse29yaWVudGF0aW9uOnp9KX0sW25dKTt5KCgpPT57bChudWxsKX0sW0Muc3RyZWFtVXJsXSkseSgoKT0+e2xldCB6PXguY29uZmlnO2lmKCF6KXJldHVybjtsKChiKT0+YiYmYi53aWR0aD09PXoud2lkdGgmJmIuaGVpZ2h0PT09ei5oZWlnaHQmJmIub3JpZW50YXRpb249PT16Lm9yaWVudGF0aW9uP2I6bnVsbCl9LFt4LmNvbmZpZz8ud2lkdGgseC5jb25maWc/LmhlaWdodCx4LmNvbmZpZz8ub3JpZW50YXRpb25dKTtsZXQgcD1qKCh6LGIpPT57big2LHt0eXBlOnosdXNhZ2U6Yn0pfSxbbl0pLFtlLFkxXT1JKG51bGwpLFtMMSxCMV09SSghMSkse3dpZHRoOlMxLG9uUG9pbnRlckRvd246czF9PXA1KCJzZXJ2ZS1zaW06dG9vbHMtcGFuZWwtd2lkdGgiLEY2LDI0MCw3MjApLHt3aWR0aDpOMSxvblBvaW50ZXJEb3duOm4xfT1wNSgic2VydmUtc2ltOmRldnRvb2xzLXBhbmVsLXdpZHRoIixENiw0MjAsMTQwMCkse3dpZHRoOl8xLG9uUG9pbnRlckRvd246ejF9PXA1KCJzZXJ2ZS1zaW06Z3JpZC1wYW5lbC13aWR0aCIsVTYsMzYwLDE0MDApLFtjMSxfMl09SSgoKT0+dHlwZW9mIHdpbmRvdzwidSI/d2luZG93LmlubmVyV2lkdGg6MCksW2wxLEsyXT1JKCgpPT50eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3cuaW5uZXJIZWlnaHQ6MCk7eSgoKT0+e2xldCB6PSgpPT57XzIod2luZG93LmlubmVyV2lkdGgpLEsyKHdpbmRvdy5pbm5lckhlaWdodCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix6KSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIseil9LFtdKSx5KCgpPT57bGV0IHo9bmV3IEV2ZW50U291cmNlKEMuYXBwU3RhdGVFbmRwb2ludD8/cjEoImFwcHN0YXRlIikpLGI9bnVsbDtyZXR1cm4gei5vbm1lc3NhZ2U9KFUpPT57dHJ5e2xldCBOPUpTT04ucGFyc2UoVS5kYXRhKTtpZihiKWNsZWFyVGltZW91dChiKTtsZXQgVz1OPy5pc1JlYWN0TmF0aXZlPzA6NjAwO2I9c2V0VGltZW91dCgoKT0+WTEoTiksVyl9Y2F0Y2h7fX0sKCk9PntpZihiKWNsZWFyVGltZW91dChiKTt6LmNsb3NlKCl9fSxbQy5hcHBTdGF0ZUVuZHBvaW50XSk7bGV0IGsyPWooYXN5bmMoKT0+e3AoImRvd24iLDIyNyksYXdhaXQgbmV3IFByb21pc2UoKFUpPT5zZXRUaW1lb3V0KFUsMzApKSxwKCJkb3duIiwyMSksYXdhaXQgbmV3IFByb21pc2UoKFUpPT5zZXRUaW1lb3V0KFUsMzApKSxwKCJ1cCIsMjEpLGF3YWl0IG5ldyBQcm9taXNlKChVKT0+c2V0VGltZW91dChVLDMwKSkscCgidXAiLDIyNyl9LFtwXSksdDE9aChudWxsKSxbSTEsVTFdPUkoMCk7eSgoKT0+e2xldCB6PXQxLmN1cnJlbnQ7aWYoIXp8fHR5cGVvZiBSZXNpemVPYnNlcnZlcj4idSIpcmV0dXJuO2xldCBiPW5ldyBSZXNpemVPYnNlcnZlcigoVSk9PntsZXQgTj1VWzBdPy5jb250ZW50UmVjdC53aWR0aD8/MDtVMShOKX0pO3JldHVybiBiLm9ic2VydmUoeiksKCk9PmIuZGlzY29ubmVjdCgpfSxbXSk7bGV0W3YxLGUxXT1JKCEwKSxtMT1oKCEwKTttMS5jdXJyZW50PXYxO2xldCBDMj1oKG5ldyBTZXQpO3koKCk9PntsZXQgej0oYik9PntsZXQgVT0hIXQxLmN1cnJlbnQ/LmNvbnRhaW5zKGIudGFyZ2V0KTtlMShVKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIix6LCEwKSwoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmRvd24iLHosITApfSxbXSkseSgoKT0+e2lmKHYxKXJldHVybjtsZXQgej1DMi5jdXJyZW50O2lmKHouc2l6ZT09PTApcmV0dXJuO2ZvcihsZXQgYiBvZiB6KW4oNix7dHlwZToidXAiLHVzYWdlOmJ9KTt6LmNsZWFyKCl9LFt2MSxuXSkseSgoKT0+e2xldCB6PShOLFcpPT57aWYoIW0xLmN1cnJlbnQpcmV0dXJuO2lmKE4uY29kZT09PSJLZXlIIiYmTi5tZXRhS2V5JiZOLnNoaWZ0S2V5KXtpZihOLnByZXZlbnREZWZhdWx0KCksVz09PSJkb3duIiYmIU4ucmVwZWF0KW4oNCx7YnV0dG9uOiJob21lIn0pO3JldHVybn1pZihOLmNvZGU9PT0iS2V5QSImJk4ubWV0YUtleSYmTi5zaGlmdEtleSl7aWYoTi5wcmV2ZW50RGVmYXVsdCgpLFc9PT0iZG93biImJiFOLnJlcGVhdClPMShgeGNydW4gc2ltY3RsIHVpICR7Qy5kZXZpY2V9IGFwcGVhcmFuY2VgKS50aGVuKChnKT0+e2xldCB1PWcuc3Rkb3V0LnRyaW0oKT09PSJkYXJrIj8ibGlnaHQiOiJkYXJrIjtyZXR1cm4gTzEoYHhjcnVuIHNpbWN0bCB1aSAke0MuZGV2aWNlfSBhcHBlYXJhbmNlICR7dX1gKX0pLmNhdGNoKCgpPT57fSk7cmV0dXJufWxldCBBPUU3KE4uY29kZSk7aWYoQT09bnVsbClyZXR1cm47aWYoTi5wcmV2ZW50RGVmYXVsdCgpLFc9PT0iZG93biIpQzIuY3VycmVudC5hZGQoQSk7ZWxzZSBDMi5jdXJyZW50LmRlbGV0ZShBKTtuKDYse3R5cGU6Vyx1c2FnZTpBfSl9LGI9KE4pPT56KE4sImRvd24iKSxVPShOKT0+eihOLCJ1cCIpO3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsYiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixVKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixiKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLFUpfX0sW24sQy5kZXZpY2VdKTtsZXQgQTI9aihhc3luYyh6KT0+e2lmKEt8fHoudWRpZD09PUMuZGV2aWNlKXJldHVybjtIKCEwKTt0cnl7aWYoei5zdGF0ZSE9PSJCb290ZWQiKWF3YWl0IE8xKGB4Y3J1biBzaW1jdGwgYm9vdCAke3oudWRpZH1gKTtsZXQgYj1hd2FpdCBPMShgYnVueCBzZXJ2ZS1zaW0gLS1kZXRhY2ggJHt6LnVkaWR9YCk7aWYoYi5leGl0Q29kZSE9PTApdGhyb3cgRXJyb3IoYi5zdGRlcnJ8fCJGYWlsZWQgdG8gc3RhcnQgc2VydmUtc2ltIik7bGV0IFU9bmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7VS5zZWFyY2hQYXJhbXMuc2V0KCJkZXZpY2UiLHoudWRpZCksd2luZG93LmxvY2F0aW9uLmFzc2lnbihVLnRvU3RyaW5nKCkpfWNhdGNoe0goITEpfX0sW0ssQy5kZXZpY2VdKSxrMT1jNygpLEwyPWw3KHtleGVjOk8xLHVkaWQ6Qy5kZXZpY2UsZW5hYmxlZDpaLG9uVXBsb2FkU3RhcnQ6azEuYWRkLG9uVXBsb2FkUHJvZ3Jlc3M6azEuc2V0UHJvZ3Jlc3Msb25VcGxvYWRFbmQ6KHosYixVKT0+azEudXBkYXRlKHose3N0YXR1czpiPyJzdWNjZXNzIjoiZXJyb3IiLG1lc3NhZ2U6VX0pLG9uVW5zdXBwb3J0ZWQ6KHopPT57bGV0IGI9azEuYWRkKHoubmFtZSwibWVkaWEiKTtrMS51cGRhdGUoYix7c3RhdHVzOiJlcnJvciIsbWVzc2FnZTpgVW5zdXBwb3J0ZWQ6ICR7ei50eXBlfHxyNSh6KX1gfSl9fSksZDE9aihhc3luYyh6KT0+e0IoKGIpPT5uZXcgU2V0KGIpLmFkZCh6KSk7dHJ5e2F3YWl0IE8xKGB4Y3J1biBzaW1jdGwgc2h1dGRvd24gJHt6fWApLGF3YWl0IGYoKX1maW5hbGx5e0IoKGIpPT57bGV0IFU9bmV3IFNldChiKTtyZXR1cm4gVS5kZWxldGUoeiksVX0pfX0sW2ZdKSxaMT1XNih7ZGVmYXVsdFdpZHRoOlAxLHZpZXdwb3J0V2lkdGg6YzEsdmlld3BvcnRIZWlnaHQ6bDEsYXNwZWN0UmF0aW86JDEsb25TdGFydDooKT0+ZTEoITEpfSksZzE9TD9OMTpPP18xOkwxP1MxOjAsYTE9MTIsVDE9MjQsWjI9ZzE+MD9nMStUMTowLEIyPTA7aWYoZzE+MCl7bGV0IHo9YzEtYTEtZzEsYj1JMT4wP01hdGgubWluKEkxLFoxLndpZHRoKTpaMS53aWR0aCxOPWMxLzIrYi8yLSh6LVQxKTtpZihOPjApe2xldCBXPTIqTjtCMj1XPD1aMj9XOjB9fXJldHVybiBxKFM3LHtlbmRwb2ludDpGP0M/LmF4RW5kcG9pbnQ6dm9pZCAwLGNoaWxkcmVuOnEoImRpdiIse3N0eWxlOnsuLi5HMS5wYWdlLHBhZGRpbmdSaWdodDoyNCtCMix0cmFuc2l0aW9uOloxLmlzUmVzaXppbmc/Im5vbmUiOk02fSxjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6ey4uLkcxLnNpbXVsYXRvclN0YWNrLHdpZHRoOloxLndpZHRoLHRyYW5zaXRpb246WjEuaXNSZXNpemluZz9OODpvNX0sY2hpbGRyZW46W3EoRDEse2V4ZWM6TzEsb25Sb3RhdGU6ZCxvcmllbnRhdGlvbjpIMS5vcmllbnRhdGlvbj8/bnVsbCxkZXZpY2VVZGlkOkMuZGV2aWNlLGRldmljZU5hbWU6az8ubmFtZT8/bnVsbCxkZXZpY2VSdW50aW1lOms/LnJ1bnRpbWU/P251bGwsc3RyZWFtaW5nOlosY2hpbGRyZW46W3EobTcse2RldmljZXM6WCxzZWxlY3RlZFVkaWQ6Qy5kZXZpY2UsbG9hZGluZzpRLGVycm9yOlksc3RvcHBpbmdVZGlkczpWLG9uUmVmcmVzaDpmLG9uU2VsZWN0OkEyLG9uU3RvcDpkMSx0cmlnZ2VyOnEoRDEuVGl0bGUse30pfSkscShEMS5BY3Rpb25zLHtjaGlsZHJlbjpbZT8uaXNSZWFjdE5hdGl2ZSYmcShEMS5CdXR0b24seyJhcmlhLWxhYmVsIjoiUmVsb2FkIFJlYWN0IE5hdGl2ZSBidW5kbGUiLHRpdGxlOiJSZWxvYWQgKENtZCtSKSIsb25DbGljazooKT0+dm9pZCBrMigpLGNoaWxkcmVuOnEoRDgse30pfSkscShEMS5Ib21lQnV0dG9uLHtvbkNsaWNrOih6KT0+e3oucHJldmVudERlZmF1bHQoKSx0KCJob21lIil9fSkscShaNix7b3ZlcmxheUVuYWJsZWQ6RixzdHJlYW1pbmc6WixvblRvZ2dsZU92ZXJsYXk6KCk9Pk0oKHopPT4heil9KSxxKEQxLlJvdGF0ZUJ1dHRvbix7dGl0bGU6IlJvdGF0ZSBkZXZpY2UifSldfSldfSkscSgiZGl2Iix7cmVmOnQxLHN0eWxlOnt3aWR0aDpaMS53aWR0aCxtYXhIZWlnaHQ6IjEwMCUiLGFzcGVjdFJhdGlvOnYscG9zaXRpb246InJlbGF0aXZlIix0cmFuc2l0aW9uOloxLmlzUmVzaXppbmc/Tjg6bzUsd2lsbENoYW5nZTpaMS5pc1Jlc2l6aW5nPyJ3aWR0aCI6dm9pZCAwfSwuLi5MMi5kcm9wWm9uZVByb3BzLGNoaWxkcmVuOltxKHgyLHt1cmw6Qy51cmwsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLGJvcmRlcjoibm9uZSIscG9pbnRlckV2ZW50czpaMS5pc1Jlc2l6aW5nPyJub25lIjp2b2lkIDB9LGltYWdlU3R5bGU6e2JvcmRlclJhZGl1czpxMSxjb3JuZXJTaGFwZToic3VwZXJlbGxpcHNlKDEuMykifSxoaWRlQ29udHJvbHM6ITAsb25TdHJlYW1pbmdDaGFuZ2U6SixvblN0cmVhbVRvdWNoOkYxLG9uU3RyZWFtTXVsdGlUb3VjaDpDMSxvblN0cmVhbUJ1dHRvbjp0LHN1YnNjcmliZUZyYW1lOnguc3Vic2NyaWJlRnJhbWUsc3RyZWFtRnJhbWU6eC5mcmFtZSxzdHJlYW1Db25maWc6SDEsb25TY3JlZW5Db25maWdDaGFuZ2U6bX0pLEYmJnEoczcse30pLEwyLmlzRHJhZ092ZXImJnEoImRpdiIse3N0eWxlOnsuLi5HMS5kcm9wT3ZlcmxheSxib3JkZXJSYWRpdXM6cTF9LGNoaWxkcmVuOltxKCJzdmciLHt3aWR0aDoiMzIiLGhlaWdodDoiMzIiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltxKCJwYXRoIix7ZDoiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQifSkscSgicG9seWxpbmUiLHtwb2ludHM6IjE3IDggMTIgMyA3IDgifSkscSgibGluZSIse3gxOiIxMiIseTE6IjMiLHgyOiIxMiIseTI6IjE1In0pXX0pLHEoInNwYW4iLHtzdHlsZTp7Zm9udFNpemU6MTMsZm9udFdlaWdodDo1MDB9LGNoaWxkcmVuOiJEcm9wIG1lZGlhIG9yIC5pcGEifSldfSkscSgiZGl2Iix7cmVmOloxLmhhbmRsZVJlZixyb2xlOiJzZXBhcmF0b3IiLCJhcmlhLWxhYmVsIjoiUmVzaXplIHNpbXVsYXRvciIsImFyaWEtb3JpZW50YXRpb24iOiJ2ZXJ0aWNhbCIsImFyaWEtdmFsdWVtaW4iOk1hdGgucm91bmQoWDUpLCJhcmlhLXZhbHVlbWF4IjpNYXRoLnJvdW5kKFoxLm1heFdpZHRoKSwiYXJpYS12YWx1ZW5vdyI6TWF0aC5yb3VuZChaMS53aWR0aCksdGFiSW5kZXg6MCx0aXRsZToiRHJhZyB0byByZXNpemUiLG9uUG9pbnRlckRvd246WjEub25Qb2ludGVyRG93bixvblBvaW50ZXJNb3ZlOloxLm9uUG9pbnRlck1vdmUsb25Qb2ludGVyVXA6WjEub25Qb2ludGVyRW5kLG9uUG9pbnRlckNhbmNlbDpaMS5vblBvaW50ZXJFbmQsb25Mb3N0UG9pbnRlckNhcHR1cmU6WjEub25Qb2ludGVyRW5kLG9uS2V5RG93bjpaMS5vbktleURvd24sb25Qb2ludGVyRW50ZXI6KCk9PloxLnNldEhhbmRsZUhvdmVyZWQoITApLG9uUG9pbnRlckxlYXZlOigpPT5aMS5zZXRIYW5kbGVIb3ZlcmVkKCExKSxzdHlsZTp7Li4uRzEucmVzaXplSGFuZGxlLC4uLloxLmhhbmRsZUFjdGl2ZT9HMS5yZXNpemVIYW5kbGVBY3RpdmU6e319LGNoaWxkcmVuOnEoInN2ZyIse3dpZHRoOiIxNSIsaGVpZ2h0OiIxNSIsdmlld0JveDoiMCAwIDE1IDE1IixmaWxsOiJub25lIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIixjaGlsZHJlbjpbcSgicGF0aCIse2Q6Ik05IDEzTDEzIDkiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS40IixzdHJva2VMaW5lY2FwOiJyb3VuZCJ9KSxxKCJwYXRoIix7ZDoiTTUgMTNMMTMgNSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjQiLHN0cm9rZUxpbmVjYXA6InJvdW5kIn0pXX0pfSldfSldfSksazEudG9hc3RzLmxlbmd0aD4wJiZxKCJkaXYiLHtzdHlsZTpHMS50b2FzdFN0YWNrLGNoaWxkcmVuOltxKCJzdHlsZSIse2NoaWxkcmVuOkI2fSksazEudG9hc3RzLm1hcCgoeik9PntsZXQgYj16LnN0YXR1cz09PSJlcnJvciIsVT16LnN0YXR1cz09PSJ1cGxvYWRpbmciLE49VSYmei5wcm9ncmVzcyE9PW51bGwsVz16LnByb2dyZXNzIT1udWxsP01hdGgucm91bmQoei5wcm9ncmVzcyoxMDApOjA7cmV0dXJuIHEoImRpdiIse3N0eWxlOnsuLi5HMS50b2FzdCx1c2VyU2VsZWN0OmI/InRleHQiOiJub25lIixXZWJraXRVc2VyU2VsZWN0OmI/InRleHQiOiJub25lIixjdXJzb3I6Yj8idGV4dCI6ImRlZmF1bHQifSxjaGlsZHJlbjpbcSgiZGl2Iix7c3R5bGU6RzEudG9hc3RSb3csY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTp7Li4uRzEuZG90LGJhY2tncm91bmQ6ei5zdGF0dXM9PT0idXBsb2FkaW5nIj8iI2E1YjRmYyI6ei5zdGF0dXM9PT0ic3VjY2VzcyI/IiM0YWRlODAiOiIjZjg3MTcxIn19KSxxKCJzcGFuIix7c3R5bGU6RzEudG9hc3RUZXh0LGNoaWxkcmVuOltVJiZOJiZgVXBsb2FkaW5nICR7ei5uYW1lfeKApiAke1d9JWAsVSYmIU4mJih6LmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGluZyAke3oubmFtZX3igKZgOmBBZGRpbmcgJHt6Lm5hbWV94oCmYCksei5zdGF0dXM9PT0ic3VjY2VzcyImJih6LmtpbmQ9PT0iaXBhIj9gSW5zdGFsbGVkICR7ei5uYW1lfWA6YEFkZGVkICR7ei5uYW1lfSB0byBQaG90b3NgKSxiJiZgJHt6Lm5hbWV9OiAke3oubWVzc2FnZT8/IlVwbG9hZCBmYWlsZWQifWBdfSldfSksVSYmcSgiZGl2Iix7c3R5bGU6RzEucHJvZ3Jlc3NUcmFjayxjaGlsZHJlbjpOP3EoImRpdiIse3N0eWxlOnsuLi5HMS5wcm9ncmVzc0ZpbGwsd2lkdGg6YCR7V30lYH19KTpxKCJkaXYiLHtjbGFzc05hbWU6InNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIixzdHlsZTpHMS5wcm9ncmVzc0luZGV0ZXJtaW5hdGV9KX0pXX0sei5pZCl9KV19KSxxKCJkaXYiLHtzdHlsZTp7Li4uQzUucmFpbCxvcGFjaXR5OkwxfHxMfHxPPzA6MSxwb2ludGVyRXZlbnRzOkwxfHxMfHxPPyJub25lIjoiYXV0byJ9LGNoaWxkcmVuOltxKCJidXR0b24iLHtvbkNsaWNrOigpPT57RCghMSksUCghMSksQjEoKHopPT4heil9LHN0eWxlOkM1LmJ1dHRvbiwiYXJpYS1sYWJlbCI6Ik9wZW4gdG9vbHMgcGFuZWwiLCJhcmlhLXByZXNzZWQiOkwxLHRpdGxlOiJUb29scyIsY2hpbGRyZW46cSgic3ZnIix7d2lkdGg6IjE4IixoZWlnaHQ6IjE4Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMS43NSIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2hpbGRyZW46W3EoInJlY3QiLHt4OiIzIix5OiI0Iix3aWR0aDoiMTgiLGhlaWdodDoiMTYiLHJ4OiIyLjUifSkscSgibGluZSIse3gxOiIxNSIseTE6IjQiLHgyOiIxNSIseTI6IjIwIn0pXX0pfSkscSgiYnV0dG9uIix7b25DbGljazooKT0+e0IxKCExKSxQKCExKSxEKCh6KT0+IXopfSxzdHlsZTpDNS5idXR0b24sImFyaWEtbGFiZWwiOiJPcGVuIFdlYktpdCBEZXZUb29scyIsImFyaWEtcHJlc3NlZCI6TCx0aXRsZToiV2ViS2l0IERldlRvb2xzIixjaGlsZHJlbjpxKCJzdmciLHt3aWR0aDoiMTgiLGhlaWdodDoiMTgiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIxLjc1IixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjaGlsZHJlbjpbcSgiY2lyY2xlIix7Y3g6IjEyIixjeToiMTIiLHI6IjEwIn0pLHEoInBhdGgiLHtkOiJNMTIgMmExNC41IDE0LjUgMCAwIDAgMCAyMCAxNC41IDE0LjUgMCAwIDAgMC0yMCJ9KSxxKCJwYXRoIix7ZDoiTTIgMTJoMjAifSldfSl9KSxxKCJidXR0b24iLHtvbkNsaWNrOigpPT57QjEoITEpLEQoITEpLFAoKHopPT4heil9LHN0eWxlOkM1LmJ1dHRvbiwiYXJpYS1sYWJlbCI6Ik9wZW4gc2ltdWxhdG9yIGdyaWQiLCJhcmlhLXByZXNzZWQiOk8sdGl0bGU6IlNpbXVsYXRvcnMiLGNoaWxkcmVuOnEoInN2ZyIse3dpZHRoOiIxOCIsaGVpZ2h0OiIxOCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjEuNzUiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNoaWxkcmVuOltxKCJyZWN0Iix7eDoiMyIseToiMyIsd2lkdGg6IjciLGhlaWdodDoiNyIscng6IjEuNSJ9KSxxKCJyZWN0Iix7eDoiMTQiLHk6IjMiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSkscSgicmVjdCIse3g6IjMiLHk6IjE0Iix3aWR0aDoiNyIsaGVpZ2h0OiI3IixyeDoiMS41In0pLHEoInJlY3QiLHt4OiIxNCIseToiMTQiLHdpZHRoOiI3IixoZWlnaHQ6IjciLHJ4OiIxLjUifSldfSl9KV19KSxxKFY2LHtvcGVuOkwxLG9uQ2xvc2U6KCk9PkIxKCExKSx1ZGlkOkMuZGV2aWNlLGN1cnJlbnRBcHA6ZSxheE92ZXJsYXlFbmFibGVkOkYsb25Ub2dnbGVBeE92ZXJsYXk6KCk9Pk0oKHopPT4heiksd2lkdGg6UzF9KSxxKHU1LHtwYW5lbFdpZHRoOlMxLHZpc2libGU6TDEsb25Qb2ludGVyRG93bjpzMSxhcmlhTGFiZWw6IlJlc2l6ZSB0b29scyBwYW5lbCJ9KSxxKCQ2LHtvcGVuOk8sb25DbG9zZTooKT0+UCghMSksY3VycmVudFVkaWQ6Qy5kZXZpY2Usd2lkdGg6XzF9KSxxKHU1LHtwYW5lbFdpZHRoOl8xLHZpc2libGU6TyxvblBvaW50ZXJEb3duOnoxLGFyaWFMYWJlbDoiUmVzaXplIHNpbXVsYXRvcnMgcGFuZWwifSkscShfNix7b3BlbjpMLG9uQ2xvc2U6KCk9PkQoITEpLHVkaWQ6Qy5kZXZpY2UsdGFyZ2V0czpTLnRhcmdldHMsc2VsZWN0ZWRUYXJnZXRJZDpFLG9uU2VsZWN0VGFyZ2V0OncsbG9hZGluZzpTLmxvYWRpbmcsZXJyb3I6Uy5lcnJvcixvblJlZnJlc2g6KCk9PnZvaWQgUy5yZWZyZXNoKCksd2lkdGg6TjF9KSxxKHU1LHtwYW5lbFdpZHRoOk4xLHZpc2libGU6TCxvblBvaW50ZXJEb3duOm4xLGFyaWFMYWJlbDoiUmVzaXplIFdlYktpdCBEZXZUb29scyBwYW5lbCJ9KSxxKCJkaXYiLHtzdHlsZTpHMS5iYXIsY2hpbGRyZW46cSgic3BhbiIse3N0eWxlOnsuLi5HMS5saXZlLGNvbG9yOlo/IiM0YWRlODAiOiIjNjY2In0sY2hpbGRyZW46W3EoInNwYW4iLHtzdHlsZTp7Li4uRzEuZG90LGJhY2tncm91bmQ6Wj8iIzRhZGU4MCI6IiM2NjYifX0pLFo/ImxpdmUiOiJjb25uZWN0aW5nIl19KX0pXX0pfSl9dmFyIEcxPXtwYWdlOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsaGVpZ2h0OiIxMDB2aCIsYmFja2dyb3VuZDoiIzBhMGEwYSIscGFkZGluZzoyNCxnYXA6MTIsZm9udEZhbWlseToiLWFwcGxlLXN5c3RlbSwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmIixib3hTaXppbmc6ImJvcmRlci1ib3gifSxzaW11bGF0b3JTdGFjazp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDoxMixtaW5XaWR0aDowLHRyYW5zaXRpb246bzV9LGJhcjp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTAsZm9udFNpemU6MTIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGNvbG9yOiIjNjY2In0sbGl2ZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6NSx0cmFuc2l0aW9uOiJjb2xvciAwLjNzIn0sZG90Ont3aWR0aDo2LGhlaWdodDo2LGJvcmRlclJhZGl1czoiNTAlIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kIDAuM3MifSxlbXB0eTp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDoxMix0ZXh0QWxpZ246ImNlbnRlciJ9LGVtcHR5VGl0bGU6e2ZvbnRTaXplOjE4LG1hcmdpbjowLGNvbG9yOiIjZWVlIn0sZW1wdHlIaW50Ontjb2xvcjoiIzg4OCIsZm9udFNpemU6MTQsbWF4V2lkdGg6NDgwfSxjb2RlOntiYWNrZ3JvdW5kOiIjMjIyIixwYWRkaW5nOiIycHggNnB4Iixib3JkZXJSYWRpdXM6NCxmb250U2l6ZToxM30sZHJvcE92ZXJsYXk6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaW5zZXQ6MCxkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsZ2FwOjgsYm9yZGVyOiIycHggZGFzaGVkICNhNWI0ZmMiLGJhY2tncm91bmQ6InJnYmEoOTksMTAyLDI0MSwwLjEyKSIsYmFja2Ryb3BGaWx0ZXI6ImJsdXIoMnB4KSIsY29sb3I6IiNhNWI0ZmMiLHBvaW50ZXJFdmVudHM6Im5vbmUiLHpJbmRleDoyMH0scmVzaXplSGFuZGxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHJpZ2h0Oi0zNCxib3R0b206Mix3aWR0aDoyOCxoZWlnaHQ6MjgsYm9yZGVyUmFkaXVzOjE0LGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43MikiLGJhY2tncm91bmQ6InJnYmEoMjgsMjgsMzAsMC42MikiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xNCkiLGJveFNoYWRvdzoiMCA4cHggMjRweCByZ2JhKDAsMCwwLDAuMzIpIixiYWNrZHJvcEZpbHRlcjoiYmx1cigxOHB4KSIsV2Via2l0QmFja2Ryb3BGaWx0ZXI6ImJsdXIoMThweCkiLGN1cnNvcjoibndzZS1yZXNpemUiLHRvdWNoQWN0aW9uOiJub25lIixvcGFjaXR5OjAuNzIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjE4cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMThzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE4cyBlYXNlLCBib3gtc2hhZG93IDAuMThzIGVhc2UiLHpJbmRleDoyNX0scmVzaXplSGFuZGxlQWN0aXZlOntvcGFjaXR5OjEsYmFja2dyb3VuZDoicmdiYSg0NCw0NCw0NiwwLjgyKSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjI4KSIsYm94U2hhZG93OiIwIDEwcHggMjhweCByZ2JhKDAsMCwwLDAuNDIpLCAwIDAgMCA0cHggcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSJ9LHRvYXN0U3RhY2s6e3Bvc2l0aW9uOiJmaXhlZCIsYm90dG9tOjE2LHJpZ2h0OjE2LGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjYsbWF4V2lkdGg6MzIwLHpJbmRleDozMH0sdG9hc3Q6e2Rpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjYscGFkZGluZzoiOHB4IDEycHgiLGJhY2tncm91bmQ6IiMxYzFjMWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo4LGNvbG9yOiIjZWVlIixmb250U2l6ZToxMixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsYm94U2hhZG93OiIwIDRweCAxMnB4IHJnYmEoMCwwLDAsMC40KSJ9LHRvYXN0Um93OntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4fSx0b2FzdFRleHQ6e2ZsZXg6MSxvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwcm9ncmVzc1RyYWNrOntwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDozLHdpZHRoOiIxMDAlIixiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6MixvdmVyZmxvdzoiaGlkZGVuIn0scHJvZ3Jlc3NGaWxsOntoZWlnaHQ6IjEwMCUiLGJhY2tncm91bmQ6IiNhNWI0ZmMiLGJvcmRlclJhZGl1czoyLHRyYW5zaXRpb246IndpZHRoIDEyMG1zIGxpbmVhciJ9LHByb2dyZXNzSW5kZXRlcm1pbmF0ZTp7cG9zaXRpb246ImFic29sdXRlIix0b3A6MCxsZWZ0OjAsaGVpZ2h0OiIxMDAlIix3aWR0aDoiNDAlIixiYWNrZ3JvdW5kOiIjYTViNGZjIixib3JkZXJSYWRpdXM6Mn19LEI2PWAKICBAa2V5ZnJhbWVzIHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIHsKICAgIDAlICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTEwMCUpOyB9CiAgICAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDI1MCUpOyB9CiAgfQogIC5zZXJ2ZS1zaW0tdG9hc3QtaW5kZXRlcm1pbmF0ZSB7CiAgICBhbmltYXRpb246IHNlcnZlLXNpbS10b2FzdC1pbmRldGVybWluYXRlIDEuMXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7CiAgfQpgLEg2PXtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiY2FsYygxMDAlICsgNnB4KSIsbGVmdDowLG1pbldpZHRoOjI2MCxtYXhIZWlnaHQ6MzYwLG92ZXJmbG93WToiYXV0byIsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6NCxib3hTaGFkb3c6IjAgOHB4IDI0cHggcmdiYSgwLDAsMCwwLjUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsZm9udFNpemU6MTMsY29sb3I6IiNlZWUiLHpJbmRleDoyMH0sQTg9e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLHBhZGRpbmc6IjZweCAxMHB4Iixmb250U2l6ZToxMSxjb2xvcjoiI2FhYSJ9LEk4PXtiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixjb2xvcjoiI2E1YjRmYyIsZm9udFNpemU6MTEsY3Vyc29yOiJwb2ludGVyIixwYWRkaW5nOjB9LGQ1PXtwYWRkaW5nOiI2cHggMTBweCIsY29sb3I6IiNmODcxNzEiLGZvbnRTaXplOjExfSxhNT17ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6OCxwYWRkaW5nOiI2cHggMTBweCIsYm9yZGVyUmFkaXVzOjYsY3Vyc29yOiJwb2ludGVyIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kIDAuMTVzIn0sTjY9e2hlaWdodDoxLGJhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLG1hcmdpbjoiNHB4IDAifSxUOD17cGFkZGluZzoxMixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjQpIixmb250U2l6ZToxMSx0ZXh0QWxpZ246ImNlbnRlciJ9LEU4PXtwYWRkaW5nOiI2cHggMTBweCAycHgiLGZvbnRTaXplOjEwLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNCkiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wOGVtIn0sRjY9MzIwLEQ2PTc2MCxVNj03MjAsWDU9MjgwLE82PTMsejY9MTM2LE44PSJ3aWR0aCA3MG1zIGxpbmVhciIsbzU9IndpZHRoIDAuMjRzIGN1YmljLWJlemllcigwLjIyLCAxLCAwLjM2LCAxKSIsTTY9InBhZGRpbmctcmlnaHQgMC4yNHMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIjtmdW5jdGlvbiBXNih7ZGVmYXVsdFdpZHRoOkMsdmlld3BvcnRXaWR0aDpaLHZpZXdwb3J0SGVpZ2h0OkosYXNwZWN0UmF0aW86WCxvblN0YXJ0Okd9KXtsZXRbUSwkXT1JKG51bGwpLFtZLF9dPUkoITEpLFtWLEJdPUkoITEpLEs9aChudWxsKSxIPWgobnVsbCksRj1oKG51bGwpLE09dzgoQyxaLEosWCksTD1lMihRPz9DLEMsWixKLFgpO3koKCk9PntpZihRPT1udWxsKXJldHVybjtsZXQgaz1lMihRLEMsWixKLFgpO2lmKGshPT1RKSQoayl9LFtYLEMsUSxKLFpdKSx5KCgpPT57aWYoIVkpcmV0dXJuO2xldCBrPWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yLFQ9ZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0LFM9ZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0O3JldHVybiBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvcj0ibndzZS1yZXNpemUiLGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdD0ibm9uZSIsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PSJub25lIiwoKT0+e2RvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yPWssZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0PVQsZG9jdW1lbnQuYm9keS5zdHlsZS53ZWJraXRVc2VyU2VsZWN0PVN9fSxbWV0pO2xldCBEPWooKGspPT57bGV0IFQ9ZTIoayxDLFosSixYKTtpZihILmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSC5jdXJyZW50KTtILmN1cnJlbnQ9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57SC5jdXJyZW50PW51bGwsJChUKX0pfSxbWCxDLEosWl0pLE89aigoKT0+e2xldCBrPUsuY3VycmVudD8ucG9pbnRlcklkO2lmKEsuY3VycmVudD1udWxsLGshPW51bGwmJms+PTApe2xldCBUPUYuY3VycmVudDtpZihUPy5oYXNQb2ludGVyQ2FwdHVyZShrKSlULnJlbGVhc2VQb2ludGVyQ2FwdHVyZShrKX1pZihILmN1cnJlbnQhPW51bGwpY2FuY2VsQW5pbWF0aW9uRnJhbWUoSC5jdXJyZW50KSxILmN1cnJlbnQ9bnVsbDtfKCExKX0sW10pO3koKCk9PntyZXR1cm4oKT0+TygpfSxbT10pLHkoKCk9PntpZighWSlyZXR1cm47bGV0IGs9KCk9Pk8oKSxUPSgpPT57aWYoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlPT09ImhpZGRlbiIpTygpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLGspLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLGssITApLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVyY2FuY2VsIixrLCEwKSxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIixUKSwoKT0+e3dpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixrKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIixrLCEwKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcmNhbmNlbCIsaywhMCksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsVCl9fSxbWSxPXSk7bGV0IFA9aigoayk9PntsZXQgVD1LLmN1cnJlbnQ7aWYoIVR8fFQucG9pbnRlcklkIT09ay5wb2ludGVySWQpcmV0dXJuO2sucHJldmVudERlZmF1bHQoKSxrLnN0b3BQcm9wYWdhdGlvbigpLE8oKX0sW09dKSxFPWooKGspPT57aWYoay5idXR0b24hPT0wKXJldHVybjtrLnByZXZlbnREZWZhdWx0KCksay5zdG9wUHJvcGFnYXRpb24oKSxrLmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoay5wb2ludGVySWQpLEsuY3VycmVudD17cG9pbnRlcklkOmsucG9pbnRlcklkLHN0YXJ0WDprLmNsaWVudFgsc3RhcnRZOmsuY2xpZW50WSxzdGFydFdpZHRoOkx9LEcoKSxfKCEwKX0sW0csTF0pLHc9aigoayk9PntsZXQgVD1LLmN1cnJlbnQ7aWYoIVR8fFQucG9pbnRlcklkIT09ay5wb2ludGVySWQpcmV0dXJuO2lmKGsucHJldmVudERlZmF1bHQoKSxrLmJ1dHRvbnMhPT0xKXtPKCk7cmV0dXJufWxldCBTPWsuY2xpZW50WC1ULnN0YXJ0WCx4PShrLmNsaWVudFktVC5zdGFydFkpKlgscz1ULnN0YXJ0V2lkdGgrKE1hdGguYWJzKFMpPj1NYXRoLmFicyh4KT9TOngpO0Qocyl9LFtYLEQsT10pLGY9aigoayk9PntsZXQgVD1rLmtleT09PSJBcnJvd1JpZ2h0Inx8ay5rZXk9PT0iQXJyb3dEb3duIj8xOmsua2V5PT09IkFycm93TGVmdCJ8fGsua2V5PT09IkFycm93VXAiPy0xOjA7aWYoVD09PTApcmV0dXJuO2sucHJldmVudERlZmF1bHQoKTtsZXQgUz1rLnNoaWZ0S2V5PzgwOjI0OyQoZTIoTCtUKlMsQyxaLEosWCkpfSxbWCxDLEosWixMXSk7cmV0dXJue2hhbmRsZVJlZjpGLHdpZHRoOkwsbWF4V2lkdGg6TSxpc1Jlc2l6aW5nOlksaGFuZGxlQWN0aXZlOlZ8fFksc2V0SGFuZGxlSG92ZXJlZDpCLG9uUG9pbnRlckRvd246RSxvblBvaW50ZXJNb3ZlOncsb25Qb2ludGVyRW5kOlAsb25LZXlEb3duOmZ9fWZ1bmN0aW9uIGUyKEMsWixKLFgsRyl7bGV0IFE9dzgoWixKLFgsRyksJD1NYXRoLm1pbihYNSxRKTtyZXR1cm4gTWF0aC5taW4oUSxNYXRoLm1heCgkLEMpKX1mdW5jdGlvbiB3OChDLFosSixYKXtsZXQgRz1DKk82LFE9Wj4wP01hdGgubWF4KFg1LFotNDgpOkcsJD1KPjAmJk51bWJlci5pc0Zpbml0ZShYKSYmWD4wP01hdGgubWF4KFg1LChKLXo2KSpYKTpHO3JldHVybiBNYXRoLm1pbihHLFEsJCl9dmFyIFExPXt0aXRsZUdyb3VwOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJiYXNlbGluZSIsZ2FwOjgsbWluV2lkdGg6MH0sdGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NTAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTUpIix3aGl0ZVNwYWNlOiJub3dyYXAifSxzdWJ0aXRsZTp7Zm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC4zOCkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxoZWFkZXJBY3Rpb25zOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo0LGZsZXhTaHJpbms6MH0saWNvbkJ1dHRvbjp7d2lkdGg6MjYsaGVpZ2h0OjI2LGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC42OCkiLGJvcmRlclJhZGl1czo1LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowfSx0YXJnZXRCYXI6e21pbkhlaWdodDozNixkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLHBhZGRpbmc6IjZweCA4cHgiLGJvcmRlckJvdHRvbToiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wOCkiLGZsZXhTaHJpbms6MH0sc2VsZWN0Ont3aWR0aDoiMTAwJSIsbWluV2lkdGg6MCxoZWlnaHQ6MjYsYmFja2dyb3VuZDoiIzFjMWMxZSIsY29sb3I6IiNlZWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo2LGZvbnRTaXplOjEyLHBhZGRpbmc6IjAgOHB4IixvdXRsaW5lOiJub25lIn0scGlja2VyV3JhcDp7cG9zaXRpb246InJlbGF0aXZlIix3aWR0aDoiMTAwJSIsbWluV2lkdGg6MH0scGlja2VyQnV0dG9uOnt3aWR0aDoiMTAwJSIsbWluV2lkdGg6MCxoZWlnaHQ6MjYsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjgsYmFja2dyb3VuZDoiIzFjMWMxZSIsY29sb3I6IiNlZWUiLGJvcmRlcjoiMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xMikiLGJvcmRlclJhZGl1czo2LGZvbnRTaXplOjEyLHBhZGRpbmc6IjAgOHB4IixjdXJzb3I6InBvaW50ZXIiLHRleHRBbGlnbjoibGVmdCJ9LHBpY2tlckxhYmVsOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAiLG1pbldpZHRoOjB9LHBpY2tlckxpc3Q6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOiJjYWxjKDEwMCUgKyA0cHgpIixsZWZ0OjAsbWFyZ2luOjAscGFkZGluZzo0LGxpc3RTdHlsZToibm9uZSIsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEyKSIsYm9yZGVyUmFkaXVzOjgsYm94U2hhZG93OiIwIDhweCAyNHB4IHJnYmEoMCwwLDAsMC41KSIsbWluV2lkdGg6MjIwLG1heFdpZHRoOjM2MCxtYXhIZWlnaHQ6MzIwLG92ZXJmbG93WToiYXV0byIsekluZGV4OjUwfSxwaWNrZXJJdGVtOntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLHBhZGRpbmc6IjNweCA4cHgiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC44NSkiLGZvbnRTaXplOjEyLGxpbmVIZWlnaHQ6MS4zNX0scGlja2VySXRlbVNlbGVjdGVkOntiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDYpIn0scGlja2VySXRlbUhvdmVyZWQ6e2JhY2tncm91bmQ6InJnYmEoMTAsMTMyLDI1NSwwLjIyKSJ9LHBpY2tlckl0ZW1EaXNhYmxlZDp7b3BhY2l0eTowLjQsY3Vyc29yOiJub3QtYWxsb3dlZCIsZm9udFN0eWxlOiJpdGFsaWMifSxwaWNrZXJHcm91cDp7bGlzdFN0eWxlOiJub25lIixtYXJnaW46MCxwYWRkaW5nOjB9LHBpY2tlckdyb3VwSGVhZGVyOntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGdhcDo4LHBhZGRpbmc6IjRweCA2cHggMnB4Iixmb250U2l6ZToxMixmb250V2VpZ2h0OjYwMCxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjkyKSJ9LHBpY2tlckdyb3VwSWNvbkltZzp7d2lkdGg6MTYsaGVpZ2h0OjE2LGJvcmRlclJhZGl1czozLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIn0scGlja2VyR3JvdXBOYW1lOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwaWNrZXJHcm91cExpc3Q6e2xpc3RTdHlsZToibm9uZSIsbWFyZ2luOjAscGFkZGluZzowLHBhZGRpbmdMZWZ0OjI2fSxwaWNrZXJJdGVtVGl0bGU6e2Rpc3BsYXk6ImJsb2NrIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxwaWNrZXJJdGVtVXJsOntkaXNwbGF5OiJibG9jayIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNDIpIixvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxlbXB0eVRhcmdldDp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40OCkiLGZvbnRTaXplOjEyLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LGZyYW1lV3JhcDp7ZmxleDoxLG1pbkhlaWdodDowLGJhY2tncm91bmQ6IiNmZmYiLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9LGlmcmFtZTp7d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsYm9yZGVyOiJub25lIixkaXNwbGF5OiJibG9jayIsYmFja2dyb3VuZDoiI2ZmZiJ9LG1lc3NhZ2U6e2hlaWdodDoiMTAwJSIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjI0LGJhY2tncm91bmQ6IiMxMTExMTMiLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNTgpIix0ZXh0QWxpZ246ImNlbnRlciIsZm9udFNpemU6MTN9fSxNMT17Ym9keTp7ZmxleDoxLG1pbkhlaWdodDowLG92ZXJmbG93WToiYXV0byIscGFkZGluZzoxNCxkaXNwbGF5OiJncmlkIixncmlkVGVtcGxhdGVDb2x1bW5zOiJyZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMjAwcHgsIDFmcikpIixncmlkQXV0b1Jvd3M6Im1pbm1heCgzMDBweCwgYXV0bykiLGdhcDoxMixhbGlnbkNvbnRlbnQ6InN0YXJ0In0sZW1wdHk6e2dyaWRDb2x1bW46IjEgLyAtMSIsYmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggZGFzaGVkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6MTYsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsZm9udFNpemU6MTIsdGV4dEFsaWduOiJjZW50ZXIifSxjYXBhY2l0eTp7ZGlzcGxheToiaW5saW5lLWZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsZ2FwOjYscGFkZGluZzoiM3B4IDhweCIsYm9yZGVyUmFkaXVzOjk5OSxiYWNrZ3JvdW5kOiIjMTAxMDEwIixib3JkZXI6IjFweCBzb2xpZCAjMjIyIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgbW9ub3NwYWNlIixmb250U2l6ZToxMSxjb2xvcjoiI2JiYiIsbGluZUhlaWdodDoxfSxjYXBhY2l0eURvdDp7d2lkdGg6NixoZWlnaHQ6Nixib3JkZXJSYWRpdXM6MyxmbGV4OiIwIDAgYXV0byJ9LGNhcGFjaXR5QmFyOnttYXJnaW5MZWZ0OjIsd2lkdGg6MjgsaGVpZ2h0OjMsYmFja2dyb3VuZDoiIzFjMWMxYyIsYm9yZGVyUmFkaXVzOjIsb3ZlcmZsb3c6ImhpZGRlbiIsZGlzcGxheToiaW5saW5lLWJsb2NrIn0sdGlsZTp7cG9zaXRpb246InJlbGF0aXZlIixkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGJhY2tncm91bmQ6IiMxMTEiLGJvcmRlclJhZGl1czoxMCxvdmVyZmxvdzoiaGlkZGVuIix0ZXh0RGVjb3JhdGlvbjoibm9uZSIsY29sb3I6ImluaGVyaXQiLGJvcmRlcjoiMXB4IHNvbGlkICMyYTJhMmEiLHRyYW5zaXRpb246ImJvcmRlci1jb2xvciAxMjBtcyJ9LHRpbGVQcmV2aWV3OntmbGV4OjEsbWluSGVpZ2h0OjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixwYWRkaW5nOjgsYmFja2dyb3VuZDoiIzAwMCIscG9pbnRlckV2ZW50czoibm9uZSJ9LHRpbGVQbGFjZWhvbGRlcjp7ZmxleDoxLG1pbkhlaWdodDowLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzoxMixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDoxMCxjb2xvcjoiIzg4OCIsZm9udFNpemU6MTIsdGV4dEFsaWduOiJjZW50ZXIifSx0aWxlRXJyb3I6e2NvbG9yOiIjZTY2Iixmb250U2l6ZToxMSxmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSJ9LHRpbGVTdGFydEJ0bjp7cGFkZGluZzoiNnB4IDEycHgiLGJvcmRlclJhZGl1czo2LGJvcmRlcjoiMXB4IHNvbGlkICMzMzMiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIn0sdGlsZUZvb3Rlcjp7cGFkZGluZzoiNnB4IDEwcHgiLGJvcmRlclRvcDoiMXB4IHNvbGlkICMyMjIiLGZvbnRTaXplOjExLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBtb25vc3BhY2UiLGNvbG9yOiIjYmJiIixkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjh9LHRpbGVOYW1lOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAifSxzaHV0ZG93bkJ0bjp7cG9zaXRpb246ImFic29sdXRlIix0b3A6NixyaWdodDo2LHdpZHRoOjIyLGhlaWdodDoyMixib3JkZXJSYWRpdXM6MTEsYm9yZGVyOiIxcHggc29saWQgIzQ0NCIsYmFja2dyb3VuZDoicmdiYSgyMCwyMCwyMCwwLjg1KSIsY29sb3I6IiNjY2MiLGZvbnRTaXplOjEzLGxpbmVIZWlnaHQ6MSxjdXJzb3I6InBvaW50ZXIiLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIscGFkZGluZzowLHpJbmRleDoyLHBvaW50ZXJFdmVudHM6ImF1dG8ifX0sQzU9e3JhaWw6e3Bvc2l0aW9uOiJmaXhlZCIsdG9wOjEyLHJpZ2h0OjEyLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjQscGFkZGluZzo0LGJhY2tncm91bmQ6InJnYmEoMjAsMjAsMjIsMC44KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjEwLGJhY2tkcm9wRmlsdGVyOiJibHVyKDEycHgpIixXZWJraXRCYWNrZHJvcEZpbHRlcjoiYmx1cigxMnB4KSIsdHJhbnNpdGlvbjoib3BhY2l0eSAwLjE4cyBlYXNlIix6SW5kZXg6NDB9LGJ1dHRvbjp7d2lkdGg6MzAsaGVpZ2h0OjMwLGRpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6ImNlbnRlciIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsYm9yZGVyUmFkaXVzOjYsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43KSIsY3Vyc29yOiJwb2ludGVyIix0cmFuc2l0aW9uOiJiYWNrZ3JvdW5kIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2UifX0sYz17dG9nZ2xlOntwb3NpdGlvbjoiZml4ZWQiLHRvcDoxNixyaWdodDoxNix3aWR0aDozMCxoZWlnaHQ6MzAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6Nixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjYpIixjdXJzb3I6InBvaW50ZXIiLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xNXMgZWFzZSwgY29sb3IgMC4xNXMgZWFzZSIsekluZGV4OjQwfSxib2R5OntwYWRkaW5nOjE0LG92ZXJmbG93WToiYXV0byIsZmxleDoxLGRpc3BsYXk6ImZsZXgiLGZsZXhEaXJlY3Rpb246ImNvbHVtbiIsZ2FwOjEyfSxzZWN0aW9uVGl0bGU6e2ZvbnRTaXplOjExLGZvbnRXZWlnaHQ6NjAwLGNvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNSkiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wOGVtIixtYXJnaW46IjAgMCAxMHB4In0sc2VjdGlvbjp7YmFja2dyb3VuZDoiIzFjMWMxZSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjEwLHBhZGRpbmc6MTJ9LGVtcHR5OntiYWNrZ3JvdW5kOiIjMWMxYzFlIixib3JkZXI6IjFweCBkYXNoZWQgcmdiYSgyNTUsMjU1LDI1NSwwLjEpIixib3JkZXJSYWRpdXM6MTAscGFkZGluZzoxNixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250U2l6ZToxMix0ZXh0QWxpZ246ImNlbnRlciJ9LGFwcEhlYWRlcjp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixnYXA6MTIsbWFyZ2luQm90dG9tOjEwfSxhcHBJY29uOnt3aWR0aDo0NCxoZWlnaHQ6NDQsYm9yZGVyUmFkaXVzOjEwLGZsZXhTaHJpbms6MCxvYmplY3RGaXQ6ImNvdmVyIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIn0sYXBwTmFtZTp7Zm9udFNpemU6MTQsZm9udFdlaWdodDo2MDAsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sYXBwQnVuZGxlOntmb250U2l6ZToxMSxjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjUpIixmb250RmFtaWx5OiJ1aS1tb25vc3BhY2UsIG1vbm9zcGFjZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIn0sc3Bpbm5lcjp7Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSIsZm9udFdlaWdodDo0MDB9LGVycm9yOntiYWNrZ3JvdW5kOiJyZ2JhKDI0OCwxMTMsMTEzLDAuMDgpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI0OCwxMTMsMTEzLDAuMikiLGNvbG9yOiIjZmNhNWE1Iixmb250U2l6ZToxMSxwYWRkaW5nOiI2cHggOHB4Iixib3JkZXJSYWRpdXM6NixtYXJnaW5Cb3R0b206MTB9LGRsOnttYXJnaW46MCxkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo2fSxyb3c6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImJhc2VsaW5lIixnYXA6OCxtaW5XaWR0aDowfSxkdDp7bWFyZ2luOjAsZm9udFNpemU6MTEsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIsd2lkdGg6ODQsZmxleFNocmluazowfSxkZDp7bWFyZ2luOjAsZm9udFNpemU6MTIsY29sb3I6IiNlZWUiLGZsZXg6MSxtaW5XaWR0aDowLG92ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCJ9LHJvd0FjdGlvbldyYXA6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAscmlnaHQ6MCxib3R0b206MCxwYWRkaW5nTGVmdDoyOCxkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJmbGV4LWVuZCIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI4LDI4LDMwLDApIDAlLCAjMWMxYzFlIDU1JSkiLHRyYW5zaXRpb246Im9wYWNpdHkgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UifSxwZXJtc1RvZ2dsZTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjYsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC41KSIscGFkZGluZzowLG1hcmdpbjowLGN1cnNvcjoicG9pbnRlciIsd2lkdGg6IjEwMCUiLHRleHRBbGlnbjoibGVmdCIsbGluZUhlaWdodDoxfSxwZXJtc1Njcm9sbFdyYXA6e3Bvc2l0aW9uOiJyZWxhdGl2ZSIsbWFyZ2luVG9wOjh9LHBlcm1zU2Nyb2xsOnttYXhIZWlnaHQ6MjYwLG92ZXJmbG93WToiYXV0byIsZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6NCxwYWRkaW5nOiI4cHggMCIsc2Nyb2xsYmFyV2lkdGg6InRoaW4ifSxwZXJtc0ZhZGVUb3A6e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdG9wOjAsbGVmdDowLHJpZ2h0OjAsaGVpZ2h0OjE0LHBvaW50ZXJFdmVudHM6Im5vbmUiLGJhY2tncm91bmQ6ImxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICMxYzFjMWUgMCUsIHJnYmEoMjgsMjgsMzAsMCkgMTAwJSkiLGJvcmRlclRvcExlZnRSYWRpdXM6MTAsYm9yZGVyVG9wUmlnaHRSYWRpdXM6MTB9LHBlcm1zRmFkZUJvdHRvbTp7cG9zaXRpb246ImFic29sdXRlIixib3R0b206MCxsZWZ0OjAscmlnaHQ6MCxoZWlnaHQ6MTQscG9pbnRlckV2ZW50czoibm9uZSIsYmFja2dyb3VuZDoibGluZWFyLWdyYWRpZW50KHRvIHRvcCwgIzFjMWMxZSAwJSwgcmdiYSgyOCwyOCwzMCwwKSAxMDAlKSJ9LHBlcm1zRm9vdGVyOntkaXNwbGF5OiJmbGV4IixqdXN0aWZ5Q29udGVudDoiZmxleC1lbmQiLHBhZGRpbmdUb3A6OH0scmVzZXRBbGxCdG46e2JhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjcpIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggOHB4Iixib3JkZXJSYWRpdXM6NSxjdXJzb3I6InBvaW50ZXIiLHRleHRUcmFuc2Zvcm06InVwcGVyY2FzZSIsbGV0dGVyU3BhY2luZzoiMC4wNGVtIn0scGVybXNMaXN0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0LG1hcmdpblRvcDo0fSxwZXJtUm93OntkaXNwbGF5OiJmbGV4IixhbGlnbkl0ZW1zOiJjZW50ZXIiLGp1c3RpZnlDb250ZW50OiJzcGFjZS1iZXR3ZWVuIixnYXA6OCxwYWRkaW5nOiI0cHggMnB4In0scGVybUxhYmVsOntmb250U2l6ZToxMixjb2xvcjoiI2VlZSIsb3ZlcmZsb3c6ImhpZGRlbiIsdGV4dE92ZXJmbG93OiJlbGxpcHNpcyIsd2hpdGVTcGFjZToibm93cmFwIixmbGV4OjEsbWluV2lkdGg6MH0scGVybVNlZzp7ZGlzcGxheToiZmxleCIsZ2FwOjIsYmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA0KSIsYm9yZGVyOiIxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoyfSxwZXJtQnRuOnt3aWR0aDoyNCxoZWlnaHQ6MjIsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixib3JkZXI6Im5vbmUiLGJvcmRlclJhZGl1czo0LGN1cnNvcjoicG9pbnRlciIscGFkZGluZzowLHRyYW5zaXRpb246ImJhY2tncm91bmQgMC4xMnMsIGNvbG9yIDAuMTJzIn0scm93QWN0aW9uOnt3aWR0aDoyMCxoZWlnaHQ6MjAsZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoiY2VudGVyIixiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsYm9yZGVyOiJub25lIixib3JkZXJSYWRpdXM6NCxjb2xvcjoiI2ZmZiIsY3Vyc29yOiJwb2ludGVyIixwYWRkaW5nOjB9fSxXMT17dGFyZ2V0czp7cG9zaXRpb246ImFic29sdXRlIixpbnNldDowLG92ZXJmbG93OiJoaWRkZW4iLHBvaW50ZXJFdmVudHM6Im5vbmUiLHpJbmRleDoxMH0sdGFyZ2V0Ontwb3NpdGlvbjoiYWJzb2x1dGUiLGJveFNpemluZzoiYm9yZGVyLWJveCIsbWluV2lkdGg6MSxtaW5IZWlnaHQ6MSxwYWRkaW5nOjAsYm9yZGVyOiIxcHggc29saWQgIzM0ZDM5OSIsYm9yZGVyUmFkaXVzOjMsY3Vyc29yOiJwb2ludGVyIixwb2ludGVyRXZlbnRzOiJhdXRvIn0scGFuZWxIZWFkZXI6e2Rpc3BsYXk6ImZsZXgiLGFsaWduSXRlbXM6ImNlbnRlciIsanVzdGlmeUNvbnRlbnQ6InNwYWNlLWJldHdlZW4iLGdhcDo4fSxvdmVybGF5VG9nZ2xlOntib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpIixib3JkZXJSYWRpdXM6NSxiYWNrZ3JvdW5kOiJ0cmFuc3BhcmVudCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC43KSIsY3Vyc29yOiJwb2ludGVyIixmb250U2l6ZToxMCxwYWRkaW5nOiIzcHggN3B4In0sdG9vbGJhckJ1dHRvbkFjdGl2ZTp7YmFja2dyb3VuZDoicmdiYSgyNTUsMjU1LDI1NSwwLjA4KSIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC45NSkifSx0b29sYmFyQnV0dG9uQWN0aXZlSG92ZXI6e2JhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4xMikifSxsaXN0OntkaXNwbGF5OiJmbGV4IixmbGV4RGlyZWN0aW9uOiJjb2x1bW4iLGdhcDo0LG1hcmdpblRvcDo4LHBhZGRpbmc6IjhweCAwIixtYXhIZWlnaHQ6MjYwLG92ZXJmbG93WToiYXV0byIsc2Nyb2xsYmFyV2lkdGg6InRoaW4ifSxsaXN0SXRlbTp7ZGlzcGxheToiZmxleCIsYWxpZ25JdGVtczoiY2VudGVyIixqdXN0aWZ5Q29udGVudDoic3BhY2UtYmV0d2VlbiIsZ2FwOjgsYm9yZGVyUmFkaXVzOjYscGFkZGluZzoiNHB4IDJweCIsbWluV2lkdGg6MH0sbGlzdEl0ZW1BY3RpdmU6e2JhY2tncm91bmQ6InJnYmEoMjU1LDI1NSwyNTUsMC4wNikifSxpdGVtVGV4dDp7ZGlzcGxheToiZmxleCIsZmxleERpcmVjdGlvbjoiY29sdW1uIixnYXA6MixmbGV4OjEsbWluV2lkdGg6MH0saXRlbUxhYmVsOntvdmVyZmxvdzoiaGlkZGVuIix0ZXh0T3ZlcmZsb3c6ImVsbGlwc2lzIix3aGl0ZVNwYWNlOiJub3dyYXAiLGNvbG9yOiIjZWVlIixmb250U2l6ZToxMixmb250V2VpZ2h0OjUwMH0saXRlbU1ldGE6e292ZXJmbG93OiJoaWRkZW4iLHRleHRPdmVyZmxvdzoiZWxsaXBzaXMiLHdoaXRlU3BhY2U6Im5vd3JhcCIsY29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40NSkiLGZvbnRGYW1pbHk6InVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlIixmb250U2l6ZToxMH0saXRlbVNpemU6e2ZsZXhTaHJpbms6MCxiYWNrZ3JvdW5kOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMDQpIixib3JkZXI6IjFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIixib3JkZXJSYWRpdXM6Nixjb2xvcjoicmdiYSgyNTUsMjU1LDI1NSwwLjU1KSIsZm9udEZhbWlseToidWktbW9ub3NwYWNlLCBtb25vc3BhY2UiLGZvbnRTaXplOjEwLHBhZGRpbmc6IjNweCA2cHgifX07bTMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJvb3QiKSkucmVuZGVyKHEoTDYse30pKTsKPC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+","base64").toString("utf-8");return fe}function Hi(){try{let _=$_("xcrun simctl list devices -j",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000}),e=JSON.parse(_),t=[];for(let[S,i]of Object.entries(e.devices)){if(!/SimRuntime\.iOS-/i.test(S))continue;for(let s of i){if(s.isAvailable===!1)continue;t.push({...s,runtime:S.replace(/^.*SimRuntime\./,"")})}}return t}catch{return[]}}function Vi(){try{let _=Number($_("sysctl -n hw.memsize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),e=Number($_("sysctl -n hw.pagesize",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim()),t=$_("vm_stat",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}),S=(s)=>{let C=t.match(s);return C?Number(C[1]):0},i=S(/Pages free:\s+(\d+)/)+S(/Pages inactive:\s+(\d+)/)+S(/Pages speculative:\s+(\d+)/);return{totalBytes:Number.isFinite(_)?_:0,availableBytes:i*(Number.isFinite(e)?e:4096)}}catch{return{totalBytes:0,availableBytes:0}}}function mi(){try{let _=$_("ps -axo rss=,args=",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:3000,maxBuffer:8388608}),e={},t=0,S=/\/Devices\/([0-9A-F-]{36})\//i;for(let i of _.split(`
40
+ `)){let s=i.trimStart();if(!s)continue;let C=S.exec(s);if(!C)continue;let A=Number(s.split(/\s+/,1)[0]);if(!Number.isFinite(A))continue;let r=A*1024,n=C[1].toUpperCase();e[n]=(e[n]??0)+r,t+=r}return{perUdid:e,totalBytes:t}}catch{return{perUdid:{},totalBytes:0}}}function Li(){let{totalBytes:_,availableBytes:e}=Vi(),t=mi(),S=Object.keys(t.perUdid).length,i=S>0?t.totalBytes/S:0,s=i>=268435456?"measured":"estimated",C=s==="measured"?i:Ni,A=C>0?Math.max(0,Math.floor(e/C)):0;return{totalBytes:_,availableBytes:e,runningSimulators:S,perSimAvgBytes:C,perSimSource:s,estimatedAdditional:A}}function Wi(){if(process.argv[0]&&/(^|\/)serve-sim$/.test(process.argv[0]))return{command:process.argv[0],baseArgs:[]};if(process.argv[1]&&/(^|\/)serve-sim\.js$/.test(process.argv[1]))return{command:process.argv[0],baseArgs:[process.argv[1]]};try{let _=$_("command -v serve-sim",{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:1500}).trim();if(_)return{command:_,baseArgs:[]}}catch{}return null}function Pi(_){let e=(_?.basePath??"/.sim").replace(/\/+$/,"");return(t,S,i)=>{let s=t.url??"",C=s.indexOf("?"),A=C===-1?s:s.slice(0,C),r=Oi(s)??_?.device??null,n=e==="/"?"/devtools-frontend":`${e}/devtools-frontend`;if(A===n||A.startsWith(`${n}/`)){(async()=>{let y=A===n?"inspector.html":A.slice(n.length+1);if(y.split("/").some((o)=>o==="..")){S.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),S.end("Invalid asset path");return}try{let o=await fetch(`https://chrome-devtools-frontend.appspot.com/serve_rev/@${Ei}/${y}${C===-1?"":s.slice(C)}`),B={"Cache-Control":"public, max-age=604800"},l=o.headers.get("content-type");if(l)B["Content-Type"]=l;S.writeHead(o.status,B),S.end(Buffer.from(await o.arrayBuffer()))}catch(o){S.writeHead(502,{"Content-Type":"text/plain; charset=utf-8"}),S.end(o instanceof Error?o.message:"Failed to load DevTools frontend")}})();return}if(A===e||A===e+"/"){let y=C_(),o=r_(y,r),B=hi();if(o){let l=(e===""?"":e)+"/grid/api",O=`<script>window.__SIM_PREVIEW__=${JSON.stringify({...o,basePath:e,logsEndpoint:P_(e,"/logs",o.device),appStateEndpoint:P_(e,"/appstate",o.device),axEndpoint:P_(e,"/ax",o.device),devtoolsEndpoint:P_(e,"/devtools",o.device),gridApiEndpoint:l,gridStartEndpoint:l+"/start",gridShutdownEndpoint:l+"/shutdown",gridMemoryEndpoint:l+"/memory",previewEndpoint:e===""?"/":e})}</script>`;B=B.replace("<!--__SIM_PREVIEW_CONFIG__-->",O)}S.writeHead(200,{"Content-Type":"text/html; charset=utf-8","Cache-Control":"no-store"}),S.end(B);return}if(A===e+"/grid/api/memory"){S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify(Li()));return}if(A===e+"/grid/api"){let y=C_(),o=new Map(y.map((E)=>[E.device,E])),l=Hi().map((E)=>{let b=o.get(E.udid);return{device:E.udid,name:E.name,runtime:E.runtime,state:E.state,helper:b?{port:b.port,url:b.url,streamUrl:b.streamUrl,wsUrl:b.wsUrl}:null}}),v=(E)=>{if(/iphone/i.test(E))return 0;if(/ipad/i.test(E))return 1;if(/watch/i.test(E))return 2;if(/(apple\s*tv|^tv\b)/i.test(E))return 3;if(/vision|reality/i.test(E))return 4;return 5},O=(E)=>E.helper?0:E.state==="Booted"?1:2;l.sort((E,b)=>v(E.name)-v(b.name)||O(E)-O(b)||E.name.localeCompare(b.name)),S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify({devices:l}));return}if(A===e+"/grid/api/shutdown"&&t.method==="POST"){let y="";t.on("data",(o)=>{y+=typeof o==="string"?o:o.toString()}),t.on("end",()=>{let o="";try{o=JSON.parse(y).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(o)){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}p_={at:0,booted:null},gt("xcrun",["simctl","shutdown",o],{timeout:30000},(B,l,v)=>{if(B){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:v?.toString().trim()||B.message}));return}S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!0}))})});return}if(A===e+"/grid/api/start"&&t.method==="POST"){let y="";t.on("data",(o)=>{y+=typeof o==="string"?o:o.toString()}),t.on("end",()=>{let o="";try{o=JSON.parse(y).udid??""}catch{}if(!/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(o)){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:"Invalid or missing udid"}));return}let B=Wi();if(!B){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:"serve-sim CLI not found in PATH. Install it (npm i -g serve-sim) and retry."}));return}let l=De(B.command,[...B.baseArgs,"--detach",o],{stdio:["ignore","pipe","pipe"],detached:!1}),v="",O="";l.stdout?.on("data",(b)=>{v+=b.toString()}),l.stderr?.on("data",(b)=>{O+=b.toString()});let E=setTimeout(()=>{try{l.kill("SIGTERM")}catch{}},180000);l.on("close",(b)=>{if(clearTimeout(E),b===0)S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!0,stdout:v.trim()}));else S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({ok:!1,error:O.trim()||v.trim()||`serve-sim exited with code ${b}`}))})});return}if(A===e+"/devtools"){(async()=>{let y=C_();if(!r_(y,r)){S.writeHead(404,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"No serve-sim device"}));return}try{let B=await Te(),l=await B.listTargets(),v=wi(t.headers?.host,B.port),O=l.map((E)=>({...E,webSocketDebuggerUrl:`ws://${v}/devtools/page/${encodeURIComponent(E.id)}`,devtoolsFrontendUrl:gi(n,v,E.id)}));S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify({port:B.port,targets:O}))}catch(B){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:B instanceof Error?B.message:"Failed to start inspect-webkit"}))}})();return}if(A===e+"/devtools/release"&&t.method==="POST"){let y="";t.on("data",(o)=>y+=o),t.on("end",async()=>{try{let o=y?JSON.parse(y):{};(await Te()).releaseHighlight?.(o.targetId),S.writeHead(200,{"Content-Type":"application/json"}),S.end("{}")}catch(o){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:o instanceof Error?o.message:"Failed to release"}))}});return}if(A===e+"/devtools/highlight"&&t.method==="POST"){let y="";t.on("data",(o)=>y+=o),t.on("end",async()=>{try{let{targetId:o,on:B}=JSON.parse(y||"{}");if(!o){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"Missing targetId"}));return}let l=await Te();if(!l.highlightTarget){S.writeHead(501,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:"highlightTarget not supported by inspect-webkit"}));return}await l.highlightTarget(o,!!B),S.writeHead(200,{"Content-Type":"application/json"}),S.end("{}")}catch(o){S.writeHead(500,{"Content-Type":"application/json"}),S.end(JSON.stringify({error:o instanceof Error?o.message:"Failed to highlight target"}))}});return}if(A===e+"/api"){let y=C_(),o=r_(y,r);S.writeHead(200,{"Content-Type":"application/json","Cache-Control":"no-store"}),S.end(JSON.stringify(o||null));return}if(A===e+"/ax"){let y=C_(),o=r_(y,r);if(!o){S.writeHead(404),S.end("No serve-sim device");return}S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
40
41
 
41
- `);let u=Di.get(n.device,n.port).addClient(S);t.on("close",u);return}if(($===e+"/exec"||$===e+"/exec/")&&t.method==="POST"){let y="";t.on("data",(n)=>{y+=typeof n==="string"?n:n.toString()}),t.on("end",()=>{let n="";try{n=JSON.parse(y).command??""}catch{}if(!n){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}yi(n,{maxBuffer:16777216},(f,u,v)=>{S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:u.toString(),stderr:v.toString(),exitCode:f?f.code??1:0}))})});return}if($===e+"/logs"){let y=a_(),n=C_(y,r);if(!n){S.writeHead(404),S.end("No serve-sim device");return}let f=n.device;S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
42
+ `);let l=Fi.get(o.device,o.port).addClient(S);t.on("close",l);return}if((A===e+"/exec"||A===e+"/exec/")&&t.method==="POST"){let y="";t.on("data",(o)=>{y+=typeof o==="string"?o:o.toString()}),t.on("end",()=>{let o="";try{o=JSON.parse(y).command??""}catch{}if(!o){S.writeHead(400,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:"",stderr:"Missing command",exitCode:1}));return}Di(o,{maxBuffer:16777216},(B,l,v)=>{S.writeHead(200,{"Content-Type":"application/json"}),S.end(JSON.stringify({stdout:l.toString(),stderr:v.toString(),exitCode:B?B.code??1:0}))})});return}if(A===e+"/logs"){let y=C_(),o=r_(y,r);if(!o){S.writeHead(404),S.end("No serve-sim device");return}let B=o.device;S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
42
43
 
43
- `);let u=pt("xcrun",["simctl","spawn",f,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),v="";u.stdout.on("data",(O)=>{v+=O.toString();let p;while((p=v.indexOf(`
44
- `))!==-1){let l=v.slice(0,p).trim();if(v=v.slice(p+1),l)S.write("data: "+l+`
44
+ `);let l=De("xcrun",["simctl","spawn",B,"log","stream","--style","ndjson","--level","info"],{stdio:["ignore","pipe","ignore"]}),v="";l.stdout.on("data",(O)=>{v+=O.toString();let E;while((E=v.indexOf(`
45
+ `))!==-1){let b=v.slice(0,E).trim();if(v=v.slice(E+1),b)S.write("data: "+b+`
45
46
 
46
- `)}}),u.on("close",()=>S.end()),t.on("close",()=>u.kill());return}if($===e+"/appstate"){let y=a_(),n=C_(y,r);if(!n){S.writeHead(404),S.end("No serve-sim device");return}let f=n.device;S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
47
+ `)}}),l.on("close",()=>S.end()),t.on("close",()=>l.kill());return}if(A===e+"/appstate"){let y=C_(),o=r_(y,r);if(!o){S.writeHead(404),S.end("No serve-sim device");return}let B=o.device;S.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),S.write(`:
47
48
 
48
- `);let u=pt("xcrun",["simctl","spawn",f,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),v=/\[app<([^>]+)>:(\d+)\] Setting process visibility to: Foreground/,O="",p="";u.stdout.on("data",(l)=>{p+=l.toString();let F;while((F=p.indexOf(`
49
- `))!==-1){let D=p.slice(0,F).trim();if(p=p.slice(F+1),!D)continue;let R;try{R=JSON.parse(D).eventMessage??""}catch{continue}let E=v.exec(R);if(!E)continue;let a=E[1],A=parseInt(E[2],10);if(!Fi(a))continue;if(a===O)continue;O=a,pi(f,a).then((B)=>{S.write("data: "+JSON.stringify({bundleId:a,pid:A,isReactNative:B})+`
49
+ `);let l="";(async()=>{try{let p=new AbortController,T=setTimeout(()=>p.abort(),1500),D=await fetch(`http://127.0.0.1:${o.port}/foreground`,{signal:p.signal});if(clearTimeout(T),!D.ok)return;let f=await D.json();if(!f.bundleId||!lt(f.bundleId))return;if(S.writableEnded)return;l=f.bundleId;let a=await ut(B,f.bundleId);if(S.writableEnded)return;S.write("data: "+JSON.stringify({bundleId:f.bundleId,pid:f.pid,isReactNative:a})+`
50
50
 
51
- `)})}}),u.on("close",()=>S.end()),t.on("close",()=>u.kill());return}if(i)i()}}var lt,Ri="854a02be78c7ffea104cb523636efa991bef5c5b",m_=9222,Di,i_=null,fi,Ti,Ei,L_,De=null;var bt=j_(()=>{Xe();lt=fe(ci(),"serve-sim"),Di=qe(),fi=new Set(["host.exp.Exponent","dev.expo.Exponent"]),Ti=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],Ei=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;L_={at:0,booted:null}});import{execSync as j,spawn as gt}from"child_process";import{chmodSync as wi,existsSync as l_,mkdirSync as wt,openSync as Nt,closeSync as ht,readFileSync as U_,unlinkSync as q_,writeFileSync as Ht}from"fs";import{createHash as Ni}from"crypto";import{homedir as hi,networkInterfaces as Hi}from"os";import{join as Vi,resolve as Te}from"path";import{tmpdir as rS}from"os";import{join as b_}from"path";import{readdirSync as AS}from"fs";var Y=b_(rS(),"serve-sim"),CC=b_(Y,"server.json");function O_(_){return b_(Y,`server-${_}.json`)}function d_(){try{return AS(Y).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>b_(Y,_))}catch{return[]}}import{fileURLToPath as $S}from"url";import{dirname as oS}from"path";import{createServer as nS}from"http";import{createServer as yS}from"net";function Pe(_){return oS($S(_))}function g_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function Me(_){return new Promise((e)=>{let t=yS();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_)})}async function Ue(_){let e=nS((t,S)=>{_.middleware(t,S,()=>{if(!S.headersSent)S.statusCode=404;S.end("Not found")})});return e.keepAliveTimeout=0,e.headersTimeout=0,e.requestTimeout=0,e.timeout=0,await new Promise((t,S)=>{let i=(C)=>{e.removeListener("listening",s),S(C)},s=()=>{e.removeListener("error",i),t()};e.once("error",i),e.once("listening",s),e.listen(_.port)}),{stop:()=>e.close()}}var n_="./serve-sim-bin-vq1ps9tz.";var mi=Pe(import.meta.url);function ve(){if(!l_(Y))wt(Y,{recursive:!0})}function Q(_){if(_)return Ee(O_(_));for(let e of d_()){let t=Ee(e);if(t)return t}return null}var P_={at:0,booted:null};function Li(){let _=Date.now();if(P_.booted&&_-P_.at<1000)return P_.booted;try{let e=j("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(e),S=new Set;for(let i of Object.values(t.devices))for(let s of i)if(s.state==="Booted")S.add(s.udid);return P_={at:_,booted:S},S}catch{return null}}function Ee(_){try{if(!l_(_))return null;let e=JSON.parse(U_(_,"utf-8"));try{process.kill(e.pid,0)}catch{return q_(_),null}let t=Li();if(t&&!t.has(e.device)){console.error(`[serve-sim] Helper pid ${e.pid} is bound to device ${e.device} which is no longer booted — killing stale helper.`);try{process.kill(e.pid,"SIGTERM")}catch{}try{q_(_)}catch{}return null}return e}catch{return null}}function X_(){let _=[];for(let e of d_()){let t=Ee(e);if(t)_.push(t)}return _}function Ot(_){ve(),Ht(O_(_.device),JSON.stringify(_,null,2))}function v_(_){if(_)try{q_(O_(_))}catch{}else for(let e of d_())try{q_(e)}catch{}}function Wi(){let _=n_.startsWith("/$bunfs/");if(!_&&l_(n_))return n_;if(!_){let s=Te(mi,"../bin/serve-sim-bin");if(l_(s))return s;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
52
- Checked: ${n_}, ${s}`)}let e=U_(n_),t=Ni("sha256").update(e).digest("hex").slice(0,16),S=Te(hi(),"Library/Caches/serve-sim");wt(S,{recursive:!0});let i=Te(S,`serve-sim-bin-${t}`);if(!l_(i)){Ht(i,e),wi(i,493);try{j(`codesign -s - -f ${JSON.stringify(i)}`,{stdio:"ignore"})}catch{}}return i}function Vt(){let _=null;try{_=j("xcode-select -p",{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{}if(!_)return process.env;let e=`${_}/Library/PrivateFrameworks`;return{...process.env,DYLD_FRAMEWORK_PATH:process.env.DYLD_FRAMEWORK_PATH?`${e}:${process.env.DYLD_FRAMEWORK_PATH}`:e}}function mt(){try{let _=j("xcrun simctl list devices booted -j",{encoding:"utf-8"}),e=JSON.parse(_);for(let t of Object.values(e.devices))for(let S of t)if(S.state==="Booted")return S.udid}catch{}return null}function Lt(){try{let _=j("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(_),t=Object.keys(e.devices).filter((S)=>/SimRuntime\.iOS-/i.test(S)).sort((S,i)=>{let s=(S.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),C=(i.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(C[0]??0)-(s[0]??0)||(C[1]??0)-(s[1]??0)});for(let S of t){let s=(e.devices[S]??[]).find((C)=>C.isAvailable!==!1&&/^iPhone\b/i.test(C.name));if(s)return{udid:s.udid,name:s.name}}}catch{}return null}function dt(_){try{let e=j("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.udid===_)return i.name}catch{}return null}function I_(_){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_))return _;try{let e=j("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.name.toLowerCase()===_.toLowerCase())return i.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}function Wt(_){try{let e=j("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.udid===_)return i.state==="Booted"}catch{}return!1}function Fe(_){try{return process.kill(_,0),!0}catch{return!1}}function pe(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),g_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let t=Date.now()+500;while(Date.now()<t)try{process.kill(_,0),g_(25)}catch{return}}function Pi(_){try{let e=j(`lsof -ti tcp:${_}`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!e)return[];let t=process.pid;return e.split(`
53
- `).map((S)=>parseInt(S,10)).filter((S)=>Number.isFinite(S)&&S!==t)}catch{return[]}}function Mi(_){let e=Pi(_);if(e.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing holder pid(s): ${e.join(", ")}\x1B[0m`);for(let t of e)try{process.kill(t,"SIGKILL")}catch{}g_(100)}function Ui(_){if(!Wt(_))try{j(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(e){let t=(e.stderr??e.message??"").toLowerCase();if(!t.includes("booted")&&!t.includes("current state"))throw Error(`Failed to boot device ${_}: ${e.stderr||e.message}`)}try{j("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function qi(){let _=Hi();for(let e of Object.values(_))for(let t of e??[])if(t.family==="IPv4"&&!t.internal)return t.address;return null}async function Pt(_){let e=new Set(X_().map((t)=>t.port));for(let t=_;t<_+100;t++){if(e.has(t))continue;if(await Me(t))return t}throw Error(`No available port found in range ${_}-${_+99}`)}async function Xi(_){Ui(_);try{j(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(e){if(!Wt(_))console.error(`Device ${_} failed to reach booted state: ${e.stderr||e.message}`),process.exit(1)}}async function Mt(_,e,t,S){let i=!1;for(let C=0;C<30;C++){if(!S())break;try{if((await fetch(`${e}/health`)).ok){i=!0;break}}catch{}await new Promise(($)=>setTimeout($,100))}if(i){let C=Date.now()+8000;while(Date.now()<C){if(await new Promise(($)=>setTimeout($,200)),!S()){i=!1;break}try{if(U_(t,"utf-8").includes("Capture started"))break}catch{}}}let s="";try{s=U_(t,"utf-8").trim()}catch{}return{ready:i,log:s}}async function Ii(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;ve();let $=Nt(s,"w"),r=gt(e,[t,"--port",String(S)],{detached:!0,stdio:["ignore",$,$],env:Vt()});r.unref(),ht($);let o=r.pid,y=!1;r.once("exit",()=>{y=!0});let{ready:n,log:f}=await Mt(o,C,s,()=>!y&&Fe(o));return{ready:n,pid:o,exited:y||!Fe(o),log:f}}async function Gi(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;ve();let $=Nt(s,"w"),r=gt(e,[t,"--port",String(S)],{detached:!1,stdio:["ignore",$,$],env:Vt()});ht($);let o=r.pid,y=!1;r.once("exit",()=>{y=!0});let{ready:n,log:f}=await Mt(o,C,s,()=>!y&&Fe(o));return{ready:n,child:r,log:f}}async function Ut(_,e,t){await Xi(_);let S="127.0.0.1",i=Wi(),s=Vi(Y,`server-${_}.log`),C={helperPath:i,udid:_,port:e,host:S,logFile:s},$="",r=2;for(let y=1;y<=r;y++){if(Mi(e),t.detach){let n=await Ii(C);if(n.ready){let f={pid:n.pid,port:e,device:_,url:`http://${S}:${e}`,streamUrl:`http://${S}:${e}/stream.mjpeg`,wsUrl:`ws://${S}:${e}/ws`};return Ot(f),{pid:n.pid}}pe(n.pid),$=n.log}else{let n=await Gi(C);if(n.ready){let f={pid:n.child.pid,port:e,device:_,url:`http://${S}:${e}`,streamUrl:`http://${S}:${e}/stream.mjpeg`,wsUrl:`ws://${S}:${e}/ws`};return Ot(f),{pid:n.child.pid,child:n.child}}pe(n.child.pid),$=n.log}if(y<r)await new Promise((n)=>setTimeout(n,500))}let o=$?`Helper failed:
54
- ${$}`:"Helper process failed to start";console.error(o),process.exit(1)}async function ki(_,e,t){let S=_.length>0?_.map(I_):(()=>{let o=mt();if(o)return[o];let y=Lt();if(!y)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!t)console.log(`No booted simulator booting ${y.name}...`);return[y.udid]})(),i=new Map,s=[],C=e;for(let o of S){let y=Q(o);if(y){if(!t){let O=dt(o)??o;if(S.length>1)console.log(`
55
- ==> ${O} (${o}) <==`);console.log(` Already running on port ${y.port}`),console.log(` Stream: ${y.streamUrl}`),console.log(` WebSocket: ${y.wsUrl}`)}s.push(y);continue}C=await Pt(C);let{pid:n,child:f}=await Ut(o,C,{detach:!1});if(f)i.set(o,f);let u="127.0.0.1",v={pid:n,port:C,device:o,url:`http://${u}:${C}`,streamUrl:`http://${u}:${C}/stream.mjpeg`,wsUrl:`ws://${u}:${C}/ws`};if(s.push(v),!t){let O=dt(o)??o;if(S.length>1)console.log(`
56
- ==> ${O} (${o}) <==`);console.log(` Stream: ${v.streamUrl}`),console.log(` WebSocket: ${v.wsUrl}`),console.log(` Port: ${C}`)}C++}if(s.length===1){let o=s[0];console.log(JSON.stringify({url:o.url,streamUrl:o.streamUrl,wsUrl:o.wsUrl,port:o.port,device:o.device}))}else console.log(JSON.stringify({devices:s.map((o)=>({url:o.url,streamUrl:o.streamUrl,wsUrl:o.wsUrl,port:o.port,device:o.device}))}));if(i.size===0)return;let $=!1,r=(o)=>{if($)return;if($=!0,!t)console.log(`
57
- Shutting down...`);for(let[y,n]of i){let f=n.pid;if(f)pe(f);v_(y)}i.clear(),process.exit(o)};for(let[o,y]of i)y.on("exit",(n)=>{if($)return;if(!t)console.error(`[${o}] Helper exited (code ${n})`);if(v_(o),i.delete(o),i.size===0)r(n??1)});process.on("SIGINT",()=>r(0)),process.on("SIGTERM",()=>r(0)),process.on("SIGHUP",()=>r(0)),process.on("exit",()=>{for(let[o,y]of i){try{if(y.pid)process.kill(y.pid,"SIGTERM")}catch{}try{v_(o)}catch{}}}),await new Promise(()=>{})}async function le(_,e){let t=_.length>0?_.map(I_):(()=>{let s=mt();if(s)return[s];let C=Lt();if(!C)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[C.udid]})(),S=[],i=e;for(let s of t){let C=Q(s);if(C){S.push(C);continue}i=await Pt(i),await Ut(s,i,{detach:!0});let $="127.0.0.1";S.push({pid:Q(s).pid,port:i,device:s,url:`http://${$}:${i}`,streamUrl:`http://${$}:${i}/stream.mjpeg`,wsUrl:`ws://${$}:${i}/ws`}),i++}return S}function Ki(_){if(_.length===1){let e=_[0];console.log(JSON.stringify({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}else console.log(JSON.stringify({devices:_.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}))}function xi(_){if(_){let t=I_(_),S=Q(t);if(!S)console.log(JSON.stringify({running:!1,device:t}));else console.log(JSON.stringify({running:!0,url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}));return}let e=X_();if(e.length===0)console.log(JSON.stringify({running:!1}));else if(e.length===1){let t=e[0];console.log(JSON.stringify({running:!0,url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}))}else console.log(JSON.stringify({running:!0,streams:e.map((t)=>({url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}))}))}function zi(_){if(_){let e=I_(_),t=Q(e);if(!t){console.log(JSON.stringify({disconnected:!0,device:e}));return}try{process.kill(t.pid,"SIGTERM")}catch{}v_(e),console.log(JSON.stringify({disconnected:!0,device:t.device}))}else{let e=X_();if(e.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let t=[];for(let S of e){try{process.kill(S.pid,"SIGTERM")}catch{}t.push(S.device)}v_(),console.log(JSON.stringify({disconnected:!0,devices:t}))}}async function ji(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=Q(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0];if(!i)console.error("Usage: serve-sim gesture '<json>'"),console.error(`Example: serve-sim gesture '{"type":"begin","x":0.5,"y":0.5}'`),process.exit(1);let s;try{s=JSON.parse(i)}catch{console.error("Invalid JSON:",i),process.exit(1)}return new Promise((C,$)=>{let r=new WebSocket(S.wsUrl);r.binaryType="arraybuffer",r.onopen=()=>{let o=new TextEncoder().encode(JSON.stringify(s)),y=new Uint8Array(1+o.length);y[0]=3,y.set(o,1),r.send(y),setTimeout(()=>{r.close(),C()},50)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),$(Error("WebSocket connection failed"))}})}async function Ji(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=Q(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0],s=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!i||!s.has(i))console.error(`Usage: serve-sim rotate <${[...s].join("|")}> [-d udid]`),process.exit(1);return new Promise((C,$)=>{let r=new WebSocket(S.wsUrl);r.binaryType="arraybuffer",r.onopen=()=>{let o=new TextEncoder().encode(JSON.stringify({orientation:i})),y=new Uint8Array(1+o.length);y[0]=7,y.set(o,1),r.send(y),setTimeout(()=>{r.close(),C()},50)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),$(Error("WebSocket connection failed"))}})}async function Qi(_){let e,t=[];for(let s=0;s<_.length;s++)if(_[s]==="--device"||_[s]==="-d")e=_[++s];else t.push(_[s]);let S=Q(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0]??"home";return new Promise((s,C)=>{let $=new WebSocket(S.wsUrl);$.binaryType="arraybuffer",$.onopen=()=>{let r=new TextEncoder().encode(JSON.stringify({button:i})),o=new Uint8Array(1+r.length);o[0]=4,o.set(r,1),$.send(o),setTimeout(()=>{$.close(),s()},50)},$.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),C(Error("WebSocket connection failed"))}})}async function Zi(_){let e,t=[];for(let o=0;o<_.length;o++)if(_[o]==="--device"||_[o]==="-d")e=_[++o];else t.push(_[o]);let S=t[0],i=(t[1]??"").toLowerCase(),s=i==="on"||i==="1"||i==="true",C={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},$=S?C[S]??S:void 0;if(!$||!["on","off","1","0","true","false"].includes(i))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
58
- option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let r=Q(e);if(!r)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((o,y)=>{let n=new WebSocket(r.wsUrl);n.binaryType="arraybuffer",n.onopen=()=>{let f=new TextEncoder().encode(JSON.stringify({option:$,enabled:s})),u=new Uint8Array(1+f.length);u[0]=8,u.set(f,1),n.send(u),setTimeout(()=>{n.close(),o()},50)},n.onerror=()=>{console.error("Failed to connect to serve-sim server at",r.wsUrl),y(Error("WebSocket connection failed"))}})}async function Yi(_){let e;for(let S=0;S<_.length;S++)if(_[S]==="--device"||_[S]==="-d")e=_[++S];let t=Q(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((S,i)=>{let s=new WebSocket(t.wsUrl);s.binaryType="arraybuffer",s.onopen=()=>{s.send(new Uint8Array([9])),setTimeout(()=>{s.close(),S()},50)},s.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),i(Error("WebSocket connection failed"))}})}async function _C(_,e,t){let S;if(e.length>0)S=(await le(e,3100))[0]?.device;else{let n=X_();if(n.length>0)S=n[0]?.device;else console.log("Starting simulator stream..."),S=(await le(e,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (bt(),ut)),s=i({basePath:"/",device:S}),C=t?1:50,$=_,r,o=!1;for(let n=0;n<C;n++){let f=_+n;try{await eC(f,s),$=f,o=!0;break}catch(u){if(r=u,u?.code!=="EADDRINUSE")break}}if(!o){if(r?.code==="EADDRINUSE")if(t)console.error(`Port ${_} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${_}-${_+C-1}.`);else console.error(`Failed to start preview server: ${r?.message??r}`);process.exit(1)}let y=qi();if(console.log(""),console.log(` - Local: http://localhost:${$}`),y)console.log(` - Network: http://${y}:${$}`);console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function eC(_,e){return Ue({port:_,middleware:e})}function qt(){console.log(`
51
+ `)}catch{}})();let v=De("xcrun",["simctl","spawn",B,"log","stream","--style","ndjson","--level","info","--predicate",'process == "SpringBoard" AND eventMessage CONTAINS "Setting process visibility to: Foreground"'],{stdio:["ignore","pipe","ignore"]}),O=!1,E=async(p,T)=>{if(!lt(p))return;if(p===l)return;l=p;let D=await ut(B,p);if(!O)S.write("data: "+JSON.stringify({bundleId:p,pid:T,isReactNative:D})+`
52
+
53
+ `)},b="";v.stdout.on("data",(p)=>{b+=p.toString();let T;while((T=b.indexOf(`
54
+ `))!==-1){let D=b.slice(0,T).trim();if(b=b.slice(T+1),!D)continue;let f;try{f=JSON.parse(D).eventMessage??""}catch{continue}let a=wt(f);if(!a)continue;E(a.bundleId,a.pid)}}),v.on("close",()=>S.end()),t.on("close",()=>{O=!0,v.kill()});return}if(i)i()}}var vt,Ei="854a02be78c7ffea104cb523636efa991bef5c5b",W_=9222,Fi,i_=null,bi,pi,vi,p_,fe=null,Ni=1610612736;var Ht=J_(()=>{Xe();vt=Ee(Ti(),"serve-sim"),Fi=qe(),bi=new Set(["host.exp.Exponent","dev.expo.Exponent"]),pi=["Frameworks/React.framework","Frameworks/hermes.framework","Frameworks/Hermes.framework","Frameworks/ExpoModulesCore.framework","main.jsbundle"],vi=/(WidgetRenderer|ExtensionHost|\.extension(\.|$)|Service|PlaceholderApp|InCallService|CallUI|InCallUI|com\.apple\.Preferences\.Cellular|com\.apple\.purplebuddy|com\.apple\.chrono|com\.apple\.shuttle|com\.apple\.usernotificationsui)/i;p_={at:0,booted:null}});import{execSync as j,spawn as mt}from"child_process";import{chmodSync as Mi,existsSync as l_,mkdirSync as Lt,openSync as Wt,closeSync as Pt,readFileSync as I_,unlinkSync as G_,writeFileSync as Mt}from"fs";import{createHash as Ui}from"crypto";import{homedir as Ii,networkInterfaces as Gi}from"os";import{join as qi,resolve as Fe}from"path";import{tmpdir as aS}from"os";import{join as d_}from"path";import{readdirSync as cS}from"fs";var Y=d_(aS(),"serve-sim"),RC=d_(Y,"server.json");function g_(_){return d_(Y,`server-${_}.json`)}function w_(){try{return cS(Y).filter((_)=>_.startsWith("server-")&&_.endsWith(".json")).map((_)=>d_(Y,_))}catch{return[]}}import{fileURLToPath as RS}from"url";import{dirname as BS}from"path";import{createServer as DS}from"http";import{createServer as TS}from"net";function Ue(_){return BS(RS(_))}function h_(_){Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,_)}async function Ie(_){return new Promise((e)=>{let t=TS();t.once("error",()=>e(!1)),t.once("listening",()=>t.close(()=>e(!0))),t.listen(_)})}async function Ge(_){let e=DS((t,S)=>{_.middleware(t,S,()=>{if(!S.headersSent)S.statusCode=404;S.end("Not found")})});return e.keepAliveTimeout=0,e.headersTimeout=0,e.requestTimeout=0,e.timeout=0,await new Promise((t,S)=>{let i=(C)=>{e.removeListener("listening",s),S(C)},s=()=>{e.removeListener("error",i),t()};e.once("error",i),e.once("listening",s),e.listen(_.port)}),{stop:()=>e.close()}}var a_="./serve-sim-bin-z5ht7tmw.";var Xi=Ue(import.meta.url);function ue(){if(!l_(Y))Lt(Y,{recursive:!0})}function Z(_){if(_)return be(g_(_));for(let e of w_()){let t=be(e);if(t)return t}return null}var M_={at:0,booted:null};function ki(){let _=Date.now();if(M_.booted&&_-M_.at<1000)return M_.booted;try{let e=j("xcrun simctl list devices booted -j",{encoding:"utf-8",stdio:["ignore","pipe","pipe"],timeout:3000}),t=JSON.parse(e),S=new Set;for(let i of Object.values(t.devices))for(let s of i)if(s.state==="Booted")S.add(s.udid);return M_={at:_,booted:S},S}catch{return null}}function be(_){try{if(!l_(_))return null;let e=JSON.parse(I_(_,"utf-8"));try{process.kill(e.pid,0)}catch{return G_(_),null}let t=ki();if(t&&!t.has(e.device)){console.error(`[serve-sim] Helper pid ${e.pid} is bound to device ${e.device} which is no longer booted — killing stale helper.`);try{process.kill(e.pid,"SIGTERM")}catch{}try{G_(_)}catch{}return null}return e}catch{return null}}function q_(){let _=[];for(let e of w_()){let t=be(e);if(t)_.push(t)}return _}function Nt(_){ue(),Mt(g_(_.device),JSON.stringify(_,null,2))}function u_(_){if(_)try{G_(g_(_))}catch{}else for(let e of w_())try{G_(e)}catch{}}function Ki(){let _=a_.startsWith("/$bunfs/");if(!_&&l_(a_))return a_;if(!_){let s=Fe(Xi,"../bin/serve-sim-bin");if(l_(s))return s;throw Error(`serve-sim-bin not found. Run 'bun run build:swift' first.
55
+ Checked: ${a_}, ${s}`)}let e=I_(a_),t=Ui("sha256").update(e).digest("hex").slice(0,16),S=Fe(Ii(),"Library/Caches/serve-sim");Lt(S,{recursive:!0});let i=Fe(S,`serve-sim-bin-${t}`);if(!l_(i)){Mt(i,e),Mi(i,493);try{j(`codesign -s - -f ${JSON.stringify(i)}`,{stdio:"ignore"})}catch{}}return i}function Ut(){let _=null;try{_=j("xcode-select -p",{encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()}catch{}if(!_)return process.env;let e=`${_}/Library/PrivateFrameworks`;return{...process.env,DYLD_FRAMEWORK_PATH:process.env.DYLD_FRAMEWORK_PATH?`${e}:${process.env.DYLD_FRAMEWORK_PATH}`:e}}function It(){try{let _=j("xcrun simctl list devices booted -j",{encoding:"utf-8"}),e=JSON.parse(_);for(let t of Object.values(e.devices))for(let S of t)if(S.state==="Booted")return S.udid}catch{}return null}function Gt(){try{let _=j("xcrun simctl list devices -j",{encoding:"utf-8"}),e=JSON.parse(_),t=Object.keys(e.devices).filter((S)=>/SimRuntime\.iOS-/i.test(S)).sort((S,i)=>{let s=(S.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number),C=(i.match(/iOS-(\d+)-(\d+)/)??[]).slice(1).map(Number);return(C[0]??0)-(s[0]??0)||(C[1]??0)-(s[1]??0)});for(let S of t){let s=(e.devices[S]??[]).find((C)=>C.isAvailable!==!1&&/^iPhone\b/i.test(C.name));if(s)return{udid:s.udid,name:s.name}}}catch{}return null}function Vt(_){try{let e=j("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.udid===_)return i.name}catch{}return null}function X_(_){if(/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(_))return _;try{let e=j("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.name.toLowerCase()===_.toLowerCase())return i.udid}catch{}console.error(`Could not resolve device: ${_}`),process.exit(1)}function qt(_){try{let e=j("xcrun simctl list devices -j",{encoding:"utf-8"}),t=JSON.parse(e);for(let S of Object.values(t.devices))for(let i of S)if(i.udid===_)return i.state==="Booted"}catch{}return!1}function pe(_){try{return process.kill(_,0),!0}catch{return!1}}function ve(_){try{process.kill(_,"SIGTERM")}catch{return}let e=Date.now()+500;while(Date.now()<e)try{process.kill(_,0),h_(25)}catch{return}try{process.kill(_,"SIGKILL")}catch{}let t=Date.now()+500;while(Date.now()<t)try{process.kill(_,0),h_(25)}catch{return}}function xi(_){try{let e=j(`lsof -ti tcp:${_}`,{encoding:"utf-8",stdio:"pipe"}).trim();if(!e)return[];let t=process.pid;return e.split(`
56
+ `).map((S)=>parseInt(S,10)).filter((S)=>Number.isFinite(S)&&S!==t)}catch{return[]}}function zi(_){let e=xi(_);if(e.length===0)return;console.log(`\x1B[90mPort ${_} busy, killing holder pid(s): ${e.join(", ")}\x1B[0m`);for(let t of e)try{process.kill(t,"SIGKILL")}catch{}h_(100)}function ji(_){if(!qt(_))try{j(`xcrun simctl boot ${_}`,{encoding:"utf-8",stdio:"pipe"})}catch(e){let t=(e.stderr??e.message??"").toLowerCase();if(!t.includes("booted")&&!t.includes("current state"))throw Error(`Failed to boot device ${_}: ${e.stderr||e.message}`)}try{j("open -ga Simulator",{encoding:"utf-8",stdio:"pipe",timeout:3000})}catch{}}function Ji(){let _=Gi();for(let e of Object.values(_))for(let t of e??[])if(t.family==="IPv4"&&!t.internal)return t.address;return null}async function Xt(_){let e=new Set(q_().map((t)=>t.port));for(let t=_;t<_+100;t++){if(e.has(t))continue;if(await Ie(t))return t}throw Error(`No available port found in range ${_}-${_+99}`)}async function Zi(_){ji(_);try{j(`xcrun simctl bootstatus ${_} -b`,{encoding:"utf-8",stdio:"pipe",timeout:60000})}catch(e){if(!qt(_))console.error(`Device ${_} failed to reach booted state: ${e.stderr||e.message}`),process.exit(1)}}async function kt(_,e,t,S){let i=!1;for(let C=0;C<30;C++){if(!S())break;try{if((await fetch(`${e}/health`)).ok){i=!0;break}}catch{}await new Promise((A)=>setTimeout(A,100))}if(i){let C=Date.now()+8000;while(Date.now()<C){if(await new Promise((A)=>setTimeout(A,200)),!S()){i=!1;break}try{if(I_(t,"utf-8").includes("Capture started"))break}catch{}}}let s="";try{s=I_(t,"utf-8").trim()}catch{}return{ready:i,log:s}}async function Qi(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;ue();let A=Wt(s,"w"),r=mt(e,[t,"--port",String(S)],{detached:!0,stdio:["ignore",A,A],env:Ut()});r.unref(),Pt(A);let n=r.pid,y=!1;r.once("exit",()=>{y=!0});let{ready:o,log:B}=await kt(n,C,s,()=>!y&&pe(n));return{ready:o,pid:n,exited:y||!pe(n),log:B}}async function Yi(_){let{helperPath:e,udid:t,port:S,host:i,logFile:s}=_,C=`http://${i}:${S}`;ue();let A=Wt(s,"w"),r=mt(e,[t,"--port",String(S)],{detached:!1,stdio:["ignore",A,A],env:Ut()});Pt(A);let n=r.pid,y=!1;r.once("exit",()=>{y=!0});let{ready:o,log:B}=await kt(n,C,s,()=>!y&&pe(n));return{ready:o,child:r,log:B}}async function Kt(_,e,t){await Zi(_);let S="127.0.0.1",i=Ki(),s=qi(Y,`server-${_}.log`),C={helperPath:i,udid:_,port:e,host:S,logFile:s},A="",r=2;for(let y=1;y<=r;y++){if(zi(e),t.detach){let o=await Qi(C);if(o.ready){let B={pid:o.pid,port:e,device:_,url:`http://${S}:${e}`,streamUrl:`http://${S}:${e}/stream.mjpeg`,wsUrl:`ws://${S}:${e}/ws`};return Nt(B),{pid:o.pid}}ve(o.pid),A=o.log}else{let o=await Yi(C);if(o.ready){let B={pid:o.child.pid,port:e,device:_,url:`http://${S}:${e}`,streamUrl:`http://${S}:${e}/stream.mjpeg`,wsUrl:`ws://${S}:${e}/ws`};return Nt(B),{pid:o.child.pid,child:o.child}}ve(o.child.pid),A=o.log}if(y<r)await new Promise((o)=>setTimeout(o,500))}let n=A?`Helper failed:
57
+ ${A}`:"Helper process failed to start";console.error(n),process.exit(1)}async function _C(_,e,t){let S=_.length>0?_.map(X_):(()=>{let n=It();if(n)return[n];let y=Gt();if(!y)console.error("No device specified and no available iOS simulator found."),process.exit(1);if(!t)console.log(`No booted simulator booting ${y.name}...`);return[y.udid]})(),i=new Map,s=[],C=e;for(let n of S){let y=Z(n);if(y){if(!t){let O=Vt(n)??n;if(S.length>1)console.log(`
58
+ ==> ${O} (${n}) <==`);console.log(` Already running on port ${y.port}`),console.log(` Stream: ${y.streamUrl}`),console.log(` WebSocket: ${y.wsUrl}`)}s.push(y);continue}C=await Xt(C);let{pid:o,child:B}=await Kt(n,C,{detach:!1});if(B)i.set(n,B);let l="127.0.0.1",v={pid:o,port:C,device:n,url:`http://${l}:${C}`,streamUrl:`http://${l}:${C}/stream.mjpeg`,wsUrl:`ws://${l}:${C}/ws`};if(s.push(v),!t){let O=Vt(n)??n;if(S.length>1)console.log(`
59
+ ==> ${O} (${n}) <==`);console.log(` Stream: ${v.streamUrl}`),console.log(` WebSocket: ${v.wsUrl}`),console.log(` Port: ${C}`)}C++}if(s.length===1){let n=s[0];console.log(JSON.stringify({url:n.url,streamUrl:n.streamUrl,wsUrl:n.wsUrl,port:n.port,device:n.device}))}else console.log(JSON.stringify({devices:s.map((n)=>({url:n.url,streamUrl:n.streamUrl,wsUrl:n.wsUrl,port:n.port,device:n.device}))}));if(i.size===0)return;let A=!1,r=(n)=>{if(A)return;if(A=!0,!t)console.log(`
60
+ Shutting down...`);for(let[y,o]of i){let B=o.pid;if(B)ve(B);u_(y)}i.clear(),process.exit(n)};for(let[n,y]of i)y.on("exit",(o)=>{if(A)return;if(!t)console.error(`[${n}] Helper exited (code ${o})`);if(u_(n),i.delete(n),i.size===0)r(o??1)});process.on("SIGINT",()=>r(0)),process.on("SIGTERM",()=>r(0)),process.on("SIGHUP",()=>r(0)),process.on("exit",()=>{for(let[n,y]of i){try{if(y.pid)process.kill(y.pid,"SIGTERM")}catch{}try{u_(n)}catch{}}}),await new Promise(()=>{})}async function le(_,e){let t=_.length>0?_.map(X_):(()=>{let s=It();if(s)return[s];let C=Gt();if(!C)console.error("No device specified and no available iOS simulator found."),process.exit(1);return[C.udid]})(),S=[],i=e;for(let s of t){let C=Z(s);if(C){S.push(C);continue}i=await Xt(i),await Kt(s,i,{detach:!0});let A="127.0.0.1";S.push({pid:Z(s).pid,port:i,device:s,url:`http://${A}:${i}`,streamUrl:`http://${A}:${i}/stream.mjpeg`,wsUrl:`ws://${A}:${i}/ws`}),i++}return S}function eC(_){if(_.length===1){let e=_[0];console.log(JSON.stringify({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}else console.log(JSON.stringify({devices:_.map((e)=>({url:e.url,streamUrl:e.streamUrl,wsUrl:e.wsUrl,port:e.port,device:e.device}))}))}function tC(_){if(_){let t=X_(_),S=Z(t);if(!S)console.log(JSON.stringify({running:!1,device:t}));else console.log(JSON.stringify({running:!0,url:S.url,streamUrl:S.streamUrl,wsUrl:S.wsUrl,port:S.port,device:S.device,pid:S.pid}));return}let e=q_();if(e.length===0)console.log(JSON.stringify({running:!1}));else if(e.length===1){let t=e[0];console.log(JSON.stringify({running:!0,url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}))}else console.log(JSON.stringify({running:!0,streams:e.map((t)=>({url:t.url,streamUrl:t.streamUrl,wsUrl:t.wsUrl,port:t.port,device:t.device,pid:t.pid}))}))}function SC(_){if(_){let e=X_(_),t=Z(e);if(!t){console.log(JSON.stringify({disconnected:!0,device:e}));return}try{process.kill(t.pid,"SIGTERM")}catch{}u_(e),console.log(JSON.stringify({disconnected:!0,device:t.device}))}else{let e=q_();if(e.length===0){console.log(JSON.stringify({disconnected:!0,devices:[]}));return}let t=[];for(let S of e){try{process.kill(S.pid,"SIGTERM")}catch{}t.push(S.device)}u_(),console.log(JSON.stringify({disconnected:!0,devices:t}))}}async function sC(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=Z(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0];if(!i)console.error("Usage: serve-sim gesture '<json>'"),console.error(`Example: serve-sim gesture '{"type":"begin","x":0.5,"y":0.5}'`),process.exit(1);let s;try{s=JSON.parse(i)}catch{console.error("Invalid JSON:",i),process.exit(1)}return new Promise((C,A)=>{let r=new WebSocket(S.wsUrl);r.binaryType="arraybuffer",r.onopen=()=>{let n=new TextEncoder().encode(JSON.stringify(s)),y=new Uint8Array(1+n.length);y[0]=3,y.set(n,1),r.send(y),setTimeout(()=>{r.close(),C()},50)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),A(Error("WebSocket connection failed"))}})}async function iC(_){let e,t=[];for(let C=0;C<_.length;C++)if(_[C]==="--device"||_[C]==="-d")e=_[++C];else t.push(_[C]);let S=Z(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0],s=new Set(["portrait","portrait_upside_down","landscape_left","landscape_right"]);if(!i||!s.has(i))console.error(`Usage: serve-sim rotate <${[...s].join("|")}> [-d udid]`),process.exit(1);return new Promise((C,A)=>{let r=new WebSocket(S.wsUrl);r.binaryType="arraybuffer",r.onopen=()=>{let n=new TextEncoder().encode(JSON.stringify({orientation:i})),y=new Uint8Array(1+n.length);y[0]=7,y.set(n,1),r.send(y),setTimeout(()=>{r.close(),C()},50)},r.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),A(Error("WebSocket connection failed"))}})}async function CC(_){let e,t=[];for(let s=0;s<_.length;s++)if(_[s]==="--device"||_[s]==="-d")e=_[++s];else t.push(_[s]);let S=Z(e);if(!S)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);let i=t[0]??"home";return new Promise((s,C)=>{let A=new WebSocket(S.wsUrl);A.binaryType="arraybuffer",A.onopen=()=>{let r=new TextEncoder().encode(JSON.stringify({button:i})),n=new Uint8Array(1+r.length);n[0]=4,n.set(r,1),A.send(n),setTimeout(()=>{A.close(),s()},50)},A.onerror=()=>{console.error("Failed to connect to serve-sim server at",S.wsUrl),C(Error("WebSocket connection failed"))}})}async function rC(_){let e,t=[];for(let n=0;n<_.length;n++)if(_[n]==="--device"||_[n]==="-d")e=_[++n];else t.push(_[n]);let S=t[0],i=(t[1]??"").toLowerCase(),s=i==="on"||i==="1"||i==="true",C={blended:"debug_color_blended",copies:"debug_color_copies",copied:"debug_color_copies",misaligned:"debug_color_misaligned",offscreen:"debug_color_offscreen","slow-animations":"debug_slow_animations",slow:"debug_slow_animations"},A=S?C[S]??S:void 0;if(!A||!["on","off","1","0","true","false"].includes(i))console.error(`Usage: serve-sim ca-debug <option> <on|off> [-d udid]
61
+ option shortcuts: ${Object.keys(C).join(", ")}`),process.exit(1);let r=Z(e);if(!r)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((n,y)=>{let o=new WebSocket(r.wsUrl);o.binaryType="arraybuffer",o.onopen=()=>{let B=new TextEncoder().encode(JSON.stringify({option:A,enabled:s})),l=new Uint8Array(1+B.length);l[0]=8,l.set(B,1),o.send(l),setTimeout(()=>{o.close(),n()},50)},o.onerror=()=>{console.error("Failed to connect to serve-sim server at",r.wsUrl),y(Error("WebSocket connection failed"))}})}async function $C(_){let e;for(let S=0;S<_.length;S++)if(_[S]==="--device"||_[S]==="-d")e=_[++S];let t=Z(e);if(!t)console.error("No serve-sim server running. Run `serve-sim` first."),process.exit(1);return new Promise((S,i)=>{let s=new WebSocket(t.wsUrl);s.binaryType="arraybuffer",s.onopen=()=>{s.send(new Uint8Array([9])),setTimeout(()=>{s.close(),S()},50)},s.onerror=()=>{console.error("Failed to connect to serve-sim server at",t.wsUrl),i(Error("WebSocket connection failed"))}})}async function AC(_,e,t){let S;if(e.length>0)S=(await le(e,3100))[0]?.device;else{let o=q_();if(o.length>0)S=o[0]?.device;else console.log("Starting simulator stream..."),S=(await le(e,3100))[0]?.device}let{simMiddleware:i}=await Promise.resolve().then(() => (Ht(),ht)),s=i({basePath:"/",device:S}),C=t?1:50,A=_,r,n=!1;for(let o=0;o<C;o++){let B=_+o;try{await oC(B,s),A=B,n=!0;break}catch(l){if(r=l,l?.code!=="EADDRINUSE")break}}if(!n){if(r?.code==="EADDRINUSE")if(t)console.error(`Port ${_} is already in use. Pass a different --port or stop the other process.`);else console.error(`No available port found in range ${_}-${_+C-1}.`);else console.error(`Failed to start preview server: ${r?.message??r}`);process.exit(1)}let y=Ji();if(console.log(""),console.log(` - Local: http://localhost:${A}`),y)console.log(` - Network: http://${y}:${A}`);console.log(""),process.on("SIGINT",()=>process.exit(0)),process.on("SIGTERM",()=>process.exit(0)),await new Promise(()=>{})}function oC(_,e){return Ge({port:_,middleware:e})}function xt(){console.log(`
59
62
  serve-sim - Stream iOS Simulator to the browser
60
63
 
61
64
  Usage:
@@ -88,4 +91,4 @@ Examples:
88
91
  serve-sim --detach Start streaming in background (daemon)
89
92
  serve-sim --list Show all running streams
90
93
  serve-sim --kill Stop all streams
91
- `)}var X=process.argv.slice(2);if(X[0]==="gesture")await ji(X.slice(1)),process.exit(0);if(X[0]==="button")await Qi(X.slice(1)),process.exit(0);if(X[0]==="rotate")await Ji(X.slice(1)),process.exit(0);if(X[0]==="ca-debug")await Zi(X.slice(1)),process.exit(0);if(X[0]==="memory-warning")await Yi(X.slice(1)),process.exit(0);var p_,Xt=!1,It=!1,Gt=!1,kt=!1,Kt=!1,xt=!1,M_=[],zt,jt;for(let _=0;_<X.length;_++){let e=X[_];switch(e){case"--port":case"-p":p_=parseInt(X[++_]??"3100",10);break;case"--detach":case"-d":Xt=!0;break;case"--quiet":case"-q":It=!0;break;case"--no-preview":xt=!0;break;case"--list":case"-l":if(Gt=!0,X[_+1]&&!X[_+1].startsWith("-"))zt=X[++_];break;case"--kill":case"-k":if(kt=!0,X[_+1]&&!X[_+1].startsWith("-"))jt=X[++_];break;case"--help":case"-h":case"help":Kt=!0;break;default:if(!e.startsWith("-"))M_.push(e);else console.error(`Unknown flag: ${e}`),qt(),process.exit(1)}}if(Kt)qt(),process.exit(0);if(Gt)xi(zt),process.exit(0);if(kt)zi(jt),process.exit(0);if(Xt){let _=await le(M_,p_??3100);Ki(_)}else if(xt)await ki(M_,p_??3100,It);else await _C(p_??3200,M_,p_!==void 0);
94
+ `)}var G=process.argv.slice(2);if(G[0]==="gesture")await sC(G.slice(1)),process.exit(0);if(G[0]==="button")await CC(G.slice(1)),process.exit(0);if(G[0]==="rotate")await iC(G.slice(1)),process.exit(0);if(G[0]==="ca-debug")await rC(G.slice(1)),process.exit(0);if(G[0]==="memory-warning")await $C(G.slice(1)),process.exit(0);var v_,zt=!1,jt=!1,Jt=!1,Zt=!1,Qt=!1,Yt=!1,U_=[],_S,eS;for(let _=0;_<G.length;_++){let e=G[_];switch(e){case"--port":case"-p":v_=parseInt(G[++_]??"3100",10);break;case"--detach":case"-d":zt=!0;break;case"--quiet":case"-q":jt=!0;break;case"--no-preview":Yt=!0;break;case"--list":case"-l":if(Jt=!0,G[_+1]&&!G[_+1].startsWith("-"))_S=G[++_];break;case"--kill":case"-k":if(Zt=!0,G[_+1]&&!G[_+1].startsWith("-"))eS=G[++_];break;case"--help":case"-h":case"help":Qt=!0;break;default:if(!e.startsWith("-"))U_.push(e);else console.error(`Unknown flag: ${e}`),xt(),process.exit(1)}}if(Qt)xt(),process.exit(0);if(Jt)tC(_S),process.exit(0);if(Zt)SC(eS),process.exit(0);if(zt){let _=await le(U_,v_??3100);eC(_)}else if(Yt)await _C(U_,v_??3100,jt);else await AC(v_??3200,U_,v_!==void 0);